diff --git a/.github/workflows/add-article.yml b/.github/workflows/add-article.yml index 3546ee2cf..35df9e159 100644 --- a/.github/workflows/add-article.yml +++ b/.github/workflows/add-article.yml @@ -72,7 +72,7 @@ jobs: if not slug: # Title was only punctuation / non-ASCII — fall back to the issue number. slug = f"article-{os.environ['ISSUE_NUMBER']}" - filename = f"{today.strftime('%Y-%m-%d')}-{slug}.md" + route = f"/articles/{today.strftime('%Y-%m-%d')}-{slug}/" fm = { 'title': title, @@ -80,6 +80,7 @@ jobs: 'authors': [author] if author else [], 'date': date_str, 'description': description, + 'url': route, } if category: fm['categories'] = [category] @@ -89,8 +90,8 @@ jobs: front = yaml.safe_dump(fm, default_flow_style=False, allow_unicode=True, sort_keys=False) document = '---\n' + front + '---\n\n' + content + '\n' - filepath = f'content/articles/{filename}' - os.makedirs('content/articles', exist_ok=True) + filepath = f"content/articles/{today.strftime('%Y')}/{today.strftime('%m')}/{slug}/index.md" + os.makedirs(os.path.dirname(filepath), exist_ok=True) with open(filepath, 'w', encoding='utf-8') as f: f.write(document) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 879fdcd3a..a963dbf0d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -97,6 +97,9 @@ jobs: --minify \ --destination public + - name: Validate Article bundle output + run: npm run validate:articles + - name: Validate iCalendar feed run: node scripts/validate-calendar.mjs public/calendar/calendar.ics diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 662c9aa30..873761596 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,10 +16,10 @@ If you're not comfortable with Git, you can pitch or submit your article through 1. Fork this repository 2. Create a new branch for your article -3. Add your article as a Markdown file in `content/articles/` using this naming convention: +3. Create an Article leaf bundle beneath its publication year and month: ``` - content/articles/YYYY-MM-DD-your-article-slug.md + content/articles/YYYY/MM/your-article-slug/index.md ``` 4. Use this front matter template: @@ -32,6 +32,7 @@ If you're not comfortable with Git, you can pitch or submit your article through authors: - Your Name date: "YYYY-MM-DDT00:00:00+00:00" + url: /articles/YYYY-MM-DD-your-article-slug/ categories: - Category Name tags: @@ -42,10 +43,12 @@ If you're not comfortable with Git, you can pitch or submit your article through Your article content in Markdown goes here. ``` - > Tip: If you have the [Front Matter CMS](https://frontmatter.codes/) extension - > installed in VS Code, run **"Create content"** in the `content/articles` - > folder — it scaffolds the file name (`YYYY-MM-DD-slug.md`) and all of the - > front matter fields above for you. + > Tip: create a new Article with Hugo from the repository root. Set `$slug` to a lowercase, hyphenated title, then replace the generated front matter values: + > + > ```powershell + > $date = Get-Date + > hugo new "articles/$($date.ToString('yyyy'))/$($date.ToString('MM'))/$slug/index.md" + > ``` 5. Submit a pull request with a brief description of your article diff --git a/archetypes/articles.md b/archetypes/articles.md index 1bf867f56..bbd8ddf6f 100644 --- a/archetypes/articles.md +++ b/archetypes/articles.md @@ -5,6 +5,7 @@ author: "" authors: - "" date: '{{ .Date }}' +url: '/articles/{{ .Date.Format "2006-01-02" }}-{{ .File.ContentBaseName }}/' categories: [] tags: [] draft: true diff --git a/content/articles/2010-09-21-make-ps1exewrapper.md b/content/articles/2010-09-21-make-ps1exewrapper.md deleted file mode 100644 index 33eaa07f3..000000000 --- a/content/articles/2010-09-21-make-ps1exewrapper.md +++ /dev/null @@ -1,1270 +0,0 @@ ---- -title: Make-PS1ExeWrapper -authors: - - Keith Hill -date: "2010-09-21T17:39:16+00:00" -aliases: - - /2010/09/make-ps1exewrapper/ ---- - -Occasionally folks want to be able to create an EXE from PoweShell.  PowerShell can"™t do this by itself but this can be done with PowerShell script.  Essentially what you can do is create a simple console EXE program that embeds the script as a resource and the EXE, upon loading retrieves the script and throws it at a PowerShell runspace to execute.  Here"™s the script for a feasibility test of doing this very thing. - - - - - - Note that this script depends on Write-GZip from the [PowerShell Community Extensions](http://pscx.codeplex.com/). - - - - - - **Updated 6-21-2011:** The migration from Windows Live Spaces to WordPress seems to have messed with the formatting of the script.  You can now [download the script from my SkyDrive](https://skydrive.live.com/?cid=5a8d2641e0963a97&sc=documents&uc=2&id=5A8D2641E0963A97%217251#). - - - - - - **Updated 3-4-2012:** I have added the ability to handle positional parameters passed into the EXE as well as a -NET40 switch to compile using the v4.0 C# compiler.  The script is beside the original and is named Make-PS1ExeWrapperWithArgs.ps1: - - - - - - -#requires -version 2.0 - <# - .SYNOPSIS - Creates an EXE wrapper from a PowerShell script by compressing the script and embedding into - a newly generated assembly. - .DESCRIPTION - Creates an EXE wrapper from a PowerShell script by compressing the script and embedding into - a newly generated assembly. - .PARAMETER Path - The path to the . - .PARAMETER LiteralPath - Specifies a path to one or more locations. Unlike Path, the value of LiteralPath is used exactly as it - is typed. No characters are interpreted as wildcards. If the path includes escape characters, enclose - it in single quotation marks. Single quotation marks tell Windows PowerShell not to interpret any - characters as escape sequences. - .PARAMETER OutputAssembly - The name (including path) of the EXE to generate. - .PARAMETER IconPath - The path to an optional icon to be embedded as the application icon for the EXE. - .EXAMPLE - C:\PS> .\Make-PS1ExeWrapper.ps1 .\MyScript.ps1 .\MyScript.exe .\app.ico - This creates an console application called MyScript.exe that internally hosts the PowerShell - engine and runs the script specified by MyScript.ps1.  Optionally the file app.ico is - embedded into the EXE as the application's icon. - .NOTES - Author: Keith Hill - Date:   Aug 7, 2010 - Issues: This implementation is more of a feasibility test and isn't fully functional.  It doesn't - support an number of PSHostUserInterface members as well as a number of PSHostRawUserInterface - members.  This approach also suffers from the same problem of running script "interactively" - and not loading it from a file. That is, the entire script output is run through Out-Default - and PowerShell gets confused.  It formats the first types it sees correctly but after that the - formatting is off.  To correct this, you have to append | Out-Default where you script outputs - to the host without using a Write-* cmdlet e.g.: - - - - - - - MyScript.ps1: - ——————————- - Get-Process svchost - Get-Date | Out-Default - Dir C:\  | Out-Default - Dir c:\idontexist | Out-Default - $DebugPreference = 'Continue' - $VerbosePreference = 'Continue' - Write-Host    "host" - Write-Warning "warning" - Write-Verbose "verbose" - Write-Debug   "debug" - Write-Error   "error" - #> - [CmdletBinding(DefaultParameterSetName="Path")] - param( - [Parameter(Mandatory=$true, Position=0, ParameterSetName="Path", - ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, - HelpMessage="Path to bitmap file")] - [ValidateNotNullOrEmpty()] - [string[]] - $Path, - - - - - - [Alias("PSPath")] - [Parameter(Mandatory=$true, Position=0, ParameterSetName="LiteralPath", - ValueFromPipelineByPropertyName=$true, - HelpMessage="Path to bitmap file")] - [ValidateNotNullOrEmpty()] - [string[]] - $LiteralPath, - - - - - - -    [Parameter(Mandatory = $true, Position = 1)] - [string] - $OutputAssembly, - - - - - - - [Parameter(Position = 2)] - [string] - $IconPath - ) - - - - - - -Begin { - Set-StrictMode -Version latest - - - - - - - $src = @' - using System; - using System.Collections.Generic; - using System.Collections.ObjectModel; - using System.Globalization; - using System.IO; - using System.IO.Compression; - using System.Management.Automation; - using System.Management.Automation.Host; - using System.Management.Automation.Runspaces; - using System.Reflection; - using System.Security; - using System.Text; - using System.Threading; - - - - - - -namespace PS1ToExeTemplate - { - class Program - { - private static object _powerShellLock = new object(); - private static readonly Host _host = new Host(); - private static PowerShell _powerShellEngine; - - - - - - - -        static void Main(string[] args) - { - Console.CancelKeyPress += Console_CancelKeyPress; - Console.TreatControlCAsInput = false; - - - - - - - -            string script = GetScript(); - RunScript(script, args, null); - } - - - - - - - -        private static string GetScript() - { - string script = String.Empty; - - - - - - - -            Assembly assembly = Assembly.GetExecutingAssembly(); - using (Stream stream = assembly.GetManifestResourceStream("Resources.Script.ps1.gz")) - { - var gZipStream = new GZipStream(stream, CompressionMode.Decompress, true); - var streamReader = new StreamReader(gZipStream); - script = streamReader.ReadToEnd(); - } - - - - - - - -            return script; - } - - - - - - - -        private static void RunScript(string script, string[] args, object input) - { - lock (_powerShellLock) - { - _powerShellEngine = PowerShell.Create(); - } - - - - - - - -            try - { - _powerShellEngine.Runspace = RunspaceFactory.CreateRunspace(_host); - _powerShellEngine.Runspace.Open(); - _powerShellEngine.AddScript(script); - _powerShellEngine.AddCommand("Out-Default"); - _powerShellEngine.Commands.Commands[0].MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output); - - - - - - - -                if (input != null) - { - _powerShellEngine.Invoke(new[] { input }); - } - else - { - _powerShellEngine.Invoke(); - } - } - finally - { - lock (_powerShellLock) - { - _powerShellEngine.Dispose(); - _powerShellEngine = null; - } - } - } - - - - - - - -        private static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e) - { - try - { - lock (_powerShellLock) - { - if (_powerShellEngine != null && _powerShellEngine.InvocationStateInfo.State == PSInvocationState.Running) - { - _powerShellEngine.Stop(); - } - } - e.Cancel = true; - } - catch (Exception ex) - { - _host.UI.WriteErrorLine(ex.ToString()); - } - } - } - - - - - - - -    class Host : PSHost - { - private PSHostUserInterface _psHostUserInterface = new HostUserInterface(); - - - - - - - -        public override void SetShouldExit(int exitCode) - { - Environment.Exit(exitCode); - } - - - - - - - -        public override void EnterNestedPrompt() - { - throw new NotImplementedException(); - } - - - - - - - -        public override void ExitNestedPrompt() - { - throw new NotImplementedException(); - } - - - - - - - -        public override void NotifyBeginApplication() - { - } - - - - - - - -        public override void NotifyEndApplication() - { - } - - - - - - - -        public override string Name - { - get { return "PSCX-PS1ToExeHost"; } - } - - - - - - - -        public override Version Version - { - get { return new Version(1, 0); } - } - - - - - - - -        public override Guid InstanceId - { - get { return new Guid("E4673B42-84B6-4C43-9589-95FAB8E00EB2″); } - } - - - - - - - -        public override PSHostUserInterface UI - { - get { return _psHostUserInterface; } - } - - - - - - - -        public override CultureInfo CurrentCulture - { - get { return Thread.CurrentThread.CurrentCulture; } - } - - - - - - - -        public override CultureInfo CurrentUICulture - { - get { return Thread.CurrentThread.CurrentUICulture; } - } - } - - - - - - - -    class HostUserInterface : PSHostUserInterface, IHostUISupportsMultipleChoiceSelection - { - private PSHostRawUserInterface _psRawUserInterface = new HostRawUserInterface(); - - - - - - - -        public override PSHostRawUserInterface RawUI - { - get { return _psRawUserInterface; } - } - - - - - - - -        public override string ReadLine() - { - return Console.ReadLine(); - } - - - - - - - -        public override SecureString ReadLineAsSecureString() - { - throw new NotImplementedException(); - } - - - - - - - -        public override void Write(string value) - { - string output = value ?? "null"; - Console.Write(output); - } - - - - - - - -        public override void Write(ConsoleColor foregroundColor, ConsoleColor backgroundColor, string value) - { - string output = value ?? "null"; - var origFgColor = Console.ForegroundColor; - var origBgColor = Console.BackgroundColor; - Console.ForegroundColor = foregroundColor; - Console.BackgroundColor = backgroundColor; - Console.Write(output); - Console.ForegroundColor = origFgColor; - Console.BackgroundColor = origBgColor; - } - - - - - - - -        public override void WriteLine(string value) - { - string output = value ?? "null"; - Console.WriteLine(output); - } - - - - - - - -        public override void WriteErrorLine(string value) - { - string output = value ?? "null"; - var origFgColor = Console.ForegroundColor; - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine(output); - Console.ForegroundColor = origFgColor; - } - - - - - - - -        public override void WriteDebugLine(string message) - { - WriteYellowAnnotatedLine(message, "DEBUG"); - } - - - - - - - -        public override void WriteVerboseLine(string message) - { - WriteYellowAnnotatedLine(message, "VERBOSE"); - } - - - - - - - -        public override void WriteWarningLine(string message) - { - WriteYellowAnnotatedLine(message, "WARNING"); - } - - - - - - - -        private void WriteYellowAnnotatedLine(string message, string annotation) - { - string output = message ?? "null"; - var origFgColor = Console.ForegroundColor; - var origBgColor = Console.BackgroundColor; - Console.ForegroundColor = ConsoleColor.Yellow; - Console.BackgroundColor = ConsoleColor.Black; - WriteLine(String.Format(CultureInfo.CurrentCulture, "{0}: {1}", annotation, output)); - Console.ForegroundColor = origFgColor; - Console.BackgroundColor = origBgColor; - } - - - - - - - -        public override void WriteProgress(long sourceId, ProgressRecord record) - { - throw new NotImplementedException(); - } - - - - - - - -        public override Dictionary Prompt(string caption, string message, Collection descriptions) - { - if (String.IsNullOrEmpty(caption) && String.IsNullOrEmpty(message) && descriptions.Count > 0) - { - Console.Write(descriptions[0].Name + ": "); - } - else - { - this.Write(ConsoleColor.DarkCyan, ConsoleColor.Black, caption + "\n" + message + " "); - } - var results = new Dictionary(); - foreach (FieldDescription fd in descriptions) - { - string[] label = GetHotkeyAndLabel(fd.Label); - this.WriteLine(label[1]); - string userData = Console.ReadLine(); - if (userData == null) - { - return null; - } - - - - - - - -                results[fd.Name] = PSObject.AsPSObject(userData); - } - - - - - - - -            return results; - } - - - - - - - -        public override PSCredential PromptForCredential(string caption, string message, string userName, string targetName) - { - throw new NotImplementedException(); - } - - - - - - - -        public override PSCredential PromptForCredential(string caption, string message, string userName, string targetName, PSCredentialTypes allowedCredentialTypes, PSCredentialUIOptions options) - { - throw new NotImplementedException(); - } - - - - - - - -        public override int PromptForChoice(string caption, string message, Collection choices, int defaultChoice) - { - // Write the caption and message strings in Blue. - this.WriteLine(ConsoleColor.Blue, ConsoleColor.Black, caption + "\n" + message + "\n"); - - - - - - - -            // Convert the choice collection into something that is - // easier to work with. See the BuildHotkeysAndPlainLabels - // method for details. - string[,] promptData = BuildHotkeysAndPlainLabels(choices); - - - - - - - -            // Format the overall choice prompt string to display. - var sb = new StringBuilder(); - for (int element = 0; element < choices.Count; element++) - { - sb.Append(String.Format(CultureInfo.CurrentCulture, "|{0}> {1} ", promptData[0, element], promptData[1, element])); - } - - - - - - - -            sb.Append(String.Format(CultureInfo.CurrentCulture, "[Default is ({0}]", promptData[0, defaultChoice])); - - - - - - - -            // Read prompts until a match is made, the default is - // chosen, or the loop is interrupted with ctrl-C. - while (true) - { - this.WriteLine(sb.ToString()); - string data = Console.ReadLine().Trim().ToUpper(CultureInfo.CurrentCulture); - - - - - - - -                // If the choice string was empty, use the default selection. - if (data.Length == 0) - { - return defaultChoice; - } - - - - - - - -                // See if the selection matched and return the - // corresponding index if it did. - for (int i = 0; i < choices.Count; i++) - { - if (promptData[0, i] == data) - { - return i; - } - } - - - - - - - -                this.WriteErrorLine("Invalid choice: " + data); - } - } - - - - - - - -        #region IHostUISupportsMultipleChoiceSelection Members - - - - - - - -        public Collection PromptForChoice(string caption, string message, Collection choices, IEnumerable defaultChoices) - { - this.WriteLine(ConsoleColor.Blue, ConsoleColor.Black, caption + "\n" + message + "\n"); - - - - - - - -            string[,] promptData = BuildHotkeysAndPlainLabels(choices); - - - - - - - -            var sb = new StringBuilder(); - for (int element = 0; element < choices.Count; element++) - { - sb.Append(String.Format(CultureInfo.CurrentCulture, "|{0}> {1} ", promptData[0, element], promptData[1, element])); - } - - - - - - - -            var defaultResults = new Collection(); - if (defaultChoices != null) - { - int countDefaults = 0; - foreach (int defaultChoice in defaultChoices) - { - ++countDefaults; - defaultResults.Add(defaultChoice); - } - - - - - - - -                if (countDefaults != 0) - { - sb.Append(countDefaults == 1 ? "[Default choice is " : "[Default choices are "); - foreach (int defaultChoice in defaultChoices) - { - sb.AppendFormat(CultureInfo.CurrentCulture, "\"{0}\",", promptData[0, defaultChoice]); - } - sb.Remove(sb.Length – 1, 1); - sb.Append("]"); - } - } - - - - - - - -            this.WriteLine(ConsoleColor.Cyan, ConsoleColor.Black, sb.ToString()); - - - - - - - -            var results = new Collection(); - while (true) - { - ReadNext: - string prompt = string.Format(CultureInfo.CurrentCulture, "Choice[{0}]:", results.Count); - this.Write(ConsoleColor.Cyan, ConsoleColor.Black, prompt); - string data = Console.ReadLine().Trim().ToUpper(CultureInfo.CurrentCulture); - - - - - - - -                if (data.Length == 0) - { - return (results.Count == 0) ? defaultResults : results; - } - - - - - - - -                for (int i = 0; i < choices.Count; i++) - { - if (promptData[0, i] == data) - { - results.Add(i); - goto ReadNext; - } - } - - - - - - - -                this.WriteErrorLine("Invalid choice: " + data); - } - } - - - - - - - -        #endregion - - - - - - - -        private static string[,] BuildHotkeysAndPlainLabels(Collection choices) - { - // Allocate the result array - string[,] hotkeysAndPlainLabels = new string[2, choices.Count]; - - - - - - - -            for (int i = 0; i < choices.Count; ++i) - { - string[] hotkeyAndLabel = GetHotkeyAndLabel(choices[i].Label); - hotkeysAndPlainLabels[0, i] = hotkeyAndLabel[0]; - hotkeysAndPlainLabels[1, i] = hotkeyAndLabel[1]; - } - - - - - - - -            return hotkeysAndPlainLabels; - } - - - - - - - -        private static string[] GetHotkeyAndLabel(string input) - { - string[] result = new string[] { String.Empty, String.Empty }; - string[] fragments = input.Split('&'); - if (fragments.Length == 2) - { - if (fragments[1].Length > 0) - { - result[0] = fragments[1][0].ToString(). - ToUpper(CultureInfo.CurrentCulture); - } - - - - - - - -                result[1] = (fragments[0] + fragments[1]).Trim(); - } - else - { - result[1] = input; - } - - - - - - - -            return result; - } - } - - - - - - - -    class HostRawUserInterface : PSHostRawUserInterface - { - public override KeyInfo ReadKey(ReadKeyOptions options) - { - throw new NotImplementedException(); - } - - - - - - - -        public override void FlushInputBuffer() - { - } - - - - - - - -        public override void SetBufferContents(Coordinates origin, BufferCell[,] contents) - { - throw new NotImplementedException(); - } - - - - - - - -        public override void SetBufferContents(Rectangle rectangle, BufferCell fill) - { - throw new NotImplementedException(); - } - - - - - - - -        public override BufferCell[,] GetBufferContents(Rectangle rectangle) - { - throw new NotImplementedException(); - } - - - - - - - -        public override void ScrollBufferContents(Rectangle source, Coordinates destination, Rectangle clip, BufferCell fill) - { - throw new NotImplementedException(); - } - - - - - - - -        public override ConsoleColor ForegroundColor - { - get { return Console.ForegroundColor; } - set { Console.ForegroundColor = value; } - } - - - - - - - -        public override ConsoleColor BackgroundColor - { - get { return Console.BackgroundColor; } - set { Console.BackgroundColor = value; } - } - - - - - - - -        public override Coordinates CursorPosition - { - get { return new Coordinates(Console.CursorLeft, Console.CursorTop); } - set { Console.SetCursorPosition(value.X, value.Y); } - } - - - - - - - -        public override Coordinates WindowPosition - { - get { return new Coordinates(Console.WindowLeft, Console.WindowTop); } - set { Console.SetWindowPosition(value.X, value.Y); } - } - - - - - - - -        public override int CursorSize - { - get { return Console.CursorSize; } - set { Console.CursorSize = value; } - } - - - - - - - -        public override Size BufferSize - { - get { return new Size(Console.BufferWidth, Console.BufferHeight); } - set { Console.SetBufferSize(value.Width, value.Height); } - } - - - - - - - -        public override Size WindowSize - { - get { return new Size(Console.WindowWidth, Console.WindowHeight); } - set { Console.SetWindowSize(value.Width, value.Height); } - } - - - - - - - -        public override Size MaxWindowSize - { - get { return new Size(Console.LargestWindowWidth, Console.LargestWindowHeight); } - } - - - - - - - -        public override Size MaxPhysicalWindowSize - { - get { return new Size(Console.LargestWindowWidth, Console.LargestWindowHeight); } - } - - - - - - - -        public override bool KeyAvailable - { - get { return Console.KeyAvailable; } - } - - - - - - - -        public override string WindowTitle - { - get { return Console.Title; } - set { Console.Title = value; } - } - } - } - '@ - }    - - - - - - - -Process { - if ($psCmdlet.ParameterSetName -eq "Path") - { - # In the -Path (non-literal) case we may need to resolve a wildcarded path - $resolvedPaths = @($Path | Resolve-Path | Convert-Path) - } - else - { - # Must be -LiteralPath - $resolvedPaths = @($LiteralPath | Convert-Path) - } - - - - - - - foreach ($rpath in $resolvedPaths) - { - Write-Verbose "Processing $rpath" - - - - - - -        $gzItem = Get-ChildItem $rpath | Write-GZip -Quiet - $resourcePath = "$($gzItem.Directory)\Resources.Script.ps1.gz" - if (Test-Path $resourcePath) { Remove-Item $resourcePath } - Rename-Item $gzItem $resourcePath - - - - - - - # Configure the compiler parameters - $referenceAssemblies = 'System.dll',([psobject].Assembly.Location) - $outputPath = $OutputAssembly - if (![IO.Path]::IsPathRooted($outputPath)) - { - $outputPath = [io.path]::GetFullPath((Join-Path $pwd $outputPath)) - } - if ($rpath -eq $outputPath) - { - throw 'Oops, you don"t really want to overwrite your script with an EXE.' - } - - - - - - -        $cp = new-object System.CodeDom.Compiler.CompilerParameters $referenceAssemblies,$outputPath,$true - $cp.TempFiles = new-object System.CodeDom.Compiler.TempFileCollection ([IO.Path]::GetTempPath()) - $cp.GenerateExecutable = $true - $cp.GenerateInMemory   = $false - $cp.IncludeDebugInformation = $true - if ($IconPath) - { - $rIconPath = Resolve-Path $IconPath - $cp.CompilerOptions = " /win32icon:$rIconPath" - } - [void]$cp.EmbeddedResources.Add($resourcePath) - - - - - - - # Create the C# codedom compiler - $dict = new-object 'System.Collections.Generic.Dictionary[string,string]' - $dict.Add('CompilerVersion','v3.5′) - $provider = new-object Microsoft.CSharp.CSharpCodeProvider $dict - - - - - - # Compile the source and report errors - $results = $provider.CompileAssemblyFromSource($cp, $src) - if ($results.Errors.Count) - { - $errorLines = "" - foreach ($error in $results.Errors) - { - $errorLines += "`n`t" + $error.Line + ":`t" + $error.ErrorText - } - Write-Error $errorLines - } - } - } - - - - - -[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/4/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/4/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=4&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2010/09/_index.md b/content/articles/2010/09/_index.md new file mode 100644 index 000000000..dcadc3edb --- /dev/null +++ b/content/articles/2010/09/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from September 2010" +description: "PowerShell.org Articles published in September 2010." +--- diff --git a/content/articles/2010/09/make-ps1exewrapper/index.md b/content/articles/2010/09/make-ps1exewrapper/index.md new file mode 100644 index 000000000..a8494c924 --- /dev/null +++ b/content/articles/2010/09/make-ps1exewrapper/index.md @@ -0,0 +1,1271 @@ +--- +url: /articles/2010-09-21-make-ps1exewrapper/ +title: Make-PS1ExeWrapper +authors: + - Keith Hill +date: "2010-09-21T17:39:16+00:00" +aliases: + - /2010/09/make-ps1exewrapper/ +--- + +Occasionally folks want to be able to create an EXE from PoweShell.  PowerShell can"™t do this by itself but this can be done with PowerShell script.  Essentially what you can do is create a simple console EXE program that embeds the script as a resource and the EXE, upon loading retrieves the script and throws it at a PowerShell runspace to execute.  Here"™s the script for a feasibility test of doing this very thing. + + + + + + Note that this script depends on Write-GZip from the [PowerShell Community Extensions](http://pscx.codeplex.com/). + + + + + + **Updated 6-21-2011:** The migration from Windows Live Spaces to WordPress seems to have messed with the formatting of the script.  You can now [download the script from my SkyDrive](https://skydrive.live.com/?cid=5a8d2641e0963a97&sc=documents&uc=2&id=5A8D2641E0963A97%217251#). + + + + + + **Updated 3-4-2012:** I have added the ability to handle positional parameters passed into the EXE as well as a -NET40 switch to compile using the v4.0 C# compiler.  The script is beside the original and is named Make-PS1ExeWrapperWithArgs.ps1: + + + + + + +#requires -version 2.0 + <# + .SYNOPSIS + Creates an EXE wrapper from a PowerShell script by compressing the script and embedding into + a newly generated assembly. + .DESCRIPTION + Creates an EXE wrapper from a PowerShell script by compressing the script and embedding into + a newly generated assembly. + .PARAMETER Path + The path to the . + .PARAMETER LiteralPath + Specifies a path to one or more locations. Unlike Path, the value of LiteralPath is used exactly as it + is typed. No characters are interpreted as wildcards. If the path includes escape characters, enclose + it in single quotation marks. Single quotation marks tell Windows PowerShell not to interpret any + characters as escape sequences. + .PARAMETER OutputAssembly + The name (including path) of the EXE to generate. + .PARAMETER IconPath + The path to an optional icon to be embedded as the application icon for the EXE. + .EXAMPLE + C:\PS> .\Make-PS1ExeWrapper.ps1 .\MyScript.ps1 .\MyScript.exe .\app.ico + This creates an console application called MyScript.exe that internally hosts the PowerShell + engine and runs the script specified by MyScript.ps1.  Optionally the file app.ico is + embedded into the EXE as the application's icon. + .NOTES + Author: Keith Hill + Date:   Aug 7, 2010 + Issues: This implementation is more of a feasibility test and isn't fully functional.  It doesn't + support an number of PSHostUserInterface members as well as a number of PSHostRawUserInterface + members.  This approach also suffers from the same problem of running script "interactively" + and not loading it from a file. That is, the entire script output is run through Out-Default + and PowerShell gets confused.  It formats the first types it sees correctly but after that the + formatting is off.  To correct this, you have to append | Out-Default where you script outputs + to the host without using a Write-* cmdlet e.g.: + + + + + + + MyScript.ps1: + ——————————- + Get-Process svchost + Get-Date | Out-Default + Dir C:\  | Out-Default + Dir c:\idontexist | Out-Default + $DebugPreference = 'Continue' + $VerbosePreference = 'Continue' + Write-Host    "host" + Write-Warning "warning" + Write-Verbose "verbose" + Write-Debug   "debug" + Write-Error   "error" + #> + [CmdletBinding(DefaultParameterSetName="Path")] + param( + [Parameter(Mandatory=$true, Position=0, ParameterSetName="Path", + ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, + HelpMessage="Path to bitmap file")] + [ValidateNotNullOrEmpty()] + [string[]] + $Path, + + + + + + [Alias("PSPath")] + [Parameter(Mandatory=$true, Position=0, ParameterSetName="LiteralPath", + ValueFromPipelineByPropertyName=$true, + HelpMessage="Path to bitmap file")] + [ValidateNotNullOrEmpty()] + [string[]] + $LiteralPath, + + + + + + +    [Parameter(Mandatory = $true, Position = 1)] + [string] + $OutputAssembly, + + + + + + + [Parameter(Position = 2)] + [string] + $IconPath + ) + + + + + + +Begin { + Set-StrictMode -Version latest + + + + + + + $src = @' + using System; + using System.Collections.Generic; + using System.Collections.ObjectModel; + using System.Globalization; + using System.IO; + using System.IO.Compression; + using System.Management.Automation; + using System.Management.Automation.Host; + using System.Management.Automation.Runspaces; + using System.Reflection; + using System.Security; + using System.Text; + using System.Threading; + + + + + + +namespace PS1ToExeTemplate + { + class Program + { + private static object _powerShellLock = new object(); + private static readonly Host _host = new Host(); + private static PowerShell _powerShellEngine; + + + + + + + +        static void Main(string[] args) + { + Console.CancelKeyPress += Console_CancelKeyPress; + Console.TreatControlCAsInput = false; + + + + + + + +            string script = GetScript(); + RunScript(script, args, null); + } + + + + + + + +        private static string GetScript() + { + string script = String.Empty; + + + + + + + +            Assembly assembly = Assembly.GetExecutingAssembly(); + using (Stream stream = assembly.GetManifestResourceStream("Resources.Script.ps1.gz")) + { + var gZipStream = new GZipStream(stream, CompressionMode.Decompress, true); + var streamReader = new StreamReader(gZipStream); + script = streamReader.ReadToEnd(); + } + + + + + + + +            return script; + } + + + + + + + +        private static void RunScript(string script, string[] args, object input) + { + lock (_powerShellLock) + { + _powerShellEngine = PowerShell.Create(); + } + + + + + + + +            try + { + _powerShellEngine.Runspace = RunspaceFactory.CreateRunspace(_host); + _powerShellEngine.Runspace.Open(); + _powerShellEngine.AddScript(script); + _powerShellEngine.AddCommand("Out-Default"); + _powerShellEngine.Commands.Commands[0].MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output); + + + + + + + +                if (input != null) + { + _powerShellEngine.Invoke(new[] { input }); + } + else + { + _powerShellEngine.Invoke(); + } + } + finally + { + lock (_powerShellLock) + { + _powerShellEngine.Dispose(); + _powerShellEngine = null; + } + } + } + + + + + + + +        private static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e) + { + try + { + lock (_powerShellLock) + { + if (_powerShellEngine != null && _powerShellEngine.InvocationStateInfo.State == PSInvocationState.Running) + { + _powerShellEngine.Stop(); + } + } + e.Cancel = true; + } + catch (Exception ex) + { + _host.UI.WriteErrorLine(ex.ToString()); + } + } + } + + + + + + + +    class Host : PSHost + { + private PSHostUserInterface _psHostUserInterface = new HostUserInterface(); + + + + + + + +        public override void SetShouldExit(int exitCode) + { + Environment.Exit(exitCode); + } + + + + + + + +        public override void EnterNestedPrompt() + { + throw new NotImplementedException(); + } + + + + + + + +        public override void ExitNestedPrompt() + { + throw new NotImplementedException(); + } + + + + + + + +        public override void NotifyBeginApplication() + { + } + + + + + + + +        public override void NotifyEndApplication() + { + } + + + + + + + +        public override string Name + { + get { return "PSCX-PS1ToExeHost"; } + } + + + + + + + +        public override Version Version + { + get { return new Version(1, 0); } + } + + + + + + + +        public override Guid InstanceId + { + get { return new Guid("E4673B42-84B6-4C43-9589-95FAB8E00EB2″); } + } + + + + + + + +        public override PSHostUserInterface UI + { + get { return _psHostUserInterface; } + } + + + + + + + +        public override CultureInfo CurrentCulture + { + get { return Thread.CurrentThread.CurrentCulture; } + } + + + + + + + +        public override CultureInfo CurrentUICulture + { + get { return Thread.CurrentThread.CurrentUICulture; } + } + } + + + + + + + +    class HostUserInterface : PSHostUserInterface, IHostUISupportsMultipleChoiceSelection + { + private PSHostRawUserInterface _psRawUserInterface = new HostRawUserInterface(); + + + + + + + +        public override PSHostRawUserInterface RawUI + { + get { return _psRawUserInterface; } + } + + + + + + + +        public override string ReadLine() + { + return Console.ReadLine(); + } + + + + + + + +        public override SecureString ReadLineAsSecureString() + { + throw new NotImplementedException(); + } + + + + + + + +        public override void Write(string value) + { + string output = value ?? "null"; + Console.Write(output); + } + + + + + + + +        public override void Write(ConsoleColor foregroundColor, ConsoleColor backgroundColor, string value) + { + string output = value ?? "null"; + var origFgColor = Console.ForegroundColor; + var origBgColor = Console.BackgroundColor; + Console.ForegroundColor = foregroundColor; + Console.BackgroundColor = backgroundColor; + Console.Write(output); + Console.ForegroundColor = origFgColor; + Console.BackgroundColor = origBgColor; + } + + + + + + + +        public override void WriteLine(string value) + { + string output = value ?? "null"; + Console.WriteLine(output); + } + + + + + + + +        public override void WriteErrorLine(string value) + { + string output = value ?? "null"; + var origFgColor = Console.ForegroundColor; + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine(output); + Console.ForegroundColor = origFgColor; + } + + + + + + + +        public override void WriteDebugLine(string message) + { + WriteYellowAnnotatedLine(message, "DEBUG"); + } + + + + + + + +        public override void WriteVerboseLine(string message) + { + WriteYellowAnnotatedLine(message, "VERBOSE"); + } + + + + + + + +        public override void WriteWarningLine(string message) + { + WriteYellowAnnotatedLine(message, "WARNING"); + } + + + + + + + +        private void WriteYellowAnnotatedLine(string message, string annotation) + { + string output = message ?? "null"; + var origFgColor = Console.ForegroundColor; + var origBgColor = Console.BackgroundColor; + Console.ForegroundColor = ConsoleColor.Yellow; + Console.BackgroundColor = ConsoleColor.Black; + WriteLine(String.Format(CultureInfo.CurrentCulture, "{0}: {1}", annotation, output)); + Console.ForegroundColor = origFgColor; + Console.BackgroundColor = origBgColor; + } + + + + + + + +        public override void WriteProgress(long sourceId, ProgressRecord record) + { + throw new NotImplementedException(); + } + + + + + + + +        public override Dictionary Prompt(string caption, string message, Collection descriptions) + { + if (String.IsNullOrEmpty(caption) && String.IsNullOrEmpty(message) && descriptions.Count > 0) + { + Console.Write(descriptions[0].Name + ": "); + } + else + { + this.Write(ConsoleColor.DarkCyan, ConsoleColor.Black, caption + "\n" + message + " "); + } + var results = new Dictionary(); + foreach (FieldDescription fd in descriptions) + { + string[] label = GetHotkeyAndLabel(fd.Label); + this.WriteLine(label[1]); + string userData = Console.ReadLine(); + if (userData == null) + { + return null; + } + + + + + + + +                results[fd.Name] = PSObject.AsPSObject(userData); + } + + + + + + + +            return results; + } + + + + + + + +        public override PSCredential PromptForCredential(string caption, string message, string userName, string targetName) + { + throw new NotImplementedException(); + } + + + + + + + +        public override PSCredential PromptForCredential(string caption, string message, string userName, string targetName, PSCredentialTypes allowedCredentialTypes, PSCredentialUIOptions options) + { + throw new NotImplementedException(); + } + + + + + + + +        public override int PromptForChoice(string caption, string message, Collection choices, int defaultChoice) + { + // Write the caption and message strings in Blue. + this.WriteLine(ConsoleColor.Blue, ConsoleColor.Black, caption + "\n" + message + "\n"); + + + + + + + +            // Convert the choice collection into something that is + // easier to work with. See the BuildHotkeysAndPlainLabels + // method for details. + string[,] promptData = BuildHotkeysAndPlainLabels(choices); + + + + + + + +            // Format the overall choice prompt string to display. + var sb = new StringBuilder(); + for (int element = 0; element < choices.Count; element++) + { + sb.Append(String.Format(CultureInfo.CurrentCulture, "|{0}> {1} ", promptData[0, element], promptData[1, element])); + } + + + + + + + +            sb.Append(String.Format(CultureInfo.CurrentCulture, "[Default is ({0}]", promptData[0, defaultChoice])); + + + + + + + +            // Read prompts until a match is made, the default is + // chosen, or the loop is interrupted with ctrl-C. + while (true) + { + this.WriteLine(sb.ToString()); + string data = Console.ReadLine().Trim().ToUpper(CultureInfo.CurrentCulture); + + + + + + + +                // If the choice string was empty, use the default selection. + if (data.Length == 0) + { + return defaultChoice; + } + + + + + + + +                // See if the selection matched and return the + // corresponding index if it did. + for (int i = 0; i < choices.Count; i++) + { + if (promptData[0, i] == data) + { + return i; + } + } + + + + + + + +                this.WriteErrorLine("Invalid choice: " + data); + } + } + + + + + + + +        #region IHostUISupportsMultipleChoiceSelection Members + + + + + + + +        public Collection PromptForChoice(string caption, string message, Collection choices, IEnumerable defaultChoices) + { + this.WriteLine(ConsoleColor.Blue, ConsoleColor.Black, caption + "\n" + message + "\n"); + + + + + + + +            string[,] promptData = BuildHotkeysAndPlainLabels(choices); + + + + + + + +            var sb = new StringBuilder(); + for (int element = 0; element < choices.Count; element++) + { + sb.Append(String.Format(CultureInfo.CurrentCulture, "|{0}> {1} ", promptData[0, element], promptData[1, element])); + } + + + + + + + +            var defaultResults = new Collection(); + if (defaultChoices != null) + { + int countDefaults = 0; + foreach (int defaultChoice in defaultChoices) + { + ++countDefaults; + defaultResults.Add(defaultChoice); + } + + + + + + + +                if (countDefaults != 0) + { + sb.Append(countDefaults == 1 ? "[Default choice is " : "[Default choices are "); + foreach (int defaultChoice in defaultChoices) + { + sb.AppendFormat(CultureInfo.CurrentCulture, "\"{0}\",", promptData[0, defaultChoice]); + } + sb.Remove(sb.Length – 1, 1); + sb.Append("]"); + } + } + + + + + + + +            this.WriteLine(ConsoleColor.Cyan, ConsoleColor.Black, sb.ToString()); + + + + + + + +            var results = new Collection(); + while (true) + { + ReadNext: + string prompt = string.Format(CultureInfo.CurrentCulture, "Choice[{0}]:", results.Count); + this.Write(ConsoleColor.Cyan, ConsoleColor.Black, prompt); + string data = Console.ReadLine().Trim().ToUpper(CultureInfo.CurrentCulture); + + + + + + + +                if (data.Length == 0) + { + return (results.Count == 0) ? defaultResults : results; + } + + + + + + + +                for (int i = 0; i < choices.Count; i++) + { + if (promptData[0, i] == data) + { + results.Add(i); + goto ReadNext; + } + } + + + + + + + +                this.WriteErrorLine("Invalid choice: " + data); + } + } + + + + + + + +        #endregion + + + + + + + +        private static string[,] BuildHotkeysAndPlainLabels(Collection choices) + { + // Allocate the result array + string[,] hotkeysAndPlainLabels = new string[2, choices.Count]; + + + + + + + +            for (int i = 0; i < choices.Count; ++i) + { + string[] hotkeyAndLabel = GetHotkeyAndLabel(choices[i].Label); + hotkeysAndPlainLabels[0, i] = hotkeyAndLabel[0]; + hotkeysAndPlainLabels[1, i] = hotkeyAndLabel[1]; + } + + + + + + + +            return hotkeysAndPlainLabels; + } + + + + + + + +        private static string[] GetHotkeyAndLabel(string input) + { + string[] result = new string[] { String.Empty, String.Empty }; + string[] fragments = input.Split('&'); + if (fragments.Length == 2) + { + if (fragments[1].Length > 0) + { + result[0] = fragments[1][0].ToString(). + ToUpper(CultureInfo.CurrentCulture); + } + + + + + + + +                result[1] = (fragments[0] + fragments[1]).Trim(); + } + else + { + result[1] = input; + } + + + + + + + +            return result; + } + } + + + + + + + +    class HostRawUserInterface : PSHostRawUserInterface + { + public override KeyInfo ReadKey(ReadKeyOptions options) + { + throw new NotImplementedException(); + } + + + + + + + +        public override void FlushInputBuffer() + { + } + + + + + + + +        public override void SetBufferContents(Coordinates origin, BufferCell[,] contents) + { + throw new NotImplementedException(); + } + + + + + + + +        public override void SetBufferContents(Rectangle rectangle, BufferCell fill) + { + throw new NotImplementedException(); + } + + + + + + + +        public override BufferCell[,] GetBufferContents(Rectangle rectangle) + { + throw new NotImplementedException(); + } + + + + + + + +        public override void ScrollBufferContents(Rectangle source, Coordinates destination, Rectangle clip, BufferCell fill) + { + throw new NotImplementedException(); + } + + + + + + + +        public override ConsoleColor ForegroundColor + { + get { return Console.ForegroundColor; } + set { Console.ForegroundColor = value; } + } + + + + + + + +        public override ConsoleColor BackgroundColor + { + get { return Console.BackgroundColor; } + set { Console.BackgroundColor = value; } + } + + + + + + + +        public override Coordinates CursorPosition + { + get { return new Coordinates(Console.CursorLeft, Console.CursorTop); } + set { Console.SetCursorPosition(value.X, value.Y); } + } + + + + + + + +        public override Coordinates WindowPosition + { + get { return new Coordinates(Console.WindowLeft, Console.WindowTop); } + set { Console.SetWindowPosition(value.X, value.Y); } + } + + + + + + + +        public override int CursorSize + { + get { return Console.CursorSize; } + set { Console.CursorSize = value; } + } + + + + + + + +        public override Size BufferSize + { + get { return new Size(Console.BufferWidth, Console.BufferHeight); } + set { Console.SetBufferSize(value.Width, value.Height); } + } + + + + + + + +        public override Size WindowSize + { + get { return new Size(Console.WindowWidth, Console.WindowHeight); } + set { Console.SetWindowSize(value.Width, value.Height); } + } + + + + + + + +        public override Size MaxWindowSize + { + get { return new Size(Console.LargestWindowWidth, Console.LargestWindowHeight); } + } + + + + + + + +        public override Size MaxPhysicalWindowSize + { + get { return new Size(Console.LargestWindowWidth, Console.LargestWindowHeight); } + } + + + + + + + +        public override bool KeyAvailable + { + get { return Console.KeyAvailable; } + } + + + + + + + +        public override string WindowTitle + { + get { return Console.Title; } + set { Console.Title = value; } + } + } + } + '@ + }    + + + + + + + +Process { + if ($psCmdlet.ParameterSetName -eq "Path") + { + # In the -Path (non-literal) case we may need to resolve a wildcarded path + $resolvedPaths = @($Path | Resolve-Path | Convert-Path) + } + else + { + # Must be -LiteralPath + $resolvedPaths = @($LiteralPath | Convert-Path) + } + + + + + + + foreach ($rpath in $resolvedPaths) + { + Write-Verbose "Processing $rpath" + + + + + + +        $gzItem = Get-ChildItem $rpath | Write-GZip -Quiet + $resourcePath = "$($gzItem.Directory)\Resources.Script.ps1.gz" + if (Test-Path $resourcePath) { Remove-Item $resourcePath } + Rename-Item $gzItem $resourcePath + + + + + + + # Configure the compiler parameters + $referenceAssemblies = 'System.dll',([psobject].Assembly.Location) + $outputPath = $OutputAssembly + if (![IO.Path]::IsPathRooted($outputPath)) + { + $outputPath = [io.path]::GetFullPath((Join-Path $pwd $outputPath)) + } + if ($rpath -eq $outputPath) + { + throw 'Oops, you don"t really want to overwrite your script with an EXE.' + } + + + + + + +        $cp = new-object System.CodeDom.Compiler.CompilerParameters $referenceAssemblies,$outputPath,$true + $cp.TempFiles = new-object System.CodeDom.Compiler.TempFileCollection ([IO.Path]::GetTempPath()) + $cp.GenerateExecutable = $true + $cp.GenerateInMemory   = $false + $cp.IncludeDebugInformation = $true + if ($IconPath) + { + $rIconPath = Resolve-Path $IconPath + $cp.CompilerOptions = " /win32icon:$rIconPath" + } + [void]$cp.EmbeddedResources.Add($resourcePath) + + + + + + + # Create the C# codedom compiler + $dict = new-object 'System.Collections.Generic.Dictionary[string,string]' + $dict.Add('CompilerVersion','v3.5′) + $provider = new-object Microsoft.CSharp.CSharpCodeProvider $dict + + + + + + # Compile the source and report errors + $results = $provider.CompileAssemblyFromSource($cp, $src) + if ($results.Errors.Count) + { + $errorLines = "" + foreach ($error in $results.Errors) + { + $errorLines += "`n`t" + $error.Line + ":`t" + $error.ErrorText + } + Write-Error $errorLines + } + } + } + + + + + +[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/4/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/4/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=4&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2010/_index.md b/content/articles/2010/_index.md new file mode 100644 index 000000000..9bd2d04c4 --- /dev/null +++ b/content/articles/2010/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from 2010" +description: "PowerShell.org Articles published in 2010." +--- diff --git a/content/articles/2011-03-09-mvp-summit-2011.md b/content/articles/2011-03-09-mvp-summit-2011.md deleted file mode 100644 index 958065f8f..000000000 --- a/content/articles/2011-03-09-mvp-summit-2011.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: MVP Summit 2011 -authors: - - Keith Hill -date: "2011-03-10T05:43:57+00:00" -aliases: - - /2011/03/mvp-summit-2011/ ---- - -Testing out my first WordPress blog post after the switch from Windows Live Spaces (sniff, I will miss you) to WordPress.  Regarding the MVP Summit last week, I can"™t really talk about much due to just about everything being NDA, NDA, NDA!  I will say that I"™m excited about the future of PowerShell!  Probably the most fun part was hanging out with the other PowerShell MVPs for a week. - -It seems to me that Microsoft still values their relationship with the MVPs as evidenced by the party they arranged for MVPs last Wednesday: - -[![MVP Summit 20110302-DSC_0052](http://rkeithhill.files.wordpress.com/2011/03/mvp-summit-20110302-dsc_0052_thumb.jpg?w=644&h=429)](http://rkeithhill.files.wordpress.com/2011/03/mvp-summit-20110302-dsc_0052.jpg) - -Yep, that is SafeCo field in Seattle where the Mariners play.  They rented the whole stadium out for the evening!  There where a couple of bands "“ one called [The Beatniks][1] played out near centerfield.  You could run the bases, bat some balls up into the stands. Yeah, it was an awesome party. - -[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/209/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/209/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=209&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) - - [1]: http://www.thebeatniks.com/im/index.php diff --git a/content/articles/2011-03-16-powerscripting-podcast-with-jeffrey-snover-and-kenneth-hansen.md b/content/articles/2011-03-16-powerscripting-podcast-with-jeffrey-snover-and-kenneth-hansen.md deleted file mode 100644 index b2ae27ac7..000000000 --- a/content/articles/2011-03-16-powerscripting-podcast-with-jeffrey-snover-and-kenneth-hansen.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: PowerScripting Podcast with Jeffrey Snover and Kenneth Hansen -authors: - - Kirk Munro -date: "2011-03-16T14:21:07+00:00" -aliases: - - /2011/03/powerscripting-podcast-with-jeffrey-snover-and-kenneth-hansen/ ---- - -Last week [Hal Rottenberg][1] and [Jonathan Walz][2] recorded another great episode of the [PowerScripting Podcast][3], this time with Jeffrey Snover and Kenneth Hansen as guests.  Jeffrey and Kenneth talk about PowerShell of course, but also discuss the upcoming [PowerShell Deep Dive][4] event.  You can find the link to listen to the podcast along with the show notes [here][5]. - -This podcast is a great source of PowerShell news and I highly recommend listening to it regularly.  It"™s a great way to pass the time during your daily commute to and from work.  There are 141 episodes so far, with tons of great interviews and content, so check out this podcast when you have some time.  It"™s definitely worth it. - -Enjoy! - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[podcast](http://technorati.com/tags/podcast) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/527/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/527/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=527&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://www.halr9000.com/ - [2]: http://twitter.com/#!/jonwalz - [3]: http://powerscripting.wordpress.com/ - [4]: http://www.theexpertsconference.com/us/2011/general-information/2011-powershell-deep-dive/ - [5]: http://powerscripting.wordpress.com/2011/03/14/episode-141-the-powershell-deep-dive-conference-with-jeffrey-snover-and-kenneth-hansen/ diff --git a/content/articles/2011-03-21-powergui-spring-2011-desktop-wallpaper.md b/content/articles/2011-03-21-powergui-spring-2011-desktop-wallpaper.md deleted file mode 100644 index 6e48ef1ea..000000000 --- a/content/articles/2011-03-21-powergui-spring-2011-desktop-wallpaper.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: PowerGUI® Spring 2011 Desktop Wallpaper -authors: - - Kirk Munro -date: "2011-03-21T20:44:47+00:00" -aliases: - - /2011/03/powergui-spring-2011-desktop-wallpaper/ ---- - -Spring is here already, and even though it doesn"™t seem like it"™s Spring everywhere just yet (it has been snowing most of the day here in Ottawa), with the change in seasons comes a change in desktop wallpaper.  The Spring 2011 wallpaper for [PowerGUI Pro][1] and [PowerGUI][2] is now available: - -[![PowerGUI Spring 2011 Wallpaper Thumbnail](http://www.powergui.org/servlet/KbServlet/downloadImage/3402-102-425/thumbnail.jpg)](http://www.powergui.org/servlet/KbServlet/download/3402-102-5388/1920x1200.jpg) - -To download this wallpaper, simply visit the [PowerGUI downloads page][3] and scroll down to see all of the sizes and varieties that are available.  We have Fall wallpaper there as well for our friends in the southern hemisphere.  As always, all of our wallpaper images are stored in the [Wallpaper folder][4] on [PowerGUI.org][2], so if you want to use one from a previous year or a different season or holiday, take a look around"¦there are currently 27 different varieties to choose from. - -Enjoy! - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI),[wallpaper](http://technorati.com/tags/wallpaper) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/529/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/529/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=529&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://www.powerguipro.com/ - [2]: http://www.powergui.org/ - [3]: http://powergui.org/downloads.jspa - [4]: http://www.powergui.org/kbcategory.jspa?categoryID=393 diff --git a/content/articles/2011-03-22-adam-driscoll-talks-about-powershell-and-powergui-on-net-rocks.md b/content/articles/2011-03-22-adam-driscoll-talks-about-powershell-and-powergui-on-net-rocks.md deleted file mode 100644 index 88268c2c7..000000000 --- a/content/articles/2011-03-22-adam-driscoll-talks-about-powershell-and-powergui-on-net-rocks.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Adam Driscoll talks about PowerShell and PowerGUI® on .NET Rocks! -authors: - - Kirk Munro -date: "2011-03-22T17:00:00+00:00" -aliases: - - /2011/03/adam-driscoll-talks-about-powershell-and-powergui-on-net-rocks/ ---- - -Recently Adam Driscoll of [PowerGUI VSX][1] fame was a guest on the [.NET Rocks!][2] podcast show, chatting with Carl and Richard about his TFS plugin for Android, PowerShell, [PowerGUI][3], and [PowerGUI VSX][1].  Today that show was made available for download, so head on over to the [.NET Rocks!][2] page listen to Adam, Carl and Richard in [Episode 647 of .NET Rocks!][4] - -Enjoy! - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI](http://technorati.com/tags/PowerGUI),[PowerGUI VSX](http://technorati.com/tags/PowerGUI+VSX),[podcast](http://technorati.com/tags/podcast) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/520/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/520/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=520&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://visualstudiogallery.msdn.microsoft.com/01516103-d487-4a7e-bb40-c15ec709afa3/ - [2]: http://www.dotnetrocks.com/ - [3]: http://www.powergui.org/ - [4]: http://www.dotnetrocks.com/default.aspx?showNum=647 diff --git a/content/articles/2011-03-28-happy-4th-birthday-powergui.md b/content/articles/2011-03-28-happy-4th-birthday-powergui.md deleted file mode 100644 index 950e8b3b4..000000000 --- a/content/articles/2011-03-28-happy-4th-birthday-powergui.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Happy 4th Birthday PowerGUI®! -authors: - - Kirk Munro -date: "2011-03-29T00:52:30+00:00" -aliases: - - /2011/03/happy-4th-birthday-powergui/ ---- - -Today is [PowerGUI][1]"™s 4th birthday, and what would a birthday be without cake?  The awesome graphic artists that provide me with all of our fun desktop wallpaper for PowerGUI have done it again with a new desktop wallpaper image to celebrate PowerGUI"™s birthday.  You can download it from the [downloads page on PowerGUI.org][2], or you can click on this picture to download a high-resolution version directly: - -[![image](http://kirkmunro.files.wordpress.com/2011/03/image2.png?w=504&h=316)](http://www.powergui.org/servlet/KbServlet/download/3422-102-5427/1920x1200.jpg) - -It"™s hard to believe it"™s been 4 years already since PowerGUI was first made available for download on March 28, 2007.  What an amazing 4 years it has been too! What started out as a free extensible Administrative Console based on Windows PowerShell has grown into an award winning product that also includes a free extensible Script Editor with tons of useful features like Intellisense, syntax highlighting, script snippets, script signing, and many, many more.  There"™s even a Pro version called [PowerGUI® Pro][3] that adds Version Control, Easy Remote Script Execution, and a component called MobileShell that allows you to perform systems management from your handheld device! - -It"™s been great fun having a direct hand in helping make this happen, but this product would not be what it is today without the support that we have received from the community!  Your feedback and support through our [PowerGUI.org][1] community site, on Twitter, on FaceBook, and blogs and articles around the web has been fantastic and it"™s something that I appreciate every single day!  Thank you for helping this product to continue to grow! - -I hope you enjoy celebrating PowerGUI"™s birthday with us this week with the fantastic wallpaper, and look forward to continuing to watch this product grow for many years to come! - -Enjoy! - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI),[wallpaper](http://technorati.com/tags/wallpaper) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/532/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/532/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=532&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://www.powergui.org/ - [2]: http://poshoholic.com/2011/03/28/happy-4th-birthday-powergui/www.powergui.org/downloads.jspa - [3]: http://poshoholic.com/2011/03/28/happy-4th-birthday-powergui/www.powerguipro.com diff --git a/content/articles/2011-04-04-the-2011-scripting-games-have-begun.md b/content/articles/2011-04-04-the-2011-scripting-games-have-begun.md deleted file mode 100644 index 202d7a415..000000000 --- a/content/articles/2011-04-04-the-2011-scripting-games-have-begun.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: The 2011 Scripting Games have begun! -authors: - - Kirk Munro -date: "2011-04-04T11:54:59+00:00" -aliases: - - /2011/04/the-2011-scripting-games-have-begun/ ---- - -[![2011_ScriptGames_GREEN_SPONSOR (2)](http://kirkmunro.files.wordpress.com/2011/04/2011_scriptgames_green_sponsor-2.png?w=154&h=187)][1] - -Today marks the beginning of Microsoft"™s [2011 Scripting Games][2].  The Scripting Games are a great way to have fun learning more about Windows PowerShell.  There are even great prizes available to be won.  There are 10 events, with a beginner and an advanced category for each event. - -To participate, all you have to do is: - - 1. Familiarize yourself with the information on the [2011 Scripting Games page][2]. - 2. Register by signing in to the [2011 Scripting Games page on PoshCode.org][3]. - 3. Keep your eye on the [Hey, Scripting Guy! blog][4] to see when new events are posted (both the beginner and advanced Event 1 details are available now!). - 4. Publish solutions to any events you decide to do on the [PoshCode.org contribute page][5]. - -That"™s pretty much all there is to it.  You can participate in both the beginner and the advanced categories, or you can spend all of your time focused on one category.  You can enter solutions for all events in a category, or you can cherry pick the events you have time for and enter only those.  You can start today with the first event, or join in later once the competition is already underway.  There are really no limitations on how much or how little that you have to participate in the Scripting Games.  Some prizes are available for the highest ranking participant, but others can be won simply by participating in a single event, so throw your hat into the ring and learn more about PowerShell while having fun and you might even win something. - -[Quest Software][6] is an official sponsor of the Scripting Games again this year, and we have contributed many licenses of [PowerGUI® Pro][7] to the pool of prizes to be won.  If you"™d like a chance to win one of the licenses that are available, all you have to do is participate in the Scripting Games by entering at least one event.  The more events you participate in the more you will increase your chances of winning.  Participating is easy, so you really should consider taking the time to give it a try"¦you just might learn something. - -Good luck! - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[Scripting Games](http://technorati.com/tags/Scripting+Games),[contest](http://technorati.com/tags/contest) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/534/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/534/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=534&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://blogs.technet.com/b/heyscriptingguy/archive/2011/03/21/support-our-sponsor-quest-software-2011.aspx - [2]: http://blogs.technet.com/b/heyscriptingguy/archive/2011/02/19/2011-scripting-games-all-links-on-one-page.aspx - [3]: http://2011sg.poshcode.org/Auth/LogOn - [4]: http://blogs.technet.com/b/heyscriptingguy/ - [5]: http://2011sg.poshcode.org/Scripts/New - [6]: http://www.quest.com/ - [7]: http://www.powerguipro.com/ diff --git a/content/articles/2011-04-22-earth-day-2011-powergui-style.md b/content/articles/2011-04-22-earth-day-2011-powergui-style.md deleted file mode 100644 index 1f46082c6..000000000 --- a/content/articles/2011-04-22-earth-day-2011-powergui-style.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "Earth Day 2011 \"“ PowerGUI® Style!" -authors: - - Kirk Munro -date: "2011-04-22T14:21:14+00:00" -aliases: - - /2011/04/earth-day-2011-powergui-style/ ---- - -Today is Earth Day 2011, and you can celebrate your green side in style with the latest [PowerGUI][1]® wallpaper.  As an ecoholic myself, this wallpaper is definitely among my favorites. - -[![](http://www.powergui.org/servlet/KbServlet/download/3472-102-5523/1920x1200.jpg)](http://www.powergui.org/servlet/KbServlet/download/3472-102-5523/1920x1200.jpg) - -Show your Earth Day pride, and [download](http://www.powergui.org/servlet/KbServlet/download/3472-102-5523/1920x1200.jpg) this beautiful desktop wallpaper today! If it doesn"™t suit your style, check out the rest of the desktop wallpaper images we have in the [Wallpaper category on PowerGUI.org][2].  There are plenty to choose from! - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI),[wallpaper](http://technorati.com/tags/wallpaper) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/536/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/536/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=536&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://www.powergui.org/ "PowerGUI.org" - [2]: http://www.powergui.org/kbcategory.jspa?categoryID=393 "Wallpaper category on PowerGUI.org" diff --git a/content/articles/2011-04-28-learn-more-about-powershell-at-teched-2011.md b/content/articles/2011-04-28-learn-more-about-powershell-at-teched-2011.md deleted file mode 100644 index f039d4b3c..000000000 --- a/content/articles/2011-04-28-learn-more-about-powershell-at-teched-2011.md +++ /dev/null @@ -1,1091 +0,0 @@ ---- -title: Learn more about PowerShell at TechEd 2011 -authors: - - Kirk Munro -date: "2011-04-28T15:15:09+00:00" -aliases: - - /2011/04/learn-more-about-powershell-at-teched-2011/ ---- - -[TechEd North America 2011][1] is coming up fast next month, so I wanted to let you know how you can learn more about PowerShell while at the conference.  PowerShell has continually had a great presence at TechEd events, and this year is no exception.  Just searching the TechEd schedule builder using the keyword "PowerShell" reveals 7 pre-event online webcasts, 2 pre-event virtual labs, 4 pre-con seminars, 2 birds of a feather discussions, 5 interactive discussions, 16 breakouts, and 9 hands-on labs this year!  Those are not all specifically focused on PowerShell, but they definitely show the amount of attention that PowerShell gets at a conference like this. - -#### PowerShell content at TechEd 2011 - -Below you will find a list of all of the PowerShell-related sessions and resources for TechEd so that you can make sure you have them added to your schedule.  The sessions that interest me the most are highlighted in bold. - - - - - **Type and Level** - - - - **Title** - - - - **Speaker** - - - - **Date** - - - - - - Pre-event webcast -200 "“ Intermediate - - - - - - [PRE001-WC | Windows PowerShell Basics for IT Professionals](http://northamerica.msteched.com/topic/details/PRE001-WC#showdetails&fbid=4S1zVddlkbN) - - - - - - Peter Lammers - - - - Online, available now - - - - - - Pre-event webcast -200 "“ Intermediate - - - - - - [PRE020-WC | Windows PowerShell Basics for IT Professionals (Part 2)](http://northamerica.msteched.com/topic/details/PRE020-WC#showdetailshttp://northamerica.msteched.com/topic/details/PRE001-WC%23showdetails&fbid=4S1zVddlkbN) - - - - - - Sean Kearney - - - - Online, available now - - - - - - Pre-event webcast -200 "“ Intermediate - - - - - - [PRE051-WC | PowerShell Week: Learn It Now before It's an Emergency (Part 1 of 5)](http://northamerica.msteched.com/topic/details/PRE051-WC#showdetails&fbid=4S1zVddlkbN) - - - - - - - - Ed Wilson - - - - - - Online, available now - - - - - - Pre-event webcast -200 "“ Intermediate - - - - - - [PRE052-WC | PowerShell Week: Learn It Now before It's an Emergency (Part 2 of 5)](http://northamerica.msteched.com/topic/details/PRE052-WC#showdetails&fbid=4S1zVddlkbN) - - - - - - Ed Wilson - - - - Online, available now - - - - - - Pre-event webcast -200 "“ Intermediate - - - - - - [PRE053-WC | PowerShell Week: Learn it now before it is an emergency (Part 3 of 5)](http://northamerica.msteched.com/topic/details/PRE053-WC#showdetails&fbid=4S1zVddlkbN) - - - - - - Ed Wilson - - - - Online, available now - - - - - - Pre-event webcast -200 "“ Intermediate - - - - - - [PRE054-WC | PowerShell Week: Learn it now before it is an emergency (Part 4 of 5)](http://northamerica.msteched.com/topic/details/PRE054-WC#showdetails&fbid=4S1zVddlkbN) - - - - - - Ed Wilson - - - - Online, available now - - - - - - Pre-event webcast -200 "“ Intermediate - - - - - - [PRE055-WC | PowerShell Week: Learn It Now before It's an Emergency (Part 5 of 5)](http://northamerica.msteched.com/topic/details/PRE055-WC#showdetails&fbid=4S1zVddlkbN) - - - - - - Ed Wilson - - - - Online, available now - - - - - - **Pre-Conference Seminar -($$$)** - - - - - - [**PRC14 | Automate Windows 7 (and Windows Server 2008 R2) Administration Using Windows PowerShell v2**](http://northamerica.msteched.com/topic/details/PRC14?fbid=4S1zVddlkbN#showdetails) - - - - - - **Don Jones** - - - - **Sunday, May 15, 10:00 AM "“ 5:30 PM** - - - - - - Pre-Conference Seminar -($$$) - - - - - - [PRC07 | Microsoft SharePoint 2010 Administration for the Seasoned SharePoint Administrator](http://northamerica.msteched.com/topic/details/PRC07?fbid=4S1zVddlkbN#showdetails) - - - - - - Shane Young, Todd Klindt - - - - Sunday, May 15, 10:00 AM "“ 5:30 PM - - - - - - Pre-Conference Seminar -($$$) - - - - - - [PRC13 | Group Policy in Windows 7 and Windows Server 2008 R2](http://northamerica.msteched.com/topic/details/PRC13?fbid=4S1zVddlkbN#showdetails) - - - - - - Jeremy Moskowitz - - - - Sunday, May 15, 10:00 AM "“ 5:30 PM - - - - - - Pre-Conference Seminar -($$$) - - - - - - [PRC04 | Build a Better Development Shop with Microsoft Virtualization Technologies and Visual Studio 2010 Lab Management](http://northamerica.msteched.com/topic/details/PRC04?fbid=4S1zVddlkbN#showdetails) - - - - - - Brian Randell - - - - Sunday, May 15, 10:00 AM "“ 5:30 PM - - - - - - **Interactive Discussion -400 "“ Expert** - - - - - - **[WSV471-INT | Build Reusable Tools in Windows PowerShell](http://northamerica.msteched.com/topic/details/WSV471-INT?fbid=4S1zVddlkbN#showdetails)** - - - - - - **Don Jones** - - - - **Monday, May 16, 1:15 PM "“ 2:30 PM** - - - - - - **Breakout Session -300 "“ Advanced** - - - - - - **[WSV316 | Windows Server 2008 R2: Tips for Automating the Breadth of Your IT Environment](http://northamerica.msteched.com/topic/details/WSV316?fbid=4S1zVddlkbN#showdetails)** - - - - - - **Dan Harman, Mir Rosenberg** - - - - **Monday, May 16, 3:00 PM "“ 4:15 PM** - - - - - - Interactive Discussion -400 "“ Expert - - - - - - [VIR471-INT | Virtualization FAQ, Tips and Tricks](http://northamerica.msteched.com/topic/details/VIR471-INT?fbid=4S1zVddlkbN#showdetails) - - - - - - Janssen Jones - - - - Monday, May 16, 3:00 PM "“ 4:15 PM - - - - - - **Birds-of-a-Feather -300 "“ Advanced** - - - - - - **[BOF04-ITP | PowerShell: Best Practices from the Field](http://northamerica.msteched.com/topic/details/BOF04-ITP?fbid=4S1zVddlkbN#showdetails)** - - - - - - **Hal Rottenberg, Ed Wilson** - - - - **Tuesday, May 17, 8:30 AM "“ 9:45 AM** - - - - - - Interactive Discussion -200 "“ Intermediate - - - - - - [OSP273-INT | Microsoft Office 365 Administration and Automation Using Windows PowerShell](http://northamerica.msteched.com/topic/details/OSP273-INT?fbid=4S1zVddlkbN#showdetails) - - - - - - Ashwin Sarin - - - - Tuesday, May 17, 8:30 AM "“ 9:45 AM - - - - - - Interactive Discussion -300 "“ Advanced - - - - - - [OSP382-INT | Windows PowerShell, the Power of the Pipe](http://northamerica.msteched.com/topic/details/OSP382-INT?fbid=4S1zVddlkbN#showdetails) - - - - - - Todd Bleeker - - - - Tuesday, May 17, 8:30 AM "“ 9:45 AM - - - - - - **Breakout Session -300 "“ Advanced** - - - - - - **[WCL303 | Advanced Troubleshooting with Resultant Set of Policy (RSoP)](http://northamerica.msteched.com/topic/details/WCL303?fbid=4S1zVddlkbN#showdetails)** - - - - - - **Jeffery Hicks** - - - - **Tuesday, May 17, 1:30 PM "“ 2:45 PM** - - - - - - Breakout Session -300 "“ Advanced - - - - - - [WSV310 | Get Out of Dodge: Migrating to Windows Server 2008 R2 x64](http://northamerica.msteched.com/topic/details/WSV310?fbid=4S1zVddlkbN#showdetails)  - - - - - - Rick Claus - - - - Tuesday, May 17, 1:30 PM "“ 2:45 PM - - - - - - Breakout Session -300 "“ Advanced - - - - - - [DBI304 | What's New in Manageability for Microsoft SQL Server Code-Named "Denali"](http://northamerica.msteched.com/topic/details/DBI304?fbid=4S1zVddlkbN#showdetails) - - - - - - Denny Cherry - - - - Tuesday, May 17, 1:30 PM "“ 2:45 PM - - - - - - Breakout Session -300 "“ Advanced - - - - - - [VIR325 | Anatomy of HP Cloud Foundation for Hyper-V](http://northamerica.msteched.com/topic/details/VIR325?fbid=4S1zVddlkbN#showdetails) - - - - - - Brad Kirby - - - - Tuesday, May 17, 5:00 PM "“ 6:15 PM - - - - - - Breakout Session -300 "“ Advanced - - - - - - [VIR314 | Understanding Server App-V, Sequencing and Deploying Datacenter Applications](http://northamerica.msteched.com/topic/details/VIR314?fbid=4S1zVddlkbN#showdetails) - - - - - - Derrick Isoka - - - - Wednesday, May 18, 8:30 AM "“ 9:45 AM - - - - - - Breakout Session -300 "“ Advanced - - - - - - [EXL318 | Monitoring Microsoft Lync 2010 Deployments](http://northamerica.msteched.com/topic/details/EXL318?fbid=4S1zVddlkbN#showdetails) - - - - - - Arish Alreja, Jeffrey Reed - - - - Wednesday, May 18, 10:15 AM "“ 11:30 AM - - - - - - **Interactive Discussion -400 "“ Expert** - - - - - - **[WSV473-INT | Windows PowerShell 3.0: Why Wait? Get Next-Generation PowerShell Functionality Today!](http://northamerica.msteched.com/topic/details/WSV473-INT?fbid=4S1zVddlkbN#showdetails)** - - - - - - **Kirk Munro** - - - - **Wednesday, May 18, 12:00 PM "“ 1:00 PM** - - - - - - **Breakout Session -400 "“ Expert** - - - - - - **[WSV406 | Advanced Automation Using Windows PowerShell 2.0](http://northamerica.msteched.com/topic/details/WSV406?fbid=4S1zVddlkbN#showdetails)** - - - - - - **Dan Harman, Jeffrey Snover** - - - - **Wednesday, May 18, 1:30 PM "“ 2:45 PM** - - - - - - Breakout Session -300 "“ Advanced - - - - - - [WCL321 | Windows PowerShell Remoting: Definitely NOT Just for Servers](http://northamerica.msteched.com/topic/details/WCL321?fbid=4S1zVddlkbN#showdetails) - - - - - - Don Jones - - - - Wednesday, May 18, 1:30 PM "“ 2:45 PM - - - - - - Breakout Session -300 "“ Advanced - - - - - - [DEV338 | NuGet: Microsoft .NET Package Management for the Enterprise](http://northamerica.msteched.com/topic/details/DEV338?fbid=4S1zVddlkbN#showdetails) - - - - - - Scott Hanselman - - - - Wednesday, May 18, 1:30 PM "“ 2:45 PM - - - - - - Breakout Session -300 "“ Advanced - - - - - - [VIR310 | Inside the LAB: Building Your Own Private Cloud Infrastructure](http://northamerica.msteched.com/topic/details/VIR310?fbid=4S1zVddlkbN#showdetails) - - - - - - Mikael Nystrom - - - - Wednesday, May 18, 1:30 PM "“ 2:45 PM - - - - - - **Breakout Session -300 "“ Advanced** - - - - - - **[WSV322 | Managing the Registry with Windows PowerShell 2.0](http://northamerica.msteched.com/topic/details/WSV322?fbid=4S1zVddlkbN#showdetails)** - - - - - - **Jeffery Hicks** - - - - **Thursday, May 19, 8:30 AM "“ 9:45 AM** - - - - - - Birds-of-a-Feather -300 "“ Advanced - - - - - - [BOF14-ITP | Challenges in Automation for Microsoft Data Repositories (Microsoft SQL Server, DPM and SharePoint)](http://northamerica.msteched.com/topic/details/BOF14-ITP?fbid=4S1zVddlkbN#showdetails) - - - - - - Kevin Kline - - - - Thursday, May 19, 8:30 AM "“ 9:45 AM - - - - - - Breakout Session -300 "“ Advanced - - - - - - [VIR326 | Fluid Data Management at Indiana University](http://northamerica.msteched.com/topic/details/VIR326?fbid=4S1zVddlkbN#showdetails) - - - - - - Janssen Jones - - - - Thursday, May 19, 8:30 AM "“ 9:45 AM - - - - - - **Breakout Session -300 "“ Advanced** - - - - - - **[EXL321 | Microsoft Lync Server 2010: Administering Lync Server Deployment](http://northamerica.msteched.com/topic/details/EXL321?fbid=4S1zVddlkbN#showdetails)** - - - - - - **Anand Lakshminarayanan, Cezar Ungureanasu** - - - - **Thursday, May 19, 10:15 AM "“ 11:30 AM** - - - - - - **Interactive Discussion -400 "“ Expert** - - - - - - **[WSV473-INT-R | Windows PowerShell 3.0: Why Wait? Get Next-Generation PowerShell Functionality Today!](http://northamerica.msteched.com/topic/details/WSV473-INT-R?fbid=4S1zVddlkbN#showdetails)** - - - - - - **Kirk Munro** - - - - **Thursday, May 19, 1:00 PM "“ 2:15 PM** - - - - - - **Breakout Session -300 "“ Advanced** - - - - - - **[WSV315 | Windows PowerShell for Beginners](http://northamerica.msteched.com/topic/details/WSV315?fbid=4S1zVddlkbN#showdetails)** - - - - - - **Jeffrey Snover, Mir Rosenberg** - - - - **Thursday, May 19, 1:00 PM "“ 2:15 PM** - - - - - - Breakout Session -300 "“ Advanced - - - - - - [DBI326 | Enterprise Data Mining with Microsoft SQL Server](http://northamerica.msteched.com/topic/details/DBI326?fbid=4S1zVddlkbN#showdetails) - - - - - - Mark Tabladillo - - - - Thursday, May 19, 2:45 PM "“ 4:00 PM - - - - - - **Hands-on Lab -200 "“ Intermediate** - - - - - - **[WSV276-HOL | Introduction to Windows PowerShell Fundamentals](http://northamerica.msteched.com/topic/details/WSV276-HOL?fbid=4S1zVddlkbN#showdetails)** - - - - - - **N/A** - - - - **Hands-on-lab, available in the TLC HOL area** - - - - - - **Hands-on Lab -300 "“ Advanced** - - - - - - **[WSV371-HOL | Advanced Windows PowerShell Scripting](http://northamerica.msteched.com/topic/details/WSV371-HOL?fbid=4S1zVddlkbN#showdetails)** - - - - - - **N/A** - - - - **Hands-on-lab, available in the TLC HOL area** - - - - - - **Hands-on Lab -300 "“ Advanced** - - - - - - **[WSV378-HOL | Server Management and Windows PowerShell V2 (V3.0)](http://northamerica.msteched.com/topic/details/WSV378-HOL?fbid=4S1zVddlkbN#showdetails)** - - - - - - **N/A** - - - - **Hands-on-lab, available in the TLC HOL area** - - - - - - Hands-on Lab -300 "“ Advanced - - - - - - [WCL376-HOL | Managing a Domain Environment More Effectively](http://northamerica.msteched.com/topic/details/WCL376-HOL?fbid=4S1zVddlkbN#showdetails) - - - - - - N/A - - - - Hands-on-lab, available in the TLC HOL area - - - - - - Hands-on Lab -300 "“ Advanced - - - - - - [WSV379-HOL | What's New in Active Directory (V3.0)](http://northamerica.msteched.com/topic/details/WSV379-HOL?fbid=4S1zVddlkbN#showdetails) - - - - - - N/A - - - - Hands-on-lab, available in the TLC HOL area - - - - - - Hands-on Lab -200 "“ Intermediate - - - - - - [WSV273-HOL | Failover Clustering Introduction with Windows Server 2008 R2](http://northamerica.msteched.com/topic/details/WSV273-HOL?fbid=4S1zVddlkbN#showdetails) - - - - - - N/A - - - - Hands-on-lab, available in the TLC HOL area - - - - - - Hands-on Lab -300 "“ Advanced - - - - - - [WSV377-HOL | Migrating DHCP and File Services with Windows Server Migration Tools](http://northamerica.msteched.com/topic/details/WSV377-HOL?fbid=4S1zVddlkbN#showdetails) - - - - - - N/A - - - - Hands-on-lab, available in the TLC HOL area - - - - - - **Hands-on Lab -300 "“ Advanced** - - - - - - **[EXL377-HOL | Managing Microsoft Lync Server 2010 Using Windows PowerShell and the Lync Server Control Panel](http://northamerica.msteched.com/topic/details/EXL377-HOL?fbid=4S1zVddlkbN#showdetails)** - - - - - - **N/A** - - - - **Hands-on-lab, available in the TLC HOL area** - - - - - - Hands-on Lab -300 "“ Advanced - - - - - - [SIM373-HOL | Microsoft System Center Service Manager 2010 Data Warehouse and Reporting](http://northamerica.msteched.com/topic/details/SIM373-HOL?fbid=4S1zVddlkbN#showdetails) - - - - - - N/A - - - - Hands-on-lab, available in the TLC HOL area - - - - -#### Quest Software Ask the Experts Session on PowerShell - -There are other items that won"™t show up in the schedule builder as well. For example, Quest Software has regular Ask the Experts sessions throughout the event, and one of those sessions will be focused on PowerShell, allowing you to ask questions to myself and Dmitry Sotnikov, watch some demos of the next version of [PowerGUI® Pro][2], and have a chance to meet us at the event.  If this interests you, mark your calendar and join Dmitry and I in the Quest Software booth in the expo hall on **Tuesday, May 17** from **12:30PM to 1:00PM**, and bring your PowerShell and [PowerGUI Pro][2] questions! - -#### - -#### - -#### WSV473-INT Windows PowerShell 3.0: Why Wait? Get Next-Generation PowerShell Functionality Today! - -If you want to find me when I"™m not working the PowerShell booth or answering questions during the Ask the Experts session on PowerShell, you can always come catch me at my session.  It is included in the session listing above.  I will be presenting a 400-level interactive discussion about PowerShell, [WSV473-INT Windows PowerShell 3.0: Why Wait? Get Next-Generation PowerShell Functionality Today!][3]  During this session I"™ll be discussing different ways that you can get next-generation PowerShell functionality today so that you don"™t have to wait as long until the next release.  This session will cover cool PowerShell features such as proxy functions, and it will also discuss Domain Specific Vocabularies, a topic I recently spoke about at the PowerShell Deep Dive.  You can read more about the session [here][3]. - -#### Important Update: - -This session has been scheduled for a second showing on Thursday, May 19, 2011 from 1:00-2:15PM, so if you can"™t make the first one, come to the second!  Here"™s the link to the update: [WSV473-INT-R | Windows PowerShell 3.0: Why Wait? Get Next-Generation PowerShell Functionality Today!][4] - -#### - -#### - -#### Watch for additional opportunities to learn about PowerShell - -Beyond these sessions, there are always other possible opportunities to learn about PowerShell while you are at TechEd 2011 in Atlanta.  The scheduled sessions at TechEd offer a ton of value already, but for me, the true value of a conference like TechEd comes from the unexpected and often unplanned side discussions that surprise you at a conference like this.  Some of my favorite discussions about PowerShell at conferences in the past have happened in an ad-hoc meeting, over breakfast, or in the PowerShell booth.  Never be afraid to start the discussion and ask others if they use PowerShell, and if possible keep your laptop handy so that you can pull it out and talk shop on the spot.  There is huge value in those discussions, and I highly recommend them. - -That"™s it from me for now.  If I hear about additional opportunities to learn more about PowerShell while at TechEd I"™ll be sure to post them here. - -Thanks for listening! - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI),[TechEd 2011](http://technorati.com/tags/TechEd+2011),[PowerShell 3.0](http://technorati.com/tags/PowerShell+3.0) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/538/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/538/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=538&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://northamerica.msteched.com/default.aspx?fbid=TzKc3Dpyi4d "TechEd North America 2011" - [2]: http://www.powerguipro.com/ "PowerGUI Pro" - [3]: http://northamerica.msteched.com/topic/details/WSV473-INT?fbid=-02hAGUgDb5#showdetails "WSV473-INT Windows PowerShell 3.0: Why Wait? Get Next-Generation PowerShell Functionality Today!" - [4]: http://northamerica.msteched.com/topic/details/WSV473-INT-R?fbid=4S1zVddlkbN#showdetails diff --git a/content/articles/2011-05-13-exciting-powergui-news-at-teched-2011-next-week.md b/content/articles/2011-05-13-exciting-powergui-news-at-teched-2011-next-week.md deleted file mode 100644 index 4e6435755..000000000 --- a/content/articles/2011-05-13-exciting-powergui-news-at-teched-2011-next-week.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Exciting PowerGUI® news at TechEd 2011 next week! -authors: - - Kirk Munro -date: "2011-05-13T20:23:15+00:00" -aliases: - - /2011/05/exciting-powergui-news-at-teched-2011-next-week/ ---- - -Next week I"™ll be at the TechEd 2011 conference in Atlanta.  During this event I"™ll be doing an Ask the Experts session on **Tuesday, May 17, 2011** in the Quest Software booth from **12:30-1:00PM**.  If you want to get the latest news on [PowerGUI® Pro][1] and [PowerGUI][2]®, come to that session!  I have some really cool things I"™ve been dying to show you, so please stop by and say Hello!  If you can"™t make that session, we"™ll be demoing [PowerGUI Pro][1] all week in the Quest booth, so stop by if you want a quick look at what we"™ve been working on. - -If you"™re wondering where else I"™ll be, be sure to take a look at my blog post about [PowerShell at TechEd 2011][3].  It includes sessions I will be possibly attending.  I"™m also presenting an interactive session called [WSV-473: Windows PowerShell 3.0: Why Wait? Get Next-Generation PowerShell Functionality Today!][4]  If you cannot attend that session, there is a repeat as well: [WSV473-INT-R: Windows PowerShell 3.0: Why Wait? Get Next-Generation PowerShell Functionality Today!][5] - -Also, why not go to TechEd in style!  Show your appreciation for PowerGUI at TechEd by sporting the latest PowerGUI desktop wallpaper on your laptop! - -[![](http://www.powergui.org/servlet/KbServlet/download/3502-102-5571/1440x900.jpg)](http://www.powergui.org/servlet/KbServlet/download/3502-102-5574/1920x1200.jpg) - -Hope to see you there! - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI),[TechEd 2011](http://technorati.com/tags/TechEd+2011) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/543/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/543/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=543&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://www.powerguipro.com/ "PowerGUI Pro" - [2]: http://www.powergui.org/ "PowerGUI.org" - [3]: http://poshoholic.com/2011/04/28/learn-more-about-powershell-at-teched-2011/ "Learn more about PowerShell at TechEd 2011" - [4]: http://northamerica.msteched.com/topic/details/WSV473-INT?fbid=4S1zVddlkbN#showdetails "WSV473-INT Windows PowerShell 3.0- Why Wait- Get Next-Generation PowerShell Functionality Today!" - [5]: http://northamerica.msteched.com/topic/details/WSV473-INT-R?fbid=4S1zVddlkbN#showdetails "WSV473-INT-R Windows PowerShell 3.0- Why Wait- Get Next-Generation PowerShell Functionality Toda" diff --git a/content/articles/2011-05-17-try-the-powergui-pro-3-0-beta-today.md b/content/articles/2011-05-17-try-the-powergui-pro-3-0-beta-today.md deleted file mode 100644 index 6e6ed7b12..000000000 --- a/content/articles/2011-05-17-try-the-powergui-pro-3-0-beta-today.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Try the PowerGUI Pro® 3.0 Beta today! -authors: - - Kirk Munro -date: "2011-05-17T15:00:00+00:00" -aliases: - - /2011/05/try-the-powergui-pro-3-0-beta-today/ ---- - -Today marks another exciting milestone for [PowerGUI][1], as we release a [public beta][2] of [PowerGUI Pro][3] 3.0 to the web.  We"™ve been working very hard on this release, and it includes a lot of new and improved features.   The highlights of this release are shown below. - -#### MobileShell Now Supports PowerPack Rendering - -A lot of our customers have been requesting this feature for a while (myself included!).  With PowerGUI Pro 3.0, you can now expose PowerPacks to MobileShell users!  An xml document is used to provide role-based access control (RBAC) to PowerGUI PowerPacks.  You simply associate PowerPack files with Active Directory users or groups, and when a user logs in they will see the PowerPacks that are configured for them!  Here"™s a screenshot showing the top level of MobileShell, where you can see the PowerPacks that have been exposed to this user: - -![MobileShell.PowerPackList](http://kirkmunro.files.wordpress.com/2011/05/mobileshell-powerpacklist.png?w=354&h=640) - -Just like in the Admin Console, you can browse through nodes and see child nodes: - -![MobileShell.BrowsingTheTree](http://kirkmunro.files.wordpress.com/2011/05/mobileshell-browsingthetree.png?w=354&h=640) - -Once you invoke a node that returns data, you can see the records showing up in the MobileShell PowerPack Rendering UI: - -![MobileShell.NodeDataInGrid](http://kirkmunro.files.wordpress.com/2011/05/mobileshell-nodedataingrid.png?w=354&h=640) - -Clicking on any of these child nodes allows you to see more object detail if any is available as well as any actions that are available for the object: - -![MobileShell.Actions](http://kirkmunro.files.wordpress.com/2011/05/mobileshell-actions.png?w=354&h=640) - -This gives you full PowerPack support on your handheld device!  Devices supported include all iOS devices (iPhone, iPad), Android and BlackBerry 6.0 and later devices.  You can also use the Google Chrome or Apple Safari web browsers from your desktop.  If you don"™t have a webkit-enabled web browser on your device or laptop, or if you want to invoke an ad-hoc command from your mobile device, you can still use the other MobileShell user experiences that we released in previous versions of PowerGUI Pro "“ they are still supported in PowerGUI Pro 3.0. - -#### New Interactive Welcome Page in Script Editor and Admin Console - -We have updated our Welcome Page that we have had all along in the Admin Console and we"™ve made it available in the Script Editor as well.  This page now allows you to keep track of the latest PowerPacks or Add-ons on PowerGUI.org, monitor your favorite RSS feeds, see a featured video from the PowerShell and PowerGUI channel on YouTube, or read the latest tip of the day. - -[![ScriptEditor.MainView](http://kirkmunro.files.wordpress.com/2011/05/scripteditor-mainview_thumb.png?w=604&h=464)](http://kirkmunro.files.wordpress.com/2011/05/scripteditor-mainview.png) - -#### Create Executable Files from Scripts - -Many customers have asked us for the ability to create executable files from scripts.  This is very useful, especially if you want to send someone the functionality you design in a script so that they can execute it without any difficulty.  PowerGUI Pro 3.0 includes this functionality, allowing you to build executable files that may be optionally password protected if they contain sensitive information.  You can also include any additional files that a script is dependent on as part of the package.  The only requirements for these executables are for PowerShell 2.0 itself to be installed and for the script requirements to be satisfied (if there are any). - -[![ScriptEditor.CompileScript](http://kirkmunro.files.wordpress.com/2011/05/scripteditor-compilescript_thumb.png?w=604&h=466)](http://kirkmunro.files.wordpress.com/2011/05/scripteditor-compilescript.png) - -#### Improved Version Control Integration - -PowerGUI Pro has included Version Control support since its first release.  In PowerGUI Pro 3.0, we have improved this integration by providing a new **Get Files from Version Control** menu item in the **Version Control** menu to allow you to retrieve files from version control.  We have also simplified the check-in process so that you can disable the display of the check-in description dialog if it is not required by the version control provider.  This allows for a more streamlined check-in experience when working with Team Foundation Server. - -#### Reset Runspace on Demand - -As you create and modify scripts in the Script Editor, you are often changing the state of the PowerShell session, loading or unloading modules or snapins, or adding, removing or modifying functions or variables.  When this happens, it is a recommended practice to re-run your script from a clean state to make sure that something isn"™t working simply because of the current state of your system.  Getting to a clean state in the PowerGUI Script Editor just got easier in PowerGUI Pro 3.0.  Now all you need to do is select Reset Runspace from the Debug menu and your functions, aliases and variables will be cleaned up and all of your modules and snapins will be unloaded and reloaded. - -[![ScriptEditor.ResetRunspaceOnDemand](http://kirkmunro.files.wordpress.com/2011/05/scripteditor-resetrunspaceondemand_thumb.png?w=604&h=466)](http://kirkmunro.files.wordpress.com/2011/05/scripteditor-resetrunspaceondemand.png) - -#### Go to Definition Support for Functions - -As you work with PowerShell, the number of files containing commands you use can grow.  This commonly happens as users create multiple modules they manage or use modules they download from other sources.  In cases where you work with functions from different sources, you may want to go to a definition for a function to see how it is implemented.  In PowerGUI Pro 3.0, you can right-click on a function name in the Script Editor and go to the definition of that function by selecting **Go to Definition** from the context menu. - -#### Find PowerPacks Online with Click-Once Install - -You can now search for PowerPacks on the PowerGUI.org website right from within the PowerGUI Administrative Console.  Searching is done using keyword matches, and if you want to see all PowerPacks simply perform a search without entering any keywords.  Once you have found the PowerPack you want, select it and click on the **Install** button to download, unblock, install and import the PowerPack automatically. - -[![AdminConsole.FindPowerPacksOnline](http://kirkmunro.files.wordpress.com/2011/05/adminconsole-findpowerpacksonline_thumb.png?w=604&h=449)](http://kirkmunro.files.wordpress.com/2011/05/adminconsole-findpowerpacksonline.png) - -#### Authoring Mode for the Administrative Console - -If you know PowerShell, you may want all the capabilities that are available in the Administrative Console to be available to you so that you can customize it to meet your needs.  This allows you to create a tailored management experience for yourself or other users in your organization.  If you provide the Administrative Console with PowerPacks to other users in your organization, they may not know PowerShell, in which case you really don"™t want them to change the configuration of the PowerPacks you give them.  The PowerGUI Administrative Console now has Authoring Mode for users who want to be able to modify PowerPacks, and basic (read-only) mode for users who shouldn"™t be modifying PowerPacks.  Simply set the system up with the appropriate shortcut for the user who uses the Administrative Console and you won"™t have to worry about them accidentally changing something anymore. - -#### - -#### And that"™s not all! - -We also have a lot of other improvements in the product as well that were added as part of the PowerGUI Pro 3.0 release.  Here"™s a list of a few more notable changes: - - * Improved Action functionality in the Administrative Console; - * Automatic loading of required modules or snapins when a PowerPack is loaded; - * Automatic variables for $PGHome, $PGUICulture, $PGVersionTable and $PGSE; - * Multi-line command support for the embedded PowerShell Console; and - * For Add-on authors, $PGSE is now defined by default and name lookups of UI elements is now case-insensitive - -There are other fixes as well, but this short list gives you an idea of some of the other things that are included in this release.  Each of these improvements were suggested by various members of our community, so please keep the feedback coming, we"™re really listening! - -#### This sounds great!  Where can I get the beta? - -You can download the public beta of PowerGUI Pro 3.0 right now by clicking on the **Download** button on the [PowerGUI Pro 3.0 Public Beta page][2] on [PowerGUI.org][4].  That page also describes what the beta package contains as well.  PowerGUI Pro can be installed side-by-side with PowerGUI freeware, so if you are a freeware user and want to try this out, you can install the beta without disrupting anything you do with the freeware product. - -#### Provide your feedback on the PowerGUI forums! - -We will be running this beta for a short period while we work on finishing up this release.  Your feedback is very important during this beta cycle, so please give the beta release a try and share your feedback by posting messages on the [PowerGUI forums][5].  The sooner we get your feedback, the sooner we can respond to it.  I"™m really looking forward to hearing what you like, what you don"™t like, and what else you would like to see in this and future releases, so please share your thoughts with us. - -That about wraps it up for this post, so if you made it here, thank you for reading this far and please, give [PowerGUI Pro 3.0 Beta][6] a try to see what you think about it! - -Happy testing! - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[beta](http://technorati.com/tags/beta) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/558/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/558/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=558&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://www.powergui.org/ "PowerGUI.org" - [2]: http://www.powergui.org/entry.jspa?externalID=3523 "PowerGUI Pro 3.0 Public Beta" - [3]: http://www.powerguipro.com/ "PowerGUI Pro" - [4]: http://www.powergui.org/entry.jspa?externalID=3523 "PowerGUI.org" - [5]: http://www.powergui.org/forumindex.jspa?categoryID=55 "PowerGUI Forums" - [6]: http://www.powergui.org/entry.jspa?externalID=3523 "PowerGUI Pro 3.0 Beta" diff --git a/content/articles/2011-05-18-configuring-rbac-for-mobileshell-in-powergui-pro-3-0.md b/content/articles/2011-05-18-configuring-rbac-for-mobileshell-in-powergui-pro-3-0.md deleted file mode 100644 index 8a59128a0..000000000 --- a/content/articles/2011-05-18-configuring-rbac-for-mobileshell-in-powergui-pro-3-0.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Configuring RBAC for MobileShell in PowerGUI Pro 3.0 -authors: - - Kirk Munro -date: "2011-05-19T05:07:45+00:00" -aliases: - - /2011/05/configuring-rbac-for-mobileshell-in-powergui-pro-3-0/ ---- - -Yesterday we released the public [beta of PowerGUI® Pro 3.0][1], which comes with all sorts of cool new features for [PowerGUI][2] users.  My favorite feature is definitely the new management interface for MobileShell.  With this interface, you can perform systems management from your handheld device very easily.  Here"™s what that might look like from your webkit-enabled web browser: -[![MobileShell.Actions](http://kirkmunro.files.wordpress.com/2011/05/mobileshell-actions_thumb.png?w=354&h=640)](http://kirkmunro.files.wordpress.com/2011/05/mobileshell-actions1.png) -Since this is only a beta release, it doesn"™t necessarily have everything fully polished just yet.  One thing that we didn"™t get to include in the beta release was a management console allowing you to associate PowerPacks with AD users and groups as well as instructions describing how you set up MobileShell to use this new interface with the beta.  The PowerPack that will be used to do that will come later.  In the meantime, this post will give you the necessary instructions to get started. - -#### Step 1: Install the MobileShell Server - -First, you need to find a system with IIS 7 or later installed.  Once you have a system where you will install the MobileShell server, you can run the [PowerGUI Pro][3]MobileShell installer that was included in the beta package.  During that installation, make sure you indicate you will use https for your web site, because the new MobileShell user experience requires https in order for it to function properly. With the MobileShell server installation complete, you have a few configuration tasks that you need to perform to set up PowerPacks - -#### Step 2: Add MobileShell Users to the PowerGUI MobileShell Users Local Group - -Any user who will access MobileShell needs to be a member of the PowerGUI MobileShell Users local group.  The local group is created automatically by the MobileShell Server installer, so all you need to do is make sure you put the appropriate user accounts in to that local group so that they will have access to MobileShell.  Note that it may take several minutes before MobileShell checks the group again to see if there are new users in the group, so you may need to wait before newly added users can log in to MobileShell. - -#### Step 3: Associate PowerPacks with AD Users and Groups - -With your MobileShell users configured, you can now associate PowerPacks with different AD users and groups.  When a user logs on to MobileShell, they are presented with any PowerPacks that are associated with their user account or with any groups in which their user account is a member. MobileShell PowerPack configuration is done via a simple xml file.  The file does not exist by default, so you need to create it.  Invoke the following PowerShell script on your MobileShell server to create and open the configuration xml file: - -```powershell -$programDataPath = [Environment]::GetFolderPath('CommonApplicationData') -$powerGUIDataPath = 'Quest Software\PowerGUI Pro' -$folder = Join-Path -Path $programDataPath -ChildPath $powerGUIDataPath - -if (-not (Test-Path -LiteralPath $folder)) { - New-Item -ItemType Directory -Path $folder | Out-Null -} - -$configPath = Join-Path -Path $folder -ChildPath 'MobileShellConfig.xml' - -$configuration = @" - - - -"@ - -$configuration | Out-File -FilePath $configPath -Encoding UTF8 - -notepad $configPath -``` - -Once you have the configuration file open, you will see the layout that is used to associate AD user or group SIDs with PowerPacks.  Copy all of the core PowerPacks that you have in the PowerPacks subfolder of your PowerGUI Pro installation folder that you want to use via the MobileShell UI into the same path where this file was created (the value of the $folder variable in the script above contains this path).  Then modify this file to contain only the PowerPacks you copied over, update the first User SID for your user account, and this will finish off the initial configuration of PowerPacks for MobileShell.  If you want to add additional users, you can copy and paste the User node in the XML document and then modify the SID for the users you add.  Retrieving a SID should be an easy task of course: simply use Get-QADUser from the Quest AD cmdlets!![Smile](http://kirkmunro.files.wordpress.com/2011/05/wlemoticon-smile.png?w=595) - -Note: With this beta release there is a bug in the Groups support in this configuration document, so simply associate PowerPacks to users for now.  Thanks! - -#### Step 4: Open the New MobileShell User Interface - -The new MobileShell User Interface we have in the beta is accessed by opening your webkit-enabled web browser and pointing it to the following website: - -> https://_MobileWebServerAddress_/MobileShell/Admin - -This web address allows you to try out the new systems management features that you can get from the PowerPacks you just associated with your user account.  Once you log in you should be all set to start using your PowerPacks! - -#### A Note About MobileShell Support for PowerPacks - -Note that if you try to use this new user interface with a PowerPack other than the ones that currently are included in the beta, by default the nodes and actions in those PowerPacks will not be visible in the MobileShell UI.  This must be explicitly turned on in PowerPacks that you want to access this way.  The reason behind this is because there may be some script that displays a Windows Forms or WPF-based UI on the system where they are run.  When you are remotely managing your environment via your MobileShell Server, you don"™t want any UI to be displayed on the server because that would freeze your web client interface.  For this reason, nodes and actions must be explicitly configured to work with the new MobileShell UI.  I will write a separate post later about how you can do that really easily.  In the meantime, please try MobileShell with the core PowerPacks and see what you think! Hopefully this will help get you up and running with the new MobileShell UI in your test environment.  If you have any questions about this process, please let me know. - -Thanks, - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[beta](http://technorati.com/tags/beta),[MobileShell](http://technorati.com/tags/MobileShell) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/568/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/568/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=568&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://poshoholic.com/2011/05/17/try-the-powergui-pro-3-0-beta-today/ "PowerGUI Pro 3.0 Beta" - [2]: http://www.powergui.org/ "PowerGUI.org" - [3]: http://www.powerguipro.com/ "PowerGUI Pro" diff --git a/content/articles/2011-06-17-powergui-pro-3-0-beta-2-is-now-available.md b/content/articles/2011-06-17-powergui-pro-3-0-beta-2-is-now-available.md deleted file mode 100644 index b5bcd4e86..000000000 --- a/content/articles/2011-06-17-powergui-pro-3-0-beta-2-is-now-available.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: PowerGUI Pro® 3.0 Beta 2 is now available -authors: - - Kirk Munro -date: "2011-06-17T14:21:40+00:00" -aliases: - - /2011/06/powergui-pro-3-0-beta-2-is-now-available/ ---- - -Hot on the heels of our first beta cycle for [PowerGUI Pro][1] 3.0, today we released beta 2 of PowerGUI Pro 3.0 to the web.  This release includes a lot of fixes and improvements based on the feedback we"™ve received from you during our first beta cycle, so thank you for that feedback! - -Here are some details about the improvements that have been made in the 2nd beta of PowerGUI Pro 3.0: - -#### Improved snippets hierarchy - -Several users indicated that some of our snippets were hard to find.  To resolve this issue, I"™ve reorganized our snippets into an improved snippets hierarchy that should make it easier for you to find the snippets you are looking for and learn more about what you can do with PowerShell from our snippet collection.  A special thanks goes out to [Denniver Reining][2], author of the very popular [Snippet Manager Add-on][3].  Denniver was able to provide very useful feedback as I was going through the improvements in this release, which was very helpful.  To browse the new snippet hierarchy, simply press Ctrl+I while editing a document in the Script Editor.  Here"™s a screenshot showing the top level representation of the new snippets hierarchy: - -[![PowerGUI Pro 3.0 Snippet Hierarchy](http://kirkmunro.files.wordpress.com/2011/06/snaghtml8b27913_thumb.png?w=604&h=427)](http://kirkmunro.files.wordpress.com/2011/06/snaghtml8b27913.png) - -#### Installer option to open Script Editor - -Since the first release of [PowerGUI][4] we have provided an option at the end of the installation to open the PowerGUI Admin Console.  This is useful, but myself and many of our users have requested if we could open the Script Editor as well.  With this beta 2 release, you can now open the Script Editor or the Admin Console at the end of the installation. - -#### PowerPack Shared Scripts are now loaded from regular nodes and actions - -When you author a PowerPack, you can create a function library inside a shared script for the PowerPack.  This is useful, however until now shared scripts would only load when you clicked on a script node or script action.  This has now been changed so that shared scripts are now loaded from regular nodes and actions, allowing you to keep all of your PowerPack functions in one location and then create regular nodes and actions using those functions. - -#### Performance improvements, usability improvements and lots of bug fixes - -In addition to these items, we have improved the performance in some scenarios in MobileShell and in the Script Editor, we have addressed some usability improvements in the Script Editor, the Admin Console and MobileShell, and we have fixed a lot of bugs as well (it is a beta cycle after all, and what good would a beta cycle be if it didn"™t include bug fixes?). - -#### Don"™t forget all of the new features that were in the first beta! - -Besides these changes, if you"™re just finding out about the beta of PowerGUI Pro 3.0, make sure you read my [other blog post][5] that highlights all of the new features like compiling scripts into executables, or the new MobileShell user interface that allows you to use PowerPacks from your smartphone or tablet "“ those features and many more were included in the [first beta][5] of this release.  If you want to try the awesome new MobileShell capabilities, this blog post will help you get that set up in your test lab: [Configuring RBAC for MobileShell in PowerGUI Pro 3.0][6]. - -#### Great, so where can I get beta 2? - -Beta 2 is available for download now, in the same location where we posted the first beta.  You can find it on the [PowerGUI Pro 3.0 beta][7] page.  When you are installing this beta, you will need to provide a license key.  License keys for the beta are included in the zip file for the beta, right beside the msi and exe installers for the PowerGUI Pro 3.0 components "“ look for the asc file in the Components folder. - -#### Please share your feedback! - -We will be running the second beta for a short period while we work on finishing up this release.  Your feedback is very important during this beta cycle, so please give the beta release a try and share your feedback by posting messages on the [PowerGUI forums][8].  The sooner we get your feedback, the sooner we can respond to it.  I"™m really looking forward to hearing what you like, what you don"™t like, and what else you would like to see in this and future releases, so please share your thoughts with us. - -Enjoy! - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/592/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/592/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=592&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://www.powerguipro.com/ "PowerGUI Pro" - [2]: http://bytecookie.wordpress.com/ "ByteCookie - Denniver Reining's blog" - [3]: http://www.powergui.org/entry.jspa?externalID=3041&categoryID=389 "Snippet Manager Add-on" - [4]: http://www.powergui.org/ "PowerGUI.org" - [5]: http://poshoholic.com/2011/05/17/try-the-powergui-pro-3-0-beta-today/ "Try the PowerGUI Pro 3.0 beta today" - [6]: http://poshoholic.com/2011/05/19/configuring-powerpacks-in-mobileshell-in-powergui-pro-3-0/ "Configuring RBAC for MobileShell in PowerGUI Pro 3.0" - [7]: http://www.powergui.org/entry.jspa?externalID=3523 "PowerGUI Pro 3.0 Beta" - [8]: http://www.powergui.org/forumindex.jspa?categoryID=55 diff --git a/content/articles/2011-06-28-vworkspace-powerpack-a-great-example-of-the-power-and-flexibility-you-get-from-powershell-and-powergui.md b/content/articles/2011-06-28-vworkspace-powerpack-a-great-example-of-the-power-and-flexibility-you-get-from-powershell-and-powergui.md deleted file mode 100644 index af4f538cf..000000000 --- a/content/articles/2011-06-28-vworkspace-powerpack-a-great-example-of-the-power-and-flexibility-you-get-from-powershell-and-powergui.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: "vWorkspace PowerPack: A great example of the power and flexibility you get from PowerShell and PowerGUI®" -authors: - - Kirk Munro -date: "2011-06-28T16:13:26+00:00" -aliases: - - /2011/06/vworkspace-powerpack-a-great-example-of-the-power-and-flexibility-you-get-from-powershell-and-powergui/ ---- - -Last week, the [Quest vWorkspace][1] guys showed their prowess once again when they released the first version of the [vWorkspace PowerPack][2] for [PowerGUI® Pro][3] and [PowerGUI][4]®.  I love this PowerPack because it really demonstrates how PowerGUI is so complementary to PowerShell.  To see what I mean, take a look at the following screenshot: - -[![vWorkspace PowerPack - multi-farm management](http://kirkmunro.files.wordpress.com/2011/06/image_thumb.png?w=604&h=364)](http://kirkmunro.files.wordpress.com/2011/06/image.png) - -This screenshot shows two major improvements to the vWorkspace management experience by demonstrating how you can use the [vWorkspace PowerPack][2] to perform management tasks across all farms, and by demonstrating how you can use the [vWorkspace PowerPack][2] to perform management tasks across all locations in a single farm or across all locations in all farms.  In the native vWorkspace management user interface, you can only work with one farm at a time, and you can only work with one location at a time. - -Scaling management tasks out in a product like this can take a long time when you need to build the capabilities into a native management user interface, and these days in many cases PowerShell is provided as the vehicle to satisfy larger scale automation and management needs.  PowerShell is great and it definitely fits the bill for these medium to large enterprise needs, however it does not provide a user interface to facilitate those management scenarios.  This is where the administrative console in [PowerGUI Pro][3] and [PowerGUI][4] really shines, because it allows you to build out rich PowerPacks with enterprise-ready solutions with very low cost and effort. - -I spoke directly with [Adam Driscoll][5] (author of [PowerGUI VSX][6], member of the vWorkspace team, and one of two developers who created the [vWorkspace PowerPack][2]) about this, and it took them less than one week to put this PowerPack together.  That"™s less than one week for two developers to create a rich, functional management user interface that not only provides many of the management capabilities that come with the vWorkspace management console, but that also adds additional enterprise capabilities that the vWorkspace management console does not provide natively.  Aside from the multi-farm management and multi-location management features I mentioned earlier, it also allows administrators to upgrade the vWorkspace VM tools on the VMs you select, and it simplifies how administrators search for provisioning objects like templates, sysprep customizations, parent VHDs, and so on.  And by building these capabilities into a PowerPack, vWorkspace administrators can perform custom filtering and sorting of the data in the grid, generate rich HTML reports for that data, export the data to an external file for use in other programs, and view the PowerShell scripts that are doing all of the work, all because those features come with the PowerGUI administrative console automatically.  That"™s an amazing feat for one weeks worth of effort! - -The really sweet part of all of this is that it gets even better very soon.  If you"™ve been following my blog recently you"™ve seen that we have released two betas of [PowerGUI Pro 3.0][7] in the last little while which comes with many great features worth highlighting, however for now I only want to mention one: MobileShell.  In PowerGUI Pro 3.0, you can provide administrators with a custom mobile management solution, defined using PowerPacks and tailored for their needs using role-based access control (RBAC).  That means that once we release PowerGUI Pro 3.0 (which should happen very soon), the vWorkspace guys will be able to publish an update to their PowerPack that enables mobile management support so that vWorkspace administrators can have a mobile management solution for very little cost!  All they will need once the vWorkspace PowerPack is updated to support this mobile management scenario is a license of PowerGUI Pro 3.0 for each administrator who wants to manage their vWorkspace environment from their webkit-enabled mobile device.  Considering that it also allows those administrators to create executable files from PowerShell scripts, work with integrated version control in a best-in-class script editor, manage systems remotely using easy PowerShell remoting capabilities, find functions they are working with using go to definition support for functions, and more, the PowerGUI Pro price of $199/user is a pretty good value. - -If you are at all interested in VDI, you should give vWorkspace a look because it"™s an awesome solution that keeps getting better all the time.  If you use vWorkspace already I encourage you to take a look at the PowerShell capabilities that this team is providing, particularly in the PowerPack, because a ton of additional value is being provided here that is worth checking out.  You can find the installation instructions for the PowerPack on the [vWorkspace PowerPack][2] page on [PowerGUI.org][8]. - -That"™s it for this post.  If you have any questions or feedback, please don"™t hesitate to reply in the comments below. - -Thanks! - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI),[PowerPack](http://technorati.com/tags/PowerPack),[vWorkspace](http://technorati.com/tags/vWorkspace) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/596/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/596/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=596&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://www.quest.com/vworkspace/ "Quest vWorkspace" - [2]: http://www.powergui.org/entry.jspa?categoryID=290&externalID=3561 "vWorkspace PowerPack" - [3]: http://www.powerguipro.com/ "PowerGUI Pro" - [4]: http://www.powergui.org/ "PowerGUI.org" - [5]: http://csharpening.net/ "Adam Driscoll's Blog" - [6]: http://visualstudiogallery.msdn.microsoft.com/01516103-d487-4a7e-bb40-c15ec709afa3 "PowerGUI VSX" - [7]: http://poshoholic.com/2011/05/17/try-the-powergui-pro-3-0-beta-today/ "Try the PowerGUI Pro 3.0 beta today" - [8]: http://www.powergui.org/entry.jspa?externalID=3523 "PowerGUI.org" diff --git a/content/articles/2011-07-15-powergui-pro-and-powergui-3-0-are-now-available.md b/content/articles/2011-07-15-powergui-pro-and-powergui-3-0-are-now-available.md deleted file mode 100644 index 62379ddf9..000000000 --- a/content/articles/2011-07-15-powergui-pro-and-powergui-3-0-are-now-available.md +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: PowerGUI® Pro and PowerGUI® 3.0 are now available -authors: - - Kirk Munro -date: "2011-07-16T01:49:58+00:00" -aliases: - - /2011/07/powergui-pro-and-powergui-3-0-are-now-available/ ---- - -Today"™s an exciting day because I"™ve finished releasing [PowerGUI Pro][1] 3.0 and [PowerGUI][2] 3.0 to the web!  This release is something we"™ve been working on for a long time, and it has a ton of new goodies for you to play with.  You can learn more about the individual features in this release in the highlights below.  When reviewing these features, anything that is only available in PowerGUI Pro will be marked as a Pro feature. - -#### - -#### Mobile Systems Management (Pro feature) - -Ever wish you could immediately respond to hot issues from wherever you are without having to run to the office or to your home computer?  Now you can!  PowerGUI Pro 3.0 now provides you with a mobile systems management console on your handheld device!  Better yet, the systems management console you use is fully customizable using PowerShell scripts!  You can also configure different management experiences for different users and groups in your organization by using role-based access control (RBAC) to define which PowerPacks are assigned to various AD users and groups.  Since this leverages the PowerPack model, that"™s a whole lot of mobile systems management possibilities for you to pick and choose from. - -Here"™s a screenshot showing what this looks like as you browse through the Active Directory PowerPack using MobileShell and retrieve an AD user you want to modify: - -[![PowerGUI MobileShell - Managing an AD user object](http://kirkmunro.files.wordpress.com/2011/07/image_thumb.png?w=304&h=549)](http://kirkmunro.files.wordpress.com/2011/07/image.png) - -Currently the list of mobile devices that support this new management interface include: - - * iOS devices - * BlackBerry devices (BlackBerry OS 6.0 and higher) - * Android devices (Android OS 2.2 and higher) - -You can also use this from a desktop or laptop by connecting with the Chrome 11 and higher or Safari 5 and higher web browsers. - -#### - -#### Customizable Start Page (some Pro-only functionality) - -Completely new to this release, we have created a customizable Start Page that appears when you launch the Script Editor or the Admin Console.  The Start Page is designed to allow you to keep aware of what"™s going on in the PowerShell community, provide you with a tip of the day, featured videos, and the most recent additions to the library of Add-ons and PowerPacks on [PowerGUI.org][3].  This feature is available in both the free and the Pro versions, however Pro users get an extra bonus here: with PowerGUI Pro you can customize the RSS feeds that are shown on this page to get even more of your favorite PowerShell news or, if you don"™t want to use it that often and you"™re a PowerGUI Pro customer you can simply indicate that PowerGUI should not show it on start-up.  Personally I"™m a Pro user and I use the new Start Page every day to keep up to date on news. - -[![PowerGUI Pro Script Editor Start Page](http://kirkmunro.files.wordpress.com/2011/07/scripteditor-mainview-hq_thumb.png?w=604&h=464)](http://kirkmunro.files.wordpress.com/2011/07/scripteditor-mainview-hq_.png) - -#### Create Executable from Script (aka Compile Script; Pro-only) - -Another new feature in PowerGUI Pro in this release is the ability to create executables from script.  This feature greatly simplifies having someone else in your organization run some functionality that you"™ve built in a PowerShell script.  Instead of sending them a script, worrying about execution policy, providing them with instructions about how to run the script, and wondering if they"™ll modify (and break) the script or not, you can simply provide them with an executable program that does whatever your script was designed to do.  You can also be comfortable with the contents of these programs, either encrypting them with a password or leaving them decrypted, in which case the scripts that are packaged in the executable program are obfuscated to keep their contents hidden from prying eyes. - -[![PowerGUI Pro Script Editor - Create Executable From Script](http://kirkmunro.files.wordpress.com/2011/07/scripteditor-compilescript_thumb.png?w=604&h=466)](http://kirkmunro.files.wordpress.com/2011/07/scripteditor-compilescript.png) - - -#### Go to Function Definition (Pro-only) - -Yet another new feature in PowerGUI Pro 3.0 is support for going to the definition of any function from the name of that function in a script file.  This feature is very useful, both when you"™re building your own function libraries or modules, and when you are using other function libraries or modules.  With this feature you can right-click on the name of any function in a script file that you"™re looking at and select **Go to Definition** from the menu that appears.  If it"™s not a function, nothing happens, but if it"™s a function, you"™ll be taken to the location where that function is defined, _even if you have changed the file, so it"™s great when you"™re editing scripts_.  If it cannot find the function definition in a file, such as when you right-click on a function that is defined by PowerShell itself, you can show the definitions of those functions in a new file, making it easy to override behaviour this way.  This is great functionality whether you are working by yourself or with a team of users (where you may not know the location of functions you are working with). - -#### Improved Version Control Support (Pro-only) - -We spent some time in this release sprucing up our version control support.  PowerGUI Pro has always supported integrated version control.  Now that support is better, allowing you to retrieve files from version control that you have never checked in or out without having to go to a separate client.  It also supports version control providers that have their own check-in dialog, allowing you to make sure you only get prompted for comments during check-in once. - -#### Reset Runspace on Demand - -Here"™s a really useful new feature that"™s available in both freeware and Pro.  As you work with PowerShell, you create variables, add functions, and change the state quite a bit.  A best practice worth following is before you publish any scripts, make sure that they pass your tests in a clean environment.  In previous versions of PowerGUI this would require resetting your runspace with each debug (something I don"™t recommend anymore), or restarting PowerGUI.  Now you can simply select **Debug** | **Reset Runspace**, and your environment will be reset without having to close and re-open the product. - -[![PowerGUI Pro Script Editor - Reset Runspace on Demand](http://kirkmunro.files.wordpress.com/2011/07/scripteditor-resetrunspaceondemand_thumb.png?w=604&h=466)](http://kirkmunro.files.wordpress.com/2011/07/scripteditor-resetrunspaceondemand.png) - -#### Improved Snippets Support - -Snippet support in PowerGUI has always been best-in-class, but in this release they get even better!  We now have a brand new snippets hierarchy that reorganizes our existing snippets and adds a bunch of new ones.  Snippets are a huge timesaver when it comes to writing PowerShell scripts, and we"™ve just made it easier to find the snippets you"™re looking for by organizing them better into appropriate folders and adding additional snippets where some were missing.  Personally I"™m a huge fan of snippets, and would love to know what other snippets you would like to see going forward. - -[![PowerGUI Pro Script Editor - Snippets Hierarchy](http://kirkmunro.files.wordpress.com/2011/07/scripteditor-snippetshierarchy_thumb.png?w=604&h=426)](http://kirkmunro.files.wordpress.com/2011/07/scripteditor-snippetshierarchy.png) - -Also, I"™m going to call out a specific feature in our snippet support that you may be interested in knowing about.  If you create a module with commands and you want those commands to be easy to use, one very natural way to help your users learn your commands is to provide snippets.  In PowerGUI, when you load any module that has a snippets subfolder as a child of the module base folder, those snippets will immediately become available in the PowerGUI Script Editor.  That means as a module author, all you need to do is ship your module with snippets in a snippets subfolder and any PowerGUI user will automatically get access to them when they load the module.  This is a very cool feature, and one that I encourage you to try out and support. - -#### Performance Improvements - -During our beta cycle for this release we spent a lot of time looking at performance and were able to make some changes now and plan some changes for later.  With this release, we have dramatically improved our parser performance, which means that files will parse more quickly in the PowerGUI Script Editor.  This in turn means files will open more quickly, which means the Script Editor itself will open more quickly when you"™re loading a lot of files.  There are more performance improvements coming, but we"™ve already made great progress and I"™m sure you"™ll be happy with the improvements in this area! - -#### - -#### Multi-line Support in the Embedded Console - -Rich Beckett, this bud"™s for you!  Rich and a bunch of other PowerGUI users pointed out that they didn"™t like how our Script Editor would return an error if you pressed enter when it was obvious that the line was not finished yet (for example, when you finish a line with a round curly brace, or a pipeline symbol, or a line continuance character like the backtick).  We"™ve fixed this now, so you can enter multi-line commands without having to worry about getting errors and without having to think about pressing Shift+Enter to get a newline in the command pane. - -#### One-click Install for PowerPacks - -In our previous release we added support for one-click install for Add-ons in the Script Editor, allowing users to search for Add-ons on PowerGUI.org and install them with a single button click (there are some highly recommended Add-ons available by the way, so check them out if you haven"™t already). Now we"™re providing the same support for PowerPacks, so you can search online for PowerPacks, select the ones you like from the list of results, and click on a button to download, unblock, install and load those PowerPacks in the Admin Console. We have a large library of PowerPacks available, which you can see by clicking on the **Show All** button in the **Find PowerPacks Online** dialog. I strongly recommend you give them a look, because there is a ton of useful PowerShell functionality in those PowerPacks. - -[![AdminConsole.FindPowerPacksOnline](http://kirkmunro.files.wordpress.com/2011/07/adminconsole-findpowerpacksonline_thumb.png?w=604&h=449)](http://kirkmunro.files.wordpress.com/2011/07/adminconsole-findpowerpacksonline.png) - -#### Admin Console Authoring Mode - -If you"™re like me, from time to time in the Admin Console you accidentally move something, or delete the wrong thing, or make some change you didn"™t intend to make. Being able to change any PowerPack is great because it allows for rich customization, but when you"™re just using the PowerPacks day to day, you may not want to make any changes. It"™s also possible that you"™re providing the PowerGUI Admin Console to some staff members who need the features but not the customizability. In those cases, you can now launch the Administrative Console in default (non-authoring) mode, and be assured that you can"™t accidentally break one of the PowerPacks. When you need to make changes though, you can open the Administrative Console in Authoring mode and create and customize whatever you like! - -#### Improved Action Support - -The handling of Admin Console actions was improved a lot in this release.  Now when you select one or more rows in the grid in the Admin Console, only the actions appropriate for those rows will be displayed.  If you select mutliple objects of different types (files and folders, for example), you will only be presented with actions that apply to both types of objects.  Also, only the relevant actions that don"™t require any selection will be displayed when you click on a node or action and no data is returned.  All of these changes make using the Admin Console much easier than before. - -#### Improved Shared Script Support - -Shared Scripts in the PowerGUI Admin Console allow you to define functions that you want to have access to in more than one location in a shared script file. These script files would only previously be loaded once you clicked on a script node or script action in a module, meaning that you could not create a simple node or simple action from a function in a shared script file. That"™s changed now, such that shared scripts are invoked when you click on any node or action in a PowerPack. - -#### VMware PowerCLI 4.1+ Support - -We"™ve had a beta version of the VMware PowerPack available for a while that provides support for PowerCLI 4.1.  This release of PowerGUI includes that PowerPack in release form, officially catching PowerGUI support up to the latest VMware PowerCLI releases. - -#### Of course there"™s more! - -There are a ton of other minor changes in this release as well, ranging from usability improvements to bug fixes to changes that make it a little easier to create PowerGUI Add-ons.  We have new automatic variables ($PGHome, $PGUICulture, $PGVersionTable and $PGSE).  We automatically load PowerPack requirements now when a PowerPack is loaded.  I"™m sure there are other changes in this release that I"™m forgetting, but suffice it to say, we put a ton of energy into this release and it shows (I"™m exhausted!![Smile](http://kirkmunro.files.wordpress.com/2011/07/wlemoticon-smile.png?w=595) ). - -#### Great!  How can I get it? - -PowerGUI Pro is a fantastic PowerShell-based product with a ton of value for the $199 US price tag, even more with this 3.0 release.  If you like the features in PowerGUI Pro or if you like what we"™re doing with PowerGUI in general and feel it"™s time you put your money where your mouth is, simply point your browser to to go to our eStore and buy yourself a copy (or two or three![Winking smile](http://kirkmunro.files.wordpress.com/2011/07/wlemoticon-winkingsmile.png?w=595) ). - -If you"™re not ready to commit to the Pro version just yet, please give our new PowerGUI Pro 3.0 release a try by browsing to [http://www.powerguipro.com][4] and clicking on the Try button on that page to download a trial version.  A license key will be sent to you to allow you to try it out for 30 days.  If all you"™ve been using so far is the freeware version, we have put a lot of energy into the Pro release in 3.0 and this is a trend that will continue going forward, so I strongly encourage you to give it a try and see what you think.  Note that PowerGUI Pro and PowerGUI (freeware) install side by side, so you can try it on the same system where you use the free one"¦just pay attention to the shortcut you use to launch it so that you get the one you"™re looking for! - -After you"™ve tried out PowerGUI Pro, if you"™re not able to spend $199 for the product right now, then we do have the freeware version available from [www.powergui.org][5].  You can"™t miss the big Download button near the top of that page. - -Of course, if you already have either PowerGUI Pro or PowerGUI freeware, both of these will auto-update to the new version automatically when the auto-update system detects the new version is available.  This should happen the next time you start-up the product. - -#### An Important Note About Feedback and Usage Statistics - -With all of our releases, feedback is what drives us and motivates us to continue doing what we"™re doing, and this release is no exception.  We received a ton of feedback during our beta cycle and were able to fix some serious issues because of it.  I need to shout out a special thanks to Glenn Sizemore, Chris Piper and Thomy Kay for their feedback "“ it was particularly helpful!  The key point here though is that the feedback system really works.  If you love something, let us know, we"™d love to hear how PowerGUI is making your life easier!  If you don"™t like something, let us know that as well, we"™ll see what we can do to make it better!  Or if you think we"™re missing something, well, let us know!  We"™ll see what we can do to put that in!  I manage this product and we have developers who develop this product, but ultimately I"™m taking most of my direction from you guys, so please keep the feedback coming! - -Also, regarding feedback, I would be remiss if I didn"™t mention one last feature that we"™ve added to this release.  This release introduces anonymous data collection to PowerGUI.  It was important for us to add this for the reasons I just highlighted in the last paragraph "“ your feedback is that important, and we can learn a lot about where we need to spend our effort by reviewing usage data.  The data gathered does not contain any personal information, nor does it contain any scripts you write or anything like that.  It"™s simply data about how you are using the product.  Please opt-in for this usage data collection so that we can make the product even better going forward.  You can always opt out, but feedback is important, so we"™d really appreciate it if you would opt-in. - -That"™s it for this post.  I hope you like this release, and look forward to hearing about how it"™s making a difference for you! - -Enjoy! - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/612/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/612/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=612&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://www.powerguipro.com/ "PowerGUI Pro" - [2]: http://www.powergui.org/ "PowerGUI.org" - [3]: http://www.powergui.org/entry.jspa?externalID=3523 "PowerGUI.org" - [4]: http://www.powerguipro.com/ - [5]: http://www.powergui.org/ diff --git a/content/articles/2011-07-18-powergui-pro-3-0-mobile-systems-management-using-mobileshell.md b/content/articles/2011-07-18-powergui-pro-3-0-mobile-systems-management-using-mobileshell.md deleted file mode 100644 index 2c9612fea..000000000 --- a/content/articles/2011-07-18-powergui-pro-3-0-mobile-systems-management-using-mobileshell.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: "PowerGUI® Pro 3.0: Mobile Systems Management Using MobileShell" -authors: - - Kirk Munro -date: "2011-07-18T21:18:22+00:00" -aliases: - - /2011/07/powergui-pro-3-0-mobile-systems-management-using-mobileshell/ ---- - -In case you missed the announcement last Friday, [[PowerGUI Pro][1] ][2]3.0 was released to the web.  With this release we included a new feature that I"™m really excited about: Mobile Systems Management Using MobileShell.  We"™ve had MobileShell for quite a while, but prior to this release you could only use it to invoke your favorite scripts or commands from modules associated with your user account as well as ad hoc commands you wanted to run.  Here"™s a screenshot tour showing you what this interface would look like on a handheld device: - -[![PowerGUI Pro MobileShell - Favorites - 1 of 4](http://kirkmunro.files.wordpress.com/2011/07/image_thumb1.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image1.png)   [![PowerGUI Pro MobileShell - Favorites - 2 of 4](http://kirkmunro.files.wordpress.com/2011/07/image_thumb2.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image2.png)   [![PowerGUI Pro MobileShell - Favorites - 3 of 4](http://kirkmunro.files.wordpress.com/2011/07/image_thumb3.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image3.png)   [![PowerGUI Pro MobileShell - Favorites - 4 of 4](http://kirkmunro.files.wordpress.com/2011/07/image_thumb4.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image4.png) - -As you can see from this, the capabilities in this version were very cool (what"™s not to like about running PowerShell from your smartphone), but they were somewhat limiting as well because you couldn"™t really work with a management user interface from your handheld device this way. - -[PowerGUI Pro][1] 3.0 changes all of that, by including a new management interface for MobileShell that is based on PowerPacks (in case you don"™t know already, PowerPacks are extensions for the [PowerGUI][2] Administrative Console that provide a management experience much like MMC, but that are driven entirely by Windows PowerShell commands and scripts).  With 3.0 we"™ve provided a new mobile interface for MobileShell that allows you to use PowerPacks associated with your AD user account or groups that you are a member of from your mobile device!  Also, we"™ve made the management experience even more responsive at the same time, so now you can do more with MobileShell and it will do it more quickly than before!  All you need is a mobile device with a WebKit-enabled web browser (sorry, that means no BlackBerry 5.x or Windows Phone 7 support for now). - -Here"™s a screenshot tour showing you how this new experience can be used to do something very simple like unlock a user account: - -[![PowerGUI Pro MobileShell ScreenShot Tour - 1 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb5.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image5.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 2 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb6.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image6.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 3 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb7.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image7.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 4 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb8.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image8.png) - -[![PowerGUI Pro MobileShell ScreenShot Tour - 5 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb9.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image9.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 6 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb10.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image10.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 7 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb11.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image11.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 8 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb12.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image12.png) - -[![PowerGUI Pro MobileShell ScreenShot Tour - 9 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb13.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image13.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 10 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb14.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image14.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 11 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb15.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image15.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 12 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb16.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image16.png) - -As you can see from this screenshot tour, this user experience is much richer and it gives you a full management console on the go, allowing you to respond to issues you are responsible for no matter where you are or what time it is.  It"™s also configurable using role-based access control (RBAC), so you can assign different PowerPacks to different MobileShell users based on their AD user and group membership.  Even better, we make configuration of this functionality even easier by providing you with a MobileShell Administration PowerPack as part of the PowerGUI Pro 3.0 package. - -If you"™re interested in trying this functionality out, here"™s what you need to do: - - 1. Make sure you have an IIS server ready where you can install it. - 2. Install MobileShell on the IIS server.  The MobileShell installer is pretty self-explanatory. - 3. If you didn"™t add the MobileShell users during the installation, add anyone who you want to be able to access MobileShell to the PowerGUI MobileShell Users group (note: there may be a delay once you add users before they have access, up to 15 minutes). - 4. Install the PowerGUI Pro Admin Console on the IIS Server with the MobileShell Administration PowerPack. - 5. Open the PowerGUI Pro Admin Console. - 6. In the MobileShell Administration PowerPack, select Users and then click on the Add User action to add your user account.  Repeat this for each user account you want to provide access to. - 7. Select the PowerPacks node and then click on the Publish PowerPack action.  Provide the path for the PowerPack you want to expose via MobileShell and then click on OK.  Repeat this for each PowerPack you want to expose via MobileShell. - 8. Go back to the Users node, select the users you want to provide PowerPack access to, and then click on Assign PowerPack to assign one of the PowerPacks you have published to the selected users. - -At this point you should be ready to go with your first MobileShell management experience.  Point your WebKit-enabled web browser to https://_serverName_/MobileShell/Admin, sign-in, and you"™re off and running! - -Note: PowerPacks don"™t support the new MobileShell management experience by default.  We made the decision to make it off by default because we wouldn"™t be able to tell which PowerPacks would display UI on the web server (such as a message box) reliably.  Any PowerPack can support this new experience though, they just need to be updated to suppor tit. The core PowerPacks that ship with PowerGUI Pro have been updated to support this new management experience so you"™re already enabled with a rich mobile management experience for Active Directory, VMware, Exchange, and Windows management.  I"™ll write another post later that describes what is required to turn on mobile management for a PowerPack. - -That"™s it for this post.  If you have any questions, don"™t hesitate to ask. - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[MobileShell](http://technorati.com/tags/MobileShell) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/648/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/648/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=648&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://www.powerguipro.com/ "PowerGUI Pro" - [2]: http://www.powergui.org/ "PowerGUI.org" diff --git a/content/articles/2011-07-20-powergui-3-0-hotfix-double-clicking-on-a-ps1-psm1-or-psd1-file-to-open-the-script-editor-shows-the-start-page-as-the-active-page-in-the-script-editor.md b/content/articles/2011-07-20-powergui-3-0-hotfix-double-clicking-on-a-ps1-psm1-or-psd1-file-to-open-the-script-editor-shows-the-start-page-as-the-active-page-in-the-script-editor.md deleted file mode 100644 index f2958ff31..000000000 --- a/content/articles/2011-07-20-powergui-3-0-hotfix-double-clicking-on-a-ps1-psm1-or-psd1-file-to-open-the-script-editor-shows-the-start-page-as-the-active-page-in-the-script-editor.md +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: "PowerGUI® 3.0 Hotfix: Double-clicking on a ps1, psm1, or psd1 file to open the Script Editor shows the Start Page as the active page in the Script Editor" -authors: - - Kirk Munro -date: "2011-07-20T22:11:47+00:00" -aliases: - - /2011/07/powergui-3-0-hotfix-double-clicking-on-a-ps1-psm1-or-psd1-file-to-open-the-script-editor-shows-the-start-page-as-the-active-page-in-the-script-editor/ ---- - -This article describes an issue that was introduced into both [PowerGUI][1] and [PowerGUI Pro][2] when version 3.0 was released and provides a recommended solution to that issue. - -#### Problem - -While the [PowerGUI][1] Script Editor is closed, double-clicking on a ps1, psm1 or psd1 file or right-clicking on one of those file types and selecting "Open with PowerGUI Script Editor" will open the file you selected in the Script Editor as expected; however the Start Page will appear as the active tab in the Script Editor instead of the file you opened. - -#### Affected Products - - * PowerGUI 3.0 (freeware) - * PowerGUI Pro 3.0 - -#### Solution - -To resolve this problem, a new version of the [Script Editor Essentials][3] Add-on has been released.  This version (3.0.0.75) includes a modification to the Script Editor behaviour such that any file you use to open the PowerGUI Script Editor will immediately become the active file. - -**To install this hotfix, please follow these steps:** - -_If you are connected to the Internet_ - - 1. **Open** the PowerGUI Script Editor. - 2. **Run** the following command from the embedded PowerShell console: - -`$oldState - - - -= - - - -$PGSE - -. - -Configuration - -[ - -' - -/CollectAndSendInformation - -' - -] - - -if - - ( - --not - - - -$oldState - -) { - - -$PGSE - -. - -Configuration - -[ - -' - -/CollectAndSendInformation - -' - -] - -= - - - -$true - - -} - -`3. Select **Tools** | **Find Add-ons Online** to show the Find Add-ons Online dialog. - 4. **Type** "Script Editor Essentials" into the text box at the top of the Find Add-ons Online dialog. - 5. Click on the **Search** button. - 6. Once the search results are returned, **Select** the Script Editor Essentials Add-on if it is not already selected. - 7. Click on the **Install** button to download, install and load the Script Editor Essentials Add-on. - 8. Once the Script Editor Essentials Add-on is installed, **run** the following command from the embedded PowerShell console: - - -`if - - ( - --not - - - -$oldState - -) { - - -$PGSE - -. - -Configuration - -[ - -' - -/CollectAndSendInformation - -' - -] - -= - - - -$false - - -} - -`9. **Close** the PowerGUI Script Editor. - -_If you are not connected to the Internet_ - - 1. Open your web browser and **browse** to [http://www.powergui.org/entry.jspa?externalID=2952][4]. - 2. **Follow** the steps outlined in the "Manual install" section on that page, copying the Add-on.ScriptEditorEssentials.zip between machines as appropriate. - 3. **Close** the PowerGUI Script Editor. - -At this point you should be able to double-click on ps1, psm1 or psd1 files if you file association is set up and have those files open in the PowerGUI Script Editor as the active document. - -#### - -#### Feedback - -This solution is being provided based on the feedback of users who notified us about the issue two days ago on the forums.  If you have any questions about this solution, please let us know in the forums or in the comments on this post. - -Thanks! - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI),[hotfix](http://technorati.com/tags/hotfix) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/674/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/674/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=674&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://www.powergui.org/ "PowerGUI.org" - [2]: http://www.powerguipro.com/ "PowerGUI Pro" - [3]: http://www.powergui.org/entry.jspa?externalID=2952 "PowerGUI Script Editor Essentials Add-on" - [4]: http://www.powergui.org/entry.jspa?externalID=2952 "http://www.powergui.org/entry.jspa?externalID=2952" diff --git a/content/articles/2011-07-28-one-for-the-road-stepping-away-from-powergui.md b/content/articles/2011-07-28-one-for-the-road-stepping-away-from-powergui.md deleted file mode 100644 index c89862a38..000000000 --- a/content/articles/2011-07-28-one-for-the-road-stepping-away-from-powergui.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: "One for the road: Stepping away from PowerGUI®" -authors: - - Kirk Munro -date: "2011-07-29T04:01:30+00:00" -aliases: - - /2011/07/one-for-the-road-stepping-away-from-powergui/ ---- - -Today was one of my most difficult days in my 7½+ year career at Quest Software.  The same week that I was given a performance raise (I got that email on Monday), this afternoon I got a phone call from the director over my business unit letting me know that my position has been cut effective immediately.  Part of a book balancing effort it seems –  funny (or not so much) how life works sometimes. - -I"™ve accomplished a lot while working at Quest, and spent a ton of professional and personal energy on the company and its products, particularly [PowerGUI][1] (far too much energy if you ask my wife, and today I must say I"™m tending to agree). - -Since I started working with the PowerGUI team at Quest back in 2007 (back in the version 1.0.x days) I have: - - * been awarded the Microsoft MVP award for my community support Windows PowerShell four years in a row - * received recognition as a Quest Software expert in Windows Management (only 1% of the company employees have received this recognition) - * provided feedback and direction over the product and its features through 3 major release cycles and many minor releases - * supported the product and the community as a PowerPack developer, then as a PowerShell Solutions Architect, and most recently as the Product Manager (although I never could get those other positions backfilled so I ended up wearing all three hats most of the time) - * released dozens of extensions for the product, including PowerPacks for platforms such as Active Directory, VMware, Hyper-V, and Exchange, and Add-ons such as the [Script Editor Essentials][2] Add-on or others for specific features such as script signing, transcription, the PowerShell blue console theme, and many more - * pushed the number of commercial features in PowerGUI Pro from two when I took over as Product Manager to over six in the current version with many more on the way - * initiated strategic partnerships with key enterprises such as NetApp and Intel and helped them create their own PowerPacks for their platforms - * helped drive traffic to the [powergui.org][3] site through my blog and through social media as we grew the number of downloads from 100000 to over 1.2 million - * provided feedback and direction to internal teams at Quest with PowerShell support in their products - * successfully presented well-received PowerShell-focused sessions at many user groups and also at conferences such as Microsoft TechEd, the TEC conference, the PowerShell Deep Dive (a mini-conference in the TEC conference), and TechDays Canada - * been elected as President for the [PowerShellCommunity.org][4] site - * coordinated and provided direction over the first ever PowerShell Deep Dive conference - -Unfortunately, most of that is now a legacy as it came to an abrupt end today.  I"™m still a PowerShell MVP, and I will still be involved with the PowerShell community, however my work on PowerGUI has stopped for now. - -Before I step back from this though, and before I reorganize/refocus my efforts onto more important things, I wanted to share one more new PowerGUI feature that I recently created for the community that I have spent so much time with these past 4 years.  I still have a strong affinity for PowerGUI and a lot of my heart and soul has gone into this product, and this feature is just a small example of that effort.  The new feature comes as part of the [Call Stack Window add-on][5] that I just published in the PowerGUI Add-on library.  Here"™s a screenshot showing you what this add-on looks like in action: - -[![PowerGUI Script Editor Call Stack Window](http://kirkmunro.files.wordpress.com/2011/07/debugwindows-callstack.png?w=604&h=422)][5] - -This add-on adds a call stack window to your PowerGUI Script Editor every time you start debugging a script. Working with a call stack while you debug anything beyond the most simple of scripts is essential because it provides you with a list of all nested calls that led up to the current line of script in your debug session. You can use this to determine where functions are being called from by setting a breakpoint inside a function and then walking up the call stack to see the script used to call the function. Also, this window has double-click support, so if you would like to go to any location in the call stack, simply double-click on the location you wish to see and the add-on will take you there, even if the file in question isn"™t open at the time. - -I was considering putting this feature in the Pro version in a future release, but that is beyond my control now so I decided I"™d share what I have today and let you guys have fun with it.  Since I created the feature in this add-on, it"™s been an incredibly useful feature to me and I hope you guys enjoy it as well.  To get this Add-on, simply select Tools | Find Add-ons Online in your PowerGUI Script Editor and search for "Call Stack". - -That will most likely be my last PowerGUI-centric post for a while, and it will be my last post for at least a week while I take a much needed vacation before moving on to new things. - -Thank you for your continued support through the past four years.  I hope this post finds you well. - -Sincerely, - -Kirk Munro -Former Product Manager of PowerGUI Pro and PowerGUI - -P.S. If you are in need of someone with my skills, either as a Product Manager, a PowerShell MVP, an expert in Windows management (with a strong focus on Active Directory and Exchange although I"™ve also gotten deeply involved in virtualization with Hyper-V and VMware as well), a social media/community site manager, or as a freelance writer, my schedule has all of a sudden become much less busy and I"™m interested in filling up that time with new work once I come back from vacation, so please get in touch. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/679/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/679/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=679&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://www.powergui.org/ "PowerGUI.org" - [2]: http://www.powergui.org/entry.jspa?externalID=2952 "PowerGUI Script Editor Essentials Add-on" - [3]: http://www.powergui.org/entry.jspa?externalID=3523 "PowerGUI.org" - [4]: http://powershellcommunity.org/ - [5]: http://www.powergui.org/entry.jspa?categoryID=387&externalID=3641 "PowerGUI Script Editor Call Stack Window Add-on" diff --git a/content/articles/2011-09-06-seasons-of-change-new-product-manager-for-powerwf-and-powerse-at-devfarm-software.md b/content/articles/2011-09-06-seasons-of-change-new-product-manager-for-powerwf-and-powerse-at-devfarm-software.md deleted file mode 100644 index 4395d1084..000000000 --- a/content/articles/2011-09-06-seasons-of-change-new-product-manager-for-powerwf-and-powerse-at-devfarm-software.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: "Seasons of change: new Product Manager for PowerWFâ„¢ and PowerSE at Devfarm Software" -authors: - - Kirk Munro -date: "2011-09-06T19:24:56+00:00" -aliases: - - /2011/09/seasons-of-change-new-product-manager-for-powerwf-and-powerse-at-devfarm-software/ ---- - -I always enjoy this time of year.  There is something about the transition that happens over Labour Day weekend that always gets me excited.  Maybe it"™s a lingering feeling of anticipation over the new year at school or university from years gone by, a feeling that I can still appreciate these days as I watch my kids getting excited about their education and the new activities they will sign up for this fall.  Regardless, it"™s always a fun time of year for me. - -This year though I have some extra reasons of my own to be even more excited.  As of this morning, I am now working as Product Manager for the [PowerWF][1] and [PowerSE][2] products at [Devfarm Software][3]!  I am absolutely thrilled about this new position!  [Devfarm][3] has a great team and a great set of products, and I"™m really happy to be able to help them drive those products forward. - -With this news, today marks the end of a month that included some vacation time, some time to step back and refocus, and some time for reflection on what to do next.  During this time I received a ton of support from friends and followers in the PowerShell community, and for that I am very grateful.  This support helped one particular sentiment that I came across stay with me: - -> You know for a (while) I (wondered if) going back to the amazing experience of (PowerShell) wouldn't be a good idea, but really now I've come completely around because (software can be) stressful and hard to make but ultimately what makes (it) fun is the people that you work with, and the fact that (I"™m) going to be working with a lot of the old gang, with a lot of friends, and obviously making some new friends is really the point of being here, so I'm extremely thrilled.1 - -This really represents how I have felt since my departure from my last job as Product Manager for PowerGUI.  I really love PowerShell as a technology, but as great as that technology is, it just wouldn"™t be the same without the community that surrounds it.  PowerShell is blessed to have a tremendous community, and I am very, very proud to be able to continue to participate in that same community as a Product Manager for some really cool products that use PowerShell, as a PowerShell MVP, and as a geek who fell in love with technology a long time ago. - -Now that I"™ve found my new direction and focus, it"™s time to get down to business.  Whether you"™re a current user of [PowerWF][1] or [PowerSE][2] or someone who is interested in trying [PowerWF][1] or [PowerSE][2], I"™d love to connect with you to hear what you like (or don"™t like) about these products as well as what you would like to see added to them in the future.  Feel free to reach out to me at any time either in my blog comments or by using the [Contact Me][4] form on my blog.  I"™m really looking forward to working with you. - -Kirk out. - -1 Paraphrased from Peter Jackson"™s speech on the first day of filming for "The Hobbit"; his exact speech can be heard here: . - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerWF](http://technorati.com/tags/PowerWF),[PowerSE](http://technorati.com/tags/PowerSE),[Devfarm](http://technorati.com/tags/Devfarm) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/705/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/705/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=705&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://powerwf.com/ - [2]: http://powerwf.com/products/powerse.aspx - [3]: http://devfarm.com/ - [4]: http://poshoholic.com/contact-me/ diff --git a/content/articles/2011-09-18-pscx-2-1-beta-1-available-for-download.md b/content/articles/2011-09-18-pscx-2-1-beta-1-available-for-download.md deleted file mode 100644 index 0581c4e30..000000000 --- a/content/articles/2011-09-18-pscx-2-1-beta-1-available-for-download.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: PSCX 2.1 Beta 1 Available for Download -authors: - - Keith Hill -date: "2011-09-19T04:17:17+00:00" -aliases: - - /2011/09/pscx-2-1-beta-1-available-for-download/ ---- - -I just uploaded beta 1 for the PowerShell Community Extensions version 2.1. This beta drop adds better support for Windows PowerShell V3 that is in the Windows 8 Developer Preview. There are a number of bug fixes in this drop: - - * 28023 Read-Archive : Cannot bind parameter 'Path'. Cannot convert the ... value of type "System.String" to type "Pscx.IO.PscxPathInfo". - * 28198 Test-XML not validating xml against schema correctly - * 28964 Get-FileTail access conflict - * 29255 Get-HttpResource Timeout Bug - * 29598 String – PscxPathInfo ParameterBindingException - * 30169 Invoke-Ternary example doesn't work - * 30921 Invoke-Elevated demands arguments - - You can download the beta from [here][1]. - - [![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/232/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/232/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=232&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) - - [1]: http://pscx.codeplex.com/releases/view/73566 diff --git a/content/articles/2011-10-14-powerse-2-5-3-is-now-available.md b/content/articles/2011-10-14-powerse-2-5-3-is-now-available.md deleted file mode 100644 index 6435c12c8..000000000 --- a/content/articles/2011-10-14-powerse-2-5-3-is-now-available.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: PowerSE 2.5.3 is now available -authors: - - Kirk Munro -date: "2011-10-14T15:02:05+00:00" -aliases: - - /2011/10/powerse-2-5-3-is-now-available/ ---- - -A little over a week ago we released [PowerSE 2.5.3][1] to the web.  You can download the latest release [here][1].  This release includes many great improvements to the [PowerSE][1] product, many of which were requested by you, so thanks for your feedback and please keep it coming! - -#### No time limit for freeware - -With this release, we"™ve removed the requirement to re-download this product every 60 days.  This was our number one feature request since we made [PowerSE][1] a freeware product.  Now when you download [PowerSE][1] 2.5.3, it is truly freeware and you can use it as long as you like! - -#### PowerVI Integration - -Since [PowerVI][2] has joined the Devfarm family of products, we have now improved the integration between [PowerVI][2] and [PowerSE][1] and [PowerWF][3]. This enables easier authoring and testing of VMware automation scripts and workflows before you publish them to be integrated in the vSphere client, and it highlights one of the greatest values of the Devfarm products "“ the rich integration between them that make everything much easier. - -#### **Tabs to spaces support** - -We"™ve added support for configuring how tabs are used in the [PowerSE][1] Script Editor.  If you want spaces inserted when you press the Tab key while editing scripts, all you need to do is to set $psise.Settings.AutoConvertTabsToSpaces to $true in the embedded console.  If you want the tab size to be something other than the default value of 4, you simply set $psise.Settings.TabSize to the number of spaces you want to use for tab characters.  These only need to be set once, so you can simply make the calls in the embedded console and then you"™ll always have it configured that way going forward. - -#### Enhanced history pane - -The history pane in [PowerSE][1] has always been useful, but now it"™s much better!  With the history pane in [PowerSE][1] 2.5.3, you can identify which commands were successful and which were not, all at a glance by looking at the icon.  You can also tell which commands were allowed to run to completion and which were cancelled.  Most importantly, you can identify the duration of any command that you run, so if you are trying to get the most performance from your scripts, this is an easy way to compare the performance for several related commands so that your scripts run as fast as they can. - -#### Greatly improved support for international environments - -In previous releases of [PowerSE][1], there were a number of defects preventing international keyboard layouts (i.e. those other than "US English") from working properly in the embedded console.  Those defects have been fixed, so now you can use the embedded console with international keyboards just fine. - -We also added support for Unicode characters to the embedded console, making it easier for customers to get the output they expect regardless of where they happen to be. - -#### Multi-select support in the File|Open dialog - -With [PowerSE][1] 2.5.3, you can open multiple files in one folder at once by simply selecting the files you want before you click on the Open button.  This can be a big timesaver when you are working with modules containing many files! - -#### Smarter variable Intellisense - -When you enter a variable name in a script, it can be difficult to determine if you are entering the name of an existing variable or if you are creating a new variable.  Previous releases would sometimes complete a variable name incorrectly when you were in fact creating a new variable name.  This shouldn"™t be a problem any longer, because we now allow you to enter new variable names and the auto-completion should only happen when you want it to happen. - -#### Proper ps1xml file support - -In [PowerSE][1] 2.5.3, if you are working with ps1xml files, you will now get proper Intellisense as well as auto-completion of xml elements as you would expect. - -#### Fast clearing of the embedded console window - -In today"™s era of PowerShell, we all want to do more in less time, so much so that even typing in cls in the embedded console and pressing Enter can be cumbersome when you do it repeatedly.  [PowerSE][1] 2.5.3 allows you to clear the embedded console window at any time by simply pressing Ctrl+Del. - -#### And more"¦ - -This is just a short list of some of the key changes we have made in this release.  There are others that I want to talk about, but I"™m going to save a few for follow-up blog posts.  We"™ve been spending a lot of time on [PowerSE][1] recently, and between our hard work and your great feedback, we"™ve built a fantastic, best-in-class PowerShell script editor!  If you write PowerShell scripts, I encourage you to give this release a try, and be sure to let us know what you think!  Also, if you have any questions, feel free to leave me a note on my blog or pop over to [www.devfarm.com][4] and ask us directly in the chat window.  We"™re always listening! - -Thanks, - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[PowerSE](http://technorati.com/tags/PowerSE),[PowerWF](http://technorati.com/tags/PowerWF),[PowerVI](http://technorati.com/tags/PowerVI),[Devfarm](http://technorati.com/tags/Devfarm) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/717/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/717/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=717&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://powerwf.com/products/powerse.aspx - [2]: http://powerwf.com/products/powerscripter.aspx - [3]: http://powerwf.com/products/powerwf.aspx - [4]: http://www.devfarm.com/ diff --git a/content/articles/2011-10-19-windows-powershell-version-3-simplified-syntax.md b/content/articles/2011-10-19-windows-powershell-version-3-simplified-syntax.md deleted file mode 100644 index f19eabccb..000000000 --- a/content/articles/2011-10-19-windows-powershell-version-3-simplified-syntax.md +++ /dev/null @@ -1,193 +0,0 @@ ---- -title: Windows PowerShell Version 3 Simplified Syntax -authors: - - Keith Hill -date: "2011-10-20T00:44:42+00:00" -aliases: - - /2011/10/windows-powershell-version-3-simplified-syntax/ ---- - -Windows PowerShell version 3 introduces a simplified syntax for the Where-Object and Foreach-Object cmdlets. The simplified syntax shown below, eliminates the curly braces as well as the need for the special variable $_. - - - - - - - -`C:\PS> Get-Process | Where PM -gt 100MB -... -C:\PS> Get-Process | Foreach Name -... -`The intent of this "syntax" is to make it easier for folks get started with PowerShell. Compared to the commands below, I can see the value of the simplified syntax: - - - - - - - -`C:\PS> Get-Process | Where {$_.PM -gt 100MB} -... -C:\PS> Get-Process | Foreach {$_.Name} -... -`When folks are first learning PowerShell, the special variable $_ is one of those mental model hurdles they have to get over. The simplified syntax feature of V3 seems to generate a fair amount of controversy (is it really necessary, doesn"™t this just complicate things more, etc). Regardless of where you stand on the simplified syntax it is useful to understand how it works. - -Given that it appears to be a simplified expression syntax you might think this required a change to the PowerShell parser"™s grammar but you would be wrong. It turns out that the simplified syntax is implemented by additional parameter sets "“ lots of additional parameter sets. In fact, for every operator supported, there is an additional parameter set to support that operator. Let"™s see this with the Where-Object cmdlet by listing out all of its parameter set names: - - - -`C:\PS> Get-Command Where-Object | Select -Expand ParameterSets | Format-Table Name -Name ----- -EqualSet -ScriptBlockSet -CaseSensitiveGreaterThanSet -CaseSensitiveNotEqualSet -LessThanSet -CaseSensitiveEqualSet -NotEqualSet -GreaterThanSet -CaseSensitiveLessThanSet -GreaterOrEqualSet -CaseSensitiveGreaterOrEqualSet -LessOrEqualSet -CaseSensitiveLessOrEqualSet -LikeSet -CaseSensitiveLikeSet -NotLikeSet -CaseSensitiveNotLikeSet -MatchSet -CaseSensitiveMatchSet -NotMatchSet -CaseSensitiveNotMatchSet -ContainsSet -CaseSensitiveContainsSet -NotContainsSet -CaseSensitiveNotContainsSet -InSet -CaseSensitiveInSet -NotInSet -CaseSensitiveNotInSet -IsSet -IsNotSet -`Most of these correspond to the operators you are already familiar with such as: "“GT, "“LT, "“GE, "“LE, "“LIKE, "“MATCH, "“NOTMATCH, "“CONTAINS, "“NOTCONTAINS, etc. Note however there are two new operators in PowerShell V3: "“In and "“NotIn which you can use like so: - - - - - -`C:\PS> 1 -In 1..10 -True -C:\PS> 20 -NotIn 1..10 -True -`Let"™s look at the interesting parameters on these operator specific parameter sets. Let"™s look at the EqualsSet parameter set: - - - - - -`C:\PS> Get-Command Where-Object | Select -Expand ParameterSets | Where Name -eq EqualSet | - Select -Expand Parameters | Where Position -ge 0 | - Format-Table Name,Position,IsMandatory -AutoSize -Name Position IsMandatory ----- -------- ----------- -Property 0 True -Value 1 False -`As it turns out, these results are the same for all the _operator_ oriented parameter sets. At the very minimum, the Property parameter is required and is always the first positional parameter. And as you would expect, if you don"™t provide it, you get prompted for a value: - - - - - -`C:\PS> Get-Process | Where -eq -cmdlet Where-Object at command pipeline position 2 -Supply values for the following parameters: -Property: -`Now even though Value parameter is specified as not mandatory, in many cases if you don"™t provide it you will get a terminating error e.g.: - - - - - -`C:\PS> Get-Process | Where Name -eq -Where-Object : The specified operator requires both the -Property and -Value parameters. Supply both parameters and -retry. -At line:1 char:15 -+ Get-Process | Where Name -eq -+ ~~~~~~~~~~~~~~ - + CategoryInfo : InvalidArgument: (:) [Where-Object], PSArgumentException - + FullyQualifiedErrorId : ValueNotSpecifiedForWhereObject,Microsoft.PowerShell.Commands.WhereObjectCommand -`There are some cases where you don"™t have to provide the value nor the operator e.g.: - - - - - -`C:\PS> Get-Process | Where Responding -Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName -------- ------ ----- ----- ----- ------ -- ----------- - 216 10 3560 2896 73 4000 atieclxx - 130 7 2380 1028 33 1020 atiesrxx - 157 11 17288 13344 49 7876 audiodg - 28 6 1256 420 42 0.06 2752 BluetoothHeadsetProxy -... -`This works because A) the EqualsSet parameter set is the default parameter set and B) the Where-Object implementation appears to coerce the property specified (_Responding_ in this case) to Boolean. If the result is $true then the object is output by Where-Object and sent on its way down the pipeline. - -So all this simplified syntax really is, is a bunch of operator specific parameter sets on Where-Object that have a positional and mandatory Property parameter of type [string] and a positional Value parameter of type [object]. In the case of Foreach-Object it is one extra parameter set called PropertyAndMethodSet which has one mandatory, positional parameter called MemberName. And as with any cmdlet, you provide the parameter values and the cmdlet determines how to interpret them. In fact, given standard parameter parsing behavior the below is as valid as the conventional notation: - - - - - -`C:\PS> Get-Process | Where -GT PM 100MB -... -C:\PS> Get-Process | Where PM 100MB -GT -... -C:\PS> Get-Process | Where -Value 100MB -Property PM -GT -... -`Now where this syntax can lead you astray if you don"™t understand how it works, is if you make the assumption that this is a parsed expression. In that case, folks might expect this to work: - - - - - - - - -`C:\PS> Get-Process | Where Threads.Count -GT 100 -`There *is* a Threads collection on each Process object. We might think that we can access a property on that collection but in effect, what happens is that the Where-Object Property parameter gets the value "Threads.Count" and there is no property on a Process object called "Threads.Count". This silently fails which might lead you to believe there are no processes with greater than 100 threads. But reverting back to the standard syntax we see that isn"™t the case: - - - - - - - - -`C:\PS> Get-Process | Where {$_.Threads.Count -GT 100} -Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName -------- ------ ----- ----- ----- ------ -- ----------- - 2080 126 155680 139928 531 113.68 4920 msnmsgr - 1087 0 312 8800 15 4 System -`So when you are using the simplified syntax be sure to keep in mind that you can **only **specify property names and you cannot access sub-properties. Keep your property names simple and you should be copasetic with the new, simplified syntax. While I"™m a little unsure about the new simplified syntax given how quickly you can fall off the "simple" path into the sharp rocks and lava below, I will say this. As I wrote this blog post, I used the simplified syntax quite a bit and I have to say that it is growing on me. - - - - - - One final item to mention about simplified syntax. It turns out that some folks have a hard time grokking $_ but when they"™re presented with **$PSItem** it apparently makes more sense to them. So in PowerShell v3, wherever you can use $_ you can also use $PSItem. $PSItem is not an alias. It seems to be a duplicate variable defined in all the same scopes as $_ and its value tracks that of $_ e.g.: - - - - - - -`C:\PS> 1 | Foreach {Get-Variable _,psitem; $_ = 4; Get-Variable _,psitem} -Name Value ----- ----- -_ 1 -PSItem 1 -_ 4 -PSItem 4 -`[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/233/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/233/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=233&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2011-12-05-microsoft-windows-powershell-v3-ctp2-available-for-download.md b/content/articles/2011-12-05-microsoft-windows-powershell-v3-ctp2-available-for-download.md deleted file mode 100644 index a2d565235..000000000 --- a/content/articles/2011-12-05-microsoft-windows-powershell-v3-ctp2-available-for-download.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Microsoft Windows PowerShell V3 CTP2 Available for Download -authors: - - Keith Hill -date: "2011-12-05T17:40:24+00:00" -aliases: - - /2011/12/microsoft-windows-powershell-v3-ctp2-available-for-download/ ---- - -You can grab the bits from [here][1]. If you have V3 CTP1 installed, please uninstall it first or you can get your machine into a bad state. - -So far my favorite two features new to this drop are both in the Integrated Scripting Editor (ISE). The first is the "most recently opened files list" on the File menu and second is the switch to a two pane ISE (combines the output and command panes into one). Oh yeah, there isn"™t much in the help system until you run Update-Help from an elevated prompt. - -[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/238/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/238/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=238&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) - - [1]: http://www.microsoft.com/download/en/details.aspx?id=27548 diff --git a/content/articles/2011/03/_index.md b/content/articles/2011/03/_index.md new file mode 100644 index 000000000..bf0bf813a --- /dev/null +++ b/content/articles/2011/03/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from March 2011" +description: "PowerShell.org Articles published in March 2011." +--- diff --git a/content/articles/2011/03/adam-driscoll-talks-about-powershell-and-powergui-on-net-rocks/index.md b/content/articles/2011/03/adam-driscoll-talks-about-powershell-and-powergui-on-net-rocks/index.md new file mode 100644 index 000000000..b137c5d06 --- /dev/null +++ b/content/articles/2011/03/adam-driscoll-talks-about-powershell-and-powergui-on-net-rocks/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2011-03-22-adam-driscoll-talks-about-powershell-and-powergui-on-net-rocks/ +title: Adam Driscoll talks about PowerShell and PowerGUI® on .NET Rocks! +authors: + - Kirk Munro +date: "2011-03-22T17:00:00+00:00" +aliases: + - /2011/03/adam-driscoll-talks-about-powershell-and-powergui-on-net-rocks/ +--- + +Recently Adam Driscoll of [PowerGUI VSX][1] fame was a guest on the [.NET Rocks!][2] podcast show, chatting with Carl and Richard about his TFS plugin for Android, PowerShell, [PowerGUI][3], and [PowerGUI VSX][1].  Today that show was made available for download, so head on over to the [.NET Rocks!][2] page listen to Adam, Carl and Richard in [Episode 647 of .NET Rocks!][4] + +Enjoy! + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI](http://technorati.com/tags/PowerGUI),[PowerGUI VSX](http://technorati.com/tags/PowerGUI+VSX),[podcast](http://technorati.com/tags/podcast) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/520/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/520/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=520&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://visualstudiogallery.msdn.microsoft.com/01516103-d487-4a7e-bb40-c15ec709afa3/ + [2]: http://www.dotnetrocks.com/ + [3]: http://www.powergui.org/ + [4]: http://www.dotnetrocks.com/default.aspx?showNum=647 diff --git a/content/articles/2011/03/happy-4th-birthday-powergui/index.md b/content/articles/2011/03/happy-4th-birthday-powergui/index.md new file mode 100644 index 000000000..5b1fcdab6 --- /dev/null +++ b/content/articles/2011/03/happy-4th-birthday-powergui/index.md @@ -0,0 +1,33 @@ +--- +url: /articles/2011-03-28-happy-4th-birthday-powergui/ +title: Happy 4th Birthday PowerGUI®! +authors: + - Kirk Munro +date: "2011-03-29T00:52:30+00:00" +aliases: + - /2011/03/happy-4th-birthday-powergui/ +--- + +Today is [PowerGUI][1]"™s 4th birthday, and what would a birthday be without cake?  The awesome graphic artists that provide me with all of our fun desktop wallpaper for PowerGUI have done it again with a new desktop wallpaper image to celebrate PowerGUI"™s birthday.  You can download it from the [downloads page on PowerGUI.org][2], or you can click on this picture to download a high-resolution version directly: + +[![image](http://kirkmunro.files.wordpress.com/2011/03/image2.png?w=504&h=316)](http://www.powergui.org/servlet/KbServlet/download/3422-102-5427/1920x1200.jpg) + +It"™s hard to believe it"™s been 4 years already since PowerGUI was first made available for download on March 28, 2007.  What an amazing 4 years it has been too! What started out as a free extensible Administrative Console based on Windows PowerShell has grown into an award winning product that also includes a free extensible Script Editor with tons of useful features like Intellisense, syntax highlighting, script snippets, script signing, and many, many more.  There"™s even a Pro version called [PowerGUI® Pro][3] that adds Version Control, Easy Remote Script Execution, and a component called MobileShell that allows you to perform systems management from your handheld device! + +It"™s been great fun having a direct hand in helping make this happen, but this product would not be what it is today without the support that we have received from the community!  Your feedback and support through our [PowerGUI.org][1] community site, on Twitter, on FaceBook, and blogs and articles around the web has been fantastic and it"™s something that I appreciate every single day!  Thank you for helping this product to continue to grow! + +I hope you enjoy celebrating PowerGUI"™s birthday with us this week with the fantastic wallpaper, and look forward to continuing to watch this product grow for many years to come! + +Enjoy! + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI),[wallpaper](http://technorati.com/tags/wallpaper) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/532/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/532/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=532&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://www.powergui.org/ + [2]: http://poshoholic.com/2011/03/28/happy-4th-birthday-powergui/www.powergui.org/downloads.jspa + [3]: http://poshoholic.com/2011/03/28/happy-4th-birthday-powergui/www.powerguipro.com diff --git a/content/articles/2011/03/mvp-summit-2011/index.md b/content/articles/2011/03/mvp-summit-2011/index.md new file mode 100644 index 000000000..1a7e61187 --- /dev/null +++ b/content/articles/2011/03/mvp-summit-2011/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2011-03-09-mvp-summit-2011/ +title: MVP Summit 2011 +authors: + - Keith Hill +date: "2011-03-10T05:43:57+00:00" +aliases: + - /2011/03/mvp-summit-2011/ +--- + +Testing out my first WordPress blog post after the switch from Windows Live Spaces (sniff, I will miss you) to WordPress.  Regarding the MVP Summit last week, I can"™t really talk about much due to just about everything being NDA, NDA, NDA!  I will say that I"™m excited about the future of PowerShell!  Probably the most fun part was hanging out with the other PowerShell MVPs for a week. + +It seems to me that Microsoft still values their relationship with the MVPs as evidenced by the party they arranged for MVPs last Wednesday: + +[![MVP Summit 20110302-DSC_0052](http://rkeithhill.files.wordpress.com/2011/03/mvp-summit-20110302-dsc_0052_thumb.jpg?w=644&h=429)](http://rkeithhill.files.wordpress.com/2011/03/mvp-summit-20110302-dsc_0052.jpg) + +Yep, that is SafeCo field in Seattle where the Mariners play.  They rented the whole stadium out for the evening!  There where a couple of bands "“ one called [The Beatniks][1] played out near centerfield.  You could run the bases, bat some balls up into the stands. Yeah, it was an awesome party. + +[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/209/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/209/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=209&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) + + [1]: http://www.thebeatniks.com/im/index.php diff --git a/content/articles/2011/03/powergui-spring-2011-desktop-wallpaper/index.md b/content/articles/2011/03/powergui-spring-2011-desktop-wallpaper/index.md new file mode 100644 index 000000000..0565b4754 --- /dev/null +++ b/content/articles/2011/03/powergui-spring-2011-desktop-wallpaper/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2011-03-21-powergui-spring-2011-desktop-wallpaper/ +title: PowerGUI® Spring 2011 Desktop Wallpaper +authors: + - Kirk Munro +date: "2011-03-21T20:44:47+00:00" +aliases: + - /2011/03/powergui-spring-2011-desktop-wallpaper/ +--- + +Spring is here already, and even though it doesn"™t seem like it"™s Spring everywhere just yet (it has been snowing most of the day here in Ottawa), with the change in seasons comes a change in desktop wallpaper.  The Spring 2011 wallpaper for [PowerGUI Pro][1] and [PowerGUI][2] is now available: + +[![PowerGUI Spring 2011 Wallpaper Thumbnail](http://www.powergui.org/servlet/KbServlet/downloadImage/3402-102-425/thumbnail.jpg)](http://www.powergui.org/servlet/KbServlet/download/3402-102-5388/1920x1200.jpg) + +To download this wallpaper, simply visit the [PowerGUI downloads page][3] and scroll down to see all of the sizes and varieties that are available.  We have Fall wallpaper there as well for our friends in the southern hemisphere.  As always, all of our wallpaper images are stored in the [Wallpaper folder][4] on [PowerGUI.org][2], so if you want to use one from a previous year or a different season or holiday, take a look around"¦there are currently 27 different varieties to choose from. + +Enjoy! + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI),[wallpaper](http://technorati.com/tags/wallpaper) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/529/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/529/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=529&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://www.powerguipro.com/ + [2]: http://www.powergui.org/ + [3]: http://powergui.org/downloads.jspa + [4]: http://www.powergui.org/kbcategory.jspa?categoryID=393 diff --git a/content/articles/2011/03/powerscripting-podcast-with-jeffrey-snover-and-kenneth-hansen/index.md b/content/articles/2011/03/powerscripting-podcast-with-jeffrey-snover-and-kenneth-hansen/index.md new file mode 100644 index 000000000..024ad039c --- /dev/null +++ b/content/articles/2011/03/powerscripting-podcast-with-jeffrey-snover-and-kenneth-hansen/index.md @@ -0,0 +1,29 @@ +--- +url: /articles/2011-03-16-powerscripting-podcast-with-jeffrey-snover-and-kenneth-hansen/ +title: PowerScripting Podcast with Jeffrey Snover and Kenneth Hansen +authors: + - Kirk Munro +date: "2011-03-16T14:21:07+00:00" +aliases: + - /2011/03/powerscripting-podcast-with-jeffrey-snover-and-kenneth-hansen/ +--- + +Last week [Hal Rottenberg][1] and [Jonathan Walz][2] recorded another great episode of the [PowerScripting Podcast][3], this time with Jeffrey Snover and Kenneth Hansen as guests.  Jeffrey and Kenneth talk about PowerShell of course, but also discuss the upcoming [PowerShell Deep Dive][4] event.  You can find the link to listen to the podcast along with the show notes [here][5]. + +This podcast is a great source of PowerShell news and I highly recommend listening to it regularly.  It"™s a great way to pass the time during your daily commute to and from work.  There are 141 episodes so far, with tons of great interviews and content, so check out this podcast when you have some time.  It"™s definitely worth it. + +Enjoy! + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[podcast](http://technorati.com/tags/podcast) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/527/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/527/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=527&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://www.halr9000.com/ + [2]: http://twitter.com/#!/jonwalz + [3]: http://powerscripting.wordpress.com/ + [4]: http://www.theexpertsconference.com/us/2011/general-information/2011-powershell-deep-dive/ + [5]: http://powerscripting.wordpress.com/2011/03/14/episode-141-the-powershell-deep-dive-conference-with-jeffrey-snover-and-kenneth-hansen/ diff --git a/content/articles/2011/04/_index.md b/content/articles/2011/04/_index.md new file mode 100644 index 000000000..3e990a18e --- /dev/null +++ b/content/articles/2011/04/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from April 2011" +description: "PowerShell.org Articles published in April 2011." +--- diff --git a/content/articles/2011/04/earth-day-2011-powergui-style/index.md b/content/articles/2011/04/earth-day-2011-powergui-style/index.md new file mode 100644 index 000000000..1ffcef262 --- /dev/null +++ b/content/articles/2011/04/earth-day-2011-powergui-style/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2011-04-22-earth-day-2011-powergui-style/ +title: "Earth Day 2011 \"“ PowerGUI® Style!" +authors: + - Kirk Munro +date: "2011-04-22T14:21:14+00:00" +aliases: + - /2011/04/earth-day-2011-powergui-style/ +--- + +Today is Earth Day 2011, and you can celebrate your green side in style with the latest [PowerGUI][1]® wallpaper.  As an ecoholic myself, this wallpaper is definitely among my favorites. + +[![](http://www.powergui.org/servlet/KbServlet/download/3472-102-5523/1920x1200.jpg)](http://www.powergui.org/servlet/KbServlet/download/3472-102-5523/1920x1200.jpg) + +Show your Earth Day pride, and [download](http://www.powergui.org/servlet/KbServlet/download/3472-102-5523/1920x1200.jpg) this beautiful desktop wallpaper today! If it doesn"™t suit your style, check out the rest of the desktop wallpaper images we have in the [Wallpaper category on PowerGUI.org][2].  There are plenty to choose from! + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI),[wallpaper](http://technorati.com/tags/wallpaper) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/536/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/536/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=536&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://www.powergui.org/ "PowerGUI.org" + [2]: http://www.powergui.org/kbcategory.jspa?categoryID=393 "Wallpaper category on PowerGUI.org" diff --git a/content/articles/2011/04/learn-more-about-powershell-at-teched-2011/index.md b/content/articles/2011/04/learn-more-about-powershell-at-teched-2011/index.md new file mode 100644 index 000000000..198667421 --- /dev/null +++ b/content/articles/2011/04/learn-more-about-powershell-at-teched-2011/index.md @@ -0,0 +1,1092 @@ +--- +url: /articles/2011-04-28-learn-more-about-powershell-at-teched-2011/ +title: Learn more about PowerShell at TechEd 2011 +authors: + - Kirk Munro +date: "2011-04-28T15:15:09+00:00" +aliases: + - /2011/04/learn-more-about-powershell-at-teched-2011/ +--- + +[TechEd North America 2011][1] is coming up fast next month, so I wanted to let you know how you can learn more about PowerShell while at the conference.  PowerShell has continually had a great presence at TechEd events, and this year is no exception.  Just searching the TechEd schedule builder using the keyword "PowerShell" reveals 7 pre-event online webcasts, 2 pre-event virtual labs, 4 pre-con seminars, 2 birds of a feather discussions, 5 interactive discussions, 16 breakouts, and 9 hands-on labs this year!  Those are not all specifically focused on PowerShell, but they definitely show the amount of attention that PowerShell gets at a conference like this. + +#### PowerShell content at TechEd 2011 + +Below you will find a list of all of the PowerShell-related sessions and resources for TechEd so that you can make sure you have them added to your schedule.  The sessions that interest me the most are highlighted in bold. + + + + + **Type and Level** + + + + **Title** + + + + **Speaker** + + + + **Date** + + + + + + Pre-event webcast +200 "“ Intermediate + + + + + + [PRE001-WC | Windows PowerShell Basics for IT Professionals](http://northamerica.msteched.com/topic/details/PRE001-WC#showdetails&fbid=4S1zVddlkbN) + + + + + + Peter Lammers + + + + Online, available now + + + + + + Pre-event webcast +200 "“ Intermediate + + + + + + [PRE020-WC | Windows PowerShell Basics for IT Professionals (Part 2)](http://northamerica.msteched.com/topic/details/PRE020-WC#showdetailshttp://northamerica.msteched.com/topic/details/PRE001-WC%23showdetails&fbid=4S1zVddlkbN) + + + + + + Sean Kearney + + + + Online, available now + + + + + + Pre-event webcast +200 "“ Intermediate + + + + + + [PRE051-WC | PowerShell Week: Learn It Now before It's an Emergency (Part 1 of 5)](http://northamerica.msteched.com/topic/details/PRE051-WC#showdetails&fbid=4S1zVddlkbN) + + + + + + + + Ed Wilson + + + + + + Online, available now + + + + + + Pre-event webcast +200 "“ Intermediate + + + + + + [PRE052-WC | PowerShell Week: Learn It Now before It's an Emergency (Part 2 of 5)](http://northamerica.msteched.com/topic/details/PRE052-WC#showdetails&fbid=4S1zVddlkbN) + + + + + + Ed Wilson + + + + Online, available now + + + + + + Pre-event webcast +200 "“ Intermediate + + + + + + [PRE053-WC | PowerShell Week: Learn it now before it is an emergency (Part 3 of 5)](http://northamerica.msteched.com/topic/details/PRE053-WC#showdetails&fbid=4S1zVddlkbN) + + + + + + Ed Wilson + + + + Online, available now + + + + + + Pre-event webcast +200 "“ Intermediate + + + + + + [PRE054-WC | PowerShell Week: Learn it now before it is an emergency (Part 4 of 5)](http://northamerica.msteched.com/topic/details/PRE054-WC#showdetails&fbid=4S1zVddlkbN) + + + + + + Ed Wilson + + + + Online, available now + + + + + + Pre-event webcast +200 "“ Intermediate + + + + + + [PRE055-WC | PowerShell Week: Learn It Now before It's an Emergency (Part 5 of 5)](http://northamerica.msteched.com/topic/details/PRE055-WC#showdetails&fbid=4S1zVddlkbN) + + + + + + Ed Wilson + + + + Online, available now + + + + + + **Pre-Conference Seminar +($$$)** + + + + + + [**PRC14 | Automate Windows 7 (and Windows Server 2008 R2) Administration Using Windows PowerShell v2**](http://northamerica.msteched.com/topic/details/PRC14?fbid=4S1zVddlkbN#showdetails) + + + + + + **Don Jones** + + + + **Sunday, May 15, 10:00 AM "“ 5:30 PM** + + + + + + Pre-Conference Seminar +($$$) + + + + + + [PRC07 | Microsoft SharePoint 2010 Administration for the Seasoned SharePoint Administrator](http://northamerica.msteched.com/topic/details/PRC07?fbid=4S1zVddlkbN#showdetails) + + + + + + Shane Young, Todd Klindt + + + + Sunday, May 15, 10:00 AM "“ 5:30 PM + + + + + + Pre-Conference Seminar +($$$) + + + + + + [PRC13 | Group Policy in Windows 7 and Windows Server 2008 R2](http://northamerica.msteched.com/topic/details/PRC13?fbid=4S1zVddlkbN#showdetails) + + + + + + Jeremy Moskowitz + + + + Sunday, May 15, 10:00 AM "“ 5:30 PM + + + + + + Pre-Conference Seminar +($$$) + + + + + + [PRC04 | Build a Better Development Shop with Microsoft Virtualization Technologies and Visual Studio 2010 Lab Management](http://northamerica.msteched.com/topic/details/PRC04?fbid=4S1zVddlkbN#showdetails) + + + + + + Brian Randell + + + + Sunday, May 15, 10:00 AM "“ 5:30 PM + + + + + + **Interactive Discussion +400 "“ Expert** + + + + + + **[WSV471-INT | Build Reusable Tools in Windows PowerShell](http://northamerica.msteched.com/topic/details/WSV471-INT?fbid=4S1zVddlkbN#showdetails)** + + + + + + **Don Jones** + + + + **Monday, May 16, 1:15 PM "“ 2:30 PM** + + + + + + **Breakout Session +300 "“ Advanced** + + + + + + **[WSV316 | Windows Server 2008 R2: Tips for Automating the Breadth of Your IT Environment](http://northamerica.msteched.com/topic/details/WSV316?fbid=4S1zVddlkbN#showdetails)** + + + + + + **Dan Harman, Mir Rosenberg** + + + + **Monday, May 16, 3:00 PM "“ 4:15 PM** + + + + + + Interactive Discussion +400 "“ Expert + + + + + + [VIR471-INT | Virtualization FAQ, Tips and Tricks](http://northamerica.msteched.com/topic/details/VIR471-INT?fbid=4S1zVddlkbN#showdetails) + + + + + + Janssen Jones + + + + Monday, May 16, 3:00 PM "“ 4:15 PM + + + + + + **Birds-of-a-Feather +300 "“ Advanced** + + + + + + **[BOF04-ITP | PowerShell: Best Practices from the Field](http://northamerica.msteched.com/topic/details/BOF04-ITP?fbid=4S1zVddlkbN#showdetails)** + + + + + + **Hal Rottenberg, Ed Wilson** + + + + **Tuesday, May 17, 8:30 AM "“ 9:45 AM** + + + + + + Interactive Discussion +200 "“ Intermediate + + + + + + [OSP273-INT | Microsoft Office 365 Administration and Automation Using Windows PowerShell](http://northamerica.msteched.com/topic/details/OSP273-INT?fbid=4S1zVddlkbN#showdetails) + + + + + + Ashwin Sarin + + + + Tuesday, May 17, 8:30 AM "“ 9:45 AM + + + + + + Interactive Discussion +300 "“ Advanced + + + + + + [OSP382-INT | Windows PowerShell, the Power of the Pipe](http://northamerica.msteched.com/topic/details/OSP382-INT?fbid=4S1zVddlkbN#showdetails) + + + + + + Todd Bleeker + + + + Tuesday, May 17, 8:30 AM "“ 9:45 AM + + + + + + **Breakout Session +300 "“ Advanced** + + + + + + **[WCL303 | Advanced Troubleshooting with Resultant Set of Policy (RSoP)](http://northamerica.msteched.com/topic/details/WCL303?fbid=4S1zVddlkbN#showdetails)** + + + + + + **Jeffery Hicks** + + + + **Tuesday, May 17, 1:30 PM "“ 2:45 PM** + + + + + + Breakout Session +300 "“ Advanced + + + + + + [WSV310 | Get Out of Dodge: Migrating to Windows Server 2008 R2 x64](http://northamerica.msteched.com/topic/details/WSV310?fbid=4S1zVddlkbN#showdetails)  + + + + + + Rick Claus + + + + Tuesday, May 17, 1:30 PM "“ 2:45 PM + + + + + + Breakout Session +300 "“ Advanced + + + + + + [DBI304 | What's New in Manageability for Microsoft SQL Server Code-Named "Denali"](http://northamerica.msteched.com/topic/details/DBI304?fbid=4S1zVddlkbN#showdetails) + + + + + + Denny Cherry + + + + Tuesday, May 17, 1:30 PM "“ 2:45 PM + + + + + + Breakout Session +300 "“ Advanced + + + + + + [VIR325 | Anatomy of HP Cloud Foundation for Hyper-V](http://northamerica.msteched.com/topic/details/VIR325?fbid=4S1zVddlkbN#showdetails) + + + + + + Brad Kirby + + + + Tuesday, May 17, 5:00 PM "“ 6:15 PM + + + + + + Breakout Session +300 "“ Advanced + + + + + + [VIR314 | Understanding Server App-V, Sequencing and Deploying Datacenter Applications](http://northamerica.msteched.com/topic/details/VIR314?fbid=4S1zVddlkbN#showdetails) + + + + + + Derrick Isoka + + + + Wednesday, May 18, 8:30 AM "“ 9:45 AM + + + + + + Breakout Session +300 "“ Advanced + + + + + + [EXL318 | Monitoring Microsoft Lync 2010 Deployments](http://northamerica.msteched.com/topic/details/EXL318?fbid=4S1zVddlkbN#showdetails) + + + + + + Arish Alreja, Jeffrey Reed + + + + Wednesday, May 18, 10:15 AM "“ 11:30 AM + + + + + + **Interactive Discussion +400 "“ Expert** + + + + + + **[WSV473-INT | Windows PowerShell 3.0: Why Wait? Get Next-Generation PowerShell Functionality Today!](http://northamerica.msteched.com/topic/details/WSV473-INT?fbid=4S1zVddlkbN#showdetails)** + + + + + + **Kirk Munro** + + + + **Wednesday, May 18, 12:00 PM "“ 1:00 PM** + + + + + + **Breakout Session +400 "“ Expert** + + + + + + **[WSV406 | Advanced Automation Using Windows PowerShell 2.0](http://northamerica.msteched.com/topic/details/WSV406?fbid=4S1zVddlkbN#showdetails)** + + + + + + **Dan Harman, Jeffrey Snover** + + + + **Wednesday, May 18, 1:30 PM "“ 2:45 PM** + + + + + + Breakout Session +300 "“ Advanced + + + + + + [WCL321 | Windows PowerShell Remoting: Definitely NOT Just for Servers](http://northamerica.msteched.com/topic/details/WCL321?fbid=4S1zVddlkbN#showdetails) + + + + + + Don Jones + + + + Wednesday, May 18, 1:30 PM "“ 2:45 PM + + + + + + Breakout Session +300 "“ Advanced + + + + + + [DEV338 | NuGet: Microsoft .NET Package Management for the Enterprise](http://northamerica.msteched.com/topic/details/DEV338?fbid=4S1zVddlkbN#showdetails) + + + + + + Scott Hanselman + + + + Wednesday, May 18, 1:30 PM "“ 2:45 PM + + + + + + Breakout Session +300 "“ Advanced + + + + + + [VIR310 | Inside the LAB: Building Your Own Private Cloud Infrastructure](http://northamerica.msteched.com/topic/details/VIR310?fbid=4S1zVddlkbN#showdetails) + + + + + + Mikael Nystrom + + + + Wednesday, May 18, 1:30 PM "“ 2:45 PM + + + + + + **Breakout Session +300 "“ Advanced** + + + + + + **[WSV322 | Managing the Registry with Windows PowerShell 2.0](http://northamerica.msteched.com/topic/details/WSV322?fbid=4S1zVddlkbN#showdetails)** + + + + + + **Jeffery Hicks** + + + + **Thursday, May 19, 8:30 AM "“ 9:45 AM** + + + + + + Birds-of-a-Feather +300 "“ Advanced + + + + + + [BOF14-ITP | Challenges in Automation for Microsoft Data Repositories (Microsoft SQL Server, DPM and SharePoint)](http://northamerica.msteched.com/topic/details/BOF14-ITP?fbid=4S1zVddlkbN#showdetails) + + + + + + Kevin Kline + + + + Thursday, May 19, 8:30 AM "“ 9:45 AM + + + + + + Breakout Session +300 "“ Advanced + + + + + + [VIR326 | Fluid Data Management at Indiana University](http://northamerica.msteched.com/topic/details/VIR326?fbid=4S1zVddlkbN#showdetails) + + + + + + Janssen Jones + + + + Thursday, May 19, 8:30 AM "“ 9:45 AM + + + + + + **Breakout Session +300 "“ Advanced** + + + + + + **[EXL321 | Microsoft Lync Server 2010: Administering Lync Server Deployment](http://northamerica.msteched.com/topic/details/EXL321?fbid=4S1zVddlkbN#showdetails)** + + + + + + **Anand Lakshminarayanan, Cezar Ungureanasu** + + + + **Thursday, May 19, 10:15 AM "“ 11:30 AM** + + + + + + **Interactive Discussion +400 "“ Expert** + + + + + + **[WSV473-INT-R | Windows PowerShell 3.0: Why Wait? Get Next-Generation PowerShell Functionality Today!](http://northamerica.msteched.com/topic/details/WSV473-INT-R?fbid=4S1zVddlkbN#showdetails)** + + + + + + **Kirk Munro** + + + + **Thursday, May 19, 1:00 PM "“ 2:15 PM** + + + + + + **Breakout Session +300 "“ Advanced** + + + + + + **[WSV315 | Windows PowerShell for Beginners](http://northamerica.msteched.com/topic/details/WSV315?fbid=4S1zVddlkbN#showdetails)** + + + + + + **Jeffrey Snover, Mir Rosenberg** + + + + **Thursday, May 19, 1:00 PM "“ 2:15 PM** + + + + + + Breakout Session +300 "“ Advanced + + + + + + [DBI326 | Enterprise Data Mining with Microsoft SQL Server](http://northamerica.msteched.com/topic/details/DBI326?fbid=4S1zVddlkbN#showdetails) + + + + + + Mark Tabladillo + + + + Thursday, May 19, 2:45 PM "“ 4:00 PM + + + + + + **Hands-on Lab +200 "“ Intermediate** + + + + + + **[WSV276-HOL | Introduction to Windows PowerShell Fundamentals](http://northamerica.msteched.com/topic/details/WSV276-HOL?fbid=4S1zVddlkbN#showdetails)** + + + + + + **N/A** + + + + **Hands-on-lab, available in the TLC HOL area** + + + + + + **Hands-on Lab +300 "“ Advanced** + + + + + + **[WSV371-HOL | Advanced Windows PowerShell Scripting](http://northamerica.msteched.com/topic/details/WSV371-HOL?fbid=4S1zVddlkbN#showdetails)** + + + + + + **N/A** + + + + **Hands-on-lab, available in the TLC HOL area** + + + + + + **Hands-on Lab +300 "“ Advanced** + + + + + + **[WSV378-HOL | Server Management and Windows PowerShell V2 (V3.0)](http://northamerica.msteched.com/topic/details/WSV378-HOL?fbid=4S1zVddlkbN#showdetails)** + + + + + + **N/A** + + + + **Hands-on-lab, available in the TLC HOL area** + + + + + + Hands-on Lab +300 "“ Advanced + + + + + + [WCL376-HOL | Managing a Domain Environment More Effectively](http://northamerica.msteched.com/topic/details/WCL376-HOL?fbid=4S1zVddlkbN#showdetails) + + + + + + N/A + + + + Hands-on-lab, available in the TLC HOL area + + + + + + Hands-on Lab +300 "“ Advanced + + + + + + [WSV379-HOL | What's New in Active Directory (V3.0)](http://northamerica.msteched.com/topic/details/WSV379-HOL?fbid=4S1zVddlkbN#showdetails) + + + + + + N/A + + + + Hands-on-lab, available in the TLC HOL area + + + + + + Hands-on Lab +200 "“ Intermediate + + + + + + [WSV273-HOL | Failover Clustering Introduction with Windows Server 2008 R2](http://northamerica.msteched.com/topic/details/WSV273-HOL?fbid=4S1zVddlkbN#showdetails) + + + + + + N/A + + + + Hands-on-lab, available in the TLC HOL area + + + + + + Hands-on Lab +300 "“ Advanced + + + + + + [WSV377-HOL | Migrating DHCP and File Services with Windows Server Migration Tools](http://northamerica.msteched.com/topic/details/WSV377-HOL?fbid=4S1zVddlkbN#showdetails) + + + + + + N/A + + + + Hands-on-lab, available in the TLC HOL area + + + + + + **Hands-on Lab +300 "“ Advanced** + + + + + + **[EXL377-HOL | Managing Microsoft Lync Server 2010 Using Windows PowerShell and the Lync Server Control Panel](http://northamerica.msteched.com/topic/details/EXL377-HOL?fbid=4S1zVddlkbN#showdetails)** + + + + + + **N/A** + + + + **Hands-on-lab, available in the TLC HOL area** + + + + + + Hands-on Lab +300 "“ Advanced + + + + + + [SIM373-HOL | Microsoft System Center Service Manager 2010 Data Warehouse and Reporting](http://northamerica.msteched.com/topic/details/SIM373-HOL?fbid=4S1zVddlkbN#showdetails) + + + + + + N/A + + + + Hands-on-lab, available in the TLC HOL area + + + + +#### Quest Software Ask the Experts Session on PowerShell + +There are other items that won"™t show up in the schedule builder as well. For example, Quest Software has regular Ask the Experts sessions throughout the event, and one of those sessions will be focused on PowerShell, allowing you to ask questions to myself and Dmitry Sotnikov, watch some demos of the next version of [PowerGUI® Pro][2], and have a chance to meet us at the event.  If this interests you, mark your calendar and join Dmitry and I in the Quest Software booth in the expo hall on **Tuesday, May 17** from **12:30PM to 1:00PM**, and bring your PowerShell and [PowerGUI Pro][2] questions! + +#### + +#### + +#### WSV473-INT Windows PowerShell 3.0: Why Wait? Get Next-Generation PowerShell Functionality Today! + +If you want to find me when I"™m not working the PowerShell booth or answering questions during the Ask the Experts session on PowerShell, you can always come catch me at my session.  It is included in the session listing above.  I will be presenting a 400-level interactive discussion about PowerShell, [WSV473-INT Windows PowerShell 3.0: Why Wait? Get Next-Generation PowerShell Functionality Today!][3]  During this session I"™ll be discussing different ways that you can get next-generation PowerShell functionality today so that you don"™t have to wait as long until the next release.  This session will cover cool PowerShell features such as proxy functions, and it will also discuss Domain Specific Vocabularies, a topic I recently spoke about at the PowerShell Deep Dive.  You can read more about the session [here][3]. + +#### Important Update: + +This session has been scheduled for a second showing on Thursday, May 19, 2011 from 1:00-2:15PM, so if you can"™t make the first one, come to the second!  Here"™s the link to the update: [WSV473-INT-R | Windows PowerShell 3.0: Why Wait? Get Next-Generation PowerShell Functionality Today!][4] + +#### + +#### + +#### Watch for additional opportunities to learn about PowerShell + +Beyond these sessions, there are always other possible opportunities to learn about PowerShell while you are at TechEd 2011 in Atlanta.  The scheduled sessions at TechEd offer a ton of value already, but for me, the true value of a conference like TechEd comes from the unexpected and often unplanned side discussions that surprise you at a conference like this.  Some of my favorite discussions about PowerShell at conferences in the past have happened in an ad-hoc meeting, over breakfast, or in the PowerShell booth.  Never be afraid to start the discussion and ask others if they use PowerShell, and if possible keep your laptop handy so that you can pull it out and talk shop on the spot.  There is huge value in those discussions, and I highly recommend them. + +That"™s it from me for now.  If I hear about additional opportunities to learn more about PowerShell while at TechEd I"™ll be sure to post them here. + +Thanks for listening! + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI),[TechEd 2011](http://technorati.com/tags/TechEd+2011),[PowerShell 3.0](http://technorati.com/tags/PowerShell+3.0) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/538/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/538/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=538&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://northamerica.msteched.com/default.aspx?fbid=TzKc3Dpyi4d "TechEd North America 2011" + [2]: http://www.powerguipro.com/ "PowerGUI Pro" + [3]: http://northamerica.msteched.com/topic/details/WSV473-INT?fbid=-02hAGUgDb5#showdetails "WSV473-INT Windows PowerShell 3.0: Why Wait? Get Next-Generation PowerShell Functionality Today!" + [4]: http://northamerica.msteched.com/topic/details/WSV473-INT-R?fbid=4S1zVddlkbN#showdetails diff --git a/content/articles/2011/04/the-2011-scripting-games-have-begun/index.md b/content/articles/2011/04/the-2011-scripting-games-have-begun/index.md new file mode 100644 index 000000000..a8bc39e7d --- /dev/null +++ b/content/articles/2011/04/the-2011-scripting-games-have-begun/index.md @@ -0,0 +1,42 @@ +--- +url: /articles/2011-04-04-the-2011-scripting-games-have-begun/ +title: The 2011 Scripting Games have begun! +authors: + - Kirk Munro +date: "2011-04-04T11:54:59+00:00" +aliases: + - /2011/04/the-2011-scripting-games-have-begun/ +--- + +[![2011_ScriptGames_GREEN_SPONSOR (2)](http://kirkmunro.files.wordpress.com/2011/04/2011_scriptgames_green_sponsor-2.png?w=154&h=187)][1] + +Today marks the beginning of Microsoft"™s [2011 Scripting Games][2].  The Scripting Games are a great way to have fun learning more about Windows PowerShell.  There are even great prizes available to be won.  There are 10 events, with a beginner and an advanced category for each event. + +To participate, all you have to do is: + + 1. Familiarize yourself with the information on the [2011 Scripting Games page][2]. + 2. Register by signing in to the [2011 Scripting Games page on PoshCode.org][3]. + 3. Keep your eye on the [Hey, Scripting Guy! blog][4] to see when new events are posted (both the beginner and advanced Event 1 details are available now!). + 4. Publish solutions to any events you decide to do on the [PoshCode.org contribute page][5]. + +That"™s pretty much all there is to it.  You can participate in both the beginner and the advanced categories, or you can spend all of your time focused on one category.  You can enter solutions for all events in a category, or you can cherry pick the events you have time for and enter only those.  You can start today with the first event, or join in later once the competition is already underway.  There are really no limitations on how much or how little that you have to participate in the Scripting Games.  Some prizes are available for the highest ranking participant, but others can be won simply by participating in a single event, so throw your hat into the ring and learn more about PowerShell while having fun and you might even win something. + +[Quest Software][6] is an official sponsor of the Scripting Games again this year, and we have contributed many licenses of [PowerGUI® Pro][7] to the pool of prizes to be won.  If you"™d like a chance to win one of the licenses that are available, all you have to do is participate in the Scripting Games by entering at least one event.  The more events you participate in the more you will increase your chances of winning.  Participating is easy, so you really should consider taking the time to give it a try"¦you just might learn something. + +Good luck! + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[Scripting Games](http://technorati.com/tags/Scripting+Games),[contest](http://technorati.com/tags/contest) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/534/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/534/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=534&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://blogs.technet.com/b/heyscriptingguy/archive/2011/03/21/support-our-sponsor-quest-software-2011.aspx + [2]: http://blogs.technet.com/b/heyscriptingguy/archive/2011/02/19/2011-scripting-games-all-links-on-one-page.aspx + [3]: http://2011sg.poshcode.org/Auth/LogOn + [4]: http://blogs.technet.com/b/heyscriptingguy/ + [5]: http://2011sg.poshcode.org/Scripts/New + [6]: http://www.quest.com/ + [7]: http://www.powerguipro.com/ diff --git a/content/articles/2011/05/_index.md b/content/articles/2011/05/_index.md new file mode 100644 index 000000000..6d89930ca --- /dev/null +++ b/content/articles/2011/05/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from May 2011" +description: "PowerShell.org Articles published in May 2011." +--- diff --git a/content/articles/2011/05/configuring-rbac-for-mobileshell-in-powergui-pro-3-0/index.md b/content/articles/2011/05/configuring-rbac-for-mobileshell-in-powergui-pro-3-0/index.md new file mode 100644 index 000000000..795f8ccc1 --- /dev/null +++ b/content/articles/2011/05/configuring-rbac-for-mobileshell-in-powergui-pro-3-0/index.md @@ -0,0 +1,78 @@ +--- +url: /articles/2011-05-18-configuring-rbac-for-mobileshell-in-powergui-pro-3-0/ +title: Configuring RBAC for MobileShell in PowerGUI Pro 3.0 +authors: + - Kirk Munro +date: "2011-05-19T05:07:45+00:00" +aliases: + - /2011/05/configuring-rbac-for-mobileshell-in-powergui-pro-3-0/ +--- + +Yesterday we released the public [beta of PowerGUI® Pro 3.0][1], which comes with all sorts of cool new features for [PowerGUI][2] users.  My favorite feature is definitely the new management interface for MobileShell.  With this interface, you can perform systems management from your handheld device very easily.  Here"™s what that might look like from your webkit-enabled web browser: +[![MobileShell.Actions](http://kirkmunro.files.wordpress.com/2011/05/mobileshell-actions_thumb.png?w=354&h=640)](http://kirkmunro.files.wordpress.com/2011/05/mobileshell-actions1.png) +Since this is only a beta release, it doesn"™t necessarily have everything fully polished just yet.  One thing that we didn"™t get to include in the beta release was a management console allowing you to associate PowerPacks with AD users and groups as well as instructions describing how you set up MobileShell to use this new interface with the beta.  The PowerPack that will be used to do that will come later.  In the meantime, this post will give you the necessary instructions to get started. + +#### Step 1: Install the MobileShell Server + +First, you need to find a system with IIS 7 or later installed.  Once you have a system where you will install the MobileShell server, you can run the [PowerGUI Pro][3]MobileShell installer that was included in the beta package.  During that installation, make sure you indicate you will use https for your web site, because the new MobileShell user experience requires https in order for it to function properly. With the MobileShell server installation complete, you have a few configuration tasks that you need to perform to set up PowerPacks + +#### Step 2: Add MobileShell Users to the PowerGUI MobileShell Users Local Group + +Any user who will access MobileShell needs to be a member of the PowerGUI MobileShell Users local group.  The local group is created automatically by the MobileShell Server installer, so all you need to do is make sure you put the appropriate user accounts in to that local group so that they will have access to MobileShell.  Note that it may take several minutes before MobileShell checks the group again to see if there are new users in the group, so you may need to wait before newly added users can log in to MobileShell. + +#### Step 3: Associate PowerPacks with AD Users and Groups + +With your MobileShell users configured, you can now associate PowerPacks with different AD users and groups.  When a user logs on to MobileShell, they are presented with any PowerPacks that are associated with their user account or with any groups in which their user account is a member. MobileShell PowerPack configuration is done via a simple xml file.  The file does not exist by default, so you need to create it.  Invoke the following PowerShell script on your MobileShell server to create and open the configuration xml file: + +```powershell +$programDataPath = [Environment]::GetFolderPath('CommonApplicationData') +$powerGUIDataPath = 'Quest Software\PowerGUI Pro' +$folder = Join-Path -Path $programDataPath -ChildPath $powerGUIDataPath + +if (-not (Test-Path -LiteralPath $folder)) { + New-Item -ItemType Directory -Path $folder | Out-Null +} + +$configPath = Join-Path -Path $folder -ChildPath 'MobileShellConfig.xml' + +$configuration = @" + + + +"@ + +$configuration | Out-File -FilePath $configPath -Encoding UTF8 + +notepad $configPath +``` + +Once you have the configuration file open, you will see the layout that is used to associate AD user or group SIDs with PowerPacks.  Copy all of the core PowerPacks that you have in the PowerPacks subfolder of your PowerGUI Pro installation folder that you want to use via the MobileShell UI into the same path where this file was created (the value of the $folder variable in the script above contains this path).  Then modify this file to contain only the PowerPacks you copied over, update the first User SID for your user account, and this will finish off the initial configuration of PowerPacks for MobileShell.  If you want to add additional users, you can copy and paste the User node in the XML document and then modify the SID for the users you add.  Retrieving a SID should be an easy task of course: simply use Get-QADUser from the Quest AD cmdlets!![Smile](http://kirkmunro.files.wordpress.com/2011/05/wlemoticon-smile.png?w=595) + +Note: With this beta release there is a bug in the Groups support in this configuration document, so simply associate PowerPacks to users for now.  Thanks! + +#### Step 4: Open the New MobileShell User Interface + +The new MobileShell User Interface we have in the beta is accessed by opening your webkit-enabled web browser and pointing it to the following website: + +> https://_MobileWebServerAddress_/MobileShell/Admin + +This web address allows you to try out the new systems management features that you can get from the PowerPacks you just associated with your user account.  Once you log in you should be all set to start using your PowerPacks! + +#### A Note About MobileShell Support for PowerPacks + +Note that if you try to use this new user interface with a PowerPack other than the ones that currently are included in the beta, by default the nodes and actions in those PowerPacks will not be visible in the MobileShell UI.  This must be explicitly turned on in PowerPacks that you want to access this way.  The reason behind this is because there may be some script that displays a Windows Forms or WPF-based UI on the system where they are run.  When you are remotely managing your environment via your MobileShell Server, you don"™t want any UI to be displayed on the server because that would freeze your web client interface.  For this reason, nodes and actions must be explicitly configured to work with the new MobileShell UI.  I will write a separate post later about how you can do that really easily.  In the meantime, please try MobileShell with the core PowerPacks and see what you think! Hopefully this will help get you up and running with the new MobileShell UI in your test environment.  If you have any questions about this process, please let me know. + +Thanks, + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[beta](http://technorati.com/tags/beta),[MobileShell](http://technorati.com/tags/MobileShell) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/568/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/568/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=568&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://poshoholic.com/2011/05/17/try-the-powergui-pro-3-0-beta-today/ "PowerGUI Pro 3.0 Beta" + [2]: http://www.powergui.org/ "PowerGUI.org" + [3]: http://www.powerguipro.com/ "PowerGUI Pro" diff --git a/content/articles/2011/05/exciting-powergui-news-at-teched-2011-next-week/index.md b/content/articles/2011/05/exciting-powergui-news-at-teched-2011-next-week/index.md new file mode 100644 index 000000000..fb1bdb8b3 --- /dev/null +++ b/content/articles/2011/05/exciting-powergui-news-at-teched-2011-next-week/index.md @@ -0,0 +1,33 @@ +--- +url: /articles/2011-05-13-exciting-powergui-news-at-teched-2011-next-week/ +title: Exciting PowerGUI® news at TechEd 2011 next week! +authors: + - Kirk Munro +date: "2011-05-13T20:23:15+00:00" +aliases: + - /2011/05/exciting-powergui-news-at-teched-2011-next-week/ +--- + +Next week I"™ll be at the TechEd 2011 conference in Atlanta.  During this event I"™ll be doing an Ask the Experts session on **Tuesday, May 17, 2011** in the Quest Software booth from **12:30-1:00PM**.  If you want to get the latest news on [PowerGUI® Pro][1] and [PowerGUI][2]®, come to that session!  I have some really cool things I"™ve been dying to show you, so please stop by and say Hello!  If you can"™t make that session, we"™ll be demoing [PowerGUI Pro][1] all week in the Quest booth, so stop by if you want a quick look at what we"™ve been working on. + +If you"™re wondering where else I"™ll be, be sure to take a look at my blog post about [PowerShell at TechEd 2011][3].  It includes sessions I will be possibly attending.  I"™m also presenting an interactive session called [WSV-473: Windows PowerShell 3.0: Why Wait? Get Next-Generation PowerShell Functionality Today!][4]  If you cannot attend that session, there is a repeat as well: [WSV473-INT-R: Windows PowerShell 3.0: Why Wait? Get Next-Generation PowerShell Functionality Today!][5] + +Also, why not go to TechEd in style!  Show your appreciation for PowerGUI at TechEd by sporting the latest PowerGUI desktop wallpaper on your laptop! + +[![](http://www.powergui.org/servlet/KbServlet/download/3502-102-5571/1440x900.jpg)](http://www.powergui.org/servlet/KbServlet/download/3502-102-5574/1920x1200.jpg) + +Hope to see you there! + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI),[TechEd 2011](http://technorati.com/tags/TechEd+2011) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/543/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/543/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=543&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://www.powerguipro.com/ "PowerGUI Pro" + [2]: http://www.powergui.org/ "PowerGUI.org" + [3]: http://poshoholic.com/2011/04/28/learn-more-about-powershell-at-teched-2011/ "Learn more about PowerShell at TechEd 2011" + [4]: http://northamerica.msteched.com/topic/details/WSV473-INT?fbid=4S1zVddlkbN#showdetails "WSV473-INT Windows PowerShell 3.0- Why Wait- Get Next-Generation PowerShell Functionality Today!" + [5]: http://northamerica.msteched.com/topic/details/WSV473-INT-R?fbid=4S1zVddlkbN#showdetails "WSV473-INT-R Windows PowerShell 3.0- Why Wait- Get Next-Generation PowerShell Functionality Toda" diff --git a/content/articles/2011/05/try-the-powergui-pro-3-0-beta-today/index.md b/content/articles/2011/05/try-the-powergui-pro-3-0-beta-today/index.md new file mode 100644 index 000000000..decafa6b7 --- /dev/null +++ b/content/articles/2011/05/try-the-powergui-pro-3-0-beta-today/index.md @@ -0,0 +1,108 @@ +--- +url: /articles/2011-05-17-try-the-powergui-pro-3-0-beta-today/ +title: Try the PowerGUI Pro® 3.0 Beta today! +authors: + - Kirk Munro +date: "2011-05-17T15:00:00+00:00" +aliases: + - /2011/05/try-the-powergui-pro-3-0-beta-today/ +--- + +Today marks another exciting milestone for [PowerGUI][1], as we release a [public beta][2] of [PowerGUI Pro][3] 3.0 to the web.  We"™ve been working very hard on this release, and it includes a lot of new and improved features.   The highlights of this release are shown below. + +#### MobileShell Now Supports PowerPack Rendering + +A lot of our customers have been requesting this feature for a while (myself included!).  With PowerGUI Pro 3.0, you can now expose PowerPacks to MobileShell users!  An xml document is used to provide role-based access control (RBAC) to PowerGUI PowerPacks.  You simply associate PowerPack files with Active Directory users or groups, and when a user logs in they will see the PowerPacks that are configured for them!  Here"™s a screenshot showing the top level of MobileShell, where you can see the PowerPacks that have been exposed to this user: + +![MobileShell.PowerPackList](http://kirkmunro.files.wordpress.com/2011/05/mobileshell-powerpacklist.png?w=354&h=640) + +Just like in the Admin Console, you can browse through nodes and see child nodes: + +![MobileShell.BrowsingTheTree](http://kirkmunro.files.wordpress.com/2011/05/mobileshell-browsingthetree.png?w=354&h=640) + +Once you invoke a node that returns data, you can see the records showing up in the MobileShell PowerPack Rendering UI: + +![MobileShell.NodeDataInGrid](http://kirkmunro.files.wordpress.com/2011/05/mobileshell-nodedataingrid.png?w=354&h=640) + +Clicking on any of these child nodes allows you to see more object detail if any is available as well as any actions that are available for the object: + +![MobileShell.Actions](http://kirkmunro.files.wordpress.com/2011/05/mobileshell-actions.png?w=354&h=640) + +This gives you full PowerPack support on your handheld device!  Devices supported include all iOS devices (iPhone, iPad), Android and BlackBerry 6.0 and later devices.  You can also use the Google Chrome or Apple Safari web browsers from your desktop.  If you don"™t have a webkit-enabled web browser on your device or laptop, or if you want to invoke an ad-hoc command from your mobile device, you can still use the other MobileShell user experiences that we released in previous versions of PowerGUI Pro "“ they are still supported in PowerGUI Pro 3.0. + +#### New Interactive Welcome Page in Script Editor and Admin Console + +We have updated our Welcome Page that we have had all along in the Admin Console and we"™ve made it available in the Script Editor as well.  This page now allows you to keep track of the latest PowerPacks or Add-ons on PowerGUI.org, monitor your favorite RSS feeds, see a featured video from the PowerShell and PowerGUI channel on YouTube, or read the latest tip of the day. + +[![ScriptEditor.MainView](http://kirkmunro.files.wordpress.com/2011/05/scripteditor-mainview_thumb.png?w=604&h=464)](http://kirkmunro.files.wordpress.com/2011/05/scripteditor-mainview.png) + +#### Create Executable Files from Scripts + +Many customers have asked us for the ability to create executable files from scripts.  This is very useful, especially if you want to send someone the functionality you design in a script so that they can execute it without any difficulty.  PowerGUI Pro 3.0 includes this functionality, allowing you to build executable files that may be optionally password protected if they contain sensitive information.  You can also include any additional files that a script is dependent on as part of the package.  The only requirements for these executables are for PowerShell 2.0 itself to be installed and for the script requirements to be satisfied (if there are any). + +[![ScriptEditor.CompileScript](http://kirkmunro.files.wordpress.com/2011/05/scripteditor-compilescript_thumb.png?w=604&h=466)](http://kirkmunro.files.wordpress.com/2011/05/scripteditor-compilescript.png) + +#### Improved Version Control Integration + +PowerGUI Pro has included Version Control support since its first release.  In PowerGUI Pro 3.0, we have improved this integration by providing a new **Get Files from Version Control** menu item in the **Version Control** menu to allow you to retrieve files from version control.  We have also simplified the check-in process so that you can disable the display of the check-in description dialog if it is not required by the version control provider.  This allows for a more streamlined check-in experience when working with Team Foundation Server. + +#### Reset Runspace on Demand + +As you create and modify scripts in the Script Editor, you are often changing the state of the PowerShell session, loading or unloading modules or snapins, or adding, removing or modifying functions or variables.  When this happens, it is a recommended practice to re-run your script from a clean state to make sure that something isn"™t working simply because of the current state of your system.  Getting to a clean state in the PowerGUI Script Editor just got easier in PowerGUI Pro 3.0.  Now all you need to do is select Reset Runspace from the Debug menu and your functions, aliases and variables will be cleaned up and all of your modules and snapins will be unloaded and reloaded. + +[![ScriptEditor.ResetRunspaceOnDemand](http://kirkmunro.files.wordpress.com/2011/05/scripteditor-resetrunspaceondemand_thumb.png?w=604&h=466)](http://kirkmunro.files.wordpress.com/2011/05/scripteditor-resetrunspaceondemand.png) + +#### Go to Definition Support for Functions + +As you work with PowerShell, the number of files containing commands you use can grow.  This commonly happens as users create multiple modules they manage or use modules they download from other sources.  In cases where you work with functions from different sources, you may want to go to a definition for a function to see how it is implemented.  In PowerGUI Pro 3.0, you can right-click on a function name in the Script Editor and go to the definition of that function by selecting **Go to Definition** from the context menu. + +#### Find PowerPacks Online with Click-Once Install + +You can now search for PowerPacks on the PowerGUI.org website right from within the PowerGUI Administrative Console.  Searching is done using keyword matches, and if you want to see all PowerPacks simply perform a search without entering any keywords.  Once you have found the PowerPack you want, select it and click on the **Install** button to download, unblock, install and import the PowerPack automatically. + +[![AdminConsole.FindPowerPacksOnline](http://kirkmunro.files.wordpress.com/2011/05/adminconsole-findpowerpacksonline_thumb.png?w=604&h=449)](http://kirkmunro.files.wordpress.com/2011/05/adminconsole-findpowerpacksonline.png) + +#### Authoring Mode for the Administrative Console + +If you know PowerShell, you may want all the capabilities that are available in the Administrative Console to be available to you so that you can customize it to meet your needs.  This allows you to create a tailored management experience for yourself or other users in your organization.  If you provide the Administrative Console with PowerPacks to other users in your organization, they may not know PowerShell, in which case you really don"™t want them to change the configuration of the PowerPacks you give them.  The PowerGUI Administrative Console now has Authoring Mode for users who want to be able to modify PowerPacks, and basic (read-only) mode for users who shouldn"™t be modifying PowerPacks.  Simply set the system up with the appropriate shortcut for the user who uses the Administrative Console and you won"™t have to worry about them accidentally changing something anymore. + +#### + +#### And that"™s not all! + +We also have a lot of other improvements in the product as well that were added as part of the PowerGUI Pro 3.0 release.  Here"™s a list of a few more notable changes: + + * Improved Action functionality in the Administrative Console; + * Automatic loading of required modules or snapins when a PowerPack is loaded; + * Automatic variables for $PGHome, $PGUICulture, $PGVersionTable and $PGSE; + * Multi-line command support for the embedded PowerShell Console; and + * For Add-on authors, $PGSE is now defined by default and name lookups of UI elements is now case-insensitive + +There are other fixes as well, but this short list gives you an idea of some of the other things that are included in this release.  Each of these improvements were suggested by various members of our community, so please keep the feedback coming, we"™re really listening! + +#### This sounds great!  Where can I get the beta? + +You can download the public beta of PowerGUI Pro 3.0 right now by clicking on the **Download** button on the [PowerGUI Pro 3.0 Public Beta page][2] on [PowerGUI.org][4].  That page also describes what the beta package contains as well.  PowerGUI Pro can be installed side-by-side with PowerGUI freeware, so if you are a freeware user and want to try this out, you can install the beta without disrupting anything you do with the freeware product. + +#### Provide your feedback on the PowerGUI forums! + +We will be running this beta for a short period while we work on finishing up this release.  Your feedback is very important during this beta cycle, so please give the beta release a try and share your feedback by posting messages on the [PowerGUI forums][5].  The sooner we get your feedback, the sooner we can respond to it.  I"™m really looking forward to hearing what you like, what you don"™t like, and what else you would like to see in this and future releases, so please share your thoughts with us. + +That about wraps it up for this post, so if you made it here, thank you for reading this far and please, give [PowerGUI Pro 3.0 Beta][6] a try to see what you think about it! + +Happy testing! + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[beta](http://technorati.com/tags/beta) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/558/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/558/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=558&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://www.powergui.org/ "PowerGUI.org" + [2]: http://www.powergui.org/entry.jspa?externalID=3523 "PowerGUI Pro 3.0 Public Beta" + [3]: http://www.powerguipro.com/ "PowerGUI Pro" + [4]: http://www.powergui.org/entry.jspa?externalID=3523 "PowerGUI.org" + [5]: http://www.powergui.org/forumindex.jspa?categoryID=55 "PowerGUI Forums" + [6]: http://www.powergui.org/entry.jspa?externalID=3523 "PowerGUI Pro 3.0 Beta" diff --git a/content/articles/2011/06/_index.md b/content/articles/2011/06/_index.md new file mode 100644 index 000000000..2789324b2 --- /dev/null +++ b/content/articles/2011/06/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from June 2011" +description: "PowerShell.org Articles published in June 2011." +--- diff --git a/content/articles/2011/06/powergui-pro-3-0-beta-2-is-now-available/index.md b/content/articles/2011/06/powergui-pro-3-0-beta-2-is-now-available/index.md new file mode 100644 index 000000000..327ad720c --- /dev/null +++ b/content/articles/2011/06/powergui-pro-3-0-beta-2-is-now-available/index.md @@ -0,0 +1,62 @@ +--- +url: /articles/2011-06-17-powergui-pro-3-0-beta-2-is-now-available/ +title: PowerGUI Pro® 3.0 Beta 2 is now available +authors: + - Kirk Munro +date: "2011-06-17T14:21:40+00:00" +aliases: + - /2011/06/powergui-pro-3-0-beta-2-is-now-available/ +--- + +Hot on the heels of our first beta cycle for [PowerGUI Pro][1] 3.0, today we released beta 2 of PowerGUI Pro 3.0 to the web.  This release includes a lot of fixes and improvements based on the feedback we"™ve received from you during our first beta cycle, so thank you for that feedback! + +Here are some details about the improvements that have been made in the 2nd beta of PowerGUI Pro 3.0: + +#### Improved snippets hierarchy + +Several users indicated that some of our snippets were hard to find.  To resolve this issue, I"™ve reorganized our snippets into an improved snippets hierarchy that should make it easier for you to find the snippets you are looking for and learn more about what you can do with PowerShell from our snippet collection.  A special thanks goes out to [Denniver Reining][2], author of the very popular [Snippet Manager Add-on][3].  Denniver was able to provide very useful feedback as I was going through the improvements in this release, which was very helpful.  To browse the new snippet hierarchy, simply press Ctrl+I while editing a document in the Script Editor.  Here"™s a screenshot showing the top level representation of the new snippets hierarchy: + +[![PowerGUI Pro 3.0 Snippet Hierarchy](http://kirkmunro.files.wordpress.com/2011/06/snaghtml8b27913_thumb.png?w=604&h=427)](http://kirkmunro.files.wordpress.com/2011/06/snaghtml8b27913.png) + +#### Installer option to open Script Editor + +Since the first release of [PowerGUI][4] we have provided an option at the end of the installation to open the PowerGUI Admin Console.  This is useful, but myself and many of our users have requested if we could open the Script Editor as well.  With this beta 2 release, you can now open the Script Editor or the Admin Console at the end of the installation. + +#### PowerPack Shared Scripts are now loaded from regular nodes and actions + +When you author a PowerPack, you can create a function library inside a shared script for the PowerPack.  This is useful, however until now shared scripts would only load when you clicked on a script node or script action.  This has now been changed so that shared scripts are now loaded from regular nodes and actions, allowing you to keep all of your PowerPack functions in one location and then create regular nodes and actions using those functions. + +#### Performance improvements, usability improvements and lots of bug fixes + +In addition to these items, we have improved the performance in some scenarios in MobileShell and in the Script Editor, we have addressed some usability improvements in the Script Editor, the Admin Console and MobileShell, and we have fixed a lot of bugs as well (it is a beta cycle after all, and what good would a beta cycle be if it didn"™t include bug fixes?). + +#### Don"™t forget all of the new features that were in the first beta! + +Besides these changes, if you"™re just finding out about the beta of PowerGUI Pro 3.0, make sure you read my [other blog post][5] that highlights all of the new features like compiling scripts into executables, or the new MobileShell user interface that allows you to use PowerPacks from your smartphone or tablet "“ those features and many more were included in the [first beta][5] of this release.  If you want to try the awesome new MobileShell capabilities, this blog post will help you get that set up in your test lab: [Configuring RBAC for MobileShell in PowerGUI Pro 3.0][6]. + +#### Great, so where can I get beta 2? + +Beta 2 is available for download now, in the same location where we posted the first beta.  You can find it on the [PowerGUI Pro 3.0 beta][7] page.  When you are installing this beta, you will need to provide a license key.  License keys for the beta are included in the zip file for the beta, right beside the msi and exe installers for the PowerGUI Pro 3.0 components "“ look for the asc file in the Components folder. + +#### Please share your feedback! + +We will be running the second beta for a short period while we work on finishing up this release.  Your feedback is very important during this beta cycle, so please give the beta release a try and share your feedback by posting messages on the [PowerGUI forums][8].  The sooner we get your feedback, the sooner we can respond to it.  I"™m really looking forward to hearing what you like, what you don"™t like, and what else you would like to see in this and future releases, so please share your thoughts with us. + +Enjoy! + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/592/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/592/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=592&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://www.powerguipro.com/ "PowerGUI Pro" + [2]: http://bytecookie.wordpress.com/ "ByteCookie - Denniver Reining's blog" + [3]: http://www.powergui.org/entry.jspa?externalID=3041&categoryID=389 "Snippet Manager Add-on" + [4]: http://www.powergui.org/ "PowerGUI.org" + [5]: http://poshoholic.com/2011/05/17/try-the-powergui-pro-3-0-beta-today/ "Try the PowerGUI Pro 3.0 beta today" + [6]: http://poshoholic.com/2011/05/19/configuring-powerpacks-in-mobileshell-in-powergui-pro-3-0/ "Configuring RBAC for MobileShell in PowerGUI Pro 3.0" + [7]: http://www.powergui.org/entry.jspa?externalID=3523 "PowerGUI Pro 3.0 Beta" + [8]: http://www.powergui.org/forumindex.jspa?categoryID=55 diff --git a/content/articles/2011/06/vworkspace-powerpack-a-great-example-of-the-power-and-flexibility-you-get-from-powershell-and-powergui/index.md b/content/articles/2011/06/vworkspace-powerpack-a-great-example-of-the-power-and-flexibility-you-get-from-powershell-and-powergui/index.md new file mode 100644 index 000000000..16e3ee65a --- /dev/null +++ b/content/articles/2011/06/vworkspace-powerpack-a-great-example-of-the-power-and-flexibility-you-get-from-powershell-and-powergui/index.md @@ -0,0 +1,44 @@ +--- +url: /articles/2011-06-28-vworkspace-powerpack-a-great-example-of-the-power-and-flexibility-you-get-from-powershell-and-powergui/ +title: "vWorkspace PowerPack: A great example of the power and flexibility you get from PowerShell and PowerGUI®" +authors: + - Kirk Munro +date: "2011-06-28T16:13:26+00:00" +aliases: + - /2011/06/vworkspace-powerpack-a-great-example-of-the-power-and-flexibility-you-get-from-powershell-and-powergui/ +--- + +Last week, the [Quest vWorkspace][1] guys showed their prowess once again when they released the first version of the [vWorkspace PowerPack][2] for [PowerGUI® Pro][3] and [PowerGUI][4]®.  I love this PowerPack because it really demonstrates how PowerGUI is so complementary to PowerShell.  To see what I mean, take a look at the following screenshot: + +[![vWorkspace PowerPack - multi-farm management](http://kirkmunro.files.wordpress.com/2011/06/image_thumb.png?w=604&h=364)](http://kirkmunro.files.wordpress.com/2011/06/image.png) + +This screenshot shows two major improvements to the vWorkspace management experience by demonstrating how you can use the [vWorkspace PowerPack][2] to perform management tasks across all farms, and by demonstrating how you can use the [vWorkspace PowerPack][2] to perform management tasks across all locations in a single farm or across all locations in all farms.  In the native vWorkspace management user interface, you can only work with one farm at a time, and you can only work with one location at a time. + +Scaling management tasks out in a product like this can take a long time when you need to build the capabilities into a native management user interface, and these days in many cases PowerShell is provided as the vehicle to satisfy larger scale automation and management needs.  PowerShell is great and it definitely fits the bill for these medium to large enterprise needs, however it does not provide a user interface to facilitate those management scenarios.  This is where the administrative console in [PowerGUI Pro][3] and [PowerGUI][4] really shines, because it allows you to build out rich PowerPacks with enterprise-ready solutions with very low cost and effort. + +I spoke directly with [Adam Driscoll][5] (author of [PowerGUI VSX][6], member of the vWorkspace team, and one of two developers who created the [vWorkspace PowerPack][2]) about this, and it took them less than one week to put this PowerPack together.  That"™s less than one week for two developers to create a rich, functional management user interface that not only provides many of the management capabilities that come with the vWorkspace management console, but that also adds additional enterprise capabilities that the vWorkspace management console does not provide natively.  Aside from the multi-farm management and multi-location management features I mentioned earlier, it also allows administrators to upgrade the vWorkspace VM tools on the VMs you select, and it simplifies how administrators search for provisioning objects like templates, sysprep customizations, parent VHDs, and so on.  And by building these capabilities into a PowerPack, vWorkspace administrators can perform custom filtering and sorting of the data in the grid, generate rich HTML reports for that data, export the data to an external file for use in other programs, and view the PowerShell scripts that are doing all of the work, all because those features come with the PowerGUI administrative console automatically.  That"™s an amazing feat for one weeks worth of effort! + +The really sweet part of all of this is that it gets even better very soon.  If you"™ve been following my blog recently you"™ve seen that we have released two betas of [PowerGUI Pro 3.0][7] in the last little while which comes with many great features worth highlighting, however for now I only want to mention one: MobileShell.  In PowerGUI Pro 3.0, you can provide administrators with a custom mobile management solution, defined using PowerPacks and tailored for their needs using role-based access control (RBAC).  That means that once we release PowerGUI Pro 3.0 (which should happen very soon), the vWorkspace guys will be able to publish an update to their PowerPack that enables mobile management support so that vWorkspace administrators can have a mobile management solution for very little cost!  All they will need once the vWorkspace PowerPack is updated to support this mobile management scenario is a license of PowerGUI Pro 3.0 for each administrator who wants to manage their vWorkspace environment from their webkit-enabled mobile device.  Considering that it also allows those administrators to create executable files from PowerShell scripts, work with integrated version control in a best-in-class script editor, manage systems remotely using easy PowerShell remoting capabilities, find functions they are working with using go to definition support for functions, and more, the PowerGUI Pro price of $199/user is a pretty good value. + +If you are at all interested in VDI, you should give vWorkspace a look because it"™s an awesome solution that keeps getting better all the time.  If you use vWorkspace already I encourage you to take a look at the PowerShell capabilities that this team is providing, particularly in the PowerPack, because a ton of additional value is being provided here that is worth checking out.  You can find the installation instructions for the PowerPack on the [vWorkspace PowerPack][2] page on [PowerGUI.org][8]. + +That"™s it for this post.  If you have any questions or feedback, please don"™t hesitate to reply in the comments below. + +Thanks! + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI),[PowerPack](http://technorati.com/tags/PowerPack),[vWorkspace](http://technorati.com/tags/vWorkspace) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/596/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/596/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=596&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://www.quest.com/vworkspace/ "Quest vWorkspace" + [2]: http://www.powergui.org/entry.jspa?categoryID=290&externalID=3561 "vWorkspace PowerPack" + [3]: http://www.powerguipro.com/ "PowerGUI Pro" + [4]: http://www.powergui.org/ "PowerGUI.org" + [5]: http://csharpening.net/ "Adam Driscoll's Blog" + [6]: http://visualstudiogallery.msdn.microsoft.com/01516103-d487-4a7e-bb40-c15ec709afa3 "PowerGUI VSX" + [7]: http://poshoholic.com/2011/05/17/try-the-powergui-pro-3-0-beta-today/ "Try the PowerGUI Pro 3.0 beta today" + [8]: http://www.powergui.org/entry.jspa?externalID=3523 "PowerGUI.org" diff --git a/content/articles/2011/07/_index.md b/content/articles/2011/07/_index.md new file mode 100644 index 000000000..2928d8319 --- /dev/null +++ b/content/articles/2011/07/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from July 2011" +description: "PowerShell.org Articles published in July 2011." +--- diff --git a/content/articles/2011/07/one-for-the-road-stepping-away-from-powergui/index.md b/content/articles/2011/07/one-for-the-road-stepping-away-from-powergui/index.md new file mode 100644 index 000000000..7cdb00922 --- /dev/null +++ b/content/articles/2011/07/one-for-the-road-stepping-away-from-powergui/index.md @@ -0,0 +1,61 @@ +--- +url: /articles/2011-07-28-one-for-the-road-stepping-away-from-powergui/ +title: "One for the road: Stepping away from PowerGUI®" +authors: + - Kirk Munro +date: "2011-07-29T04:01:30+00:00" +aliases: + - /2011/07/one-for-the-road-stepping-away-from-powergui/ +--- + +Today was one of my most difficult days in my 7½+ year career at Quest Software.  The same week that I was given a performance raise (I got that email on Monday), this afternoon I got a phone call from the director over my business unit letting me know that my position has been cut effective immediately.  Part of a book balancing effort it seems –  funny (or not so much) how life works sometimes. + +I"™ve accomplished a lot while working at Quest, and spent a ton of professional and personal energy on the company and its products, particularly [PowerGUI][1] (far too much energy if you ask my wife, and today I must say I"™m tending to agree). + +Since I started working with the PowerGUI team at Quest back in 2007 (back in the version 1.0.x days) I have: + + * been awarded the Microsoft MVP award for my community support Windows PowerShell four years in a row + * received recognition as a Quest Software expert in Windows Management (only 1% of the company employees have received this recognition) + * provided feedback and direction over the product and its features through 3 major release cycles and many minor releases + * supported the product and the community as a PowerPack developer, then as a PowerShell Solutions Architect, and most recently as the Product Manager (although I never could get those other positions backfilled so I ended up wearing all three hats most of the time) + * released dozens of extensions for the product, including PowerPacks for platforms such as Active Directory, VMware, Hyper-V, and Exchange, and Add-ons such as the [Script Editor Essentials][2] Add-on or others for specific features such as script signing, transcription, the PowerShell blue console theme, and many more + * pushed the number of commercial features in PowerGUI Pro from two when I took over as Product Manager to over six in the current version with many more on the way + * initiated strategic partnerships with key enterprises such as NetApp and Intel and helped them create their own PowerPacks for their platforms + * helped drive traffic to the [powergui.org][3] site through my blog and through social media as we grew the number of downloads from 100000 to over 1.2 million + * provided feedback and direction to internal teams at Quest with PowerShell support in their products + * successfully presented well-received PowerShell-focused sessions at many user groups and also at conferences such as Microsoft TechEd, the TEC conference, the PowerShell Deep Dive (a mini-conference in the TEC conference), and TechDays Canada + * been elected as President for the [PowerShellCommunity.org][4] site + * coordinated and provided direction over the first ever PowerShell Deep Dive conference + +Unfortunately, most of that is now a legacy as it came to an abrupt end today.  I"™m still a PowerShell MVP, and I will still be involved with the PowerShell community, however my work on PowerGUI has stopped for now. + +Before I step back from this though, and before I reorganize/refocus my efforts onto more important things, I wanted to share one more new PowerGUI feature that I recently created for the community that I have spent so much time with these past 4 years.  I still have a strong affinity for PowerGUI and a lot of my heart and soul has gone into this product, and this feature is just a small example of that effort.  The new feature comes as part of the [Call Stack Window add-on][5] that I just published in the PowerGUI Add-on library.  Here"™s a screenshot showing you what this add-on looks like in action: + +[![PowerGUI Script Editor Call Stack Window](http://kirkmunro.files.wordpress.com/2011/07/debugwindows-callstack.png?w=604&h=422)][5] + +This add-on adds a call stack window to your PowerGUI Script Editor every time you start debugging a script. Working with a call stack while you debug anything beyond the most simple of scripts is essential because it provides you with a list of all nested calls that led up to the current line of script in your debug session. You can use this to determine where functions are being called from by setting a breakpoint inside a function and then walking up the call stack to see the script used to call the function. Also, this window has double-click support, so if you would like to go to any location in the call stack, simply double-click on the location you wish to see and the add-on will take you there, even if the file in question isn"™t open at the time. + +I was considering putting this feature in the Pro version in a future release, but that is beyond my control now so I decided I"™d share what I have today and let you guys have fun with it.  Since I created the feature in this add-on, it"™s been an incredibly useful feature to me and I hope you guys enjoy it as well.  To get this Add-on, simply select Tools | Find Add-ons Online in your PowerGUI Script Editor and search for "Call Stack". + +That will most likely be my last PowerGUI-centric post for a while, and it will be my last post for at least a week while I take a much needed vacation before moving on to new things. + +Thank you for your continued support through the past four years.  I hope this post finds you well. + +Sincerely, + +Kirk Munro +Former Product Manager of PowerGUI Pro and PowerGUI + +P.S. If you are in need of someone with my skills, either as a Product Manager, a PowerShell MVP, an expert in Windows management (with a strong focus on Active Directory and Exchange although I"™ve also gotten deeply involved in virtualization with Hyper-V and VMware as well), a social media/community site manager, or as a freelance writer, my schedule has all of a sudden become much less busy and I"™m interested in filling up that time with new work once I come back from vacation, so please get in touch. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/679/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/679/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=679&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://www.powergui.org/ "PowerGUI.org" + [2]: http://www.powergui.org/entry.jspa?externalID=2952 "PowerGUI Script Editor Essentials Add-on" + [3]: http://www.powergui.org/entry.jspa?externalID=3523 "PowerGUI.org" + [4]: http://powershellcommunity.org/ + [5]: http://www.powergui.org/entry.jspa?categoryID=387&externalID=3641 "PowerGUI Script Editor Call Stack Window Add-on" diff --git a/content/articles/2011/07/powergui-3-0-hotfix-double-clicking-on-a-ps1-psm1-or-psd1-file-to-open-the-script-editor-shows-the-start-page-as-the-active-page-in-the-script-editor/index.md b/content/articles/2011/07/powergui-3-0-hotfix-double-clicking-on-a-ps1-psm1-or-psd1-file-to-open-the-script-editor-shows-the-start-page-as-the-active-page-in-the-script-editor/index.md new file mode 100644 index 000000000..f7218e2f9 --- /dev/null +++ b/content/articles/2011/07/powergui-3-0-hotfix-double-clicking-on-a-ps1-psm1-or-psd1-file-to-open-the-script-editor-shows-the-start-page-as-the-active-page-in-the-script-editor/index.md @@ -0,0 +1,171 @@ +--- +url: /articles/2011-07-20-powergui-3-0-hotfix-double-clicking-on-a-ps1-psm1-or-psd1-file-to-open-the-script-editor-shows-the-start-page-as-the-active-page-in-the-script-editor/ +title: "PowerGUI® 3.0 Hotfix: Double-clicking on a ps1, psm1, or psd1 file to open the Script Editor shows the Start Page as the active page in the Script Editor" +authors: + - Kirk Munro +date: "2011-07-20T22:11:47+00:00" +aliases: + - /2011/07/powergui-3-0-hotfix-double-clicking-on-a-ps1-psm1-or-psd1-file-to-open-the-script-editor-shows-the-start-page-as-the-active-page-in-the-script-editor/ +--- + +This article describes an issue that was introduced into both [PowerGUI][1] and [PowerGUI Pro][2] when version 3.0 was released and provides a recommended solution to that issue. + +#### Problem + +While the [PowerGUI][1] Script Editor is closed, double-clicking on a ps1, psm1 or psd1 file or right-clicking on one of those file types and selecting "Open with PowerGUI Script Editor" will open the file you selected in the Script Editor as expected; however the Start Page will appear as the active tab in the Script Editor instead of the file you opened. + +#### Affected Products + + * PowerGUI 3.0 (freeware) + * PowerGUI Pro 3.0 + +#### Solution + +To resolve this problem, a new version of the [Script Editor Essentials][3] Add-on has been released.  This version (3.0.0.75) includes a modification to the Script Editor behaviour such that any file you use to open the PowerGUI Script Editor will immediately become the active file. + +**To install this hotfix, please follow these steps:** + +_If you are connected to the Internet_ + + 1. **Open** the PowerGUI Script Editor. + 2. **Run** the following command from the embedded PowerShell console: + +`$oldState + + + += + + + +$PGSE + +. + +Configuration + +[ + +' + +/CollectAndSendInformation + +' + +] + + +if + + ( + +-not + + + +$oldState + +) { + + +$PGSE + +. + +Configuration + +[ + +' + +/CollectAndSendInformation + +' + +] + += + + + +$true + + +} + +`3. Select **Tools** | **Find Add-ons Online** to show the Find Add-ons Online dialog. + 4. **Type** "Script Editor Essentials" into the text box at the top of the Find Add-ons Online dialog. + 5. Click on the **Search** button. + 6. Once the search results are returned, **Select** the Script Editor Essentials Add-on if it is not already selected. + 7. Click on the **Install** button to download, install and load the Script Editor Essentials Add-on. + 8. Once the Script Editor Essentials Add-on is installed, **run** the following command from the embedded PowerShell console: + + +`if + + ( + +-not + + + +$oldState + +) { + + +$PGSE + +. + +Configuration + +[ + +' + +/CollectAndSendInformation + +' + +] + += + + + +$false + + +} + +`9. **Close** the PowerGUI Script Editor. + +_If you are not connected to the Internet_ + + 1. Open your web browser and **browse** to [http://www.powergui.org/entry.jspa?externalID=2952][4]. + 2. **Follow** the steps outlined in the "Manual install" section on that page, copying the Add-on.ScriptEditorEssentials.zip between machines as appropriate. + 3. **Close** the PowerGUI Script Editor. + +At this point you should be able to double-click on ps1, psm1 or psd1 files if you file association is set up and have those files open in the PowerGUI Script Editor as the active document. + +#### + +#### Feedback + +This solution is being provided based on the feedback of users who notified us about the issue two days ago on the forums.  If you have any questions about this solution, please let us know in the forums or in the comments on this post. + +Thanks! + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[PowerGUI](http://technorati.com/tags/PowerGUI),[hotfix](http://technorati.com/tags/hotfix) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/674/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/674/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=674&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://www.powergui.org/ "PowerGUI.org" + [2]: http://www.powerguipro.com/ "PowerGUI Pro" + [3]: http://www.powergui.org/entry.jspa?externalID=2952 "PowerGUI Script Editor Essentials Add-on" + [4]: http://www.powergui.org/entry.jspa?externalID=2952 "http://www.powergui.org/entry.jspa?externalID=2952" diff --git a/content/articles/2011/07/powergui-pro-3-0-mobile-systems-management-using-mobileshell/index.md b/content/articles/2011/07/powergui-pro-3-0-mobile-systems-management-using-mobileshell/index.md new file mode 100644 index 000000000..a5fb7be2c --- /dev/null +++ b/content/articles/2011/07/powergui-pro-3-0-mobile-systems-management-using-mobileshell/index.md @@ -0,0 +1,55 @@ +--- +url: /articles/2011-07-18-powergui-pro-3-0-mobile-systems-management-using-mobileshell/ +title: "PowerGUI® Pro 3.0: Mobile Systems Management Using MobileShell" +authors: + - Kirk Munro +date: "2011-07-18T21:18:22+00:00" +aliases: + - /2011/07/powergui-pro-3-0-mobile-systems-management-using-mobileshell/ +--- + +In case you missed the announcement last Friday, [[PowerGUI Pro][1] ][2]3.0 was released to the web.  With this release we included a new feature that I"™m really excited about: Mobile Systems Management Using MobileShell.  We"™ve had MobileShell for quite a while, but prior to this release you could only use it to invoke your favorite scripts or commands from modules associated with your user account as well as ad hoc commands you wanted to run.  Here"™s a screenshot tour showing you what this interface would look like on a handheld device: + +[![PowerGUI Pro MobileShell - Favorites - 1 of 4](http://kirkmunro.files.wordpress.com/2011/07/image_thumb1.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image1.png)   [![PowerGUI Pro MobileShell - Favorites - 2 of 4](http://kirkmunro.files.wordpress.com/2011/07/image_thumb2.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image2.png)   [![PowerGUI Pro MobileShell - Favorites - 3 of 4](http://kirkmunro.files.wordpress.com/2011/07/image_thumb3.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image3.png)   [![PowerGUI Pro MobileShell - Favorites - 4 of 4](http://kirkmunro.files.wordpress.com/2011/07/image_thumb4.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image4.png) + +As you can see from this, the capabilities in this version were very cool (what"™s not to like about running PowerShell from your smartphone), but they were somewhat limiting as well because you couldn"™t really work with a management user interface from your handheld device this way. + +[PowerGUI Pro][1] 3.0 changes all of that, by including a new management interface for MobileShell that is based on PowerPacks (in case you don"™t know already, PowerPacks are extensions for the [PowerGUI][2] Administrative Console that provide a management experience much like MMC, but that are driven entirely by Windows PowerShell commands and scripts).  With 3.0 we"™ve provided a new mobile interface for MobileShell that allows you to use PowerPacks associated with your AD user account or groups that you are a member of from your mobile device!  Also, we"™ve made the management experience even more responsive at the same time, so now you can do more with MobileShell and it will do it more quickly than before!  All you need is a mobile device with a WebKit-enabled web browser (sorry, that means no BlackBerry 5.x or Windows Phone 7 support for now). + +Here"™s a screenshot tour showing you how this new experience can be used to do something very simple like unlock a user account: + +[![PowerGUI Pro MobileShell ScreenShot Tour - 1 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb5.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image5.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 2 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb6.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image6.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 3 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb7.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image7.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 4 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb8.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image8.png) + +[![PowerGUI Pro MobileShell ScreenShot Tour - 5 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb9.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image9.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 6 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb10.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image10.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 7 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb11.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image11.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 8 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb12.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image12.png) + +[![PowerGUI Pro MobileShell ScreenShot Tour - 9 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb13.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image13.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 10 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb14.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image14.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 11 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb15.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image15.png)   [![PowerGUI Pro MobileShell ScreenShot Tour - 12 of 12](http://kirkmunro.files.wordpress.com/2011/07/image_thumb16.png?w=136&h=244)](http://kirkmunro.files.wordpress.com/2011/07/image16.png) + +As you can see from this screenshot tour, this user experience is much richer and it gives you a full management console on the go, allowing you to respond to issues you are responsible for no matter where you are or what time it is.  It"™s also configurable using role-based access control (RBAC), so you can assign different PowerPacks to different MobileShell users based on their AD user and group membership.  Even better, we make configuration of this functionality even easier by providing you with a MobileShell Administration PowerPack as part of the PowerGUI Pro 3.0 package. + +If you"™re interested in trying this functionality out, here"™s what you need to do: + + 1. Make sure you have an IIS server ready where you can install it. + 2. Install MobileShell on the IIS server.  The MobileShell installer is pretty self-explanatory. + 3. If you didn"™t add the MobileShell users during the installation, add anyone who you want to be able to access MobileShell to the PowerGUI MobileShell Users group (note: there may be a delay once you add users before they have access, up to 15 minutes). + 4. Install the PowerGUI Pro Admin Console on the IIS Server with the MobileShell Administration PowerPack. + 5. Open the PowerGUI Pro Admin Console. + 6. In the MobileShell Administration PowerPack, select Users and then click on the Add User action to add your user account.  Repeat this for each user account you want to provide access to. + 7. Select the PowerPacks node and then click on the Publish PowerPack action.  Provide the path for the PowerPack you want to expose via MobileShell and then click on OK.  Repeat this for each PowerPack you want to expose via MobileShell. + 8. Go back to the Users node, select the users you want to provide PowerPack access to, and then click on Assign PowerPack to assign one of the PowerPacks you have published to the selected users. + +At this point you should be ready to go with your first MobileShell management experience.  Point your WebKit-enabled web browser to https://_serverName_/MobileShell/Admin, sign-in, and you"™re off and running! + +Note: PowerPacks don"™t support the new MobileShell management experience by default.  We made the decision to make it off by default because we wouldn"™t be able to tell which PowerPacks would display UI on the web server (such as a message box) reliably.  Any PowerPack can support this new experience though, they just need to be updated to suppor tit. The core PowerPacks that ship with PowerGUI Pro have been updated to support this new management experience so you"™re already enabled with a rich mobile management experience for Active Directory, VMware, Exchange, and Windows management.  I"™ll write another post later that describes what is required to turn on mobile management for a PowerPack. + +That"™s it for this post.  If you have any questions, don"™t hesitate to ask. + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro),[MobileShell](http://technorati.com/tags/MobileShell) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/648/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/648/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=648&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://www.powerguipro.com/ "PowerGUI Pro" + [2]: http://www.powergui.org/ "PowerGUI.org" diff --git a/content/articles/2011/07/powergui-pro-and-powergui-3-0-are-now-available/index.md b/content/articles/2011/07/powergui-pro-and-powergui-3-0-are-now-available/index.md new file mode 100644 index 000000000..a4882f9e0 --- /dev/null +++ b/content/articles/2011/07/powergui-pro-and-powergui-3-0-are-now-available/index.md @@ -0,0 +1,136 @@ +--- +url: /articles/2011-07-15-powergui-pro-and-powergui-3-0-are-now-available/ +title: PowerGUI® Pro and PowerGUI® 3.0 are now available +authors: + - Kirk Munro +date: "2011-07-16T01:49:58+00:00" +aliases: + - /2011/07/powergui-pro-and-powergui-3-0-are-now-available/ +--- + +Today"™s an exciting day because I"™ve finished releasing [PowerGUI Pro][1] 3.0 and [PowerGUI][2] 3.0 to the web!  This release is something we"™ve been working on for a long time, and it has a ton of new goodies for you to play with.  You can learn more about the individual features in this release in the highlights below.  When reviewing these features, anything that is only available in PowerGUI Pro will be marked as a Pro feature. + +#### + +#### Mobile Systems Management (Pro feature) + +Ever wish you could immediately respond to hot issues from wherever you are without having to run to the office or to your home computer?  Now you can!  PowerGUI Pro 3.0 now provides you with a mobile systems management console on your handheld device!  Better yet, the systems management console you use is fully customizable using PowerShell scripts!  You can also configure different management experiences for different users and groups in your organization by using role-based access control (RBAC) to define which PowerPacks are assigned to various AD users and groups.  Since this leverages the PowerPack model, that"™s a whole lot of mobile systems management possibilities for you to pick and choose from. + +Here"™s a screenshot showing what this looks like as you browse through the Active Directory PowerPack using MobileShell and retrieve an AD user you want to modify: + +[![PowerGUI MobileShell - Managing an AD user object](http://kirkmunro.files.wordpress.com/2011/07/image_thumb.png?w=304&h=549)](http://kirkmunro.files.wordpress.com/2011/07/image.png) + +Currently the list of mobile devices that support this new management interface include: + + * iOS devices + * BlackBerry devices (BlackBerry OS 6.0 and higher) + * Android devices (Android OS 2.2 and higher) + +You can also use this from a desktop or laptop by connecting with the Chrome 11 and higher or Safari 5 and higher web browsers. + +#### + +#### Customizable Start Page (some Pro-only functionality) + +Completely new to this release, we have created a customizable Start Page that appears when you launch the Script Editor or the Admin Console.  The Start Page is designed to allow you to keep aware of what"™s going on in the PowerShell community, provide you with a tip of the day, featured videos, and the most recent additions to the library of Add-ons and PowerPacks on [PowerGUI.org][3].  This feature is available in both the free and the Pro versions, however Pro users get an extra bonus here: with PowerGUI Pro you can customize the RSS feeds that are shown on this page to get even more of your favorite PowerShell news or, if you don"™t want to use it that often and you"™re a PowerGUI Pro customer you can simply indicate that PowerGUI should not show it on start-up.  Personally I"™m a Pro user and I use the new Start Page every day to keep up to date on news. + +[![PowerGUI Pro Script Editor Start Page](http://kirkmunro.files.wordpress.com/2011/07/scripteditor-mainview-hq_thumb.png?w=604&h=464)](http://kirkmunro.files.wordpress.com/2011/07/scripteditor-mainview-hq_.png) + +#### Create Executable from Script (aka Compile Script; Pro-only) + +Another new feature in PowerGUI Pro in this release is the ability to create executables from script.  This feature greatly simplifies having someone else in your organization run some functionality that you"™ve built in a PowerShell script.  Instead of sending them a script, worrying about execution policy, providing them with instructions about how to run the script, and wondering if they"™ll modify (and break) the script or not, you can simply provide them with an executable program that does whatever your script was designed to do.  You can also be comfortable with the contents of these programs, either encrypting them with a password or leaving them decrypted, in which case the scripts that are packaged in the executable program are obfuscated to keep their contents hidden from prying eyes. + +[![PowerGUI Pro Script Editor - Create Executable From Script](http://kirkmunro.files.wordpress.com/2011/07/scripteditor-compilescript_thumb.png?w=604&h=466)](http://kirkmunro.files.wordpress.com/2011/07/scripteditor-compilescript.png) + + +#### Go to Function Definition (Pro-only) + +Yet another new feature in PowerGUI Pro 3.0 is support for going to the definition of any function from the name of that function in a script file.  This feature is very useful, both when you"™re building your own function libraries or modules, and when you are using other function libraries or modules.  With this feature you can right-click on the name of any function in a script file that you"™re looking at and select **Go to Definition** from the menu that appears.  If it"™s not a function, nothing happens, but if it"™s a function, you"™ll be taken to the location where that function is defined, _even if you have changed the file, so it"™s great when you"™re editing scripts_.  If it cannot find the function definition in a file, such as when you right-click on a function that is defined by PowerShell itself, you can show the definitions of those functions in a new file, making it easy to override behaviour this way.  This is great functionality whether you are working by yourself or with a team of users (where you may not know the location of functions you are working with). + +#### Improved Version Control Support (Pro-only) + +We spent some time in this release sprucing up our version control support.  PowerGUI Pro has always supported integrated version control.  Now that support is better, allowing you to retrieve files from version control that you have never checked in or out without having to go to a separate client.  It also supports version control providers that have their own check-in dialog, allowing you to make sure you only get prompted for comments during check-in once. + +#### Reset Runspace on Demand + +Here"™s a really useful new feature that"™s available in both freeware and Pro.  As you work with PowerShell, you create variables, add functions, and change the state quite a bit.  A best practice worth following is before you publish any scripts, make sure that they pass your tests in a clean environment.  In previous versions of PowerGUI this would require resetting your runspace with each debug (something I don"™t recommend anymore), or restarting PowerGUI.  Now you can simply select **Debug** | **Reset Runspace**, and your environment will be reset without having to close and re-open the product. + +[![PowerGUI Pro Script Editor - Reset Runspace on Demand](http://kirkmunro.files.wordpress.com/2011/07/scripteditor-resetrunspaceondemand_thumb.png?w=604&h=466)](http://kirkmunro.files.wordpress.com/2011/07/scripteditor-resetrunspaceondemand.png) + +#### Improved Snippets Support + +Snippet support in PowerGUI has always been best-in-class, but in this release they get even better!  We now have a brand new snippets hierarchy that reorganizes our existing snippets and adds a bunch of new ones.  Snippets are a huge timesaver when it comes to writing PowerShell scripts, and we"™ve just made it easier to find the snippets you"™re looking for by organizing them better into appropriate folders and adding additional snippets where some were missing.  Personally I"™m a huge fan of snippets, and would love to know what other snippets you would like to see going forward. + +[![PowerGUI Pro Script Editor - Snippets Hierarchy](http://kirkmunro.files.wordpress.com/2011/07/scripteditor-snippetshierarchy_thumb.png?w=604&h=426)](http://kirkmunro.files.wordpress.com/2011/07/scripteditor-snippetshierarchy.png) + +Also, I"™m going to call out a specific feature in our snippet support that you may be interested in knowing about.  If you create a module with commands and you want those commands to be easy to use, one very natural way to help your users learn your commands is to provide snippets.  In PowerGUI, when you load any module that has a snippets subfolder as a child of the module base folder, those snippets will immediately become available in the PowerGUI Script Editor.  That means as a module author, all you need to do is ship your module with snippets in a snippets subfolder and any PowerGUI user will automatically get access to them when they load the module.  This is a very cool feature, and one that I encourage you to try out and support. + +#### Performance Improvements + +During our beta cycle for this release we spent a lot of time looking at performance and were able to make some changes now and plan some changes for later.  With this release, we have dramatically improved our parser performance, which means that files will parse more quickly in the PowerGUI Script Editor.  This in turn means files will open more quickly, which means the Script Editor itself will open more quickly when you"™re loading a lot of files.  There are more performance improvements coming, but we"™ve already made great progress and I"™m sure you"™ll be happy with the improvements in this area! + +#### + +#### Multi-line Support in the Embedded Console + +Rich Beckett, this bud"™s for you!  Rich and a bunch of other PowerGUI users pointed out that they didn"™t like how our Script Editor would return an error if you pressed enter when it was obvious that the line was not finished yet (for example, when you finish a line with a round curly brace, or a pipeline symbol, or a line continuance character like the backtick).  We"™ve fixed this now, so you can enter multi-line commands without having to worry about getting errors and without having to think about pressing Shift+Enter to get a newline in the command pane. + +#### One-click Install for PowerPacks + +In our previous release we added support for one-click install for Add-ons in the Script Editor, allowing users to search for Add-ons on PowerGUI.org and install them with a single button click (there are some highly recommended Add-ons available by the way, so check them out if you haven"™t already). Now we"™re providing the same support for PowerPacks, so you can search online for PowerPacks, select the ones you like from the list of results, and click on a button to download, unblock, install and load those PowerPacks in the Admin Console. We have a large library of PowerPacks available, which you can see by clicking on the **Show All** button in the **Find PowerPacks Online** dialog. I strongly recommend you give them a look, because there is a ton of useful PowerShell functionality in those PowerPacks. + +[![AdminConsole.FindPowerPacksOnline](http://kirkmunro.files.wordpress.com/2011/07/adminconsole-findpowerpacksonline_thumb.png?w=604&h=449)](http://kirkmunro.files.wordpress.com/2011/07/adminconsole-findpowerpacksonline.png) + +#### Admin Console Authoring Mode + +If you"™re like me, from time to time in the Admin Console you accidentally move something, or delete the wrong thing, or make some change you didn"™t intend to make. Being able to change any PowerPack is great because it allows for rich customization, but when you"™re just using the PowerPacks day to day, you may not want to make any changes. It"™s also possible that you"™re providing the PowerGUI Admin Console to some staff members who need the features but not the customizability. In those cases, you can now launch the Administrative Console in default (non-authoring) mode, and be assured that you can"™t accidentally break one of the PowerPacks. When you need to make changes though, you can open the Administrative Console in Authoring mode and create and customize whatever you like! + +#### Improved Action Support + +The handling of Admin Console actions was improved a lot in this release.  Now when you select one or more rows in the grid in the Admin Console, only the actions appropriate for those rows will be displayed.  If you select mutliple objects of different types (files and folders, for example), you will only be presented with actions that apply to both types of objects.  Also, only the relevant actions that don"™t require any selection will be displayed when you click on a node or action and no data is returned.  All of these changes make using the Admin Console much easier than before. + +#### Improved Shared Script Support + +Shared Scripts in the PowerGUI Admin Console allow you to define functions that you want to have access to in more than one location in a shared script file. These script files would only previously be loaded once you clicked on a script node or script action in a module, meaning that you could not create a simple node or simple action from a function in a shared script file. That"™s changed now, such that shared scripts are invoked when you click on any node or action in a PowerPack. + +#### VMware PowerCLI 4.1+ Support + +We"™ve had a beta version of the VMware PowerPack available for a while that provides support for PowerCLI 4.1.  This release of PowerGUI includes that PowerPack in release form, officially catching PowerGUI support up to the latest VMware PowerCLI releases. + +#### Of course there"™s more! + +There are a ton of other minor changes in this release as well, ranging from usability improvements to bug fixes to changes that make it a little easier to create PowerGUI Add-ons.  We have new automatic variables ($PGHome, $PGUICulture, $PGVersionTable and $PGSE).  We automatically load PowerPack requirements now when a PowerPack is loaded.  I"™m sure there are other changes in this release that I"™m forgetting, but suffice it to say, we put a ton of energy into this release and it shows (I"™m exhausted!![Smile](http://kirkmunro.files.wordpress.com/2011/07/wlemoticon-smile.png?w=595) ). + +#### Great!  How can I get it? + +PowerGUI Pro is a fantastic PowerShell-based product with a ton of value for the $199 US price tag, even more with this 3.0 release.  If you like the features in PowerGUI Pro or if you like what we"™re doing with PowerGUI in general and feel it"™s time you put your money where your mouth is, simply point your browser to to go to our eStore and buy yourself a copy (or two or three![Winking smile](http://kirkmunro.files.wordpress.com/2011/07/wlemoticon-winkingsmile.png?w=595) ). + +If you"™re not ready to commit to the Pro version just yet, please give our new PowerGUI Pro 3.0 release a try by browsing to [http://www.powerguipro.com][4] and clicking on the Try button on that page to download a trial version.  A license key will be sent to you to allow you to try it out for 30 days.  If all you"™ve been using so far is the freeware version, we have put a lot of energy into the Pro release in 3.0 and this is a trend that will continue going forward, so I strongly encourage you to give it a try and see what you think.  Note that PowerGUI Pro and PowerGUI (freeware) install side by side, so you can try it on the same system where you use the free one"¦just pay attention to the shortcut you use to launch it so that you get the one you"™re looking for! + +After you"™ve tried out PowerGUI Pro, if you"™re not able to spend $199 for the product right now, then we do have the freeware version available from [www.powergui.org][5].  You can"™t miss the big Download button near the top of that page. + +Of course, if you already have either PowerGUI Pro or PowerGUI freeware, both of these will auto-update to the new version automatically when the auto-update system detects the new version is available.  This should happen the next time you start-up the product. + +#### An Important Note About Feedback and Usage Statistics + +With all of our releases, feedback is what drives us and motivates us to continue doing what we"™re doing, and this release is no exception.  We received a ton of feedback during our beta cycle and were able to fix some serious issues because of it.  I need to shout out a special thanks to Glenn Sizemore, Chris Piper and Thomy Kay for their feedback "“ it was particularly helpful!  The key point here though is that the feedback system really works.  If you love something, let us know, we"™d love to hear how PowerGUI is making your life easier!  If you don"™t like something, let us know that as well, we"™ll see what we can do to make it better!  Or if you think we"™re missing something, well, let us know!  We"™ll see what we can do to put that in!  I manage this product and we have developers who develop this product, but ultimately I"™m taking most of my direction from you guys, so please keep the feedback coming! + +Also, regarding feedback, I would be remiss if I didn"™t mention one last feature that we"™ve added to this release.  This release introduces anonymous data collection to PowerGUI.  It was important for us to add this for the reasons I just highlighted in the last paragraph "“ your feedback is that important, and we can learn a lot about where we need to spend our effort by reviewing usage data.  The data gathered does not contain any personal information, nor does it contain any scripts you write or anything like that.  It"™s simply data about how you are using the product.  Please opt-in for this usage data collection so that we can make the product even better going forward.  You can always opt out, but feedback is important, so we"™d really appreciate it if you would opt-in. + +That"™s it for this post.  I hope you like this release, and look forward to hearing about how it"™s making a difference for you! + +Enjoy! + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerGUI Pro](http://technorati.com/tags/PowerGUI+Pro) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/612/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/612/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=612&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://www.powerguipro.com/ "PowerGUI Pro" + [2]: http://www.powergui.org/ "PowerGUI.org" + [3]: http://www.powergui.org/entry.jspa?externalID=3523 "PowerGUI.org" + [4]: http://www.powerguipro.com/ + [5]: http://www.powergui.org/ diff --git a/content/articles/2011/09/_index.md b/content/articles/2011/09/_index.md new file mode 100644 index 000000000..ff409b328 --- /dev/null +++ b/content/articles/2011/09/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from September 2011" +description: "PowerShell.org Articles published in September 2011." +--- diff --git a/content/articles/2011/09/pscx-2-1-beta-1-available-for-download/index.md b/content/articles/2011/09/pscx-2-1-beta-1-available-for-download/index.md new file mode 100644 index 000000000..eab7ece17 --- /dev/null +++ b/content/articles/2011/09/pscx-2-1-beta-1-available-for-download/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2011-09-18-pscx-2-1-beta-1-available-for-download/ +title: PSCX 2.1 Beta 1 Available for Download +authors: + - Keith Hill +date: "2011-09-19T04:17:17+00:00" +aliases: + - /2011/09/pscx-2-1-beta-1-available-for-download/ +--- + +I just uploaded beta 1 for the PowerShell Community Extensions version 2.1. This beta drop adds better support for Windows PowerShell V3 that is in the Windows 8 Developer Preview. There are a number of bug fixes in this drop: + + * 28023 Read-Archive : Cannot bind parameter 'Path'. Cannot convert the ... value of type "System.String" to type "Pscx.IO.PscxPathInfo". + * 28198 Test-XML not validating xml against schema correctly + * 28964 Get-FileTail access conflict + * 29255 Get-HttpResource Timeout Bug + * 29598 String – PscxPathInfo ParameterBindingException + * 30169 Invoke-Ternary example doesn't work + * 30921 Invoke-Elevated demands arguments + + You can download the beta from [here][1]. + + [![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/232/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/232/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=232&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) + + [1]: http://pscx.codeplex.com/releases/view/73566 diff --git a/content/articles/2011/09/seasons-of-change-new-product-manager-for-powerwf-and-powerse-at-devfarm-software/index.md b/content/articles/2011/09/seasons-of-change-new-product-manager-for-powerwf-and-powerse-at-devfarm-software/index.md new file mode 100644 index 000000000..912e05ae7 --- /dev/null +++ b/content/articles/2011/09/seasons-of-change-new-product-manager-for-powerwf-and-powerse-at-devfarm-software/index.md @@ -0,0 +1,36 @@ +--- +url: /articles/2011-09-06-seasons-of-change-new-product-manager-for-powerwf-and-powerse-at-devfarm-software/ +title: "Seasons of change: new Product Manager for PowerWFâ„¢ and PowerSE at Devfarm Software" +authors: + - Kirk Munro +date: "2011-09-06T19:24:56+00:00" +aliases: + - /2011/09/seasons-of-change-new-product-manager-for-powerwf-and-powerse-at-devfarm-software/ +--- + +I always enjoy this time of year.  There is something about the transition that happens over Labour Day weekend that always gets me excited.  Maybe it"™s a lingering feeling of anticipation over the new year at school or university from years gone by, a feeling that I can still appreciate these days as I watch my kids getting excited about their education and the new activities they will sign up for this fall.  Regardless, it"™s always a fun time of year for me. + +This year though I have some extra reasons of my own to be even more excited.  As of this morning, I am now working as Product Manager for the [PowerWF][1] and [PowerSE][2] products at [Devfarm Software][3]!  I am absolutely thrilled about this new position!  [Devfarm][3] has a great team and a great set of products, and I"™m really happy to be able to help them drive those products forward. + +With this news, today marks the end of a month that included some vacation time, some time to step back and refocus, and some time for reflection on what to do next.  During this time I received a ton of support from friends and followers in the PowerShell community, and for that I am very grateful.  This support helped one particular sentiment that I came across stay with me: + +> You know for a (while) I (wondered if) going back to the amazing experience of (PowerShell) wouldn't be a good idea, but really now I've come completely around because (software can be) stressful and hard to make but ultimately what makes (it) fun is the people that you work with, and the fact that (I"™m) going to be working with a lot of the old gang, with a lot of friends, and obviously making some new friends is really the point of being here, so I'm extremely thrilled.1 + +This really represents how I have felt since my departure from my last job as Product Manager for PowerGUI.  I really love PowerShell as a technology, but as great as that technology is, it just wouldn"™t be the same without the community that surrounds it.  PowerShell is blessed to have a tremendous community, and I am very, very proud to be able to continue to participate in that same community as a Product Manager for some really cool products that use PowerShell, as a PowerShell MVP, and as a geek who fell in love with technology a long time ago. + +Now that I"™ve found my new direction and focus, it"™s time to get down to business.  Whether you"™re a current user of [PowerWF][1] or [PowerSE][2] or someone who is interested in trying [PowerWF][1] or [PowerSE][2], I"™d love to connect with you to hear what you like (or don"™t like) about these products as well as what you would like to see added to them in the future.  Feel free to reach out to me at any time either in my blog comments or by using the [Contact Me][4] form on my blog.  I"™m really looking forward to working with you. + +Kirk out. + +1 Paraphrased from Peter Jackson"™s speech on the first day of filming for "The Hobbit"; his exact speech can be heard here: . + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerWF](http://technorati.com/tags/PowerWF),[PowerSE](http://technorati.com/tags/PowerSE),[Devfarm](http://technorati.com/tags/Devfarm) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/705/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/705/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=705&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://powerwf.com/ + [2]: http://powerwf.com/products/powerse.aspx + [3]: http://devfarm.com/ + [4]: http://poshoholic.com/contact-me/ diff --git a/content/articles/2011/10/_index.md b/content/articles/2011/10/_index.md new file mode 100644 index 000000000..24d6383a3 --- /dev/null +++ b/content/articles/2011/10/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from October 2011" +description: "PowerShell.org Articles published in October 2011." +--- diff --git a/content/articles/2011/10/powerse-2-5-3-is-now-available/index.md b/content/articles/2011/10/powerse-2-5-3-is-now-available/index.md new file mode 100644 index 000000000..dadd1c8fd --- /dev/null +++ b/content/articles/2011/10/powerse-2-5-3-is-now-available/index.md @@ -0,0 +1,68 @@ +--- +url: /articles/2011-10-14-powerse-2-5-3-is-now-available/ +title: PowerSE 2.5.3 is now available +authors: + - Kirk Munro +date: "2011-10-14T15:02:05+00:00" +aliases: + - /2011/10/powerse-2-5-3-is-now-available/ +--- + +A little over a week ago we released [PowerSE 2.5.3][1] to the web.  You can download the latest release [here][1].  This release includes many great improvements to the [PowerSE][1] product, many of which were requested by you, so thanks for your feedback and please keep it coming! + +#### No time limit for freeware + +With this release, we"™ve removed the requirement to re-download this product every 60 days.  This was our number one feature request since we made [PowerSE][1] a freeware product.  Now when you download [PowerSE][1] 2.5.3, it is truly freeware and you can use it as long as you like! + +#### PowerVI Integration + +Since [PowerVI][2] has joined the Devfarm family of products, we have now improved the integration between [PowerVI][2] and [PowerSE][1] and [PowerWF][3]. This enables easier authoring and testing of VMware automation scripts and workflows before you publish them to be integrated in the vSphere client, and it highlights one of the greatest values of the Devfarm products "“ the rich integration between them that make everything much easier. + +#### **Tabs to spaces support** + +We"™ve added support for configuring how tabs are used in the [PowerSE][1] Script Editor.  If you want spaces inserted when you press the Tab key while editing scripts, all you need to do is to set $psise.Settings.AutoConvertTabsToSpaces to $true in the embedded console.  If you want the tab size to be something other than the default value of 4, you simply set $psise.Settings.TabSize to the number of spaces you want to use for tab characters.  These only need to be set once, so you can simply make the calls in the embedded console and then you"™ll always have it configured that way going forward. + +#### Enhanced history pane + +The history pane in [PowerSE][1] has always been useful, but now it"™s much better!  With the history pane in [PowerSE][1] 2.5.3, you can identify which commands were successful and which were not, all at a glance by looking at the icon.  You can also tell which commands were allowed to run to completion and which were cancelled.  Most importantly, you can identify the duration of any command that you run, so if you are trying to get the most performance from your scripts, this is an easy way to compare the performance for several related commands so that your scripts run as fast as they can. + +#### Greatly improved support for international environments + +In previous releases of [PowerSE][1], there were a number of defects preventing international keyboard layouts (i.e. those other than "US English") from working properly in the embedded console.  Those defects have been fixed, so now you can use the embedded console with international keyboards just fine. + +We also added support for Unicode characters to the embedded console, making it easier for customers to get the output they expect regardless of where they happen to be. + +#### Multi-select support in the File|Open dialog + +With [PowerSE][1] 2.5.3, you can open multiple files in one folder at once by simply selecting the files you want before you click on the Open button.  This can be a big timesaver when you are working with modules containing many files! + +#### Smarter variable Intellisense + +When you enter a variable name in a script, it can be difficult to determine if you are entering the name of an existing variable or if you are creating a new variable.  Previous releases would sometimes complete a variable name incorrectly when you were in fact creating a new variable name.  This shouldn"™t be a problem any longer, because we now allow you to enter new variable names and the auto-completion should only happen when you want it to happen. + +#### Proper ps1xml file support + +In [PowerSE][1] 2.5.3, if you are working with ps1xml files, you will now get proper Intellisense as well as auto-completion of xml elements as you would expect. + +#### Fast clearing of the embedded console window + +In today"™s era of PowerShell, we all want to do more in less time, so much so that even typing in cls in the embedded console and pressing Enter can be cumbersome when you do it repeatedly.  [PowerSE][1] 2.5.3 allows you to clear the embedded console window at any time by simply pressing Ctrl+Del. + +#### And more"¦ + +This is just a short list of some of the key changes we have made in this release.  There are others that I want to talk about, but I"™m going to save a few for follow-up blog posts.  We"™ve been spending a lot of time on [PowerSE][1] recently, and between our hard work and your great feedback, we"™ve built a fantastic, best-in-class PowerShell script editor!  If you write PowerShell scripts, I encourage you to give this release a try, and be sure to let us know what you think!  Also, if you have any questions, feel free to leave me a note on my blog or pop over to [www.devfarm.com][4] and ask us directly in the chat window.  We"™re always listening! + +Thanks, + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[PowerSE](http://technorati.com/tags/PowerSE),[PowerWF](http://technorati.com/tags/PowerWF),[PowerVI](http://technorati.com/tags/PowerVI),[Devfarm](http://technorati.com/tags/Devfarm) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/717/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/717/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=717&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://powerwf.com/products/powerse.aspx + [2]: http://powerwf.com/products/powerscripter.aspx + [3]: http://powerwf.com/products/powerwf.aspx + [4]: http://www.devfarm.com/ diff --git a/content/articles/2011/10/windows-powershell-version-3-simplified-syntax/index.md b/content/articles/2011/10/windows-powershell-version-3-simplified-syntax/index.md new file mode 100644 index 000000000..2017a1f52 --- /dev/null +++ b/content/articles/2011/10/windows-powershell-version-3-simplified-syntax/index.md @@ -0,0 +1,194 @@ +--- +url: /articles/2011-10-19-windows-powershell-version-3-simplified-syntax/ +title: Windows PowerShell Version 3 Simplified Syntax +authors: + - Keith Hill +date: "2011-10-20T00:44:42+00:00" +aliases: + - /2011/10/windows-powershell-version-3-simplified-syntax/ +--- + +Windows PowerShell version 3 introduces a simplified syntax for the Where-Object and Foreach-Object cmdlets. The simplified syntax shown below, eliminates the curly braces as well as the need for the special variable $_. + + + + + + + +`C:\PS> Get-Process | Where PM -gt 100MB +... +C:\PS> Get-Process | Foreach Name +... +`The intent of this "syntax" is to make it easier for folks get started with PowerShell. Compared to the commands below, I can see the value of the simplified syntax: + + + + + + + +`C:\PS> Get-Process | Where {$_.PM -gt 100MB} +... +C:\PS> Get-Process | Foreach {$_.Name} +... +`When folks are first learning PowerShell, the special variable $_ is one of those mental model hurdles they have to get over. The simplified syntax feature of V3 seems to generate a fair amount of controversy (is it really necessary, doesn"™t this just complicate things more, etc). Regardless of where you stand on the simplified syntax it is useful to understand how it works. + +Given that it appears to be a simplified expression syntax you might think this required a change to the PowerShell parser"™s grammar but you would be wrong. It turns out that the simplified syntax is implemented by additional parameter sets "“ lots of additional parameter sets. In fact, for every operator supported, there is an additional parameter set to support that operator. Let"™s see this with the Where-Object cmdlet by listing out all of its parameter set names: + + + +`C:\PS> Get-Command Where-Object | Select -Expand ParameterSets | Format-Table Name +Name +---- +EqualSet +ScriptBlockSet +CaseSensitiveGreaterThanSet +CaseSensitiveNotEqualSet +LessThanSet +CaseSensitiveEqualSet +NotEqualSet +GreaterThanSet +CaseSensitiveLessThanSet +GreaterOrEqualSet +CaseSensitiveGreaterOrEqualSet +LessOrEqualSet +CaseSensitiveLessOrEqualSet +LikeSet +CaseSensitiveLikeSet +NotLikeSet +CaseSensitiveNotLikeSet +MatchSet +CaseSensitiveMatchSet +NotMatchSet +CaseSensitiveNotMatchSet +ContainsSet +CaseSensitiveContainsSet +NotContainsSet +CaseSensitiveNotContainsSet +InSet +CaseSensitiveInSet +NotInSet +CaseSensitiveNotInSet +IsSet +IsNotSet +`Most of these correspond to the operators you are already familiar with such as: "“GT, "“LT, "“GE, "“LE, "“LIKE, "“MATCH, "“NOTMATCH, "“CONTAINS, "“NOTCONTAINS, etc. Note however there are two new operators in PowerShell V3: "“In and "“NotIn which you can use like so: + + + + + +`C:\PS> 1 -In 1..10 +True +C:\PS> 20 -NotIn 1..10 +True +`Let"™s look at the interesting parameters on these operator specific parameter sets. Let"™s look at the EqualsSet parameter set: + + + + + +`C:\PS> Get-Command Where-Object | Select -Expand ParameterSets | Where Name -eq EqualSet | + Select -Expand Parameters | Where Position -ge 0 | + Format-Table Name,Position,IsMandatory -AutoSize +Name Position IsMandatory +---- -------- ----------- +Property 0 True +Value 1 False +`As it turns out, these results are the same for all the _operator_ oriented parameter sets. At the very minimum, the Property parameter is required and is always the first positional parameter. And as you would expect, if you don"™t provide it, you get prompted for a value: + + + + + +`C:\PS> Get-Process | Where -eq +cmdlet Where-Object at command pipeline position 2 +Supply values for the following parameters: +Property: +`Now even though Value parameter is specified as not mandatory, in many cases if you don"™t provide it you will get a terminating error e.g.: + + + + + +`C:\PS> Get-Process | Where Name -eq +Where-Object : The specified operator requires both the -Property and -Value parameters. Supply both parameters and +retry. +At line:1 char:15 ++ Get-Process | Where Name -eq ++ ~~~~~~~~~~~~~~ + + CategoryInfo : InvalidArgument: (:) [Where-Object], PSArgumentException + + FullyQualifiedErrorId : ValueNotSpecifiedForWhereObject,Microsoft.PowerShell.Commands.WhereObjectCommand +`There are some cases where you don"™t have to provide the value nor the operator e.g.: + + + + + +`C:\PS> Get-Process | Where Responding +Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName +------- ------ ----- ----- ----- ------ -- ----------- + 216 10 3560 2896 73 4000 atieclxx + 130 7 2380 1028 33 1020 atiesrxx + 157 11 17288 13344 49 7876 audiodg + 28 6 1256 420 42 0.06 2752 BluetoothHeadsetProxy +... +`This works because A) the EqualsSet parameter set is the default parameter set and B) the Where-Object implementation appears to coerce the property specified (_Responding_ in this case) to Boolean. If the result is $true then the object is output by Where-Object and sent on its way down the pipeline. + +So all this simplified syntax really is, is a bunch of operator specific parameter sets on Where-Object that have a positional and mandatory Property parameter of type [string] and a positional Value parameter of type [object]. In the case of Foreach-Object it is one extra parameter set called PropertyAndMethodSet which has one mandatory, positional parameter called MemberName. And as with any cmdlet, you provide the parameter values and the cmdlet determines how to interpret them. In fact, given standard parameter parsing behavior the below is as valid as the conventional notation: + + + + + +`C:\PS> Get-Process | Where -GT PM 100MB +... +C:\PS> Get-Process | Where PM 100MB -GT +... +C:\PS> Get-Process | Where -Value 100MB -Property PM -GT +... +`Now where this syntax can lead you astray if you don"™t understand how it works, is if you make the assumption that this is a parsed expression. In that case, folks might expect this to work: + + + + + + + + +`C:\PS> Get-Process | Where Threads.Count -GT 100 +`There *is* a Threads collection on each Process object. We might think that we can access a property on that collection but in effect, what happens is that the Where-Object Property parameter gets the value "Threads.Count" and there is no property on a Process object called "Threads.Count". This silently fails which might lead you to believe there are no processes with greater than 100 threads. But reverting back to the standard syntax we see that isn"™t the case: + + + + + + + + +`C:\PS> Get-Process | Where {$_.Threads.Count -GT 100} +Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName +------- ------ ----- ----- ----- ------ -- ----------- + 2080 126 155680 139928 531 113.68 4920 msnmsgr + 1087 0 312 8800 15 4 System +`So when you are using the simplified syntax be sure to keep in mind that you can **only **specify property names and you cannot access sub-properties. Keep your property names simple and you should be copasetic with the new, simplified syntax. While I"™m a little unsure about the new simplified syntax given how quickly you can fall off the "simple" path into the sharp rocks and lava below, I will say this. As I wrote this blog post, I used the simplified syntax quite a bit and I have to say that it is growing on me. + + + + + + One final item to mention about simplified syntax. It turns out that some folks have a hard time grokking $_ but when they"™re presented with **$PSItem** it apparently makes more sense to them. So in PowerShell v3, wherever you can use $_ you can also use $PSItem. $PSItem is not an alias. It seems to be a duplicate variable defined in all the same scopes as $_ and its value tracks that of $_ e.g.: + + + + + + +`C:\PS> 1 | Foreach {Get-Variable _,psitem; $_ = 4; Get-Variable _,psitem} +Name Value +---- ----- +_ 1 +PSItem 1 +_ 4 +PSItem 4 +`[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/233/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/233/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=233&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2011/12/_index.md b/content/articles/2011/12/_index.md new file mode 100644 index 000000000..ff33b200c --- /dev/null +++ b/content/articles/2011/12/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from December 2011" +description: "PowerShell.org Articles published in December 2011." +--- diff --git a/content/articles/2011/12/microsoft-windows-powershell-v3-ctp2-available-for-download/index.md b/content/articles/2011/12/microsoft-windows-powershell-v3-ctp2-available-for-download/index.md new file mode 100644 index 000000000..332560fd7 --- /dev/null +++ b/content/articles/2011/12/microsoft-windows-powershell-v3-ctp2-available-for-download/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2011-12-05-microsoft-windows-powershell-v3-ctp2-available-for-download/ +title: Microsoft Windows PowerShell V3 CTP2 Available for Download +authors: + - Keith Hill +date: "2011-12-05T17:40:24+00:00" +aliases: + - /2011/12/microsoft-windows-powershell-v3-ctp2-available-for-download/ +--- + +You can grab the bits from [here][1]. If you have V3 CTP1 installed, please uninstall it first or you can get your machine into a bad state. + +So far my favorite two features new to this drop are both in the Integrated Scripting Editor (ISE). The first is the "most recently opened files list" on the File menu and second is the switch to a two pane ISE (combines the output and command panes into one). Oh yeah, there isn"™t much in the help system until you run Update-Help from an elevated prompt. + +[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/238/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/238/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=238&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) + + [1]: http://www.microsoft.com/download/en/details.aspx?id=27548 diff --git a/content/articles/2011/_index.md b/content/articles/2011/_index.md new file mode 100644 index 000000000..212f84e0e --- /dev/null +++ b/content/articles/2011/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from 2011" +description: "PowerShell.org Articles published in 2011." +--- diff --git a/content/articles/2012-01-02-powershell-v3-ctp2-provides-better-argument-passing-to-exes.md b/content/articles/2012-01-02-powershell-v3-ctp2-provides-better-argument-passing-to-exes.md deleted file mode 100644 index 5dfd8fa86..000000000 --- a/content/articles/2012-01-02-powershell-v3-ctp2-provides-better-argument-passing-to-exes.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: PowerShell V3 CTP2 Provides Better Argument Passing to EXEs -authors: - - Keith Hill -date: "2012-01-02T19:56:23+00:00" -aliases: - - /2012/01/powershell-v3-ctp2-provides-better-argument-passing-to-exes/ ---- - -Within PowerShell it has always been easy to pass "simple" arguments to an EXE e.g.: - - - -`C:\PS> ipconfig -all -`However passing arguments to certain exes can become surprising difficult when their command line parameter syntax is complex i.e. they require quotes and use special PowerShell characters such as @ $ ;.  A lot of these problems can be solved by placing single or double quotes in the right places or by escaping PowerShell"™s special characters e.g.: - - - -`C:\PS> tf.exe status . /workspace:HILLR1;hillr /r -There are no pending changes. -The term 'hillr' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the -spelling of the name, or if a path was included, verify that the path is correct and try again. -At line:1 char:35 -+ tf.exe status . /workspace:HILLR1;hillr /r -+ ~~~~~ - + CategoryInfo : ObjectNotFound: (hillr:String) [], CommandNotFoundException - + FullyQualifiedErrorId : CommandNotFoundException -`Note that in the command line above the "/workspace" parameter value is specified using a special syntax that TF.exe recognizes i.e. ;.  Unfortunately the semicolon is a statement separator in PowerShell which means that TF.exe only sees the parameters before the semicolon.  We can use the ECHOARGS.exe utility from the [PowerShell Community Extensions][1] to verify this: - - - -`C:\PS> echoargs.exe status . /workspace:HILLR1;hillr /r -Arg 0 is -Arg 1 is <.> -Arg 2 is -`In this case, the solution is simple "“ just escape the semicolon e.g.: - - - -`C:\PS> tf.exe status . /r /workspace:HILLR1`;hillr -File name Change Local path -------------- ------ ----------------------------------------- -$/Foo/Trunk/Tools/Bin -TfsTools.psm1 edit C:\Tfs\Foo\Trunk\Tools\Bin\TfsTools.psm1 -1 change(s) -`This works up to the point where you get quite frustrated figuring out which characters to escape and which parameter/argument pairs need to be quoted and whether you should use single quotes or double quotes.  Fortunately, it looks like we will get a way to tell the PowerShell argument parser to stop doing so much work for us and just pass the args through "as-is".  In other words, you can tell PowerShell to become a "dumber" command line parser.  This mode is invoked using the character sequence: "“% and it works from the point it appears on the command line to the end of that line.  Note that the character sequence may change or the feature could be completely removed before V3 ships. - -Given this new feature, here"™s how you use it.  Take this example of a problematic set of command line parameters: - - - -`C:\PS> sqlcmd -S .\SQLEXPRESS -v lname="Gates" -Q "SELECT FirstName,LastName FROM -AdventureWorks.Person.Contact WHERE LastName = '$(lname)'" -The term 'lname' is not recognized as the name of a cmdlet, function, script -file, or operable program. Check the spelling of the name, or if a path was -included, verify that the path is correct and try again. -At line:1 char:126 -+ ... LastName = '$(lname)'" -+ ~~~~~ - + CategoryInfo : ObjectNotFound: (lname:String) [], CommandNotFou - ndException - + FullyQualifiedErrorId : CommandNotFoundException -`In this case the V2 solution is to escape the $ character in the last part of the command line e.g.: '`$(lname)' but if you don"™t want to spend the time to figure this out you can easily use –% like so: - - - -`C:\PS> sqlcmd --% -S .\SQLEXPRESS -v lname="Gates" -Q "SELECT FirstName,LastName F -ROM AdventureWorks.Person.Contact WHERE LastName = '$(lname)'" -FirstName LastName ----------------------------------- ----------------------------------- -Janet Gates -(1 rows affected) -`You can put the –% later in the parameter list if you want.  You might want to do this if you need to use PowerShell variable expansion in some of the arguments.  Just note that once you specify –% the rest of the command line will be parsed "dumbly".  You will get no PowerShell variable expansion or grouping expressions and you won"™t be able to escape newlines.  One thing you can do in this special parsing mode is expand environment variables using the batch syntax of %ENV_VAR% e.g.: - - - -`C:\PS> $env:colname = "LastName" -C:\PS> sqlcmd -S .\SQLEXPRESS -v lname="Gates" --% -Q "SELECT FirstName,LastName F -ROM AdventureWorks.Person.Contact WHERE %colname% = '$(lname)'" -FirstName LastName ----------------------------------- ----------------------------------- -Janet Gates -(1 rows affected) -`I believe this new command line parsing feature will greatly simplify interacting with exes that have a complex command line parameter syntax.  Thanks to the PowerShell team for listening to the [community feedback on this issue](https://connect.microsoft.com/PowerShell/feedback/details/376207/executing-commands-which-require-quotes-and-variables-is-practically-impossible) and providing a solution. - - -[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/241/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/241/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=241&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) - - [1]: http://pscx.codeplex.com/ diff --git a/content/articles/2012-01-04-powershell-mvp-for-2012.md b/content/articles/2012-01-04-powershell-mvp-for-2012.md deleted file mode 100644 index a5e0efb32..000000000 --- a/content/articles/2012-01-04-powershell-mvp-for-2012.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: PowerShell MVP for 2012 -authors: - - Kirk Munro -date: "2012-01-04T17:51:39+00:00" -aliases: - - /2012/01/powershell-mvp-for-2012/ ---- - -Every year around Christmas I anxiously await the New Year to see if I receive the Microsoft MVP award again that year.  Well that email came on January 1, 2012, and I"™m quite thrilled about this one because it"™s a milestone this time (year 5 as a PowerShell MVP).  Thanks to the community for being so great to work with, and thanks to Microsoft both for recognizing individual efforts with the MVP program and for creating such great products like Windows PowerShell!  Work has never been so much fun! - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[Microsoft MVP](http://technorati.com/tags/Microsoft+MVP) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/740/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/740/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=740&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2012-01-05-essential-powershell-to-alias-or-not-to-alias-that-is-the-question.md b/content/articles/2012-01-05-essential-powershell-to-alias-or-not-to-alias-that-is-the-question.md deleted file mode 100644 index 4c3212a02..000000000 --- a/content/articles/2012-01-05-essential-powershell-to-alias-or-not-to-alias-that-is-the-question.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "Essential PowerShell: To alias, or not to alias, that is the question" -authors: - - Kirk Munro -date: "2012-01-05T14:30:00+00:00" -aliases: - - /2012/01/essential-powershell-to-alias-or-not-to-alias-that-is-the-question/ ---- - -Recently there was a discussion between community experts and a product team about a module they are working on.  The topic being discussed was cmdlet aliases: whether or not they should provide aliases for their cmdlets out of the box and if so, how they should be provided.  Aliases are great for ad-hoc PowerShell work, which is what most PowerShell users do at this point, and incredibly useful when you"™re trying to put out a fire and managing your infrastructure using PowerShell.  However, there are many important things that module authors need to consider when planning aliases for their cmdlets, as follows: - -1. There are many cmdlets out now, and more and more every month.  Coming up with a vsa (very short alias) that is _unique_ is a challenge at best, and the more time goes by the more tla's (three-letter aliases) will get used up.  The likelihood of an alias conflict is already high, and increasing all the time given the number of commands that are available both from Microsoft and from third party vendors. - -2. The land grab with alias names is worse than it is with functions or cmdlets.  With functions or cmdlets, you can have multiple modules loaded with conflicting names and access either command using the fully qualified command name.  With aliases though you are not provided this same capability "“ there can be only one.  Aliases are simply commands set to a single value and they cannot be qualified using a module name qualifier to disambiguate if a name conflict arises. - -3. Depending on how careful (or not) that developers are, it is very easy for a module author to completely take over (overwrite) an existing alias with no warning or message indicating that this has happened, resulting in potential command hijacking between module teams.  A simple call to Set-Alias does this without warning.  On the flipside, if developers don"™t hijack aliases, then some of the aliases they would otherwise create may simply not be defined. - -4. When aliases are hijacked, unloading a module doesn't correct the problem because an alias that was overwritten by a module alias will simply become completely unavailable when the alias is removed as the module is unloaded. - -As far as I am aware, this situation does not improve with the next version of PowerShell either, so it's years away from getting better. - -Believe it or not, even with these things in mind, I'm actually still pro aliases.  I just think that some extra care/thought needs to be put into their definition.  There is no real standard here that both satisfactorily addresses the issues identified above and that allows for consistency across companies/teams at this time.  Given that is the current state of affairs, if you are considering aliases for your module I recommend one of the following approaches: - -1. [SAFEST] Rather than trying to come up with something that can be shipped despite these issues, at this time I think aliases would be best addressed in a "tips and tricks" type of blog post, proposing a short script that defines some useful aliases for the module/snapin in question in order to allow admins to be able to deal with fires quickly using ad-hoc PowerShell commands via some aliases.  Such a script should generate warnings whenever a name conflict is discovered so that users are aware when an alias either cannot be created or is overwritten. - -2. [EXPERIMENTAL] Ship aliases with your module, but try to make sure they really are unique.  For example, if you"™re a vendor whose company name starts with Q, you could prefix all of your aliases with "q".  This is attractive because there are no verbs that start with "q", so right from the start you've dramatically reduced the chance that you'll have a conflict, setting yourselves up better to have aliases that belong to you.  Then you would only have to coordinate within your company to make sure the aliases used across teams are unique.  This isn"™t foolproof though because there may be multiple products/vendors that adopt the same standard, and if the name of your company or product starts with G, the likelihood of a conflict would be much higher (the alias prefix used for "get-*" cmdlets is "g") so you may want to choose a pair of letters instead.  Regardless, you've likely reduced the risk, and you could generate a warning whenever you run into a conflict that prevents an alias from being created. - -3. [RECOMMENDED] Lots of 1 and a little bit of 2: use unique alias names that work for your product team/company, but don't ship them with the module.  Instead, push them out as a value add on a blog post, and see how the community responds.  At the same time work with MVPs and Microsoft to get these issues addressed such that a shorthand system for command names does work.  Some MVPs, already proposed a few things to the Microsoft PowerShell team that could help here (aliases for module names for one — think PS\gsv for a core PowerShell version of Get-Service or EX\gu for the Get-User cmdlet that comes with the Microsoft Exchange module or AD\gu for the Get-User cmdlet that comes with the Microsoft Active Directory module, and so on), but more discussions need to happen and this will take more time. - -I recommend the third option because given the current issues with alias hijacking and with no support for disambiguation, it seems to be the best solution for now (from my perspective at least).  If you have come up with other alternatives that resolve these issues, please share them with the community so that this improves going forward. - -Hope this helps, - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[Essential PowerShell](http://technorati.com/tags/Essential+PowerShell),[alias](http://technorati.com/tags/alias) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/738/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/738/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=738&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2012-01-24-powerwf-and-powerse-2-7-are-now-available.md b/content/articles/2012-01-24-powerwf-and-powerse-2-7-are-now-available.md deleted file mode 100644 index f76753d9f..000000000 --- a/content/articles/2012-01-24-powerwf-and-powerse-2-7-are-now-available.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: PowerWF and PowerSE 2.7 are now available -authors: - - Kirk Munro -date: "2012-01-24T17:44:30+00:00" -aliases: - - /2012/01/powerwf-and-powerse-2-7-are-now-available/ ---- - -This morning [PowerWF][1] and [PowerSE][2] 2.7 were released to the web and they can now be downloaded from [http://www.powerwf.com][3].  These releases offer a lot of new value to PowerWF and PowerSE users, as follows: - -#### PowerWF 2.7 Highlights - -**New Start Page with New Workflows** - -The start page in PowerWF has been completely redesigned to provide immediate value out of the box for PowerWF customers.  The new design highlights the Workflow Library that is included with PowerWF, allowing customers to play workflows in the library without opening a workflow or script document.  Users can also customize the workflows on the start page and add their own groups of workflows for easier runbook automation.  This immediate out of the box value is included for PowerWF customers to allow them to leverage the power of Workflows and PowerShell in their environments without requiring any knowledge of PowerShell or Workflows. - -**New Management Packs for System Center Service Manager (SCSM)** - -PowerWF for Service Manager has always included several useful management packs for SCSM in the product.  In this release, even more management packs for SCSM have been added.  Now, with a click of a button you can deploy management packs that automatically close resolved incidents, expire inactive problem announcements, cancel pending activities for closed change requests, identify problems from incident trends, notify incident authors about unresolved incidents, and get SCSM statistics.  These management packs are only available for licensed users of PowerWF for Service Manager. - -**Improved Toolbox Search** - -The search engine in the Activity toolbox just got better!  Now you can search using command names or keywords and PowerWF will return the best matches based on the terms you provided.  This includes searching with keywords that are only referenced in activity documentation and not in the command name itself.  For example, if you"™re a VMware administrator, simply entering "vMotion" into the search box will reveal the MoveVM activity that is necessary to perform vMotion tasks. - -**Product-Specific Profile Support** - -PowerWF now uses its own product-specific profile support, and it updates the $profile variable to include the paths to each of the relevant profiles that you use. By default the PowerWF profile dot-sources the native PowerShell console profile, however you can change this behaviour as required by simply modifying the profile yourself in PowerSE. - -#### PowerSE 2.7 Highlights - -**Easier Breakpoint Management** - -Breakpoint management in PowerSE just got a lot easier.  PowerSE now includes a Breakpoints pane to allow you to see all breakpoints you have set in your scripting environment, and you can now manage breakpoints using the breakpoint cmdlets and see the breakpoints you have created in the Breakpoints pane.  This gives you easy creation of line breakpoints using the Toggle Breakpoint feature or command and variable breakpoints using the Set-PSBreakpoint cmdlet (or sbp alias for short). - -**Breakpoints Preserved Across Sessions** - -Breakpoints are now automatically preserved across sessions, allowing you to continue debugging your scripts from one session to the next.  They are also preserved when you close a file, so you won"™t have to reset breakpoints each time you return to a script you were working on.  You can still remove breakpoints of course, using the Toggle Breakpoint feature or the Remove-PSBreakpoint cmdlet. - -**Improved Help Search** - -PowerShell help topic files are now included in the help search pane, allowing you to search for help for integral keywords like if or foreach, or for topics like "Advanced functions", or you can learn more about remoting by searching for "Remote".  Also, if no results are found when you search, PowerSE will now include a keyword search in command descriptions to allow for users to discover commands using related terms, such as "vMotion". - -**Product-Specific Profile Support** - -PowerSE now uses its own product-specific profile support, and it updates the $profile variable to include the paths to each of the relevant profiles that you use.  By default the PowerSE profile dot-sources the native PowerShell console profile, however you can change this behaviour as required by simply modifying the profile yourself in PowerSE. - -#### And that"™s not all! - -This shows you a few of the highlights of this release, but of course there were plenty of bug fixes, some performance improvements, and a few other minor enhancements that were included as well.  Whether you"™re a current PowerWF or PowerSE customer, or someone who is looking for great tools for working with PowerShell, Workflow, and Management Packs, I strongly encourage you to give this release a try and let us know what you think. - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerWF](http://technorati.com/tags/PowerWF),[PowerSE](http://technorati.com/tags/PowerSE),[SCSM](http://technorati.com/tags/SCSM),[management pack](http://technorati.com/tags/management+pack),[workflow](http://technorati.com/tags/workflow) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/747/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/747/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=747&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://powerwf.com/products/powerwf.aspx - [2]: http://powerwf.com/products/powerse.aspx - [3]: http://www.powerwf.com/ diff --git a/content/articles/2012-01-25-powerse-2-7-kb-powershell-profile-does-not-load-on-startup.md b/content/articles/2012-01-25-powerse-2-7-kb-powershell-profile-does-not-load-on-startup.md deleted file mode 100644 index 3e32c679d..000000000 --- a/content/articles/2012-01-25-powerse-2-7-kb-powershell-profile-does-not-load-on-startup.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: "PowerSE 2.7 KB: PowerShell profile does not load on startup" -authors: - - Kirk Munro -date: "2012-01-25T19:01:59+00:00" -aliases: - - /2012/01/powerse-2-7-kb-powershell-profile-does-not-load-on-startup/ ---- - -Note: This blog post refers to an issue identified in PowerSE 2.7.0. It has been corrected in PowerSE 2.7.1, which is now available. - -With the release we published yesterday, both [PowerSE][1] and [PowerWF][2] received a new feature: product-specific profiles.  This feature allows you to have profile scripts that you only want run in PowerSE or PowerWF run there so that you don"™t have to use if statements to check the host name in your profile scripts.  With this feature we also created the initial PowerSE and PowerWF profile scripts such that they dot-source the native PowerShell profile script by default so that what runs in PowerShell also runs in PowerSE. - -Unfortunately there is one small detail that was left out of the PowerSE installer for this feature: the installation of the initial PowerSE-specific profile. As a result, if you download PowerSE 2.7, your PowerShell profile won"™t run right away.  Fortunately the fix is simple.  All you need to do is invoke this script from inside PowerSE 2.7: - -> if (-not (Test-Path -LiteralPath $profile)) { ->     Set-Content -Path $profile -Value @' -> if (Test-Path -LiteralPath $profile.CurrentUserPowerShellHost) { ->     . $profile.CurrentUserPowerShellHost -> } -> '@ -> } - -Once you have run that script, your PowerSE profile will exist and it will be defined to load your PowerShell profile.  Restart PowerSE 2.7 and you"™ll have your PowerShell profile loaded by default again. - -Note that this does not apply to PowerWF users, the profile scripts were added correctly to the installer for that release. - -My apologies for the inconvenience.  We hope to have this resolved in the product itself very soon.  In the meantime this short script should work around the issue for you. - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerSE](http://technorati.com/tags/PowerSE),[KB](http://technorati.com/tags/KB),[profile](http://technorati.com/tags/profile) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/750/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/750/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=750&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://powerwf.com/products/powerse.aspx - [2]: http://powerwf.com/products/powerwf.aspx diff --git a/content/articles/2012-03-04-powershell-v3-beta-better-ntfs-alternate-data-stream-handling.md b/content/articles/2012-03-04-powershell-v3-beta-better-ntfs-alternate-data-stream-handling.md deleted file mode 100644 index d3b2124ca..000000000 --- a/content/articles/2012-03-04-powershell-v3-beta-better-ntfs-alternate-data-stream-handling.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: "PowerShell V3 Beta\"“Better NTFS Alternate Data Stream Handling" -authors: - - Keith Hill -date: "2012-03-05T04:37:08+00:00" -aliases: - - /2012/03/powershell-v3-beta-better-ntfs-alternate-data-stream-handling/ ---- - -One of the many new features in Windows PowerShell V3 is better support for alternate data streams (ADS) in NTFS files.  ADS allows an NTFS file to contain additional data that is not part of the "main" stream i.e. the file"™s primary content.  Tools like Windows Explorer or even PowerShell"™s **Get-ChildItem** cmdlet don"™t show these extra data streams.  In fact the file size reported by both of these tools does not take into account the data stored in the alternate streams.  For more information on ADS check out the [NTFS topic on Wikipedia][1]. - -A common use of ADS is to indicate that a file downloaded by Internet Explorer came from the Internet Zone.  Files coming from the internet could be potentially dangerous.  Various applications check for this stream and if it is present and contains information indicating the "Internet" zone, they might block access or in the case of PowerShell"™s _RemoteSigned_ execution policy, only execute the file if it is signed. - -Previous to PowerShell V3, you could use the [SysInternals streams.exe tool][2] to list and remove alternate data streams.  A common application of this tool was to delete all streams in a file.  That was a rather crude but effective way to "unblock" a file downloaded from the internet. - -This is also one area where CMD.EXE was one up on PowerShell.  From a CMD prompt, you can use "dir /r" to list files and their alternate data streams.  You can also create/overwrite streams with CMD.exe like so " -echo.>test.exe:Zone.Identifier -" which would "unblock" an internet zone file.  You can also unblock such files by selecting the file"™s Properties in Windows Explorer and pressing the "Unblock" button at the bottom right of the general tab.  However this is not convenient if you need to do this to dozens or hundreds of files.  With the [PowerShell Community Extensions][3] 2.0, we introduced an **Unblock-File** cmdlet that would delete only the stream named Zone.Identifier.  That is the stream that Internet Explorer creates when you download a file.  Fortunately with PowerShell V3, we can obsolete that cmdlet because V3 offers several ways to manage alternate data streams. - -First up is PowerShell"™s own **Unblock-File** cmdlet which, like the PSCX equivalent, is quite easy to use: - - -`C:\PS> Get-Command Unblock-File -All -Capability Name   ModuleName ----------- ---- ---------- -Cmdlet Unblock-File Pscx -Cmdlet Unblock-File Microsoft.PowerShell.Utility -C:\PS> Get-ChildItem *.ps1 | Microsoft.PowerShell.Utility\Unblock-File -`Note that you wouldn"™t normally need to prefix **Unblock-File** with _Microsoft.PowerShell.Utility_.  In this case, I wanted to make sure I was using the PowerShell **Unblock-File** and not the one from PSCX. - -In addition to using the big gun of **Unblock-File** you can also manipulate streams with the following cmdlets: - - -`C:\PS> Get-Command -ParameterName Stream | Where ModuleName -match 'Microsoft.*?Manag' -Capability Name ModuleName ----------- ---- ---------- -Cmdlet Add-Content Microsoft.PowerShell.Management -Cmdlet Clear-Content Microsoft.PowerShell.Management -Cmdlet Get-Content Microsoft.PowerShell.Management -Cmdlet Get-Item Microsoft.PowerShell.Management -Cmdlet Remove-Item Microsoft.PowerShell.Management -Cmdlet Set-Content Microsoft.PowerShell.Management -`Here is how you can list all the alternate data streams in a file and the contents of any particular data stream: - - -`C:\PS> Get-Item .\Pscx-2.0.0.1.zip -Stream * - FileName: C:\Users\Keith\Downloads\Pscx-2.0.0.1.zip -Stream Length ------- ------ -:$DATA 1799345 -Zone.Identifier 26 -C:\PS> Get-Content .\Pscx-2.0.0.1.zip -Stream Zone.Identifier -[ZoneTransfer] -ZoneId=3 -`Note that **:$DATA** is the main stream i.e. the file"™s primary contents. - -If you need to clear the contents of a data stream without removing the stream completely, you can use **Clear-Content"™s "“Stream** parameter e.g.: - - -`C:\PS> Clear-Content .\Pscx-2.0.0.1.zip -Stream Zone.Identifier -C:\PS> Get-Content .\Pscx-2.0.0.1.zip -Stream Zone.Identifier -C:\PS> Get-Item .\Pscx-2.0.0.1.zip -Stream * - FileName: C:\Users\Keith\Downloads\Pscx-2.0.0.1.zip -Stream Length ------- ------ -:$DATA 1799345 -Zone.Identifier 0 -`To completely remove the stream, use **Remove-Item"™s "“Stream** parameter e.g.: - - -`C:\PS> Remove-Item .\Pscx-2.0.0.1.zip -Stream Zone.Identifier -C:\PS> Get-Item .\Pscx-2.0.0.1.zip -Stream * - FileName: C:\Users\Keith\Downloads\Pscx-2.0.0.1.zip -Stream Length ------- ------ -:$DATA 1799345 -`And if you need to create an alternate stream, you can do so using **Add-Content"™s "“Stream** parameter e.g.: - - -`C:\PS> Add-Content Pscx-2.0.0.1.zip -Str Zone.Identifier "[ZoneTransfer]`r`nZoneId=3" -C:\PS> Get-Item Pscx-2.0.0.1.zip -Stream * - FileName: C:\Users\Keith\Downloads\Pscx-2.0.0.1.zip -Stream Length ------- ------ -:$DATA 1799345 -Zone.Identifier 26 -C:\PS> Get-Content .\Pscx-2.0.0.1.zip -Stream Zone.Identifier -[ZoneTransfer] -ZoneId=3 -`Finally, **Set-Content "“Stream** can be used to modify the content of an existing stream. - -The new  **Unblock-File** cmdlet as well as the upgrades to the ***-Content** and **Get/Remove-Item**  cmdlets are a very welcome enhancement to PowerShell"™s file handling capabilities. - -[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/248/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/248/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=248&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) - - [1]: http://en.wikipedia.org/wiki/NTFS#Alternate_data_streams_.28ADS.29 - [2]: http://technet.microsoft.com/en-us/sysinternals/bb897440 - [3]: http://pscx.codeplex.com/ diff --git a/content/articles/2012-03-06-windows-8reimagined.md b/content/articles/2012-03-06-windows-8reimagined.md deleted file mode 100644 index e37fa9197..000000000 --- a/content/articles/2012-03-06-windows-8reimagined.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "Windows 8\"¦reimagined?" -authors: - - Kirk Munro -date: "2012-03-07T03:30:38+00:00" -aliases: - - /2012/03/windows-8reimagined/ ---- - -The series of releases of client versions of Microsoft Windows seems to suffer all too much the same fate as Star Trek movies have in the past.  This concept has already been discussed before, and there are even blog posts about it, such as [Ewan Spence"™s comparison of Windows releases between versions 3.0 and Windows 7 to the Star Trek movies from "The Motion Picture" to "First Contact"][1].  Windows 7 did indeed end up being a very impressive version of Windows, much like First Contact was a very impressive movie in the Star Trek franchise, and now we"™re watching with anticipation since Windows 8 Consumer Preview is now available and Microsoft is marching steadfast towards its release. - -Following the analogy that Windows releases are like Star Trek movie releases then, and that the success of Windows 7 was analogous to that of Star Trek: First Contact, it would seem that next two releases of Windows should be pretty much flops.  Star Trek: Insurrection and Star Trek: Nemesis were both pretty forgettable films, offering very little to get excited about.  Maybe Microsoft has picked up on these intertwined fates, inspiring them to try to skip over these failures by fast forwarding to the very successful "reboot" of the Star Trek movie franchise by picking coming out with what they call a "reimagined" Windows.  Did they succeed in making this jump?  Is Windows 8 a truly inspiring, innovative, reimagining of the Windows OS? - -Only time will tell what the outcome will be.  First impressions really count though.  Today, based on experiences with the Windows 8 Consumer Preview, Windows 8 appears as if it will show off very well on a tablet device, where the new UI makes more sense.  For business users like me though that rely heavily on their keyboard and mouse to get work done, I"™m really afraid that they"™ve gone and hidden all of the great features it includes behind a completely different UI paradigm that just doesn"™t jive with the needs of a business worker.  It may work well for casual computing at home, but so far it looks to me like businesses might want to consider skipping this one for their non-touch devices like laptops and desktops, at least until they can reconfigure it more like Windows 7 by removing the whimsical metro UI elements such as tiles, charms and "magic" corners. - -What do you think?  Is the reimagined Windows living up to your expectations?  Do you think the new metro UI has a place in business computing?  Or do you wish you had your start menu back? - -I"™m curious if I"™m alone in my perspective or not.  My gut tells me I"™m not going to be alone in this perspective.  Sound off in the comments and let me know what you think. - -Kirk out. - - - Technorati Tags: [Windows 8](http://technorati.com/tags/Windows+8),[Poshoholic](http://technorati.com/tags/Poshoholic) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/761/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/761/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=761&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://www.ewanspence.com/blog/2009/01/08/why-windows-7-reminds-me-of-the-star-trek-movies/ diff --git a/content/articles/2012-03-29-this-april-is-learn-more-about-powershell-month-with-the-2012-scripting-games-the-2012-microsoft-management-summit-and-the-2012-north-american-powershell-deep-dive.md b/content/articles/2012-03-29-this-april-is-learn-more-about-powershell-month-with-the-2012-scripting-games-the-2012-microsoft-management-summit-and-the-2012-north-american-powershell-deep-dive.md deleted file mode 100644 index 98320c24c..000000000 --- a/content/articles/2012-03-29-this-april-is-learn-more-about-powershell-month-with-the-2012-scripting-games-the-2012-microsoft-management-summit-and-the-2012-north-american-powershell-deep-dive.md +++ /dev/null @@ -1,913 +0,0 @@ ---- -title: "This April is \"Learn More About PowerShell\" Month with the 2012 Scripting Games, the 2012 Microsoft Management Summit, and the 2012 North American PowerShell Deep Dive!" -authors: - - Kirk Munro -date: "2012-03-29T13:00:00+00:00" -aliases: - - /2012/03/this-april-is-learn-more-about-powershell-month-with-the-2012-scripting-games-the-2012-microsoft-management-summit-and-the-2012-north-american-powershell-deep-dive/ ---- - -It"™s hard to believe that April is almost here already.  Last week we had record high temperatures reaching 31°C (that"™s 87.8°F for those of you living south of the border), and the night before last it was -16°C (or 3.2°F).  What wonderful consistency.  Maybe that"™s why I like PowerShell so much, because it provides great consistency that just isn"™t apparent in so many other places in life (that"™s a swell tagline: "Use PowerShell, because it"™s more consistent than the weather"![Smile](http://kirkmunro.files.wordpress.com/2012/03/wlemoticon-smile.png?w=595) ).  Anyway, I digress"¦back to the topic at hand. - -This April is **"Learn More About PowerShell" month**!  Ok, so it"™s not official (it"™s not like I"™m a mayor or anything), but with all of the opportunities to learn about Windows PowerShell in April, it seems like a fitting title, so I"™m declaring it that anyway.  Now, where to begin. - -#### 2012 Scripting Games - -The first Monday in April (that"™s April 2, Monday next week) marks the official opening of the [2012 Scripting Games][1]!  The Scripting Games are a great event, because they provide opportunities for beginner and advanced scripters alike to learn more about Windows PowerShell.  There are beginner and advanced divisions, with 10 events in each division.  You participate by visiting the [official 2012 Scripting Games page][1] starting on Monday April 2 to see the events that are published so far, and you have one week to submit a solution by publishing a script to the [2012 Scripting Games page on PoshCode][2] for each event that you want to enter.  Note that at the time of this writing, the 2012 Scripting Games page on PoshCode shows information related to the 2011 Scripting Games, so for now just put a reminder in your calendar to check these two links out on April 2. - -Once you submit a solution, you can move on to the next event if it is available.  All solutions will be judged by a great panel of expert judges, and once the events close there will be expert commentaries published so that you can learn how different community experts solve these problems with PowerShell scripts.  Watch for my expert commentary to Beginner Event 3 once that event has closed for submissions. - -The 2012 Scripting Games will run until April 13, 2012, although you"™ll have 7 days from the day that each event is posted, so there will still be some time to compete and get your entries in.  There are many prizes to be won, including grand prizes of full conference passes for [TechEd North America 2012][3] (another great opportunity to learn more about PowerShell), software licenses for products like [PowerWF][4], and more!  Also, don"™t delay in getting your entries in, because you"™ll barely have time once you"™re done to pack your bags for the [2012 Microsoft Management Summit][5] in Las Vegas if you"™re going to that conference! - -#### 2012 Microsoft Management Summit - -In just 2½ weeks from now, the [2012 Microsoft Management Summit][5] (MMS) will start, and it"™s going to be an amazing conference this year.  With the upcoming [Microsoft System Center 2012][6] release, and with [Windows 8 currently available as a Consumer Preview][7] in the client and the server varieties (both of which include the pre-release version of PowerShell version 3), there are plenty of new opportunities to scale up your PowerShell prowess and scale out your scripting capabilities while learning how to get the most of these new products and platforms by leveraging PowerShell automation. - -At the MMS 2012 conference, there are a total of 13 breakout sessions, 3 instructor led labs, and 5 self-paced labs where you can learn more about Windows PowerShell.  There is also a PowerShell booth that will be staffed by members of the Windows PowerShell team and a few PowerShell MVPs.  I"™ll be working the PowerShell booth as will [Aleksandar Nikolic][8], so please come see us and ask questions if you have any.  There will also be other booths for products like the [Microsoft System Center 2012][6] release, which comes with even more PowerShell capabilities than before.  Additionally, there are many companies in the Expo hall that leverage PowerShell in their products and/or provide cmdlets to facilitate automation in their environments, such as NetApp, Veeam, Splunk and [Devfarm Software][9] (the company that I work for) to name but a few.  I"™ll be working the Devfarm booth when I"™m not in the PowerShell booth, so if you look around a little you"™ll have a good chance of finding me. - -If you"™re going to MMS 2012, and you want to learn more about PowerShell, make sure you take advantage of these resources while you"™re there.  The knowledge passed on to you through one breakout session, lab, or discussion with someone in the learning center or expo hall takes many, many hours to put together, and getting that knowledge first hand can be a huge timesaver for you in the long run! - -#### PowerShell-related Content at MMS 2012 - -The following list identifies all of the PowerShell-related sessions and resources that have been announced so far for the MMS 2012 conference for your convenience.  To get the most value out of your conference, make sure you add the sessions, labs, and other items of interest to your schedule so that you don"™t miss out on these great learning opportunities.  I have highlighted the sessions most interesting to me in bold in the list below. - - - - - **Type and Level** - - - - **Title** - - - - **Speaker(s)** - - - - **Coordinates** - - - - - - **Instructor-led Lab -300/Advanced** - - - - [SV-IL306 Introduction to Windows PowerShell Fundamentals](http://www.mms-2012.com/topic/details/SV-IL306) - - - - [**Dan Reger**](http://www.mms-2012.com/Speaker/Details/Dan_Reger) - - - - **Monday, April 16, -12:00 PM to 1:15 PM -Venetian Ballroom A** - - - - - - Breakout Session -300/Advanced - - - - [SV-B317 Top 10 Things Every Systems Admin Needs to Know about Windows Server 2008 R2 SP1](http://www.mms-2012.com/topic/details/SV-B317) - - - - [Dan Stolts](http://www.mms-2012.com/Speaker/Details/Dan_Stolts) - - - - Monday, April 16, -3:00 PM to 4:15 PM -Venetian Ballroom G - - - - - - **Instructor-led Lab -300/Advanced** - - - - [**SV-IL307 What"™s New in Windows PowerShell 3.0**](http://www.mms-2012.com/topic/details/SV-IL307) - - - - [**Lucio Silveira**](http://www.mms-2012.com/Speaker/Details/Lucio_Silveira) - - - - **Monday, April 16, -4:30 PM to 5:45 PM -Venetian Ballroom A** - - - - - - **Breakout Session -300/Advanced** - - - - [**CD-B334 Understanding Console Extension for Configuration Manager 2007 and 2012**](http://www.mms-2012.com/topic/details/CD-B334) - - - - [**Matthew Hudson**](http://www.mms-2012.com/Speaker/Details/Matthew%20_Hudson) - - - - **Tuesday, April 17, -10:15 AM to 11:30 AM -Venetian Ballroom G** - - - - - - **Breakout Session -400/Expert** - - - - [**CD-B406 Configuration Manager 2012 and PowerShell: Better Together**](http://www.mms-2012.com/topic/details/CD-B406) - - - - [**Greg Ramsey**](http://www.mms-2012.com/Speaker/Details/Greg_Ramsey) - - - - **Tuesday, April 17, -11:45 AM to 1:00 PM -Venetian Ballroom G** - - - - - - Instructor-led Lab -300/Advanced - - - - [SV-IL304 Managing Windows Server "8" with Server Manager and PowerShell 3.0](http://www.mms-2012.com/topic/details/SV-IL304) - - - - [Michael Leworthy](http://www.mms-2012.com/Speaker/Details/Michael_Leworthy) - - - - Tuesday, April 17, -11:45 AM to 1:00 PM -Venetian Ballroom A - - - - - - Instructor-led Lab -300/Advanced - - - - [SV-IL307 What"™s New in Windows PowerShell 3.0](http://www.mms-2012.com/topic/details/SV-IL307) - - - - [Lucio Silveira](http://www.mms-2012.com/Speaker/Details/Lucio_Silveira) - - - - Tuesday, April 17, -2:15PM to 3:30PM -Venetian Ballroom A - - - - - - Breakout Session -300/Advanced - - - - [SV-B319 Windows PowerShell for Beginners](http://www.mms-2012.com/topic/details/SV-B319) - - - - [Jeffrey Snover](http://www.mms-2012.com/Speaker/Details/Jeffrey_Snover), -[Travis Jones](http://www.mms-2012.com/Speaker/Details/Travis_Jones) - - - - Tuesday, April 17, -4:00 PM to 5:15 PM -Murano 3301 - - - - - - **Breakout Session -200/Intermediate** - - - - [**SV-B205 Overview of Server Management Technologies in Windows Server "8"**](http://www.mms-2012.com/topic/details/SV-B205) - - - - [**Erin Chapple**](http://www.mms-2012.com/Speaker/Details/Erin_Chapple)**, -**[**Jeffrey Snover**](http://www.mms-2012.com/Speaker/Details/Jeffrey_Snover) - - - - **Wednesday, April 18, -10:15 AM to 11:30 AM -Murano 3301** - - - - - - Breakout Session -200/Intermediate - - - - [SV-B291 Manage Cisco UCS with System Center 2012 and PowerShell](http://www.mms-2012.com/topic/details/SV-B291) - - - - [Chakri Avala](http://www.mms-2012.com/Speaker/Details/Chakri_Avala) - - - - Wednesday, April 18, -2:15 PM to 3:30 PM -Titian 2203 - - - - - - Instructor-led Lab -300/Advanced - - - - [SV-IL306 Introduction to Windows PowerShell Fundamentals](http://www.mms-2012.com/topic/details/SV-IL306) - - - - [Dan Reger](http://www.mms-2012.com/Speaker/Details/Dan_Reger) - - - - Wednesday, April 18, -2:15 PM to 3:30 PM -Venetian Ballroom A - - - - - - Breakout Session -300/Advanced - - - - [SV-B313 Windows Server 2008 R2 Hyper-V FAQs, Tips, and Tricks](http://www.mms-2012.com/topic/details/SV-B313) - - - - [Janssen Jones](http://www.mms-2012.com/Speaker/Details/Janssen_Jones) - - - - Wednesday, April 18, -4:00 PM to 5:15 PM -Murano 3301 - - - - - - **Instructor-led Lab -300/Advanced** - - - - [**SV-IL304 Managing Windows Server "8" with Server Manager and PowerShell 3.0**](http://www.mms-2012.com/topic/details/SV-IL304) - - - - [**Michael Leworthy**](http://www.mms-2012.com/Speaker/Details/Michael_Leworthy) - - - - **Thursday, April 19, -8:30 AM to 9:45 AM -Venetian Ballroom A** - - - - - - **Breakout Session -400/Expert** - - - - [**SV-B405 Advanced Automation Using Windows PowerShell 2.0**](http://www.mms-2012.com/topic/details/SV-B405) - - - - [**Jeffrey Snover**](http://www.mms-2012.com/Speaker/Details/Jeffrey_Snover)**, -**[**Travis Jones**](http://www.mms-2012.com/Speaker/Details/Travis_Jones) - - - - **Thursday, April 19, -10:15 AM to 11:30 AM -Veronese 2401** - - - - - - Breakout Session -300/Advanced - - - - [AM-B315 SharePoint as a Workload in a Private Cloud](http://www.mms-2012.com/topic/details/AM-B315) - - - - [Adam Hall](http://www.mms-2012.com/speaker/details/Adam_Hall), -[Michael Frank](http://www.mms-2012.com/speaker/details/Michael_Frank) - - - - Thursday, April 19, -10:15 AM to 11:30 AM -Titian 2206 - - - - - - Breakout Session -300/Advanced - - - - [SV-B312 Don Jones"™ Windows PowerShell Crash Course](http://www.mms-2012.com/topic/details/SV-B312) - - - - [Don Jones](http://www.mms-2012.com/Speaker/Details/Don_Jones) - - - - Thursday, April 19, -11:45 AM to 1:00 PM -Venetian Ballroom G - - - - - - Breakout Session -300/Advanced - - - - [SV-B315 Managing Group Policy Using PowerShell](http://www.mms-2012.com/topic/details/SV-B315) - - - - [Darren Mar-Elia](http://www.mms-2012.com/Speaker/Details/Darren_Mar-Elia) - - - - Thursday, April 19, -11:45 AM to 1:00 PM -Murano 3301 - - - - - - **Breakout Session -300/Advanced** - - - - [**FI-B322 Virtual Machine Manager 2012: PowerShell is your Friend, and Here"™s Why**](http://www.mms-2012.com/topic/details/FI-B322) - - - - [**Hector Linares**](http://www.mms-2012.com/Speaker/Details/Hector_Linares)**, -**[**Susan Hill**](http://www.mms-2012.com/Speaker/Details/Susan_Hill) - - - - **Thursday, April 19, -11:45 AM to 1:00 PM -Titian 2206** - - - - - - Breakout Session -400/Expert - - - - [SV-B406 PowerShell Remoting in Depth](http://www.mms-2012.com/topic/details/SV-B406) - - - - [Don Jones](http://www.mms-2012.com/Speaker/Details/Don_Jones) - - - - Friday, April 20, -8:30 AM to 9:45 AM -Bellini 2001 - - - - - - Hands-on lab -300/Advanced - - - - [SV-L302 Active Directory Deployment and Management Enhancements](http://www.mms-2012.com/topic/details/SV-L302) - - - - N/A - - - - Hands-on lab, available in the HOL area - - - - - - **Hands-on lab -300/Advanced** - - - - [**SV-L304 Managing Windows Server "8" with Server Manager and Windows PowerShell 3.0**](http://www.mms-2012.com/topic/details/SV-L304) - - - - **N/A** - - - - **Hands-on lab, available in the HOL area** - - - - - - Hands-on lab -300/Advanced - - - - [SV-L305 Managing Network Infrastructure with Windows Server "8"](http://www.mms-2012.com/topic/details/SV-L305) - - - - N/A - - - - Hands-on lab, available in the HOL area - - - - - - Hands-on lab -300/Advanced - - - - [SV-L306 Introduction to Windows PowerShell Fundamentals](http://www.mms-2012.com/topic/details/SV-L306) - - - - N/A - - - - Hands-on lab, available in the HOL area - - - - - - Hands-on lab -300/Advanced - - - - [SV-L307 What"™s New in Windows PowerShell 3.0](http://www.mms-2012.com/topic/details/SV-L307) - - - - N/A - - - - Hands-on lab, available in the HOL area - - - - -#### 2012 North America PowerShell Deep Dive - -As if all of these PowerShell learning opportunities weren"™t already enough, there"™s even more you can do in **"Learn More About PowerShell" month**.  At the end of April, a week after MMS is finished, the 2nd annual North American [2012 PowerShell Deep Dive][10] conference will start.  This conference is second to none when it comes to learning more about PowerShell.  The sessions are fantastic, and the conversations perhaps even more so.  What makes this conference unique is the focus on shorter, 35-minute sessions that quickly drill into a specific topic and give you a ton of information on that topic.  There are also short, 5-minute lightning rounds which give speakers an opportunity to quickly show off one of their favorite aspects of PowerShell.  The 35-minute format, 5-minute lightning rounds, and the depth of the content in these sessions are unique to this conference, and you won"™t get the same value for PowerShell content anywhere else.  Add to that the evening script club-style events and it"™s really an experience that is second to none.  I highly recommend you consider attending if you"™re already using PowerShell and want to take your skills to new heights.  You can still register for this great event on the [registration page for The Experts Conference (TEC)][11]. - -This conference takes place in sunny San Diego from April 29th until May 2nd, and it gives you 3 days of 100% PowerShell content.  I"™m fortunate enough to be attending this conference as well, and I"™ll be giving sessions about proxy functions and about WMI and PowerShell.  If you do attend, please make a point to say hello and introduce yourself if I haven"™t met you already. - -Here"™s a quick look at the content that is being presented at the PowerShell Deep Dive this year: - - - - - **Title** - - - - **Speaker(s)** - - - - **Date** - - - - - - FIM PowerShell Workshop - - - - Craig Martin - - - - Sunday, April 29, 2012 - - - - - - Keynote - - - - Jeffrey Snover - - - - Monday, April 30, 2012 -8:00 AM to 10:00 AM - - - - - - When old API"™s save the day (pinvoke and native windows dlls) - - - - Tome Tanasovski - - - - Monday, April 30, 2012 -10:30 AM to 11:05 AM - - - - - - Get Your Game On! Leveraging Proxy Functions in Windows PowerShell - - - - Kirk "Poshoholic" Munro - - - - Monday, April 30, 2012 -11:10 AM to 11:45 AM - - - - - - Using Splunk Reskit with PowerShell to revolutionize your script process - - - - Brandon Shell - - - - Monday, April 30, 2012 -1:00 PM to 2:15 PM - - - - - - Lightning Round - - - - Determined at event - - - - Monday, April 30, 2012 -2:20 PM to 3:05 PM - - - - - - Remoting Improvement in Windows PowerShell V3 - - - - Krishna Vutukuri - - - - Monday, April 30, 2012 -3:10 PM to 3:45 PM - - - - - - New Hyper-V PowerShell Module in Windows Server 8 - - - - Adam Driscoll - - - - Monday, April 30, 2012 -4:15 PM to 5:30 PM - - - - - - Formatting in Windows PowerShell - - - - Jim Truher - - - - Tuesday, May 1, 2012 -8:00 AM to 8:35 AM - - - - - - PowerShell and WMI: A Love Story - - - - Kirk "Poshoholic" Munro - - - - Tuesday, May 1, 2012 -8:40 AM to 9:15 AM - - - - - - PowerShell as a Web Language - - - - James Brundage - - - - Tuesday, May 1, 2012 -9:45 AM to 11:00 AM - - - - - - PowerShell V3 in Production - - - - Steve Murawski - - - - Tuesday, May 1, 2012 -11:15 AM to 11:50 AM - - - - - - Lightning Round - - - - Determined at event - - - - Tuesday, May 1, 2012 -11:55 AM to 12:30 AM - - - - - - How Microsoft Uses PowerShell for Testing Automation and Deployment of FIM - - - - Kinnon McDonell - - - - Tuesday, May 1, 2012 -1:45 PM to 3:00 PM - - - - - - Job Types in Windows PowerShell 3.0 - - - - Travis Jones - - - - Tuesday, May 1, 2012 -3:15 PM to 3:50 PM - - - - - - Creating a Corporate PowerShell Module - - - - Tome Tanasovski - - - - Tuesday, May 1, 2012 -3:55 PM to 4:30 PM - - - - - - Cmdlets over Objects (CDXML) - - - - Richard Siddaway - - - - Wednesday, May 2, 2012 -8:00 AM to 8:35 AM - - - - - - Build your own remoting endpoint with PowerShell V3 - - - - Aleksandar Nikolic - - - - Wednesday, May 2, 2012 -8:40 AM to 9:15 AM - - - - - - PowerShell Workflows and the Windows Workflow Foundation for the IT Pro - - - - Steve Murawski - - - - Wednesday, May 2, 2012 -9:45 AM to 11:00 AM - - - - - - Incorporating Microsoft Office into Windows PowerShell - - - - Jeffery Hicks - - - - Wednesday, May 2, 2012 -11:15 AM to 11:50 AM - - - - - - TBD - - - - Bruce Payette - - - - Wednesday, May 2, 2012 -11:55 AM to 12:30 PM - - - - -Wow, that"™s a lot of PowerShell!  With all of these opportunities, whether you"™re trying to learn PowerShell without incurring a huge expense, or travelling to conferences to learn more about technologies there, there"™s definitely something for everyone in what looks to be an awesome **"Learn More About PowerShell" month**. - -Good luck, wherever your learning adventures take you! - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[Scripting Games](http://technorati.com/tags/Scripting+Games),[MMS](http://technorati.com/tags/MMS),[PowerShell Deep Dive](http://technorati.com/tags/PowerShell+Deep+Dive),[System Center 2012](http://technorati.com/tags/System+Center+2012),[Devfarm](http://technorati.com/tags/Devfarm) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/765/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/765/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=765&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://blogs.technet.com/b/heyscriptingguy/archive/2012/02/04/the-2012-windows-powershell-scripting-games-all-links-on-one-page.aspx - [2]: http://2012sg.poshcode.org/ - [3]: http://northamerica.msteched.com/ - [4]: http://powerwf.com/products/powerwf.aspx - [5]: http://www.mms-2012.com/ - [6]: http://www.microsoft.com/systemcenter/ - [7]: http://windows.microsoft.com/en-US/windows-8/consumer-preview - [8]: http://powershellers.blogspot.ca/ - [9]: http://www.devfarm.com/ - [10]: http://www.theexpertsconference.com/us/2012/powershell-deep-dive/ - [11]: https://www.ustechsregister.com/TEC2012/RegistrationSelect.aspx diff --git a/content/articles/2012-04-29-powershell-v3-obsoleteattribute.md b/content/articles/2012-04-29-powershell-v3-obsoleteattribute.md deleted file mode 100644 index 6084ad95c..000000000 --- a/content/articles/2012-04-29-powershell-v3-obsoleteattribute.md +++ /dev/null @@ -1,159 +0,0 @@ ---- -title: "PowerShell V3 \"“ ObsoleteAttribute" -authors: - - Keith Hill -date: "2012-04-30T04:39:06+00:00" -aliases: - - /2012/04/powershell-v3-obsoleteattribute/ ---- - -PowerShell V3 now supports the ObsoleteAttribute for compiled cmdlets but unfortunately not advanced functions. This is handy to let your users know that a binary cmdlet will be going away in a future release of your binary module. - -As we work on PSCX 3.0 there are a few binary cmdlets that we will mark with this attribute to let you know to switch over to PowerShell"™s built-in equivalent before we eliminate the cmdlet completely in the next release. Here"™s a snippet that shows how to apply the ObsoleteAttribute in your source code: - - - -`1 - -[OutputType( - -typeof - -(MailMessage))] - - -2 - -[Cmdlet(VerbsCommunications.Send, PscxNouns.SmtpMail, - - -3 - - DefaultParameterSetName - -= - - - -" - -Authenticated - -" - -, - - -4 - - SupportsShouldProcess - -= - - - -true - -)] - - -5 - -[Obsolete( - -@" - -The PSCX\SendSmtpMail cmdlet is obsolete - -" - - - -+ - - - - -6 - - - -" - -and will removed in the next version of - -" - - - -+ - - - - -7 - - - -" - -PSCX. Use the built-in Send-MailMessage. - -" - -)] - - -8 - - - -public - - - -class - - SendSmtpMailCommand : PscxCmdlet - - -9 - -{ - - -` - - - - - The resulting of executing this cmdlet with PSCX v3 loaded is: - - - - - - -`C:\PS> Send-SmtpMail - -WARNING: The PSCX\SendSmtpMail cmdlet is obsolete and will removed in the next version of -PSCX. Use the built-in Send-MailMessage. - -`There is an ObsoleteAttribute constructor overload that takes a boolean that converts the warning to an error. I"™m not sure how useful that is but PowerShell does honor that setting and will generate a terminating error in this case: - - - -`C:\PS> Send-SmtpMail - -The PSCX\SendSmtpMail cmdlet is obsolete and will removed in the next version of PSCX. Use -the built-in Send-MailMessage. -At line:1 char:1 -+ Send-SmtpMail -+ ~~~~~~~~~~~~~ - + CategoryInfo : InvalidOperation: (Send-SmtpMail:String) [], RuntimeException - + FullyQualifiedErrorId : UseOfDeprecatedCmdlet - -`It"™s nice to see PowerShell honoring more of the .NET attributes "“ where it makes sense that is. - - - [![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/256/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/256/) ![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=256&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2012-06-02-looking-for-a-good-tech-conference-try-this.md b/content/articles/2012-06-02-looking-for-a-good-tech-conference-try-this.md deleted file mode 100644 index 651b78b43..000000000 --- a/content/articles/2012-06-02-looking-for-a-good-tech-conference-try-this.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Looking for a good tech conference? Try this. -authors: - - Don Jones -date: "2012-06-02T23:57:00+00:00" -aliases: - - /2012/06/looking-for-a-good-tech-conference-try-this/ ---- - -It's called [TechMentor][1]. The next one is in August, _at Microsoft campus._ Yup, in Redmond. The mothership. And, unlike larger shows (like TechEd), you won't be one of 15,000 people crammed into a convention center, fighting for lunch space and getting ignored by speakers. TechMentor's a more "boutique" event, with just a few hundred other IT professionals (and no developers - ew, cooties!). You'll get tons of one-on-one time with expert speakers (like me), and plenty of networking time with your colleagues. And smaller lines for lunches. - -And a trip to the Microsoft Company Store and Museum. Seriously, it'll be a good time. - -Use code TMSK6 when you register; that'll get you a $1495 registration price, with is the lowest price they offer on a full 5-day pass (which includes pre- and post-conference workshops). - -Prices go up June 13 and again on June 18, so don't linger too long on this decision - and I hope to see you there. - - -![](http://powershell.com/cs/aggbug.aspx?PostID=16854) - - [1]: http://techmentorevents.com/events/microsofthq/home.aspx?utm_source=AttendeeMktg&utm_medium=BannerAd&utm_campaign=TMSK6 diff --git a/content/articles/2012-06-03-final-outlines-for-the-v3-lunches-books.md b/content/articles/2012-06-03-final-outlines-for-the-v3-lunches-books.md deleted file mode 100644 index 6f31da92f..000000000 --- a/content/articles/2012-06-03-final-outlines-for-the-v3-lunches-books.md +++ /dev/null @@ -1,1705 +0,0 @@ ---- -title: "FInal Outlines for the v3 \"Lunches\" Books" -authors: - - Don Jones -date: "2012-06-03T13:35:00+00:00" -aliases: - - /2012/06/final-outlines-for-the-v3-lunches-books/ ---- - -1 -1095 -6247 -Concentrated Technology -52 -14 -7328 -14.0 -Normal - -false -false -false -EN-US -JA -X-NONE - -I wanted to get these posted for folks' reference. The books are proceeding apace, and now that PowerShell v3 is in Release Candidate, we're going to move forward with publication ASAP. - - - -**ToC -- "Learn Windows PowerShell 3 in a Month of Lunches"** - -1. -Before You Begin - -a. -Why You Can't Afford to Ignore PowerShell - -b. -Is This Book for You? - -c. -How to Use this Book - - -i. The -Main Chapters - - -ii. Hands-On -Labs - - -iii. Supplementary -Materials - - -iv. Further -Exploration - - -v. Above -and Beyond - -d. -Setting up Your Lab Environment - -e. -Installing Windows PowerShell - -f. -Online Resources - -g. -Being _Immediately -Effective_ with PowerShell - -2. -Meet PowerShell - -a. -Choose Your Weapon - -b. -The Console Window - -c. -The Integrated Scripting Environment - -d. -It's Typing Class All Over Again! - -e. -What Version is This? - -f. -Common Points of Confusion - -g. -**Lab** - -h. -**Further -Exploration** - -3. -Using the Help System - -a. -The Help System: How You Discover Commands - -b. -Updatable Help - -c. -Asking for Help - -d. -Using Help to Find Commands - -e. -Interpreting the Help - - -i. Parameter -Sets and Common Parameters - - -ii. Optional -and Mandatory Parameters - - -iii. Positional -Parameters - - -iv. Parameter -Values - - -v. Examples - -f. -Accessing "About" Topics - -g. -Accessing Online Help - -h. -**Lab** - -4. -Running Commands - -a. -Not Scripting: Just Running Commands - -b. -The Anatomy of a Command - -c. -The Cmdlet Naming Convention - -d. -Aliases: Nicknames for Commands - -e. -Taking Shortcuts - - -i. Truncating -Parameter Names - - -ii. Parameter -Name Aliases - - -iii. Positional -Parameters - -f. -Cheating, a Bit: Show-Command - -g. -Support for External Commands - -h. -Dealing With Errors - -i. -Common Points of Confusion - - -i. Typing -Cmdlet Names - - -ii. Typing -Parameters - -j. -**Lab** - -5. -Working with Providers - -a. -What are Providers? - -b. -How the File System is Organized - -c. -How the File System is Like Other Data Stores - -d. -Navigating the File System - -e. -Using Wildcards and Literal Paths - -f. -Working with Other Providers - -g. -**Lab** - -h. -**Further -Exploration** - -6. -The Pipeline: Connecting Commands - -a. -Connect One Command to Another: Less Work For -You! - -b. -Exporting to a CSV or XML File - -c. -Piping to a File or Printer - -d. -Converting to HTML - -e. -Using Cmdlets That Modify the System: Killing -Processes and Stopping Services - -f. -Common Points of Confusion - -g. -**Lab** - -7. -Adding Commands - -a. -How One Shell Can Do Everything - -b. -About Product-Specific "Management Shells" - -c. -Extensions: Finding and Adding Snap-Ins - -d. -Extensions: Finding and Adding Modules - -e. -Playing With a New Module - -f. -Profile Scripts: Preloading Extensions When the -Shell Starts - -g. -Common Points of Confusion - -h. -**Lab** - -8. - "Objects:" -Just Data by Another Name - -a. -What are Objects? - -b. -Why PowerShell Uses Objects - -c. -Discovering Objects: Get-Member - -d. -Object Attributes, or "Properties" - -e. -Object Actions, or "Methods" - -f. -Sorting Objects - -g. -Selecting the Properties You Want - -h. -Objects Until the Very End - -i. -Common Points of Confusion - -j. -**Lab** - -9. -The Pipeline, Deeper - -a. -The Pipeline: Enabling Power With Less Typing - -b. -How PowerShell Passes Data Down the Pipeline - -c. -Plan A: Pipeline Input ByValue - -d. -Plan B: Pipeline Input ByPropertyName - -e. -When Things Don't Line Up: Custom Properties - -f. -Parenthetical Commands - -g. -Extracting the Value from a Single Property - -h. -**Lab** - -10. Formatting -- and Why it's Done on the Right - -a. -Formatting: Making What You See Prettier - -b. -About the Default Formatting - -c. -Formatting Tables - -d. -Formatting Lists - -e. -Formatting Wide - -f. -Custom Columns and List Entries - -g. -Going Out: To a File, a Printer, or the Host - -h. -Another Out: GridViews - -i. -Common Points of Confusion - - -i. Always -Format Right - - -ii. One -Object at a Time, Please - -j. -**Lab** - -k. -**Further -Exploration** - -11. Filtering -and Comparisons - -a. -Making the Shell Give You Just What You Need - -b. -Filter Left - -c. -Comparison Operators - -d. -Filtering Objects out of the Pipeline - -e. -The Iterative Command-Line Model - -f. -Common Points of Confusion - - -i. Filter -Left, Please - - -ii. When -$_ is Allowed - -g. -**Lab** - -h. -**Further -Exploration** - -12. A -Practical Interlude - -a. -Defining the Task - -b. -Finding the Commands - -c. -Learning to Use the Commands - -d. -Tips for Teaching Yourself - -e. -**Lab** - -13. Remote -Control: One on One, and One to Many - -a. -The Idea Behind Remote PowerShell - -b. -WinRM Overview - -c. -Using Enter-PSSession and Exit-PSSession for -One-to-one Remoting - -d. -Using Invoke-Command for One-to-many Remoting - -e. -Differences Between Remote and Local Commands - - -i. Invoke-Command -vs -ComputerName - - -ii. Local -vs Remote Processing - - -iii. Deserialized -Objects - -f. -But Wait, There's More - -g. -Remoting Options - -h. -Common Points of Confusion - -i. -**Lab** - -j. -**Further -Exploration** - -14. Using -Windows Management Instrumentation - -a. -WMI Essentials - -b. -The Bad News About WMI - -c. -Exploring WMI - -d. -Choose Your Weapon: WMI or CIM - -e. -Using Get-WmiObject - -f. -Using Get-Ciminstance - -g. -WMI Documentation - -h. -Common Points of Confusion - -i. -**Lab** - -j. -**Further -Exploration** - -15. Multitasking -with Background Jobs - -a. -Making PowerShell Do Multiple Things at the Same -Time - -b. -Synchronous versus Asynchronous - -c. -Creating a Local Job - -d. -WMI, as a Job - -e. -Remoting, as a Job - -f. -Getting Job Results - -g. -Working with Child Jobs - -h. -Commands for Managing Jobs - -i. -Scheduled Jobs - -j. -Common Points of Confusion - -k. -**Lab** - -16. Working -with Bunches of Objects, One at a Time - -a. -Automation for Mass Management - -b. -The Preferred Way: "Batch" Cmdlets - -c. -The WMI Way: Invoking WMI Methods - -d. -The Backup Plan: Enumerating Objects - -e. -Common Points of Confusion - - -i. Which -Way is the Right Way? - - -ii. WMI -Methods versus Cmdlets - - -iii. Method -Documentation - - -iv. ForEach-Object -Confusion - -f. -**Lab** - -17. Security -Alert! - -a. -Keeping the Shell Secure - -b. -Windows PowerShell Security Goals - -c. -Execution Policy and Code Signing - - -i. Execution -Policy Settings - - -ii. Digital -Code Signing - -d. -Other Security Measures - -e. -Other Security Holes? - -f. -Security Recommendations - -g. -**Lab** - -18. Variables: -A Place to Store Your Stuff - -a. -Introduction to Variables - -b. -Storing Values in Variables - -c. -Fun Tricks with Quotes - -d. -Storing Lots of Objects in a Variable - -e. -More Tricks with Double Quotes - -f. -Declaring a Variable's Type - -g. -Commands for Working with Variables - -h. -Variable Best Practices - -i. -Common Points of Confusion - -j. -**Lab** - -k. -**Further -Exploration** - -19. Input -and Output - -a. -Prompting For, and Displaying, Information - -b. -Read-Host - -c. -Write-Host - -d. -Write-Output - -e. -Other Ways to Write - -f. -**Lab** - -g. -**Further -Exploration** - -20. Sessions: -Remote Control, with Less Work - -a. -Making PowerShell Remoting a Bit Easier - -b. -Creating and Using Reusable Sessions - -c. -Using Sessions with Enter-PSSession - -d. -Using Sessions with Invoke-Command - -e. -Implicit Remoting: Importing a Session - -f. -Disconnected Sessions - -g. -**Lab** - -h. -**Further -Exploration** - -21. You -Call This Scripting? - -a. -Not Programming... More Like Batch Files - -b. -Making Commands Repeatable - -c. -Parameterizing Commands - -d. -Creating a Parameterized Script - -e. -Documenting Your Script - -f. -One Script, One Pipeline - -g. -A Quick Look at Scope - -h. -**Lab** - -22. Improving -Your Parameterized Script - -a. -Starting Point - -b. -Getting PowerShell to do the Hard Work - -c. -Making Parameters Mandatory - -d. -Adding Parameter Aliases - -e. -Validating Parameter Input - -f. -Adding the Warm and Fuzzies with Verbose Output - -g. -**Lab** - -23. Advanced -Remoting Configuration - -a. -Using Other Endpoints - -b. -Creating Custom Endpoints - - -i. Creating -the Session Configuration - - -ii. Registering -the Session - -c. -Enabling Multi-Hop Remoting - -d. -Digging Deep into Remoting Authentication - - -i. Defaults -for Mutual Authentication - - -ii. Mutual -Authentication via SSL - - -iii. Mutual -Authentication via TrustedHosts - -e. -**Lab** - -24. Using -Regular Expressions to Parse Text Files - -a. -The Purpose of Regular Expressions - -b. -A RegEx Syntax Primer - -c. -Using RegEx with -Match - -d. -Using RegEx with Select-String - -e. -**Lab** - -f. -**Further -Exploration** - -25. Additional -Random Tips, Tricks, and Techniques - -a. -Profiles, Prompts and Colors: Customizing the -Shell - - -i. PowerShell -Profiles - - -ii. Customizing -the Prompt - - -iii. Tweaking -Colors - -b. -More Operators: -as, -is, -replace, -join, --split - - -i. -as -and -is - - -ii. -replace - - -iii. -join -and -split - - -iv. -contains -and -in - -c. -String Manipulation - -d. -Date Manipulation - -e. -Dealing with WMI Dates - -f. -Setting Default Parameter Values - -g. -Playing with Script Blocks - -26. Using -Someone Else's Script - -a. -The Script - -b. -It's a Line-by-line Examination - -c. -**Lab** - -27. Never -the End - -a. -Ideas for Further Exploration - -b. -"Now That I'm Done, Where Do I Start?" - -c. -Other Resources You'll Grow to Love - -28. PowerShell -Cheat Sheet - -a. -Punctuation - -b. -Help File - -c. -Operators - -d. -Custom Property and Column Syntax - -e. -Pipeline Parameter Input - -f. -When to Use $_ - -29. Appendix -A: Review Labs - -a. -Review Lab 1 (Chapters 1-6) - -b. -Review Lab 2 (Chapters 1-14) - -c. -Review Lab 3 (Chapters 1-19) - - - - - -1 -784 -4474 -Concentrated Technology -37 -10 -5248 -14.0 -Normal - -false -false -false -EN-US -JA -X-NONE - -**ToC -- "PowerShell Scripting and Toolmaking in a Month of Lunches"** - -** ** - -**Part I: Introduction -to Toolmaking** - -1. -Before You Begin - -a. -What is Toolmaking? - -b. -Is This Book for You? - -c. -Pre-Requisites - - -i. PowerShell -v3 - - -ii. Admin -Privileges - - -iii. Multiple -Computers - - -iv. SQL -Server - - -v. PowerShell -ISE - - -vi. Optional -Pre-Requisites - -d. -How To Use this Book - -2. -PowerShell Scripting Overview - -a. -What _is_ -PowerShell Scripting? - -b. -PowerShell's Execution Policy - -c. -Running Scripts - -d. -Editing Scripts - -e. -**Further -Exploration: Script Editors** - -f. -**Lab** - -3. -PowerShell's Scripting Language - -a. -One Script, One Pipeline - -b. -Variables - -c. -Quotation Marks - -d. -Object Members and Variables - -e. -Parentheses - -f. -Refresher: Comparisons - -g. -Logical Constructs - - -i. If -Construct - - -ii. Switch -Construct - -h. -Looping Constructs - - -i. Do...While -Construct - - -ii. ForEach -Construct - - -iii. For -Construct - -i. -Break and Continue in Constructs - -j. -**Lab** - -4. -Simple Scripts and Functions - -a. -Start with a Command - -b. -Turn the Command into a Script - -c. -Parameterize the Command - -d. -Turning the Script into a Function - -e. -Testing the Function - - -i. Dot-Sourcing - - -ii. Calling -the Function in the Script - - -iii. A -Better Way Ahead: Script Modules - -f. -**Lab** - -5. -Scope - -a. -What is Scope? - -b. -Seeing Scope in Action - -c. -Working Out-of-Scope - -d. -Getting Strict with Scope - -e. -Best Practices for Scope - -f. -**Lab** - -** ** - -**Part II: Building an -Inventory Tool** - -6. -Tool Design Guidelines - -a. -Do One Thing, and Do it Well - - -i. Input -Tools - - -ii. Functional -Tools - - -iii. Output -Tools - -b. -**Lab** - -7. -Advanced Functions, Part 1 - -a. -Advanced Function Template - -b. -Designing the Function - -c. -Declaring Parameters - -d. -Testing the Parameters - -e. -Writing the Main Code - -f. -Outputting Custom Objects - -g. -What Not to Do - -h. -Coming Up Next - -i. -**Lab** - -8. -Advanced Functions, Part 2 - -a. -Making Parameters Mandatory - -b. -Verbose Output - -c. -Parameter Aliases - -d. -Accepting Pipeline Input - -e. -Parameter Validation - -f. -Adding a Switch Parameter - -g. -Parameter Help - -h. -Coming Up Next - -i. -**Lab** - -9. -Writing Help - -a. -Comment-Based Help - -b. -XML-Based Help - -c. -Coming Up Next - -d. -**Lab** - -10. Error -Handling - -a. -It's All About the Action - -b. -Setting the Error Action - -c. -Saving the Error - -d. -Error Handling v1: Trap - -e. -Error Handling v2+: Try...Catch...Finally - -f. -Providing Some Visuals - -g. -Coming Up Next - -h. -**Lab** - -11. Debugging -Techniques - -a. -Two Types of Bugs - -b. -Solving Typos - -c. -The Real Trick to Debugging: Expectations - -d. -Dealing with Logic Errors: Trace Code - -e. -Dealing with Logic Errors: Breakpoints - -f. -Seriously, Have Expectations - -g. -Coming Up Next - -h. -**Lab** - -12. Creating -Custom Format Views - -a. -The Anatomy of a View - -b. -Adding a Type Name to Output Objects - -c. -Making a View - -d. -Loading and Debugging the View - -e. -Using the View - -f. -Coming Up Next - -g. -**Lab** - -13. Script -and Manifest Modules - -a. -Introducing Modules - - -i. Module -Location - - -ii. Module -Name - - -iii. Module -Contents - -b. -Creating a Script Module - -c. -Creating a Module Manifest - -d. -Creating a Module-Level Setting Variable - -e. -Coming Up Next - -f. -**Lab** - -14. Adding -Database Access - -a. -Simplifying Database Access - -b. -Setting Up Your Environment - -c. -The Database Functions - -d. -About the Database Functions - -e. -Using the Database Functions - -f. -**Lab** - -15. Interlude: -Creating a New Tool - -a. -Designing the Tool - -b. -Writing and testing the Function - -c. -Dressing Up the Parameters - -d. -Adding Help - -e. -Handling Errors - -f. -Creating a Custom Format View - -g. -Making a Module - -h. -Coming Up Next - - - -**Part III: Advanced -Toolmaking Techniques** - -16. Making -Tools that Make Changes - -a. -The -Confirm and -WhatIf Parameters - -b. -Passthrough ShouldProcess - -c. -Defining the Impact Level - -d. -Implementing ShouldProcess - -**e. -** **Lab** - -17. Creating -a Custom Type Extension - -a. -The Anatomy of an Extension - -b. -Creating a Script Property - -c. -Creating a Script Method - -d. -Loading the Extension - -e. -Testing the Extension - -f. -Adding the Extension to a Manifest - -g. -**Lab** - -18. Creating -PowerShell Workflows - -a. -Workflow Overview - - -i. Common -Parameters for Workflows - - -ii. Activities -and Stateless Execution - - -iii. Persisting -State - - -iv. Suspending -and Resuming Workflows - - -v. Inherently -Remotable - - -vi. Parallelism - -b. -General Workflow Design Strategy - -c. -Example Workflow Scenario - -d. -Writing the Workflow - -e. -Workflows vs. Functions - -f. -**Lab** - -19. Troubleshooting -Pipeline Input - -a. -Refresher: How Pipeline Input Works - -b. -Introducing Trace-Command - -c. -Interpreting Trace-Command Output - -d. -**Lab** - -20. Using -Object Hierarchies for Complex Output - -a. -When a Hierarchy Might be Necessary - -b. -Hierarchies and CSV: Not a Good Idea - -c. -Creating Nested Objects - -d. -Working with Nested Objects - - -i. Using -Select-Object to Expand Child Objects - - -ii. Using -Format-Custom to Expand an Object Hierarchy - - -iii. Using -a ForEach Loop to Enumerate Sub-Objects - - -iv. Using -PowerShell's Array Syntax to Access Individual Sub-Objects - -e. - - -f. -**Lab** - -21. Globalizing -a Function - -a. -Introduction to Globalization and Localization - -b. -PowerShell's Data Language - -c. -Storing Translated Strings - -d. -Do You Need to Globalize? - -e. -**Lab** - -22. Crossing -the Line: Utilizing the .NET Framework - -a. -.NET Classes and Instances - -b. -Static Methods of a Class - -c. -Instantiating a Class - -d. -Using Reflection - -e. -Finding Class Documentation - -f. -PowerShell vs. Visual Studio - -g. -**Lab** - - - -**Part IV: Creating -Tools for Delegated Administration** - -23. Creating -a GUI Tool, Part 1: The GUI - -a. -Introduction to WinForms - -b. -Using a GUI to create the GUI - -c. -Manually Coding the GUI - -d. -Showing the GUI - -e. -**Lab** - -24. Creating -a GUI Tool, Part 2: The Code - -a. -Addressing GUI Objects - -b. -Example: Text Boxes - -c. -Example: Button Clicks - -d. -Example: List Boxes - -e. -**Lab** - -25. Creating -a GUI Tool, Part 3: The Output - -a. -Using Out-GridView - -b. -Creating a Form for Output - -c. -Populating and Showing the Output - -d. -**Lab** - -26. Creating -Proxy Functions - -a. -What are Proxy Functions? - -b. -Creating the Proxy Function Template - -c. -Removing a Parameter - -d. -Adding a Parameter - -e. -Loading the Proxy Function - -f. -**Lab** - -27. Setting -Up Constrained Remoting Endpoints - -a. -Refresher: Remoting Architecture - -b. -What are Constrained Endpoints? - -c. -Creating the Endpoint Definition - -d. -Registering the Endpoint - -e. -Connecting to the Endpoint - -f. -**Lab** - -** ** - -**Conclusion** - -28. Never -the End - -a. -Welcome to Toolmaking - -b. -Cool Ideas for Tools - -c. -What's Your Next Step? - - - - - - -![](http://powershell.com/cs/aggbug.aspx?PostID=16860) diff --git a/content/articles/2012-06-04-updated-tweaks-to-powershel-v3-updatable-help.md b/content/articles/2012-06-04-updated-tweaks-to-powershel-v3-updatable-help.md deleted file mode 100644 index aa0924a5f..000000000 --- a/content/articles/2012-06-04-updated-tweaks-to-powershel-v3-updatable-help.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "[UPDATED] Tweaks to PowerShel v3 Updatable Help" -authors: - - Don Jones -date: "2012-06-04T23:58:00+00:00" -aliases: - - /2012/06/updated-tweaks-to-powershel-v3-updatable-help/ ---- - -[I've written before about how PowerShell v3 won't come with help][1] "in the box," but will instead require you to download help from Microsoft's servers. - -ASIDE: Technically, _any_ module author can provide updatable help on their own Web server; you just have to tag your module manifest with the appropriate information so that PowerShell can locate your online content and download it. - -Now that Windows PowerShell v3 Release Candidate is out, I've noticed a slight tweak to the help system. Previously, if you looked at a command's help prior to downloading the help content, you still got the basic syntax and a reminder that you hadn't yet downloaded help. That still occurs, but when you first try to ask for help (if you haven't downloaded it), you actually get an interaction-required Yes/No prompt, reminding you to run Update-Help to get the help content to your computer. - -UPDATE: And, if you hit "Y" on that prompt, it runs Update-Help. So... this is pretty smart. - -I think this is a great compromise. Now, there's no way you can possibly _not realize_ that you haven't downloaded help, and you're told _exactly_ how to do so, and Microsoft (and other authors) are able to provide more accurate, continuously-updated content. - - -![](http://powershell.com/cs/aggbug.aspx?PostID=16885) - - [1]: http://powershell.com/cs/blogs/donjones/archive/2012/03/02/wait-powershell-v3-doesn-t-come-with-help.aspx diff --git a/content/articles/2012-06-07-using-powershell-to-scrape-the-web.md b/content/articles/2012-06-07-using-powershell-to-scrape-the-web.md deleted file mode 100644 index a7a62bfd7..000000000 --- a/content/articles/2012-06-07-using-powershell-to-scrape-the-web.md +++ /dev/null @@ -1,125 +0,0 @@ ---- -title: Using PowerShell to Scrape the Web -authors: - - Don Jones -date: "2012-06-07T14:22:00+00:00" -aliases: - - /2012/06/using-powershell-to-scrape-the-web/ ---- - -One of the things administrators often look to do with PowerShell is "scrape" Web pages. In the past, you had a couple of options: Use Internet Explorer's COM object (which can get a bit fugly), or use the .NET Framework's WebRequest stuff (slightly less fugly, but still a bit). - -PowerShell v3 to the rescue. Microsoft has wrapped much of the fugly in some cool and simple cmdlets, and given PowerShell a native ability to understand an HTML document's object model (DOM). Note that the ability to parse the HTML document tree is dependent upon IE being installed, which means it won't work on a Server Core system (since IE doesn't exist there). You'll still get some HTML parsing, but it won't be the full, broken-down tree. - -Start by running Invoke-WebRequest, passing it a -URI with the URL of the Web page you want to download. It'll handle the full task of connecting to the Web server, getting the text of the HTML page, and parsing it. Other parameters let you specify a -Credential, modify the HTTP -Headers, redirect the text to an -OutFile so that you have a local copy, specify -Proxy settings, and more. You'll specify -UseBasicParsing when IE isn't available. - -What you get back (store it in a variable to work with it) is an HTML response. it'll have a StatusCode property, a Content property, and more. What's useful are some of the parsed properties: - - * Images - all the tags - * InputFields - all form fields - * Links - all tags - * Forms - all tags - - - These are collections of objects, each one giving you access to the most commonly-needed data from he HTML. You can easily grab all of the images, links, and so forth, and process them however you like. For example, assume that you put your HTML results in $html. Run $html.links[0].href to get the destination of the first hyperlink in the page. Cool! - - - Here's a quick example that grabs the first page of search result links from a Bing search for "cmdlet:" - - - - 0 - 1 - 68 - 392 - Concentrated Technology - 3 - 1 - 459 - 14.0 - Normal - 0 - false - false - false - EN-US - JA - X-NONE - - - - - PS C:\> Invoke-WebRequest -uri - 'http://www.bing.com/search?q=cmdlet&form=AP - - - - - - MCS1' | select -expand links | select -expand href -first 10 - - - - - - /?scope=web&FORM=Z9FD - - - - - - /images/search?q=cmdlet&FORM=BIFD - - - - - - /videos/search?q=cmdlet&FORM=BVFD - - - - - - /shopping/search?q=cmdlet&mkt=en-US&FORM=BPFD - - - - - - /news/search?q=cmdlet&FORM=BNFD - - - - - - /maps/default.aspx?q=cmdlet&mkt=en-US&FORM=BYFD - - - - - - /explore?q=cmdlet&FORM=BXFD - - - - - - http://www.msn.com/ - - - - - - http://mail.live.com/ - - - -Now that's just nifty. And it works fine against local HTML pages as well as ones served up from a Web server. There's obviously a LOT more you can do, but this should give you a great starting point! - -_This article was inspired by the chapter "Working with HTML and XML Data" in the upcoming [PowerShell in Depth][1], co-authored with Jeffery Hicks and Richard Siddaway. That book can be purchased from the publisher, and is [available directly from the authors][2] in a signed, limited edition package._ - - -![](http://powershell.com/cs/aggbug.aspx?PostID=16940) - - [1]: http://bit.ly/Psh3InDepth - [2]: http://store.concentratedtech.com/indepth.php diff --git a/content/articles/2012-06-14-how-to-use-write-host-without-endangering-puppies-or-a-manifesto-for-modularizing-powershell-scripts.md b/content/articles/2012-06-14-how-to-use-write-host-without-endangering-puppies-or-a-manifesto-for-modularizing-powershell-scripts.md deleted file mode 100644 index 59e22642b..000000000 --- a/content/articles/2012-06-14-how-to-use-write-host-without-endangering-puppies-or-a-manifesto-for-modularizing-powershell-scripts.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: How To Use Write-Host Without Endangering Puppies (or, A Manifesto for Modularizing PowerShell Scripts) -authors: - - Don Jones -date: "2012-06-15T01:04:00+00:00" -aliases: - - /2012/06/how-to-use-write-host-without-endangering-puppies-or-a-manifesto-for-modularizing-powershell-scripts/ ---- - -At this week's TechEd, I was speaking with Jeffrey Snover in the hallway on Wednesday when he remarked, "you know, Write-Host isn't all bad." After he got someone to come around with smelling salts to revive me, he elaborated, "so long as your verb is Show." I started to object - and then a subtle, yet brilliant light came upon me. - -He's write. Heh. - -But, seriously, if you do three simple things, you can't go wrong when you write a PowerShell script or function - and this goes further than just Write-Host. Ask yourself: - - * Am I naming my script/function according to PowerShell verb-noun naming conventions? - * Am I only using allowed verbs (run Get-Verb for a list)? - * Am I _respecting the use of the verb I chose?_ - - - That last one's the doozy. But think about it: If your verb is Get, then your function/script *should just get stuff. *It shouldn't manipulate it. Shouldn't format it. Shouldn't (generally) change bytes into megabytes, or anything else. Just get the data, and output a single kind of object to the pipeline, using Write-Output. That's it. - - - Ok, if you want some step-by-step progress information as it runs, use Write-Verbose. That's cool. Or use Write-Debug for trace code, if you need. - - - The Get verb implies that you may want to do something else with the data. Convert it to HTML. Export it to CSV. Whatever. And so you just output raw objects. Need to put that data into a database? Fine, create an "Export-MyStuffToDatabase" function that does that - the Export verb makes it clear that the data is "leaving the shell" and going elsewhere. - - - Want to display the data on-screen? *Write a "Show-Whatever" function. *The Show verb *implies* on-screendisplay. You'd never think to run something like "Get-Service | Show-ServiceData | Export-CSV." The Show verb tells you that "this is going to the screen, and by God it isn't going anywhere else." So if you're using the Show verb... go ahead and use Write-Host. *That's what it's for. *No puppies will be harmed. - - - This gets back to my bigger design philosophy of *make each function/script do only one thing. *Each should automate some *task*, and should act appropriately for the verb you've chosen. If you have a function *Get*ting something as well as *Format*ting the output... that's two things. You'll also write larger scripts that automate *processes, *and those should generally just be calling sequences of your task-automating commands. A task, then, is something you might use in several different scenarios; a process is one such scenario that employs several tasks. - - - Provisioning a new user? You've got tasks like New-ADUser, Add-ADGroupMember, New-UserHomeShare, New-HREmployeeRecord, and so on. But those tasks (some of which you'd write yourself, obviously) might be used in other circumstances: New-ADUser, for example, might also be used when you need to set up a new SQL Server and create an AD service account, right? With all the tasks written, you'd write a larger "process" script, perhaps called New-CompanyUser.ps1, which combined those various tasks into the sequence needed to provision a user - while leaving the tasks free to be used in other processes as well. - - - Stick with the verbs, my friend. They won't lead you astray. - - - - - -![](http://powershell.com/cs/aggbug.aspx?PostID=17079) diff --git a/content/articles/2012-06-14-sample-code-from-my-teched-building-reusable-powershell-tools-session.md b/content/articles/2012-06-14-sample-code-from-my-teched-building-reusable-powershell-tools-session.md deleted file mode 100644 index e1debc530..000000000 --- a/content/articles/2012-06-14-sample-code-from-my-teched-building-reusable-powershell-tools-session.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Sample Code from my TechEd \"Building Reusable PowerShell Tools\" Session" -authors: - - Don Jones -date: "2012-06-14T08:48:00+00:00" -aliases: - - /2012/06/sample-code-from-my-teched-building-reusable-powershell-tools-session/ ---- - -Hey, all! I was looking over the script I'd saved from this TechEd session, and realized I could offer something better. - -[Go to the Web page for my upcoming "Toolmaking" book][1]. In the Downloads section, grab the book's code samples. You'll actually get a _better_ example than I showed in class, and it goes _further._ The listings for Chapter 13 pretty much put you where that session wraps up. - -Now, these haven't been totally tech-edited yet, so if you find any bugs - please let me know! The book itself should go into "Early Access Preview" in a couple of months, I'm hoping. Stay tuned! - - -![](http://powershell.com/cs/aggbug.aspx?PostID=17054) - - [1]: http://morelunches.com/toolmaking.html diff --git a/content/articles/2012-06-19-teched-powershell-sessions.md b/content/articles/2012-06-19-teched-powershell-sessions.md deleted file mode 100644 index e8b6cdae5..000000000 --- a/content/articles/2012-06-19-teched-powershell-sessions.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: TechEd PowerShell Sessions -authors: - - Don Jones -date: "2012-06-19T14:21:00+00:00" -aliases: - - /2012/06/teched-powershell-sessions/ ---- - -Many sessions are now available on Channel 9 as recordings... - -First, mine: - - * [Crash Course w/Jeffrey Snover][1] (one of the conference's top-rated overall sessions) - * [Crash Course repeat][2] - * [Building Reusable PowerShell Tools][3] - * [Remoting in Depth][4] (another top-rated session!) - - - But wait, there's more! - - - - - - - [App-V 5 and PowerShell](http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/WCL201) - - - - - [Win2012 Multi-Server Management](http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/WSV306) - - - - - [Advanced Automation in PSH 3](http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/WSV414) - - - - - - - - I'll caution you that the videos haven't yet been posted on all of these, so poke around until you find 'em all. With hundreds of sessions to sort through, I imagine they're prioritizing the production process. - - - -![](http://powershell.com/cs/aggbug.aspx?PostID=17125) - - [1]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/WSV321-R - [2]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/WSV321 - [3]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/WCL404 - [4]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/WCL403 diff --git a/content/articles/2012-06-19-updated-snover-school-fancy-wildcards.md b/content/articles/2012-06-19-updated-snover-school-fancy-wildcards.md deleted file mode 100644 index fccfe485e..000000000 --- a/content/articles/2012-06-19-updated-snover-school-fancy-wildcards.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "[UPDATED] Snover School: FANCY Wildcards" -authors: - - Don Jones -date: "2012-06-19T20:13:00+00:00" -aliases: - - /2012/06/updated-snover-school-fancy-wildcards/ ---- - -So, I'd previously posted about a cool trick Jeffrey Snover demonstrated at TechEd: - - - Get-Service -Name [a-b]* - - -This will return a list of all services whose names start with A or B. Now for me, this was a cool trick: I didn't realize that wildcards could be more than * or ?! And Snover described these as "rich regular expressions." - -Well, not exactly. We've corresponded, and what's actually happening is that PowerShell's wildcard support is essentially a dumbed-down set of the regex syntax. Specifically, read the about_wildcards help topic and you'll learn that you can use ranges like [a-b], the * and ? characters, or a set of characters like [abeft] - but not much else. So it looks like a regex at first blush, but isn't, really. - -This is a nifty trick, though! Keep in mind that it's only supported on parameters that have been explicitly designed, by their developers, to support wildcards. That's usually documented in the cmdlet's full help (e.g., Help Get-Service -full), although in some cases you'll need to use a bit of trial and error to see what works and what doesn't. - -Another aspect of this is the -like operator. You're probably familiar with something like this: - - - - - get-service | where { $_.name -like 'b*' } - - - -But the operator also supports these richer, semi-regex wildcards: - - - get-service | where { $_.name -like '[abd]*' } - - -Give it a shot! It was very cool to be doing a session at TechEd _with Jeffrey Snover,_ especially when he kept whipping out these little gems that I'd never even thought to try. I'll share some more of them in the upcoming weeks! - - -![](http://powershell.com/cs/aggbug.aspx?PostID=17124) diff --git a/content/articles/2012-06-26-upcoming-powershell-books-and-how-to-get-them.md b/content/articles/2012-06-26-upcoming-powershell-books-and-how-to-get-them.md deleted file mode 100644 index a3a875c65..000000000 --- a/content/articles/2012-06-26-upcoming-powershell-books-and-how-to-get-them.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Upcoming PowerShell Books and How to Get Them -authors: - - Don Jones -date: "2012-06-26T12:29:00+00:00" -aliases: - - /2012/06/upcoming-powershell-books-and-how-to-get-them/ ---- - -My co-authors and I have no less than three new PowerShell books coming out... and a couple of different way to get them. - -## PowerShell In Depth - -This is meant to be a comprehensive, administrator-focused reference on all things PowerShell v3. [It's available directly from the publisher as part of their Manning Early Access Program (MEAP)][1]. Under that program, you get all available chapters now in PDF format. As new chapters are released, you get those too. When the book is done, you get your choice of ebook format and, optionally, the printed book. - -The three authors are also [offering a direct pre-order][2]. With this offer, which goes on sale July 1st, you get the print book and ebook in your choice of formats. The book will be autographed by the three of us, and we're including an exclusive video disc full of PowerShell demos, tips, and tricks. Only 200 units will be offered through this pre-order, and each will be hand-numbered. So whoever buys the first order will get the lowest-numbered book! You don't get "early access," though - you'll have to wait until the book is done and printed. - - - -## The "Month of Lunches" Books - -There are two of these: _Learn Windows PowerShell 3 in a Month of Lunches_ and _Learn PowerShell Toolmaking in a Month of Lunches._ Again, you can get "early access" directly from the publisher through the MEAP program, but you have to buy that separately for each title. [The first title is available in MEAP right now][3]. Once the book is published, you get the finished version in ebook and, if you chose, in print. - -Jeff and I are also [offering a bundle pre-order][4] that includes both books, a resources disc with video introductions from us, a logo lunch bag, and a lunch item (for US orders only). This is a pre-order; you'll get both the physical books and ebook versions, but you have to wait until they're published - there's no early access. Both books will be autographed, and only 100 hand-numbered copies will be offered. This goes on sale August 1st, and the first purchasers get the lowest-numbered copies. - - -![](http://powershell.com/cs/aggbug.aspx?PostID=17258) - - [1]: http://bit.ly/Psh3InDepth - [2]: http://store.concentratedtech.com/indepth.php - [3]: http://bit.ly/PSHv3Lunch - [4]: http://store.concentratedtech.com/lunchesbundle.php diff --git a/content/articles/2012-07-08-july-25-update-powershell-in-depth-limited-edition-pre-orders-as-they-stand.md b/content/articles/2012-07-08-july-25-update-powershell-in-depth-limited-edition-pre-orders-as-they-stand.md deleted file mode 100644 index ccb95db6d..000000000 --- a/content/articles/2012-07-08-july-25-update-powershell-in-depth-limited-edition-pre-orders-as-they-stand.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: "[JULY 25 UPDATE] \"PowerShell In Depth\" Limited Edition Pre-Orders… as they stand…" -authors: - - Don Jones -date: "2012-07-09T00:24:00+00:00" -aliases: - - /2012/07/july-25-update-powershell-in-depth-limited-edition-pre-orders-as-they-stand/ ---- - -As most of you know, co-authors Jeffery Hicks, Richard Siddaway, and myself are offering a limited edition pre-order of our new _PowerShell in Depth_ book. You can [order from my company's online store][1]; you're pre-ordering a book autographed by the three of us and bundled with a disc chock full of demo videos timed by us. This isn't the same as the publisher's MEAP preview - you won't get the book ahead of time. The disc is exclusive to this 200-unit edition, and each book is part of a 400-unit edition and is hand-numbered. - -I'll be updating this post every couple of weeks as orders are received, but here's the rundown so far. Names are listed as shown on your PayPal invoice. - -(apologies for any typos in names - I'm retyping these manually from the order list) - - - - 1. Annette Ciotola (congratulations - you got #1!) - 2. James Berkenbile - 3. Niels Grove-Rasmussen - 4. Lester Bolton - 5. Lester Bolton - 6. Dennis Olidis - 7. Bruce Langworthy - 8. Luc Dekens - 9. Reinhard Teischl - 10. Kyle Beckman - 11. Brian Pini - 12. HPM Smits - 13. Marlene Poltronieri - 14. Mark Hourshad - 15. David Grams - 16. Brian Foley - 17. David Dov3 - 18. Gregory Holl - 19. Steve Gold - 20. Robert Simmers - 21. Charles Palmer - 22. Firoze Bhorat - 23. Bill Bailey - 24. Magnus Andersen - 25. Dennis Yeadon - 26. Imtiazali Hasham - 27. Simon Anderson - 28. Cheryl Fant - 29. Vivek Shinde - 30. Tom Collins - 31. Strategic Technology Consulting - 32. Y M Wong - 33. Joakim Westin - 34. Frederick Alexander - 35. Tong Young - 36. Alan Florance - 37. Jan Engil Ring - 38. Doug Rohm - 39. Adam Uffalussy - 40. Rick Rodriquez - 41. Thomas Mayeda - 42. Ryan Weaver - 43. Chris Carmichael - 44. Allan Miller - 45. Peter Cook - - - So just about 105 units left. If you don't see your name in the above, then we didn't receive your order via PayPal - and won't have any information for you beyond that. Try placing your order again, and I suggest creating an account with PayPal (which isn't normally mandatory) so that you can track your order. - - - We don't have a shipping date on these books yet, but once we do we'll start notifying everyone. You'll receive tracking information in the mail from the USPS once we ship - review your spam folders around that time, if necessary. - - - - - -![](http://powershell.com/cs/aggbug.aspx?PostID=17546) - - [1]: http://store.concentratedtech.com/indepth.php diff --git a/content/articles/2012-07-09-release-dates-for-powershell-3-announced.md b/content/articles/2012-07-09-release-dates-for-powershell-3-announced.md deleted file mode 100644 index d2ffba120..000000000 --- a/content/articles/2012-07-09-release-dates-for-powershell-3-announced.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Release Dates for PowerShell 3 announced! -authors: - - Don Jones -date: "2012-07-09T16:25:00+00:00" -aliases: - - /2012/07/release-dates-for-powershell-3-announced/ ---- - -Microsoft has just announced, at its Worldwide Partner Conference, that Windows 8 and Windows Server 2012 are on track to hit "Release to Manufacturing" the first week of August, with general product availability in October. That means PowerShell v3 will start becoming available in August-September; we can expect v3 to be available as a Web download for older versions of Windows probably by December (based on past performance; it could actually be sooner or a bit later). That'll include Windows 7, Windows Server 2008, and Windows Server 2008 R2, but notably will _not_ include Windows Vista (does anyone mind?). v3 will not ship for Windows XP or Windows Server 2003; those ships have sailed and it's time to move on! - - -![](http://powershell.com/cs/aggbug.aspx?PostID=17573) diff --git a/content/articles/2012-07-17-note-powershell-book-limited-edition-preorders-only-available-as-preorders.md b/content/articles/2012-07-17-note-powershell-book-limited-edition-preorders-only-available-as-preorders.md deleted file mode 100644 index 9ba73593d..000000000 --- a/content/articles/2012-07-17-note-powershell-book-limited-edition-preorders-only-available-as-preorders.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "Note: PowerShell Book Limited Edition Preorders ONLY AVAILABLE as Preorders!" -authors: - - Don Jones -date: "2012-07-17T14:28:00+00:00" -aliases: - - /2012/07/note-powershell-book-limited-edition-preorders-only-available-as-preorders/ ---- - -Jeffery Hicks, Richard Siddaway, and I wanted to offer a quick clarification on our book preorders. First, the _PowerShell In Depth_ preorder is [currently available][1], and there are up to 200 units offered through this preorder. You get a signed-by-all-three-of-us book and an exclusive video companion disc. The _Month of Lunches_ bundle preorder [will go on sale August 1st][2], and will be limited to 100 units. It gets you two autographed books, resources disc, and a fun lunch bag. - -**These offers will only be valid until the books are actually released**. At that time, we'll fulfill all of the preorders and **stop further sales.** If we only sell 50 units, for example, then that's all that will be sold for that particular title or titles - we won't be offering this on an ongoing basis. - -So, if you're thinking you want one of these signed, hand-numbered, limited editions... get on the stick and place your order ASAP. We're working very hard to wrap up production on these books and get them published, especially now that we know Windows 8 / 2012 will RTM in August, so the preorders won't last long. - - -![](http://powershell.com/cs/aggbug.aspx?PostID=17746) - - [1]: http://store.concentratedtech.com/indepth.php - [2]: http://store.concentratedtech.com/lunchesbundle.php diff --git a/content/articles/2012-07-18-kirk-munro-product-manager-architect-and-powershell-mvp-for-hire.md b/content/articles/2012-07-18-kirk-munro-product-manager-architect-and-powershell-mvp-for-hire.md deleted file mode 100644 index 16ed93f24..000000000 --- a/content/articles/2012-07-18-kirk-munro-product-manager-architect-and-powershell-mvp-for-hire.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Kirk Munro, Product Manager, Architect, and PowerShell MVP for hire -authors: - - Kirk Munro -date: "2012-07-18T23:01:34+00:00" -aliases: - - /2012/07/kirk-munro-product-manager-architect-and-powershell-mvp-for-hire/ ---- - -While I have loved working at Devfarm Software for the past 11 months, circumstances have unfortunately forced us to part ways and as a result I am a free agent now and looking for a new place to hang my hat.  Working with Ben Vierck and Brian Butler at Devfarm has been a fantastic experience, and if it wasn"™t for the small yet annoying detail that there isn"™t enough money in the company to continue to pay my salary and keep the business going full steam ahead, I"™d still be working with them today. - -I officially stopped working for Devfarm on July 6, but I had a few items for [PowerWF][1] 3.0 that I wasn"™t quite finished with yet so I spent a good part of last week wrapping up development of those items.  When I wasn"™t doing that, I was hard at work on getting the public beta of [wmix][2] out the door (something that I"™ll talk more about later).  With wmix published and my tasks at Devfarm now complete, it"™s time to focus on finding what"™s next. - -If you or someone you know are looking for a talented Product Manager with: - - * a very strong technical background with 15 years of experience in software development and infrastructure management; - * recognized deep technical expertise as a 5-time recipient of the Microsoft MVP award for Windows PowerShell, including almost 6 years of dedicated Windows PowerShell experience; - * experience establishing a brand, building awareness, and leveraging social media in marketing; - * strong presentation skills and experience presenting at large conferences such as TechEd; and - * an entrepreneurial spirit - -then please [drop me a line][3] and lets talk about it. - -Thanks, - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[Poshoholic](http://technorati.com/tags/Poshoholic),[Product Manager](http://technorati.com/tags/Product+Manager),[Architect](http://technorati.com/tags/Architect) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/791/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/791/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=791&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://powerwf.com/products/powerwf.aspx - [2]: http://wmix.codeplex.com/ - [3]: http://poshoholic.com/contact-me/ diff --git a/content/articles/2012-07-19-measure-powershell-performance.md b/content/articles/2012-07-19-measure-powershell-performance.md deleted file mode 100644 index 28cac9837..000000000 --- a/content/articles/2012-07-19-measure-powershell-performance.md +++ /dev/null @@ -1,624 +0,0 @@ ---- -title: Measure PowerShell Performance -authors: - - Don Jones -date: "2012-07-19T14:10:00+00:00" -aliases: - - /2012/07/measure-powershell-performance/ ---- - -I'm often asked by folks if there's a "better way" to do something in a script. Often times, they're looking for a better procedural approach - following best practices like object-based output, for example. But sometimes, they're looking for better performance from a script or command. Well, the good news is that PowerShell itself can help with that. - -Let's consider two short scripts that produce almost identical output. Here's the first: - - - - - - -Get-Process - - -| - - - - - - - - - Select-Object - - -Name - -, - -ID - -, - - - - - - - @{n -= - -'PM(KB)' -;e -= -{ -$_ - -. -pm -/ - -1kb - --as - -[ - -int - -] -}} -, - - - - - - - @{n -= - -'VM(KB)' -;e -= -{ -$_ - -. -vm -/ - -1kb - --as - -[ - -int - -] -}} -| - - - - - - - -Where - { -$_ - -. -Name --like - -'s*' - } -| - - - - - - - Format-Table - - --AutoSize - - - - -Which outputs the following: - - - - - - -Name Id PM(KB) VM(KB) - - - - - - ---- -- ------ ------ - - - - - - SearchIndexer 2400 16332 511936 - - - - - - services 532 3700 34296 - - - - - - smss 292 272 4276 - - - - - - spoolsv 1060 3688 55996 - - - - - - svchost 264 12980 93388 - - - - - - svchost 644 2132 38588 - - - - - - svchost 684 2428 31988 - - - - - - svchost 756 10192 1414100 - - - - - - svchost 768 15724 104180 - - - - - - svchost 896 23096 589812 - - - - - - svchost 976 5064 87876 - - - - - - svchost 1100 12528 348288 - - - - - - svchost 2172 5056 94256 - - - - - - System 4 120 4196 - - - - - -Now consider this second version: - - - - - - -Get-Process - - --Name - - - -s* - - - -| - - - - - - - Format-Table - - -Name - -, - -ID - -, - - - - - - - @{n -= - -'PM(KB)' -;e -= -{ -$_ - -. -pm};formatstring -= - -"N2" -} -, - - - - - - - @{n -= - -'VM(KB)' -;e -= -{ -$_ - -. -vm};formatstring -= - -"N2" -} --AutoSize - - - - -And its output: - - - - - - -Name Id PM(KB) VM(KB) - - - - - - ---- -- ------ ------ - - - - - - SearchIndexer 2400 16,723,968.00 524,222,464.00 - - - - - - services 532 3,788,800.00 35,119,104.00 - - - - - - smss 292 278,528.00 4,378,624.00 - - - - - - spoolsv 1060 3,776,512.00 57,339,904.00 - - - - - - svchost 264 13,295,616.00 95,629,312.00 - - - - - - svchost 644 2,183,168.00 39,514,112.00 - - - - - - svchost 684 2,539,520.00 33,288,192.00 - - - - - - svchost 756 10,436,608.00 1,448,038,400.00 - - - - - - svchost 768 16,326,656.00 108,277,760.00 - - - - - - svchost 896 15,773,696.00 449,454,080.00 - - - - - - svchost 976 5,132,288.00 89,452,544.00 - - - - - - svchost 1100 12,881,920.00 357,179,392.00 - - - - - - svchost 2172 4,464,640.00 94,494,720.00 - - - - - - System 4 122,880.00 4,296,704.00 - - - - - -Again, same data, just a different way of getting it. The second one is a bit prettier, too. So is there a performance difference? PowerShell's **Measure-Command** approach can tell us. I've saved these in script files named First.ps1 and Second.ps1, mainly for convenience; it's completely legitimate to ask Measure-Command to measure a command, rather than a script file, but when the commands get complex I find them easier to read in a script. - - - - - PS C:\> measure-command -Expression { C:\first.ps1 } - - - - - - - - - - - - - - - - - - Days : 0 - - - - - - Hours : 0 - - - - - - Minutes : 0 - - - - - - Seconds : 0 - - - - - - Milliseconds : 82 - - - - - - Ticks : 825043 - - - - - - TotalDays : 9.5491087962963E-07 - - - - - - TotalHours : 2.29178611111111E-05 - - - - - - TotalMinutes : 0.00137507166666667 - - - - - - TotalSeconds : 0.0825043 - - - - - - TotalMilliseconds : 82.5043 - - - - - - - - - - - - - - - - - - - - - - - - PS C:\> measure-command -Expression { C:\second.ps1 } - - - - - - - - - - - - - - - - - - Days : 0 - - - - - - Hours : 0 - - - - - - Minutes : 0 - - - - - - Seconds : 0 - - - - - - Milliseconds : 87 - - - - - - Ticks : 871232 - - - - - - TotalDays : 1.00837037037037E-06 - - - - - - TotalHours : 2.42008888888889E-05 - - - - - - TotalMinutes : 0.00145205333333333 - - - - - - TotalSeconds : 0.0871232 - - - - - - TotalMilliseconds : 87.1232 - - - - - -Holy smokes. _The first one was faster._ OK, only by 5 milliseconds, but it was faster! And the first one doesn't exactly use what I'd call "best practices." It's filtering out processes whose names don't start with "S" way late in the game - after doing all that Select-ing. It's possible that the second script's Format-Table, with all that FormatString fanciness, is what's making the second script run longer. Fortunately, we can now go in and start tweaking things around, re-testing, and even testing individual commands to get the script running as fast as possible. I'll leave that to you, for these two examples - how fast can you get one to run while producing substantially the same output? - -Measure-Command is a useful tool, but always remember that _it's really running your script._ This isn't some kind of testing mode (and if you run commands with -WhatIf, you won't get the same performance results). So you'll often want to test this in a virtual environment, getting your command fine-tuned and read for production. - - - - - - - - -![](http://powershell.com/cs/aggbug.aspx?PostID=17813) diff --git a/content/articles/2012-07-24-comparing-lunches-v2-to-v3.md b/content/articles/2012-07-24-comparing-lunches-v2-to-v3.md deleted file mode 100644 index 7274ea43f..000000000 --- a/content/articles/2012-07-24-comparing-lunches-v2-to-v3.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Comparing \"Lunches:\" v2 to v3" -authors: - - Don Jones -date: "2012-07-24T16:24:00+00:00" -aliases: - - /2012/07/comparing-lunches-v2-to-v3/ ---- - -I've been getting a few questions like this in my inbox: - - - - - I love "PowerShell in a Month of Lunches" and I'm wondering how much of - - - - - - the 3.0 book that is coming out soon will overlap with the one I have - - - - - - now? In other words, how much of the new book is catching us up to speed - - - - - - on what's new in 3.0? - - - -First of all - thanks for the love! Now, here's the lowdown: - -_[Learn Windows PowerShell v3 in a Month of Lunches, 2nd Edition][1],_ probably overlaps with the original book by about 70%. Every chapter, however, has been updated with new information for v3. The assumption is that you're learning PowerShell from scratch with either book, so there's no specific callout of "new stuff" for you. There are also entirely new chapters intended to provide better education - including one chapter where my new co-author and I focus on techniques for stealing repurposing other people's scripts, since we know that's a common task. There's also a whole new chapter on regular expressions, a new chapter on combining what you've learned to complete a practical task, and so on. But this isn't a "just the differences between v2 and v3" book; I tried writing a "Delta Guide" like that once, and met with mixed success. - -You will, however, notice that the new _Lunches_ book actually **omits** some information. Gone are the chapters on error-handling, debugging, and building advanced functions; the new book shows you how to build a parameterized script (not a function) and stops. That's because there's an all-new, full-sized _Learn PowerShell Toolmaking in a Month of Lunches_ coming (watch [http://PowerShellBooks.com][2] for links). That takes you through those scripting topics - error handling, debugging, modules, advanced functions, and much more - in a much more thorough way, using a much better build-as-you-go narrative. Think of it as the "sequel" to the original _Lunches_ book. - -Hope that helps you figure out which of these two books (or both!) best fit your needs. And don't forget there'll be a [pre-order for both of them][3], starting August 1st, which will only be available until the books are finally published. - - -![](http://powershell.com/cs/aggbug.aspx?PostID=17923) - - [1]: http://bit.ly/PSHv3Lunch - [2]: http://powershellbooks.com - [3]: http://store.concentratedtech.com/lunchesbundle.php diff --git a/content/articles/2012-07-24-join-jeff-and-i-for-a-live-powershell-video-chat-cast.md b/content/articles/2012-07-24-join-jeff-and-i-for-a-live-powershell-video-chat-cast.md deleted file mode 100644 index f09fe28f2..000000000 --- a/content/articles/2012-07-24-join-jeff-and-i-for-a-live-powershell-video-chat-cast.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Join Jeff and I for a live PowerShell video chat cast! -authors: - - Don Jones -date: "2012-07-25T00:19:00+00:00" -aliases: - - /2012/07/join-jeff-and-i-for-a-live-powershell-video-chat-cast/ ---- - -Jeff and I are going to be hosting a LiveMeeting-based "hangout." We'll start with a discussion on PowerShell v3 Workflows just to get things moving, but we're relying on you to bring your questions! We'll have PowerShell v3 available for demos... hope you can attend! - - - -Here's the LiveMeeting details. Note that **only VoIP audio will be provided - there will be no dial-up number. ** - -When: Thursday, Aug 2, 2012 10:00 AM (PDT) - -Scheduled to Occur: Once - -Duration: 1:00 - - - -Don Jones has invited you to attend an online meeting using - -Microsoft Office Live Meeting. - - - -https://www.livemeeting.com/cc/mvp/join?id=8Z5Z2N&role=attend - - - -Meeting time: Aug 2, 2012 10:00 AM (PDT) - - - -Add to my Outlook Calendar: - -https://www.livemeeting.com/cc/mvp/meetingICS?id=8Z5Z2N&role=attend&i=i.ics - - - -AUDIO INFORMATION - --Computer Audio(Recommended) - -To use computer audio, you need speakers and microphone, or a - -headset. - - - - - -FIRST-TIME USERS - -To save time before the meeting, check your system to make sure it is - -ready to use Microsoft Office Live Meeting. - -http://go.microsoft.com/fwlink/?LinkId=90703 - - - -TROUBLESHOOTING - -Unable to join the meeting? Follow these steps: - - 1. Copy this address and paste it into your web browser: - - https://www.livemeeting.com/cc/mvp/join - - 2. Copy and paste the required information: - - Meeting ID: 8Z5Z2N - - Location: https://www.livemeeting.com/cc/mvp - -If you still cannot enter the meeting, contact support: - -http://r.office.microsoft.com/r/rlidLiveMeeting?p1=12&p2=en_US&p3=LMInfo&p4=support - - - - - - -![](http://powershell.com/cs/aggbug.aspx?PostID=17927) diff --git a/content/articles/2012-07-26-pscx-3-0-beta-released.md b/content/articles/2012-07-26-pscx-3-0-beta-released.md deleted file mode 100644 index a3aa585df..000000000 --- a/content/articles/2012-07-26-pscx-3-0-beta-released.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: PSCX 3.0 Beta Released -authors: - - Keith Hill -date: "2012-07-27T04:12:31+00:00" -aliases: - - /2012/07/pscx-3-0-beta-released/ ---- - -We"™ve just released a [beta of the PowerShell Community Extensions 3.0][1] which targets PowerShell 3.0 specifically. This new version uses a WiX based installer. We may look at providing an xcopy deployable ZIP file but we had so many users get burned by not unblocking the ZIP file that the move back to MSI seemed warranted. The MSI really doesn"™t do much other than copy files into the Program Files dir and add a path to the PSModulePath environment variable. - -Be sure to read the installation notes on the download page. If you"™re having problems importing the PSCX module, you might need to reboot. Yeah I know that sucks but either WiX 3.6 just isn"™t handling environment variable updates quite right or I"™m not using WiX right. - -If you"™re using PSCX and Windows PowerShell 3.0, please take this version for a spin. You can use it side-by-side with your current version of PSCX 2.x. When you import PSCX specify the RequiredVersion parameter as shown below e.g.: - -Import-Module pscx "“RequiredVersion 3.0.0.0 - -And please, [report problems back to the CodePlex site][2]. I haven"™t always been able to reply quickly to issues but we do monitor them. Thanks! - -[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/268/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/268/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=268&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) - - [1]: http://pscx.codeplex.com/releases/view/91403 - [2]: http://pscx.codeplex.com/workitem/list/basic diff --git a/content/articles/2012-07-29-the-new-community.md b/content/articles/2012-07-29-the-new-community.md deleted file mode 100644 index 3f7c44ca5..000000000 --- a/content/articles/2012-07-29-the-new-community.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: The New PowerShell Community -authors: - - Don Jones -date: "2012-07-29T16:54:44+00:00" -categories: - - Announcements -aliases: - - /2012/07/the-new-community/ ---- - -Welcome to the new community! -This site represents an evolution of the old PowerShellCommunity.org (also accessible at PoshComm.org). We've moved the site off of the old DotNetNuke software, and are now using a combination of WordPress (for community-hosted blogs) and Vanilla 2 (for the forums and for blog comments). -Why the new site? A couple of reasons. For one, we desperately wanted to get out of the DotNetNuke software, which has proven somewhat difficult to work with since none of us are experts with it. We also needed to get the site out of it's home in a Quest datacenter. Quest was awesome for providing that hosting, but they're moving on to bigger and better things, and we wanted to get a bit more control over the site. We also wanted to trim the site down a bit, to focus mainly on providing a blogging platform and aggregation point, and the all-important Q&A forums that folks rely on. - - -## Logging On - -Right now, we're starting fresh. You'll need to create a new forums account - but you can do so using Twitter, Facebook, OpenID, or Google - there's no need to make up a new password! - - -## Forums - -Our forums are empty at present, but we'll be extracting the old forums content and posting it in a static archive for long-term reference. In the meantime, feel free to jump in and start populating the new forums! You'll see that you can ask questions (which you can then mark as answered), or post discussions. We've tried to flatten the forums structure to make it a bit easier to navigate. -We're presently looking for topic-specific experts to host "Ask the Experts" forums. Drop a note in the "Suggestion Box" forum if you're interested. You'd be agreeing to be the primary moderator and responder for a specific topic, as it relates to PowerShell. - - -## Blogging - -If you're looking for a place to host a PowerShell-focused blog, we'd be pleased to provide that to you. Just drop a note in the "Suggestion Box" (in the forums) and we'll get right back to you. Or, contact [Don Jones][1] directly. If you already have a high-quality, frequently updated, PowerShell-focused blog, we'd also be happy to include it in our aggregation - again, just let us know in the Suggestion Box. - - -## Management - -The community is currently being managed by PowerShell MVPs Don Jones and Kirk Munro. We're not currently putting together a "board" to run the site, since... well, it's just a Web site. What we _are_ looking for - as noted above - are people who want to take ownership of a particular topical "Ask the Experts" forum. By taking a personal stake in this community, those folks will also help manage it by helping us make critical management decisions going forward. - - -## Affiliation - -The site is not affiliated with any corporation or organization at present, and we have no plans to create such an affiliation. Don's company, Concentrated Technology, is providing the hosting, in exchange for running the occasional banner ad for Don's PowerShell books, videos, and other resources. We may accept additional advertising over time to help offset operational expenses, but the plan is to run this site as a labor of love. - - [1]: http://concentratedtech.com/contact diff --git a/content/articles/2012-07-29-want-to-contribute.md b/content/articles/2012-07-29-want-to-contribute.md deleted file mode 100644 index 09b047bb2..000000000 --- a/content/articles/2012-07-29-want-to-contribute.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Want to Contribute? -authors: - - Don Jones -date: "2012-07-29T19:51:59+00:00" -categories: - - Announcements -aliases: - - /2012/07/want-to-contribute/ ---- - -We're looking for a few good PowerShell contributors! You don't need to be a PowerShell expert in order to make a valuable contribution to this community - there are a number of ways in which you can help. - - - -If you _are_ an expert, consider answer questions in our [forums][1]. If you have a specific topical area that interests you - Active Directory, SQL Server, whatever - then we can give you your own topic-specific "Ask the Experts" forum. That's a huge help to the many administrators out there who are trying hard to do their jobs. -We'd also love to have someone moderate different sets of recommendations. We're always asked about book reviews, training reviews, and more - so if that interests you, let us know by dropping a comment in the Suggestion Box (in the forums). We can connect you with publishers so that you can get copies of books, read through them, and then post reviews to benefit the community. Or whatever... you could review tools, training videos, or whatever you like. It's all helpful! -Just let us know how you'd like to contribute, and we'll try and make it happen! - - [1]: /forums/ diff --git a/content/articles/2012-08-06-ebook-secrets-of-powershell-remoting.md b/content/articles/2012-08-06-ebook-secrets-of-powershell-remoting.md deleted file mode 100644 index 92dcfbc32..000000000 --- a/content/articles/2012-08-06-ebook-secrets-of-powershell-remoting.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "eBook: Secrets of PowerShell Remoting" -authors: - - Don Jones -date: "2012-08-06T19:22:35+00:00" -categories: - - Books - - PowerShell for Admins - - Tutorials -aliases: - - /2012/08/ebook-secrets-of-powershell-remoting/ ---- - -This is a free e-book that covers PowerShell Remoting. There's a brief overview and tutorial of actually using Remoting, but that part isn't in-depth. What this e-book provides, that you won't find elsewhere, is step-by-step, screenshot-based instructions for configuring Remoting for any imaginable scenario. You'll also find troubleshooting tutorials and examples, and even information on how to explain Remoting to your corporate IT security team. It's all the stuff that isn't documented in PowerShell's own help - and it's completely free. You don't even need to register to download the file! - - - - -Current version: August 2012. - -The ZIP file contains a PDF. We're not currently offering MOBI or EPUB versions of the file, as the conversion from DOCX using the tools we have available to us takes a zillion steps and is less than perfect. Please [contact Don directly through his Web site][1] if you're interesting in volunteering to help with format conversions. -[Download Secrets of PowerShell Remoting][2] - - [1]: http://concentratedtech.com/contact/ - [2]: https://powershell.org/ebooks diff --git a/content/articles/2012-08-30-powershell-workflow-when-should-you-use-it.md b/content/articles/2012-08-30-powershell-workflow-when-should-you-use-it.md deleted file mode 100644 index bfcff87d3..000000000 --- a/content/articles/2012-08-30-powershell-workflow-when-should-you-use-it.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: "PowerShell Workflow: When Should You Use It?" -authors: - - Don Jones -date: "2012-08-30T16:29:19+00:00" -categories: - - PowerShell for Admins -aliases: - - /2012/08/powershell-workflow-when-should-you-use-it/ ---- - -Microsoft recently posted the online help for PowerShell v3 Workflow (http://technet.microsoft.com/en-us/library/jj134242), and I wanted to take an opportunity to explore some of what the help says - and perhaps offer an outsider's perspective. - -## What is Workflow? - -Workflow is a set of technologies included with PowerShell v3, and is available on any computer running v3 (which can include Windows 7, Windows Server 2008, Windows Server 2008 R2, Windows 8, and Windows Server 2012). A workflow is a special kind of PowerShell script that looks a lot like a function. When run, however, PowerShell translates the workflow to Windows Workflow Foundation (WWF) code, and hands it off to WWF to execute. That means the contents of a workflow are a bit different than the contents of a script. - -## When might you use workflow? - -This is where I take issue with the help files, a bit. They state: - -> In general, you should consider using a workflow instead of a cmdlet or script when you must meet any of the following requirements. -> -> * You need to perform a long-running task that combines multiple steps in a sequence. -> * You need to perform a task that runs on multiple devices. -> * You need to perform a task that requires checkpointing or persistence. -> * You need to perform a long-running task that is asynchronous, restartable, parallelizable, or interruptible. -> * You need to run a task on a large scale, or in high availability environments, potentially requiring throttling and connection pooling. - -I don't think that's an accurate list. I think it's incomplete, for one, and I think it includes some things it shouldn't. Understand that workflow is _complicated. _These things require some up-front planning. Not every PowerShell command can be used natively in a workflow (despite what the help files imply), because not every command has a WWF equivalent. For me, workflow is something you should use _when no other, simpler mechanism_ will meet your specific needs. This list in the help file is supposed to help you identify situations where workflow is _the only way to go_ - but I think it's a bit misleading. -Let's look at why. - -### You need to perform a long-running task that combines multiple steps in a sequence. - -Well, that's what a script does. Any script. Just because you need to run multiple steps in a sequence doesn't mean you should be using workflow. - -### You need to perform a task that runs on multiple devices. - -OK, workflow _can_ do this, but so can the much easier-to-use Invoke-Command. Give it a command, or even a script, and you can run multiple steps, in a sequence, on multiple devices. Understand that workflow _uses _remoting to talk to remote devices; if you're using workflow, you've already enabled remoting - so why not use it when the need is simpler? - -### You need to perform a long-running task that is asynchronous, restartable, parallelizable, or interruptible. - -It's really the "or" I have a problem with here. PowerShell jobs will let you run tasks asynchronously, and in parallel; restartable and interruptible are legitimate workflow-only features. If you need those, you need workflow; if you _merely_ need asynchronous, consider using a job. - -### You need to run a task on a large scale, or in high availability environments, potentially requiring throttling and connection pooling. - -I don't see why Invoke-Command, which supports throttling of connections, couldn't accomplish this criteria. I'll admit that this one's borderline for me; because workflows are executed by WWF and not by PowerShell per se, it's probably better at scale-out. But I wouldn't _immediately_ head for workflow just because I needed to run some command on a few thousand machines. I might, after further evaluation of the situation, select workflow after all - but it's not an automatic for me. - -### You need to perform a task that requires checkpointing or persistence. - -Truth. This is unique to workflow. As WWF executes your workflow tasks, it "checkpoints" its status to disk. That way, if the entire environment crashes, WWF can resume where it left off when things are rebooted. If you need this, it's a legitimate reason to head straight for workflow. And for a very long-running task with multiple steps _that might well be interrupted, _this would drive me right to workflow every time. - -### You need to perform a task that combines steps which can be run in parallel with those which must be run sequentially - -This is really a unique workflow thing, and one that isn't listed in the help files. Workflow can designate specific chunks - _activities_ is the term workflow uses - that contain commands which must be run in a strict sequence, and designate other chunks to be run in parallel, in any particular order. This can massively improve performance, and is one of the main advantages that would push me to use workflow over an ordinary script. - -## Features vs. Drivers - -For me, this discussion is about workflow _features_ - things it can do - versus workflow _drivers_ - reasons you'd use workflow and workflow alone. My last two points - checkpointing and persistence, along with parallel/sequential mixing - are the main workflow _drivers_ for me. The ability to target multiple machines is a _feature; _something I can do with workflow once I've decided to use it. -To be fair, I'm simplifying things a bit. Workflow's ability to target multiple machines in parallel may be more robust that remoting's ability to do so; I haven't tested that. Under the hood, though, I know that workflow _relies on remoting_ for communications, so I suspect the two would perform similarly. - -## Hey, I Think Workflow is Cool! - -Don't get me wrong. As I've outlined above, there are definitely reasons I'd choose to use workflow. But those aren't necessarily the reasons given by the help file. While I appreciate the time and effort Microsoft has put into workflow, I think they're a wee bit over-enthusiastic when suggesting that "you should use a workflow when you have a task that combines multiple steps in a sequence." Workflow is a challenging technology, with a fairly steep learning curve. As yet, troubleshooting and debugging tools are scant. I'll stick with simpler mechanisms when they meet my needs - and aim for workflow when I need some of the amazing things that it alone can do for me. -My concern with the help files is that they could drive relative newcomers to workflow by giving them the impression that it was the only way to achieve some of those things, or was the preferred way of achieving them. Those newcomers could easily be intimidated by workflow (heck, I still am), and just walk away from PowerShell entirely, not realizing that there were other, simpler ways of "performing a task that runs on multiple devices." Help files like this should provide direction and guidance... and I just think in this case that the guidance oversells workflow a teeny bit. -I've sent a longer, more detailed version of this feedback to Microsoft as well. Perhaps the help files can evolve over time (hey, that's why PowerShell v3 has updatable help!) to provide better, more accurate guidance on when you _should_ use workflow over some other approach. diff --git a/content/articles/2012-09-09-powershell-summit-im-feeling-lucky-tickets-on-sale-400-each.md b/content/articles/2012-09-09-powershell-summit-im-feeling-lucky-tickets-on-sale-400-each.md deleted file mode 100644 index f22efc980..000000000 --- a/content/articles/2012-09-09-powershell-summit-im-feeling-lucky-tickets-on-sale-400-each.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "PowerShell Summit: 'I'm Feeling Lucky' Tickets on Sale, $400 Each" -authors: - - Don Jones -date: "2012-09-09T22:55:29+00:00" -categories: - - Announcements - - Events - - News - - PowerShell for Admins -aliases: - - /2012/09/powershell-summit-im-feeling-lucky-tickets-on-sale-400-each/ ---- - -That's right, for just $400 you can guarantee yourself a seat at the PowerShell Summit North America 2013, to be held at Microsoft's campus in Redmond, WA. Just 10 tickets will be made available at this low-low-low price, which is $150 off the normal registration rate. -Why so low? Why are they called "I'm Feeling Lucky" tickets? Because while we're committed to an April 2013 date, we haven't actually locked in dates with Microsoft, yet. So to purchase these, you've got to be feeling flexible... or lucky! -But it's not a marriage. The tickets are completely refundable, up to 30 days prior to the event. So if we manage to lock in the three dates _you can't attend,_ we'll give you your money back. You can also transfer the ticket to someone else, at any time (although they'll be paying you directly for the ticket, and we won't get involved in that transaction). -Once these sell out, or we lock in our dates, we'll commence the Early Bird period, with a rate of $475 and just 30 tickets available. That rate will be good through the end of December, unless we sell out. Full rate of $550 kicks in after that, when we'll sell the remaining tickets to fill our roughly 100-person venue. -Thinking about presenting? Start [submitting topics in the Forums][1]! You can get all the other juicy details on the [Summit's dedicated site][2], and catch the [Summit's Twitter feed][3] for ongoing announcements. - - [1]: https://powershell.org/discuss/viewforum.php?f=21 - [2]: http://powershellsummit.org - [3]: http://twitter.com/PSHSummit diff --git a/content/articles/2012-09-10-own-a-piece-of-the-community-buy-shares-in-powershell-org-inc.md b/content/articles/2012-09-10-own-a-piece-of-the-community-buy-shares-in-powershell-org-inc.md deleted file mode 100644 index d10b8862d..000000000 --- a/content/articles/2012-09-10-own-a-piece-of-the-community-buy-shares-in-powershell-org-inc.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "Own a Piece of the Community: Buy Shares in PowerShell.org, Inc.!" -authors: - - Don Jones -date: "2012-09-10T17:35:16+00:00" -categories: - - Announcements -aliases: - - /2012/09/own-a-piece-of-the-community-buy-shares-in-powershell-org-inc/ ---- - -When Kirk Munro and I set this site up, and started redirecting traffic from the old PowerShellCommunity.org, one of our main goals was to make this a truly _community-owned_ resource. We wanted it hosted independently (my company, Concentrated Tech, is being paid to host the site, so we get pretty good service and total control). We didn't want to be beholden to anyone's commercial interests or whims (companies do get distracted by their real jobs from time to time, after all). -When we started talking to Microsoft about holding a [PowerShell Summit][1], we wanted that to be community-owned too, and not tied to a commercial interest - in part so that we could keep the price low, but also so that Microsoft would be able to support us without getting into any possible conflicts of interest with any of its ISV partners. -Today, our intention becomes legally realized. PowerShell.org., Inc., a Nevada corporation, is born - and we're offering ownership shares to help raise capital. This capital will be used to pay for necessities like bookkeeping, and also to help bootstrap the Summit event. Shareholders are _legal owners of the corporation, _and will vote for its Board of Directors - who in turn appoint the Officers that make things happen. Our first Board will consist of [myself][2], [Kirk][3], [Jeffery Hicks][4], [Richard Siddaway][5], and [Jason Helmick][6]. -**Want to become a community owner? **You'll want to start with our "Shareholder Brochure," which is available in [the new "PowerShell.org, Inc." forum][7] on this site. That forum will also get you our Bylaws and Articles of Incorporation; the Brochure will outline the purpose of the corporation, and explain what it means to be a shareholder. The forum also contains the Share Purchase Order form, which you can use to purchase shares, and contains documents that outline our initial Board of Directors and Officer lineup and other important details. - -> **Cool tip:** Shareholders get access to a special forum on PowerShell.org to discuss company business, are eligible for an @powershell.org e-mail address, and may receive a discount to the [PowerShell Summit North America 2013][1]. In fact, if you're planning to attend, you can add $100 worth of stock to your event registration for just $75 (plus card fees), instantly giving you your $25 discount! - -We hope you'll give serious consideration to supporting this community effort, and to finally - about six years after PowerShell's introduction - help us realize our dream of creating a truly community-owned online resource, educational event, and more. We have created [a set of forums on PowerShell.org for discussion and Q&A about this corporation][8], so if you have any questions, we encourage you to turn there for your answers. -Although the corporation will not be publicly-traded in the sense of appearing on a stock market, we do intend to make as much of its business as possible completely open and transparent. To that end, we'll use this blog to periodically announce the availability of public documents (as we create them), along with shareholder meetings and other important events. Just look for items in the "Inc." category of the blog. We'll also use the [Forums][8] as a repository for various documents, so that you can always find them easily. -**What do you get by being an owner?** Well, a vote (one per share owned) for the Board of Directors makeup. The aforementioned $25 discount to the PowerShell Summit. An @powershell.org e-mail address or forwarding alias, if you want one. And a chance to help us create a truly independent, group-driven entity that's owned not by any one person, but by all of us together. -Thanks for joining. - - [1]: http://powershellsummit.org - [2]: http://donjones.com - [3]: http://twitter.com/poshoholic - [4]: http://twitter.com/jeffhicks - [5]: http://twitter.com/rsiddaway - [6]: http://twitter.com/thejasonhelmick - [7]: https://powershell.org/discuss/viewforum.php?f=26 - [8]: https://powershell.org/discuss/viewforum.php?f=25 diff --git a/content/articles/2012-09-11-powershell-summit-best-conference-deal-ever.md b/content/articles/2012-09-11-powershell-summit-best-conference-deal-ever.md deleted file mode 100644 index 2ffc10116..000000000 --- a/content/articles/2012-09-11-powershell-summit-best-conference-deal-ever.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "PowerShell Summit: Best Conference Deal Ever!" -authors: - - Don Jones -date: "2012-09-11T11:55:39+00:00" -categories: - - Announcements - - Events - - News -aliases: - - /2012/09/powershell-summit-best-conference-deal-ever/ ---- - -What's the average tech conference cost these days? $1500? $2000? And that's just to get in, to say nothing of hotel, air, food, and whatnot. -The [PowerShell Summit North America 2013][1] has an idea. Lets do a community-owned event, with a goal of breaking even and supporting an annual event, but not worry about a profit. -Lets say you live in the US. A ticket to Seattle in April will run you $500-700 after taxes. Maybe less if you can get on a discount carrier like Southwest - they fly to SEA. Hotel will run you under $450 for three nights. Say you decide to splurge on a car for four days, probably for under $200 (including all the ridiculous taxes on rental cars). Toss in another $250 for food? That takes you to under $1600. PowerShell Summit only costs $550 - less if you register during one of the Early Bird tiers; as low us $450, in fact. That's $2100-2200 total, or just a bit over what some conferences charge for their registration fee alone! -What about quality? Well, you'll get the same food Microsoft employees get. So that can't be all bad. You'll attend sessions delivered by Microsoft product team members, along with independent experts. You'll interact directly with PowerShell team managers, too, in a small-event format that lets you provide product feedback directly to them. Heck, with under 100 fellow attendees, you'll get plenty of face time with everyone. -It's going to be a great event, and it will definitely be affordable. It's being run by members of the community, not a conference company. This will hopefully become OUR event, an annual gathering of PowerShell enthusiasts, experts, and team members. A chance to network, to learn, to share, and to grow. -I hope you'll be able to join us! - - [1]: http://powershellsummit.org diff --git a/content/articles/2012-09-13-powershell-summit-north-america-2013-call-for-content.md b/content/articles/2012-09-13-powershell-summit-north-america-2013-call-for-content.md deleted file mode 100644 index f18c9a8ca..000000000 --- a/content/articles/2012-09-13-powershell-summit-north-america-2013-call-for-content.md +++ /dev/null @@ -1,213 +0,0 @@ ---- -title: PowerShell Summit North America 2013 Call for Content -authors: - - Kirk Munro -date: "2012-09-13T18:04:53+00:00" -aliases: - - /2012/09/powershell-summit-north-america-2013-call-for-content/ ---- - -In case you haven"™t heard already, there is a great opportunity to learn a lot more about PowerShell coming up next year.  It"™s the PowerShell Summit North America 2013 conference, and it is held on Microsoft campus in Redmond, WA from April 22 to 24, 2013.  This conference is run by the PowerShell.org community, and it will present a ton of deep technical content on anything to do with PowerShell.  What content will be covered, you ask?  Well, that"™s up to you. - -We are now accepting content proposals from anyone who wants to present at this conference.  All you need to do to submit your session proposals is to add a new topic to the [Session Submissions forum on PowerShell.org][1] for each session you want to present. - -#### Who can present? - -Anyone who has something to share with other PowerShell experts and enthusiasts that will help them learn more about PowerShell can propose a topic they would like to present at this conference.  There will be a survey shared with the community that allows them to vote for the sessions they want to see, so ultimately the community will decide who can present at this conference.  Note that when reviewing the community results, the conference organizers reserve the right to make some modifications to the sessions that are selected to balance the topics that are discussed and to be able to better accommodate speakers who are offering to present multiple sessions. - -#### What topics will be discussed? - -There will be around 100 PowerShell experts and enthusiasts at this conference, including some PowerShell MVPs, some non-PowerShell MVPs, and some members of the PowerShell team. - -At a conference like this they will be looking for advanced sessions that show them deep technical content on various aspects of PowerShell as well as real-world practical applications of PowerShell.  They"™ll likely want to learn more about workflow, remoting, CIM, and many other technologies used by PowerShell.  They"™ll also likely want to learn about how PowerShell is used in practice with PowerShell extensions like PowerCLI to manage vSphere deployments at Scale, or how PowerShell is being used with multiple technologies (SharePoint, System Center Orchestrator, Exchange, NetApp, Active Directory, etc.) to deal with the real-world management challenges that exist in enterprise organizations.  These are just some examples of the topics that might be discussed in sessions at this conference.  It is important to note that no presentations will include any NDA information.  As mentioned, topics will be voted on by the community and then those results will be reviewed by conference organizers to come up with the final list of topics that will be presented at the conference. - -Please keep in mind that there will be two tracks for this event: one will have the content with the deepest technical depth, and another will have real world and more intermediate to advanced level content.  With two tracks, you really shouldn"™t be shy about submitting sessions if you think you might have something to add.  Chances are, if you"™ve been using PowerShell for a while and if you continue to use it very regularly, you probably have knowledge and experience that you can share with others.  Don"™t worry about which track your session will ultimately fall in.  The conference organizers will figure those details out as part of their agenda planning. - -#### - -#### Where will the conference be held? - -The conference will be held on Microsoft campus in Redmond in buildings 40 and 41 from April 22 to 24th, 2013. There may be additional activities surrounding the conference, but the core sessions will be April 22, 23 and 24. - -#### When can I submit a proposal? - -You can submit a proposal now.  Simply post your proposal as a new topic on the [Session Submissions forum on PowerShell.org][1] for any sessions that you want to present.  Session proposals will be accepted on that forum until October 14, 2012 at midnight PST (take note of that date!).  Once that deadline is met, on October 15, 2012 we will publish a list of all proposals with a voting system that will allow community members to vote for their favorite sessions.  Votes will be accepted over a 2 week period, and the week of October 29th the conference organizers will review the votes and sessions and put together the list of accepted sessions, contact speakers for confirmation, etc. - -We strongly encourage you to submit multiple session proposals so that you increase your chances of having a session accepted.  Note that you can submit a proposal even if a related session has already been proposed by someone else.  In fact, if you want to present multiple sessions, I would encourage you to submit the sessions that you want to present, without holding back if a similar session is already proposed.  There are advantages to presenting multiple sessions (see below), and the community will indicate what they want to see in the end anyway. - -If you will be attending the conference whether you have a session proposal accepted or not, you should buy your conference ticket as soon as possible to take advantage of the early bird pricing.  If you can only attend this conference if you have enough proposals accepted to cover the bulk of your expenses (see below for details on the benefits of being a presenter), you should submit your sessions now regardless and once the session review process is completed, conference organizers will contact you to make sure you are able to commit to attending and presenting at the conference.  You can also fire me a note if you want to make me aware ahead of time that you can only attend if you have at least 3 sessions accepted, either using my [contact me][2] form or via email (on gmail or hotmail, either works, using the nickname I use on this blog as the user id). - -#### Why should I submit a proposal? - -Personally speaking, I find presenting information that has been learned through hard work to be very rewarding.  I also find receiving information that others have learned through their hard work to be very rewarding as well.  It"™s all about the community participation and sharing of knowledge.  Aside from being proud of your work and sharing it with others, there are more tangible benefits for speakers with accepted sessions as well. - -For every session proposal that is accepted (voted high enough by the community and accepted in the final review by the conference organizers), speakers will receive a $300 travel stipend as well as up to $200 to offset 1/3 of their registration cost.  That means someone presenting 3 sessions will receive $900 that they can use towards their travel expenses and a full refund of their registration fee.  This should make it much clearer why it is advantageous to submit multiple session proposals. - -One last reason why you should submit a proposal: the value of the conversation that comes with an event like this is extremely high.  You"™ll be able to talk to others about your challenges and ideas, learn from their efforts, perhaps find people you want to work with on various community projects, etc.  It"™s the networking alone that drives me to attend events like this. - -#### How do I write a proposal? - -Each proposal you enter must include three pieces of information: - - * a title for the session you are proposing, - * your full name, and - * a 1-2 paragraph description of what the session will contain. - -You must create one topic per proposal.  Don"™t put all of your sessions on one topic, and don"™t reply to current topics when creating proposals, please. - -In general when planning your proposal, focus on content that will come with more demos, and less on slide-heavy content.  This is a conference for experts and enthusiasts who are looking for deep technical content on PowerShell-related topics in interactive sessions.  With this crowd, rich, demo-focused sessions will be preferred over slide-heavy sessions. - -You should also review some of the proposals that are already submitted as examples.  Keep in mind that the sessions are 35 minutes long with 10 minutes of Q&A at the end (although questions often come up during the sessions at an event like this).  35 minutes may seem like a lot of time, but it goes by quickly, especially when doing demos. - -#### Summary - -That"™s a lot of information, so here is a summary of the essential points along with links to additional information. - - - - - Conference Title - - - - PowerShell Summit North America 2013 - - - - - - Conference Website - - - - [http://powershellsummit.com](http://powershellsummit.com/) - - - - - - Conference Dates - - - - April 22-24, 2013* - - - - - - Location - - - - Microsoft Campus, Buildings 40 and 41, Redmond, WA - - - - - - Session Proposal Forum - - - - [https://powershell.org/discuss/viewforum.php?f=22](https://powershell.org/discuss/viewforum.php?f=22) - - - - - - Session Proposal Deadline - - - - October 14, 2012 at midnight PST - - - - - - Session Voting Period - - - - October 15, 2012 to October 28, 2012 - - - - - - Final Tally and Processing - - - - The week of October 29, 2012 - - - - - - Sessions Announced - - - - As soon as possible after October 29th, once the final tally and processing is done and accepted presenters have confirmed their sessions - - - - - - Forum for Conference- and Session-Related Questions - - - - [https://powershell.org/discuss/viewforum.php?f=20](https://powershell.org/discuss/viewforum.php?f=20) - - - - - - Speakers Page - - - - [https://powershell.org/summit/speak.php](https://powershell.org/summit/speak.php) - - - - - - Conference FAQ - - - - [https://powershell.org/summit/faq.php](https://powershell.org/summit/faq.php) - - - - - - Best location to ask PowerShell questions and to help the community with answers - - - - [https://powershell.org](https://powershell.org/) - - - - -* With a high probability for a short, half-day event adjacent to this. - -I look forward to reading your session proposals! - -Thanks, - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerShell.org](http://technorati.com/tags/PowerShell.org),[PowerShell Summit](http://technorati.com/tags/PowerShell+Summit) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/812/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/812/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=812&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: https://powershell.org/discuss/viewforum.php?f=22 - [2]: http://poshoholic.com/contact-me/ diff --git a/content/articles/2012-09-15-pscx-2-1-and-3-0-release-candidates-posted.md b/content/articles/2012-09-15-pscx-2-1-and-3-0-release-candidates-posted.md deleted file mode 100644 index 8d6b4c69d..000000000 --- a/content/articles/2012-09-15-pscx-2-1-and-3-0-release-candidates-posted.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: PSCX 2.1 and 3.0 Release Candidates Posted -authors: - - Keith Hill -date: "2012-09-16T02:45:47+00:00" -aliases: - - /2012/09/pscx-2-1-and-3-0-release-candidates-posted/ ---- - -Oisin and I have been busy prepping the PowerShell Community Extensions to support Windows PowerShell 3.0. With this release, we are providing two packages. There is a [Pscx-2.1.0-RC.zip][1] that is xcopy deployable just like PSCX 2.0. Just remember to unblock the ZIP before extracting it otherwise you"™ll get errors when you try to import the module. Pscx 2.1 can be used to target both Windows PowerShell 2.0 and 3.0. In order to do this, Pscx 2.1 is still compiled against .NET 2.0 and it can"™t take advantage of any Windows PowerShell 3.0 specific features. - -The second package is [Pscx-3.0.0-RC.msi][2]. This is a traditional Windows installer package. The benefit of using an MSI is that the user doesn"™t have to worry about unblocking the file before installing it. The MSI file is also Authenticode signed with an extended validation code signing certificate so it should make it past Windows 8 SmartScreen. I"™d like to extend a big thanks to [DigiCert][3] for graciously donating the EV code signing certificate to us. - -INSTALLATION NOTE: the WiX-based installer modifies the PSModulePath environment variable but the modification doesn"™t always seem to be in effect after installation. If Import-Module Pscx "“RequiredVersion 3.0.0.0 fails to load PSCX, import the module by path (C:\Program Files (x86)\PowerShell Community Extensions\Pscx3\Pscx\Pscx.psd1) until you get a chance to reboot. After that, you shouldn"™t have to specify the path. - -Another aspect of Pscx 3.0 is that it is compiled against .NET 4.0 and takes advantage of some features specific to Windows PowerShell 3.0. Over time, we will focus our new feature efforts on the Pscx 3.0 branch. - -### PSCX 2.1 and 3.0 Side-by-Side Support - -With this release, you can install Pscx 2.1 and 3.0 side-by-side. Note however that if you xcopy install Pscx 2.1 into your user"™s Modules directory, PowerShell will find that version of Pscx before the 3.0 version. In order to ensure you load a specific version of Pscx, use the "“RequiredVersion parameter on Import-Module e.g. - - -`Import-Module Pscx -RequiredVersion 3.0.0.0 -`### Support for AllSigned Execution Policy - -Each of the two packages above (2.1 and 3.0) supported execution in an AllSigned environment. All of the script files (\*.ps1, \*.psm1 and *.ps1xml) have been signed. Of course, this means you can"™t modify these scripts (i.e. to fix bugs) and still run them AllSigned. - -### New Features - -There are not a lot of new features in this release but there are a few handy additions including: - - * Get-Parameter "“ thanks to Jason Archer for contributing this great way to visual a command"™s parameter information. - * Import-VisualStudioVars "“ for developers who like to spend their time in PowerShell instead of cmd.exe, this function takes care of importing the build environment for the specified version of Visual Studio. The 2008, 2010 and 2012 versions of Visual Studio are supported. - * Start-PowerShell "“ a wrapper for PowerShell.exe that utilizes the PowerShell parameter parsing engine to make invocation of various flavors of PowerShell (from PowerShell obviously) easier. While testing the AllSigned support I used this command a lot: -`Start-PowerShell -NoProfile -ExecutionPolicy AllSigned -Version 2 -`* Get-ExecutionTime "“ since PowerShell 2.0, the HistoryInfo object for a command has included both the StartExecutionTime and the EndExecutionTime. This command makes it easy to see the total execution time for any command e.g.: - - -`C:\PS> Get-ExecutionTime - Id ExecutionTime HistoryInfo - -- ------------- ----------- - 1 00:00:02.9919258 Get-ChildItem C:\Windows\System32 - 2 00:00:00.2650339 Get-Process - 3 00:00:00.2499424 Get-Service -`### Bug Fixes - -Oisin spent a good deal of time fixing issues in the Read-Archive and Expand-Archive cmdlets. We updated the version of 7z that we are using (to 9.x) and modified the cmdlets to use [SevenZipSharp][4]. I also fixed a number of bugs in Invoke-Elevated (alias su), Set-Writable, Edit-File and type accelerators breaking on PowerShell 3.0. - -As you use these release candidates please report any issues to the [Pscx CodePlex project][5]. Thanks for supporting Pscx! - -[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/271/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/271/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=271&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) - - [1]: http://pscx.codeplex.com/releases/view/93945 - [2]: http://pscx.codeplex.com/releases/view/94637 - [3]: http://www.digicert.com/ - [4]: http://sevenzipsharp.codeplex.com/ - [5]: http://pscx.codeplex.com/workitem/list/basic diff --git a/content/articles/2012-10-10-10042012-meeting-summary-and-presentation-materials.md b/content/articles/2012-10-10-10042012-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 7e9344a11..000000000 --- a/content/articles/2012-10-10-10042012-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: PhillyPoSH 10/04/2012 meeting summary and presentation materials -authors: - - John Mello -date: "2012-10-10T13:08:07+00:00" -aliases: - - /2012/10/10042012-meeting-summary-and-presentation-materials/ ---- - -Our inaugural meeting was as follows: - - 1. 10 minute demo from [MVP Systems][1] about how [JAMS Scheduler works with PowerShell][2] - 2. Presentation on what Remoting is and how it works - 1. See the [zip file][3] in the post for the PowerPoint with speaking notes - 3. Pizza break! - 4. Live remoting demo - 1. See the zip file in the post for a text file of the PowerShell demo - -On the topic of deploying a GPO to set your script execution policy, [Bhargav Shukla][4] from the [Philadelphia Exchange User Group][5] brought to our attention [KB2467565][6] which address the following issue:   "You cannot install an update rollup for Exchange Server 2010 with a deployed GPO that defines a PowerShell execution policy for the server to be updated". So if you do set the script execution policy through group policy don"™t apply it to your Exchange 2010 servers! -Meeting materials zip file: [PhillyPosh_2012-1004][3] - - [1]: http://www.jamsscheduler.com/ - [2]: http://www.jamsscheduler.com/PowerShell.aspx - [3]: https://powershell.org/wp-content/uploads/2012/10/PhillyPosh_2012-1004.zip - [4]: http://www.bhargavs.com/ - [5]: http://www.ehlougphila.com/ - [6]: http://support.microsoft.com/kb/2467565 diff --git a/content/articles/2012-10-15-session-voting-for-the-powershell-summit-north-america-2013.md b/content/articles/2012-10-15-session-voting-for-the-powershell-summit-north-america-2013.md deleted file mode 100644 index ac6cb82ce..000000000 --- a/content/articles/2012-10-15-session-voting-for-the-powershell-summit-north-america-2013.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Session Voting for the PowerShell Summit North America 2013 -authors: - - Don Jones -date: "2012-10-15T16:09:43+00:00" -categories: - - PowerShell for Admins -aliases: - - /2012/10/session-voting-for-the-powershell-summit-north-america-2013/ ---- - -Voting is open! -As you know, the **PowerShell Summit North America 2013** is coming in April 2013, and we're relying on **you** to tell us what sessions you'd like to see there. We've already accepted dozens of proposed sessions, and we're ready for you to vote. -[Go ahead and take the survey now.](http://674004.polldaddy.com/s/powershell-summit-na-2013-session-voting) (opens in a new window/tab) -While voting, you can technically choose as many sessions as you want - but remember that we can't present them all, so try to pick no more than 20 sessions as your "favorites." Also note that the Summit will include additional, to-be-announced sessions presented by Microsoft employees and PowerShell product team members. -You can [read the session proposals' descriptions in our forums](https://powershell.org/discuss/viewforum.php?f=22); we suggest having that open in another window right next to the survey itself. That way, you can read through the abstracts, decide if you like a session, and vote on it in the survey. Sorry for having the information in two places - we're gonna work on something cleaner for 2014 ;). -**You have until midnight October 28th, 2012, to vote. **And if you're asking, "midnight in what time zone," then we suggest you stop procrastinating and vote already!!! diff --git a/content/articles/2012-10-15-voting-for-the-2013-powershell-summit-sessions-is-now-open-2.md b/content/articles/2012-10-15-voting-for-the-2013-powershell-summit-sessions-is-now-open-2.md deleted file mode 100644 index f693fa363..000000000 --- a/content/articles/2012-10-15-voting-for-the-2013-powershell-summit-sessions-is-now-open-2.md +++ /dev/null @@ -1,1421 +0,0 @@ ---- -title: Voting for the 2013 PowerShell Summit sessions is now open! -authors: - - Kirk Munro -date: "2012-10-16T03:29:25+00:00" -aliases: - - /2012/10/voting-for-the-2013-powershell-summit-sessions-is-now-open-2/ ---- - -Voting is now open! - -As of this morning you can vote for the sessions that you want to see at the 2013 PowerShell Summit!  We have 97 session proposals (see below), plus additional content from the PowerShell Team.  Your vote is really important, so please take some time to indicate what you would like to see from a PowerShell-specific conference with deep technical depth. - -Here"™s what you need to do: - -1. **Open** the [voting survey][1] in a new tab or window (this link will automatically open in a new window). - -2. **Review the list of proposed sessions** side by side with the table below.  The table below contains the titles, descriptions, and presenter details for every proposal that is in the survey.  This should save you a ton of time when you"™re trying to identify the sessions that you want to see. - -3. **Pick your top 20 sessions** that you would like to see at this conference.  There will be more than 20 sessions, but if everyone sticks to voting for their top 20 we"™ll get a good distribution in the survey and it will provide a better sample of what everyone wants to see. - -Once you"™ve done that, then just sit back and wait until we announce the official agenda after **voting closes on midnight, October 28, 2012**.  That gives you 2 full weeks to vote for what you would like to see.  Once voting closes, myself and other conference organizers will review the votes, coordinate with speakers, include additional content from the PowerShell team, and build an agenda for the conference.  Building the agenda and confirming with presenters will take a little time, so don"™t expect to see it posted the morning of October 29.![Smile](http://kirkmunro.files.wordpress.com/2012/10/wlemoticon-smile.png?w=595) - -Here are the session proposals that you can choose from: - - - - - Title - - - - Description - - - - - - How VMware does PowerShell - - - - Presented by: Alan Renouf - - - - - Learn the top 5 things VMware does in PowerShell that is different to anything you have seen before, see how a 3rd Party can take the awesome sauce of PowerShell and add their own flare. This session will show you some cool features of VMware's PowerShell snapin (PowerCLI) and show how VMware became the largest PowerShell community outside of Microsoft. This session is relevant to anyone who uses PowerShell as it will show the key features VMware included in their snapin and the benefits these give to system administrators. - - - - Creating a complex and reusable HTML reporting structure - - - - Presented by: Alan Renouf - - - - - In this session I will show you the shortcuts and tricks picked up when creating a complex reporting structure with PowerShell, how a simple HTML output script grew to be a reporting structure which can adapt to give detailed, nicely formatted reports on any application or system that has a PowerShell interface, and even some that don't! - - - - Creating Add-on Tools for PowerShell ISE - - - - Presented by: Kirk Munro - - - - - PowerShell 3 includes a ton of improvements to the integrated scripting editor, PowerShell ISE. As great as PowerShell ISE is in this version, there is still a lot of room for improvement. Fortunately, Microsoft anticipated that they wouldn't be able to do everything, so they extended their support for creating Add-on Tools for PowerShell ISE. - - - - - - In this session, the worlds first self-proclaimed Poshoholic and PowerShell MVP Kirk Munro will provide a soup to nuts demonstration of PowerShell ISE Add-on Tools, showing how you can create everything from simple menu extensions to feature rich windows that respond to ISE events and that are docked right inside of the ISE. - - - - - - Technologies covered in this session include the PowerShell ISE object model, C#, WPF, eventing, Visual Studio 2012, and of course several core PowerShell features. - - - - Workflow Walkthrough - - - - Presented by: Don Jones - - - - - It seems like everyone's interested in v3′s new Workflow feature, so let's do a quick walkthrough of building one from scratch. We'll skip the usual "provisioning" example and go for something a bit more constrained, and perhaps real-world, where workflow's unique features can really be put to solid use. This'll also be an opportunity to discuss what workflow can and can't do, and discuss some of the options and permutations of using it. - - - - Remoting Configuration Deep Dive - - - - Presented by: Don Jones - - - - - What do you do when Enable-PSRemoting isn't enough? Dig deeper. We'll run through all of the major configuration scenarios, including how to use (and not abuse) TrustedHosts, how to set up an HTTPS listener (and use it), how to do non-domain authentication, how to enable CredSSP and configure it to be less than a major security hole, and more. Pretty much every possible Remoting config, we'll cover. With detailed, step-by-step instructions! - - - - Remoting Security Smackdown - - - - Presented by: Don Jones - - - - - You know you want to turn on Remoting. Heck, Win2012 turns it on for you and can't be managed without it! But your "Security Guys" are freaking out, which is odd, because they don't seem to mind RDP. So we'll run through every single aspect of Remoting security: Mutual authentication. Auditing. Authentication. Delegation. Impersonation. Double-hop. Triple-hop. CredSSP. Kerberos. SSL. Everything. You bring the security guys' questions, we'll get you the most accurate answers possible to take back with you. - - - - Delegated Administration via Remoting and GUI - - - - Presented by: Don Jones - - - - - It's an age-old problem: You want to set up some of your users to perform some basic task, but you don't actually want to give them permissions to do it, and you certainly don't want to give them the MMC necessary to do it. Thanks to Remoting and a little WinForms action, that's no problem. We'll walk through how to set up a constrained Remoting endpoint that can run a highly limited set of predefined commands, and that runs them under alternate credentials. Then we'll build a simple GUI app, suitable for end-user consumption, that utilizes the endpoint to accomplish the task. It's the perfect way to build end-user tools, help desk utilities, and more! - - - - Building Self-Service Web Tools with PowerShell - - - - Presented by: Don Jones - - - - - We all want to make our lives easier... and often, that means giving users self-service tools to accomplish specific tasks. Deploying those tools can be a pain in the next, though, unless you can create them as a Web page. After all, a Web server provides a centralized platform. In this session, we'll look at a couple of ways of building self-service Web pages. One, using /n software's tool that lets a .PS1 become a Web page, and another in building a simple ASP.NET page that hosts PowerShell's engine. - - - - Help for Help: A Help Authoring Deep Dive - - - - Presented by: June Blender, Senior Programming Writer, Windows PowerShell Team - - - - - A comprehensive 400-level talk for module authors about authoring techniques for all types of Windows PowerShell Help, including About help and help for all command types, including cmdlets (and the MAML schema), scripts, functions, CIM commands, workflows (script and XAML), providers (including custom cmdlet help), and snippets. What you can and cannot do, and what's worth doing when time and resources are short. We'll cover online help, Updatable Help, and all the gotchas (HelpInfo XML, HelpInfoUri, HelpUri, CHMs), and I'll share the scripts that I use to generate help files and verify the accuracy of parameters, parameter values, parameter attributes, GUIDs, and URIs. - - - - Practical PowerShell Integration from Bare Metal to the Cloud - - - - Presented by: Alan Renouf - - - - - See how PowerShell can be used as the glue of the datacenter, take information from VMware, Cisco and Microsoft, Glue them all together and go from bare metal up to the cloud and beyond. Learn how PowerShell is now expanding to be the language of choice and how Microsoft and third party products can be tied together to create fantastic solutions. - - - - PowerShell for the Security Professional - - - - Presented by: Carlos Perez - - - - - How can PowerShell be leveraged by the security professional doing Incident Response, Penetration Testing (Enumeration and Post-Exploitation) or performing an audit. The presentation will cover how PowerShell can be used to gather volatile information during an incident response, what cmdlets and technologies work best to gather the proper info and alter the least the system state. Use PowerShell to help in the documentation of the integrity of the results gathered. For the Pentester how to use PowerShell to write enumeration tools leveraging .Net and use PowerShell in post-exploitation running PowerShell in Shell,Leveraging Metasploit PowerShell mixing for running scripts to gain further foothold on target systems, escalate privileges and log all keystrokes on a target. - - - - PowerCLI and vSphere API integration - - - - Presented by: Luc Dekens - - - - - The PowerCLI snapin is used to manage and automate your VMware vSphere and vCD environments. One of the strengths of the PowerCLI snapin from day 1 is it's ability to flawlessly integrate with the rich API ecosystem vSphere and vCD offer. A byproduct of this tight API integration is the ability to scale your automation scripts for bigger environments. This session will show how it's done, how you can use it and how easy it is. - - - - PowerCLI and performance reports - - - - Presented by: Luc Dekens - - - - - The VMware vSphere environment provides many performance metrics to see what is going on inside. You can use these metrics for problem solving, performance reports and capacity planning. This session will explain how to tackle the collection and handling of these performance metrics. It will also show all the possibilities you have to present your data in a meaningful way. There will be some math and statistics involved, but that' should be no problem for PowerShell and the average administrator. - - - - PowerCLI automates the lifecycle management of your VM - - - - Presented by: Luc Dekens - - - - - With VMware's PowerCLI snapin it is easy to automate the complete lifecycle management of your VMs. This sessions will show how this is done. With the available cmdlets you can create, configure, administer and remove any VM. Needless to say that the session will discuss the best practices. But it will also show some lesser known tricks to get your VMs in exactly the state you want them to be. And you'll learn how you can produce meaningful reports at every step of the way. In short, "The Automated Life of a VM". - - - - PowerShell and Source Control for the IT Pro - - - - Presented by: Andy Schneider - - - - - Are you ever concerned about updating a script, having it break, and can't remember what you changed. This is source control by an IT Pro for IT Pros. Come check out some best practices and lessons learned on how to incorporate source control as part of writing scripts. Learn how to have your code available via the web and easily accessed on multiple machines. We'll take a look at using GIT to ensure your code is always up to date and you can always get back to where you were if you break something. - - - - PowerShell and Active Directory - - - - Presented by: Andy Schneider - - - - - This session will provide a quick overview of different options to manage AD using PowerShell. It will quickly jump into some of the shortcomings of the MSFT provided Active Directory module and how to work around them, and even "fix" them using proxy functions and the new Default Parameter Set feature in V3. - - - - Disconnected Sessions: How they work. How they'll work for you - - - - Presented by: Paul Higinbotham, Software Development Engineer, Microsoft and June Blender, Senior Programming Writer, Windows PowerShell Team - - - - - An in-depth talk for script authors and IT professionals interested in learning how to disconnect from live remote sessions and reconnect to those sessions later from an arbitrary client machine. What you can and can't do with disconnected remote sessions, how remote sessions can be automatically disconnected because of network problems, how to query remote machines for available sessions you can connect to, and how to use disconnect session options. - - - - - - Paul Higinbotham, the developer who coded the feature, and June Blender, Windows PowerShell programming writer, describe the design and architecture of disconnected sessions and explain how session information is retained and disconnected sessions are reconnected. We will cover the details of several remote session disconnect scenarios using the new and modified cmdlets for this feature and demonstrate how to use them. - - - - PowerCLI: how to run PS scripts inside the VM's guest OS - - - - Presented by: Luc Dekens - - - - - You can use PSRemoting to run PowerShell scripts inside the guest OS of your VM. But what to do when PSRemoting isn't possible or available ? Think for example of VMs in a DMZ or on a pvlan. This session will show some alternatives. Run scripts as part of the guest OS deployment, run scripts through the VMware Tools interface or use an external trigger, via the VMware Tools, to influence PS jobs scheduled inside the guest OS. - - - - CIM sessions - - - - Presented by: Richard Siddaway - - - - - The introduction of the CIM cmdlets and "cmdlets over objects" in PowerShell v3 provide new ways to work with WMI. In addition, they bring a new way to access remote systems ? CIM sessions. Analogous to PowerShell remoting sessions they provide a new flexibility when working with WMI and remote machines. This session will demonstrate: -- How to use CIM sessions against systems running PowerShell v3 -- How to work with legacy installations of PowerShell v2 -- How to use the available CIM session options to configure the session to meet your requirements -- Compare and contrast working with WMI, CIM and WSMAN cmdlets against remote machines to illustrate the strengths and weaknesses of each -- How to mix and match CIM sessions using WSMAN and DCOM. - - - - - - The key takeaways from this session will be: -- The CIM cmdlets provide a new way to access WMI -- WSMAN is required knowledge -- WSMAN and DCOM can both be used with the CIM cmdlets -- CIM sessions are easy to use and very powerful -- No more DCOM problems - - - - PowerShell and the Legacy - - - - Presented by: Sean Kearney - - - - - There is a belief that using PowerShell means rejecting the use of legacy environments like vbScript and Console applications. Some may also believe that just because they have an older system it is not possible to manage it with PowerShell Watch as the most Energized MVP, Sean Kearney takes you into a world of wonder where the old and the new Co-Exist. See possibilities you may not have considered before. - - - - - - Key take-aways: -- Interaction between modern day PowerShell and older apps -- Repurposing older tools as PowerShell cmdlets - - - - Tastes Great! Less Scripting! - - - - Presented by: Sean Kearney - - - - - The fight continues on. the argument between the great Lords above that PowerShell is a scripting Environment vs whether it is a Management console! Watch an Actual ITPro on Stage as he shows how he REALLY uses PowerShell in a day to day environment, from basic management and reporting needs, to building out a script to manage needed tasks Take aways Understanding that learning PowerShell does NOT mean a heavy reschooling. - - - - PowerShell and Hyper-V3 – Flying by the Seat of your Pants - - - - Presented by: Sean Kearney - - - - - Go hardcore. Or in this case FULL SERVER CORE 2012! Learn how you can fully manage a complete clustered Hyper-V core environment in Server 2012 from Creation of the Cluster to management of the Virtual machines including Site replication all without the GUI. - - - - - - Take aways? Be hard core and go CORE! - - - - Highway to PowerShell – The Story behind the Story - - - - Presented by: Sean Kearney - - - - - Ok this isn't Deep Dive and I don't expect anybody to PAY for this but I'm willing to talk about just HOW and WHY I turned into a musical Madman - - - - Authoring PowerShell like a Poshoholic - - - - Presented by: Kirk Munro - - - - - I've been using PowerShell for over 6 years. Blogging about it for over 5 years. Creating and managing products based on PowerShell for about that long as well, and writing a whole lot of scripts during the process. During this time I've come up with a trick or three to make that work easier. Some of these tricks are simple time savers, while others are ground breaking opportunities that just might change the way you write PowerShell. - - - - - - Come and join me in this session to get a bird's eye view at some of the work I've been doing with PowerShell, as I talk about tips, tricks, and best practices while demonstrating some of the extensions I've written specifically to make authoring with PowerShell easier to do. - - - - - - Topics discussed include proxy functions, WMI/CIM, Microsoft Office, DSVs, WiX, merge modules, type accelerators, and more. - - - - Introduction to the Storage Management API - - - - Presented by: Bruce Langworthy, Senior Program Manager, Storage and File Systems - - - - - SMAPI is what exposes the Storage module for Windows PowerShell. This session would be focused on providing some details on what it is, how it works, in which cases 3rd party drivers are required, and how it's surfaced as a PowerShell module. More information: This session is recommended as a background for the "Managing Storage with PowerShell" and "Managing Storage Spaces with PowerShell" sessions. - - - - Managing Storage with PowerShell - - - - Presented by: Bruce Langworthy, Senior Program Manager, Storage and File Systems - - - - - A dive into using the Storage module for Windows PowerShell to manage local storage, Storage Spaces, and array-based storage using PowerShell. More information: The focus of this session will be on the management of Disk, Partition, and Volume objects, with a brief overview of how this applies to Storage Spaces. - - - - Managing Storage Spaces with PowerShell - - - - Presented by: Bruce Langworthy, Senior Program Manager, Storage and File Systems - - - - - This topic will focus specifically on deploying, configuring, and managing Storage Spaces using PowerShell. More information: Will cover deployment of Storage Spaces from beginning to end using PowerShell, and focus on using PowerShell to manage Storage Spaces. The "Introduction to the Storage Management API" session is strongly recommended before attending this session. - - - - Managing the iSCSI Initiator and MPIO using PowerShell - - - - Presented by: Bruce Langworthy, Senior Program Manager, Storage and File Systems - - - - - This topic introduces users to the iSCSI and MPIO modules in Windows PowerShell on Server 2012, and discusses how to configure these features using PowerShell. - - - - The Powers of PowerShell Pipeworks - - - - Presented by: James Brundage - - - - - Ever wanted to make PowerShell easy for others? Or realize that a simple script you have would be a great backbone of a business (if only you could charge for it)? PowerShell Pipeworks is a web platform built in PowerShell that makes is simple to build compelling web applications and software services in a snap. In this session, you will see: – How to use Pipeworks to store your data to the cloud – How to create a monitoring dashboard with Pipeworks – How to build a Facebook application with PowerShell Pipeworks – How to put a price tag on a cmdlet - - - - Networking cmdlets - - - - Presented by: Richard Siddaway - - - - - Windows 8/2012 introduces a large number of cmdlets for working with networks and network configurations. This session will introduce those cmdlets and see how you can get the best out of them in your environment. There are a number of interesting quirks associated with these cmdlets that you need to be aware of and they will be demonstrated in the session. Like so much of the functionality in Windows 8/2012 these cmdlets are based on WMI using the CDXML functionality. This will be briefly explained with a look inside one of the networking modules. These cmdlets are only available on Windows 8/2012 but with a bit of WMI you can duplicate the functionality in your environment. - - - - PowerShell Web Access - - - - Presented by: Richard Siddaway - - - - - PowerShell Web Access is a new feature in Windows Server 2012 that provides a web based PowerShell console. You don't need PowerShell on your client to administer remote machines as long as you have PWA. This session will demonstrate how to configure PWA, its strengths and weaknesses – you might even see PowerShell being accessed from a non-Windows machine! The security implications of PWA will be discussed. PWA will be compared to other ways to access remote machines through PowerShell including PS Remoting and CIM sessions. - - - - Writing your Hyper-V deployment script in 30 minutes - - - - Presented by: Jeff Wouters - - - - - In this session I'll show you just how easy it is to write a simple deployment script for a Hyper-V cluster... in only 30 minutes! - - - - BOFH through PowerShell - - - - Presented by: Jeff Wouters - - - - - Ever wondered how you could annoy your users, managers and even your colleagues with PowerShell? Come to this session and let me show you how you can become a BOFH with PowerShell! - - - - How to avoid the pipeline - - - - Presented by: Jeff Wouters - - - - - The pipeline... although it is a wonderful concept and very powerful it is also slow. Lots of people pipe everything together and although it may work, you may have some time to get some more coffee before your script is done running. Let me show you how you can avoid the pipeline by utilizing the full potential of cmdlets and their parameters... and with logical thinking. - - - - PowerShell one-liners to the max - - - - Presented by: Jeff Wouters - - - - - The readers of my blog know that I simply love one-liners in PowerShell... Over the years I've learned lots of tricks which allow you to put just about anything in a single line of code. Although it's not pretty, it's fun to do and wouldn't it be cool to make a developer cry just by looking at such a one-liner? - - - - My learning experience with PowerShell - - - - Presented by: Jeff Wouters - - - - - This will not be a technical session... Back when PowerShell v1 was introduced the first thing I though was: "I can do a heck of a lot more with VBS!". Then PowerShell v2 came along and I was sold! A lot of people would have bought books to learn it... I did not. Instead I started to play around in the prompt. Only after two years I bought my first PowerShell book. In this session I will share with you both the rise and fall of my learning experience of learning PowerShell from the prompt. - - - - How to sell PowerShell to your customers and colleagues - - - - Presented by: Jeff Wouters - - - - - You:"Let's enable PowerShell Remoting!". Manager:"Why?" You:"So I can manage the entire environment through PowerShell from a single management server?". Manager:"No!" Does this discussion sound familiar? If that's the case, let me share with you the things I've learned which make it easy for you to 'sell' PowerShell to managers from a practical point of view. - - - - PSDD – PowerShell Deduplication - - - - Presented by: Jeff Wouters - - - - - With Windows Server 2012 there comes a new feature named Data Deduplication. How can you configure and manage this through PowerShell? But more importantly, how can you do more with it than the native PowerShell module offers you? This and more will be shown in a very fast-paced session... so faster your seat belts Dorothy 'cause Kansas is going bye-bye! - - - - Unit Testing PowerShell - - - - Presented by: Matt Wrock - - - - - This talk will provide a walk through of Unit Testing PowerShell scripts. The OSS project Pester ([https://github.com/pester/Pester](https://github.com/pester/Pester)) will be used to illustrate popular unit testing patterns such as ArrangeActAssert and Mocking to provide testability to PowerShell. There will be discussion on why and when to use unit testing in PowerShell as well. - - - - Bootstrapping a new machine in an hour with Chocolatey - - - - Presented by: Matt Wrock - - - - - Sick of losing a day's productivity to setting up a new Machine? Do you find it tedious keeping track of your favorite tools, software settings and windows settings? Do you find using VMs for this task to be awkward and fragile? Learn how to use Chocolatey ([http://chocolatey.org](http://chocolatey.org/)) and other PowerShell tricks to bring this entire process into a single script that will run on its own in just about an hour (give or take depending on installs). You can even have several bootstrapping configurations depending on your scenarios. One for work, another light weight one for Remoting on to a new serer and another for personal machines. - - - - Inside PowerShell: Abstract Syntax Tree Manipulation - - - - Presented by: Adam Driscoll - - - - - In this session we will take apart PowerShell. This session will highlight the new abstract syntax tree and node visitor API that is exposed in v3. An instrumentation profiler will be used as an example of how to traverse and manipulate PowerShell scripts from within the engine. - - - - .NET Reverse Engineering with PowerShell - - - - Presented by: Adam Driscoll - - - - - In this session we will look at how to utilize ILSpy to decompile .NET assemblies and quickly access internal aspects of them using PowerShell. We will see how to easily expose private members for access and manipulation within scripts. Adam Driscoll - - - - FIM 2010 DevOps with PowerShell - - - - Presented by: Craig Martin - - - - - Forefront Identity Manager 2010 (FIM) is a complex product that benefits greatly in a DevOps world facilitated by PowerShell. Come learn how PowerShell improves FIM deployments, highlighting the PowerShell lessons learned from a non-PowerShell MVP, and arguably a non-developer. Topics will include: FIM Test Automation with PowerShell FIM Deployment Automation with PowerShell FIM Extensibility with PowerShell FIM Workflow with PowerShell FIM Diagnostics with PowerShell Craig Martin is a FIM MVP with a passion for improving integration and automation quality with PowerShell. - - - - PowerShell as a SQL Reporting Services DataSource - - - - Presented by: Craig Martin - - - - - PowerShell turns out to be an excellent tool for collecting data about just anything. This session shows you how to get objects from PowerShell into SSRS reports quickly and simply, and all without using a data warehouse. This session will explain and demonstrate the use of a CodePlex project (psdpe.codeplex.com) to marry PowerShell and SSRS to provide some of the following benefits: - - - - - - SSRS Report Designers – Produce Reports in a Simple Design Experience using Objects from a PowerShell Pipeline SSRS Data - - - - - - Driven Subscriptions – Automatically distribute custom reports to users with data that pertains only to them - - - - - - SSRS Caching – Cache reports in SSRS for later viewing so that your script does not need to reproduce the data - - - - - - SSRS Data Processing Extensions – use SSRS to report on PowerShell objects (the core of the topic) - - - - Providing APIs Using Management OData IIS Extension - - - - Presented by: Craig Martin - - - - - The API Economy is all the rage, at least when we're not hearing about how cool PowerShell is. The idea is a replacement for ODBC, LDAP, or any other API, and preference by application developers to use OData and RESTful web services. Should we all get busy writing APIs then? Turns out PowerShell users already have, by writing scripts and modules. This new feature in PowerShell exposes the investment in commands to developers that may not care about about PowerShell, but instead demand to consume an API based on OData. Got a command for getting User objects? well now you can share that as an URL such as [http://myServer/User](http://myserver/User) (gets all the user objects) or [http://myServer/User('Craig’](http://myserver/User('Craig&%23038;%238217);)/Manager (gets Craig's manager). The magic here is that the developer is reaping all the rewards of your hard PowerShell work, but that developer never needs to know that the URLs are actually powered by, well PowerShell. This talk will share the experience of an IT Pro with scripting experience, learning how to create APIs using the new Management OData IIS Extension. - - - - Creating Reports with PowerShell that Managers will Read - - - - Presented by: Jeffery Hicks - - - - - We all know there is a wealth of information that you can uncover with PowerShell. Sometimes, getting this into a format that someone can read can be a challenge. In this session I'll explain a number of techniques you can use for creating dazzling reports from PowerShell. From simple text files, to snazzy HTML reports to full-on Microsoft Word documents. - - - - PowerShell and Microsoft Excel: A Love Story - - - - Presented by: Jeffery Hicks - - - - - After PowerShell, Microsoft Excel is probably an IT Pro's most often used management tool. We store data in spreadsheets. We use spreadsheets as sources for our scripts and functions. Or maybe you would like to do these things but don't know where to start. In this session I'll explain how to integrate Excel into your PowerShell experience. From pulling data from simple spreadsheets to creating stunning reports complete with tables, charts and graphs. - - - - PowerShell and Windows Server 2012 Active Directory Tricks - - - - Presented by: Jeffery Hicks - - - - - IT Pro's have been able to manage Active Directory with PowerShell for while. But that was only the beginning. Windows Server 2012 offers a tantalizing array of Active Directory management options. In this session I will offer a number of tips and tricks that take advantage of these new features. - - - - Zip It! Adding Compression to your PowerShell Scripting - - - - Presented by: Jeffery Hicks - - - - - PowerShell is a natural tool for file system management. IT Pros copy, delete and move files all the time. Even though storage is cheap and plentiful these days, wouldn't it be nice to add some compression techniques to your PowerShell scripts and functions? This session will demonstrate a number of ways you can add compression to your file management tasks. From simple file and folder compression to creating complete archives. We'll look at using the shell, 3rd party tools and WMI. - - - - PowerShell v3 ISE Snippets - - - - Presented by: Jeffery Hicks - - - - - Without question the ISE in PowerShell v3 is a vast and welcome improvement over v2. One of the best features, which hasn't gotten much attention, is the use of snippets. These little code gems can make writing a new script or function a breeze and even fun. But you can also add your own snippets. In this session I'll explain how the snippet system works, demonstrate how you can add your own snippets and manage your snippet library, all from the ISE. - - - - Adding a GUI to PowerShell without WinForms - - - - Presented by: Jeffery Hicks - - - - - Graphical PowerShell scripts seem all the rage these days. But most often that means using Windows Forms which can be very tedious to work with. But that is not the only game in town. Depending on your requirements there are a number of techniques you can use to add graphical elements to your PowerShell scripts. This session will explore how to create message boxes, input forms and more, all without a single Windows Form. If you are just getting started with writing PowerShell scripts, you'll find these techniques simple to use, plus there will be plenty of sample code for all! - - - - Building a Quick and Dirty PowerShell Backup System - - - - Presented by: Jeffery Hicks - - - - - It is a safe bet to say that most IT Pros have a backup solution in place for their organization. But sometimes you need something a bit more flexible or for special situations. Perhaps you have a lab or home test environment that needs protection. In this session, I will walk you through how to use PowerShell to set up a quick and dirty backup solution. This isn't necessarily a replacement for a full-fledged backup product, but it just might help fill the gaps. - - - - File & Folder Provisioning with Win8, Win2012 and PowerShell - - - - Presented by: Jeffery Hicks - - - - - If you manage file servers and aren't using PowerShell, you are working much too hard. Or if you are using PowerShell v2 you are still working pretty hard. Fortunately PowerShell v3 along with Windows 8 and Windows Server 2012 offer a much better solution. This session will demonstrate how to provision and manage folders, files and file shares using PowerShell from a Windows 8 client. With a little up-front work, you 'll be able to create provisioning scripts to deploy a new file share in seconds. - - - - Manage DFS the PowerShell Way - - - - Presented by: Jeffery Hicks - - - - - Most of the time, managing a distributed file system (DFS) infrastructure is pretty simple and graphical tools are fine. But all the cool kids will use PowerShell. Windows 8 and Windows Server 2012 offer a better way for managing DFS. From creating new folders to getting a handle on what it looks like now, to troubleshooting access problems, this session will demonstrate how to have it all from a PowerShell prompt. - - - - Write modules, not scripts - - - - Presented by: Ed Wilson, Scripting Guy, Microsoft - - - - - Learn how to get the most from Windows PowerShell by learning a simple five-step method to transform your Windows PowerShell code into a highly reusable module. This presentation is a live demo that begins with a single line of Windows PowerShell code, transforms the code into a function, adds comment based help to the function, and converts it into a module. Next, the installation and discovery of Windows PowerShell modules is covered, as is updating the module and creating a Windows PowerShell module manifest. Ed Wilson - - - - What I learned by grading 2000 PowerShell Scripts in the 2012 Scripting Games - - - - Presented by: Ed Wilson, Scripting Guy, Microsoft - - - - - The 2012 Scripting Games attracted both experienced and novice scripters from more than 100 countries around the world. In grading the 2000 submitted scripts, I noticed a common theme emerged. Some of the things that were consistently confused by both beginners and advanced scripters include the following: failure to return objects from functions, not creating reusable functions, spending too much duplicating capabilities of native PowerShell, using meaningless comments, omission of error handling, and an overreliance on Write-Host. In this session, I will address each of these areas of concern and show both good and bad examples from the games. A thorough discussion of each of these topics rounds out the presentation. This presentation uses live demos to illustrate the techniques that are discussed. Ed Wilson - - - - Use PowerShell to manage the remote Windows 8 workstation - - - - Presented by: Ed Wilson, Scripting Guy, Microsoft - - - - - There are three different ways to manage a remote Windows 8 workstation. The first is to use WMI remoting, the second is to use the computername cmdlets and the third is to use WinRm and Windows PowerShell native remoting. Each approach has advantages and disadvantages for the network administrator. In this session, I will examine each approach, and provide a checklist of criteria to aid the enterprise network administrator in choosing the appropriate technology for a variety of real world scenarios. This presentation combines live demos and interactive discussion to heighten learning. - - - - Use PowerShell to troubleshoot the reliability issues - - - - Presented by: Ed Wilson, Scripting Guy, Microsoft - - - - - Using the reliability provider on Windows 8 workstation or on a Windows Server 2012 machine provides a plethora of information about the health of your system. Unfortunately, the reliability provider is not enabled by default on Windows Server 2012, and attempts to enable it do not always work. In this session, I discuss the issues surrounding the reliability provider, illustrate the type of information available, and hint at how to incorporate its use into a normal monitoring program. Live demos using easily created Windows PowerShell scripts round out the discussion. - - - - PoshMon: PowerShell does performance counters - - - - Presented by: Ed Wilson, Scripting Guy, Microsoft - - - - - One of the cool features on Windows PowerShell 3.0 is easy consumption of WMI performance counters into Windows PowerShell. In the past, leveraging these performance counters meant writing long lines of cryptic code, calling refresher objects, and dealing with weird timestamp issues. But no more! Using a simple cmdlet, Windows PowerShell throws open the door to the treasure trove of performance counter information. But where does the oversubscribed IT pro begin? A question on my Windows NT 3.51 MCSE exam stated there are four areas for performance monitoring: disk, memory, network, and CPU. These four resources have not changed much, regardless of the application these basic areas of investigation still ring true. In this session, I talk about discovering performance counters, using performance counters, and storing information gathered from performance counters. The talk will be strengthened by live demos at each stage of the presentation. - - - - Why IT Pros must learn Windows PowerShell Now - - - - Presented by: Ed Wilson, Scripting Guy, Microsoft - - - - - "IT Pros don"™t script." I have heard this mantra for more than a decade – ever since I wrote my best selling Windows Scripting Self-Paced Learning Guide for Microsoft Press. But Windows PowerShell is more than just a new scripting language – in fact, some PowerShell MVPs have stated that Windows PowerShell is not a scripting language at all. Also, and more to the point, Windows PowerShell is not even all that new, with Windows 8, Windows PowerShell enters the 3rd version – it is therefore established technology. Simply put, Windows PowerShell is the future automation story in the Microsoft world, but it is also the present, and the IT Pro who learns how to use this tool will immediately become a more productive, and consequently more valuable employee. In this session I will discuss the extent to which Windows PowerShell permeates the Microsoft eco system, and offer real world scenarios that illustrate both the power, and the simplicity of this management tool. - - - - CDXML - - - - Presented by: Richard Siddaway - - - - - Windows 2012 brings 2500 cmdlets – over 60% of them are CDXML. That's a WMI class wrapped in XML and published as a module. In this session you will discover how this technology works and more importantly how to easily create your own cmdlets to simplify the use of WMI - - - - New Active Directory PowerShell cmdlets - - - - Presented by: Richard Siddaway - - - - - PowerShell for Active Directory gets a major boost in Windows 2012. The AD administrative center now exposes the PowerShell it uses and we get cmdlets for working the topology. In this session you'll learn about AD admin center and how to get the best out if the new AD cmdlets with a look at some tips and tricks for working with AD in general. You'll also discover that the AD provider does a lot more than you think it can. - - - - CIM - - - - Presented by: Richard Siddaway - - - - - WMI is dead! Long live CIM! PowerShell v3 introduces the CIM cmdlets. Are they a replacement for the WMI cmdlets? Are they easier to use? In this session we'll take them apart and see what makes them tick. A compare and contrast with the WMI cmdlets will show you when to use one or the other and how to get the best out of both. - - - - Scheduled tasks - - - - Presented by: Richard Siddaway - - - - - You've used the back ground jobs functionality in PowerShell v2. In PowerShell v3 you get the chance to work with the task scheduler. A set of cmdlets straight out of the PowerShell box for working with scheduled tasks. Automation rises to a new level when you can tell the job to run in the middle of the night and you don't need to be there. Learn how to do this and more in this session - - - - Integrated reports - - - - Presented by: Richard Siddaway - - - - - Managers always want reports. Can't be avoided but the task can be made easier. In this session we'll look at creating some reports based on real world examples: 1. Get the size of your Exchange databases and free disk space. Store the results in SQL Server. Create reports that show current situation and trends over time. 2. All administrators hate documenting their servers. Learn how to create a report that writes itself – literally. Keep your server documentation up to date with no effort on your part. - - - - PowerShell events - - - - Presented by: Richard Siddaway - - - - - The PowerShell event engine enables you to work with .NET; WMI and PowerShell engine events. What are these and how do they work? What can I do with them? Want to stop a process that shouldn't be running? Want to start a process that's stopped? That's what this session will show you with PowerShell events. - - - - WSMAN cmdlets - - - - Presented by: Richard Siddaway - - - - - PowerShell remoting uses the WS-Management protocols as transport between the local and remote machines. This is implemented as the WinRm service. We can utilise the WS-Management layer (WSMAN) directly to access WMI providers. This session opens up one of the least used areas of PowerShell v2. We will see how to use the WSMAN cmdlets: -- Connect-WSMan -- Disconnect-WSMan -- Get-WSManInstance -- Invoke-WSManAction -- New-WSManInstance -- New-WSManSessionOption -- Remove-WSManInstance -- Set-WSManInstance -- Test-WSMan - - - - - - With these we can access a remote machine in a similar manner to using the WMI cmdlets or PowerShell remoting. The advantage over WMI cmdlets is that we don"™t need DCOM. These cmdlets aren"™t straight forward to use but there is an untapped administration opportunity that potentially also enables us to administer remote machines that aren"™t Windows based. The session will be heavy on code and short on slides as this is a subject best demonstrated. - - - - PowerShell jobs - - - - Presented by: Richard Siddaway - - - - - PowerShell normally runs tasks in the fore ground. This ties up the PowerShell prompt and stops you doing other work. We could just open lots of PowerShell prompts but a better way is to use PowerShell jobs. PowerShell jobs run in the background. You can have multiple jobs running simultaneously and still work at the prompt. Better still the jobs? results are saved until you are ready to use them. PowerShell jobs are an under used item in the administrators tool box. This session will show what they can do and how we can make the most of them. Lots of code and minimal slides make the session very interactive. - - - - PowerShell and SQL Server - - - - Presented by: Richard Siddaway - - - - - Storing data in SQL server is not a new idea. Accessing SQL Server using PowerShell opens up this data store for us. This session will show how to use SQL Server to store your data; how you can read, update and if necessary delete the data. Simple PowerShell routines that open a lot of power. - - - - DNS Apocalypse (Notes From The Field) - - - - Presented by: Ashley McGlone, Microsoft PFE - - - - - Hear Microsoft PFE Ashley McGlone explain how he got out of this one. Global 24×7 mission-critical customer had a single text file DNS primary zone hosting all 10 Active Directory domain zones in the forest. Needed to switch to AD-integrated DNS, split out all zones into separate domains, and delegate DNS administration. Then they explained there are no change control maintenance windows, and it had to be done with zero down time. He did it. Come find out how PowerShell saved this customer. - - - - AD Migration Nightmare (Notes From The Field) - - - - Presented by: Ashley McGlone, Microsoft PFE - - - - - I got a panic call from the customer. Half way through the AD domain migration their third party migration tool database crashed and was unrecoverable. They lost all SID history conversion tracking. The vendor doing the migration was unsure how to proceed. Hear Microsoft PFE Ashley McGlone explain how PowerShell saved the customer. Do you know where your SID history is hiding? - - - - Mass File Server ACL Migration (Notes From The Field) - - - - Presented by: Ashley McGlone, Microsoft PFE - - - - - I had a customer who acquires 13 new companies each year. They have more than 35 domains in the forest and another 80 trusts. With over 170,000 instances of SID history in the forest they had no idea where to begin fixing SID history on file shares. They needed a way to migrate ACLs on their file servers, to report on the impact, and to manage it effectively in the future. Where would you begin? Hear Microsoft PFE Ashley McGlone explain how PowerShell saved the customer. - - - - Automated Server Setup with Carbon - - - - Presented by: Aaron Jensen - - - - - Aren't manual setup checklists the greatest? How about virtual machine images that have been cloned for so long nobody knows where they come from? Nobody likes spending hours doing the same things over and over again, or reverse engineering what configuration changes someone made to a server before walking out the door. Come learn about Carbon ([http://get-carbon.org](http://get-carbon.org/)), the DevOps module I created that enables us to spin up dozens of servers in just a few hours. I'll give an overview of all the functionality available in Carbon, then dive deep into some of the things I've learned and discovered during development. - - - - Connecting ERP to AD with PowerShell – A Two-way Street - - - - Presented by: Steve Moss - - - - - When we implemented Jenzabar CX as our college's ERP solution, it became our authoritative data source and the driver for things like Active Directory account creation and maintenance. Initially, we used a series of VBScripts to handle the integration with AD. When I was tasked with fixing and maintaining that code, two things because clear. First, The existing code was virtually unmaintainable. Second, PowerShell made it relatively easy to create a solution that was modular, flexible and easily maintained. I'll look at how we implemented the communication from CX to AD and from AD to CX using /nSoftware's PowerShell Server and ODBC. I'll also look at the way we decomposed the creation and maintenance various types of AD accounts into discrete tasks and used that to create a modular library of functions that allows us to use a building block approach to not only implementing the automated processes that we needed, but also create an interactive set of tools for our Service Desk people to view and modify AD accounts in a controlled way. - - - - Deploy and manage certificates for your IIS servers using PS - - - - Presented by: Jason Helmick - - - - - Need to deploy and manage certificates for your websites? When was the last time you checked to see if your website certificates were about to expire? In this session with renowned PowerShell and IIS expert Jason Helmick, you will deploy, manage, revoke and remove certificates to multiple remote IIS servers running Windows Server Core. Discover and alert when certificates are about to expire and handle creating and changing SSLBindings in IIS. - - - - Automatically Provisioning an IIS 8 Web Farm - - - - Presented by: Jason Helmick - - - - - Increase productivity while increasing time off using PowerShell! In this session with renowned PowerShell and IIS expert Jason Helmick, you will learn to provision a web farm of servers, sites and applications. Quickly adapt your web farm to the needs of the business with rapid scale load balancing. You will leave with the slides, demonstration steps and Jason"™s tips to rapidly provision IIS. Don"™t lose another weekend to web farm deployment and management! - - - - Securely Manage your network anytime on any Device with PSWA - - - - Presented by: Jason Helmick - - - - - Are you "on-call" and worried to leave the office? Not anymore! In this session with renowned PowerShell and IIS expert Jason Helmick, you will learn to implement and securely configure Windows Server 8 PowerShell Web Access. Take control with any device and cmdlets at your fingertips without the overhead of installing additional administration tools. You will leave with the slides, demonstration steps and Jason"™s tips to securely deploy and utilize PowerShell Web Access. - - - - System Center 2012 Configuration Manager and PowerShell - - - - Presented by: Greg Ramsey - - - - - ConfigMgr and PowerShell – we have finally arrived! ConfigMgr and WMI have been a match made in heaven for the since at least SMS 2.0, so we've always been able to use PowerShell with ConfigMgr. But finally, we have real cmdlets that will allow you to fully automate the administrative experience with ConfigMgr. Are you ready to take your Configuration Manager Admin experience to the next level? Greg shows you how to leverage PowerShell with Microsoft System Center 2012 Configuration Manager SP1. Manage Deployments, Collections, Applications, Packages, Programs, and even Software Updates! - - - - Working with script blocks - - - - Presented by: Rob Campbell - - - - - Creating script blocks for remote jobs and filters using local variables. Using script blocks to: create collections simplify code maintenance get user input pipeline output from foreach loops - - - - Metaprogramming PowerShell - - - - Presented by: Ian Davis - - - - - PowerShell can be a fun and crazy language to use, but we can take it a step further with metaprogramming. By taking advantage of PowerShell's flexible language features including dynamic scoping, modules, deferred evaluation, and ScriptBlocks, we can create simple and powerful applications applications leveraging metaprogramming idioms. - - - - Chewie: PowerShell DSL for Managing NuGet Dependencies - - - - Presented by: Ian Davis - - - - - Have you ever tried to figure out which dependencies your application has? Tired of messing with NuGet repository.config and packages.config files? Are you fed up with having to load Visual Studio and enabling package restore by hand? Ruby has had a solution for a long time with gems and bundler. By leveraging the features of PowerShell, .NET developers can have their own DSL for managing dependencies efficiently with Chewie. - - - - Internal DSLs in PowerShell - - - - Presented by: Ian Davis - - - - - To write a DSL or to not write a DSL, that is an important question. PowerShell gives us great power to create DSLs, but it doesn't mean that we should create one. This talk will cover when to create a DSL along with techniques specific to PowerShell for creating them (deferred evaluation, first class objects, dynamic scoping, semantic models, dependency graphs, etc). Some existing PowerShell DSLs will be analyzed including as psake, pester, and chewie. - - - - PowerShell: Beyond Scripting - - - - Presented by: Ian Davis - - - - - PowerShell is missing a few language features, but that doesn't mean we can pretend. By changing our perspective slightly, we can apply parasitic and prototypal inheritance, open classes, monkey patching, and more. PowerShell was designed for solving problems for system administrators, but it isn't limited to that domain. - - - - Automated Builds With PowerShell - - - - Presented by: Ian Davis - - - - - Automated builds are a critical part of application lifecycle management. PowerShell is very well suited for making this process easier. We have gone full circle with scripting builds and by leveraging PowerShell on the command line and building DSLs, our builds can be more robust and intuitive than ever. - - - - Troubleshooting SQL Server with PowerShell - - - - Presented by: Laerte Junior - - - - - It is normal for us to have to face poorly performing queries or even complete failure in our SQL server environments. This can happen for a variety of reasons including poor Database Designs, hardware failure, improperly-configured systems and OS Updates applied without testing. As Database Administrators, we need to take precaution to minimize the impact of these problems when they occur, and so we need the tools and methodology required to identify and solve issues quickly. In this Session we will use PowerShell to explore some common troubleshooting techniques used in our day-to-day work as DBA. This will include a variety of such activities including gathering Blocked SQL Server Process, Reading & filtering the SQL Error Log even if the Instance is offline, Listing SQL Server and Database information and Register Temporary and Specific Events in the SQL Server WMI. The approach will be using PowerShell techniques that allow us to scale the code for multiple servers and run the data collection in asynchronous mode. - - - - PowerShell in Windows 8/2012 - - - - Presented by: Richard Siddaway - - - - - PowerShell has 2500 cmdlets available in Windows 2012 This session will give you a quick overview of what's available and more importantly what you can do with it. There is so much functionality available that if you don't know its there you can miss it. A quick overview of what's available and lots of demos - - - - PowerShell and WMI - - - - Presented by: Richard Siddaway - - - - - With all the new WMI based functionality in PowerShell v3 its easy to forget the old WMI cmdlets. They are still there, still have their place and can teach us a few things about administering our systems. Some of the new PowerShell v3 functionality makes them easier to use – learn how Some of the WMI gotchas still remain – see what they are, how you overcome them and what effect they have on the new CIM cmdlets - - - - Building Enterprise Modules - - - - Presented by: Adam Driscoll - - - - - In this session we will look at how to author enterprise-level modules using a combination of both PowerShell and C#. We'll examine the common pitfalls and considerations that should be made when thinking about enterprise PowerShell support. We will look at how to build modules that are easy to test and maintain. - - - - Tame Your Event Logs with Windows PowerShell and WinRM - - - - Presented by: Aleksandar Nikolic - - - - - In this session you will learn how to manage your Event Logs with PowerShell cmdlets, leverage the power of Event Forwarding to centralize events to a central server and trigger execution of PowerShell scripts from a specific Windows event. - - - - Automate Server Manager in Windows Server 2012 - - - - Presented by: Aleksandar Nikolic - - - - - Server Manager in Windows Server 2012 has evolved to include many new multi-server management features. It uses Windows PowerShell behind the scenes, but can we use Windows PowerShell to automate customization of Server Manager? Yes, we can. Join us for this session to learn how. - - - - How to Delegate Administration and Customize PowerShell Session Configuration - - - - Presented by: Aleksandar Nikolic - - - - - In this session you will learn how to customize PowerShell session configuration, and then use it to assign specific administrative tasks to the appropriate users and groups without changing the membership of local Administrators group. By using new Windows PowerShell and Windows Remote Management 3.0 capabilities we will enable dynamic creation of customized automation environments that users can access through the Windows PowerShell Web Access. - - - - Configuring Your Windows PowerShell Workflow Environment - - - - Presented by: Aleksandar Nikolic - - - - - In this session you will learn how to set up your environment to run Windows PowerShell workflows. We will discuss different workflow configurations, how to prepare computers to run workflows, what is workflow session configuration and how to customize it. At the end, you will learn how to properly run your Windows PowerShell workflows. - - - - Build Your Demo Environment or a Test Lab with Windows PowerShell - - - - Presented by: Aleksandar Nikolic - - - - - With Windows PowerShell 3.0 and the new Client Hyper-V available in Windows 8, it is so easy, and fun, to automate creation of your demo environment or a test lab infrastructure. You can easily convert ISO files to VHDs, deploy your VMs and configure networking and storage. Join us for this demo-heavy session to see all the steps. - - - - Is Server Core without Windows PowerShell still remotely manageable? - - - - Presented by: Aleksandar Nikolic - - - - - In this, some might say blasphemous, session you will learn that uninstallation of Windows PowerShell doesn't leave your Windows Server 2012 Server Core remotely unmanageable from the command line. We can still use Windows PowerShell on a client computer to access system CIM modules on a Server Core. Even better, we can increase its manageability by deploying our own CIM modules. Join us to see the power of CIM sessions and CIM modules. - - - - Scripting for Scale in the Virtual Datacenter - - - - Presented by: Josh Atwell and Jade Lester - - - - - The virtual datacenter is growing at a high rate. The increasing size and complexities can make scripting and reporting take too long to complete in a reasonable time period. Attendees will learn a variety of techniques and strategies you can use to speed up your scripting and reporting with PowerCLI and UCSPowerTool from two members of Cisco internal IT. - - - - PowerCLI for the PowerShell Inclined - - - - Presented by: Josh Atwell - - - - - In this session I highlight many of the built in functionalities of PowerCLI that are extremely powerful but often underutilized. These cmdlets will increase your flexibility with PowerCLI and help increase efficiency. - - - - Managing your Cisco UCS with UCSPowerTool - - - - Presented by: Josh Atwell and Jade Lester - - - - - Attendees will get a crash course in the unique and powerful cmdlets of the UCSPowerTool, PowerShell for the Cisco Unified Compute System. - - - - Thank you for helping us create this great conference! - - - - - - Kirk out. - - - - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerShell Summit](http://technorati.com/tags/PowerShell+Summit),[PowerShell.org](http://technorati.com/tags/PowerShell.org) - - - - - - [![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/820/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/820/) ![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=820&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - - - [1]: http://674004.polldaddy.com/s/powershell-summit-na-2013-session-voting diff --git a/content/articles/2012-10-23-secrets-of-powershell-remoting-updated-help-check-the-beta.md b/content/articles/2012-10-23-secrets-of-powershell-remoting-updated-help-check-the-beta.md deleted file mode 100644 index 3a02b8478..000000000 --- a/content/articles/2012-10-23-secrets-of-powershell-remoting-updated-help-check-the-beta.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "\"Secrets of PowerShell Remoting\" Updated – Help Check the Beta!" -authors: - - Don Jones -date: "2012-10-23T18:35:23+00:00" -categories: - - PowerShell for Admins -aliases: - - /2012/10/secrets-of-powershell-remoting-updated-help-check-the-beta/ ---- - -I've finished updating a new revision of _Secrets of PowerShell Remoting; _you'll find PDF and EPUB versions attached to this post in a ZIP file. Note that these are "check builds," meaning I'm putting these out there in the hopes folks can run through them on their computers and e-readers to let me know if anything looks weird. You can just drop a comment right here if you find anything. -[The book is now live on .] diff --git a/content/articles/2012-10-24-free-ebook-creating-html-reports-in-powershell.md b/content/articles/2012-10-24-free-ebook-creating-html-reports-in-powershell.md deleted file mode 100644 index 3e947a762..000000000 --- a/content/articles/2012-10-24-free-ebook-creating-html-reports-in-powershell.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Free eBook: Creating HTML Reports in PowerShell" -authors: - - Don Jones -date: "2012-10-24T19:52:35+00:00" -categories: - - PowerShell for Admins -aliases: - - /2012/10/free-ebook-creating-html-reports-in-powershell/ ---- - -I've written a new, short, totally free eBook that explains how to build multi-sectional HTML reports in Windows PowerShell. This is something I'll be building on in the future, as I have time, to add additional formatting capabilities, and even interactivity. But what's there now should be a great start! Check it out and let me know what you think. -It's on the free ebook list at https://powershell.org/ebooks. diff --git a/content/articles/2012-10-26-if-you-havent-watched-the-powerscripting-podcast.md b/content/articles/2012-10-26-if-you-havent-watched-the-powerscripting-podcast.md deleted file mode 100644 index 51a3120d2..000000000 --- a/content/articles/2012-10-26-if-you-havent-watched-the-powerscripting-podcast.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "If you haven't *watched* the PowerScripting Podcast…" -authors: - - Don Jones -date: "2012-10-26T15:11:46+00:00" -categories: - - PowerShell for Admins -aliases: - - /2012/10/if-you-havent-watched-the-powerscripting-podcast/ ---- - -For more than 200 weeks now (there's an episode a week), Jon Walz and Hal Rottenberg have been bringing us the [PowerScripting Podcast][1]. It's become an almost official "voice" of and for the PowerShell community. In it, the two don't focus much on technical tips or anything like that. Instead, the highlight is a weekly interview with a mover and shaker in the PowerShell community. For me, they put a _face_ on the community. One week you're talking to the inventor of PowerShell, the next to a local user group leader who's helping educate folks in his area, and the next an ISV who's building PowerShell into their products. It's Larry King Does PowerShell. -If you've listened to the podcast, you know what I'm talking about here. But, if you've _only_ listened to the podcast, you're missing half the show. Maybe more. You see, on most Thursday nights at 9:30pm (US Eastern), Hal and Jon record the show live. With webcams. And a chat room. -[![](https://powershell.org/wp-content/uploads/2012/10/ColloquyScreenSnapz001-300x117.png) - (click for larger) - ](https://powershell.org/wp-content/uploads/2012/10/ColloquyScreenSnapz001.png) -This is where the podcast goes from being a hobby and into being a truly vital piece of community connective tissue. Pop into the chatroom and regulars, like the Scripting Wife, offer a "hello!" It's a weekly clubhouse of sorts, where the chatroom conversations parallel the webcast, but also diverge onto tangents. It's where you can offer up questions for the current speaker. It's where you play drinking games (anytime Snover says "ecosystem," drink!). And, when I'm the featured speaker, as I'm privileged to be a couple of times a year, it's where you egg me on in my rant-of-the-season. -[![](https://powershell.org/wp-content/uploads/2012/10/ColloquyScreenSnapz002-300x117.png)](https://powershell.org/wp-content/uploads/2012/10/ColloquyScreenSnapz002.png) -I'm going to share a little secret that most software developers already know: _Community counts. _It isn't just a word, or some marketing slogan. The ability to make connections with people in a similar boat - via Twitter, e-mail, [forums][2], or a podcast recording - is important. For many IT pros, IT per se isn't our personal passion. It's a job. And so it's easy, at the end of the workday, to go home and do our _real_ passion - be with family, play Xbox, or whatever. So IT pro communities have traditionally never been as robust as developer communities. But _make the effort. _Community is how you'll meet the guy (or gal) who has the solution to your next problem, and will share it free for the asking. Community is where your next job will probably come from. Community is, in fact, your _meta-career, _spanning employers and projects and giving you a foundation to really succeed in this business. The colleagues you meet through community will become, over time, more important to your personal success than your direct coworkers. -In fact, PowerShell.org itself wouldn't exist without the strong community connections Kirk Munro and I have made over the years. -Giving up an evening with the family to go to a local user group meeting can be tough, if there's even one in your area. You should do it anyway. But if you can't, Hal and Jon have created a sort of virtual user group where you can connect with _people, _not just learn about technology. Trust me, the first time someone like Jeffrey Snover recognized me in-person and said "hi," I got a little thrill - and it was because of opportunities like the PowerScripting Podcast that he got to know me. Much of my success in the IT field has some through community and connectedness, and I heartily recommend it to anyone. -Hope to see you in the chatroom! - - [1]: http://powerscripting.wordpress.com - [2]: https://powershell.org/discuss diff --git a/content/articles/2012-10-26-powershell-v3s-new-simplified-syntax.md b/content/articles/2012-10-26-powershell-v3s-new-simplified-syntax.md deleted file mode 100644 index 65d487099..000000000 --- a/content/articles/2012-10-26-powershell-v3s-new-simplified-syntax.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: "PowerShell v3's New Simplified Syntax" -authors: - - Don Jones -date: "2012-10-26T18:02:31+00:00" -categories: - - PowerShell for Admins -aliases: - - /2012/10/powershell-v3s-new-simplified-syntax/ ---- - -One of the ballyhooed new features in PowerShell v3 is the new "simplified" syntax for Where-Object and ForEach-Object. I'm going to focus on the former for this article. In essence, instead of doing this: - - -`Get-Service | Where-Object { $_.Status -eq 'Running' } -`You can now do this also: - - -`Get-Service | Where Status -eq Running -`Last week, I had the opportunity to include this new syntax in a class I was teaching - mainly to beginners - and I came away with mixed feelings. Whereas once I'd felt awesome about the new syntax... now I'm conflicted. - -## A Caveat - -I want to point out up front that my upcoming comments are confined to a pretty tight scenario: Teaching newcomers to PowerShell. I'm not sure if these feelings apply universally. I'm also not trying to beat up on Microsoft's PowerShell team with this article; instead, I'm trying to provide a discussion. I'm also hopeful that this article can help clear up some confusion for anyone who experiences the same confusion my students did. - -## Simplified or Complexified? - -First, understand that this new syntax **is not** a "simplified" syntax; it's an _additional_ syntax. The old syntax hasn't been cleaned up in any way, and it hasn't gone away; it's been joined by a new compatriot. This presents a teaching challenge: Now, rather than teaching _one_ syntax and helping students get through it, I have to teach _two. _After all, they're going to encounter both "in the wild," and there are six years of the "old" syntax out there in blogs and examples and whatnot. So the addition of a second syntax doesn't lower the learning barrier; it _raises_ it. That's because, without introducing a breaking change in the product, _you can't fix syntax once it's out there._ - -## Limitations - -I also have to continue teaching the "original" syntax because the "simplified" syntax is limited to just one expression: this equals that (or not equals, or whatever). You can't, in other words, do this: - - -`Get-WmiObject Win32_Service | Where State -ne 'Running' -and StartMode -eq 'Auto' -`Only the "old" syntax supports expressions with more than one operator. And don't think my students didn't try the above - they did, despite explicit explanations up front that it wouldn't work. The problem is that, especially in a class, students are getting so much thrown at them that their brains instinctively attempt to simplify. "Ok, if there's two syntaxes, and one has ugly { $_ } garbage in it, I'll focus on the other one." Problem is, that other one won't get you through the whole day. -In fact, I'm seriously considering, for my next class, _not_ teaching the "simplified" syntax right away. I'll stick with the old one, because it's _one_ way I can teach that will _always_ work. Yeah, the $_ is ugly - but you have to know that $_ thing in so many other places, that I've gotta get students past it anyway. I'll show them the "simplified" syntax, for sure, but probably later in class after they've mastered the old one. -**Help Files** -My big pain is that the "simplified" syntax has made a wreck of the help file for Where-Object. It used to be a simple syntax section: One parameter set, with really only one parameter: -FilterScript. Now it's an unholy mess. -Here's why: the new syntax is really a hack, which takes advantage of the fact that both PowerShell operators (like -eq) and parameters (like -property) look alike. They both start with a dash. The new syntax: - - -`Get-Service | Where Status -eq Running -` Really means this: - - - -`Get-Service | Where -Property Status -eq -Value Running -`You've got three parameters on Where-Object: -Property, -Value, and -eq, with -eq being a switch parameter that accepts no value. That means this is equally valid: - - - -`Get-Service | Where -eq -Value Running -Property Status -`Since named parameters can come in any order. The upshot of this is that the help file for Where-Object now has to list a bazillion parameter sets, each with a different "operator" parameter: - - - [![](https://powershell.org/wp-content/uploads/2012/10/VMware-FusionScreenSnapz001-300x258.png) - (](https://powershell.org/wp-content/uploads/2012/10/VMware-FusionScreenSnapz001.png)Click for larger) - - - Barf. The problem is that the help file is *syntactically* correct, but it is *semantically* wrong, meaning it doesn't accurately reflect the *meaning* of the command. I'm whined about this to a friend on the PowerShell help team, and they - quite accurately - noted that the help file needed to be syntactically accurate. They also suggested that beginners should be focusing on the excellent Description section of the help file, which better explains the meaning. Okay... but the Syntax section takes up two screenfuls, and appears before the Description. People tend to read top-down. I caught one of my students trying to do this:`Get-Service | Where $_ -eq Running -Property Status[/property] - - - Before I said, "Ok, enough, no more playing with the new syntax, everyone back into the {curly bracket} pool." - - -## Inconclusion - -That's an accurate heading - I didn't mean "in conclusion." I'm actually knotted up about this. I totally get, and appreciate, what the team was trying to do with this syntax. Someone accustomed to PowerShell can probably reel off the new syntax with no issues, and love the fact that they have to type a whole five fewer characters. But "simplified" suggests that the feature was meant to help beginners - and I'm not sure it does. It's like giving a kid training wheels on their bike: Sooner or later, those have to come off, and they haven't necessarily prepared you for the big-boy world. -What're your thoughts? I'm genuinely interested, especially if you have some experience with _newcomers_ encountering the new syntax. There's no argument that it's easier _to begin with_ - it just doesn't take you very far before you have to "grow up" to the "real" syntax anyway, so I'm not sure it's a "win" from an educational perspective. diff --git a/content/articles/2012-10-28-ideras-powershell-plus-editor-now-free-for-all.md b/content/articles/2012-10-28-ideras-powershell-plus-editor-now-free-for-all.md deleted file mode 100644 index 4296790d9..000000000 --- a/content/articles/2012-10-28-ideras-powershell-plus-editor-now-free-for-all.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "Idera's PowerShell Plus Editor Now Free for All" -authors: - - Don Jones -date: "2012-10-28T16:30:32+00:00" -categories: - - PowerShell for Admins -aliases: - - /2012/10/ideras-powershell-plus-editor-now-free-for-all/ ---- - -Idera's gone and made PowerShell Plus free. Given that it's been updated to support PowerShell v3, this will probably become many folks' go-to editor (PowerGUI, the former champ, is more or less out of development and hasn't been updated for v3). -Idera says: - -> "Idera is dedicated to providing products that help our customers and community members be successful in their jobs," said Rick Pleczko, CEO of Idera. "PowerShell Plus is a proven and essential productivity tool so we wanted to get it into the hands of IT professionals everywhere. It also complements our sponsorship of the PowerShell.com community, which features forums and resources for novice to advanced PowerShell users." - -Idera runs [PowerShell.com][1], which features a bevy of Q&A forums and daily "PowerTips." Regarding PowerShell Plus: - -> PowerShell Plus features a powerful interactive console, an advanced script editor and debugger, and a comprehensive interactive learning center integrated into a single product. It helps administrators and developers quickly learn and master PowerShell, while also dramatically increasing the productivity of expert users. The new version, PowerShell Plus 4.6, has been certified on Windows 8. It includes revised and expanded script libraries for SQL Server and SharePoint 2010. Additionally, the System Explorer now features SQL Server and Share Point 2010 plug-ins that help manage SQL Server instances and SharePoint 2010 farms. - -You can read the entire press release, and access the download page, on [Idera's Web site][2]. - - [1]: http://powershell.com - [2]: http://www.idera.com/News/?NewsCategory=0&ID=482 diff --git a/content/articles/2012-11-02-final-ticket-inventory-for-powershell-summit-na-2013-released.md b/content/articles/2012-11-02-final-ticket-inventory-for-powershell-summit-na-2013-released.md deleted file mode 100644 index 4f4610e6d..000000000 --- a/content/articles/2012-11-02-final-ticket-inventory-for-powershell-summit-na-2013-released.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Final Ticket Inventory for PowerShell Summit NA 2013 Released! -authors: - - Don Jones -date: "2012-11-02T15:24:26+00:00" -categories: - - PowerShell for Admins -aliases: - - /2012/11/final-ticket-inventory-for-powershell-summit-na-2013-released/ ---- - -As we've been finalizing our speaker and session collection, we've been able to release a small block of Summit tickets into the general admission pool. Also, the end of October saw the expiration of a set-aside block for PowerShell MVPs, releasing that block's unsold tickets back into the general admission pool as well. -As it stands, the G.A. pool now has 57 tickets, of which we've sold 24. That leaves 33 tickets left for the April 22-24 event at Microsoft's corporate headquarters in Redmond, WA. -We currently have a total of 57 attendees, including speakers. That doesn't include Microsoft team members who will be delivering sessions, nor does it include a small batch of tickets reserved for Microsoft staff who will be participating in the sessions for all three days. -If you're thinking of coming to the Summit, **now is the time to register. **We'll be releasing our session and speaker lineup within the next few days, and that usually triggers a big rush in registration as people get even more exciting about the upcoming event. If you do happen to miss one of these final 33 tickets, you'll have the opportunity to go on a waitlist, where you'll be notified if anyone cancels. -**Don't miss your chance to be a part of this first-ever community-owned and -operated event!** diff --git a/content/articles/2012-11-02-powershell-summit-community-sessions-list.md b/content/articles/2012-11-02-powershell-summit-community-sessions-list.md deleted file mode 100644 index 6d958dfc3..000000000 --- a/content/articles/2012-11-02-powershell-summit-community-sessions-list.md +++ /dev/null @@ -1,433 +0,0 @@ ---- -title: "PowerShell Summit Community Sessions List [Updated]" -authors: - - Kirk Munro -date: "2012-11-02T19:19:22+00:00" -aliases: - - /2012/11/powershell-summit-community-sessions-list/ ---- - -[Update: April 19, 2013] **Important Note:** Due to some last minute schedule changes for some of our speakers, several of the sessions below were replaced with other sessions.  To see the final list of sessions offered at the 2013 PowerShell Summit, please visit this page: {.vt-p} - -After almost 100 people voted for the sessions they would like to see the most at the [2013 PowerShell Summit][1]{.vt-p}, the results are in!  These votes are for the sessions chosen by the community, and additional sessions from the PowerShell Team will be announced at a later date (as soon as I have them). - -Below you will find the not-quite-finalized list of community sessions that will be included in the 2013 PowerShell Summit, sorted alphabetically by speaker.  It is not quite finalized because I am still awaiting final confirmation from a handful of speakers (those marked with an asterisk).  I will update this post as the final confirmations come in. - -Thank you to everyone who submitted a session proposal for this conference.  There were a lot of great proposals this year, and I personally think no matter which sessions were voted for, the conference would have been fantastic.  Also thank you to anyone who took the time to vote for their favorite sessions.  Your votes really helped us a lot here, both for the upcoming 2013 conference and for conferences we"™ll be planning in the future too! - -If you would like to attend this conference so that you can learn from these great sessions and others that are not yet announced, and so that you can participate in the fantastic conversations that happen at such an event, you can purchase your ticket here: {.vt-p}. - -Here is the list of sessions that made the final cut: - - - - - Speaker - - - - Title - - - - Description - - - - - - June Blender - - - - Help for Help: A Help Authoring Deep Dive - - - - A comprehensive 400-level talk for module authors about authoring techniques for all types of Windows PowerShell Help, including About help and help for all command types, including cmdlets (and the MAML schema), scripts, functions, CIM commands, workflows (script and XAML), providers (including custom cmdlet help), and snippets. What you can and cannot do, and what's worth doing when time and resources are short. We'll cover online help, Updatable Help, and all the gotchas (HelpInfo XML, HelpInfoUri, HelpUri, CHMs), and I'll share the scripts that I use to generate help files and verify the accuracy of parameters, parameter values, parameter attributes, GUIDs, and URIs. - - - - - - James Brundage* - - - - The Powers of PowerShell Pipeworks - - - - Ever wanted to make PowerShell easy for others? Or realize that a simple script you have would be a great backbone of a business (if only you could charge for it)? PowerShell Pipeworks is a web platform built in PowerShell that makes is simple to build compelling web applications and software services in a snap. In this session, you will see: – How to use Pipeworks to store your data to the cloud – How to create a monitoring dashboard with Pipeworks – How to build a Facebook application with PowerShell Pipeworks – How to put a price tag on a cmdlet - - - - - - Ian Davis - - - - Metaprogramming PowerShell - - - - PowerShell can be a fun and crazy language to use, but we can take it a step further with metaprogramming. By taking advantage of PowerShell's flexible language features including dynamic scoping, modules, deferred evaluation, and ScriptBlocks, we can create simple and powerful applications applications leveraging metaprogramming idioms. - - - - - - Ian Davis - - - - Automated Builds With PowerShell - - - - Automated builds are a critical part of application lifecycle management. PowerShell is very well suited for making this process easier. We have gone full circle with scripting builds and by leveraging PowerShell on the command line and building DSLs, our builds can be more robust and intuitive than ever. - - - - - - Adam Driscoll - - - - Inside PowerShell: Abstract Syntax Tree Manipulation - - - - In this session we will take apart PowerShell. This session will highlight the new abstract syntax tree and node visitor API that is exposed in v3. An instrumentation profiler will be used as an example of how to traverse and manipulate PowerShell scripts from within the engine. - - - - - - Adam Driscoll - - - - .NET Reverse Engineering with PowerShell - - - - In this session we will look at how to utilize ILSpy to decompile .NET assemblies and quickly access internal aspects of them using PowerShell. We will see how to easily expose private members for access and manipulation within scripts. Adam Driscoll - - - - - - Jeffery Hicks - - - - Adding a GUI to PowerShell without WinForms - - - - Graphical PowerShell scripts seem all the rage these days. But most often that means using Windows Forms which can be very tedious to work with. But that is not the only game in town. Depending on your requirements there are a number of techniques you can use to add graphical elements to your PowerShell scripts. This session will explore how to create message boxes, input forms and more, all without a single Windows Form. If you are just getting started with writing PowerShell scripts, you'll find these techniques simple to use, plus there will be plenty of sample code for all! - - - - - - Don Jones - - - - Workflow Walkthrough - - - - It seems like everyone's interested in v3′s new Workflow feature, so let's do a quick walkthrough of building one from scratch. We'll skip the usual "provisioning" example and go for something a bit more constrained, and perhaps real-world, where workflow's unique features can really be put to solid use. This'll also be an opportunity to discuss what workflow can and can't do, and discuss some of the options and permutations of using it. - - - - - - Don Jones - - - - Remoting Configuration Deep Dive - - - - What do you do when Enable-PSRemoting isn't enough? Dig deeper. We'll run through all of the major configuration scenarios, including how to use (and not abuse) TrustedHosts, how to set up an HTTPS listener (and use it), how to do non-domain authentication, how to enable CredSSP and configure it to be less than a major security hole, and more. Pretty much every possible Remoting config, we'll cover. With detailed, step-by-step instructions! - - - - - - Kirk Munro - - - - Creating Add-on Tools for PowerShell ISE - - - - PowerShell 3 includes a ton of improvements to the integrated scripting editor, PowerShell ISE. As great as PowerShell ISE is in this version, there is still a lot of room for improvement. Fortunately, Microsoft anticipated that they wouldn't be able to do everything, so they extended their support for creating Add-on Tools for PowerShell ISE.In this session, the worlds first self-proclaimed Poshoholic and PowerShell MVP Kirk Munro will provide a soup to nuts demonstration of PowerShell ISE Add-on Tools, showing how you can create everything from simple menu extensions to feature rich windows that respond to ISE events and that are docked right inside of the ISE. - - - - - Technologies covered in this session include the PowerShell ISE object model, C#, WPF, eventing, Visual Studio 2012, and of course several core PowerShell features. - - - - Kirk Munro - - - - Authoring PowerShell like a Poshoholic - - - - I've been using PowerShell for over 6 years. Blogging about it for over 5 years. Creating and managing products based on PowerShell for about that long as well, and writing a whole lot of scripts during the process. During this time I've come up with a trick or three to make that work easier. Some of these tricks are simple time savers, while others are ground breaking opportunities that just might change the way you write PowerShell.Come and join me in this session to get a bird's eye view at some of the work I've been doing with PowerShell, as I talk about tips, tricks, and best practices while demonstrating some of the extensions I've written specifically to make authoring with PowerShell easier to do. - - - - - Topics discussed include proxy functions, WMI/CIM, Microsoft Office, DSVs, WiX, merge modules, type accelerators, and more. - - - - Aleksandar Nikolic - - - - How to Delegate Administration and Customize PowerShell Session Configuration - - - - In this session you will learn how to customize PowerShell session configuration, and then use it to assign specific administrative tasks to the appropriate users and groups without changing the membership of local Administrators group. By using new Windows PowerShell and Windows Remote Management 3.0 capabilities we will enable dynamic creation of customized automation environments that users can access through the Windows PowerShell Web Access. - - - - - - Aleksandar Nikolic - - - - Configuring Your Windows PowerShell Workflow Environment - - - - In this session you will learn how to set up your environment to run Windows PowerShell workflows. We will discuss different workflow configurations, how to prepare computers to run workflows, what is workflow session configuration and how to customize it. At the end, you will learn how to properly run your Windows PowerShell workflows. - - - - - - Aleksandar Nikolic - - - - Build Your Demo Environment or a Test Lab with Windows PowerShell - - - - With Windows PowerShell 3.0 and the new Client Hyper-V available in Windows 8, it is so easy, and fun, to automate creation of your demo environment or a test lab infrastructure. You can easily convert ISO files to VHDs, deploy your VMs and configure networking and storage. Join us for this demo-heavy session to see all the steps. - - - - - - Alan Renouf - - - - Creating a complex and reusable HTML reporting structure - - - - In this session I will show you the shortcuts and tricks picked up when creating a complex reporting structure with PowerShell, how a simple HTML output script grew to be a reporting structure which can adapt to give detailed, nicely formatted reports on any application or system that has a PowerShell interface, and even some that don't! - - - - - - Alan Renouf - - - - Practical PowerShell Integration from Bare Metal to the Cloud - - - - See how PowerShell can be used as the glue of the datacenter, take information from VMware, Cisco and Microsoft, Glue them all together and go from bare metal up to the cloud and beyond. Learn how PowerShell is now expanding to be the language of choice and how Microsoft and third party products can be tied together to create fantastic solutions. - - - - - - Andy Schneider - - - - PowerShell and Source Control for the IT Pro - - - - Are you ever concerned about updating a script, having it break, and can't remember what you changed. This is source control by an IT Pro for IT Pros. Come check out some best practices and lessons learned on how to incorporate source control as part of writing scripts. Learn how to have your code available via the web and easily accessed on multiple machines. We'll take a look at using GIT to ensure your code is always up to date and you can always get back to where you were if you break something. - - - - - - Andy Schneider - - - - PowerShell and Active Directory - - - - This session will provide a quick overview of different options to manage AD using PowerShell. It will quickly jump into some of the shortcomings of the MSFT provided Active Directory module and how to work around them, and even "fix" them using proxy functions and the new Default Parameter Set feature in V3. - - - - - - Richard Siddaway - - - - CIM sessions - - - - The introduction of the CIM cmdlets and "cmdlets over objects" in PowerShell v3 provide new ways to work with WMI. In addition, they bring a new way to access remote systems ? CIM sessions. Analogous to PowerShell remoting sessions they provide a new flexibility when working with WMI and remote machines. This session will demonstrate: - - How to use CIM sessions against systems running PowerShell v3 - - How to work with legacy installations of PowerShell v2 - - How to use the available CIM session options to configure the session to meet your requirements - - Compare and contrast working with WMI, CIM and WSMAN cmdlets against remote machines to illustrate the strengths and weaknesses of each - - How to mix and match CIM sessions using WSMAN and DCOM.The key takeaways from this session will be: - - The CIM cmdlets provide a new way to access WMI - - WSMAN is required knowledge - - WSMAN and DCOM can both be used with the CIM cmdlets - - CIM sessions are easy to use and very powerful - - No more DCOM problems - - - - - - Richard Siddaway - - - - PowerShell Web Access - - - - PowerShell Web Access is a new feature in Windows Server 2012 that provides a web based PowerShell console. You don't need PowerShell on your client to administer remote machines as long as you have PWA. This session will demonstrate how to configure PWA, its strengths and weaknesses – you might even see PowerShell being accessed from a non-Windows machine! The security implications of PWA will be discussed. PWA will be compared to other ways to access remote machines through PowerShell including PS Remoting and CIM sessions. - - - - - - Richard Siddaway - - - - PowerShell events - - - - The PowerShell event engine enables you to work with .NET; WMI and PowerShell engine events. What are these and how do they work? What can I do with them? Want to stop a process that shouldn't be running? Want to start a process that's stopped? That's what this session will show you with PowerShell events. - - - - - - Ed Wilson - - - - Write modules, not scripts - - - - Learn how to get the most from Windows PowerShell by learning a simple five-step method to transform your Windows PowerShell code into a highly reusable module. This presentation is a live demo that begins with a single line of Windows PowerShell code, transforms the code into a function, adds comment based help to the function, and converts it into a module. Next, the installation and discovery of Windows PowerShell modules is covered, as is updating the module and creating a Windows PowerShell module manifest. Ed Wilson - - - - - - Ed Wilson - - - - What I learned by grading 2000 PowerShell Scripts in the 2012 Scripting Games - - - - The 2012 Scripting Games attracted both experienced and novice scripters from more than 100 countries around the world. In grading the 2000 submitted scripts, I noticed a common theme emerged. Some of the things that were consistently confused by both beginners and advanced scripters include the following: failure to return objects from functions, not creating reusable functions, spending too much duplicating capabilities of native PowerShell, using meaningless comments, omission of error handling, and an overreliance on Write-Host. In this session, I will address each of these areas of concern and show both good and bad examples from the games. A thorough discussion of each of these topics rounds out the presentation. This presentation uses live demos to illustrate the techniques that are discussed. Ed Wilson - - - - - - Ed Wilson - - - - PoshMon: PowerShell does performance counters - - - - One of the cool features on Windows PowerShell 3.0 is easy consumption of WMI performance counters into Windows PowerShell. In the past, leveraging these performance counters meant writing long lines of cryptic code, calling refresher objects, and dealing with weird timestamp issues. But no more! Using a simple cmdlet, Windows PowerShell throws open the door to the treasure trove of performance counter information. But where does the oversubscribed IT pro begin? A question on my Windows NT 3.51 MCSE exam stated there are four areas for performance monitoring: disk, memory, network, and CPU. These four resources have not changed much, regardless of the application these basic areas of investigation still ring true. In this session, I talk about discovering performance counters, using performance counters, and storing information gathered from performance counters. The talk will be strengthened by live demos at each stage of the presentation. - - - - - - Matt Wrock* - - - - Unit Testing PowerShell - - - - This talk will provide a walk through of Unit Testing PowerShell scripts. The OSS project Pester ([https://github.com/pester/Pester](https://github.com/pester/Pester)) will be used to illustrate popular unit testing patterns such as ArrangeActAssert and Mocking to provide testability to PowerShell. There will be discussion on why and when to use unit testing in PowerShell as well. - - - - - - Keep an eye on my blog for additional news about this conference, because more exciting news is on the way! - - - - - - Thanks, - - - - - - Kirk out. - - - - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerShell Summit](http://technorati.com/tags/PowerShell+Summit) - - - - - - [![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/824/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/824/) ![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=824&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - - - [1]: http://powershellsummit.org/ diff --git a/content/articles/2012-11-06-hands-on-workshop-at-the-2013-powershell-summit.md b/content/articles/2012-11-06-hands-on-workshop-at-the-2013-powershell-summit.md deleted file mode 100644 index 7b5dd88c3..000000000 --- a/content/articles/2012-11-06-hands-on-workshop-at-the-2013-powershell-summit.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Hands-on Workshop at the 2013 PowerShell Summit -authors: - - Kirk Munro -date: "2012-11-06T21:43:45+00:00" -aliases: - - /2012/11/hands-on-workshop-at-the-2013-powershell-summit/ ---- - -In my last post I hinted about more news coming soon for the 2013 PowerShell Summit.  In addition to the fantastic list of sessions that attendees will be able to attend, we also have a special event lined up for the last day of the event.  On Wednesday, April 24th, for the entire afternoon attendees will be able to attend a half-day Windows PowerShell scenario walkthrough, presented by the PowerShell Team. - -The event will take place on April 24 from 1pm – 5pm.  During this time the PowerShell Team will work with attendees to collectively solve a problem from the ground up using many of the new features in Windows PowerShell 3.0 and Windows Server 2012. - -Starting from base Windows Server 2012 images, you will walk through: - - * Writing a PowerShell script workflow to perform Server deployments - * Creating a constrained endpoint that hosts only the deployment workflow - * Delegate a set of credentials for the workflow to use - * Exposing the workflow and it's results through a RESTful web service - * Using Windows PowerShell Web Access to manage the workflow - -This is a BYOD event, so please don't forget to bring your own laptop to follow along! - -The facilities we have for the conference can only accommodate 50 people at this event.  To give everyone a fair chance to sign up, on December 1st we will send an email from EventBrite to everyone who has already purchased their conference ticket so that they can then sign-up for this free event.  If you want to have a chance to attend this workshop, you will have a much better chance if you [buy your ticket][1] before that date! - -There will also be other activities that afternoon for those who cannot attend this event due to their travel plans, or if all of the workshop tickets are all gone. If you are able to stick around though and if you can attend this workshop, this should be a fantastic way to end the conference! - -Kirk out. - - - Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerShell Summit](http://technorati.com/tags/PowerShell+Summit) - - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/830/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/830/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=830&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://powershellsummit.com/ diff --git a/content/articles/2012-11-06-special-powershell-team-workshop-to-be-held-at-powershell-summit-n-a-2013.md b/content/articles/2012-11-06-special-powershell-team-workshop-to-be-held-at-powershell-summit-n-a-2013.md deleted file mode 100644 index c3185585a..000000000 --- a/content/articles/2012-11-06-special-powershell-team-workshop-to-be-held-at-powershell-summit-n-a-2013.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Special PowerShell Team Workshop to be Held at PowerShell Summit N.A. 2013 -authors: - - Don Jones -date: "2012-11-06T21:32:24+00:00" -categories: - - PowerShell for Admins -aliases: - - /2012/11/special-powershell-team-workshop-to-be-held-at-powershell-summit-n-a-2013/ ---- - -To cap off the 2013 PowerShell Summit the PowerShell Team is going to host a half day Windows PowerShell scenario walkthrough. This is designed to not only familiarize folks with specific PowerShell features, but also to help the team see how you interact with these features. - - - The event will take place on April 24 from 1pm - 5pm.  During this time we will collectively solve a problem from the ground up using many of the new features in Windows PowerShell 3.0 and Windows Server 2012. - Starting from base Windows Server 2012 images, we will walk you through: - - - - - - - Writing a PowerShell script workflow to perform Server deployments - - - - - Creating a constrained endpoint that hosts only the deployment workflow - - - - - Delegate a set of credentials for the workflow to use - - - - - Exposing the workflow and it's results through a RESTful webservice - - - - - Using Windows PowerShell Web Access to manage the workflow - - - - - - - - This is a BYOD event, so please don't forget to bring your own laptop to follow along. - We can accomodate 50 people at this event. **This will be first-come, first-served registration, open only to paid attendees of the PowerShell Summit N.A. 2013. **We will e-mail the invitation code to **paid attendees** on December 1st (watch your e-mail; it'll come from EventBrite). Once the 50 slots are filled, the workshop will be closed. - If you're attending but don't get a slot in this workshop, or don't want to attend, then you'll be able to partake in some lightning-round and ad-hoc sessions in the Summit's other meeting room. diff --git a/content/articles/2012-11-08-phillyposh-11012012-meeting-summary-and-presentation-materials.md b/content/articles/2012-11-08-phillyposh-11012012-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 7bfaceca3..000000000 --- a/content/articles/2012-11-08-phillyposh-11012012-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: PhillyPoSH 11/01/2012 meeting summary and presentation materials -authors: - - John Mello -date: "2012-11-08T13:49:49+00:00" -aliases: - - /2012/11/phillyposh-11012012-meeting-summary-and-presentation-materials/ ---- - -- - [TJ Turner](http://techguytj.com/) gave a demonstration of how to bring [Server 2012 Core](http://msdn.microsoft.com/en-us/library/windows/desktop/hh846323(v=vs.85).aspx): - - - To [Minimal Server](http://msdn.microsoft.com/en-us/library/windows/desktop/hh846317(v=vs.85).aspx) - - - - - - - - - - To Full GUI - - - - - Back down to [Core](http://msdn.microsoft.com/en-us/library/windows/desktop/hh846323(v=vs.85).aspx) again. - - - - - A copy of his slide deck is available [here](https://powershell.org/wp-content/uploads/2012/10/2012_11_01-PhillyPoSH.zip) - - - - - - - - - [Lido Paglia](http://paglia.org/) gave a demonstration on how to bring a fresh Server 2012 Core install to a functional domain member server using PowerShell commands. A copy of his command outline is available [here](https://powershell.org/wp-content/uploads/2012/10/2012_11_01-PhillyPoSH.zip) - - - - - Script Club : - - - [John Mello](http://mellositmusings.com/) presented his script that generates an email listing all ActiveSync devices that haven't synced in a specified period. A copy of his script is available [here](https://powershell.org/wp-content/uploads/2012/10/2012_11_01-PhillyPoSH.zip) - - - - - - - - - Various other information worth mentioning. - - - Only the Hype-V MMC was updated in Server 2012, No other MMCs were upgraded and no new ones will created going forward. - - - - - [Core Configurator](http://coreconfig.codeplex.com/) for Server 2008 and 2008R2 has been replaced by the [Minimal Server Interface](http://msdn.microsoft.com/en-us/library/windows/desktop/hh846317(v=vs.85).aspx)in 2012. Though it is unconfirmed if Core Configurator for 2008 and 2008 R2 won't work for 2012 - - - - - [Sconfig](http://technet.microsoft.com/en-us/library/ee441254(v=WS.10).aspx) is also recommended in place of Core Configurator - - - - - The following resources and link were recommended during the meeting - - - [PowerShell Cheat Sheets/Quick Ref Cards:](http://www.microsoft.com/en-us/download/details.aspx?id=30002) - - - [Additional cheat sheet links:](http://www.jonoble.com/blog/2011/12/12/powershell-quick-reference-guides-and-cheat-sheets.html) - - - - - - - - - [PowerShell Plus from Idera is now FREE:](http://www.jonoble.com/blog/2012/10/24/powershell-plus-goes-free.html) - - - - - [Two WMI cheat sheets from WMI team:](http://www.powershellmagazine.com/2012/10/29/cim-cmdlets-cheat-sheet-from-the-wmi-team/) - - - - - [Free Creating HTML reports in Windows PowerShell by Don Jones](http://powershellbooks.com/) - - - On the same page is the book [Learn PowerShell 3 in a Month of Lunches](http://bit.ly/PSHv3Lunch), which is highly recommended. diff --git a/content/articles/2012-11-09-verify-your-powershell-skills.md b/content/articles/2012-11-09-verify-your-powershell-skills.md deleted file mode 100644 index 320d41fc6..000000000 --- a/content/articles/2012-11-09-verify-your-powershell-skills.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Verify Your PowerShell Skills -authors: - - Don Jones -date: "2012-11-09T23:58:21+00:00" -categories: - - Announcements - - News - - PowerShell for Admins -aliases: - - /2012/11/verify-your-powershell-skills/ ---- - -A long time ago... about a year, in fact... [Jason Helmick][1] and I started talking about a community-owned PowerShell "certification." It went nowhere. Well, not very far. -Some background on exams: Microsoft, in my opinion, will **never** do a PowerShell cert. I say this having been part owner of a company that did outsourced exam development for the company. The deal is that Microsoft tries to certify _job tasks, _not _tools. _Nobody (well, maybe me) wakes up thinking, "gonna do me some PowerShell today." No, PowerShell is the means to an end: "gonna automate me some user creation today" is more likely. And Microsoft tries to certify that end. PowerShell's an important tool, and it already shows up on certification exams here and there. -For the most part, I agree with Microsoft's reasoning, there. The argument can be summarized as saying "bosses don't hire IT pros based on their ability to operate a low-level tool, they hire them to perform job tasks, which _encompasses_ the tool." Except that, in the case of PowerShell, I think it'd be _tremendously_ useful for an employer to use PowerShell expertise as a discriminating factor in hiring. I mean, "someone who can automate stuff" is more valuable than "someone who can only do stuff manually," in any situation. -So "PowerShell Verified" was intended to be a way for someone to prove - at least to themselves - that they've taken their PowerShell skills _to the minimum level necessary to be an effective automator. _Not a guru. Not an expert. Not [Poshoholic][2]. _Minimally effective, _who could then grow from there with experience. -So that's what I'm going to put together. -I want to explain why I'm not using the word "Certification," though. In my mind, certifications come from, mainly, first-parties like Microsoft. Microsoft has to jump through a lot of hoops to make sure their exam content is accurate, legally defensible, blah blah blah. They worry about security, brain dumps, and other stuff that diminishes the value of the certification. I don't have that kind of bandwidth or their resources, so in many ways my little program will be less effective than a "real" certification. Plus, few bosses will give a rat's patooty what that Don Jones guy said about your skillz (I can't even convince bosses to buy you guys 12-core 64GB workstations for your desk). So my "Verified" program is going to be _low stakes, _meaning you take it to prove something to _ -yourself -_. -Here's how this is going to go. - - -## How You Can Help - -First, I'm attaching a doc with the general program description. Drop a comment in here after you read it, and tell me what you think. [PowerShellVerified][3] (it's a Word doc). -Second, the cost on this is going to be in the neighborhood of $100. There's some infrastructure that has to support this, because it's a _practical, hands-on exam using the actual product _running in a cloud-based virtual environment. To the cloud! -Third, let me know if you'd like to participate in a LiveMeeting where I'll cover the general approach of the test scenario, and gather your feedback. This is appropriate mainly if you're pretty high-level in your org - senior IT, IT management, etc. In the comment, give me a way to contact you (Twitter's fine). You **will** be asked to sign a Nondisclosure Agreement (NDA) prior to that LiveMeeting, which will be in January sometime, I think. -Fourth, let me know if you'd like to beta test this. I'm only taking 2-3 people for this. For logistical reasons, you need to be in the US (mainly to keep time zone coordination from becoming a hassle) and you need to have a Twitter handle. Drop that handle in a comment if you'd like to beta. That'll be free. - -## What's Tested - -Now, for a bit of background. This first-go will verify what I call **toolmaker** competency. That means you have the skills needed to write and deploy high-level tools across your organization, particularly those which involve delegated administration. The scenario **will** be slightly artificial, but that's so that it can include a number of underlying objectives that test the breadth of your PowerShell knowledge. That said, the overall skill set you'll have to demonstrate will be _very_ real-world. No esoteric stuff, here, just techniques you'd actually deploy for real-real. I know there are a _lot_ of other things that could be tested; this is where I'm choosing to start because I can make it relatively constrained, and therefore automate the grading process somewhat. -The focus of the exam will be on _PowerShell. _Not AD, not Exchange, not anything domain-specific. The intent is PowerShell competency, not your super guru-ness with some other product. -Alright. Let me know what you think. - - [1]: http://twitter.com/thejasonhelmick - [2]: http://poshoholic.com - [3]: https://powershell.org/wp-content/uploads/2012/11/PowerShellVerified.docx diff --git a/content/articles/2012-11-16-charts-in-powershell-generated-reports.md b/content/articles/2012-11-16-charts-in-powershell-generated-reports.md deleted file mode 100644 index 0db7e29f9..000000000 --- a/content/articles/2012-11-16-charts-in-powershell-generated-reports.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Charts in PowerShell-Generated Reports -authors: - - Don Jones -date: "2012-11-16T23:09:05+00:00" -categories: - - PowerShell for Admins -aliases: - - /2012/11/charts-in-powershell-generated-reports/ ---- - -So, as you may know, I have an ongoing hobby project called _Creating HTML Reports in PowerShell. _I'm working on an update for next year, and one of the things I've been looking at are embedded charts within the report. -Problem is, I don't know what people would actually chart. Now... I'm going to ask you for ideas, but you need to read this whole post before you go popping a comment in. Because there are some restrictions. -**First**, I'm  -not talking about historical data or trend reports -. Those require a data store of historical data. If you're not using SQL Server for that (even free SQL Express), learn how. Excel is  -not - your trend database, no matter how little learning it requires (and I bet if you added up all the time you've spent becoming an Excel jockey, you'd be shocked). Once you've got the data in SQL (even Express), you can use SQL Server Reporting Services (SSRS) to generate truly kick-butt reports with very little effort. Reports which can be scheduled and e-mailed. Truly, folks, this is worth spending time on - and I may make that my next ebook project. -**Second, **don't tell me "disk space." I know that one. Pie and stacked bar charts showing size/free space are a great idea. Got it. Anything else? -**Third, **I'm not talking about performance charts. PerfMon does those, and also, see my first point. PowerShell is not a performance monitoring tool. Operations Manager is. Oh, and it dumps data into SQL Server and you can use SSRS to report on it. If your company needs historical performance reports (and most probably do) and is to cheap to get you a real monitoring solution, consider taking drastic measures. I'm not suggesting you put Ex-Lax in the boss' coffee every time he asks you to re-create OpsMan on your own. He'd deserve it, and it might help, but I'm not suggesting it. -In keeping with point 3, that means I don't want suggestions like "charts showing network throughput." That's performance. I'm not suggesting such a thing wouldn't be useful, because I know it would be. I'm saying it's out of scope for this particular project. If you give me in-scope suggestions, I'll build you a tool. Fire off out-of-scope stuff and I'm just going to go build a kegerator for my beer instead. -**SO**... given those restrictions, what sort of data could you query from a computer (say, using WMI/CIM or something) that you'd want displayed in chart form? Anything? diff --git a/content/articles/2012-11-18-help-beta-test-a-new-free-ebook-on-powershell-reporting.md b/content/articles/2012-11-18-help-beta-test-a-new-free-ebook-on-powershell-reporting.md deleted file mode 100644 index 7969e6c5d..000000000 --- a/content/articles/2012-11-18-help-beta-test-a-new-free-ebook-on-powershell-reporting.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Help Beta-Test a New Free eBook on PowerShell Reporting -authors: - - Don Jones -date: "2012-11-18T18:11:37+00:00" -categories: - - PowerShell for Admins -aliases: - - /2012/11/help-beta-test-a-new-free-ebook-on-powershell-reporting/ ---- - -I've [written previously][1] about my frustration with reporting in PowerShell - how I see admins struggle with ugly, low-level COM code to manipulate Excel spreadsheets, just so they can get nice-looking reports with a degree of automation. -Enough. -The _right_ thing to do is put your data in SQL Server, and use SQL Server Reporting Services to generate _awesome_ looking reports, complete with charts and graphs. With the right setup, you can completely automate data collection, report generation, and delivery. And it doesn't have to cost _a single dime._ Plus, the learning curve isn't too steep, and the skills you'll learn along the way will be _massively_ beneficial to you over the long haul - far more so than the time sunk into becoming an Excel jockey. -So I've written a little book about it, which you'll find on at https://powershell.org/ebooks, entitled _Making Historical and Trend Reports in PowerShell._ Unlike my earlier book on HTML reporting, which was mainly around producing inventory reports, this one's specifically designed to make reports based on collected-over-time data, like disk utilization, performance, and so on. And I've bundled in a PowerShell module that should make this _easy,_ insulating you from 99% of the SQL Server-related stuff. -Right now (November 2012) I'm looking for folks to test stuff out and let me know (via comments here) if you find any problems. I want to make sure that what I've got in here works and is understandable. Final publication is scheduled for January 2013, after which I'll start taking suggestions for stuff to add to the book. - - [1]: https://powershell.org/2012/11/16/charts-in-powershell-generated-reports/ "Charts in PowerShell-Generated Reports" diff --git a/content/articles/2012-11-24-what-to-do-if-you-dont-score-a-powershell-summit-ticket.md b/content/articles/2012-11-24-what-to-do-if-you-dont-score-a-powershell-summit-ticket.md deleted file mode 100644 index 659ffca10..000000000 --- a/content/articles/2012-11-24-what-to-do-if-you-dont-score-a-powershell-summit-ticket.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "What To Do If You Don't Score a PowerShell Summit Ticket" -authors: - - Don Jones -date: "2012-11-24T20:46:11+00:00" -categories: - - Announcements -aliases: - - /2012/11/what-to-do-if-you-dont-score-a-powershell-summit-ticket/ ---- - -As I write this, we're down to one ticket for the [PowerShell Summit North America 2013][1]. So what do you do if you really wanted to go, but miss that last, golden ticket? - -## Cry a Little - -Let's face it, this was totally avoidable. It's probably your boss' fault for not approving the expense, and so some subtle retribution may be in order. Burn the coffee for a week. Reboot domain controllers randomly. You know, just sulk. - -## Waitlist - -But all is not lost. You can still [go through the registration process][2] and get on the wait list. You won't have to pay any money. If a slot opens up, you'll be notified via e-mail from EventBrite, and have 24 hours to purchase the ticket. If you don't buy it within 24 hours, you'll go to the bottom of the list and the next person will be offered the ticket. There's a solid chance that at least a few top waitlist spots will be filled; I know we have a couple of tentative attendees, and we have a couple of volunteers who've said they'd give up their spot (but continue to help out at the event) if it came down to this. - -## Plan Ahead - -Our 2014 event will go on sale in April, 2013, during the 2013 event. Don't miss it next time! Start getting the boss on board in advance, like maybe in February or March. We _know_ the cost is going to be higher next time - we're going to try and move to an actual conference center, and that's just a bit more expensive. We also need to do a better job of fully reimbursing speaker expenses, which we might not be able to do 100% this time. But we're still going to try and keep things as close to our cost as possible. - - [1]: http://powershellsummit.org - [2]: http://powershellsummit.eventbrite.com/# diff --git a/content/articles/2012-12-10-phillyposh-12062012-meeting-summary-and-presentation-materials.md b/content/articles/2012-12-10-phillyposh-12062012-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 464a2e06e..000000000 --- a/content/articles/2012-12-10-phillyposh-12062012-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: PhillyPoSH 12/06/2012 meeting summary and presentation materials -authors: - - John Mello -date: "2012-12-10T16:52:55+00:00" -aliases: - - /2012/12/phillyposh-12062012-meeting-summary-and-presentation-materials/ ---- - -- - [John Mello](http://mellositmusings.com/) gave a presentation entitled "Intro to PowerShell's Pipeline, Part 1". A copy of his slide deck and code examples are available [here](https://powershell.org/wp-content/uploads/2012/12/PhillyPosh_2012-12-05_Presentations.zip). - - - - - Script Club : - - - John R. Nahrgang and [Lido Paglia](http://paglia.org/) presented a work in progress script that returns all the members of the Local Administrators Group on a filtered list of Active Directory PCs. A copy of the script is available [here](https://powershell.org/wp-content/uploads/2012/12/PhillyPosh_2012-12-05_ScriptClub.zip). - - - - - - - - - Various other information worth mentioning. - - - In response to [last month's script club](https://powershell.org/2012/11/08/phillyposh-11012012-meeting-summary-and-presentation-materials/), Carl Larson submitted a script that splits an Active Directory users' *distinguishedName* into an array and then put's it back together so that you can get the Parent OU. This script is meant as a jumping off point for [John Mello's](http://mellositmusings.com/) expressed difficulty trying to pull a user name from a full Active Directory path. A copy of the script is available [here](https://powershell.org/wp-content/uploads/2012/12/PhillyPosh_2012-12-05_Extras.zip). diff --git a/content/articles/2012-12-18-powershell-deep-dives.md b/content/articles/2012-12-18-powershell-deep-dives.md deleted file mode 100644 index a5df49443..000000000 --- a/content/articles/2012-12-18-powershell-deep-dives.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: PowerShell Deep Dives -authors: - - Richard Siddaway -date: "2012-12-18T19:23:45+00:00" -aliases: - - /2012/12/powershell-deep-dives/ ---- - -PowerShell Deep Dives is a book put together by the PowerShell community. I"™m editing one of the sections and have contributed some of the chapters. Manning have just started releasing it on their MEAP program. The full book will hopefully be ready in the spring. - -Best of all the royalties are being donated to worthwhile cause. - -Check it out – [http://manning.com/hicks/][1] - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2772/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2772/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2772&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: http://manning.com/hicks/ "http://manning.com/hicks/" diff --git a/content/articles/2012-12-18-writing-10961-the-ultimate-lab.md b/content/articles/2012-12-18-writing-10961-the-ultimate-lab.md deleted file mode 100644 index b0766b37b..000000000 --- a/content/articles/2012-12-18-writing-10961-the-ultimate-lab.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Writing 10961: The Ultimate Lab" -authors: - - Don Jones -date: "2012-12-18T20:50:30+00:00" -categories: - - PowerShell for Admins -aliases: - - /2012/12/writing-10961-the-ultimate-lab/ ---- - -My company has been contracted by Microsoft to design and author Microsoft Official Curriculum (MOC) course 10961A, Automating Administration with Windows PowerShell v3. While there is no announced release date I can share, I did want to share some of the experience. -As I write this, 10961A's proposed outline is going through several review cycles. In the meantime, I wanted to sit down and start doing some detail-level design on some of the more complex labs in the course - the most complex of which is a proposed Module 10, consisting of little more than a big, 2-hour lab where you write a script to provision a newly installed Server Core computer. -This, for me, is the ultimate lab. It's practical, meaning it focuses on a scenario that's extremely real-world. It's also not "perfect," meaning it doesn't throw you into an everything-just-works environment and hand-hold you though a few self-guided demos. Initiating communications between a domain client and a non-domain machine is tricky in PowerShell, and automating that is not entirely straightforward. -The approach I'm planning to take will break down all the major sub-tasks, and then walk students through some of the considerations for each. What commands will you need? What information will you need up front in order to run them? Where will you get that information - and how? I think it'll be a very nice "putting it all together" module (although there are two modules after it, so it isn't exactly the end of the course). It should occupy the entire afternoon of the course's fourth day (Thursday), which makes for a nice open-ended wrap to that day (meaning faster students can finish and leave early, while leaving time for slower students to work through everything without feeling rushed). -In the lab, you'll write a parameterized script that saves off your old Remoting TrustedHosts list, queries DHCP for the new server's IP address, and saves that IP address into your TrustedHosts. You'll make a Remoting connection to the new machine and have it join itself to the domain while renaming itself, wait for it to reboot, and then add a role (IIS) to it. You wrap by putting TrustedHosts back to where it came from. -This is actually a trimmed-down, more methodical version of a workshop I just did last week at Live! 360 in Orlando. That workshop took four hours, which I don't have in the class' time budget, so I trimmed out a few things that were cool, but not entirely necessary, such as testing to see if a DHCP reservation already exists before creating one (without testing, you can potentially get an error, but it's non-tragic). -I'm looking forward to getting into the actual writing of the module once the outline is approved; I think this'll really be the highlight of the course. It replaces a module in the older 10325A course (which I also wrote) where you break down a script _someone else wrote,_ customizing it to run in your environment. While I think that's a useful skill, the feedback I got was that it wasn't the most interesting lab possible, and that the script I provided (written by Jeffery Hicks, actually) was pretty complex given the time allotted. This new lab provides the same beginning-to-end scripting opportunity, but hopefully folks will find it to be a lot more practical and useful, both educationally and when they get back to the office. diff --git a/content/articles/2012-12-19-renaming-a-user.md b/content/articles/2012-12-19-renaming-a-user.md deleted file mode 100644 index d25d213ff..000000000 --- a/content/articles/2012-12-19-renaming-a-user.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Renaming a user -authors: - - Richard Siddaway -date: "2012-12-19T15:45:34+00:00" -aliases: - - /2012/12/renaming-a-user/ ---- - -I was asked about searching a user name for a string and replacing it so that the object is renamed. - -This is a three stage activity. First get the user. Two modify the name. Three rename the object. In active directory the name attribute has the LDAP name of cn but the Microsoft AD cmdlets treta it as name. So we end up with this code: - - -`$user - -= - -Get-ADUser - --Filter - -{ - -cn - --eq - -'GREYIEN Bill' - -} - - -$newname - -= - -$user - -. - -Name - -. - -Replace - -( - -"YI" - -, - -"A" - -) - - -Rename-ADObject - --Identity - -$user - --NewName - -$newname - --PassThru - -`The trick is in the middle line because the name is a string so you can use the standard string methods to perform the search and replacement. Using "“Passthru displays the object so you can see the change has taken place. - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2773/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2773/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2773&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2012-12-20-uk-powershell-group-sessions-for-2013.md b/content/articles/2012-12-20-uk-powershell-group-sessions-for-2013.md deleted file mode 100644 index 7ff89d9b6..000000000 --- a/content/articles/2012-12-20-uk-powershell-group-sessions-for-2013.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: UK PowerShell Group sessions for 2013 -authors: - - Richard Siddaway -date: "2012-12-20T17:17:23+00:00" -aliases: - - /2012/12/uk-powershell-group-sessions-for-2013/ ---- - -This is the list of proposed sessions for 2013. It is subject to change depending on circumstances. - -All sessions are delivered by Live Meeting on Tuesdays at 7:30 UK time - -29 January – PowerShell and Active Directory -26 February – PowerShell Advanced Functions -26 March – PowerShell cmdlets for Hyper-V -30 April – Notes from the PowerShell summit (may be changed) -21 May – Powershell Web Access -25 June – guest speaker PowerShell MVP Max Trinidad -30 July – Lessons from the Scripting Games -27 August – PowerShell eventing engine -24 September – CIM – cmdlets and sessions -29 October – PowerShell and XML -26 November – PowerShell type system – formatting and types files -17 December – PowerShell error handling - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2777/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2777/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2777&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2012-12-20-wmf-compatibility.md b/content/articles/2012-12-20-wmf-compatibility.md deleted file mode 100644 index 2518b45aa..000000000 --- a/content/articles/2012-12-20-wmf-compatibility.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: WMF compatibility -authors: - - Richard Siddaway -date: "2012-12-20T16:18:43+00:00" -aliases: - - /2012/12/wmf-compatibility/ ---- - -The Windows Management Framework 3.0 has been released as a Windows update. - -However there are some compatibility issues as documented on the PowerShell team blog. if you haven"™t see the post it here - -[http://blogs.msdn.com/b/powershell/archive/2012/12/20/windows-management-framework-3-0-compatibility-update.aspx][1] - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2775/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2775/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2775&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: http://blogs.msdn.com/b/powershell/archive/2012/12/20/windows-management-framework-3-0-compatibility-update.aspx "http://blogs.msdn.com/b/powershell/archive/2012/12/20/windows-management-framework-3-0-compatibility-update.aspx" diff --git a/content/articles/2012-12-21-powershell-org-our-first-year-in-review.md b/content/articles/2012-12-21-powershell-org-our-first-year-in-review.md deleted file mode 100644 index 3fe91b196..000000000 --- a/content/articles/2012-12-21-powershell-org-our-first-year-in-review.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: "PowerShell.org: Our First Year in Review" -authors: - - Don Jones -date: "2012-12-21T17:28:34+00:00" -categories: - - PowerShell for Admins -aliases: - - /2012/12/powershell-org-our-first-year-in-review/ ---- - -In September 2012, we incorporated PowerShell.org, Inc., and founded PowerShell.org. Our goal was to provide a solid Q&A forum, and to act as a portal to the rest of the PowerShell community. -By any measure, we've had a great first showing. -We have more than a dozen shareholders in PowerShell.org, Inc., making this the first community-owned PowerShell organization ever. We've signed on three Platinum sponsors - [CBT Nuggets][1], [SAPIEN Technologies][2], and [Interface Technical Training][3]. We're now funded for 2-3 years of operation, including providing (upon request), gift cards to help local user groups pay for pizza and other monthly meeting expenses. -PowerShell.org is now taking an average of 18,000 visits per month from more than 12,000 unique visitors, with a total of almost 57,000 monthly page views. Our forums have helped more than 760 people answer more than 850 questions. -Microsoft's Scripting Guy, Ed Wilson, has handed off the Scripting Games for 2013, and we're preparing for a small-scale "Winter Scripting Camp" trial run that will include a purpose-built platform for reviewing events, submitting entries, and judging. And by the looks of things, that platform will run on PowerShell itself. -We've announced our first [PowerShell Summit North America][5], and have completely sold out. We're already doing initial planning for 2014, aiming for a larger venue and hoping to accommodate twice as many attendees, and to fully cover speaker travel expenses. -We've launched PowerShell People, accessible via PowerShell.net, where you can write a PowerShell script to create and post your own profile and "brag" page about your PowerShell activities and accomplishments. -We've launched three free PowerShell.org-branded [ebooks][7], and are preparing to launch our PowerShell.org TechLetter _monthly_ (!!!) e-mail newsletter complete with feature articles, news updates, and more. That's by (free) subscription only, so sign up if you haven't done so already! We've also had help from [Jason Hofferle][9] on our new Books page, rounding up all the free and commercial PowerShell books out there. -It's been a whirlwind year, and it's all thanks to you for supporting it. By asking questions in the forums, offering answers, creating your People page, registering for the Summit, signing up for the Newsletter - all of these little activities spur us all on to new heights, and we appreciate all the feedback you've offered. There will be more to come - follow the [community on Twitter][10] (and the [Summit][11] too, while you're at it) for the latest announcements.If you'd like to contribute, just drop a note in the Suggestion Box [forum][12] - whether you want to help monitor a discussion forum, write book reviews, or whatever, there's always room to contribute. -There have been some setbacks. [Will Steele][13], who had volunteered to populate our Events page, has had to step down due to health problems. Will has been a great contributor to the site and to the overall community, and we miss him. Our thoughts are with him and his family this holiday season. -As we all wind down and look forward to the New Year, I wanted to personally express my gratitude to everyone who's helped make all of this happen. Happy Holidays, Happy New Year, and I'll see you again in 2013! -Don Jones -President and CEO, PowerShell.org, Inc. - - [1]: http://cbtnuggets.com - [2]: http://sapien.com "Writing 10961: Remoting" - [3]: http://interfacett.com - [5]: /summit/ - [7]: http://powershellbooks.com - [9]: http://twitter.com/jhofferle - [10]: http://twitter.com/powershellorg - [11]: https://twitter.com/PSHSummit - [12]: https://forums.powershell.org - [13]: http://twitter.com/pen_test diff --git a/content/articles/2012-12-21-writing-10961-remoting.md b/content/articles/2012-12-21-writing-10961-remoting.md deleted file mode 100644 index cb430d9a8..000000000 --- a/content/articles/2012-12-21-writing-10961-remoting.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Writing 10961: Remoting" -authors: - - Don Jones -date: "2012-12-21T15:26:43+00:00" -categories: - - PowerShell for Admins -aliases: - - /2012/12/writing-10961-remoting/ ---- - -As I write this, we're close to sign-off on the outline of 10961A, which is a new 5-day Microsoft course on PowerShell v3. I sat down yesterday and starting doing some detailed-level design work on the proposed Module 9, which will cover PowerShell Remoting. -I _love_ Remoting (and yes, I capitalize the "R" when referring to the specific feature, much as I would for Workflow). And although I've taught Remoting over and over and over since it was introduced in v2, although with this course I'm trying something a bit new. -I'm going to start by covering the basics: What Remoting is, what WS-MAN is (and yes, I know it's formally called WS-Management, but you never see it referred to that way in-product), what WinRM is, and so on. I cover Invoke-Command and Enter-PSSession. Then I get into some advanced stuff, primarily covering how to pass arguments to Invoke-Command via its -ArgumentList parameter and an in-scriptblock Param() block. Surprisingly, _this isn't covered in the examples of Invoke-Command in the help._ I was shocked to discover that. I need to use that technique in Module 10, so I'm covering it in 9. -Then I get into sessions, and I also cover disconnected sessions. Then the cool begins. -I cover both implicit remoting (which is tons easier to do in v3) and delegated administration via custom session configurations (also vastly easier in v3). In the penultimate lab for the module, students will create a Remoting endpoint that contains a single command (Set-ADAccountPassword), have that command run under Domain Admin credentials, and restrict the endpoint to members of a HelpDesk domain user group. Voila, delegated administration! We don't go so far as to build a GUI tool atop it all, but that would be out of scope for this course. As-is, the lab covers an _extremely_ real-world use of PowerShell and Remoting, and does it in a very practical and production-ready way. I think it's gonna be awesome. diff --git a/content/articles/2012-12-24-writing-10961-first-module-in-for-review.md b/content/articles/2012-12-24-writing-10961-first-module-in-for-review.md deleted file mode 100644 index f63b0c029..000000000 --- a/content/articles/2012-12-24-writing-10961-first-module-in-for-review.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Writing 10961: First Module in For Review" -authors: - - Don Jones -date: "2012-12-24T15:28:20+00:00" -categories: - - PowerShell for Admins -aliases: - - /2012/12/writing-10961-first-module-in-for-review/ ---- - -Microsoft course 10961, which will be a 5-day course on PowerShell 3.0, is officially in development! We received signoff on the outline this week, and I've submitted a first module for review. A big part of that review is making sure I'm using the template properly, as the authoring tool is fairly complex. It does, however, offer (more-or-less) one-touch publishing of the student manual, instructor slide deck, OneNote trainer pack, Lab Answer Key, and other documents, so it's worth a bit of complexity. -The outline process, along with the actual details of the writing, has been challenging. I pored through the feedback for 10325A, and the only consistent thing I took away was a general feeling that students and instructors worldwide are _really, really_ different! -Some European instructors cautioned against running class longer than 3 or 4pm. US instructors pointed out that a short day ending at 3pm often left students feeling shortchanged. Er. To try and accommodate both crowds, most days in 10961A will end in a significant lab, letting folks kind of free-form the end of the day however they want. -Many folks pointed out that they liked to get into variables early in the course, not so much for scripting purposes but to simplify command-line stuff. Other instructors suggested I avoid variables too early, since they created the impression of a programming course, which scared off some students. Again... er. So I'm officially waffling on that one: I don't _formally_ cover variables until fairly late in the course (well, midway), but I _introduce_ them quite early. It means students can potentially see and use variables on day 1, although I don't get into all the details about how they work, naming rules, and so on. The way I'm writing them in, instructors also have the option to just gloss over them or skip them entirely if their students aren't ready. -I asked a few MCTs to look over some of my draft material and give me a delivery time estimate. I had pacing ranging from 2 minutes per slide to almost 8. Er. So I'm going with fairly simple slides that have minimal bullets (always, in most folks' opinion, the right thing to do). Instructors can then decide how deeply they'll cover the material based on their class' needs. It does mean the instructor will need to be familiar with the material in advance - this will be a tough course to just pick up and teach ad-hoc. As, I believe, it should be. -If there's a theme here, it's that _you need a good instructor_ teaching you. As a courseware author, all I can really do is provide raw material, and an instructional design that leads _most_ students through a sensible learning progression. But the instructor's value-add is to be able to switch things up to meet the specific needs of their class. Every time an instructor tells me, "oh, I always move Module 11 to the second day of class," I don't take it as a sign of bad instructional design - I take it as the sign of a good instructor who hopefully is making the change to benefit his class. But classes vary widely, and I kind of have to write for the worst-case scenario. That can sometimes make a course seem overly timid - but that's why the instructor is there, to add their own value, experience, examples, and demonstrations to further instruct and clarify. -So the one thing I'm keeping in mind as I write 10961 is to _leave room for the instructor to shine._ Don't fill the course so full of information that the instructor has no wiggle room. Give the instructor the ability to go slowly and less deep for classes that need it, and to go faster and deeper for classes that need _that._ Provide instructors with notes on what can be skipped if necessary, and what's absolutely critical, so that they can triage. I'll be doing a prep video to help provide even more context to instructors in that regard, and to let them know that customizing the delivery is absolutely okay, provided they're doing so with an understanding of the original instructional design. -Fingers crossed. diff --git a/content/articles/2012/01/_index.md b/content/articles/2012/01/_index.md new file mode 100644 index 000000000..fbf15ff9a --- /dev/null +++ b/content/articles/2012/01/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from January 2012" +description: "PowerShell.org Articles published in January 2012." +--- diff --git a/content/articles/2012/01/essential-powershell-to-alias-or-not-to-alias-that-is-the-question/index.md b/content/articles/2012/01/essential-powershell-to-alias-or-not-to-alias-that-is-the-question/index.md new file mode 100644 index 000000000..b3be0d3d3 --- /dev/null +++ b/content/articles/2012/01/essential-powershell-to-alias-or-not-to-alias-that-is-the-question/index.md @@ -0,0 +1,41 @@ +--- +url: /articles/2012-01-05-essential-powershell-to-alias-or-not-to-alias-that-is-the-question/ +title: "Essential PowerShell: To alias, or not to alias, that is the question" +authors: + - Kirk Munro +date: "2012-01-05T14:30:00+00:00" +aliases: + - /2012/01/essential-powershell-to-alias-or-not-to-alias-that-is-the-question/ +--- + +Recently there was a discussion between community experts and a product team about a module they are working on.  The topic being discussed was cmdlet aliases: whether or not they should provide aliases for their cmdlets out of the box and if so, how they should be provided.  Aliases are great for ad-hoc PowerShell work, which is what most PowerShell users do at this point, and incredibly useful when you"™re trying to put out a fire and managing your infrastructure using PowerShell.  However, there are many important things that module authors need to consider when planning aliases for their cmdlets, as follows: + +1. There are many cmdlets out now, and more and more every month.  Coming up with a vsa (very short alias) that is _unique_ is a challenge at best, and the more time goes by the more tla's (three-letter aliases) will get used up.  The likelihood of an alias conflict is already high, and increasing all the time given the number of commands that are available both from Microsoft and from third party vendors. + +2. The land grab with alias names is worse than it is with functions or cmdlets.  With functions or cmdlets, you can have multiple modules loaded with conflicting names and access either command using the fully qualified command name.  With aliases though you are not provided this same capability "“ there can be only one.  Aliases are simply commands set to a single value and they cannot be qualified using a module name qualifier to disambiguate if a name conflict arises. + +3. Depending on how careful (or not) that developers are, it is very easy for a module author to completely take over (overwrite) an existing alias with no warning or message indicating that this has happened, resulting in potential command hijacking between module teams.  A simple call to Set-Alias does this without warning.  On the flipside, if developers don"™t hijack aliases, then some of the aliases they would otherwise create may simply not be defined. + +4. When aliases are hijacked, unloading a module doesn't correct the problem because an alias that was overwritten by a module alias will simply become completely unavailable when the alias is removed as the module is unloaded. + +As far as I am aware, this situation does not improve with the next version of PowerShell either, so it's years away from getting better. + +Believe it or not, even with these things in mind, I'm actually still pro aliases.  I just think that some extra care/thought needs to be put into their definition.  There is no real standard here that both satisfactorily addresses the issues identified above and that allows for consistency across companies/teams at this time.  Given that is the current state of affairs, if you are considering aliases for your module I recommend one of the following approaches: + +1. [SAFEST] Rather than trying to come up with something that can be shipped despite these issues, at this time I think aliases would be best addressed in a "tips and tricks" type of blog post, proposing a short script that defines some useful aliases for the module/snapin in question in order to allow admins to be able to deal with fires quickly using ad-hoc PowerShell commands via some aliases.  Such a script should generate warnings whenever a name conflict is discovered so that users are aware when an alias either cannot be created or is overwritten. + +2. [EXPERIMENTAL] Ship aliases with your module, but try to make sure they really are unique.  For example, if you"™re a vendor whose company name starts with Q, you could prefix all of your aliases with "q".  This is attractive because there are no verbs that start with "q", so right from the start you've dramatically reduced the chance that you'll have a conflict, setting yourselves up better to have aliases that belong to you.  Then you would only have to coordinate within your company to make sure the aliases used across teams are unique.  This isn"™t foolproof though because there may be multiple products/vendors that adopt the same standard, and if the name of your company or product starts with G, the likelihood of a conflict would be much higher (the alias prefix used for "get-*" cmdlets is "g") so you may want to choose a pair of letters instead.  Regardless, you've likely reduced the risk, and you could generate a warning whenever you run into a conflict that prevents an alias from being created. + +3. [RECOMMENDED] Lots of 1 and a little bit of 2: use unique alias names that work for your product team/company, but don't ship them with the module.  Instead, push them out as a value add on a blog post, and see how the community responds.  At the same time work with MVPs and Microsoft to get these issues addressed such that a shorthand system for command names does work.  Some MVPs, already proposed a few things to the Microsoft PowerShell team that could help here (aliases for module names for one — think PS\gsv for a core PowerShell version of Get-Service or EX\gu for the Get-User cmdlet that comes with the Microsoft Exchange module or AD\gu for the Get-User cmdlet that comes with the Microsoft Active Directory module, and so on), but more discussions need to happen and this will take more time. + +I recommend the third option because given the current issues with alias hijacking and with no support for disambiguation, it seems to be the best solution for now (from my perspective at least).  If you have come up with other alternatives that resolve these issues, please share them with the community so that this improves going forward. + +Hope this helps, + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[Essential PowerShell](http://technorati.com/tags/Essential+PowerShell),[alias](http://technorati.com/tags/alias) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/738/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/738/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=738&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2012/01/powerse-2-7-kb-powershell-profile-does-not-load-on-startup/index.md b/content/articles/2012/01/powerse-2-7-kb-powershell-profile-does-not-load-on-startup/index.md new file mode 100644 index 000000000..20a7acd0f --- /dev/null +++ b/content/articles/2012/01/powerse-2-7-kb-powershell-profile-does-not-load-on-startup/index.md @@ -0,0 +1,40 @@ +--- +url: /articles/2012-01-25-powerse-2-7-kb-powershell-profile-does-not-load-on-startup/ +title: "PowerSE 2.7 KB: PowerShell profile does not load on startup" +authors: + - Kirk Munro +date: "2012-01-25T19:01:59+00:00" +aliases: + - /2012/01/powerse-2-7-kb-powershell-profile-does-not-load-on-startup/ +--- + +Note: This blog post refers to an issue identified in PowerSE 2.7.0. It has been corrected in PowerSE 2.7.1, which is now available. + +With the release we published yesterday, both [PowerSE][1] and [PowerWF][2] received a new feature: product-specific profiles.  This feature allows you to have profile scripts that you only want run in PowerSE or PowerWF run there so that you don"™t have to use if statements to check the host name in your profile scripts.  With this feature we also created the initial PowerSE and PowerWF profile scripts such that they dot-source the native PowerShell profile script by default so that what runs in PowerShell also runs in PowerSE. + +Unfortunately there is one small detail that was left out of the PowerSE installer for this feature: the installation of the initial PowerSE-specific profile. As a result, if you download PowerSE 2.7, your PowerShell profile won"™t run right away.  Fortunately the fix is simple.  All you need to do is invoke this script from inside PowerSE 2.7: + +> if (-not (Test-Path -LiteralPath $profile)) { +>     Set-Content -Path $profile -Value @' +> if (Test-Path -LiteralPath $profile.CurrentUserPowerShellHost) { +>     . $profile.CurrentUserPowerShellHost +> } +> '@ +> } + +Once you have run that script, your PowerSE profile will exist and it will be defined to load your PowerShell profile.  Restart PowerSE 2.7 and you"™ll have your PowerShell profile loaded by default again. + +Note that this does not apply to PowerWF users, the profile scripts were added correctly to the installer for that release. + +My apologies for the inconvenience.  We hope to have this resolved in the product itself very soon.  In the meantime this short script should work around the issue for you. + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerSE](http://technorati.com/tags/PowerSE),[KB](http://technorati.com/tags/KB),[profile](http://technorati.com/tags/profile) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/750/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/750/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=750&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://powerwf.com/products/powerse.aspx + [2]: http://powerwf.com/products/powerwf.aspx diff --git a/content/articles/2012/01/powershell-mvp-for-2012/index.md b/content/articles/2012/01/powershell-mvp-for-2012/index.md new file mode 100644 index 000000000..6f8e01ff9 --- /dev/null +++ b/content/articles/2012/01/powershell-mvp-for-2012/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2012-01-04-powershell-mvp-for-2012/ +title: PowerShell MVP for 2012 +authors: + - Kirk Munro +date: "2012-01-04T17:51:39+00:00" +aliases: + - /2012/01/powershell-mvp-for-2012/ +--- + +Every year around Christmas I anxiously await the New Year to see if I receive the Microsoft MVP award again that year.  Well that email came on January 1, 2012, and I"™m quite thrilled about this one because it"™s a milestone this time (year 5 as a PowerShell MVP).  Thanks to the community for being so great to work with, and thanks to Microsoft both for recognizing individual efforts with the MVP program and for creating such great products like Windows PowerShell!  Work has never been so much fun! + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[Microsoft MVP](http://technorati.com/tags/Microsoft+MVP) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/740/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/740/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=740&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2012/01/powershell-v3-ctp2-provides-better-argument-passing-to-exes/index.md b/content/articles/2012/01/powershell-v3-ctp2-provides-better-argument-passing-to-exes/index.md new file mode 100644 index 000000000..a7341ecea --- /dev/null +++ b/content/articles/2012/01/powershell-v3-ctp2-provides-better-argument-passing-to-exes/index.md @@ -0,0 +1,90 @@ +--- +url: /articles/2012-01-02-powershell-v3-ctp2-provides-better-argument-passing-to-exes/ +title: PowerShell V3 CTP2 Provides Better Argument Passing to EXEs +authors: + - Keith Hill +date: "2012-01-02T19:56:23+00:00" +aliases: + - /2012/01/powershell-v3-ctp2-provides-better-argument-passing-to-exes/ +--- + +Within PowerShell it has always been easy to pass "simple" arguments to an EXE e.g.: + + + +`C:\PS> ipconfig -all +`However passing arguments to certain exes can become surprising difficult when their command line parameter syntax is complex i.e. they require quotes and use special PowerShell characters such as @ $ ;.  A lot of these problems can be solved by placing single or double quotes in the right places or by escaping PowerShell"™s special characters e.g.: + + + +`C:\PS> tf.exe status . /workspace:HILLR1;hillr /r +There are no pending changes. +The term 'hillr' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the +spelling of the name, or if a path was included, verify that the path is correct and try again. +At line:1 char:35 ++ tf.exe status . /workspace:HILLR1;hillr /r ++ ~~~~~ + + CategoryInfo : ObjectNotFound: (hillr:String) [], CommandNotFoundException + + FullyQualifiedErrorId : CommandNotFoundException +`Note that in the command line above the "/workspace" parameter value is specified using a special syntax that TF.exe recognizes i.e. ;.  Unfortunately the semicolon is a statement separator in PowerShell which means that TF.exe only sees the parameters before the semicolon.  We can use the ECHOARGS.exe utility from the [PowerShell Community Extensions][1] to verify this: + + + +`C:\PS> echoargs.exe status . /workspace:HILLR1;hillr /r +Arg 0 is +Arg 1 is <.> +Arg 2 is +`In this case, the solution is simple "“ just escape the semicolon e.g.: + + + +`C:\PS> tf.exe status . /r /workspace:HILLR1`;hillr +File name Change Local path +------------- ------ ----------------------------------------- +$/Foo/Trunk/Tools/Bin +TfsTools.psm1 edit C:\Tfs\Foo\Trunk\Tools\Bin\TfsTools.psm1 +1 change(s) +`This works up to the point where you get quite frustrated figuring out which characters to escape and which parameter/argument pairs need to be quoted and whether you should use single quotes or double quotes.  Fortunately, it looks like we will get a way to tell the PowerShell argument parser to stop doing so much work for us and just pass the args through "as-is".  In other words, you can tell PowerShell to become a "dumber" command line parser.  This mode is invoked using the character sequence: "“% and it works from the point it appears on the command line to the end of that line.  Note that the character sequence may change or the feature could be completely removed before V3 ships. + +Given this new feature, here"™s how you use it.  Take this example of a problematic set of command line parameters: + + + +`C:\PS> sqlcmd -S .\SQLEXPRESS -v lname="Gates" -Q "SELECT FirstName,LastName FROM +AdventureWorks.Person.Contact WHERE LastName = '$(lname)'" +The term 'lname' is not recognized as the name of a cmdlet, function, script +file, or operable program. Check the spelling of the name, or if a path was +included, verify that the path is correct and try again. +At line:1 char:126 ++ ... LastName = '$(lname)'" ++ ~~~~~ + + CategoryInfo : ObjectNotFound: (lname:String) [], CommandNotFou + ndException + + FullyQualifiedErrorId : CommandNotFoundException +`In this case the V2 solution is to escape the $ character in the last part of the command line e.g.: '`$(lname)' but if you don"™t want to spend the time to figure this out you can easily use –% like so: + + + +`C:\PS> sqlcmd --% -S .\SQLEXPRESS -v lname="Gates" -Q "SELECT FirstName,LastName F +ROM AdventureWorks.Person.Contact WHERE LastName = '$(lname)'" +FirstName LastName +---------------------------------- ----------------------------------- +Janet Gates +(1 rows affected) +`You can put the –% later in the parameter list if you want.  You might want to do this if you need to use PowerShell variable expansion in some of the arguments.  Just note that once you specify –% the rest of the command line will be parsed "dumbly".  You will get no PowerShell variable expansion or grouping expressions and you won"™t be able to escape newlines.  One thing you can do in this special parsing mode is expand environment variables using the batch syntax of %ENV_VAR% e.g.: + + + +`C:\PS> $env:colname = "LastName" +C:\PS> sqlcmd -S .\SQLEXPRESS -v lname="Gates" --% -Q "SELECT FirstName,LastName F +ROM AdventureWorks.Person.Contact WHERE %colname% = '$(lname)'" +FirstName LastName +---------------------------------- ----------------------------------- +Janet Gates +(1 rows affected) +`I believe this new command line parsing feature will greatly simplify interacting with exes that have a complex command line parameter syntax.  Thanks to the PowerShell team for listening to the [community feedback on this issue](https://connect.microsoft.com/PowerShell/feedback/details/376207/executing-commands-which-require-quotes-and-variables-is-practically-impossible) and providing a solution. + + +[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/241/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/241/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=241&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) + + [1]: http://pscx.codeplex.com/ diff --git a/content/articles/2012/01/powerwf-and-powerse-2-7-are-now-available/index.md b/content/articles/2012/01/powerwf-and-powerse-2-7-are-now-available/index.md new file mode 100644 index 000000000..a5b07a60f --- /dev/null +++ b/content/articles/2012/01/powerwf-and-powerse-2-7-are-now-available/index.md @@ -0,0 +1,63 @@ +--- +url: /articles/2012-01-24-powerwf-and-powerse-2-7-are-now-available/ +title: PowerWF and PowerSE 2.7 are now available +authors: + - Kirk Munro +date: "2012-01-24T17:44:30+00:00" +aliases: + - /2012/01/powerwf-and-powerse-2-7-are-now-available/ +--- + +This morning [PowerWF][1] and [PowerSE][2] 2.7 were released to the web and they can now be downloaded from [http://www.powerwf.com][3].  These releases offer a lot of new value to PowerWF and PowerSE users, as follows: + +#### PowerWF 2.7 Highlights + +**New Start Page with New Workflows** + +The start page in PowerWF has been completely redesigned to provide immediate value out of the box for PowerWF customers.  The new design highlights the Workflow Library that is included with PowerWF, allowing customers to play workflows in the library without opening a workflow or script document.  Users can also customize the workflows on the start page and add their own groups of workflows for easier runbook automation.  This immediate out of the box value is included for PowerWF customers to allow them to leverage the power of Workflows and PowerShell in their environments without requiring any knowledge of PowerShell or Workflows. + +**New Management Packs for System Center Service Manager (SCSM)** + +PowerWF for Service Manager has always included several useful management packs for SCSM in the product.  In this release, even more management packs for SCSM have been added.  Now, with a click of a button you can deploy management packs that automatically close resolved incidents, expire inactive problem announcements, cancel pending activities for closed change requests, identify problems from incident trends, notify incident authors about unresolved incidents, and get SCSM statistics.  These management packs are only available for licensed users of PowerWF for Service Manager. + +**Improved Toolbox Search** + +The search engine in the Activity toolbox just got better!  Now you can search using command names or keywords and PowerWF will return the best matches based on the terms you provided.  This includes searching with keywords that are only referenced in activity documentation and not in the command name itself.  For example, if you"™re a VMware administrator, simply entering "vMotion" into the search box will reveal the MoveVM activity that is necessary to perform vMotion tasks. + +**Product-Specific Profile Support** + +PowerWF now uses its own product-specific profile support, and it updates the $profile variable to include the paths to each of the relevant profiles that you use. By default the PowerWF profile dot-sources the native PowerShell console profile, however you can change this behaviour as required by simply modifying the profile yourself in PowerSE. + +#### PowerSE 2.7 Highlights + +**Easier Breakpoint Management** + +Breakpoint management in PowerSE just got a lot easier.  PowerSE now includes a Breakpoints pane to allow you to see all breakpoints you have set in your scripting environment, and you can now manage breakpoints using the breakpoint cmdlets and see the breakpoints you have created in the Breakpoints pane.  This gives you easy creation of line breakpoints using the Toggle Breakpoint feature or command and variable breakpoints using the Set-PSBreakpoint cmdlet (or sbp alias for short). + +**Breakpoints Preserved Across Sessions** + +Breakpoints are now automatically preserved across sessions, allowing you to continue debugging your scripts from one session to the next.  They are also preserved when you close a file, so you won"™t have to reset breakpoints each time you return to a script you were working on.  You can still remove breakpoints of course, using the Toggle Breakpoint feature or the Remove-PSBreakpoint cmdlet. + +**Improved Help Search** + +PowerShell help topic files are now included in the help search pane, allowing you to search for help for integral keywords like if or foreach, or for topics like "Advanced functions", or you can learn more about remoting by searching for "Remote".  Also, if no results are found when you search, PowerSE will now include a keyword search in command descriptions to allow for users to discover commands using related terms, such as "vMotion". + +**Product-Specific Profile Support** + +PowerSE now uses its own product-specific profile support, and it updates the $profile variable to include the paths to each of the relevant profiles that you use.  By default the PowerSE profile dot-sources the native PowerShell console profile, however you can change this behaviour as required by simply modifying the profile yourself in PowerSE. + +#### And that"™s not all! + +This shows you a few of the highlights of this release, but of course there were plenty of bug fixes, some performance improvements, and a few other minor enhancements that were included as well.  Whether you"™re a current PowerWF or PowerSE customer, or someone who is looking for great tools for working with PowerShell, Workflow, and Management Packs, I strongly encourage you to give this release a try and let us know what you think. + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerWF](http://technorati.com/tags/PowerWF),[PowerSE](http://technorati.com/tags/PowerSE),[SCSM](http://technorati.com/tags/SCSM),[management pack](http://technorati.com/tags/management+pack),[workflow](http://technorati.com/tags/workflow) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/747/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/747/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=747&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://powerwf.com/products/powerwf.aspx + [2]: http://powerwf.com/products/powerse.aspx + [3]: http://www.powerwf.com/ diff --git a/content/articles/2012/03/_index.md b/content/articles/2012/03/_index.md new file mode 100644 index 000000000..ca96c50a9 --- /dev/null +++ b/content/articles/2012/03/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from March 2012" +description: "PowerShell.org Articles published in March 2012." +--- diff --git a/content/articles/2012/03/powershell-v3-beta-better-ntfs-alternate-data-stream-handling/index.md b/content/articles/2012/03/powershell-v3-beta-better-ntfs-alternate-data-stream-handling/index.md new file mode 100644 index 000000000..f9b071857 --- /dev/null +++ b/content/articles/2012/03/powershell-v3-beta-better-ntfs-alternate-data-stream-handling/index.md @@ -0,0 +1,99 @@ +--- +url: /articles/2012-03-04-powershell-v3-beta-better-ntfs-alternate-data-stream-handling/ +title: "PowerShell V3 Beta\"“Better NTFS Alternate Data Stream Handling" +authors: + - Keith Hill +date: "2012-03-05T04:37:08+00:00" +aliases: + - /2012/03/powershell-v3-beta-better-ntfs-alternate-data-stream-handling/ +--- + +One of the many new features in Windows PowerShell V3 is better support for alternate data streams (ADS) in NTFS files.  ADS allows an NTFS file to contain additional data that is not part of the "main" stream i.e. the file"™s primary content.  Tools like Windows Explorer or even PowerShell"™s **Get-ChildItem** cmdlet don"™t show these extra data streams.  In fact the file size reported by both of these tools does not take into account the data stored in the alternate streams.  For more information on ADS check out the [NTFS topic on Wikipedia][1]. + +A common use of ADS is to indicate that a file downloaded by Internet Explorer came from the Internet Zone.  Files coming from the internet could be potentially dangerous.  Various applications check for this stream and if it is present and contains information indicating the "Internet" zone, they might block access or in the case of PowerShell"™s _RemoteSigned_ execution policy, only execute the file if it is signed. + +Previous to PowerShell V3, you could use the [SysInternals streams.exe tool][2] to list and remove alternate data streams.  A common application of this tool was to delete all streams in a file.  That was a rather crude but effective way to "unblock" a file downloaded from the internet. + +This is also one area where CMD.EXE was one up on PowerShell.  From a CMD prompt, you can use "dir /r" to list files and their alternate data streams.  You can also create/overwrite streams with CMD.exe like so " +echo.>test.exe:Zone.Identifier +" which would "unblock" an internet zone file.  You can also unblock such files by selecting the file"™s Properties in Windows Explorer and pressing the "Unblock" button at the bottom right of the general tab.  However this is not convenient if you need to do this to dozens or hundreds of files.  With the [PowerShell Community Extensions][3] 2.0, we introduced an **Unblock-File** cmdlet that would delete only the stream named Zone.Identifier.  That is the stream that Internet Explorer creates when you download a file.  Fortunately with PowerShell V3, we can obsolete that cmdlet because V3 offers several ways to manage alternate data streams. + +First up is PowerShell"™s own **Unblock-File** cmdlet which, like the PSCX equivalent, is quite easy to use: + + +`C:\PS> Get-Command Unblock-File -All +Capability Name   ModuleName +---------- ---- ---------- +Cmdlet Unblock-File Pscx +Cmdlet Unblock-File Microsoft.PowerShell.Utility +C:\PS> Get-ChildItem *.ps1 | Microsoft.PowerShell.Utility\Unblock-File +`Note that you wouldn"™t normally need to prefix **Unblock-File** with _Microsoft.PowerShell.Utility_.  In this case, I wanted to make sure I was using the PowerShell **Unblock-File** and not the one from PSCX. + +In addition to using the big gun of **Unblock-File** you can also manipulate streams with the following cmdlets: + + +`C:\PS> Get-Command -ParameterName Stream | Where ModuleName -match 'Microsoft.*?Manag' +Capability Name ModuleName +---------- ---- ---------- +Cmdlet Add-Content Microsoft.PowerShell.Management +Cmdlet Clear-Content Microsoft.PowerShell.Management +Cmdlet Get-Content Microsoft.PowerShell.Management +Cmdlet Get-Item Microsoft.PowerShell.Management +Cmdlet Remove-Item Microsoft.PowerShell.Management +Cmdlet Set-Content Microsoft.PowerShell.Management +`Here is how you can list all the alternate data streams in a file and the contents of any particular data stream: + + +`C:\PS> Get-Item .\Pscx-2.0.0.1.zip -Stream * + FileName: C:\Users\Keith\Downloads\Pscx-2.0.0.1.zip +Stream Length +------ ------ +:$DATA 1799345 +Zone.Identifier 26 +C:\PS> Get-Content .\Pscx-2.0.0.1.zip -Stream Zone.Identifier +[ZoneTransfer] +ZoneId=3 +`Note that **:$DATA** is the main stream i.e. the file"™s primary contents. + +If you need to clear the contents of a data stream without removing the stream completely, you can use **Clear-Content"™s "“Stream** parameter e.g.: + + +`C:\PS> Clear-Content .\Pscx-2.0.0.1.zip -Stream Zone.Identifier +C:\PS> Get-Content .\Pscx-2.0.0.1.zip -Stream Zone.Identifier +C:\PS> Get-Item .\Pscx-2.0.0.1.zip -Stream * + FileName: C:\Users\Keith\Downloads\Pscx-2.0.0.1.zip +Stream Length +------ ------ +:$DATA 1799345 +Zone.Identifier 0 +`To completely remove the stream, use **Remove-Item"™s "“Stream** parameter e.g.: + + +`C:\PS> Remove-Item .\Pscx-2.0.0.1.zip -Stream Zone.Identifier +C:\PS> Get-Item .\Pscx-2.0.0.1.zip -Stream * + FileName: C:\Users\Keith\Downloads\Pscx-2.0.0.1.zip +Stream Length +------ ------ +:$DATA 1799345 +`And if you need to create an alternate stream, you can do so using **Add-Content"™s "“Stream** parameter e.g.: + + +`C:\PS> Add-Content Pscx-2.0.0.1.zip -Str Zone.Identifier "[ZoneTransfer]`r`nZoneId=3" +C:\PS> Get-Item Pscx-2.0.0.1.zip -Stream * + FileName: C:\Users\Keith\Downloads\Pscx-2.0.0.1.zip +Stream Length +------ ------ +:$DATA 1799345 +Zone.Identifier 26 +C:\PS> Get-Content .\Pscx-2.0.0.1.zip -Stream Zone.Identifier +[ZoneTransfer] +ZoneId=3 +`Finally, **Set-Content "“Stream** can be used to modify the content of an existing stream. + +The new  **Unblock-File** cmdlet as well as the upgrades to the ***-Content** and **Get/Remove-Item**  cmdlets are a very welcome enhancement to PowerShell"™s file handling capabilities. + +[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/248/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/248/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=248&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) + + [1]: http://en.wikipedia.org/wiki/NTFS#Alternate_data_streams_.28ADS.29 + [2]: http://technet.microsoft.com/en-us/sysinternals/bb897440 + [3]: http://pscx.codeplex.com/ diff --git a/content/articles/2012/03/this-april-is-learn-more-about-powershell-month-with-the-2012-scripting-games-the-2012-microsoft-management-summit-and-the-2012-north-american-powershell-deep-dive/index.md b/content/articles/2012/03/this-april-is-learn-more-about-powershell-month-with-the-2012-scripting-games-the-2012-microsoft-management-summit-and-the-2012-north-american-powershell-deep-dive/index.md new file mode 100644 index 000000000..c8621e946 --- /dev/null +++ b/content/articles/2012/03/this-april-is-learn-more-about-powershell-month-with-the-2012-scripting-games-the-2012-microsoft-management-summit-and-the-2012-north-american-powershell-deep-dive/index.md @@ -0,0 +1,914 @@ +--- +url: /articles/2012-03-29-this-april-is-learn-more-about-powershell-month-with-the-2012-scripting-games-the-2012-microsoft-management-summit-and-the-2012-north-american-powershell-deep-dive/ +title: "This April is \"Learn More About PowerShell\" Month with the 2012 Scripting Games, the 2012 Microsoft Management Summit, and the 2012 North American PowerShell Deep Dive!" +authors: + - Kirk Munro +date: "2012-03-29T13:00:00+00:00" +aliases: + - /2012/03/this-april-is-learn-more-about-powershell-month-with-the-2012-scripting-games-the-2012-microsoft-management-summit-and-the-2012-north-american-powershell-deep-dive/ +--- + +It"™s hard to believe that April is almost here already.  Last week we had record high temperatures reaching 31°C (that"™s 87.8°F for those of you living south of the border), and the night before last it was -16°C (or 3.2°F).  What wonderful consistency.  Maybe that"™s why I like PowerShell so much, because it provides great consistency that just isn"™t apparent in so many other places in life (that"™s a swell tagline: "Use PowerShell, because it"™s more consistent than the weather"![Smile](http://kirkmunro.files.wordpress.com/2012/03/wlemoticon-smile.png?w=595) ).  Anyway, I digress"¦back to the topic at hand. + +This April is **"Learn More About PowerShell" month**!  Ok, so it"™s not official (it"™s not like I"™m a mayor or anything), but with all of the opportunities to learn about Windows PowerShell in April, it seems like a fitting title, so I"™m declaring it that anyway.  Now, where to begin. + +#### 2012 Scripting Games + +The first Monday in April (that"™s April 2, Monday next week) marks the official opening of the [2012 Scripting Games][1]!  The Scripting Games are a great event, because they provide opportunities for beginner and advanced scripters alike to learn more about Windows PowerShell.  There are beginner and advanced divisions, with 10 events in each division.  You participate by visiting the [official 2012 Scripting Games page][1] starting on Monday April 2 to see the events that are published so far, and you have one week to submit a solution by publishing a script to the [2012 Scripting Games page on PoshCode][2] for each event that you want to enter.  Note that at the time of this writing, the 2012 Scripting Games page on PoshCode shows information related to the 2011 Scripting Games, so for now just put a reminder in your calendar to check these two links out on April 2. + +Once you submit a solution, you can move on to the next event if it is available.  All solutions will be judged by a great panel of expert judges, and once the events close there will be expert commentaries published so that you can learn how different community experts solve these problems with PowerShell scripts.  Watch for my expert commentary to Beginner Event 3 once that event has closed for submissions. + +The 2012 Scripting Games will run until April 13, 2012, although you"™ll have 7 days from the day that each event is posted, so there will still be some time to compete and get your entries in.  There are many prizes to be won, including grand prizes of full conference passes for [TechEd North America 2012][3] (another great opportunity to learn more about PowerShell), software licenses for products like [PowerWF][4], and more!  Also, don"™t delay in getting your entries in, because you"™ll barely have time once you"™re done to pack your bags for the [2012 Microsoft Management Summit][5] in Las Vegas if you"™re going to that conference! + +#### 2012 Microsoft Management Summit + +In just 2½ weeks from now, the [2012 Microsoft Management Summit][5] (MMS) will start, and it"™s going to be an amazing conference this year.  With the upcoming [Microsoft System Center 2012][6] release, and with [Windows 8 currently available as a Consumer Preview][7] in the client and the server varieties (both of which include the pre-release version of PowerShell version 3), there are plenty of new opportunities to scale up your PowerShell prowess and scale out your scripting capabilities while learning how to get the most of these new products and platforms by leveraging PowerShell automation. + +At the MMS 2012 conference, there are a total of 13 breakout sessions, 3 instructor led labs, and 5 self-paced labs where you can learn more about Windows PowerShell.  There is also a PowerShell booth that will be staffed by members of the Windows PowerShell team and a few PowerShell MVPs.  I"™ll be working the PowerShell booth as will [Aleksandar Nikolic][8], so please come see us and ask questions if you have any.  There will also be other booths for products like the [Microsoft System Center 2012][6] release, which comes with even more PowerShell capabilities than before.  Additionally, there are many companies in the Expo hall that leverage PowerShell in their products and/or provide cmdlets to facilitate automation in their environments, such as NetApp, Veeam, Splunk and [Devfarm Software][9] (the company that I work for) to name but a few.  I"™ll be working the Devfarm booth when I"™m not in the PowerShell booth, so if you look around a little you"™ll have a good chance of finding me. + +If you"™re going to MMS 2012, and you want to learn more about PowerShell, make sure you take advantage of these resources while you"™re there.  The knowledge passed on to you through one breakout session, lab, or discussion with someone in the learning center or expo hall takes many, many hours to put together, and getting that knowledge first hand can be a huge timesaver for you in the long run! + +#### PowerShell-related Content at MMS 2012 + +The following list identifies all of the PowerShell-related sessions and resources that have been announced so far for the MMS 2012 conference for your convenience.  To get the most value out of your conference, make sure you add the sessions, labs, and other items of interest to your schedule so that you don"™t miss out on these great learning opportunities.  I have highlighted the sessions most interesting to me in bold in the list below. + + + + + **Type and Level** + + + + **Title** + + + + **Speaker(s)** + + + + **Coordinates** + + + + + + **Instructor-led Lab +300/Advanced** + + + + [SV-IL306 Introduction to Windows PowerShell Fundamentals](http://www.mms-2012.com/topic/details/SV-IL306) + + + + [**Dan Reger**](http://www.mms-2012.com/Speaker/Details/Dan_Reger) + + + + **Monday, April 16, +12:00 PM to 1:15 PM +Venetian Ballroom A** + + + + + + Breakout Session +300/Advanced + + + + [SV-B317 Top 10 Things Every Systems Admin Needs to Know about Windows Server 2008 R2 SP1](http://www.mms-2012.com/topic/details/SV-B317) + + + + [Dan Stolts](http://www.mms-2012.com/Speaker/Details/Dan_Stolts) + + + + Monday, April 16, +3:00 PM to 4:15 PM +Venetian Ballroom G + + + + + + **Instructor-led Lab +300/Advanced** + + + + [**SV-IL307 What"™s New in Windows PowerShell 3.0**](http://www.mms-2012.com/topic/details/SV-IL307) + + + + [**Lucio Silveira**](http://www.mms-2012.com/Speaker/Details/Lucio_Silveira) + + + + **Monday, April 16, +4:30 PM to 5:45 PM +Venetian Ballroom A** + + + + + + **Breakout Session +300/Advanced** + + + + [**CD-B334 Understanding Console Extension for Configuration Manager 2007 and 2012**](http://www.mms-2012.com/topic/details/CD-B334) + + + + [**Matthew Hudson**](http://www.mms-2012.com/Speaker/Details/Matthew%20_Hudson) + + + + **Tuesday, April 17, +10:15 AM to 11:30 AM +Venetian Ballroom G** + + + + + + **Breakout Session +400/Expert** + + + + [**CD-B406 Configuration Manager 2012 and PowerShell: Better Together**](http://www.mms-2012.com/topic/details/CD-B406) + + + + [**Greg Ramsey**](http://www.mms-2012.com/Speaker/Details/Greg_Ramsey) + + + + **Tuesday, April 17, +11:45 AM to 1:00 PM +Venetian Ballroom G** + + + + + + Instructor-led Lab +300/Advanced + + + + [SV-IL304 Managing Windows Server "8" with Server Manager and PowerShell 3.0](http://www.mms-2012.com/topic/details/SV-IL304) + + + + [Michael Leworthy](http://www.mms-2012.com/Speaker/Details/Michael_Leworthy) + + + + Tuesday, April 17, +11:45 AM to 1:00 PM +Venetian Ballroom A + + + + + + Instructor-led Lab +300/Advanced + + + + [SV-IL307 What"™s New in Windows PowerShell 3.0](http://www.mms-2012.com/topic/details/SV-IL307) + + + + [Lucio Silveira](http://www.mms-2012.com/Speaker/Details/Lucio_Silveira) + + + + Tuesday, April 17, +2:15PM to 3:30PM +Venetian Ballroom A + + + + + + Breakout Session +300/Advanced + + + + [SV-B319 Windows PowerShell for Beginners](http://www.mms-2012.com/topic/details/SV-B319) + + + + [Jeffrey Snover](http://www.mms-2012.com/Speaker/Details/Jeffrey_Snover), +[Travis Jones](http://www.mms-2012.com/Speaker/Details/Travis_Jones) + + + + Tuesday, April 17, +4:00 PM to 5:15 PM +Murano 3301 + + + + + + **Breakout Session +200/Intermediate** + + + + [**SV-B205 Overview of Server Management Technologies in Windows Server "8"**](http://www.mms-2012.com/topic/details/SV-B205) + + + + [**Erin Chapple**](http://www.mms-2012.com/Speaker/Details/Erin_Chapple)**, +**[**Jeffrey Snover**](http://www.mms-2012.com/Speaker/Details/Jeffrey_Snover) + + + + **Wednesday, April 18, +10:15 AM to 11:30 AM +Murano 3301** + + + + + + Breakout Session +200/Intermediate + + + + [SV-B291 Manage Cisco UCS with System Center 2012 and PowerShell](http://www.mms-2012.com/topic/details/SV-B291) + + + + [Chakri Avala](http://www.mms-2012.com/Speaker/Details/Chakri_Avala) + + + + Wednesday, April 18, +2:15 PM to 3:30 PM +Titian 2203 + + + + + + Instructor-led Lab +300/Advanced + + + + [SV-IL306 Introduction to Windows PowerShell Fundamentals](http://www.mms-2012.com/topic/details/SV-IL306) + + + + [Dan Reger](http://www.mms-2012.com/Speaker/Details/Dan_Reger) + + + + Wednesday, April 18, +2:15 PM to 3:30 PM +Venetian Ballroom A + + + + + + Breakout Session +300/Advanced + + + + [SV-B313 Windows Server 2008 R2 Hyper-V FAQs, Tips, and Tricks](http://www.mms-2012.com/topic/details/SV-B313) + + + + [Janssen Jones](http://www.mms-2012.com/Speaker/Details/Janssen_Jones) + + + + Wednesday, April 18, +4:00 PM to 5:15 PM +Murano 3301 + + + + + + **Instructor-led Lab +300/Advanced** + + + + [**SV-IL304 Managing Windows Server "8" with Server Manager and PowerShell 3.0**](http://www.mms-2012.com/topic/details/SV-IL304) + + + + [**Michael Leworthy**](http://www.mms-2012.com/Speaker/Details/Michael_Leworthy) + + + + **Thursday, April 19, +8:30 AM to 9:45 AM +Venetian Ballroom A** + + + + + + **Breakout Session +400/Expert** + + + + [**SV-B405 Advanced Automation Using Windows PowerShell 2.0**](http://www.mms-2012.com/topic/details/SV-B405) + + + + [**Jeffrey Snover**](http://www.mms-2012.com/Speaker/Details/Jeffrey_Snover)**, +**[**Travis Jones**](http://www.mms-2012.com/Speaker/Details/Travis_Jones) + + + + **Thursday, April 19, +10:15 AM to 11:30 AM +Veronese 2401** + + + + + + Breakout Session +300/Advanced + + + + [AM-B315 SharePoint as a Workload in a Private Cloud](http://www.mms-2012.com/topic/details/AM-B315) + + + + [Adam Hall](http://www.mms-2012.com/speaker/details/Adam_Hall), +[Michael Frank](http://www.mms-2012.com/speaker/details/Michael_Frank) + + + + Thursday, April 19, +10:15 AM to 11:30 AM +Titian 2206 + + + + + + Breakout Session +300/Advanced + + + + [SV-B312 Don Jones"™ Windows PowerShell Crash Course](http://www.mms-2012.com/topic/details/SV-B312) + + + + [Don Jones](http://www.mms-2012.com/Speaker/Details/Don_Jones) + + + + Thursday, April 19, +11:45 AM to 1:00 PM +Venetian Ballroom G + + + + + + Breakout Session +300/Advanced + + + + [SV-B315 Managing Group Policy Using PowerShell](http://www.mms-2012.com/topic/details/SV-B315) + + + + [Darren Mar-Elia](http://www.mms-2012.com/Speaker/Details/Darren_Mar-Elia) + + + + Thursday, April 19, +11:45 AM to 1:00 PM +Murano 3301 + + + + + + **Breakout Session +300/Advanced** + + + + [**FI-B322 Virtual Machine Manager 2012: PowerShell is your Friend, and Here"™s Why**](http://www.mms-2012.com/topic/details/FI-B322) + + + + [**Hector Linares**](http://www.mms-2012.com/Speaker/Details/Hector_Linares)**, +**[**Susan Hill**](http://www.mms-2012.com/Speaker/Details/Susan_Hill) + + + + **Thursday, April 19, +11:45 AM to 1:00 PM +Titian 2206** + + + + + + Breakout Session +400/Expert + + + + [SV-B406 PowerShell Remoting in Depth](http://www.mms-2012.com/topic/details/SV-B406) + + + + [Don Jones](http://www.mms-2012.com/Speaker/Details/Don_Jones) + + + + Friday, April 20, +8:30 AM to 9:45 AM +Bellini 2001 + + + + + + Hands-on lab +300/Advanced + + + + [SV-L302 Active Directory Deployment and Management Enhancements](http://www.mms-2012.com/topic/details/SV-L302) + + + + N/A + + + + Hands-on lab, available in the HOL area + + + + + + **Hands-on lab +300/Advanced** + + + + [**SV-L304 Managing Windows Server "8" with Server Manager and Windows PowerShell 3.0**](http://www.mms-2012.com/topic/details/SV-L304) + + + + **N/A** + + + + **Hands-on lab, available in the HOL area** + + + + + + Hands-on lab +300/Advanced + + + + [SV-L305 Managing Network Infrastructure with Windows Server "8"](http://www.mms-2012.com/topic/details/SV-L305) + + + + N/A + + + + Hands-on lab, available in the HOL area + + + + + + Hands-on lab +300/Advanced + + + + [SV-L306 Introduction to Windows PowerShell Fundamentals](http://www.mms-2012.com/topic/details/SV-L306) + + + + N/A + + + + Hands-on lab, available in the HOL area + + + + + + Hands-on lab +300/Advanced + + + + [SV-L307 What"™s New in Windows PowerShell 3.0](http://www.mms-2012.com/topic/details/SV-L307) + + + + N/A + + + + Hands-on lab, available in the HOL area + + + + +#### 2012 North America PowerShell Deep Dive + +As if all of these PowerShell learning opportunities weren"™t already enough, there"™s even more you can do in **"Learn More About PowerShell" month**.  At the end of April, a week after MMS is finished, the 2nd annual North American [2012 PowerShell Deep Dive][10] conference will start.  This conference is second to none when it comes to learning more about PowerShell.  The sessions are fantastic, and the conversations perhaps even more so.  What makes this conference unique is the focus on shorter, 35-minute sessions that quickly drill into a specific topic and give you a ton of information on that topic.  There are also short, 5-minute lightning rounds which give speakers an opportunity to quickly show off one of their favorite aspects of PowerShell.  The 35-minute format, 5-minute lightning rounds, and the depth of the content in these sessions are unique to this conference, and you won"™t get the same value for PowerShell content anywhere else.  Add to that the evening script club-style events and it"™s really an experience that is second to none.  I highly recommend you consider attending if you"™re already using PowerShell and want to take your skills to new heights.  You can still register for this great event on the [registration page for The Experts Conference (TEC)][11]. + +This conference takes place in sunny San Diego from April 29th until May 2nd, and it gives you 3 days of 100% PowerShell content.  I"™m fortunate enough to be attending this conference as well, and I"™ll be giving sessions about proxy functions and about WMI and PowerShell.  If you do attend, please make a point to say hello and introduce yourself if I haven"™t met you already. + +Here"™s a quick look at the content that is being presented at the PowerShell Deep Dive this year: + + + + + **Title** + + + + **Speaker(s)** + + + + **Date** + + + + + + FIM PowerShell Workshop + + + + Craig Martin + + + + Sunday, April 29, 2012 + + + + + + Keynote + + + + Jeffrey Snover + + + + Monday, April 30, 2012 +8:00 AM to 10:00 AM + + + + + + When old API"™s save the day (pinvoke and native windows dlls) + + + + Tome Tanasovski + + + + Monday, April 30, 2012 +10:30 AM to 11:05 AM + + + + + + Get Your Game On! Leveraging Proxy Functions in Windows PowerShell + + + + Kirk "Poshoholic" Munro + + + + Monday, April 30, 2012 +11:10 AM to 11:45 AM + + + + + + Using Splunk Reskit with PowerShell to revolutionize your script process + + + + Brandon Shell + + + + Monday, April 30, 2012 +1:00 PM to 2:15 PM + + + + + + Lightning Round + + + + Determined at event + + + + Monday, April 30, 2012 +2:20 PM to 3:05 PM + + + + + + Remoting Improvement in Windows PowerShell V3 + + + + Krishna Vutukuri + + + + Monday, April 30, 2012 +3:10 PM to 3:45 PM + + + + + + New Hyper-V PowerShell Module in Windows Server 8 + + + + Adam Driscoll + + + + Monday, April 30, 2012 +4:15 PM to 5:30 PM + + + + + + Formatting in Windows PowerShell + + + + Jim Truher + + + + Tuesday, May 1, 2012 +8:00 AM to 8:35 AM + + + + + + PowerShell and WMI: A Love Story + + + + Kirk "Poshoholic" Munro + + + + Tuesday, May 1, 2012 +8:40 AM to 9:15 AM + + + + + + PowerShell as a Web Language + + + + James Brundage + + + + Tuesday, May 1, 2012 +9:45 AM to 11:00 AM + + + + + + PowerShell V3 in Production + + + + Steve Murawski + + + + Tuesday, May 1, 2012 +11:15 AM to 11:50 AM + + + + + + Lightning Round + + + + Determined at event + + + + Tuesday, May 1, 2012 +11:55 AM to 12:30 AM + + + + + + How Microsoft Uses PowerShell for Testing Automation and Deployment of FIM + + + + Kinnon McDonell + + + + Tuesday, May 1, 2012 +1:45 PM to 3:00 PM + + + + + + Job Types in Windows PowerShell 3.0 + + + + Travis Jones + + + + Tuesday, May 1, 2012 +3:15 PM to 3:50 PM + + + + + + Creating a Corporate PowerShell Module + + + + Tome Tanasovski + + + + Tuesday, May 1, 2012 +3:55 PM to 4:30 PM + + + + + + Cmdlets over Objects (CDXML) + + + + Richard Siddaway + + + + Wednesday, May 2, 2012 +8:00 AM to 8:35 AM + + + + + + Build your own remoting endpoint with PowerShell V3 + + + + Aleksandar Nikolic + + + + Wednesday, May 2, 2012 +8:40 AM to 9:15 AM + + + + + + PowerShell Workflows and the Windows Workflow Foundation for the IT Pro + + + + Steve Murawski + + + + Wednesday, May 2, 2012 +9:45 AM to 11:00 AM + + + + + + Incorporating Microsoft Office into Windows PowerShell + + + + Jeffery Hicks + + + + Wednesday, May 2, 2012 +11:15 AM to 11:50 AM + + + + + + TBD + + + + Bruce Payette + + + + Wednesday, May 2, 2012 +11:55 AM to 12:30 PM + + + + +Wow, that"™s a lot of PowerShell!  With all of these opportunities, whether you"™re trying to learn PowerShell without incurring a huge expense, or travelling to conferences to learn more about technologies there, there"™s definitely something for everyone in what looks to be an awesome **"Learn More About PowerShell" month**. + +Good luck, wherever your learning adventures take you! + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[Scripting Games](http://technorati.com/tags/Scripting+Games),[MMS](http://technorati.com/tags/MMS),[PowerShell Deep Dive](http://technorati.com/tags/PowerShell+Deep+Dive),[System Center 2012](http://technorati.com/tags/System+Center+2012),[Devfarm](http://technorati.com/tags/Devfarm) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/765/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/765/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=765&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://blogs.technet.com/b/heyscriptingguy/archive/2012/02/04/the-2012-windows-powershell-scripting-games-all-links-on-one-page.aspx + [2]: http://2012sg.poshcode.org/ + [3]: http://northamerica.msteched.com/ + [4]: http://powerwf.com/products/powerwf.aspx + [5]: http://www.mms-2012.com/ + [6]: http://www.microsoft.com/systemcenter/ + [7]: http://windows.microsoft.com/en-US/windows-8/consumer-preview + [8]: http://powershellers.blogspot.ca/ + [9]: http://www.devfarm.com/ + [10]: http://www.theexpertsconference.com/us/2012/powershell-deep-dive/ + [11]: https://www.ustechsregister.com/TEC2012/RegistrationSelect.aspx diff --git a/content/articles/2012/03/windows-8reimagined/index.md b/content/articles/2012/03/windows-8reimagined/index.md new file mode 100644 index 000000000..ddd722831 --- /dev/null +++ b/content/articles/2012/03/windows-8reimagined/index.md @@ -0,0 +1,29 @@ +--- +url: /articles/2012-03-06-windows-8reimagined/ +title: "Windows 8\"¦reimagined?" +authors: + - Kirk Munro +date: "2012-03-07T03:30:38+00:00" +aliases: + - /2012/03/windows-8reimagined/ +--- + +The series of releases of client versions of Microsoft Windows seems to suffer all too much the same fate as Star Trek movies have in the past.  This concept has already been discussed before, and there are even blog posts about it, such as [Ewan Spence"™s comparison of Windows releases between versions 3.0 and Windows 7 to the Star Trek movies from "The Motion Picture" to "First Contact"][1].  Windows 7 did indeed end up being a very impressive version of Windows, much like First Contact was a very impressive movie in the Star Trek franchise, and now we"™re watching with anticipation since Windows 8 Consumer Preview is now available and Microsoft is marching steadfast towards its release. + +Following the analogy that Windows releases are like Star Trek movie releases then, and that the success of Windows 7 was analogous to that of Star Trek: First Contact, it would seem that next two releases of Windows should be pretty much flops.  Star Trek: Insurrection and Star Trek: Nemesis were both pretty forgettable films, offering very little to get excited about.  Maybe Microsoft has picked up on these intertwined fates, inspiring them to try to skip over these failures by fast forwarding to the very successful "reboot" of the Star Trek movie franchise by picking coming out with what they call a "reimagined" Windows.  Did they succeed in making this jump?  Is Windows 8 a truly inspiring, innovative, reimagining of the Windows OS? + +Only time will tell what the outcome will be.  First impressions really count though.  Today, based on experiences with the Windows 8 Consumer Preview, Windows 8 appears as if it will show off very well on a tablet device, where the new UI makes more sense.  For business users like me though that rely heavily on their keyboard and mouse to get work done, I"™m really afraid that they"™ve gone and hidden all of the great features it includes behind a completely different UI paradigm that just doesn"™t jive with the needs of a business worker.  It may work well for casual computing at home, but so far it looks to me like businesses might want to consider skipping this one for their non-touch devices like laptops and desktops, at least until they can reconfigure it more like Windows 7 by removing the whimsical metro UI elements such as tiles, charms and "magic" corners. + +What do you think?  Is the reimagined Windows living up to your expectations?  Do you think the new metro UI has a place in business computing?  Or do you wish you had your start menu back? + +I"™m curious if I"™m alone in my perspective or not.  My gut tells me I"™m not going to be alone in this perspective.  Sound off in the comments and let me know what you think. + +Kirk out. + + + Technorati Tags: [Windows 8](http://technorati.com/tags/Windows+8),[Poshoholic](http://technorati.com/tags/Poshoholic) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/761/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/761/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=761&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://www.ewanspence.com/blog/2009/01/08/why-windows-7-reminds-me-of-the-star-trek-movies/ diff --git a/content/articles/2012/04/_index.md b/content/articles/2012/04/_index.md new file mode 100644 index 000000000..a029603b4 --- /dev/null +++ b/content/articles/2012/04/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from April 2012" +description: "PowerShell.org Articles published in April 2012." +--- diff --git a/content/articles/2012/04/powershell-v3-obsoleteattribute/index.md b/content/articles/2012/04/powershell-v3-obsoleteattribute/index.md new file mode 100644 index 000000000..4b15e60b9 --- /dev/null +++ b/content/articles/2012/04/powershell-v3-obsoleteattribute/index.md @@ -0,0 +1,160 @@ +--- +url: /articles/2012-04-29-powershell-v3-obsoleteattribute/ +title: "PowerShell V3 \"“ ObsoleteAttribute" +authors: + - Keith Hill +date: "2012-04-30T04:39:06+00:00" +aliases: + - /2012/04/powershell-v3-obsoleteattribute/ +--- + +PowerShell V3 now supports the ObsoleteAttribute for compiled cmdlets but unfortunately not advanced functions. This is handy to let your users know that a binary cmdlet will be going away in a future release of your binary module. + +As we work on PSCX 3.0 there are a few binary cmdlets that we will mark with this attribute to let you know to switch over to PowerShell"™s built-in equivalent before we eliminate the cmdlet completely in the next release. Here"™s a snippet that shows how to apply the ObsoleteAttribute in your source code: + + + +`1 + +[OutputType( + +typeof + +(MailMessage))] + + +2 + +[Cmdlet(VerbsCommunications.Send, PscxNouns.SmtpMail, + + +3 + + DefaultParameterSetName + += + + + +" + +Authenticated + +" + +, + + +4 + + SupportsShouldProcess + += + + + +true + +)] + + +5 + +[Obsolete( + +@" + +The PSCX\SendSmtpMail cmdlet is obsolete + +" + + + ++ + + + + +6 + + + +" + +and will removed in the next version of + +" + + + ++ + + + + +7 + + + +" + +PSCX. Use the built-in Send-MailMessage. + +" + +)] + + +8 + + + +public + + + +class + + SendSmtpMailCommand : PscxCmdlet + + +9 + +{ + + +` + + + + + The resulting of executing this cmdlet with PSCX v3 loaded is: + + + + + + +`C:\PS> Send-SmtpMail + +WARNING: The PSCX\SendSmtpMail cmdlet is obsolete and will removed in the next version of +PSCX. Use the built-in Send-MailMessage. + +`There is an ObsoleteAttribute constructor overload that takes a boolean that converts the warning to an error. I"™m not sure how useful that is but PowerShell does honor that setting and will generate a terminating error in this case: + + + +`C:\PS> Send-SmtpMail + +The PSCX\SendSmtpMail cmdlet is obsolete and will removed in the next version of PSCX. Use +the built-in Send-MailMessage. +At line:1 char:1 ++ Send-SmtpMail ++ ~~~~~~~~~~~~~ + + CategoryInfo : InvalidOperation: (Send-SmtpMail:String) [], RuntimeException + + FullyQualifiedErrorId : UseOfDeprecatedCmdlet + +`It"™s nice to see PowerShell honoring more of the .NET attributes "“ where it makes sense that is. + + + [![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/256/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/256/) ![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=256&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2012/06/_index.md b/content/articles/2012/06/_index.md new file mode 100644 index 000000000..fd6d89843 --- /dev/null +++ b/content/articles/2012/06/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from June 2012" +description: "PowerShell.org Articles published in June 2012." +--- diff --git a/content/articles/2012/06/final-outlines-for-the-v3-lunches-books/index.md b/content/articles/2012/06/final-outlines-for-the-v3-lunches-books/index.md new file mode 100644 index 000000000..43ee0fa75 --- /dev/null +++ b/content/articles/2012/06/final-outlines-for-the-v3-lunches-books/index.md @@ -0,0 +1,1706 @@ +--- +url: /articles/2012-06-03-final-outlines-for-the-v3-lunches-books/ +title: "FInal Outlines for the v3 \"Lunches\" Books" +authors: + - Don Jones +date: "2012-06-03T13:35:00+00:00" +aliases: + - /2012/06/final-outlines-for-the-v3-lunches-books/ +--- + +1 +1095 +6247 +Concentrated Technology +52 +14 +7328 +14.0 +Normal + +false +false +false +EN-US +JA +X-NONE + +I wanted to get these posted for folks' reference. The books are proceeding apace, and now that PowerShell v3 is in Release Candidate, we're going to move forward with publication ASAP. + + + +**ToC -- "Learn Windows PowerShell 3 in a Month of Lunches"** + +1. +Before You Begin + +a. +Why You Can't Afford to Ignore PowerShell + +b. +Is This Book for You? + +c. +How to Use this Book + + +i. The +Main Chapters + + +ii. Hands-On +Labs + + +iii. Supplementary +Materials + + +iv. Further +Exploration + + +v. Above +and Beyond + +d. +Setting up Your Lab Environment + +e. +Installing Windows PowerShell + +f. +Online Resources + +g. +Being _Immediately +Effective_ with PowerShell + +2. +Meet PowerShell + +a. +Choose Your Weapon + +b. +The Console Window + +c. +The Integrated Scripting Environment + +d. +It's Typing Class All Over Again! + +e. +What Version is This? + +f. +Common Points of Confusion + +g. +**Lab** + +h. +**Further +Exploration** + +3. +Using the Help System + +a. +The Help System: How You Discover Commands + +b. +Updatable Help + +c. +Asking for Help + +d. +Using Help to Find Commands + +e. +Interpreting the Help + + +i. Parameter +Sets and Common Parameters + + +ii. Optional +and Mandatory Parameters + + +iii. Positional +Parameters + + +iv. Parameter +Values + + +v. Examples + +f. +Accessing "About" Topics + +g. +Accessing Online Help + +h. +**Lab** + +4. +Running Commands + +a. +Not Scripting: Just Running Commands + +b. +The Anatomy of a Command + +c. +The Cmdlet Naming Convention + +d. +Aliases: Nicknames for Commands + +e. +Taking Shortcuts + + +i. Truncating +Parameter Names + + +ii. Parameter +Name Aliases + + +iii. Positional +Parameters + +f. +Cheating, a Bit: Show-Command + +g. +Support for External Commands + +h. +Dealing With Errors + +i. +Common Points of Confusion + + +i. Typing +Cmdlet Names + + +ii. Typing +Parameters + +j. +**Lab** + +5. +Working with Providers + +a. +What are Providers? + +b. +How the File System is Organized + +c. +How the File System is Like Other Data Stores + +d. +Navigating the File System + +e. +Using Wildcards and Literal Paths + +f. +Working with Other Providers + +g. +**Lab** + +h. +**Further +Exploration** + +6. +The Pipeline: Connecting Commands + +a. +Connect One Command to Another: Less Work For +You! + +b. +Exporting to a CSV or XML File + +c. +Piping to a File or Printer + +d. +Converting to HTML + +e. +Using Cmdlets That Modify the System: Killing +Processes and Stopping Services + +f. +Common Points of Confusion + +g. +**Lab** + +7. +Adding Commands + +a. +How One Shell Can Do Everything + +b. +About Product-Specific "Management Shells" + +c. +Extensions: Finding and Adding Snap-Ins + +d. +Extensions: Finding and Adding Modules + +e. +Playing With a New Module + +f. +Profile Scripts: Preloading Extensions When the +Shell Starts + +g. +Common Points of Confusion + +h. +**Lab** + +8. + "Objects:" +Just Data by Another Name + +a. +What are Objects? + +b. +Why PowerShell Uses Objects + +c. +Discovering Objects: Get-Member + +d. +Object Attributes, or "Properties" + +e. +Object Actions, or "Methods" + +f. +Sorting Objects + +g. +Selecting the Properties You Want + +h. +Objects Until the Very End + +i. +Common Points of Confusion + +j. +**Lab** + +9. +The Pipeline, Deeper + +a. +The Pipeline: Enabling Power With Less Typing + +b. +How PowerShell Passes Data Down the Pipeline + +c. +Plan A: Pipeline Input ByValue + +d. +Plan B: Pipeline Input ByPropertyName + +e. +When Things Don't Line Up: Custom Properties + +f. +Parenthetical Commands + +g. +Extracting the Value from a Single Property + +h. +**Lab** + +10. Formatting +- and Why it's Done on the Right + +a. +Formatting: Making What You See Prettier + +b. +About the Default Formatting + +c. +Formatting Tables + +d. +Formatting Lists + +e. +Formatting Wide + +f. +Custom Columns and List Entries + +g. +Going Out: To a File, a Printer, or the Host + +h. +Another Out: GridViews + +i. +Common Points of Confusion + + +i. Always +Format Right + + +ii. One +Object at a Time, Please + +j. +**Lab** + +k. +**Further +Exploration** + +11. Filtering +and Comparisons + +a. +Making the Shell Give You Just What You Need + +b. +Filter Left + +c. +Comparison Operators + +d. +Filtering Objects out of the Pipeline + +e. +The Iterative Command-Line Model + +f. +Common Points of Confusion + + +i. Filter +Left, Please + + +ii. When +$_ is Allowed + +g. +**Lab** + +h. +**Further +Exploration** + +12. A +Practical Interlude + +a. +Defining the Task + +b. +Finding the Commands + +c. +Learning to Use the Commands + +d. +Tips for Teaching Yourself + +e. +**Lab** + +13. Remote +Control: One on One, and One to Many + +a. +The Idea Behind Remote PowerShell + +b. +WinRM Overview + +c. +Using Enter-PSSession and Exit-PSSession for +One-to-one Remoting + +d. +Using Invoke-Command for One-to-many Remoting + +e. +Differences Between Remote and Local Commands + + +i. Invoke-Command +vs -ComputerName + + +ii. Local +vs Remote Processing + + +iii. Deserialized +Objects + +f. +But Wait, There's More + +g. +Remoting Options + +h. +Common Points of Confusion + +i. +**Lab** + +j. +**Further +Exploration** + +14. Using +Windows Management Instrumentation + +a. +WMI Essentials + +b. +The Bad News About WMI + +c. +Exploring WMI + +d. +Choose Your Weapon: WMI or CIM + +e. +Using Get-WmiObject + +f. +Using Get-Ciminstance + +g. +WMI Documentation + +h. +Common Points of Confusion + +i. +**Lab** + +j. +**Further +Exploration** + +15. Multitasking +with Background Jobs + +a. +Making PowerShell Do Multiple Things at the Same +Time + +b. +Synchronous versus Asynchronous + +c. +Creating a Local Job + +d. +WMI, as a Job + +e. +Remoting, as a Job + +f. +Getting Job Results + +g. +Working with Child Jobs + +h. +Commands for Managing Jobs + +i. +Scheduled Jobs + +j. +Common Points of Confusion + +k. +**Lab** + +16. Working +with Bunches of Objects, One at a Time + +a. +Automation for Mass Management + +b. +The Preferred Way: "Batch" Cmdlets + +c. +The WMI Way: Invoking WMI Methods + +d. +The Backup Plan: Enumerating Objects + +e. +Common Points of Confusion + + +i. Which +Way is the Right Way? + + +ii. WMI +Methods versus Cmdlets + + +iii. Method +Documentation + + +iv. ForEach-Object +Confusion + +f. +**Lab** + +17. Security +Alert! + +a. +Keeping the Shell Secure + +b. +Windows PowerShell Security Goals + +c. +Execution Policy and Code Signing + + +i. Execution +Policy Settings + + +ii. Digital +Code Signing + +d. +Other Security Measures + +e. +Other Security Holes? + +f. +Security Recommendations + +g. +**Lab** + +18. Variables: +A Place to Store Your Stuff + +a. +Introduction to Variables + +b. +Storing Values in Variables + +c. +Fun Tricks with Quotes + +d. +Storing Lots of Objects in a Variable + +e. +More Tricks with Double Quotes + +f. +Declaring a Variable's Type + +g. +Commands for Working with Variables + +h. +Variable Best Practices + +i. +Common Points of Confusion + +j. +**Lab** + +k. +**Further +Exploration** + +19. Input +and Output + +a. +Prompting For, and Displaying, Information + +b. +Read-Host + +c. +Write-Host + +d. +Write-Output + +e. +Other Ways to Write + +f. +**Lab** + +g. +**Further +Exploration** + +20. Sessions: +Remote Control, with Less Work + +a. +Making PowerShell Remoting a Bit Easier + +b. +Creating and Using Reusable Sessions + +c. +Using Sessions with Enter-PSSession + +d. +Using Sessions with Invoke-Command + +e. +Implicit Remoting: Importing a Session + +f. +Disconnected Sessions + +g. +**Lab** + +h. +**Further +Exploration** + +21. You +Call This Scripting? + +a. +Not Programming... More Like Batch Files + +b. +Making Commands Repeatable + +c. +Parameterizing Commands + +d. +Creating a Parameterized Script + +e. +Documenting Your Script + +f. +One Script, One Pipeline + +g. +A Quick Look at Scope + +h. +**Lab** + +22. Improving +Your Parameterized Script + +a. +Starting Point + +b. +Getting PowerShell to do the Hard Work + +c. +Making Parameters Mandatory + +d. +Adding Parameter Aliases + +e. +Validating Parameter Input + +f. +Adding the Warm and Fuzzies with Verbose Output + +g. +**Lab** + +23. Advanced +Remoting Configuration + +a. +Using Other Endpoints + +b. +Creating Custom Endpoints + + +i. Creating +the Session Configuration + + +ii. Registering +the Session + +c. +Enabling Multi-Hop Remoting + +d. +Digging Deep into Remoting Authentication + + +i. Defaults +for Mutual Authentication + + +ii. Mutual +Authentication via SSL + + +iii. Mutual +Authentication via TrustedHosts + +e. +**Lab** + +24. Using +Regular Expressions to Parse Text Files + +a. +The Purpose of Regular Expressions + +b. +A RegEx Syntax Primer + +c. +Using RegEx with -Match + +d. +Using RegEx with Select-String + +e. +**Lab** + +f. +**Further +Exploration** + +25. Additional +Random Tips, Tricks, and Techniques + +a. +Profiles, Prompts and Colors: Customizing the +Shell + + +i. PowerShell +Profiles + + +ii. Customizing +the Prompt + + +iii. Tweaking +Colors + +b. +More Operators: -as, -is, -replace, -join, +-split + + +i. -as +and -is + + +ii. -replace + + +iii. -join +and -split + + +iv. -contains +and -in + +c. +String Manipulation + +d. +Date Manipulation + +e. +Dealing with WMI Dates + +f. +Setting Default Parameter Values + +g. +Playing with Script Blocks + +26. Using +Someone Else's Script + +a. +The Script + +b. +It's a Line-by-line Examination + +c. +**Lab** + +27. Never +the End + +a. +Ideas for Further Exploration + +b. +"Now That I'm Done, Where Do I Start?" + +c. +Other Resources You'll Grow to Love + +28. PowerShell +Cheat Sheet + +a. +Punctuation + +b. +Help File + +c. +Operators + +d. +Custom Property and Column Syntax + +e. +Pipeline Parameter Input + +f. +When to Use $_ + +29. Appendix +A: Review Labs + +a. +Review Lab 1 (Chapters 1-6) + +b. +Review Lab 2 (Chapters 1-14) + +c. +Review Lab 3 (Chapters 1-19) + + + + + +1 +784 +4474 +Concentrated Technology +37 +10 +5248 +14.0 +Normal + +false +false +false +EN-US +JA +X-NONE + +**ToC -- "PowerShell Scripting and Toolmaking in a Month of Lunches"** + +** ** + +**Part I: Introduction +to Toolmaking** + +1. +Before You Begin + +a. +What is Toolmaking? + +b. +Is This Book for You? + +c. +Pre-Requisites + + +i. PowerShell +v3 + + +ii. Admin +Privileges + + +iii. Multiple +Computers + + +iv. SQL +Server + + +v. PowerShell +ISE + + +vi. Optional +Pre-Requisites + +d. +How To Use this Book + +2. +PowerShell Scripting Overview + +a. +What _is_ +PowerShell Scripting? + +b. +PowerShell's Execution Policy + +c. +Running Scripts + +d. +Editing Scripts + +e. +**Further +Exploration: Script Editors** + +f. +**Lab** + +3. +PowerShell's Scripting Language + +a. +One Script, One Pipeline + +b. +Variables + +c. +Quotation Marks + +d. +Object Members and Variables + +e. +Parentheses + +f. +Refresher: Comparisons + +g. +Logical Constructs + + +i. If +Construct + + +ii. Switch +Construct + +h. +Looping Constructs + + +i. Do...While +Construct + + +ii. ForEach +Construct + + +iii. For +Construct + +i. +Break and Continue in Constructs + +j. +**Lab** + +4. +Simple Scripts and Functions + +a. +Start with a Command + +b. +Turn the Command into a Script + +c. +Parameterize the Command + +d. +Turning the Script into a Function + +e. +Testing the Function + + +i. Dot-Sourcing + + +ii. Calling +the Function in the Script + + +iii. A +Better Way Ahead: Script Modules + +f. +**Lab** + +5. +Scope + +a. +What is Scope? + +b. +Seeing Scope in Action + +c. +Working Out-of-Scope + +d. +Getting Strict with Scope + +e. +Best Practices for Scope + +f. +**Lab** + +** ** + +**Part II: Building an +Inventory Tool** + +6. +Tool Design Guidelines + +a. +Do One Thing, and Do it Well + + +i. Input +Tools + + +ii. Functional +Tools + + +iii. Output +Tools + +b. +**Lab** + +7. +Advanced Functions, Part 1 + +a. +Advanced Function Template + +b. +Designing the Function + +c. +Declaring Parameters + +d. +Testing the Parameters + +e. +Writing the Main Code + +f. +Outputting Custom Objects + +g. +What Not to Do + +h. +Coming Up Next + +i. +**Lab** + +8. +Advanced Functions, Part 2 + +a. +Making Parameters Mandatory + +b. +Verbose Output + +c. +Parameter Aliases + +d. +Accepting Pipeline Input + +e. +Parameter Validation + +f. +Adding a Switch Parameter + +g. +Parameter Help + +h. +Coming Up Next + +i. +**Lab** + +9. +Writing Help + +a. +Comment-Based Help + +b. +XML-Based Help + +c. +Coming Up Next + +d. +**Lab** + +10. Error +Handling + +a. +It's All About the Action + +b. +Setting the Error Action + +c. +Saving the Error + +d. +Error Handling v1: Trap + +e. +Error Handling v2+: Try...Catch...Finally + +f. +Providing Some Visuals + +g. +Coming Up Next + +h. +**Lab** + +11. Debugging +Techniques + +a. +Two Types of Bugs + +b. +Solving Typos + +c. +The Real Trick to Debugging: Expectations + +d. +Dealing with Logic Errors: Trace Code + +e. +Dealing with Logic Errors: Breakpoints + +f. +Seriously, Have Expectations + +g. +Coming Up Next + +h. +**Lab** + +12. Creating +Custom Format Views + +a. +The Anatomy of a View + +b. +Adding a Type Name to Output Objects + +c. +Making a View + +d. +Loading and Debugging the View + +e. +Using the View + +f. +Coming Up Next + +g. +**Lab** + +13. Script +and Manifest Modules + +a. +Introducing Modules + + +i. Module +Location + + +ii. Module +Name + + +iii. Module +Contents + +b. +Creating a Script Module + +c. +Creating a Module Manifest + +d. +Creating a Module-Level Setting Variable + +e. +Coming Up Next + +f. +**Lab** + +14. Adding +Database Access + +a. +Simplifying Database Access + +b. +Setting Up Your Environment + +c. +The Database Functions + +d. +About the Database Functions + +e. +Using the Database Functions + +f. +**Lab** + +15. Interlude: +Creating a New Tool + +a. +Designing the Tool + +b. +Writing and testing the Function + +c. +Dressing Up the Parameters + +d. +Adding Help + +e. +Handling Errors + +f. +Creating a Custom Format View + +g. +Making a Module + +h. +Coming Up Next + + + +**Part III: Advanced +Toolmaking Techniques** + +16. Making +Tools that Make Changes + +a. +The -Confirm and -WhatIf Parameters + +b. +Passthrough ShouldProcess + +c. +Defining the Impact Level + +d. +Implementing ShouldProcess + +**e. +** **Lab** + +17. Creating +a Custom Type Extension + +a. +The Anatomy of an Extension + +b. +Creating a Script Property + +c. +Creating a Script Method + +d. +Loading the Extension + +e. +Testing the Extension + +f. +Adding the Extension to a Manifest + +g. +**Lab** + +18. Creating +PowerShell Workflows + +a. +Workflow Overview + + +i. Common +Parameters for Workflows + + +ii. Activities +and Stateless Execution + + +iii. Persisting +State + + +iv. Suspending +and Resuming Workflows + + +v. Inherently +Remotable + + +vi. Parallelism + +b. +General Workflow Design Strategy + +c. +Example Workflow Scenario + +d. +Writing the Workflow + +e. +Workflows vs. Functions + +f. +**Lab** + +19. Troubleshooting +Pipeline Input + +a. +Refresher: How Pipeline Input Works + +b. +Introducing Trace-Command + +c. +Interpreting Trace-Command Output + +d. +**Lab** + +20. Using +Object Hierarchies for Complex Output + +a. +When a Hierarchy Might be Necessary + +b. +Hierarchies and CSV: Not a Good Idea + +c. +Creating Nested Objects + +d. +Working with Nested Objects + + +i. Using +Select-Object to Expand Child Objects + + +ii. Using +Format-Custom to Expand an Object Hierarchy + + +iii. Using +a ForEach Loop to Enumerate Sub-Objects + + +iv. Using +PowerShell's Array Syntax to Access Individual Sub-Objects + +e. + + +f. +**Lab** + +21. Globalizing +a Function + +a. +Introduction to Globalization and Localization + +b. +PowerShell's Data Language + +c. +Storing Translated Strings + +d. +Do You Need to Globalize? + +e. +**Lab** + +22. Crossing +the Line: Utilizing the .NET Framework + +a. +.NET Classes and Instances + +b. +Static Methods of a Class + +c. +Instantiating a Class + +d. +Using Reflection + +e. +Finding Class Documentation + +f. +PowerShell vs. Visual Studio + +g. +**Lab** + + + +**Part IV: Creating +Tools for Delegated Administration** + +23. Creating +a GUI Tool, Part 1: The GUI + +a. +Introduction to WinForms + +b. +Using a GUI to create the GUI + +c. +Manually Coding the GUI + +d. +Showing the GUI + +e. +**Lab** + +24. Creating +a GUI Tool, Part 2: The Code + +a. +Addressing GUI Objects + +b. +Example: Text Boxes + +c. +Example: Button Clicks + +d. +Example: List Boxes + +e. +**Lab** + +25. Creating +a GUI Tool, Part 3: The Output + +a. +Using Out-GridView + +b. +Creating a Form for Output + +c. +Populating and Showing the Output + +d. +**Lab** + +26. Creating +Proxy Functions + +a. +What are Proxy Functions? + +b. +Creating the Proxy Function Template + +c. +Removing a Parameter + +d. +Adding a Parameter + +e. +Loading the Proxy Function + +f. +**Lab** + +27. Setting +Up Constrained Remoting Endpoints + +a. +Refresher: Remoting Architecture + +b. +What are Constrained Endpoints? + +c. +Creating the Endpoint Definition + +d. +Registering the Endpoint + +e. +Connecting to the Endpoint + +f. +**Lab** + +** ** + +**Conclusion** + +28. Never +the End + +a. +Welcome to Toolmaking + +b. +Cool Ideas for Tools + +c. +What's Your Next Step? + + + + + + +![](http://powershell.com/cs/aggbug.aspx?PostID=16860) diff --git a/content/articles/2012/06/how-to-use-write-host-without-endangering-puppies-or-a-manifesto-for-modularizing-powershell-scripts/index.md b/content/articles/2012/06/how-to-use-write-host-without-endangering-puppies-or-a-manifesto-for-modularizing-powershell-scripts/index.md new file mode 100644 index 000000000..b4995369b --- /dev/null +++ b/content/articles/2012/06/how-to-use-write-host-without-endangering-puppies-or-a-manifesto-for-modularizing-powershell-scripts/index.md @@ -0,0 +1,46 @@ +--- +url: /articles/2012-06-14-how-to-use-write-host-without-endangering-puppies-or-a-manifesto-for-modularizing-powershell-scripts/ +title: How To Use Write-Host Without Endangering Puppies (or, A Manifesto for Modularizing PowerShell Scripts) +authors: + - Don Jones +date: "2012-06-15T01:04:00+00:00" +aliases: + - /2012/06/how-to-use-write-host-without-endangering-puppies-or-a-manifesto-for-modularizing-powershell-scripts/ +--- + +At this week's TechEd, I was speaking with Jeffrey Snover in the hallway on Wednesday when he remarked, "you know, Write-Host isn't all bad." After he got someone to come around with smelling salts to revive me, he elaborated, "so long as your verb is Show." I started to object - and then a subtle, yet brilliant light came upon me. + +He's write. Heh. + +But, seriously, if you do three simple things, you can't go wrong when you write a PowerShell script or function - and this goes further than just Write-Host. Ask yourself: + + * Am I naming my script/function according to PowerShell verb-noun naming conventions? + * Am I only using allowed verbs (run Get-Verb for a list)? + * Am I _respecting the use of the verb I chose?_ + + + That last one's the doozy. But think about it: If your verb is Get, then your function/script *should just get stuff. *It shouldn't manipulate it. Shouldn't format it. Shouldn't (generally) change bytes into megabytes, or anything else. Just get the data, and output a single kind of object to the pipeline, using Write-Output. That's it. + + + Ok, if you want some step-by-step progress information as it runs, use Write-Verbose. That's cool. Or use Write-Debug for trace code, if you need. + + + The Get verb implies that you may want to do something else with the data. Convert it to HTML. Export it to CSV. Whatever. And so you just output raw objects. Need to put that data into a database? Fine, create an "Export-MyStuffToDatabase" function that does that - the Export verb makes it clear that the data is "leaving the shell" and going elsewhere. + + + Want to display the data on-screen? *Write a "Show-Whatever" function. *The Show verb *implies* on-screendisplay. You'd never think to run something like "Get-Service | Show-ServiceData | Export-CSV." The Show verb tells you that "this is going to the screen, and by God it isn't going anywhere else." So if you're using the Show verb... go ahead and use Write-Host. *That's what it's for. *No puppies will be harmed. + + + This gets back to my bigger design philosophy of *make each function/script do only one thing. *Each should automate some *task*, and should act appropriately for the verb you've chosen. If you have a function *Get*ting something as well as *Format*ting the output... that's two things. You'll also write larger scripts that automate *processes, *and those should generally just be calling sequences of your task-automating commands. A task, then, is something you might use in several different scenarios; a process is one such scenario that employs several tasks. + + + Provisioning a new user? You've got tasks like New-ADUser, Add-ADGroupMember, New-UserHomeShare, New-HREmployeeRecord, and so on. But those tasks (some of which you'd write yourself, obviously) might be used in other circumstances: New-ADUser, for example, might also be used when you need to set up a new SQL Server and create an AD service account, right? With all the tasks written, you'd write a larger "process" script, perhaps called New-CompanyUser.ps1, which combined those various tasks into the sequence needed to provision a user - while leaving the tasks free to be used in other processes as well. + + + Stick with the verbs, my friend. They won't lead you astray. + + + + + +![](http://powershell.com/cs/aggbug.aspx?PostID=17079) diff --git a/content/articles/2012/06/looking-for-a-good-tech-conference-try-this/index.md b/content/articles/2012/06/looking-for-a-good-tech-conference-try-this/index.md new file mode 100644 index 000000000..b2691c66e --- /dev/null +++ b/content/articles/2012/06/looking-for-a-good-tech-conference-try-this/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2012-06-02-looking-for-a-good-tech-conference-try-this/ +title: Looking for a good tech conference? Try this. +authors: + - Don Jones +date: "2012-06-02T23:57:00+00:00" +aliases: + - /2012/06/looking-for-a-good-tech-conference-try-this/ +--- + +It's called [TechMentor][1]. The next one is in August, _at Microsoft campus._ Yup, in Redmond. The mothership. And, unlike larger shows (like TechEd), you won't be one of 15,000 people crammed into a convention center, fighting for lunch space and getting ignored by speakers. TechMentor's a more "boutique" event, with just a few hundred other IT professionals (and no developers - ew, cooties!). You'll get tons of one-on-one time with expert speakers (like me), and plenty of networking time with your colleagues. And smaller lines for lunches. + +And a trip to the Microsoft Company Store and Museum. Seriously, it'll be a good time. + +Use code TMSK6 when you register; that'll get you a $1495 registration price, with is the lowest price they offer on a full 5-day pass (which includes pre- and post-conference workshops). + +Prices go up June 13 and again on June 18, so don't linger too long on this decision - and I hope to see you there. + + +![](http://powershell.com/cs/aggbug.aspx?PostID=16854) + + [1]: http://techmentorevents.com/events/microsofthq/home.aspx?utm_source=AttendeeMktg&utm_medium=BannerAd&utm_campaign=TMSK6 diff --git a/content/articles/2012/06/sample-code-from-my-teched-building-reusable-powershell-tools-session/index.md b/content/articles/2012/06/sample-code-from-my-teched-building-reusable-powershell-tools-session/index.md new file mode 100644 index 000000000..d3571974a --- /dev/null +++ b/content/articles/2012/06/sample-code-from-my-teched-building-reusable-powershell-tools-session/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2012-06-14-sample-code-from-my-teched-building-reusable-powershell-tools-session/ +title: "Sample Code from my TechEd \"Building Reusable PowerShell Tools\" Session" +authors: + - Don Jones +date: "2012-06-14T08:48:00+00:00" +aliases: + - /2012/06/sample-code-from-my-teched-building-reusable-powershell-tools-session/ +--- + +Hey, all! I was looking over the script I'd saved from this TechEd session, and realized I could offer something better. + +[Go to the Web page for my upcoming "Toolmaking" book][1]. In the Downloads section, grab the book's code samples. You'll actually get a _better_ example than I showed in class, and it goes _further._ The listings for Chapter 13 pretty much put you where that session wraps up. + +Now, these haven't been totally tech-edited yet, so if you find any bugs - please let me know! The book itself should go into "Early Access Preview" in a couple of months, I'm hoping. Stay tuned! + + +![](http://powershell.com/cs/aggbug.aspx?PostID=17054) + + [1]: http://morelunches.com/toolmaking.html diff --git a/content/articles/2012/06/teched-powershell-sessions/index.md b/content/articles/2012/06/teched-powershell-sessions/index.md new file mode 100644 index 000000000..0fa999eba --- /dev/null +++ b/content/articles/2012/06/teched-powershell-sessions/index.md @@ -0,0 +1,52 @@ +--- +url: /articles/2012-06-19-teched-powershell-sessions/ +title: TechEd PowerShell Sessions +authors: + - Don Jones +date: "2012-06-19T14:21:00+00:00" +aliases: + - /2012/06/teched-powershell-sessions/ +--- + +Many sessions are now available on Channel 9 as recordings... + +First, mine: + + * [Crash Course w/Jeffrey Snover][1] (one of the conference's top-rated overall sessions) + * [Crash Course repeat][2] + * [Building Reusable PowerShell Tools][3] + * [Remoting in Depth][4] (another top-rated session!) + + + But wait, there's more! + + + + + - + [App-V 5 and PowerShell](http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/WCL201) + + + - + [Win2012 Multi-Server Management](http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/WSV306) + + + - + [Advanced Automation in PSH 3](http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/WSV414) + + + + + + + + I'll caution you that the videos haven't yet been posted on all of these, so poke around until you find 'em all. With hundreds of sessions to sort through, I imagine they're prioritizing the production process. + + + +![](http://powershell.com/cs/aggbug.aspx?PostID=17125) + + [1]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/WSV321-R + [2]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/WSV321 + [3]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/WCL404 + [4]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/WCL403 diff --git a/content/articles/2012/06/upcoming-powershell-books-and-how-to-get-them/index.md b/content/articles/2012/06/upcoming-powershell-books-and-how-to-get-them/index.md new file mode 100644 index 000000000..69a33477a --- /dev/null +++ b/content/articles/2012/06/upcoming-powershell-books-and-how-to-get-them/index.md @@ -0,0 +1,33 @@ +--- +url: /articles/2012-06-26-upcoming-powershell-books-and-how-to-get-them/ +title: Upcoming PowerShell Books and How to Get Them +authors: + - Don Jones +date: "2012-06-26T12:29:00+00:00" +aliases: + - /2012/06/upcoming-powershell-books-and-how-to-get-them/ +--- + +My co-authors and I have no less than three new PowerShell books coming out... and a couple of different way to get them. + +## PowerShell In Depth + +This is meant to be a comprehensive, administrator-focused reference on all things PowerShell v3. [It's available directly from the publisher as part of their Manning Early Access Program (MEAP)][1]. Under that program, you get all available chapters now in PDF format. As new chapters are released, you get those too. When the book is done, you get your choice of ebook format and, optionally, the printed book. + +The three authors are also [offering a direct pre-order][2]. With this offer, which goes on sale July 1st, you get the print book and ebook in your choice of formats. The book will be autographed by the three of us, and we're including an exclusive video disc full of PowerShell demos, tips, and tricks. Only 200 units will be offered through this pre-order, and each will be hand-numbered. So whoever buys the first order will get the lowest-numbered book! You don't get "early access," though - you'll have to wait until the book is done and printed. + + + +## The "Month of Lunches" Books + +There are two of these: _Learn Windows PowerShell 3 in a Month of Lunches_ and _Learn PowerShell Toolmaking in a Month of Lunches._ Again, you can get "early access" directly from the publisher through the MEAP program, but you have to buy that separately for each title. [The first title is available in MEAP right now][3]. Once the book is published, you get the finished version in ebook and, if you chose, in print. + +Jeff and I are also [offering a bundle pre-order][4] that includes both books, a resources disc with video introductions from us, a logo lunch bag, and a lunch item (for US orders only). This is a pre-order; you'll get both the physical books and ebook versions, but you have to wait until they're published - there's no early access. Both books will be autographed, and only 100 hand-numbered copies will be offered. This goes on sale August 1st, and the first purchasers get the lowest-numbered copies. + + +![](http://powershell.com/cs/aggbug.aspx?PostID=17258) + + [1]: http://bit.ly/Psh3InDepth + [2]: http://store.concentratedtech.com/indepth.php + [3]: http://bit.ly/PSHv3Lunch + [4]: http://store.concentratedtech.com/lunchesbundle.php diff --git a/content/articles/2012/06/updated-snover-school-fancy-wildcards/index.md b/content/articles/2012/06/updated-snover-school-fancy-wildcards/index.md new file mode 100644 index 000000000..030bec94e --- /dev/null +++ b/content/articles/2012/06/updated-snover-school-fancy-wildcards/index.md @@ -0,0 +1,41 @@ +--- +url: /articles/2012-06-19-updated-snover-school-fancy-wildcards/ +title: "[UPDATED] Snover School: FANCY Wildcards" +authors: + - Don Jones +date: "2012-06-19T20:13:00+00:00" +aliases: + - /2012/06/updated-snover-school-fancy-wildcards/ +--- + +So, I'd previously posted about a cool trick Jeffrey Snover demonstrated at TechEd: + + + Get-Service -Name [a-b]* + + +This will return a list of all services whose names start with A or B. Now for me, this was a cool trick: I didn't realize that wildcards could be more than * or ?! And Snover described these as "rich regular expressions." + +Well, not exactly. We've corresponded, and what's actually happening is that PowerShell's wildcard support is essentially a dumbed-down set of the regex syntax. Specifically, read the about_wildcards help topic and you'll learn that you can use ranges like [a-b], the * and ? characters, or a set of characters like [abeft] - but not much else. So it looks like a regex at first blush, but isn't, really. + +This is a nifty trick, though! Keep in mind that it's only supported on parameters that have been explicitly designed, by their developers, to support wildcards. That's usually documented in the cmdlet's full help (e.g., Help Get-Service -full), although in some cases you'll need to use a bit of trial and error to see what works and what doesn't. + +Another aspect of this is the -like operator. You're probably familiar with something like this: + + + + + get-service | where { $_.name -like 'b*' } + + + +But the operator also supports these richer, semi-regex wildcards: + + + get-service | where { $_.name -like '[abd]*' } + + +Give it a shot! It was very cool to be doing a session at TechEd _with Jeffrey Snover,_ especially when he kept whipping out these little gems that I'd never even thought to try. I'll share some more of them in the upcoming weeks! + + +![](http://powershell.com/cs/aggbug.aspx?PostID=17124) diff --git a/content/articles/2012/06/updated-tweaks-to-powershel-v3-updatable-help/index.md b/content/articles/2012/06/updated-tweaks-to-powershel-v3-updatable-help/index.md new file mode 100644 index 000000000..635053fd4 --- /dev/null +++ b/content/articles/2012/06/updated-tweaks-to-powershel-v3-updatable-help/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2012-06-04-updated-tweaks-to-powershel-v3-updatable-help/ +title: "[UPDATED] Tweaks to PowerShel v3 Updatable Help" +authors: + - Don Jones +date: "2012-06-04T23:58:00+00:00" +aliases: + - /2012/06/updated-tweaks-to-powershel-v3-updatable-help/ +--- + +[I've written before about how PowerShell v3 won't come with help][1] "in the box," but will instead require you to download help from Microsoft's servers. + +ASIDE: Technically, _any_ module author can provide updatable help on their own Web server; you just have to tag your module manifest with the appropriate information so that PowerShell can locate your online content and download it. + +Now that Windows PowerShell v3 Release Candidate is out, I've noticed a slight tweak to the help system. Previously, if you looked at a command's help prior to downloading the help content, you still got the basic syntax and a reminder that you hadn't yet downloaded help. That still occurs, but when you first try to ask for help (if you haven't downloaded it), you actually get an interaction-required Yes/No prompt, reminding you to run Update-Help to get the help content to your computer. + +UPDATE: And, if you hit "Y" on that prompt, it runs Update-Help. So... this is pretty smart. + +I think this is a great compromise. Now, there's no way you can possibly _not realize_ that you haven't downloaded help, and you're told _exactly_ how to do so, and Microsoft (and other authors) are able to provide more accurate, continuously-updated content. + + +![](http://powershell.com/cs/aggbug.aspx?PostID=16885) + + [1]: http://powershell.com/cs/blogs/donjones/archive/2012/03/02/wait-powershell-v3-doesn-t-come-with-help.aspx diff --git a/content/articles/2012/06/using-powershell-to-scrape-the-web/index.md b/content/articles/2012/06/using-powershell-to-scrape-the-web/index.md new file mode 100644 index 000000000..7042c78b9 --- /dev/null +++ b/content/articles/2012/06/using-powershell-to-scrape-the-web/index.md @@ -0,0 +1,126 @@ +--- +url: /articles/2012-06-07-using-powershell-to-scrape-the-web/ +title: Using PowerShell to Scrape the Web +authors: + - Don Jones +date: "2012-06-07T14:22:00+00:00" +aliases: + - /2012/06/using-powershell-to-scrape-the-web/ +--- + +One of the things administrators often look to do with PowerShell is "scrape" Web pages. In the past, you had a couple of options: Use Internet Explorer's COM object (which can get a bit fugly), or use the .NET Framework's WebRequest stuff (slightly less fugly, but still a bit). + +PowerShell v3 to the rescue. Microsoft has wrapped much of the fugly in some cool and simple cmdlets, and given PowerShell a native ability to understand an HTML document's object model (DOM). Note that the ability to parse the HTML document tree is dependent upon IE being installed, which means it won't work on a Server Core system (since IE doesn't exist there). You'll still get some HTML parsing, but it won't be the full, broken-down tree. + +Start by running Invoke-WebRequest, passing it a -URI with the URL of the Web page you want to download. It'll handle the full task of connecting to the Web server, getting the text of the HTML page, and parsing it. Other parameters let you specify a -Credential, modify the HTTP -Headers, redirect the text to an -OutFile so that you have a local copy, specify -Proxy settings, and more. You'll specify -UseBasicParsing when IE isn't available. + +What you get back (store it in a variable to work with it) is an HTML response. it'll have a StatusCode property, a Content property, and more. What's useful are some of the parsed properties: + + * Images - all the tags + * InputFields - all form fields + * Links - all tags + * Forms - all tags + + + These are collections of objects, each one giving you access to the most commonly-needed data from he HTML. You can easily grab all of the images, links, and so forth, and process them however you like. For example, assume that you put your HTML results in $html. Run $html.links[0].href to get the destination of the first hyperlink in the page. Cool! + + + Here's a quick example that grabs the first page of search result links from a Bing search for "cmdlet:" + + + + 0 + 1 + 68 + 392 + Concentrated Technology + 3 + 1 + 459 + 14.0 + Normal + 0 + false + false + false + EN-US + JA + X-NONE + + + + + PS C:\> Invoke-WebRequest -uri + 'http://www.bing.com/search?q=cmdlet&form=AP + + + + + + MCS1' | select -expand links | select -expand href -first 10 + + + + + + /?scope=web&FORM=Z9FD + + + + + + /images/search?q=cmdlet&FORM=BIFD + + + + + + /videos/search?q=cmdlet&FORM=BVFD + + + + + + /shopping/search?q=cmdlet&mkt=en-US&FORM=BPFD + + + + + + /news/search?q=cmdlet&FORM=BNFD + + + + + + /maps/default.aspx?q=cmdlet&mkt=en-US&FORM=BYFD + + + + + + /explore?q=cmdlet&FORM=BXFD + + + + + + http://www.msn.com/ + + + + + + http://mail.live.com/ + + + +Now that's just nifty. And it works fine against local HTML pages as well as ones served up from a Web server. There's obviously a LOT more you can do, but this should give you a great starting point! + +_This article was inspired by the chapter "Working with HTML and XML Data" in the upcoming [PowerShell in Depth][1], co-authored with Jeffery Hicks and Richard Siddaway. That book can be purchased from the publisher, and is [available directly from the authors][2] in a signed, limited edition package._ + + +![](http://powershell.com/cs/aggbug.aspx?PostID=16940) + + [1]: http://bit.ly/Psh3InDepth + [2]: http://store.concentratedtech.com/indepth.php diff --git a/content/articles/2012/07/_index.md b/content/articles/2012/07/_index.md new file mode 100644 index 000000000..c7e9bab39 --- /dev/null +++ b/content/articles/2012/07/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from July 2012" +description: "PowerShell.org Articles published in July 2012." +--- diff --git a/content/articles/2012/07/comparing-lunches-v2-to-v3/index.md b/content/articles/2012/07/comparing-lunches-v2-to-v3/index.md new file mode 100644 index 000000000..bced5b0d6 --- /dev/null +++ b/content/articles/2012/07/comparing-lunches-v2-to-v3/index.md @@ -0,0 +1,51 @@ +--- +url: /articles/2012-07-24-comparing-lunches-v2-to-v3/ +title: "Comparing \"Lunches:\" v2 to v3" +authors: + - Don Jones +date: "2012-07-24T16:24:00+00:00" +aliases: + - /2012/07/comparing-lunches-v2-to-v3/ +--- + +I've been getting a few questions like this in my inbox: + + + + + I love "PowerShell in a Month of Lunches" and I'm wondering how much of + + + + + + the 3.0 book that is coming out soon will overlap with the one I have + + + + + + now? In other words, how much of the new book is catching us up to speed + + + + + + on what's new in 3.0? + + + +First of all - thanks for the love! Now, here's the lowdown: + +_[Learn Windows PowerShell v3 in a Month of Lunches, 2nd Edition][1],_ probably overlaps with the original book by about 70%. Every chapter, however, has been updated with new information for v3. The assumption is that you're learning PowerShell from scratch with either book, so there's no specific callout of "new stuff" for you. There are also entirely new chapters intended to provide better education - including one chapter where my new co-author and I focus on techniques for stealing repurposing other people's scripts, since we know that's a common task. There's also a whole new chapter on regular expressions, a new chapter on combining what you've learned to complete a practical task, and so on. But this isn't a "just the differences between v2 and v3" book; I tried writing a "Delta Guide" like that once, and met with mixed success. + +You will, however, notice that the new _Lunches_ book actually **omits** some information. Gone are the chapters on error-handling, debugging, and building advanced functions; the new book shows you how to build a parameterized script (not a function) and stops. That's because there's an all-new, full-sized _Learn PowerShell Toolmaking in a Month of Lunches_ coming (watch [http://PowerShellBooks.com][2] for links). That takes you through those scripting topics - error handling, debugging, modules, advanced functions, and much more - in a much more thorough way, using a much better build-as-you-go narrative. Think of it as the "sequel" to the original _Lunches_ book. + +Hope that helps you figure out which of these two books (or both!) best fit your needs. And don't forget there'll be a [pre-order for both of them][3], starting August 1st, which will only be available until the books are finally published. + + +![](http://powershell.com/cs/aggbug.aspx?PostID=17923) + + [1]: http://bit.ly/PSHv3Lunch + [2]: http://powershellbooks.com + [3]: http://store.concentratedtech.com/lunchesbundle.php diff --git a/content/articles/2012/07/join-jeff-and-i-for-a-live-powershell-video-chat-cast/index.md b/content/articles/2012/07/join-jeff-and-i-for-a-live-powershell-video-chat-cast/index.md new file mode 100644 index 000000000..13dd47b84 --- /dev/null +++ b/content/articles/2012/07/join-jeff-and-i-for-a-live-powershell-video-chat-cast/index.md @@ -0,0 +1,90 @@ +--- +url: /articles/2012-07-24-join-jeff-and-i-for-a-live-powershell-video-chat-cast/ +title: Join Jeff and I for a live PowerShell video chat cast! +authors: + - Don Jones +date: "2012-07-25T00:19:00+00:00" +aliases: + - /2012/07/join-jeff-and-i-for-a-live-powershell-video-chat-cast/ +--- + +Jeff and I are going to be hosting a LiveMeeting-based "hangout." We'll start with a discussion on PowerShell v3 Workflows just to get things moving, but we're relying on you to bring your questions! We'll have PowerShell v3 available for demos... hope you can attend! + + + +Here's the LiveMeeting details. Note that **only VoIP audio will be provided - there will be no dial-up number. ** + +When: Thursday, Aug 2, 2012 10:00 AM (PDT) + +Scheduled to Occur: Once + +Duration: 1:00 + + + +Don Jones has invited you to attend an online meeting using + +Microsoft Office Live Meeting. + + + +https://www.livemeeting.com/cc/mvp/join?id=8Z5Z2N&role=attend + + + +Meeting time: Aug 2, 2012 10:00 AM (PDT) + + + +Add to my Outlook Calendar: + +https://www.livemeeting.com/cc/mvp/meetingICS?id=8Z5Z2N&role=attend&i=i.ics + + + +AUDIO INFORMATION + +-Computer Audio(Recommended) + +To use computer audio, you need speakers and microphone, or a + +headset. + + + + + +FIRST-TIME USERS + +To save time before the meeting, check your system to make sure it is + +ready to use Microsoft Office Live Meeting. + +http://go.microsoft.com/fwlink/?LinkId=90703 + + + +TROUBLESHOOTING + +Unable to join the meeting? Follow these steps: + + 1. Copy this address and paste it into your web browser: + + https://www.livemeeting.com/cc/mvp/join + + 2. Copy and paste the required information: + + Meeting ID: 8Z5Z2N + + Location: https://www.livemeeting.com/cc/mvp + +If you still cannot enter the meeting, contact support: + +http://r.office.microsoft.com/r/rlidLiveMeeting?p1=12&p2=en_US&p3=LMInfo&p4=support + + + + + + +![](http://powershell.com/cs/aggbug.aspx?PostID=17927) diff --git a/content/articles/2012/07/july-25-update-powershell-in-depth-limited-edition-pre-orders-as-they-stand/index.md b/content/articles/2012/07/july-25-update-powershell-in-depth-limited-edition-pre-orders-as-they-stand/index.md new file mode 100644 index 000000000..a30e800b1 --- /dev/null +++ b/content/articles/2012/07/july-25-update-powershell-in-depth-limited-edition-pre-orders-as-they-stand/index.md @@ -0,0 +1,77 @@ +--- +url: /articles/2012-07-08-july-25-update-powershell-in-depth-limited-edition-pre-orders-as-they-stand/ +title: "[JULY 25 UPDATE] \"PowerShell In Depth\" Limited Edition Pre-Orders… as they stand…" +authors: + - Don Jones +date: "2012-07-09T00:24:00+00:00" +aliases: + - /2012/07/july-25-update-powershell-in-depth-limited-edition-pre-orders-as-they-stand/ +--- + +As most of you know, co-authors Jeffery Hicks, Richard Siddaway, and myself are offering a limited edition pre-order of our new _PowerShell in Depth_ book. You can [order from my company's online store][1]; you're pre-ordering a book autographed by the three of us and bundled with a disc chock full of demo videos timed by us. This isn't the same as the publisher's MEAP preview - you won't get the book ahead of time. The disc is exclusive to this 200-unit edition, and each book is part of a 400-unit edition and is hand-numbered. + +I'll be updating this post every couple of weeks as orders are received, but here's the rundown so far. Names are listed as shown on your PayPal invoice. + +(apologies for any typos in names - I'm retyping these manually from the order list) + + + + 1. Annette Ciotola (congratulations - you got #1!) + 2. James Berkenbile + 3. Niels Grove-Rasmussen + 4. Lester Bolton + 5. Lester Bolton + 6. Dennis Olidis + 7. Bruce Langworthy + 8. Luc Dekens + 9. Reinhard Teischl + 10. Kyle Beckman + 11. Brian Pini + 12. HPM Smits + 13. Marlene Poltronieri + 14. Mark Hourshad + 15. David Grams + 16. Brian Foley + 17. David Dov3 + 18. Gregory Holl + 19. Steve Gold + 20. Robert Simmers + 21. Charles Palmer + 22. Firoze Bhorat + 23. Bill Bailey + 24. Magnus Andersen + 25. Dennis Yeadon + 26. Imtiazali Hasham + 27. Simon Anderson + 28. Cheryl Fant + 29. Vivek Shinde + 30. Tom Collins + 31. Strategic Technology Consulting + 32. Y M Wong + 33. Joakim Westin + 34. Frederick Alexander + 35. Tong Young + 36. Alan Florance + 37. Jan Engil Ring + 38. Doug Rohm + 39. Adam Uffalussy + 40. Rick Rodriquez + 41. Thomas Mayeda + 42. Ryan Weaver + 43. Chris Carmichael + 44. Allan Miller + 45. Peter Cook + + + So just about 105 units left. If you don't see your name in the above, then we didn't receive your order via PayPal - and won't have any information for you beyond that. Try placing your order again, and I suggest creating an account with PayPal (which isn't normally mandatory) so that you can track your order. + + + We don't have a shipping date on these books yet, but once we do we'll start notifying everyone. You'll receive tracking information in the mail from the USPS once we ship - review your spam folders around that time, if necessary. + + + + + +![](http://powershell.com/cs/aggbug.aspx?PostID=17546) + + [1]: http://store.concentratedtech.com/indepth.php diff --git a/content/articles/2012/07/kirk-munro-product-manager-architect-and-powershell-mvp-for-hire/index.md b/content/articles/2012/07/kirk-munro-product-manager-architect-and-powershell-mvp-for-hire/index.md new file mode 100644 index 000000000..aabeed48c --- /dev/null +++ b/content/articles/2012/07/kirk-munro-product-manager-architect-and-powershell-mvp-for-hire/index.md @@ -0,0 +1,37 @@ +--- +url: /articles/2012-07-18-kirk-munro-product-manager-architect-and-powershell-mvp-for-hire/ +title: Kirk Munro, Product Manager, Architect, and PowerShell MVP for hire +authors: + - Kirk Munro +date: "2012-07-18T23:01:34+00:00" +aliases: + - /2012/07/kirk-munro-product-manager-architect-and-powershell-mvp-for-hire/ +--- + +While I have loved working at Devfarm Software for the past 11 months, circumstances have unfortunately forced us to part ways and as a result I am a free agent now and looking for a new place to hang my hat.  Working with Ben Vierck and Brian Butler at Devfarm has been a fantastic experience, and if it wasn"™t for the small yet annoying detail that there isn"™t enough money in the company to continue to pay my salary and keep the business going full steam ahead, I"™d still be working with them today. + +I officially stopped working for Devfarm on July 6, but I had a few items for [PowerWF][1] 3.0 that I wasn"™t quite finished with yet so I spent a good part of last week wrapping up development of those items.  When I wasn"™t doing that, I was hard at work on getting the public beta of [wmix][2] out the door (something that I"™ll talk more about later).  With wmix published and my tasks at Devfarm now complete, it"™s time to focus on finding what"™s next. + +If you or someone you know are looking for a talented Product Manager with: + + * a very strong technical background with 15 years of experience in software development and infrastructure management; + * recognized deep technical expertise as a 5-time recipient of the Microsoft MVP award for Windows PowerShell, including almost 6 years of dedicated Windows PowerShell experience; + * experience establishing a brand, building awareness, and leveraging social media in marketing; + * strong presentation skills and experience presenting at large conferences such as TechEd; and + * an entrepreneurial spirit + +then please [drop me a line][3] and lets talk about it. + +Thanks, + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[Poshoholic](http://technorati.com/tags/Poshoholic),[Product Manager](http://technorati.com/tags/Product+Manager),[Architect](http://technorati.com/tags/Architect) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/791/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/791/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=791&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://powerwf.com/products/powerwf.aspx + [2]: http://wmix.codeplex.com/ + [3]: http://poshoholic.com/contact-me/ diff --git a/content/articles/2012/07/measure-powershell-performance/index.md b/content/articles/2012/07/measure-powershell-performance/index.md new file mode 100644 index 000000000..9427948e7 --- /dev/null +++ b/content/articles/2012/07/measure-powershell-performance/index.md @@ -0,0 +1,625 @@ +--- +url: /articles/2012-07-19-measure-powershell-performance/ +title: Measure PowerShell Performance +authors: + - Don Jones +date: "2012-07-19T14:10:00+00:00" +aliases: + - /2012/07/measure-powershell-performance/ +--- + +I'm often asked by folks if there's a "better way" to do something in a script. Often times, they're looking for a better procedural approach - following best practices like object-based output, for example. But sometimes, they're looking for better performance from a script or command. Well, the good news is that PowerShell itself can help with that. + +Let's consider two short scripts that produce almost identical output. Here's the first: + + + + + + +Get-Process + + +| + + + + + + + + + Select-Object + + +Name + +, + +ID + +, + + + + + + + @{n += + +'PM(KB)' +;e += +{ +$_ + +. +pm +/ + +1kb + +-as + +[ + +int + +] +}} +, + + + + + + + @{n += + +'VM(KB)' +;e += +{ +$_ + +. +vm +/ + +1kb + +-as + +[ + +int + +] +}} +| + + + + + + + +Where + { +$_ + +. +Name +-like + +'s*' + } +| + + + + + + + Format-Table + + +-AutoSize + + + + +Which outputs the following: + + + + + + +Name Id PM(KB) VM(KB) + + + + + + ---- -- ------ ------ + + + + + + SearchIndexer 2400 16332 511936 + + + + + + services 532 3700 34296 + + + + + + smss 292 272 4276 + + + + + + spoolsv 1060 3688 55996 + + + + + + svchost 264 12980 93388 + + + + + + svchost 644 2132 38588 + + + + + + svchost 684 2428 31988 + + + + + + svchost 756 10192 1414100 + + + + + + svchost 768 15724 104180 + + + + + + svchost 896 23096 589812 + + + + + + svchost 976 5064 87876 + + + + + + svchost 1100 12528 348288 + + + + + + svchost 2172 5056 94256 + + + + + + System 4 120 4196 + + + + + +Now consider this second version: + + + + + + +Get-Process + + +-Name + + + +s* + + + +| + + + + + + + Format-Table + + +Name + +, + +ID + +, + + + + + + + @{n += + +'PM(KB)' +;e += +{ +$_ + +. +pm};formatstring += + +"N2" +} +, + + + + + + + @{n += + +'VM(KB)' +;e += +{ +$_ + +. +vm};formatstring += + +"N2" +} +-AutoSize + + + + +And its output: + + + + + + +Name Id PM(KB) VM(KB) + + + + + + ---- -- ------ ------ + + + + + + SearchIndexer 2400 16,723,968.00 524,222,464.00 + + + + + + services 532 3,788,800.00 35,119,104.00 + + + + + + smss 292 278,528.00 4,378,624.00 + + + + + + spoolsv 1060 3,776,512.00 57,339,904.00 + + + + + + svchost 264 13,295,616.00 95,629,312.00 + + + + + + svchost 644 2,183,168.00 39,514,112.00 + + + + + + svchost 684 2,539,520.00 33,288,192.00 + + + + + + svchost 756 10,436,608.00 1,448,038,400.00 + + + + + + svchost 768 16,326,656.00 108,277,760.00 + + + + + + svchost 896 15,773,696.00 449,454,080.00 + + + + + + svchost 976 5,132,288.00 89,452,544.00 + + + + + + svchost 1100 12,881,920.00 357,179,392.00 + + + + + + svchost 2172 4,464,640.00 94,494,720.00 + + + + + + System 4 122,880.00 4,296,704.00 + + + + + +Again, same data, just a different way of getting it. The second one is a bit prettier, too. So is there a performance difference? PowerShell's **Measure-Command** approach can tell us. I've saved these in script files named First.ps1 and Second.ps1, mainly for convenience; it's completely legitimate to ask Measure-Command to measure a command, rather than a script file, but when the commands get complex I find them easier to read in a script. + + + + + PS C:\> measure-command -Expression { C:\first.ps1 } + + + + + + + + + + + + + + + + + + Days : 0 + + + + + + Hours : 0 + + + + + + Minutes : 0 + + + + + + Seconds : 0 + + + + + + Milliseconds : 82 + + + + + + Ticks : 825043 + + + + + + TotalDays : 9.5491087962963E-07 + + + + + + TotalHours : 2.29178611111111E-05 + + + + + + TotalMinutes : 0.00137507166666667 + + + + + + TotalSeconds : 0.0825043 + + + + + + TotalMilliseconds : 82.5043 + + + + + + + + + + + + + + + + + + + + + + + + PS C:\> measure-command -Expression { C:\second.ps1 } + + + + + + + + + + + + + + + + + + Days : 0 + + + + + + Hours : 0 + + + + + + Minutes : 0 + + + + + + Seconds : 0 + + + + + + Milliseconds : 87 + + + + + + Ticks : 871232 + + + + + + TotalDays : 1.00837037037037E-06 + + + + + + TotalHours : 2.42008888888889E-05 + + + + + + TotalMinutes : 0.00145205333333333 + + + + + + TotalSeconds : 0.0871232 + + + + + + TotalMilliseconds : 87.1232 + + + + + +Holy smokes. _The first one was faster._ OK, only by 5 milliseconds, but it was faster! And the first one doesn't exactly use what I'd call "best practices." It's filtering out processes whose names don't start with "S" way late in the game - after doing all that Select-ing. It's possible that the second script's Format-Table, with all that FormatString fanciness, is what's making the second script run longer. Fortunately, we can now go in and start tweaking things around, re-testing, and even testing individual commands to get the script running as fast as possible. I'll leave that to you, for these two examples - how fast can you get one to run while producing substantially the same output? + +Measure-Command is a useful tool, but always remember that _it's really running your script._ This isn't some kind of testing mode (and if you run commands with -WhatIf, you won't get the same performance results). So you'll often want to test this in a virtual environment, getting your command fine-tuned and read for production. + + + + + + + + +![](http://powershell.com/cs/aggbug.aspx?PostID=17813) diff --git a/content/articles/2012/07/note-powershell-book-limited-edition-preorders-only-available-as-preorders/index.md b/content/articles/2012/07/note-powershell-book-limited-edition-preorders-only-available-as-preorders/index.md new file mode 100644 index 000000000..7f671ffc3 --- /dev/null +++ b/content/articles/2012/07/note-powershell-book-limited-edition-preorders-only-available-as-preorders/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2012-07-17-note-powershell-book-limited-edition-preorders-only-available-as-preorders/ +title: "Note: PowerShell Book Limited Edition Preorders ONLY AVAILABLE as Preorders!" +authors: + - Don Jones +date: "2012-07-17T14:28:00+00:00" +aliases: + - /2012/07/note-powershell-book-limited-edition-preorders-only-available-as-preorders/ +--- + +Jeffery Hicks, Richard Siddaway, and I wanted to offer a quick clarification on our book preorders. First, the _PowerShell In Depth_ preorder is [currently available][1], and there are up to 200 units offered through this preorder. You get a signed-by-all-three-of-us book and an exclusive video companion disc. The _Month of Lunches_ bundle preorder [will go on sale August 1st][2], and will be limited to 100 units. It gets you two autographed books, resources disc, and a fun lunch bag. + +**These offers will only be valid until the books are actually released**. At that time, we'll fulfill all of the preorders and **stop further sales.** If we only sell 50 units, for example, then that's all that will be sold for that particular title or titles - we won't be offering this on an ongoing basis. + +So, if you're thinking you want one of these signed, hand-numbered, limited editions... get on the stick and place your order ASAP. We're working very hard to wrap up production on these books and get them published, especially now that we know Windows 8 / 2012 will RTM in August, so the preorders won't last long. + + +![](http://powershell.com/cs/aggbug.aspx?PostID=17746) + + [1]: http://store.concentratedtech.com/indepth.php + [2]: http://store.concentratedtech.com/lunchesbundle.php diff --git a/content/articles/2012/07/pscx-3-0-beta-released/index.md b/content/articles/2012/07/pscx-3-0-beta-released/index.md new file mode 100644 index 000000000..445800285 --- /dev/null +++ b/content/articles/2012/07/pscx-3-0-beta-released/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2012-07-26-pscx-3-0-beta-released/ +title: PSCX 3.0 Beta Released +authors: + - Keith Hill +date: "2012-07-27T04:12:31+00:00" +aliases: + - /2012/07/pscx-3-0-beta-released/ +--- + +We"™ve just released a [beta of the PowerShell Community Extensions 3.0][1] which targets PowerShell 3.0 specifically. This new version uses a WiX based installer. We may look at providing an xcopy deployable ZIP file but we had so many users get burned by not unblocking the ZIP file that the move back to MSI seemed warranted. The MSI really doesn"™t do much other than copy files into the Program Files dir and add a path to the PSModulePath environment variable. + +Be sure to read the installation notes on the download page. If you"™re having problems importing the PSCX module, you might need to reboot. Yeah I know that sucks but either WiX 3.6 just isn"™t handling environment variable updates quite right or I"™m not using WiX right. + +If you"™re using PSCX and Windows PowerShell 3.0, please take this version for a spin. You can use it side-by-side with your current version of PSCX 2.x. When you import PSCX specify the RequiredVersion parameter as shown below e.g.: + +Import-Module pscx "“RequiredVersion 3.0.0.0 + +And please, [report problems back to the CodePlex site][2]. I haven"™t always been able to reply quickly to issues but we do monitor them. Thanks! + +[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/268/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/268/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=268&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) + + [1]: http://pscx.codeplex.com/releases/view/91403 + [2]: http://pscx.codeplex.com/workitem/list/basic diff --git a/content/articles/2012/07/release-dates-for-powershell-3-announced/index.md b/content/articles/2012/07/release-dates-for-powershell-3-announced/index.md new file mode 100644 index 000000000..b32d08230 --- /dev/null +++ b/content/articles/2012/07/release-dates-for-powershell-3-announced/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2012-07-09-release-dates-for-powershell-3-announced/ +title: Release Dates for PowerShell 3 announced! +authors: + - Don Jones +date: "2012-07-09T16:25:00+00:00" +aliases: + - /2012/07/release-dates-for-powershell-3-announced/ +--- + +Microsoft has just announced, at its Worldwide Partner Conference, that Windows 8 and Windows Server 2012 are on track to hit "Release to Manufacturing" the first week of August, with general product availability in October. That means PowerShell v3 will start becoming available in August-September; we can expect v3 to be available as a Web download for older versions of Windows probably by December (based on past performance; it could actually be sooner or a bit later). That'll include Windows 7, Windows Server 2008, and Windows Server 2008 R2, but notably will _not_ include Windows Vista (does anyone mind?). v3 will not ship for Windows XP or Windows Server 2003; those ships have sailed and it's time to move on! + + +![](http://powershell.com/cs/aggbug.aspx?PostID=17573) diff --git a/content/articles/2012/07/the-new-community/index.md b/content/articles/2012/07/the-new-community/index.md new file mode 100644 index 000000000..fa19b5262 --- /dev/null +++ b/content/articles/2012/07/the-new-community/index.md @@ -0,0 +1,43 @@ +--- +url: /articles/2012-07-29-the-new-community/ +title: The New PowerShell Community +authors: + - Don Jones +date: "2012-07-29T16:54:44+00:00" +categories: + - Announcements +aliases: + - /2012/07/the-new-community/ +--- + +Welcome to the new community! +This site represents an evolution of the old PowerShellCommunity.org (also accessible at PoshComm.org). We've moved the site off of the old DotNetNuke software, and are now using a combination of WordPress (for community-hosted blogs) and Vanilla 2 (for the forums and for blog comments). +Why the new site? A couple of reasons. For one, we desperately wanted to get out of the DotNetNuke software, which has proven somewhat difficult to work with since none of us are experts with it. We also needed to get the site out of it's home in a Quest datacenter. Quest was awesome for providing that hosting, but they're moving on to bigger and better things, and we wanted to get a bit more control over the site. We also wanted to trim the site down a bit, to focus mainly on providing a blogging platform and aggregation point, and the all-important Q&A forums that folks rely on. + + +## Logging On + +Right now, we're starting fresh. You'll need to create a new forums account - but you can do so using Twitter, Facebook, OpenID, or Google - there's no need to make up a new password! + + +## Forums + +Our forums are empty at present, but we'll be extracting the old forums content and posting it in a static archive for long-term reference. In the meantime, feel free to jump in and start populating the new forums! You'll see that you can ask questions (which you can then mark as answered), or post discussions. We've tried to flatten the forums structure to make it a bit easier to navigate. +We're presently looking for topic-specific experts to host "Ask the Experts" forums. Drop a note in the "Suggestion Box" forum if you're interested. You'd be agreeing to be the primary moderator and responder for a specific topic, as it relates to PowerShell. + + +## Blogging + +If you're looking for a place to host a PowerShell-focused blog, we'd be pleased to provide that to you. Just drop a note in the "Suggestion Box" (in the forums) and we'll get right back to you. Or, contact [Don Jones][1] directly. If you already have a high-quality, frequently updated, PowerShell-focused blog, we'd also be happy to include it in our aggregation - again, just let us know in the Suggestion Box. + + +## Management + +The community is currently being managed by PowerShell MVPs Don Jones and Kirk Munro. We're not currently putting together a "board" to run the site, since... well, it's just a Web site. What we _are_ looking for - as noted above - are people who want to take ownership of a particular topical "Ask the Experts" forum. By taking a personal stake in this community, those folks will also help manage it by helping us make critical management decisions going forward. + + +## Affiliation + +The site is not affiliated with any corporation or organization at present, and we have no plans to create such an affiliation. Don's company, Concentrated Technology, is providing the hosting, in exchange for running the occasional banner ad for Don's PowerShell books, videos, and other resources. We may accept additional advertising over time to help offset operational expenses, but the plan is to run this site as a labor of love. + + [1]: http://concentratedtech.com/contact diff --git a/content/articles/2012/07/want-to-contribute/index.md b/content/articles/2012/07/want-to-contribute/index.md new file mode 100644 index 000000000..b2dd8bc6c --- /dev/null +++ b/content/articles/2012/07/want-to-contribute/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2012-07-29-want-to-contribute/ +title: Want to Contribute? +authors: + - Don Jones +date: "2012-07-29T19:51:59+00:00" +categories: + - Announcements +aliases: + - /2012/07/want-to-contribute/ +--- + +We're looking for a few good PowerShell contributors! You don't need to be a PowerShell expert in order to make a valuable contribution to this community - there are a number of ways in which you can help. + + + +If you _are_ an expert, consider answer questions in our [forums][1]. If you have a specific topical area that interests you - Active Directory, SQL Server, whatever - then we can give you your own topic-specific "Ask the Experts" forum. That's a huge help to the many administrators out there who are trying hard to do their jobs. +We'd also love to have someone moderate different sets of recommendations. We're always asked about book reviews, training reviews, and more - so if that interests you, let us know by dropping a comment in the Suggestion Box (in the forums). We can connect you with publishers so that you can get copies of books, read through them, and then post reviews to benefit the community. Or whatever... you could review tools, training videos, or whatever you like. It's all helpful! +Just let us know how you'd like to contribute, and we'll try and make it happen! + + [1]: /forums/ diff --git a/content/articles/2012/08/_index.md b/content/articles/2012/08/_index.md new file mode 100644 index 000000000..847f0365f --- /dev/null +++ b/content/articles/2012/08/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from August 2012" +description: "PowerShell.org Articles published in August 2012." +--- diff --git a/content/articles/2012/08/ebook-secrets-of-powershell-remoting/index.md b/content/articles/2012/08/ebook-secrets-of-powershell-remoting/index.md new file mode 100644 index 000000000..37450faae --- /dev/null +++ b/content/articles/2012/08/ebook-secrets-of-powershell-remoting/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2012-08-06-ebook-secrets-of-powershell-remoting/ +title: "eBook: Secrets of PowerShell Remoting" +authors: + - Don Jones +date: "2012-08-06T19:22:35+00:00" +categories: + - Books + - PowerShell for Admins + - Tutorials +aliases: + - /2012/08/ebook-secrets-of-powershell-remoting/ +--- + +This is a free e-book that covers PowerShell Remoting. There's a brief overview and tutorial of actually using Remoting, but that part isn't in-depth. What this e-book provides, that you won't find elsewhere, is step-by-step, screenshot-based instructions for configuring Remoting for any imaginable scenario. You'll also find troubleshooting tutorials and examples, and even information on how to explain Remoting to your corporate IT security team. It's all the stuff that isn't documented in PowerShell's own help - and it's completely free. You don't even need to register to download the file! + + + + +Current version: August 2012. + +The ZIP file contains a PDF. We're not currently offering MOBI or EPUB versions of the file, as the conversion from DOCX using the tools we have available to us takes a zillion steps and is less than perfect. Please [contact Don directly through his Web site][1] if you're interesting in volunteering to help with format conversions. +[Download Secrets of PowerShell Remoting][2] + + [1]: http://concentratedtech.com/contact/ + [2]: https://powershell.org/ebooks diff --git a/content/articles/2012/08/powershell-workflow-when-should-you-use-it/index.md b/content/articles/2012/08/powershell-workflow-when-should-you-use-it/index.md new file mode 100644 index 000000000..85d42a55d --- /dev/null +++ b/content/articles/2012/08/powershell-workflow-when-should-you-use-it/index.md @@ -0,0 +1,67 @@ +--- +url: /articles/2012-08-30-powershell-workflow-when-should-you-use-it/ +title: "PowerShell Workflow: When Should You Use It?" +authors: + - Don Jones +date: "2012-08-30T16:29:19+00:00" +categories: + - PowerShell for Admins +aliases: + - /2012/08/powershell-workflow-when-should-you-use-it/ +--- + +Microsoft recently posted the online help for PowerShell v3 Workflow (http://technet.microsoft.com/en-us/library/jj134242), and I wanted to take an opportunity to explore some of what the help says - and perhaps offer an outsider's perspective. + +## What is Workflow? + +Workflow is a set of technologies included with PowerShell v3, and is available on any computer running v3 (which can include Windows 7, Windows Server 2008, Windows Server 2008 R2, Windows 8, and Windows Server 2012). A workflow is a special kind of PowerShell script that looks a lot like a function. When run, however, PowerShell translates the workflow to Windows Workflow Foundation (WWF) code, and hands it off to WWF to execute. That means the contents of a workflow are a bit different than the contents of a script. + +## When might you use workflow? + +This is where I take issue with the help files, a bit. They state: + +> In general, you should consider using a workflow instead of a cmdlet or script when you must meet any of the following requirements. +> +> * You need to perform a long-running task that combines multiple steps in a sequence. +> * You need to perform a task that runs on multiple devices. +> * You need to perform a task that requires checkpointing or persistence. +> * You need to perform a long-running task that is asynchronous, restartable, parallelizable, or interruptible. +> * You need to run a task on a large scale, or in high availability environments, potentially requiring throttling and connection pooling. + +I don't think that's an accurate list. I think it's incomplete, for one, and I think it includes some things it shouldn't. Understand that workflow is _complicated. _These things require some up-front planning. Not every PowerShell command can be used natively in a workflow (despite what the help files imply), because not every command has a WWF equivalent. For me, workflow is something you should use _when no other, simpler mechanism_ will meet your specific needs. This list in the help file is supposed to help you identify situations where workflow is _the only way to go_ - but I think it's a bit misleading. +Let's look at why. + +### You need to perform a long-running task that combines multiple steps in a sequence. + +Well, that's what a script does. Any script. Just because you need to run multiple steps in a sequence doesn't mean you should be using workflow. + +### You need to perform a task that runs on multiple devices. + +OK, workflow _can_ do this, but so can the much easier-to-use Invoke-Command. Give it a command, or even a script, and you can run multiple steps, in a sequence, on multiple devices. Understand that workflow _uses _remoting to talk to remote devices; if you're using workflow, you've already enabled remoting - so why not use it when the need is simpler? + +### You need to perform a long-running task that is asynchronous, restartable, parallelizable, or interruptible. + +It's really the "or" I have a problem with here. PowerShell jobs will let you run tasks asynchronously, and in parallel; restartable and interruptible are legitimate workflow-only features. If you need those, you need workflow; if you _merely_ need asynchronous, consider using a job. + +### You need to run a task on a large scale, or in high availability environments, potentially requiring throttling and connection pooling. + +I don't see why Invoke-Command, which supports throttling of connections, couldn't accomplish this criteria. I'll admit that this one's borderline for me; because workflows are executed by WWF and not by PowerShell per se, it's probably better at scale-out. But I wouldn't _immediately_ head for workflow just because I needed to run some command on a few thousand machines. I might, after further evaluation of the situation, select workflow after all - but it's not an automatic for me. + +### You need to perform a task that requires checkpointing or persistence. + +Truth. This is unique to workflow. As WWF executes your workflow tasks, it "checkpoints" its status to disk. That way, if the entire environment crashes, WWF can resume where it left off when things are rebooted. If you need this, it's a legitimate reason to head straight for workflow. And for a very long-running task with multiple steps _that might well be interrupted, _this would drive me right to workflow every time. + +### You need to perform a task that combines steps which can be run in parallel with those which must be run sequentially + +This is really a unique workflow thing, and one that isn't listed in the help files. Workflow can designate specific chunks - _activities_ is the term workflow uses - that contain commands which must be run in a strict sequence, and designate other chunks to be run in parallel, in any particular order. This can massively improve performance, and is one of the main advantages that would push me to use workflow over an ordinary script. + +## Features vs. Drivers + +For me, this discussion is about workflow _features_ - things it can do - versus workflow _drivers_ - reasons you'd use workflow and workflow alone. My last two points - checkpointing and persistence, along with parallel/sequential mixing - are the main workflow _drivers_ for me. The ability to target multiple machines is a _feature; _something I can do with workflow once I've decided to use it. +To be fair, I'm simplifying things a bit. Workflow's ability to target multiple machines in parallel may be more robust that remoting's ability to do so; I haven't tested that. Under the hood, though, I know that workflow _relies on remoting_ for communications, so I suspect the two would perform similarly. + +## Hey, I Think Workflow is Cool! + +Don't get me wrong. As I've outlined above, there are definitely reasons I'd choose to use workflow. But those aren't necessarily the reasons given by the help file. While I appreciate the time and effort Microsoft has put into workflow, I think they're a wee bit over-enthusiastic when suggesting that "you should use a workflow when you have a task that combines multiple steps in a sequence." Workflow is a challenging technology, with a fairly steep learning curve. As yet, troubleshooting and debugging tools are scant. I'll stick with simpler mechanisms when they meet my needs - and aim for workflow when I need some of the amazing things that it alone can do for me. +My concern with the help files is that they could drive relative newcomers to workflow by giving them the impression that it was the only way to achieve some of those things, or was the preferred way of achieving them. Those newcomers could easily be intimidated by workflow (heck, I still am), and just walk away from PowerShell entirely, not realizing that there were other, simpler ways of "performing a task that runs on multiple devices." Help files like this should provide direction and guidance... and I just think in this case that the guidance oversells workflow a teeny bit. +I've sent a longer, more detailed version of this feedback to Microsoft as well. Perhaps the help files can evolve over time (hey, that's why PowerShell v3 has updatable help!) to provide better, more accurate guidance on when you _should_ use workflow over some other approach. diff --git a/content/articles/2012/09/_index.md b/content/articles/2012/09/_index.md new file mode 100644 index 000000000..ee613b01f --- /dev/null +++ b/content/articles/2012/09/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from September 2012" +description: "PowerShell.org Articles published in September 2012." +--- diff --git a/content/articles/2012/09/own-a-piece-of-the-community-buy-shares-in-powershell-org-inc/index.md b/content/articles/2012/09/own-a-piece-of-the-community-buy-shares-in-powershell-org-inc/index.md new file mode 100644 index 000000000..5c82c8613 --- /dev/null +++ b/content/articles/2012/09/own-a-piece-of-the-community-buy-shares-in-powershell-org-inc/index.md @@ -0,0 +1,32 @@ +--- +url: /articles/2012-09-10-own-a-piece-of-the-community-buy-shares-in-powershell-org-inc/ +title: "Own a Piece of the Community: Buy Shares in PowerShell.org, Inc.!" +authors: + - Don Jones +date: "2012-09-10T17:35:16+00:00" +categories: + - Announcements +aliases: + - /2012/09/own-a-piece-of-the-community-buy-shares-in-powershell-org-inc/ +--- + +When Kirk Munro and I set this site up, and started redirecting traffic from the old PowerShellCommunity.org, one of our main goals was to make this a truly _community-owned_ resource. We wanted it hosted independently (my company, Concentrated Tech, is being paid to host the site, so we get pretty good service and total control). We didn't want to be beholden to anyone's commercial interests or whims (companies do get distracted by their real jobs from time to time, after all). +When we started talking to Microsoft about holding a [PowerShell Summit][1], we wanted that to be community-owned too, and not tied to a commercial interest - in part so that we could keep the price low, but also so that Microsoft would be able to support us without getting into any possible conflicts of interest with any of its ISV partners. +Today, our intention becomes legally realized. PowerShell.org., Inc., a Nevada corporation, is born - and we're offering ownership shares to help raise capital. This capital will be used to pay for necessities like bookkeeping, and also to help bootstrap the Summit event. Shareholders are _legal owners of the corporation, _and will vote for its Board of Directors - who in turn appoint the Officers that make things happen. Our first Board will consist of [myself][2], [Kirk][3], [Jeffery Hicks][4], [Richard Siddaway][5], and [Jason Helmick][6]. +**Want to become a community owner? **You'll want to start with our "Shareholder Brochure," which is available in [the new "PowerShell.org, Inc." forum][7] on this site. That forum will also get you our Bylaws and Articles of Incorporation; the Brochure will outline the purpose of the corporation, and explain what it means to be a shareholder. The forum also contains the Share Purchase Order form, which you can use to purchase shares, and contains documents that outline our initial Board of Directors and Officer lineup and other important details. + +> **Cool tip:** Shareholders get access to a special forum on PowerShell.org to discuss company business, are eligible for an @powershell.org e-mail address, and may receive a discount to the [PowerShell Summit North America 2013][1]. In fact, if you're planning to attend, you can add $100 worth of stock to your event registration for just $75 (plus card fees), instantly giving you your $25 discount! + +We hope you'll give serious consideration to supporting this community effort, and to finally - about six years after PowerShell's introduction - help us realize our dream of creating a truly community-owned online resource, educational event, and more. We have created [a set of forums on PowerShell.org for discussion and Q&A about this corporation][8], so if you have any questions, we encourage you to turn there for your answers. +Although the corporation will not be publicly-traded in the sense of appearing on a stock market, we do intend to make as much of its business as possible completely open and transparent. To that end, we'll use this blog to periodically announce the availability of public documents (as we create them), along with shareholder meetings and other important events. Just look for items in the "Inc." category of the blog. We'll also use the [Forums][8] as a repository for various documents, so that you can always find them easily. +**What do you get by being an owner?** Well, a vote (one per share owned) for the Board of Directors makeup. The aforementioned $25 discount to the PowerShell Summit. An @powershell.org e-mail address or forwarding alias, if you want one. And a chance to help us create a truly independent, group-driven entity that's owned not by any one person, but by all of us together. +Thanks for joining. + + [1]: http://powershellsummit.org + [2]: http://donjones.com + [3]: http://twitter.com/poshoholic + [4]: http://twitter.com/jeffhicks + [5]: http://twitter.com/rsiddaway + [6]: http://twitter.com/thejasonhelmick + [7]: https://powershell.org/discuss/viewforum.php?f=26 + [8]: https://powershell.org/discuss/viewforum.php?f=25 diff --git a/content/articles/2012/09/powershell-summit-best-conference-deal-ever/index.md b/content/articles/2012/09/powershell-summit-best-conference-deal-ever/index.md new file mode 100644 index 000000000..0c2c0e60c --- /dev/null +++ b/content/articles/2012/09/powershell-summit-best-conference-deal-ever/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2012-09-11-powershell-summit-best-conference-deal-ever/ +title: "PowerShell Summit: Best Conference Deal Ever!" +authors: + - Don Jones +date: "2012-09-11T11:55:39+00:00" +categories: + - Announcements + - Events + - News +aliases: + - /2012/09/powershell-summit-best-conference-deal-ever/ +--- + +What's the average tech conference cost these days? $1500? $2000? And that's just to get in, to say nothing of hotel, air, food, and whatnot. +The [PowerShell Summit North America 2013][1] has an idea. Lets do a community-owned event, with a goal of breaking even and supporting an annual event, but not worry about a profit. +Lets say you live in the US. A ticket to Seattle in April will run you $500-700 after taxes. Maybe less if you can get on a discount carrier like Southwest - they fly to SEA. Hotel will run you under $450 for three nights. Say you decide to splurge on a car for four days, probably for under $200 (including all the ridiculous taxes on rental cars). Toss in another $250 for food? That takes you to under $1600. PowerShell Summit only costs $550 - less if you register during one of the Early Bird tiers; as low us $450, in fact. That's $2100-2200 total, or just a bit over what some conferences charge for their registration fee alone! +What about quality? Well, you'll get the same food Microsoft employees get. So that can't be all bad. You'll attend sessions delivered by Microsoft product team members, along with independent experts. You'll interact directly with PowerShell team managers, too, in a small-event format that lets you provide product feedback directly to them. Heck, with under 100 fellow attendees, you'll get plenty of face time with everyone. +It's going to be a great event, and it will definitely be affordable. It's being run by members of the community, not a conference company. This will hopefully become OUR event, an annual gathering of PowerShell enthusiasts, experts, and team members. A chance to network, to learn, to share, and to grow. +I hope you'll be able to join us! + + [1]: http://powershellsummit.org diff --git a/content/articles/2012/09/powershell-summit-im-feeling-lucky-tickets-on-sale-400-each/index.md b/content/articles/2012/09/powershell-summit-im-feeling-lucky-tickets-on-sale-400-each/index.md new file mode 100644 index 000000000..5b619a81d --- /dev/null +++ b/content/articles/2012/09/powershell-summit-im-feeling-lucky-tickets-on-sale-400-each/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2012-09-09-powershell-summit-im-feeling-lucky-tickets-on-sale-400-each/ +title: "PowerShell Summit: 'I'm Feeling Lucky' Tickets on Sale, $400 Each" +authors: + - Don Jones +date: "2012-09-09T22:55:29+00:00" +categories: + - Announcements + - Events + - News + - PowerShell for Admins +aliases: + - /2012/09/powershell-summit-im-feeling-lucky-tickets-on-sale-400-each/ +--- + +That's right, for just $400 you can guarantee yourself a seat at the PowerShell Summit North America 2013, to be held at Microsoft's campus in Redmond, WA. Just 10 tickets will be made available at this low-low-low price, which is $150 off the normal registration rate. +Why so low? Why are they called "I'm Feeling Lucky" tickets? Because while we're committed to an April 2013 date, we haven't actually locked in dates with Microsoft, yet. So to purchase these, you've got to be feeling flexible... or lucky! +But it's not a marriage. The tickets are completely refundable, up to 30 days prior to the event. So if we manage to lock in the three dates _you can't attend,_ we'll give you your money back. You can also transfer the ticket to someone else, at any time (although they'll be paying you directly for the ticket, and we won't get involved in that transaction). +Once these sell out, or we lock in our dates, we'll commence the Early Bird period, with a rate of $475 and just 30 tickets available. That rate will be good through the end of December, unless we sell out. Full rate of $550 kicks in after that, when we'll sell the remaining tickets to fill our roughly 100-person venue. +Thinking about presenting? Start [submitting topics in the Forums][1]! You can get all the other juicy details on the [Summit's dedicated site][2], and catch the [Summit's Twitter feed][3] for ongoing announcements. + + [1]: https://powershell.org/discuss/viewforum.php?f=21 + [2]: http://powershellsummit.org + [3]: http://twitter.com/PSHSummit diff --git a/content/articles/2012/09/powershell-summit-north-america-2013-call-for-content/index.md b/content/articles/2012/09/powershell-summit-north-america-2013-call-for-content/index.md new file mode 100644 index 000000000..d339314f1 --- /dev/null +++ b/content/articles/2012/09/powershell-summit-north-america-2013-call-for-content/index.md @@ -0,0 +1,214 @@ +--- +url: /articles/2012-09-13-powershell-summit-north-america-2013-call-for-content/ +title: PowerShell Summit North America 2013 Call for Content +authors: + - Kirk Munro +date: "2012-09-13T18:04:53+00:00" +aliases: + - /2012/09/powershell-summit-north-america-2013-call-for-content/ +--- + +In case you haven"™t heard already, there is a great opportunity to learn a lot more about PowerShell coming up next year.  It"™s the PowerShell Summit North America 2013 conference, and it is held on Microsoft campus in Redmond, WA from April 22 to 24, 2013.  This conference is run by the PowerShell.org community, and it will present a ton of deep technical content on anything to do with PowerShell.  What content will be covered, you ask?  Well, that"™s up to you. + +We are now accepting content proposals from anyone who wants to present at this conference.  All you need to do to submit your session proposals is to add a new topic to the [Session Submissions forum on PowerShell.org][1] for each session you want to present. + +#### Who can present? + +Anyone who has something to share with other PowerShell experts and enthusiasts that will help them learn more about PowerShell can propose a topic they would like to present at this conference.  There will be a survey shared with the community that allows them to vote for the sessions they want to see, so ultimately the community will decide who can present at this conference.  Note that when reviewing the community results, the conference organizers reserve the right to make some modifications to the sessions that are selected to balance the topics that are discussed and to be able to better accommodate speakers who are offering to present multiple sessions. + +#### What topics will be discussed? + +There will be around 100 PowerShell experts and enthusiasts at this conference, including some PowerShell MVPs, some non-PowerShell MVPs, and some members of the PowerShell team. + +At a conference like this they will be looking for advanced sessions that show them deep technical content on various aspects of PowerShell as well as real-world practical applications of PowerShell.  They"™ll likely want to learn more about workflow, remoting, CIM, and many other technologies used by PowerShell.  They"™ll also likely want to learn about how PowerShell is used in practice with PowerShell extensions like PowerCLI to manage vSphere deployments at Scale, or how PowerShell is being used with multiple technologies (SharePoint, System Center Orchestrator, Exchange, NetApp, Active Directory, etc.) to deal with the real-world management challenges that exist in enterprise organizations.  These are just some examples of the topics that might be discussed in sessions at this conference.  It is important to note that no presentations will include any NDA information.  As mentioned, topics will be voted on by the community and then those results will be reviewed by conference organizers to come up with the final list of topics that will be presented at the conference. + +Please keep in mind that there will be two tracks for this event: one will have the content with the deepest technical depth, and another will have real world and more intermediate to advanced level content.  With two tracks, you really shouldn"™t be shy about submitting sessions if you think you might have something to add.  Chances are, if you"™ve been using PowerShell for a while and if you continue to use it very regularly, you probably have knowledge and experience that you can share with others.  Don"™t worry about which track your session will ultimately fall in.  The conference organizers will figure those details out as part of their agenda planning. + +#### + +#### Where will the conference be held? + +The conference will be held on Microsoft campus in Redmond in buildings 40 and 41 from April 22 to 24th, 2013. There may be additional activities surrounding the conference, but the core sessions will be April 22, 23 and 24. + +#### When can I submit a proposal? + +You can submit a proposal now.  Simply post your proposal as a new topic on the [Session Submissions forum on PowerShell.org][1] for any sessions that you want to present.  Session proposals will be accepted on that forum until October 14, 2012 at midnight PST (take note of that date!).  Once that deadline is met, on October 15, 2012 we will publish a list of all proposals with a voting system that will allow community members to vote for their favorite sessions.  Votes will be accepted over a 2 week period, and the week of October 29th the conference organizers will review the votes and sessions and put together the list of accepted sessions, contact speakers for confirmation, etc. + +We strongly encourage you to submit multiple session proposals so that you increase your chances of having a session accepted.  Note that you can submit a proposal even if a related session has already been proposed by someone else.  In fact, if you want to present multiple sessions, I would encourage you to submit the sessions that you want to present, without holding back if a similar session is already proposed.  There are advantages to presenting multiple sessions (see below), and the community will indicate what they want to see in the end anyway. + +If you will be attending the conference whether you have a session proposal accepted or not, you should buy your conference ticket as soon as possible to take advantage of the early bird pricing.  If you can only attend this conference if you have enough proposals accepted to cover the bulk of your expenses (see below for details on the benefits of being a presenter), you should submit your sessions now regardless and once the session review process is completed, conference organizers will contact you to make sure you are able to commit to attending and presenting at the conference.  You can also fire me a note if you want to make me aware ahead of time that you can only attend if you have at least 3 sessions accepted, either using my [contact me][2] form or via email (on gmail or hotmail, either works, using the nickname I use on this blog as the user id). + +#### Why should I submit a proposal? + +Personally speaking, I find presenting information that has been learned through hard work to be very rewarding.  I also find receiving information that others have learned through their hard work to be very rewarding as well.  It"™s all about the community participation and sharing of knowledge.  Aside from being proud of your work and sharing it with others, there are more tangible benefits for speakers with accepted sessions as well. + +For every session proposal that is accepted (voted high enough by the community and accepted in the final review by the conference organizers), speakers will receive a $300 travel stipend as well as up to $200 to offset 1/3 of their registration cost.  That means someone presenting 3 sessions will receive $900 that they can use towards their travel expenses and a full refund of their registration fee.  This should make it much clearer why it is advantageous to submit multiple session proposals. + +One last reason why you should submit a proposal: the value of the conversation that comes with an event like this is extremely high.  You"™ll be able to talk to others about your challenges and ideas, learn from their efforts, perhaps find people you want to work with on various community projects, etc.  It"™s the networking alone that drives me to attend events like this. + +#### How do I write a proposal? + +Each proposal you enter must include three pieces of information: + + * a title for the session you are proposing, + * your full name, and + * a 1-2 paragraph description of what the session will contain. + +You must create one topic per proposal.  Don"™t put all of your sessions on one topic, and don"™t reply to current topics when creating proposals, please. + +In general when planning your proposal, focus on content that will come with more demos, and less on slide-heavy content.  This is a conference for experts and enthusiasts who are looking for deep technical content on PowerShell-related topics in interactive sessions.  With this crowd, rich, demo-focused sessions will be preferred over slide-heavy sessions. + +You should also review some of the proposals that are already submitted as examples.  Keep in mind that the sessions are 35 minutes long with 10 minutes of Q&A at the end (although questions often come up during the sessions at an event like this).  35 minutes may seem like a lot of time, but it goes by quickly, especially when doing demos. + +#### Summary + +That"™s a lot of information, so here is a summary of the essential points along with links to additional information. + + + + + Conference Title + + + + PowerShell Summit North America 2013 + + + + + + Conference Website + + + + [http://powershellsummit.com](http://powershellsummit.com/) + + + + + + Conference Dates + + + + April 22-24, 2013* + + + + + + Location + + + + Microsoft Campus, Buildings 40 and 41, Redmond, WA + + + + + + Session Proposal Forum + + + + [https://powershell.org/discuss/viewforum.php?f=22](https://powershell.org/discuss/viewforum.php?f=22) + + + + + + Session Proposal Deadline + + + + October 14, 2012 at midnight PST + + + + + + Session Voting Period + + + + October 15, 2012 to October 28, 2012 + + + + + + Final Tally and Processing + + + + The week of October 29, 2012 + + + + + + Sessions Announced + + + + As soon as possible after October 29th, once the final tally and processing is done and accepted presenters have confirmed their sessions + + + + + + Forum for Conference- and Session-Related Questions + + + + [https://powershell.org/discuss/viewforum.php?f=20](https://powershell.org/discuss/viewforum.php?f=20) + + + + + + Speakers Page + + + + [https://powershell.org/summit/speak.php](https://powershell.org/summit/speak.php) + + + + + + Conference FAQ + + + + [https://powershell.org/summit/faq.php](https://powershell.org/summit/faq.php) + + + + + + Best location to ask PowerShell questions and to help the community with answers + + + + [https://powershell.org](https://powershell.org/) + + + + +* With a high probability for a short, half-day event adjacent to this. + +I look forward to reading your session proposals! + +Thanks, + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerShell.org](http://technorati.com/tags/PowerShell.org),[PowerShell Summit](http://technorati.com/tags/PowerShell+Summit) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/812/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/812/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=812&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: https://powershell.org/discuss/viewforum.php?f=22 + [2]: http://poshoholic.com/contact-me/ diff --git a/content/articles/2012/09/pscx-2-1-and-3-0-release-candidates-posted/index.md b/content/articles/2012/09/pscx-2-1-and-3-0-release-candidates-posted/index.md new file mode 100644 index 000000000..2e97c2931 --- /dev/null +++ b/content/articles/2012/09/pscx-2-1-and-3-0-release-candidates-posted/index.md @@ -0,0 +1,58 @@ +--- +url: /articles/2012-09-15-pscx-2-1-and-3-0-release-candidates-posted/ +title: PSCX 2.1 and 3.0 Release Candidates Posted +authors: + - Keith Hill +date: "2012-09-16T02:45:47+00:00" +aliases: + - /2012/09/pscx-2-1-and-3-0-release-candidates-posted/ +--- + +Oisin and I have been busy prepping the PowerShell Community Extensions to support Windows PowerShell 3.0. With this release, we are providing two packages. There is a [Pscx-2.1.0-RC.zip][1] that is xcopy deployable just like PSCX 2.0. Just remember to unblock the ZIP before extracting it otherwise you"™ll get errors when you try to import the module. Pscx 2.1 can be used to target both Windows PowerShell 2.0 and 3.0. In order to do this, Pscx 2.1 is still compiled against .NET 2.0 and it can"™t take advantage of any Windows PowerShell 3.0 specific features. + +The second package is [Pscx-3.0.0-RC.msi][2]. This is a traditional Windows installer package. The benefit of using an MSI is that the user doesn"™t have to worry about unblocking the file before installing it. The MSI file is also Authenticode signed with an extended validation code signing certificate so it should make it past Windows 8 SmartScreen. I"™d like to extend a big thanks to [DigiCert][3] for graciously donating the EV code signing certificate to us. + +INSTALLATION NOTE: the WiX-based installer modifies the PSModulePath environment variable but the modification doesn"™t always seem to be in effect after installation. If Import-Module Pscx "“RequiredVersion 3.0.0.0 fails to load PSCX, import the module by path (C:\Program Files (x86)\PowerShell Community Extensions\Pscx3\Pscx\Pscx.psd1) until you get a chance to reboot. After that, you shouldn"™t have to specify the path. + +Another aspect of Pscx 3.0 is that it is compiled against .NET 4.0 and takes advantage of some features specific to Windows PowerShell 3.0. Over time, we will focus our new feature efforts on the Pscx 3.0 branch. + +### PSCX 2.1 and 3.0 Side-by-Side Support + +With this release, you can install Pscx 2.1 and 3.0 side-by-side. Note however that if you xcopy install Pscx 2.1 into your user"™s Modules directory, PowerShell will find that version of Pscx before the 3.0 version. In order to ensure you load a specific version of Pscx, use the "“RequiredVersion parameter on Import-Module e.g. + + +`Import-Module Pscx -RequiredVersion 3.0.0.0 +`### Support for AllSigned Execution Policy + +Each of the two packages above (2.1 and 3.0) supported execution in an AllSigned environment. All of the script files (\*.ps1, \*.psm1 and *.ps1xml) have been signed. Of course, this means you can"™t modify these scripts (i.e. to fix bugs) and still run them AllSigned. + +### New Features + +There are not a lot of new features in this release but there are a few handy additions including: + + * Get-Parameter "“ thanks to Jason Archer for contributing this great way to visual a command"™s parameter information. + * Import-VisualStudioVars "“ for developers who like to spend their time in PowerShell instead of cmd.exe, this function takes care of importing the build environment for the specified version of Visual Studio. The 2008, 2010 and 2012 versions of Visual Studio are supported. + * Start-PowerShell "“ a wrapper for PowerShell.exe that utilizes the PowerShell parameter parsing engine to make invocation of various flavors of PowerShell (from PowerShell obviously) easier. While testing the AllSigned support I used this command a lot: +`Start-PowerShell -NoProfile -ExecutionPolicy AllSigned -Version 2 +`* Get-ExecutionTime "“ since PowerShell 2.0, the HistoryInfo object for a command has included both the StartExecutionTime and the EndExecutionTime. This command makes it easy to see the total execution time for any command e.g.: + + +`C:\PS> Get-ExecutionTime + Id ExecutionTime HistoryInfo + -- ------------- ----------- + 1 00:00:02.9919258 Get-ChildItem C:\Windows\System32 + 2 00:00:00.2650339 Get-Process + 3 00:00:00.2499424 Get-Service +`### Bug Fixes + +Oisin spent a good deal of time fixing issues in the Read-Archive and Expand-Archive cmdlets. We updated the version of 7z that we are using (to 9.x) and modified the cmdlets to use [SevenZipSharp][4]. I also fixed a number of bugs in Invoke-Elevated (alias su), Set-Writable, Edit-File and type accelerators breaking on PowerShell 3.0. + +As you use these release candidates please report any issues to the [Pscx CodePlex project][5]. Thanks for supporting Pscx! + +[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/271/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/271/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=271&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) + + [1]: http://pscx.codeplex.com/releases/view/93945 + [2]: http://pscx.codeplex.com/releases/view/94637 + [3]: http://www.digicert.com/ + [4]: http://sevenzipsharp.codeplex.com/ + [5]: http://pscx.codeplex.com/workitem/list/basic diff --git a/content/articles/2012/10/10042012-meeting-summary-and-presentation-materials/index.md b/content/articles/2012/10/10042012-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..4d6606734 --- /dev/null +++ b/content/articles/2012/10/10042012-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,28 @@ +--- +url: /articles/2012-10-10-10042012-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 10/04/2012 meeting summary and presentation materials +authors: + - John Mello +date: "2012-10-10T13:08:07+00:00" +aliases: + - /2012/10/10042012-meeting-summary-and-presentation-materials/ +--- + +Our inaugural meeting was as follows: + + 1. 10 minute demo from [MVP Systems][1] about how [JAMS Scheduler works with PowerShell][2] + 2. Presentation on what Remoting is and how it works + 1. See the [zip file][3] in the post for the PowerPoint with speaking notes + 3. Pizza break! + 4. Live remoting demo + 1. See the zip file in the post for a text file of the PowerShell demo + +On the topic of deploying a GPO to set your script execution policy, [Bhargav Shukla][4] from the [Philadelphia Exchange User Group][5] brought to our attention [KB2467565][6] which address the following issue:   "You cannot install an update rollup for Exchange Server 2010 with a deployed GPO that defines a PowerShell execution policy for the server to be updated". So if you do set the script execution policy through group policy don"™t apply it to your Exchange 2010 servers! +Meeting materials zip file: [PhillyPosh_2012-1004][3] + + [1]: http://www.jamsscheduler.com/ + [2]: http://www.jamsscheduler.com/PowerShell.aspx + [3]: https://powershell.org/wp-content/uploads/2012/10/PhillyPosh_2012-1004.zip + [4]: http://www.bhargavs.com/ + [5]: http://www.ehlougphila.com/ + [6]: http://support.microsoft.com/kb/2467565 diff --git a/content/articles/2012/10/_index.md b/content/articles/2012/10/_index.md new file mode 100644 index 000000000..65eee0415 --- /dev/null +++ b/content/articles/2012/10/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from October 2012" +description: "PowerShell.org Articles published in October 2012." +--- diff --git a/content/articles/2012/10/free-ebook-creating-html-reports-in-powershell/index.md b/content/articles/2012/10/free-ebook-creating-html-reports-in-powershell/index.md new file mode 100644 index 000000000..5876ec134 --- /dev/null +++ b/content/articles/2012/10/free-ebook-creating-html-reports-in-powershell/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2012-10-24-free-ebook-creating-html-reports-in-powershell/ +title: "Free eBook: Creating HTML Reports in PowerShell" +authors: + - Don Jones +date: "2012-10-24T19:52:35+00:00" +categories: + - PowerShell for Admins +aliases: + - /2012/10/free-ebook-creating-html-reports-in-powershell/ +--- + +I've written a new, short, totally free eBook that explains how to build multi-sectional HTML reports in Windows PowerShell. This is something I'll be building on in the future, as I have time, to add additional formatting capabilities, and even interactivity. But what's there now should be a great start! Check it out and let me know what you think. +It's on the free ebook list at https://powershell.org/ebooks. diff --git a/content/articles/2012/10/ideras-powershell-plus-editor-now-free-for-all/index.md b/content/articles/2012/10/ideras-powershell-plus-editor-now-free-for-all/index.md new file mode 100644 index 000000000..8f670331e --- /dev/null +++ b/content/articles/2012/10/ideras-powershell-plus-editor-now-free-for-all/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2012-10-28-ideras-powershell-plus-editor-now-free-for-all/ +title: "Idera's PowerShell Plus Editor Now Free for All" +authors: + - Don Jones +date: "2012-10-28T16:30:32+00:00" +categories: + - PowerShell for Admins +aliases: + - /2012/10/ideras-powershell-plus-editor-now-free-for-all/ +--- + +Idera's gone and made PowerShell Plus free. Given that it's been updated to support PowerShell v3, this will probably become many folks' go-to editor (PowerGUI, the former champ, is more or less out of development and hasn't been updated for v3). +Idera says: + +> "Idera is dedicated to providing products that help our customers and community members be successful in their jobs," said Rick Pleczko, CEO of Idera. "PowerShell Plus is a proven and essential productivity tool so we wanted to get it into the hands of IT professionals everywhere. It also complements our sponsorship of the PowerShell.com community, which features forums and resources for novice to advanced PowerShell users." + +Idera runs [PowerShell.com][1], which features a bevy of Q&A forums and daily "PowerTips." Regarding PowerShell Plus: + +> PowerShell Plus features a powerful interactive console, an advanced script editor and debugger, and a comprehensive interactive learning center integrated into a single product. It helps administrators and developers quickly learn and master PowerShell, while also dramatically increasing the productivity of expert users. The new version, PowerShell Plus 4.6, has been certified on Windows 8. It includes revised and expanded script libraries for SQL Server and SharePoint 2010. Additionally, the System Explorer now features SQL Server and Share Point 2010 plug-ins that help manage SQL Server instances and SharePoint 2010 farms. + +You can read the entire press release, and access the download page, on [Idera's Web site][2]. + + [1]: http://powershell.com + [2]: http://www.idera.com/News/?NewsCategory=0&ID=482 diff --git a/content/articles/2012/10/if-you-havent-watched-the-powerscripting-podcast/index.md b/content/articles/2012/10/if-you-havent-watched-the-powerscripting-podcast/index.md new file mode 100644 index 000000000..3af52d57b --- /dev/null +++ b/content/articles/2012/10/if-you-havent-watched-the-powerscripting-podcast/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2012-10-26-if-you-havent-watched-the-powerscripting-podcast/ +title: "If you haven't *watched* the PowerScripting Podcast…" +authors: + - Don Jones +date: "2012-10-26T15:11:46+00:00" +categories: + - PowerShell for Admins +aliases: + - /2012/10/if-you-havent-watched-the-powerscripting-podcast/ +--- + +For more than 200 weeks now (there's an episode a week), Jon Walz and Hal Rottenberg have been bringing us the [PowerScripting Podcast][1]. It's become an almost official "voice" of and for the PowerShell community. In it, the two don't focus much on technical tips or anything like that. Instead, the highlight is a weekly interview with a mover and shaker in the PowerShell community. For me, they put a _face_ on the community. One week you're talking to the inventor of PowerShell, the next to a local user group leader who's helping educate folks in his area, and the next an ISV who's building PowerShell into their products. It's Larry King Does PowerShell. +If you've listened to the podcast, you know what I'm talking about here. But, if you've _only_ listened to the podcast, you're missing half the show. Maybe more. You see, on most Thursday nights at 9:30pm (US Eastern), Hal and Jon record the show live. With webcams. And a chat room. +[![](https://powershell.org/wp-content/uploads/2012/10/ColloquyScreenSnapz001-300x117.png) + (click for larger) + ](https://powershell.org/wp-content/uploads/2012/10/ColloquyScreenSnapz001.png) +This is where the podcast goes from being a hobby and into being a truly vital piece of community connective tissue. Pop into the chatroom and regulars, like the Scripting Wife, offer a "hello!" It's a weekly clubhouse of sorts, where the chatroom conversations parallel the webcast, but also diverge onto tangents. It's where you can offer up questions for the current speaker. It's where you play drinking games (anytime Snover says "ecosystem," drink!). And, when I'm the featured speaker, as I'm privileged to be a couple of times a year, it's where you egg me on in my rant-of-the-season. +[![](https://powershell.org/wp-content/uploads/2012/10/ColloquyScreenSnapz002-300x117.png)](https://powershell.org/wp-content/uploads/2012/10/ColloquyScreenSnapz002.png) +I'm going to share a little secret that most software developers already know: _Community counts. _It isn't just a word, or some marketing slogan. The ability to make connections with people in a similar boat - via Twitter, e-mail, [forums][2], or a podcast recording - is important. For many IT pros, IT per se isn't our personal passion. It's a job. And so it's easy, at the end of the workday, to go home and do our _real_ passion - be with family, play Xbox, or whatever. So IT pro communities have traditionally never been as robust as developer communities. But _make the effort. _Community is how you'll meet the guy (or gal) who has the solution to your next problem, and will share it free for the asking. Community is where your next job will probably come from. Community is, in fact, your _meta-career, _spanning employers and projects and giving you a foundation to really succeed in this business. The colleagues you meet through community will become, over time, more important to your personal success than your direct coworkers. +In fact, PowerShell.org itself wouldn't exist without the strong community connections Kirk Munro and I have made over the years. +Giving up an evening with the family to go to a local user group meeting can be tough, if there's even one in your area. You should do it anyway. But if you can't, Hal and Jon have created a sort of virtual user group where you can connect with _people, _not just learn about technology. Trust me, the first time someone like Jeffrey Snover recognized me in-person and said "hi," I got a little thrill - and it was because of opportunities like the PowerScripting Podcast that he got to know me. Much of my success in the IT field has some through community and connectedness, and I heartily recommend it to anyone. +Hope to see you in the chatroom! + + [1]: http://powerscripting.wordpress.com + [2]: https://powershell.org/discuss diff --git a/content/articles/2012/10/powershell-v3s-new-simplified-syntax/index.md b/content/articles/2012/10/powershell-v3s-new-simplified-syntax/index.md new file mode 100644 index 000000000..8ceaadfd4 --- /dev/null +++ b/content/articles/2012/10/powershell-v3s-new-simplified-syntax/index.md @@ -0,0 +1,71 @@ +--- +url: /articles/2012-10-26-powershell-v3s-new-simplified-syntax/ +title: "PowerShell v3's New Simplified Syntax" +authors: + - Don Jones +date: "2012-10-26T18:02:31+00:00" +categories: + - PowerShell for Admins +aliases: + - /2012/10/powershell-v3s-new-simplified-syntax/ +--- + +One of the ballyhooed new features in PowerShell v3 is the new "simplified" syntax for Where-Object and ForEach-Object. I'm going to focus on the former for this article. In essence, instead of doing this: + + +`Get-Service | Where-Object { $_.Status -eq 'Running' } +`You can now do this also: + + +`Get-Service | Where Status -eq Running +`Last week, I had the opportunity to include this new syntax in a class I was teaching - mainly to beginners - and I came away with mixed feelings. Whereas once I'd felt awesome about the new syntax... now I'm conflicted. + +## A Caveat + +I want to point out up front that my upcoming comments are confined to a pretty tight scenario: Teaching newcomers to PowerShell. I'm not sure if these feelings apply universally. I'm also not trying to beat up on Microsoft's PowerShell team with this article; instead, I'm trying to provide a discussion. I'm also hopeful that this article can help clear up some confusion for anyone who experiences the same confusion my students did. + +## Simplified or Complexified? + +First, understand that this new syntax **is not** a "simplified" syntax; it's an _additional_ syntax. The old syntax hasn't been cleaned up in any way, and it hasn't gone away; it's been joined by a new compatriot. This presents a teaching challenge: Now, rather than teaching _one_ syntax and helping students get through it, I have to teach _two. _After all, they're going to encounter both "in the wild," and there are six years of the "old" syntax out there in blogs and examples and whatnot. So the addition of a second syntax doesn't lower the learning barrier; it _raises_ it. That's because, without introducing a breaking change in the product, _you can't fix syntax once it's out there._ + +## Limitations + +I also have to continue teaching the "original" syntax because the "simplified" syntax is limited to just one expression: this equals that (or not equals, or whatever). You can't, in other words, do this: + + +`Get-WmiObject Win32_Service | Where State -ne 'Running' -and StartMode -eq 'Auto' +`Only the "old" syntax supports expressions with more than one operator. And don't think my students didn't try the above - they did, despite explicit explanations up front that it wouldn't work. The problem is that, especially in a class, students are getting so much thrown at them that their brains instinctively attempt to simplify. "Ok, if there's two syntaxes, and one has ugly { $_ } garbage in it, I'll focus on the other one." Problem is, that other one won't get you through the whole day. +In fact, I'm seriously considering, for my next class, _not_ teaching the "simplified" syntax right away. I'll stick with the old one, because it's _one_ way I can teach that will _always_ work. Yeah, the $_ is ugly - but you have to know that $_ thing in so many other places, that I've gotta get students past it anyway. I'll show them the "simplified" syntax, for sure, but probably later in class after they've mastered the old one. +**Help Files** +My big pain is that the "simplified" syntax has made a wreck of the help file for Where-Object. It used to be a simple syntax section: One parameter set, with really only one parameter: -FilterScript. Now it's an unholy mess. +Here's why: the new syntax is really a hack, which takes advantage of the fact that both PowerShell operators (like -eq) and parameters (like -property) look alike. They both start with a dash. The new syntax: + + +`Get-Service | Where Status -eq Running +` Really means this: + + + +`Get-Service | Where -Property Status -eq -Value Running +`You've got three parameters on Where-Object: -Property, -Value, and -eq, with -eq being a switch parameter that accepts no value. That means this is equally valid: + + + +`Get-Service | Where -eq -Value Running -Property Status +`Since named parameters can come in any order. The upshot of this is that the help file for Where-Object now has to list a bazillion parameter sets, each with a different "operator" parameter: + + + [![](https://powershell.org/wp-content/uploads/2012/10/VMware-FusionScreenSnapz001-300x258.png) + (](https://powershell.org/wp-content/uploads/2012/10/VMware-FusionScreenSnapz001.png)Click for larger) + + + Barf. The problem is that the help file is *syntactically* correct, but it is *semantically* wrong, meaning it doesn't accurately reflect the *meaning* of the command. I'm whined about this to a friend on the PowerShell help team, and they - quite accurately - noted that the help file needed to be syntactically accurate. They also suggested that beginners should be focusing on the excellent Description section of the help file, which better explains the meaning. Okay... but the Syntax section takes up two screenfuls, and appears before the Description. People tend to read top-down. I caught one of my students trying to do this:`Get-Service | Where $_ -eq Running -Property Status[/property] + + + Before I said, "Ok, enough, no more playing with the new syntax, everyone back into the {curly bracket} pool." + + +## Inconclusion + +That's an accurate heading - I didn't mean "in conclusion." I'm actually knotted up about this. I totally get, and appreciate, what the team was trying to do with this syntax. Someone accustomed to PowerShell can probably reel off the new syntax with no issues, and love the fact that they have to type a whole five fewer characters. But "simplified" suggests that the feature was meant to help beginners - and I'm not sure it does. It's like giving a kid training wheels on their bike: Sooner or later, those have to come off, and they haven't necessarily prepared you for the big-boy world. +What're your thoughts? I'm genuinely interested, especially if you have some experience with _newcomers_ encountering the new syntax. There's no argument that it's easier _to begin with_ - it just doesn't take you very far before you have to "grow up" to the "real" syntax anyway, so I'm not sure it's a "win" from an educational perspective. diff --git a/content/articles/2012/10/secrets-of-powershell-remoting-updated-help-check-the-beta/index.md b/content/articles/2012/10/secrets-of-powershell-remoting-updated-help-check-the-beta/index.md new file mode 100644 index 000000000..d1120c6b2 --- /dev/null +++ b/content/articles/2012/10/secrets-of-powershell-remoting-updated-help-check-the-beta/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2012-10-23-secrets-of-powershell-remoting-updated-help-check-the-beta/ +title: "\"Secrets of PowerShell Remoting\" Updated – Help Check the Beta!" +authors: + - Don Jones +date: "2012-10-23T18:35:23+00:00" +categories: + - PowerShell for Admins +aliases: + - /2012/10/secrets-of-powershell-remoting-updated-help-check-the-beta/ +--- + +I've finished updating a new revision of _Secrets of PowerShell Remoting; _you'll find PDF and EPUB versions attached to this post in a ZIP file. Note that these are "check builds," meaning I'm putting these out there in the hopes folks can run through them on their computers and e-readers to let me know if anything looks weird. You can just drop a comment right here if you find anything. +[The book is now live on .] diff --git a/content/articles/2012/10/session-voting-for-the-powershell-summit-north-america-2013/index.md b/content/articles/2012/10/session-voting-for-the-powershell-summit-north-america-2013/index.md new file mode 100644 index 000000000..de7e9df8f --- /dev/null +++ b/content/articles/2012/10/session-voting-for-the-powershell-summit-north-america-2013/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2012-10-15-session-voting-for-the-powershell-summit-north-america-2013/ +title: Session Voting for the PowerShell Summit North America 2013 +authors: + - Don Jones +date: "2012-10-15T16:09:43+00:00" +categories: + - PowerShell for Admins +aliases: + - /2012/10/session-voting-for-the-powershell-summit-north-america-2013/ +--- + +Voting is open! +As you know, the **PowerShell Summit North America 2013** is coming in April 2013, and we're relying on **you** to tell us what sessions you'd like to see there. We've already accepted dozens of proposed sessions, and we're ready for you to vote. +[Go ahead and take the survey now.](http://674004.polldaddy.com/s/powershell-summit-na-2013-session-voting) (opens in a new window/tab) +While voting, you can technically choose as many sessions as you want - but remember that we can't present them all, so try to pick no more than 20 sessions as your "favorites." Also note that the Summit will include additional, to-be-announced sessions presented by Microsoft employees and PowerShell product team members. +You can [read the session proposals' descriptions in our forums](https://powershell.org/discuss/viewforum.php?f=22); we suggest having that open in another window right next to the survey itself. That way, you can read through the abstracts, decide if you like a session, and vote on it in the survey. Sorry for having the information in two places - we're gonna work on something cleaner for 2014 ;). +**You have until midnight October 28th, 2012, to vote. **And if you're asking, "midnight in what time zone," then we suggest you stop procrastinating and vote already!!! diff --git a/content/articles/2012/10/voting-for-the-2013-powershell-summit-sessions-is-now-open-2/index.md b/content/articles/2012/10/voting-for-the-2013-powershell-summit-sessions-is-now-open-2/index.md new file mode 100644 index 000000000..143560f36 --- /dev/null +++ b/content/articles/2012/10/voting-for-the-2013-powershell-summit-sessions-is-now-open-2/index.md @@ -0,0 +1,1422 @@ +--- +url: /articles/2012-10-15-voting-for-the-2013-powershell-summit-sessions-is-now-open-2/ +title: Voting for the 2013 PowerShell Summit sessions is now open! +authors: + - Kirk Munro +date: "2012-10-16T03:29:25+00:00" +aliases: + - /2012/10/voting-for-the-2013-powershell-summit-sessions-is-now-open-2/ +--- + +Voting is now open! + +As of this morning you can vote for the sessions that you want to see at the 2013 PowerShell Summit!  We have 97 session proposals (see below), plus additional content from the PowerShell Team.  Your vote is really important, so please take some time to indicate what you would like to see from a PowerShell-specific conference with deep technical depth. + +Here"™s what you need to do: + +1. **Open** the [voting survey][1] in a new tab or window (this link will automatically open in a new window). + +2. **Review the list of proposed sessions** side by side with the table below.  The table below contains the titles, descriptions, and presenter details for every proposal that is in the survey.  This should save you a ton of time when you"™re trying to identify the sessions that you want to see. + +3. **Pick your top 20 sessions** that you would like to see at this conference.  There will be more than 20 sessions, but if everyone sticks to voting for their top 20 we"™ll get a good distribution in the survey and it will provide a better sample of what everyone wants to see. + +Once you"™ve done that, then just sit back and wait until we announce the official agenda after **voting closes on midnight, October 28, 2012**.  That gives you 2 full weeks to vote for what you would like to see.  Once voting closes, myself and other conference organizers will review the votes, coordinate with speakers, include additional content from the PowerShell team, and build an agenda for the conference.  Building the agenda and confirming with presenters will take a little time, so don"™t expect to see it posted the morning of October 29.![Smile](http://kirkmunro.files.wordpress.com/2012/10/wlemoticon-smile.png?w=595) + +Here are the session proposals that you can choose from: + + + + + Title + + + + Description + + + + + + How VMware does PowerShell + + + + Presented by: Alan Renouf + + + + + Learn the top 5 things VMware does in PowerShell that is different to anything you have seen before, see how a 3rd Party can take the awesome sauce of PowerShell and add their own flare. This session will show you some cool features of VMware's PowerShell snapin (PowerCLI) and show how VMware became the largest PowerShell community outside of Microsoft. This session is relevant to anyone who uses PowerShell as it will show the key features VMware included in their snapin and the benefits these give to system administrators. + + + + Creating a complex and reusable HTML reporting structure + + + + Presented by: Alan Renouf + + + + + In this session I will show you the shortcuts and tricks picked up when creating a complex reporting structure with PowerShell, how a simple HTML output script grew to be a reporting structure which can adapt to give detailed, nicely formatted reports on any application or system that has a PowerShell interface, and even some that don't! + + + + Creating Add-on Tools for PowerShell ISE + + + + Presented by: Kirk Munro + + + + + PowerShell 3 includes a ton of improvements to the integrated scripting editor, PowerShell ISE. As great as PowerShell ISE is in this version, there is still a lot of room for improvement. Fortunately, Microsoft anticipated that they wouldn't be able to do everything, so they extended their support for creating Add-on Tools for PowerShell ISE. + + + + + + In this session, the worlds first self-proclaimed Poshoholic and PowerShell MVP Kirk Munro will provide a soup to nuts demonstration of PowerShell ISE Add-on Tools, showing how you can create everything from simple menu extensions to feature rich windows that respond to ISE events and that are docked right inside of the ISE. + + + + + + Technologies covered in this session include the PowerShell ISE object model, C#, WPF, eventing, Visual Studio 2012, and of course several core PowerShell features. + + + + Workflow Walkthrough + + + + Presented by: Don Jones + + + + + It seems like everyone's interested in v3′s new Workflow feature, so let's do a quick walkthrough of building one from scratch. We'll skip the usual "provisioning" example and go for something a bit more constrained, and perhaps real-world, where workflow's unique features can really be put to solid use. This'll also be an opportunity to discuss what workflow can and can't do, and discuss some of the options and permutations of using it. + + + + Remoting Configuration Deep Dive + + + + Presented by: Don Jones + + + + + What do you do when Enable-PSRemoting isn't enough? Dig deeper. We'll run through all of the major configuration scenarios, including how to use (and not abuse) TrustedHosts, how to set up an HTTPS listener (and use it), how to do non-domain authentication, how to enable CredSSP and configure it to be less than a major security hole, and more. Pretty much every possible Remoting config, we'll cover. With detailed, step-by-step instructions! + + + + Remoting Security Smackdown + + + + Presented by: Don Jones + + + + + You know you want to turn on Remoting. Heck, Win2012 turns it on for you and can't be managed without it! But your "Security Guys" are freaking out, which is odd, because they don't seem to mind RDP. So we'll run through every single aspect of Remoting security: Mutual authentication. Auditing. Authentication. Delegation. Impersonation. Double-hop. Triple-hop. CredSSP. Kerberos. SSL. Everything. You bring the security guys' questions, we'll get you the most accurate answers possible to take back with you. + + + + Delegated Administration via Remoting and GUI + + + + Presented by: Don Jones + + + + + It's an age-old problem: You want to set up some of your users to perform some basic task, but you don't actually want to give them permissions to do it, and you certainly don't want to give them the MMC necessary to do it. Thanks to Remoting and a little WinForms action, that's no problem. We'll walk through how to set up a constrained Remoting endpoint that can run a highly limited set of predefined commands, and that runs them under alternate credentials. Then we'll build a simple GUI app, suitable for end-user consumption, that utilizes the endpoint to accomplish the task. It's the perfect way to build end-user tools, help desk utilities, and more! + + + + Building Self-Service Web Tools with PowerShell + + + + Presented by: Don Jones + + + + + We all want to make our lives easier... and often, that means giving users self-service tools to accomplish specific tasks. Deploying those tools can be a pain in the next, though, unless you can create them as a Web page. After all, a Web server provides a centralized platform. In this session, we'll look at a couple of ways of building self-service Web pages. One, using /n software's tool that lets a .PS1 become a Web page, and another in building a simple ASP.NET page that hosts PowerShell's engine. + + + + Help for Help: A Help Authoring Deep Dive + + + + Presented by: June Blender, Senior Programming Writer, Windows PowerShell Team + + + + + A comprehensive 400-level talk for module authors about authoring techniques for all types of Windows PowerShell Help, including About help and help for all command types, including cmdlets (and the MAML schema), scripts, functions, CIM commands, workflows (script and XAML), providers (including custom cmdlet help), and snippets. What you can and cannot do, and what's worth doing when time and resources are short. We'll cover online help, Updatable Help, and all the gotchas (HelpInfo XML, HelpInfoUri, HelpUri, CHMs), and I'll share the scripts that I use to generate help files and verify the accuracy of parameters, parameter values, parameter attributes, GUIDs, and URIs. + + + + Practical PowerShell Integration from Bare Metal to the Cloud + + + + Presented by: Alan Renouf + + + + + See how PowerShell can be used as the glue of the datacenter, take information from VMware, Cisco and Microsoft, Glue them all together and go from bare metal up to the cloud and beyond. Learn how PowerShell is now expanding to be the language of choice and how Microsoft and third party products can be tied together to create fantastic solutions. + + + + PowerShell for the Security Professional + + + + Presented by: Carlos Perez + + + + + How can PowerShell be leveraged by the security professional doing Incident Response, Penetration Testing (Enumeration and Post-Exploitation) or performing an audit. The presentation will cover how PowerShell can be used to gather volatile information during an incident response, what cmdlets and technologies work best to gather the proper info and alter the least the system state. Use PowerShell to help in the documentation of the integrity of the results gathered. For the Pentester how to use PowerShell to write enumeration tools leveraging .Net and use PowerShell in post-exploitation running PowerShell in Shell,Leveraging Metasploit PowerShell mixing for running scripts to gain further foothold on target systems, escalate privileges and log all keystrokes on a target. + + + + PowerCLI and vSphere API integration + + + + Presented by: Luc Dekens + + + + + The PowerCLI snapin is used to manage and automate your VMware vSphere and vCD environments. One of the strengths of the PowerCLI snapin from day 1 is it's ability to flawlessly integrate with the rich API ecosystem vSphere and vCD offer. A byproduct of this tight API integration is the ability to scale your automation scripts for bigger environments. This session will show how it's done, how you can use it and how easy it is. + + + + PowerCLI and performance reports + + + + Presented by: Luc Dekens + + + + + The VMware vSphere environment provides many performance metrics to see what is going on inside. You can use these metrics for problem solving, performance reports and capacity planning. This session will explain how to tackle the collection and handling of these performance metrics. It will also show all the possibilities you have to present your data in a meaningful way. There will be some math and statistics involved, but that' should be no problem for PowerShell and the average administrator. + + + + PowerCLI automates the lifecycle management of your VM + + + + Presented by: Luc Dekens + + + + + With VMware's PowerCLI snapin it is easy to automate the complete lifecycle management of your VMs. This sessions will show how this is done. With the available cmdlets you can create, configure, administer and remove any VM. Needless to say that the session will discuss the best practices. But it will also show some lesser known tricks to get your VMs in exactly the state you want them to be. And you'll learn how you can produce meaningful reports at every step of the way. In short, "The Automated Life of a VM". + + + + PowerShell and Source Control for the IT Pro + + + + Presented by: Andy Schneider + + + + + Are you ever concerned about updating a script, having it break, and can't remember what you changed. This is source control by an IT Pro for IT Pros. Come check out some best practices and lessons learned on how to incorporate source control as part of writing scripts. Learn how to have your code available via the web and easily accessed on multiple machines. We'll take a look at using GIT to ensure your code is always up to date and you can always get back to where you were if you break something. + + + + PowerShell and Active Directory + + + + Presented by: Andy Schneider + + + + + This session will provide a quick overview of different options to manage AD using PowerShell. It will quickly jump into some of the shortcomings of the MSFT provided Active Directory module and how to work around them, and even "fix" them using proxy functions and the new Default Parameter Set feature in V3. + + + + Disconnected Sessions: How they work. How they'll work for you + + + + Presented by: Paul Higinbotham, Software Development Engineer, Microsoft and June Blender, Senior Programming Writer, Windows PowerShell Team + + + + + An in-depth talk for script authors and IT professionals interested in learning how to disconnect from live remote sessions and reconnect to those sessions later from an arbitrary client machine. What you can and can't do with disconnected remote sessions, how remote sessions can be automatically disconnected because of network problems, how to query remote machines for available sessions you can connect to, and how to use disconnect session options. + + + + + + Paul Higinbotham, the developer who coded the feature, and June Blender, Windows PowerShell programming writer, describe the design and architecture of disconnected sessions and explain how session information is retained and disconnected sessions are reconnected. We will cover the details of several remote session disconnect scenarios using the new and modified cmdlets for this feature and demonstrate how to use them. + + + + PowerCLI: how to run PS scripts inside the VM's guest OS + + + + Presented by: Luc Dekens + + + + + You can use PSRemoting to run PowerShell scripts inside the guest OS of your VM. But what to do when PSRemoting isn't possible or available ? Think for example of VMs in a DMZ or on a pvlan. This session will show some alternatives. Run scripts as part of the guest OS deployment, run scripts through the VMware Tools interface or use an external trigger, via the VMware Tools, to influence PS jobs scheduled inside the guest OS. + + + + CIM sessions + + + + Presented by: Richard Siddaway + + + + + The introduction of the CIM cmdlets and "cmdlets over objects" in PowerShell v3 provide new ways to work with WMI. In addition, they bring a new way to access remote systems ? CIM sessions. Analogous to PowerShell remoting sessions they provide a new flexibility when working with WMI and remote machines. This session will demonstrate: +- How to use CIM sessions against systems running PowerShell v3 +- How to work with legacy installations of PowerShell v2 +- How to use the available CIM session options to configure the session to meet your requirements +- Compare and contrast working with WMI, CIM and WSMAN cmdlets against remote machines to illustrate the strengths and weaknesses of each +- How to mix and match CIM sessions using WSMAN and DCOM. + + + + + + The key takeaways from this session will be: +- The CIM cmdlets provide a new way to access WMI +- WSMAN is required knowledge +- WSMAN and DCOM can both be used with the CIM cmdlets +- CIM sessions are easy to use and very powerful +- No more DCOM problems + + + + PowerShell and the Legacy + + + + Presented by: Sean Kearney + + + + + There is a belief that using PowerShell means rejecting the use of legacy environments like vbScript and Console applications. Some may also believe that just because they have an older system it is not possible to manage it with PowerShell Watch as the most Energized MVP, Sean Kearney takes you into a world of wonder where the old and the new Co-Exist. See possibilities you may not have considered before. + + + + + + Key take-aways: +- Interaction between modern day PowerShell and older apps +- Repurposing older tools as PowerShell cmdlets + + + + Tastes Great! Less Scripting! + + + + Presented by: Sean Kearney + + + + + The fight continues on. the argument between the great Lords above that PowerShell is a scripting Environment vs whether it is a Management console! Watch an Actual ITPro on Stage as he shows how he REALLY uses PowerShell in a day to day environment, from basic management and reporting needs, to building out a script to manage needed tasks Take aways Understanding that learning PowerShell does NOT mean a heavy reschooling. + + + + PowerShell and Hyper-V3 – Flying by the Seat of your Pants + + + + Presented by: Sean Kearney + + + + + Go hardcore. Or in this case FULL SERVER CORE 2012! Learn how you can fully manage a complete clustered Hyper-V core environment in Server 2012 from Creation of the Cluster to management of the Virtual machines including Site replication all without the GUI. + + + + + + Take aways? Be hard core and go CORE! + + + + Highway to PowerShell – The Story behind the Story + + + + Presented by: Sean Kearney + + + + + Ok this isn't Deep Dive and I don't expect anybody to PAY for this but I'm willing to talk about just HOW and WHY I turned into a musical Madman + + + + Authoring PowerShell like a Poshoholic + + + + Presented by: Kirk Munro + + + + + I've been using PowerShell for over 6 years. Blogging about it for over 5 years. Creating and managing products based on PowerShell for about that long as well, and writing a whole lot of scripts during the process. During this time I've come up with a trick or three to make that work easier. Some of these tricks are simple time savers, while others are ground breaking opportunities that just might change the way you write PowerShell. + + + + + + Come and join me in this session to get a bird's eye view at some of the work I've been doing with PowerShell, as I talk about tips, tricks, and best practices while demonstrating some of the extensions I've written specifically to make authoring with PowerShell easier to do. + + + + + + Topics discussed include proxy functions, WMI/CIM, Microsoft Office, DSVs, WiX, merge modules, type accelerators, and more. + + + + Introduction to the Storage Management API + + + + Presented by: Bruce Langworthy, Senior Program Manager, Storage and File Systems + + + + + SMAPI is what exposes the Storage module for Windows PowerShell. This session would be focused on providing some details on what it is, how it works, in which cases 3rd party drivers are required, and how it's surfaced as a PowerShell module. More information: This session is recommended as a background for the "Managing Storage with PowerShell" and "Managing Storage Spaces with PowerShell" sessions. + + + + Managing Storage with PowerShell + + + + Presented by: Bruce Langworthy, Senior Program Manager, Storage and File Systems + + + + + A dive into using the Storage module for Windows PowerShell to manage local storage, Storage Spaces, and array-based storage using PowerShell. More information: The focus of this session will be on the management of Disk, Partition, and Volume objects, with a brief overview of how this applies to Storage Spaces. + + + + Managing Storage Spaces with PowerShell + + + + Presented by: Bruce Langworthy, Senior Program Manager, Storage and File Systems + + + + + This topic will focus specifically on deploying, configuring, and managing Storage Spaces using PowerShell. More information: Will cover deployment of Storage Spaces from beginning to end using PowerShell, and focus on using PowerShell to manage Storage Spaces. The "Introduction to the Storage Management API" session is strongly recommended before attending this session. + + + + Managing the iSCSI Initiator and MPIO using PowerShell + + + + Presented by: Bruce Langworthy, Senior Program Manager, Storage and File Systems + + + + + This topic introduces users to the iSCSI and MPIO modules in Windows PowerShell on Server 2012, and discusses how to configure these features using PowerShell. + + + + The Powers of PowerShell Pipeworks + + + + Presented by: James Brundage + + + + + Ever wanted to make PowerShell easy for others? Or realize that a simple script you have would be a great backbone of a business (if only you could charge for it)? PowerShell Pipeworks is a web platform built in PowerShell that makes is simple to build compelling web applications and software services in a snap. In this session, you will see: – How to use Pipeworks to store your data to the cloud – How to create a monitoring dashboard with Pipeworks – How to build a Facebook application with PowerShell Pipeworks – How to put a price tag on a cmdlet + + + + Networking cmdlets + + + + Presented by: Richard Siddaway + + + + + Windows 8/2012 introduces a large number of cmdlets for working with networks and network configurations. This session will introduce those cmdlets and see how you can get the best out of them in your environment. There are a number of interesting quirks associated with these cmdlets that you need to be aware of and they will be demonstrated in the session. Like so much of the functionality in Windows 8/2012 these cmdlets are based on WMI using the CDXML functionality. This will be briefly explained with a look inside one of the networking modules. These cmdlets are only available on Windows 8/2012 but with a bit of WMI you can duplicate the functionality in your environment. + + + + PowerShell Web Access + + + + Presented by: Richard Siddaway + + + + + PowerShell Web Access is a new feature in Windows Server 2012 that provides a web based PowerShell console. You don't need PowerShell on your client to administer remote machines as long as you have PWA. This session will demonstrate how to configure PWA, its strengths and weaknesses – you might even see PowerShell being accessed from a non-Windows machine! The security implications of PWA will be discussed. PWA will be compared to other ways to access remote machines through PowerShell including PS Remoting and CIM sessions. + + + + Writing your Hyper-V deployment script in 30 minutes + + + + Presented by: Jeff Wouters + + + + + In this session I'll show you just how easy it is to write a simple deployment script for a Hyper-V cluster... in only 30 minutes! + + + + BOFH through PowerShell + + + + Presented by: Jeff Wouters + + + + + Ever wondered how you could annoy your users, managers and even your colleagues with PowerShell? Come to this session and let me show you how you can become a BOFH with PowerShell! + + + + How to avoid the pipeline + + + + Presented by: Jeff Wouters + + + + + The pipeline... although it is a wonderful concept and very powerful it is also slow. Lots of people pipe everything together and although it may work, you may have some time to get some more coffee before your script is done running. Let me show you how you can avoid the pipeline by utilizing the full potential of cmdlets and their parameters... and with logical thinking. + + + + PowerShell one-liners to the max + + + + Presented by: Jeff Wouters + + + + + The readers of my blog know that I simply love one-liners in PowerShell... Over the years I've learned lots of tricks which allow you to put just about anything in a single line of code. Although it's not pretty, it's fun to do and wouldn't it be cool to make a developer cry just by looking at such a one-liner? + + + + My learning experience with PowerShell + + + + Presented by: Jeff Wouters + + + + + This will not be a technical session... Back when PowerShell v1 was introduced the first thing I though was: "I can do a heck of a lot more with VBS!". Then PowerShell v2 came along and I was sold! A lot of people would have bought books to learn it... I did not. Instead I started to play around in the prompt. Only after two years I bought my first PowerShell book. In this session I will share with you both the rise and fall of my learning experience of learning PowerShell from the prompt. + + + + How to sell PowerShell to your customers and colleagues + + + + Presented by: Jeff Wouters + + + + + You:"Let's enable PowerShell Remoting!". Manager:"Why?" You:"So I can manage the entire environment through PowerShell from a single management server?". Manager:"No!" Does this discussion sound familiar? If that's the case, let me share with you the things I've learned which make it easy for you to 'sell' PowerShell to managers from a practical point of view. + + + + PSDD – PowerShell Deduplication + + + + Presented by: Jeff Wouters + + + + + With Windows Server 2012 there comes a new feature named Data Deduplication. How can you configure and manage this through PowerShell? But more importantly, how can you do more with it than the native PowerShell module offers you? This and more will be shown in a very fast-paced session... so faster your seat belts Dorothy 'cause Kansas is going bye-bye! + + + + Unit Testing PowerShell + + + + Presented by: Matt Wrock + + + + + This talk will provide a walk through of Unit Testing PowerShell scripts. The OSS project Pester ([https://github.com/pester/Pester](https://github.com/pester/Pester)) will be used to illustrate popular unit testing patterns such as ArrangeActAssert and Mocking to provide testability to PowerShell. There will be discussion on why and when to use unit testing in PowerShell as well. + + + + Bootstrapping a new machine in an hour with Chocolatey + + + + Presented by: Matt Wrock + + + + + Sick of losing a day's productivity to setting up a new Machine? Do you find it tedious keeping track of your favorite tools, software settings and windows settings? Do you find using VMs for this task to be awkward and fragile? Learn how to use Chocolatey ([http://chocolatey.org](http://chocolatey.org/)) and other PowerShell tricks to bring this entire process into a single script that will run on its own in just about an hour (give or take depending on installs). You can even have several bootstrapping configurations depending on your scenarios. One for work, another light weight one for Remoting on to a new serer and another for personal machines. + + + + Inside PowerShell: Abstract Syntax Tree Manipulation + + + + Presented by: Adam Driscoll + + + + + In this session we will take apart PowerShell. This session will highlight the new abstract syntax tree and node visitor API that is exposed in v3. An instrumentation profiler will be used as an example of how to traverse and manipulate PowerShell scripts from within the engine. + + + + .NET Reverse Engineering with PowerShell + + + + Presented by: Adam Driscoll + + + + + In this session we will look at how to utilize ILSpy to decompile .NET assemblies and quickly access internal aspects of them using PowerShell. We will see how to easily expose private members for access and manipulation within scripts. Adam Driscoll + + + + FIM 2010 DevOps with PowerShell + + + + Presented by: Craig Martin + + + + + Forefront Identity Manager 2010 (FIM) is a complex product that benefits greatly in a DevOps world facilitated by PowerShell. Come learn how PowerShell improves FIM deployments, highlighting the PowerShell lessons learned from a non-PowerShell MVP, and arguably a non-developer. Topics will include: FIM Test Automation with PowerShell FIM Deployment Automation with PowerShell FIM Extensibility with PowerShell FIM Workflow with PowerShell FIM Diagnostics with PowerShell Craig Martin is a FIM MVP with a passion for improving integration and automation quality with PowerShell. + + + + PowerShell as a SQL Reporting Services DataSource + + + + Presented by: Craig Martin + + + + + PowerShell turns out to be an excellent tool for collecting data about just anything. This session shows you how to get objects from PowerShell into SSRS reports quickly and simply, and all without using a data warehouse. This session will explain and demonstrate the use of a CodePlex project (psdpe.codeplex.com) to marry PowerShell and SSRS to provide some of the following benefits: + + + + + + SSRS Report Designers – Produce Reports in a Simple Design Experience using Objects from a PowerShell Pipeline SSRS Data + + + + + + Driven Subscriptions – Automatically distribute custom reports to users with data that pertains only to them + + + + + + SSRS Caching – Cache reports in SSRS for later viewing so that your script does not need to reproduce the data + + + + + + SSRS Data Processing Extensions – use SSRS to report on PowerShell objects (the core of the topic) + + + + Providing APIs Using Management OData IIS Extension + + + + Presented by: Craig Martin + + + + + The API Economy is all the rage, at least when we're not hearing about how cool PowerShell is. The idea is a replacement for ODBC, LDAP, or any other API, and preference by application developers to use OData and RESTful web services. Should we all get busy writing APIs then? Turns out PowerShell users already have, by writing scripts and modules. This new feature in PowerShell exposes the investment in commands to developers that may not care about about PowerShell, but instead demand to consume an API based on OData. Got a command for getting User objects? well now you can share that as an URL such as [http://myServer/User](http://myserver/User) (gets all the user objects) or [http://myServer/User('Craig’](http://myserver/User('Craig&%23038;%238217);)/Manager (gets Craig's manager). The magic here is that the developer is reaping all the rewards of your hard PowerShell work, but that developer never needs to know that the URLs are actually powered by, well PowerShell. This talk will share the experience of an IT Pro with scripting experience, learning how to create APIs using the new Management OData IIS Extension. + + + + Creating Reports with PowerShell that Managers will Read + + + + Presented by: Jeffery Hicks + + + + + We all know there is a wealth of information that you can uncover with PowerShell. Sometimes, getting this into a format that someone can read can be a challenge. In this session I'll explain a number of techniques you can use for creating dazzling reports from PowerShell. From simple text files, to snazzy HTML reports to full-on Microsoft Word documents. + + + + PowerShell and Microsoft Excel: A Love Story + + + + Presented by: Jeffery Hicks + + + + + After PowerShell, Microsoft Excel is probably an IT Pro's most often used management tool. We store data in spreadsheets. We use spreadsheets as sources for our scripts and functions. Or maybe you would like to do these things but don't know where to start. In this session I'll explain how to integrate Excel into your PowerShell experience. From pulling data from simple spreadsheets to creating stunning reports complete with tables, charts and graphs. + + + + PowerShell and Windows Server 2012 Active Directory Tricks + + + + Presented by: Jeffery Hicks + + + + + IT Pro's have been able to manage Active Directory with PowerShell for while. But that was only the beginning. Windows Server 2012 offers a tantalizing array of Active Directory management options. In this session I will offer a number of tips and tricks that take advantage of these new features. + + + + Zip It! Adding Compression to your PowerShell Scripting + + + + Presented by: Jeffery Hicks + + + + + PowerShell is a natural tool for file system management. IT Pros copy, delete and move files all the time. Even though storage is cheap and plentiful these days, wouldn't it be nice to add some compression techniques to your PowerShell scripts and functions? This session will demonstrate a number of ways you can add compression to your file management tasks. From simple file and folder compression to creating complete archives. We'll look at using the shell, 3rd party tools and WMI. + + + + PowerShell v3 ISE Snippets + + + + Presented by: Jeffery Hicks + + + + + Without question the ISE in PowerShell v3 is a vast and welcome improvement over v2. One of the best features, which hasn't gotten much attention, is the use of snippets. These little code gems can make writing a new script or function a breeze and even fun. But you can also add your own snippets. In this session I'll explain how the snippet system works, demonstrate how you can add your own snippets and manage your snippet library, all from the ISE. + + + + Adding a GUI to PowerShell without WinForms + + + + Presented by: Jeffery Hicks + + + + + Graphical PowerShell scripts seem all the rage these days. But most often that means using Windows Forms which can be very tedious to work with. But that is not the only game in town. Depending on your requirements there are a number of techniques you can use to add graphical elements to your PowerShell scripts. This session will explore how to create message boxes, input forms and more, all without a single Windows Form. If you are just getting started with writing PowerShell scripts, you'll find these techniques simple to use, plus there will be plenty of sample code for all! + + + + Building a Quick and Dirty PowerShell Backup System + + + + Presented by: Jeffery Hicks + + + + + It is a safe bet to say that most IT Pros have a backup solution in place for their organization. But sometimes you need something a bit more flexible or for special situations. Perhaps you have a lab or home test environment that needs protection. In this session, I will walk you through how to use PowerShell to set up a quick and dirty backup solution. This isn't necessarily a replacement for a full-fledged backup product, but it just might help fill the gaps. + + + + File & Folder Provisioning with Win8, Win2012 and PowerShell + + + + Presented by: Jeffery Hicks + + + + + If you manage file servers and aren't using PowerShell, you are working much too hard. Or if you are using PowerShell v2 you are still working pretty hard. Fortunately PowerShell v3 along with Windows 8 and Windows Server 2012 offer a much better solution. This session will demonstrate how to provision and manage folders, files and file shares using PowerShell from a Windows 8 client. With a little up-front work, you 'll be able to create provisioning scripts to deploy a new file share in seconds. + + + + Manage DFS the PowerShell Way + + + + Presented by: Jeffery Hicks + + + + + Most of the time, managing a distributed file system (DFS) infrastructure is pretty simple and graphical tools are fine. But all the cool kids will use PowerShell. Windows 8 and Windows Server 2012 offer a better way for managing DFS. From creating new folders to getting a handle on what it looks like now, to troubleshooting access problems, this session will demonstrate how to have it all from a PowerShell prompt. + + + + Write modules, not scripts + + + + Presented by: Ed Wilson, Scripting Guy, Microsoft + + + + + Learn how to get the most from Windows PowerShell by learning a simple five-step method to transform your Windows PowerShell code into a highly reusable module. This presentation is a live demo that begins with a single line of Windows PowerShell code, transforms the code into a function, adds comment based help to the function, and converts it into a module. Next, the installation and discovery of Windows PowerShell modules is covered, as is updating the module and creating a Windows PowerShell module manifest. Ed Wilson + + + + What I learned by grading 2000 PowerShell Scripts in the 2012 Scripting Games + + + + Presented by: Ed Wilson, Scripting Guy, Microsoft + + + + + The 2012 Scripting Games attracted both experienced and novice scripters from more than 100 countries around the world. In grading the 2000 submitted scripts, I noticed a common theme emerged. Some of the things that were consistently confused by both beginners and advanced scripters include the following: failure to return objects from functions, not creating reusable functions, spending too much duplicating capabilities of native PowerShell, using meaningless comments, omission of error handling, and an overreliance on Write-Host. In this session, I will address each of these areas of concern and show both good and bad examples from the games. A thorough discussion of each of these topics rounds out the presentation. This presentation uses live demos to illustrate the techniques that are discussed. Ed Wilson + + + + Use PowerShell to manage the remote Windows 8 workstation + + + + Presented by: Ed Wilson, Scripting Guy, Microsoft + + + + + There are three different ways to manage a remote Windows 8 workstation. The first is to use WMI remoting, the second is to use the computername cmdlets and the third is to use WinRm and Windows PowerShell native remoting. Each approach has advantages and disadvantages for the network administrator. In this session, I will examine each approach, and provide a checklist of criteria to aid the enterprise network administrator in choosing the appropriate technology for a variety of real world scenarios. This presentation combines live demos and interactive discussion to heighten learning. + + + + Use PowerShell to troubleshoot the reliability issues + + + + Presented by: Ed Wilson, Scripting Guy, Microsoft + + + + + Using the reliability provider on Windows 8 workstation or on a Windows Server 2012 machine provides a plethora of information about the health of your system. Unfortunately, the reliability provider is not enabled by default on Windows Server 2012, and attempts to enable it do not always work. In this session, I discuss the issues surrounding the reliability provider, illustrate the type of information available, and hint at how to incorporate its use into a normal monitoring program. Live demos using easily created Windows PowerShell scripts round out the discussion. + + + + PoshMon: PowerShell does performance counters + + + + Presented by: Ed Wilson, Scripting Guy, Microsoft + + + + + One of the cool features on Windows PowerShell 3.0 is easy consumption of WMI performance counters into Windows PowerShell. In the past, leveraging these performance counters meant writing long lines of cryptic code, calling refresher objects, and dealing with weird timestamp issues. But no more! Using a simple cmdlet, Windows PowerShell throws open the door to the treasure trove of performance counter information. But where does the oversubscribed IT pro begin? A question on my Windows NT 3.51 MCSE exam stated there are four areas for performance monitoring: disk, memory, network, and CPU. These four resources have not changed much, regardless of the application these basic areas of investigation still ring true. In this session, I talk about discovering performance counters, using performance counters, and storing information gathered from performance counters. The talk will be strengthened by live demos at each stage of the presentation. + + + + Why IT Pros must learn Windows PowerShell Now + + + + Presented by: Ed Wilson, Scripting Guy, Microsoft + + + + + "IT Pros don"™t script." I have heard this mantra for more than a decade – ever since I wrote my best selling Windows Scripting Self-Paced Learning Guide for Microsoft Press. But Windows PowerShell is more than just a new scripting language – in fact, some PowerShell MVPs have stated that Windows PowerShell is not a scripting language at all. Also, and more to the point, Windows PowerShell is not even all that new, with Windows 8, Windows PowerShell enters the 3rd version – it is therefore established technology. Simply put, Windows PowerShell is the future automation story in the Microsoft world, but it is also the present, and the IT Pro who learns how to use this tool will immediately become a more productive, and consequently more valuable employee. In this session I will discuss the extent to which Windows PowerShell permeates the Microsoft eco system, and offer real world scenarios that illustrate both the power, and the simplicity of this management tool. + + + + CDXML + + + + Presented by: Richard Siddaway + + + + + Windows 2012 brings 2500 cmdlets – over 60% of them are CDXML. That's a WMI class wrapped in XML and published as a module. In this session you will discover how this technology works and more importantly how to easily create your own cmdlets to simplify the use of WMI + + + + New Active Directory PowerShell cmdlets + + + + Presented by: Richard Siddaway + + + + + PowerShell for Active Directory gets a major boost in Windows 2012. The AD administrative center now exposes the PowerShell it uses and we get cmdlets for working the topology. In this session you'll learn about AD admin center and how to get the best out if the new AD cmdlets with a look at some tips and tricks for working with AD in general. You'll also discover that the AD provider does a lot more than you think it can. + + + + CIM + + + + Presented by: Richard Siddaway + + + + + WMI is dead! Long live CIM! PowerShell v3 introduces the CIM cmdlets. Are they a replacement for the WMI cmdlets? Are they easier to use? In this session we'll take them apart and see what makes them tick. A compare and contrast with the WMI cmdlets will show you when to use one or the other and how to get the best out of both. + + + + Scheduled tasks + + + + Presented by: Richard Siddaway + + + + + You've used the back ground jobs functionality in PowerShell v2. In PowerShell v3 you get the chance to work with the task scheduler. A set of cmdlets straight out of the PowerShell box for working with scheduled tasks. Automation rises to a new level when you can tell the job to run in the middle of the night and you don't need to be there. Learn how to do this and more in this session + + + + Integrated reports + + + + Presented by: Richard Siddaway + + + + + Managers always want reports. Can't be avoided but the task can be made easier. In this session we'll look at creating some reports based on real world examples: 1. Get the size of your Exchange databases and free disk space. Store the results in SQL Server. Create reports that show current situation and trends over time. 2. All administrators hate documenting their servers. Learn how to create a report that writes itself – literally. Keep your server documentation up to date with no effort on your part. + + + + PowerShell events + + + + Presented by: Richard Siddaway + + + + + The PowerShell event engine enables you to work with .NET; WMI and PowerShell engine events. What are these and how do they work? What can I do with them? Want to stop a process that shouldn't be running? Want to start a process that's stopped? That's what this session will show you with PowerShell events. + + + + WSMAN cmdlets + + + + Presented by: Richard Siddaway + + + + + PowerShell remoting uses the WS-Management protocols as transport between the local and remote machines. This is implemented as the WinRm service. We can utilise the WS-Management layer (WSMAN) directly to access WMI providers. This session opens up one of the least used areas of PowerShell v2. We will see how to use the WSMAN cmdlets: +- Connect-WSMan +- Disconnect-WSMan +- Get-WSManInstance +- Invoke-WSManAction +- New-WSManInstance +- New-WSManSessionOption +- Remove-WSManInstance +- Set-WSManInstance +- Test-WSMan + + + + + + With these we can access a remote machine in a similar manner to using the WMI cmdlets or PowerShell remoting. The advantage over WMI cmdlets is that we don"™t need DCOM. These cmdlets aren"™t straight forward to use but there is an untapped administration opportunity that potentially also enables us to administer remote machines that aren"™t Windows based. The session will be heavy on code and short on slides as this is a subject best demonstrated. + + + + PowerShell jobs + + + + Presented by: Richard Siddaway + + + + + PowerShell normally runs tasks in the fore ground. This ties up the PowerShell prompt and stops you doing other work. We could just open lots of PowerShell prompts but a better way is to use PowerShell jobs. PowerShell jobs run in the background. You can have multiple jobs running simultaneously and still work at the prompt. Better still the jobs? results are saved until you are ready to use them. PowerShell jobs are an under used item in the administrators tool box. This session will show what they can do and how we can make the most of them. Lots of code and minimal slides make the session very interactive. + + + + PowerShell and SQL Server + + + + Presented by: Richard Siddaway + + + + + Storing data in SQL server is not a new idea. Accessing SQL Server using PowerShell opens up this data store for us. This session will show how to use SQL Server to store your data; how you can read, update and if necessary delete the data. Simple PowerShell routines that open a lot of power. + + + + DNS Apocalypse (Notes From The Field) + + + + Presented by: Ashley McGlone, Microsoft PFE + + + + + Hear Microsoft PFE Ashley McGlone explain how he got out of this one. Global 24×7 mission-critical customer had a single text file DNS primary zone hosting all 10 Active Directory domain zones in the forest. Needed to switch to AD-integrated DNS, split out all zones into separate domains, and delegate DNS administration. Then they explained there are no change control maintenance windows, and it had to be done with zero down time. He did it. Come find out how PowerShell saved this customer. + + + + AD Migration Nightmare (Notes From The Field) + + + + Presented by: Ashley McGlone, Microsoft PFE + + + + + I got a panic call from the customer. Half way through the AD domain migration their third party migration tool database crashed and was unrecoverable. They lost all SID history conversion tracking. The vendor doing the migration was unsure how to proceed. Hear Microsoft PFE Ashley McGlone explain how PowerShell saved the customer. Do you know where your SID history is hiding? + + + + Mass File Server ACL Migration (Notes From The Field) + + + + Presented by: Ashley McGlone, Microsoft PFE + + + + + I had a customer who acquires 13 new companies each year. They have more than 35 domains in the forest and another 80 trusts. With over 170,000 instances of SID history in the forest they had no idea where to begin fixing SID history on file shares. They needed a way to migrate ACLs on their file servers, to report on the impact, and to manage it effectively in the future. Where would you begin? Hear Microsoft PFE Ashley McGlone explain how PowerShell saved the customer. + + + + Automated Server Setup with Carbon + + + + Presented by: Aaron Jensen + + + + + Aren't manual setup checklists the greatest? How about virtual machine images that have been cloned for so long nobody knows where they come from? Nobody likes spending hours doing the same things over and over again, or reverse engineering what configuration changes someone made to a server before walking out the door. Come learn about Carbon ([http://get-carbon.org](http://get-carbon.org/)), the DevOps module I created that enables us to spin up dozens of servers in just a few hours. I'll give an overview of all the functionality available in Carbon, then dive deep into some of the things I've learned and discovered during development. + + + + Connecting ERP to AD with PowerShell – A Two-way Street + + + + Presented by: Steve Moss + + + + + When we implemented Jenzabar CX as our college's ERP solution, it became our authoritative data source and the driver for things like Active Directory account creation and maintenance. Initially, we used a series of VBScripts to handle the integration with AD. When I was tasked with fixing and maintaining that code, two things because clear. First, The existing code was virtually unmaintainable. Second, PowerShell made it relatively easy to create a solution that was modular, flexible and easily maintained. I'll look at how we implemented the communication from CX to AD and from AD to CX using /nSoftware's PowerShell Server and ODBC. I'll also look at the way we decomposed the creation and maintenance various types of AD accounts into discrete tasks and used that to create a modular library of functions that allows us to use a building block approach to not only implementing the automated processes that we needed, but also create an interactive set of tools for our Service Desk people to view and modify AD accounts in a controlled way. + + + + Deploy and manage certificates for your IIS servers using PS + + + + Presented by: Jason Helmick + + + + + Need to deploy and manage certificates for your websites? When was the last time you checked to see if your website certificates were about to expire? In this session with renowned PowerShell and IIS expert Jason Helmick, you will deploy, manage, revoke and remove certificates to multiple remote IIS servers running Windows Server Core. Discover and alert when certificates are about to expire and handle creating and changing SSLBindings in IIS. + + + + Automatically Provisioning an IIS 8 Web Farm + + + + Presented by: Jason Helmick + + + + + Increase productivity while increasing time off using PowerShell! In this session with renowned PowerShell and IIS expert Jason Helmick, you will learn to provision a web farm of servers, sites and applications. Quickly adapt your web farm to the needs of the business with rapid scale load balancing. You will leave with the slides, demonstration steps and Jason"™s tips to rapidly provision IIS. Don"™t lose another weekend to web farm deployment and management! + + + + Securely Manage your network anytime on any Device with PSWA + + + + Presented by: Jason Helmick + + + + + Are you "on-call" and worried to leave the office? Not anymore! In this session with renowned PowerShell and IIS expert Jason Helmick, you will learn to implement and securely configure Windows Server 8 PowerShell Web Access. Take control with any device and cmdlets at your fingertips without the overhead of installing additional administration tools. You will leave with the slides, demonstration steps and Jason"™s tips to securely deploy and utilize PowerShell Web Access. + + + + System Center 2012 Configuration Manager and PowerShell + + + + Presented by: Greg Ramsey + + + + + ConfigMgr and PowerShell – we have finally arrived! ConfigMgr and WMI have been a match made in heaven for the since at least SMS 2.0, so we've always been able to use PowerShell with ConfigMgr. But finally, we have real cmdlets that will allow you to fully automate the administrative experience with ConfigMgr. Are you ready to take your Configuration Manager Admin experience to the next level? Greg shows you how to leverage PowerShell with Microsoft System Center 2012 Configuration Manager SP1. Manage Deployments, Collections, Applications, Packages, Programs, and even Software Updates! + + + + Working with script blocks + + + + Presented by: Rob Campbell + + + + + Creating script blocks for remote jobs and filters using local variables. Using script blocks to: create collections simplify code maintenance get user input pipeline output from foreach loops + + + + Metaprogramming PowerShell + + + + Presented by: Ian Davis + + + + + PowerShell can be a fun and crazy language to use, but we can take it a step further with metaprogramming. By taking advantage of PowerShell's flexible language features including dynamic scoping, modules, deferred evaluation, and ScriptBlocks, we can create simple and powerful applications applications leveraging metaprogramming idioms. + + + + Chewie: PowerShell DSL for Managing NuGet Dependencies + + + + Presented by: Ian Davis + + + + + Have you ever tried to figure out which dependencies your application has? Tired of messing with NuGet repository.config and packages.config files? Are you fed up with having to load Visual Studio and enabling package restore by hand? Ruby has had a solution for a long time with gems and bundler. By leveraging the features of PowerShell, .NET developers can have their own DSL for managing dependencies efficiently with Chewie. + + + + Internal DSLs in PowerShell + + + + Presented by: Ian Davis + + + + + To write a DSL or to not write a DSL, that is an important question. PowerShell gives us great power to create DSLs, but it doesn't mean that we should create one. This talk will cover when to create a DSL along with techniques specific to PowerShell for creating them (deferred evaluation, first class objects, dynamic scoping, semantic models, dependency graphs, etc). Some existing PowerShell DSLs will be analyzed including as psake, pester, and chewie. + + + + PowerShell: Beyond Scripting + + + + Presented by: Ian Davis + + + + + PowerShell is missing a few language features, but that doesn't mean we can pretend. By changing our perspective slightly, we can apply parasitic and prototypal inheritance, open classes, monkey patching, and more. PowerShell was designed for solving problems for system administrators, but it isn't limited to that domain. + + + + Automated Builds With PowerShell + + + + Presented by: Ian Davis + + + + + Automated builds are a critical part of application lifecycle management. PowerShell is very well suited for making this process easier. We have gone full circle with scripting builds and by leveraging PowerShell on the command line and building DSLs, our builds can be more robust and intuitive than ever. + + + + Troubleshooting SQL Server with PowerShell + + + + Presented by: Laerte Junior + + + + + It is normal for us to have to face poorly performing queries or even complete failure in our SQL server environments. This can happen for a variety of reasons including poor Database Designs, hardware failure, improperly-configured systems and OS Updates applied without testing. As Database Administrators, we need to take precaution to minimize the impact of these problems when they occur, and so we need the tools and methodology required to identify and solve issues quickly. In this Session we will use PowerShell to explore some common troubleshooting techniques used in our day-to-day work as DBA. This will include a variety of such activities including gathering Blocked SQL Server Process, Reading & filtering the SQL Error Log even if the Instance is offline, Listing SQL Server and Database information and Register Temporary and Specific Events in the SQL Server WMI. The approach will be using PowerShell techniques that allow us to scale the code for multiple servers and run the data collection in asynchronous mode. + + + + PowerShell in Windows 8/2012 + + + + Presented by: Richard Siddaway + + + + + PowerShell has 2500 cmdlets available in Windows 2012 This session will give you a quick overview of what's available and more importantly what you can do with it. There is so much functionality available that if you don't know its there you can miss it. A quick overview of what's available and lots of demos + + + + PowerShell and WMI + + + + Presented by: Richard Siddaway + + + + + With all the new WMI based functionality in PowerShell v3 its easy to forget the old WMI cmdlets. They are still there, still have their place and can teach us a few things about administering our systems. Some of the new PowerShell v3 functionality makes them easier to use – learn how Some of the WMI gotchas still remain – see what they are, how you overcome them and what effect they have on the new CIM cmdlets + + + + Building Enterprise Modules + + + + Presented by: Adam Driscoll + + + + + In this session we will look at how to author enterprise-level modules using a combination of both PowerShell and C#. We'll examine the common pitfalls and considerations that should be made when thinking about enterprise PowerShell support. We will look at how to build modules that are easy to test and maintain. + + + + Tame Your Event Logs with Windows PowerShell and WinRM + + + + Presented by: Aleksandar Nikolic + + + + + In this session you will learn how to manage your Event Logs with PowerShell cmdlets, leverage the power of Event Forwarding to centralize events to a central server and trigger execution of PowerShell scripts from a specific Windows event. + + + + Automate Server Manager in Windows Server 2012 + + + + Presented by: Aleksandar Nikolic + + + + + Server Manager in Windows Server 2012 has evolved to include many new multi-server management features. It uses Windows PowerShell behind the scenes, but can we use Windows PowerShell to automate customization of Server Manager? Yes, we can. Join us for this session to learn how. + + + + How to Delegate Administration and Customize PowerShell Session Configuration + + + + Presented by: Aleksandar Nikolic + + + + + In this session you will learn how to customize PowerShell session configuration, and then use it to assign specific administrative tasks to the appropriate users and groups without changing the membership of local Administrators group. By using new Windows PowerShell and Windows Remote Management 3.0 capabilities we will enable dynamic creation of customized automation environments that users can access through the Windows PowerShell Web Access. + + + + Configuring Your Windows PowerShell Workflow Environment + + + + Presented by: Aleksandar Nikolic + + + + + In this session you will learn how to set up your environment to run Windows PowerShell workflows. We will discuss different workflow configurations, how to prepare computers to run workflows, what is workflow session configuration and how to customize it. At the end, you will learn how to properly run your Windows PowerShell workflows. + + + + Build Your Demo Environment or a Test Lab with Windows PowerShell + + + + Presented by: Aleksandar Nikolic + + + + + With Windows PowerShell 3.0 and the new Client Hyper-V available in Windows 8, it is so easy, and fun, to automate creation of your demo environment or a test lab infrastructure. You can easily convert ISO files to VHDs, deploy your VMs and configure networking and storage. Join us for this demo-heavy session to see all the steps. + + + + Is Server Core without Windows PowerShell still remotely manageable? + + + + Presented by: Aleksandar Nikolic + + + + + In this, some might say blasphemous, session you will learn that uninstallation of Windows PowerShell doesn't leave your Windows Server 2012 Server Core remotely unmanageable from the command line. We can still use Windows PowerShell on a client computer to access system CIM modules on a Server Core. Even better, we can increase its manageability by deploying our own CIM modules. Join us to see the power of CIM sessions and CIM modules. + + + + Scripting for Scale in the Virtual Datacenter + + + + Presented by: Josh Atwell and Jade Lester + + + + + The virtual datacenter is growing at a high rate. The increasing size and complexities can make scripting and reporting take too long to complete in a reasonable time period. Attendees will learn a variety of techniques and strategies you can use to speed up your scripting and reporting with PowerCLI and UCSPowerTool from two members of Cisco internal IT. + + + + PowerCLI for the PowerShell Inclined + + + + Presented by: Josh Atwell + + + + + In this session I highlight many of the built in functionalities of PowerCLI that are extremely powerful but often underutilized. These cmdlets will increase your flexibility with PowerCLI and help increase efficiency. + + + + Managing your Cisco UCS with UCSPowerTool + + + + Presented by: Josh Atwell and Jade Lester + + + + + Attendees will get a crash course in the unique and powerful cmdlets of the UCSPowerTool, PowerShell for the Cisco Unified Compute System. + + + + Thank you for helping us create this great conference! + + + + + + Kirk out. + + + + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerShell Summit](http://technorati.com/tags/PowerShell+Summit),[PowerShell.org](http://technorati.com/tags/PowerShell.org) + + + + + + [![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/820/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/820/) ![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=820&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + + + [1]: http://674004.polldaddy.com/s/powershell-summit-na-2013-session-voting diff --git a/content/articles/2012/11/_index.md b/content/articles/2012/11/_index.md new file mode 100644 index 000000000..cf7070518 --- /dev/null +++ b/content/articles/2012/11/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from November 2012" +description: "PowerShell.org Articles published in November 2012." +--- diff --git a/content/articles/2012/11/charts-in-powershell-generated-reports/index.md b/content/articles/2012/11/charts-in-powershell-generated-reports/index.md new file mode 100644 index 000000000..dcfea5148 --- /dev/null +++ b/content/articles/2012/11/charts-in-powershell-generated-reports/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2012-11-16-charts-in-powershell-generated-reports/ +title: Charts in PowerShell-Generated Reports +authors: + - Don Jones +date: "2012-11-16T23:09:05+00:00" +categories: + - PowerShell for Admins +aliases: + - /2012/11/charts-in-powershell-generated-reports/ +--- + +So, as you may know, I have an ongoing hobby project called _Creating HTML Reports in PowerShell. _I'm working on an update for next year, and one of the things I've been looking at are embedded charts within the report. +Problem is, I don't know what people would actually chart. Now... I'm going to ask you for ideas, but you need to read this whole post before you go popping a comment in. Because there are some restrictions. +**First**, I'm  +not talking about historical data or trend reports +. Those require a data store of historical data. If you're not using SQL Server for that (even free SQL Express), learn how. Excel is  +not + your trend database, no matter how little learning it requires (and I bet if you added up all the time you've spent becoming an Excel jockey, you'd be shocked). Once you've got the data in SQL (even Express), you can use SQL Server Reporting Services (SSRS) to generate truly kick-butt reports with very little effort. Reports which can be scheduled and e-mailed. Truly, folks, this is worth spending time on - and I may make that my next ebook project. +**Second, **don't tell me "disk space." I know that one. Pie and stacked bar charts showing size/free space are a great idea. Got it. Anything else? +**Third, **I'm not talking about performance charts. PerfMon does those, and also, see my first point. PowerShell is not a performance monitoring tool. Operations Manager is. Oh, and it dumps data into SQL Server and you can use SSRS to report on it. If your company needs historical performance reports (and most probably do) and is to cheap to get you a real monitoring solution, consider taking drastic measures. I'm not suggesting you put Ex-Lax in the boss' coffee every time he asks you to re-create OpsMan on your own. He'd deserve it, and it might help, but I'm not suggesting it. +In keeping with point 3, that means I don't want suggestions like "charts showing network throughput." That's performance. I'm not suggesting such a thing wouldn't be useful, because I know it would be. I'm saying it's out of scope for this particular project. If you give me in-scope suggestions, I'll build you a tool. Fire off out-of-scope stuff and I'm just going to go build a kegerator for my beer instead. +**SO**... given those restrictions, what sort of data could you query from a computer (say, using WMI/CIM or something) that you'd want displayed in chart form? Anything? diff --git a/content/articles/2012/11/final-ticket-inventory-for-powershell-summit-na-2013-released/index.md b/content/articles/2012/11/final-ticket-inventory-for-powershell-summit-na-2013-released/index.md new file mode 100644 index 000000000..8ad657b63 --- /dev/null +++ b/content/articles/2012/11/final-ticket-inventory-for-powershell-summit-na-2013-released/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2012-11-02-final-ticket-inventory-for-powershell-summit-na-2013-released/ +title: Final Ticket Inventory for PowerShell Summit NA 2013 Released! +authors: + - Don Jones +date: "2012-11-02T15:24:26+00:00" +categories: + - PowerShell for Admins +aliases: + - /2012/11/final-ticket-inventory-for-powershell-summit-na-2013-released/ +--- + +As we've been finalizing our speaker and session collection, we've been able to release a small block of Summit tickets into the general admission pool. Also, the end of October saw the expiration of a set-aside block for PowerShell MVPs, releasing that block's unsold tickets back into the general admission pool as well. +As it stands, the G.A. pool now has 57 tickets, of which we've sold 24. That leaves 33 tickets left for the April 22-24 event at Microsoft's corporate headquarters in Redmond, WA. +We currently have a total of 57 attendees, including speakers. That doesn't include Microsoft team members who will be delivering sessions, nor does it include a small batch of tickets reserved for Microsoft staff who will be participating in the sessions for all three days. +If you're thinking of coming to the Summit, **now is the time to register. **We'll be releasing our session and speaker lineup within the next few days, and that usually triggers a big rush in registration as people get even more exciting about the upcoming event. If you do happen to miss one of these final 33 tickets, you'll have the opportunity to go on a waitlist, where you'll be notified if anyone cancels. +**Don't miss your chance to be a part of this first-ever community-owned and -operated event!** diff --git a/content/articles/2012/11/hands-on-workshop-at-the-2013-powershell-summit/index.md b/content/articles/2012/11/hands-on-workshop-at-the-2013-powershell-summit/index.md new file mode 100644 index 000000000..ee8e8627b --- /dev/null +++ b/content/articles/2012/11/hands-on-workshop-at-the-2013-powershell-summit/index.md @@ -0,0 +1,37 @@ +--- +url: /articles/2012-11-06-hands-on-workshop-at-the-2013-powershell-summit/ +title: Hands-on Workshop at the 2013 PowerShell Summit +authors: + - Kirk Munro +date: "2012-11-06T21:43:45+00:00" +aliases: + - /2012/11/hands-on-workshop-at-the-2013-powershell-summit/ +--- + +In my last post I hinted about more news coming soon for the 2013 PowerShell Summit.  In addition to the fantastic list of sessions that attendees will be able to attend, we also have a special event lined up for the last day of the event.  On Wednesday, April 24th, for the entire afternoon attendees will be able to attend a half-day Windows PowerShell scenario walkthrough, presented by the PowerShell Team. + +The event will take place on April 24 from 1pm – 5pm.  During this time the PowerShell Team will work with attendees to collectively solve a problem from the ground up using many of the new features in Windows PowerShell 3.0 and Windows Server 2012. + +Starting from base Windows Server 2012 images, you will walk through: + + * Writing a PowerShell script workflow to perform Server deployments + * Creating a constrained endpoint that hosts only the deployment workflow + * Delegate a set of credentials for the workflow to use + * Exposing the workflow and it's results through a RESTful web service + * Using Windows PowerShell Web Access to manage the workflow + +This is a BYOD event, so please don't forget to bring your own laptop to follow along! + +The facilities we have for the conference can only accommodate 50 people at this event.  To give everyone a fair chance to sign up, on December 1st we will send an email from EventBrite to everyone who has already purchased their conference ticket so that they can then sign-up for this free event.  If you want to have a chance to attend this workshop, you will have a much better chance if you [buy your ticket][1] before that date! + +There will also be other activities that afternoon for those who cannot attend this event due to their travel plans, or if all of the workshop tickets are all gone. If you are able to stick around though and if you can attend this workshop, this should be a fantastic way to end the conference! + +Kirk out. + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerShell Summit](http://technorati.com/tags/PowerShell+Summit) + + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/830/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/830/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=830&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://powershellsummit.com/ diff --git a/content/articles/2012/11/help-beta-test-a-new-free-ebook-on-powershell-reporting/index.md b/content/articles/2012/11/help-beta-test-a-new-free-ebook-on-powershell-reporting/index.md new file mode 100644 index 000000000..6a3f45f59 --- /dev/null +++ b/content/articles/2012/11/help-beta-test-a-new-free-ebook-on-powershell-reporting/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2012-11-18-help-beta-test-a-new-free-ebook-on-powershell-reporting/ +title: Help Beta-Test a New Free eBook on PowerShell Reporting +authors: + - Don Jones +date: "2012-11-18T18:11:37+00:00" +categories: + - PowerShell for Admins +aliases: + - /2012/11/help-beta-test-a-new-free-ebook-on-powershell-reporting/ +--- + +I've [written previously][1] about my frustration with reporting in PowerShell - how I see admins struggle with ugly, low-level COM code to manipulate Excel spreadsheets, just so they can get nice-looking reports with a degree of automation. +Enough. +The _right_ thing to do is put your data in SQL Server, and use SQL Server Reporting Services to generate _awesome_ looking reports, complete with charts and graphs. With the right setup, you can completely automate data collection, report generation, and delivery. And it doesn't have to cost _a single dime._ Plus, the learning curve isn't too steep, and the skills you'll learn along the way will be _massively_ beneficial to you over the long haul - far more so than the time sunk into becoming an Excel jockey. +So I've written a little book about it, which you'll find on at https://powershell.org/ebooks, entitled _Making Historical and Trend Reports in PowerShell._ Unlike my earlier book on HTML reporting, which was mainly around producing inventory reports, this one's specifically designed to make reports based on collected-over-time data, like disk utilization, performance, and so on. And I've bundled in a PowerShell module that should make this _easy,_ insulating you from 99% of the SQL Server-related stuff. +Right now (November 2012) I'm looking for folks to test stuff out and let me know (via comments here) if you find any problems. I want to make sure that what I've got in here works and is understandable. Final publication is scheduled for January 2013, after which I'll start taking suggestions for stuff to add to the book. + + [1]: https://powershell.org/2012/11/16/charts-in-powershell-generated-reports/ "Charts in PowerShell-Generated Reports" diff --git a/content/articles/2012/11/phillyposh-11012012-meeting-summary-and-presentation-materials/index.md b/content/articles/2012/11/phillyposh-11012012-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..a05b73a1c --- /dev/null +++ b/content/articles/2012/11/phillyposh-11012012-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,95 @@ +--- +url: /articles/2012-11-08-phillyposh-11012012-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 11/01/2012 meeting summary and presentation materials +authors: + - John Mello +date: "2012-11-08T13:49:49+00:00" +aliases: + - /2012/11/phillyposh-11012012-meeting-summary-and-presentation-materials/ +--- + +- + [TJ Turner](http://techguytj.com/) gave a demonstration of how to bring [Server 2012 Core](http://msdn.microsoft.com/en-us/library/windows/desktop/hh846323(v=vs.85).aspx): + + + To [Minimal Server](http://msdn.microsoft.com/en-us/library/windows/desktop/hh846317(v=vs.85).aspx) + + + + + + + + - + To Full GUI + + + - + Back down to [Core](http://msdn.microsoft.com/en-us/library/windows/desktop/hh846323(v=vs.85).aspx) again. + + + - + A copy of his slide deck is available [here](https://powershell.org/wp-content/uploads/2012/10/2012_11_01-PhillyPoSH.zip) + + + + + + + - + [Lido Paglia](http://paglia.org/) gave a demonstration on how to bring a fresh Server 2012 Core install to a functional domain member server using PowerShell commands. A copy of his command outline is available [here](https://powershell.org/wp-content/uploads/2012/10/2012_11_01-PhillyPoSH.zip) + + + - + Script Club : + + + [John Mello](http://mellositmusings.com/) presented his script that generates an email listing all ActiveSync devices that haven't synced in a specified period. A copy of his script is available [here](https://powershell.org/wp-content/uploads/2012/10/2012_11_01-PhillyPoSH.zip) + + + + + + + - + Various other information worth mentioning. + + + Only the Hype-V MMC was updated in Server 2012, No other MMCs were upgraded and no new ones will created going forward. + + + - + [Core Configurator](http://coreconfig.codeplex.com/) for Server 2008 and 2008R2 has been replaced by the [Minimal Server Interface](http://msdn.microsoft.com/en-us/library/windows/desktop/hh846317(v=vs.85).aspx)in 2012. Though it is unconfirmed if Core Configurator for 2008 and 2008 R2 won't work for 2012 + + + - + [Sconfig](http://technet.microsoft.com/en-us/library/ee441254(v=WS.10).aspx) is also recommended in place of Core Configurator + + + - + The following resources and link were recommended during the meeting + + + [PowerShell Cheat Sheets/Quick Ref Cards:](http://www.microsoft.com/en-us/download/details.aspx?id=30002) + + + [Additional cheat sheet links:](http://www.jonoble.com/blog/2011/12/12/powershell-quick-reference-guides-and-cheat-sheets.html) + + + + + + + - + [PowerShell Plus from Idera is now FREE:](http://www.jonoble.com/blog/2012/10/24/powershell-plus-goes-free.html) + + + - + [Two WMI cheat sheets from WMI team:](http://www.powershellmagazine.com/2012/10/29/cim-cmdlets-cheat-sheet-from-the-wmi-team/) + + + - + [Free Creating HTML reports in Windows PowerShell by Don Jones](http://powershellbooks.com/) + + + On the same page is the book [Learn PowerShell 3 in a Month of Lunches](http://bit.ly/PSHv3Lunch), which is highly recommended. diff --git a/content/articles/2012/11/powershell-summit-community-sessions-list/index.md b/content/articles/2012/11/powershell-summit-community-sessions-list/index.md new file mode 100644 index 000000000..8f6d02df5 --- /dev/null +++ b/content/articles/2012/11/powershell-summit-community-sessions-list/index.md @@ -0,0 +1,434 @@ +--- +url: /articles/2012-11-02-powershell-summit-community-sessions-list/ +title: "PowerShell Summit Community Sessions List [Updated]" +authors: + - Kirk Munro +date: "2012-11-02T19:19:22+00:00" +aliases: + - /2012/11/powershell-summit-community-sessions-list/ +--- + +[Update: April 19, 2013] **Important Note:** Due to some last minute schedule changes for some of our speakers, several of the sessions below were replaced with other sessions.  To see the final list of sessions offered at the 2013 PowerShell Summit, please visit this page: {.vt-p} + +After almost 100 people voted for the sessions they would like to see the most at the [2013 PowerShell Summit][1]{.vt-p}, the results are in!  These votes are for the sessions chosen by the community, and additional sessions from the PowerShell Team will be announced at a later date (as soon as I have them). + +Below you will find the not-quite-finalized list of community sessions that will be included in the 2013 PowerShell Summit, sorted alphabetically by speaker.  It is not quite finalized because I am still awaiting final confirmation from a handful of speakers (those marked with an asterisk).  I will update this post as the final confirmations come in. + +Thank you to everyone who submitted a session proposal for this conference.  There were a lot of great proposals this year, and I personally think no matter which sessions were voted for, the conference would have been fantastic.  Also thank you to anyone who took the time to vote for their favorite sessions.  Your votes really helped us a lot here, both for the upcoming 2013 conference and for conferences we"™ll be planning in the future too! + +If you would like to attend this conference so that you can learn from these great sessions and others that are not yet announced, and so that you can participate in the fantastic conversations that happen at such an event, you can purchase your ticket here: {.vt-p}. + +Here is the list of sessions that made the final cut: + + + + + Speaker + + + + Title + + + + Description + + + + + + June Blender + + + + Help for Help: A Help Authoring Deep Dive + + + + A comprehensive 400-level talk for module authors about authoring techniques for all types of Windows PowerShell Help, including About help and help for all command types, including cmdlets (and the MAML schema), scripts, functions, CIM commands, workflows (script and XAML), providers (including custom cmdlet help), and snippets. What you can and cannot do, and what's worth doing when time and resources are short. We'll cover online help, Updatable Help, and all the gotchas (HelpInfo XML, HelpInfoUri, HelpUri, CHMs), and I'll share the scripts that I use to generate help files and verify the accuracy of parameters, parameter values, parameter attributes, GUIDs, and URIs. + + + + + + James Brundage* + + + + The Powers of PowerShell Pipeworks + + + + Ever wanted to make PowerShell easy for others? Or realize that a simple script you have would be a great backbone of a business (if only you could charge for it)? PowerShell Pipeworks is a web platform built in PowerShell that makes is simple to build compelling web applications and software services in a snap. In this session, you will see: – How to use Pipeworks to store your data to the cloud – How to create a monitoring dashboard with Pipeworks – How to build a Facebook application with PowerShell Pipeworks – How to put a price tag on a cmdlet + + + + + + Ian Davis + + + + Metaprogramming PowerShell + + + + PowerShell can be a fun and crazy language to use, but we can take it a step further with metaprogramming. By taking advantage of PowerShell's flexible language features including dynamic scoping, modules, deferred evaluation, and ScriptBlocks, we can create simple and powerful applications applications leveraging metaprogramming idioms. + + + + + + Ian Davis + + + + Automated Builds With PowerShell + + + + Automated builds are a critical part of application lifecycle management. PowerShell is very well suited for making this process easier. We have gone full circle with scripting builds and by leveraging PowerShell on the command line and building DSLs, our builds can be more robust and intuitive than ever. + + + + + + Adam Driscoll + + + + Inside PowerShell: Abstract Syntax Tree Manipulation + + + + In this session we will take apart PowerShell. This session will highlight the new abstract syntax tree and node visitor API that is exposed in v3. An instrumentation profiler will be used as an example of how to traverse and manipulate PowerShell scripts from within the engine. + + + + + + Adam Driscoll + + + + .NET Reverse Engineering with PowerShell + + + + In this session we will look at how to utilize ILSpy to decompile .NET assemblies and quickly access internal aspects of them using PowerShell. We will see how to easily expose private members for access and manipulation within scripts. Adam Driscoll + + + + + + Jeffery Hicks + + + + Adding a GUI to PowerShell without WinForms + + + + Graphical PowerShell scripts seem all the rage these days. But most often that means using Windows Forms which can be very tedious to work with. But that is not the only game in town. Depending on your requirements there are a number of techniques you can use to add graphical elements to your PowerShell scripts. This session will explore how to create message boxes, input forms and more, all without a single Windows Form. If you are just getting started with writing PowerShell scripts, you'll find these techniques simple to use, plus there will be plenty of sample code for all! + + + + + + Don Jones + + + + Workflow Walkthrough + + + + It seems like everyone's interested in v3′s new Workflow feature, so let's do a quick walkthrough of building one from scratch. We'll skip the usual "provisioning" example and go for something a bit more constrained, and perhaps real-world, where workflow's unique features can really be put to solid use. This'll also be an opportunity to discuss what workflow can and can't do, and discuss some of the options and permutations of using it. + + + + + + Don Jones + + + + Remoting Configuration Deep Dive + + + + What do you do when Enable-PSRemoting isn't enough? Dig deeper. We'll run through all of the major configuration scenarios, including how to use (and not abuse) TrustedHosts, how to set up an HTTPS listener (and use it), how to do non-domain authentication, how to enable CredSSP and configure it to be less than a major security hole, and more. Pretty much every possible Remoting config, we'll cover. With detailed, step-by-step instructions! + + + + + + Kirk Munro + + + + Creating Add-on Tools for PowerShell ISE + + + + PowerShell 3 includes a ton of improvements to the integrated scripting editor, PowerShell ISE. As great as PowerShell ISE is in this version, there is still a lot of room for improvement. Fortunately, Microsoft anticipated that they wouldn't be able to do everything, so they extended their support for creating Add-on Tools for PowerShell ISE.In this session, the worlds first self-proclaimed Poshoholic and PowerShell MVP Kirk Munro will provide a soup to nuts demonstration of PowerShell ISE Add-on Tools, showing how you can create everything from simple menu extensions to feature rich windows that respond to ISE events and that are docked right inside of the ISE. + + + + + Technologies covered in this session include the PowerShell ISE object model, C#, WPF, eventing, Visual Studio 2012, and of course several core PowerShell features. + + + + Kirk Munro + + + + Authoring PowerShell like a Poshoholic + + + + I've been using PowerShell for over 6 years. Blogging about it for over 5 years. Creating and managing products based on PowerShell for about that long as well, and writing a whole lot of scripts during the process. During this time I've come up with a trick or three to make that work easier. Some of these tricks are simple time savers, while others are ground breaking opportunities that just might change the way you write PowerShell.Come and join me in this session to get a bird's eye view at some of the work I've been doing with PowerShell, as I talk about tips, tricks, and best practices while demonstrating some of the extensions I've written specifically to make authoring with PowerShell easier to do. + + + + + Topics discussed include proxy functions, WMI/CIM, Microsoft Office, DSVs, WiX, merge modules, type accelerators, and more. + + + + Aleksandar Nikolic + + + + How to Delegate Administration and Customize PowerShell Session Configuration + + + + In this session you will learn how to customize PowerShell session configuration, and then use it to assign specific administrative tasks to the appropriate users and groups without changing the membership of local Administrators group. By using new Windows PowerShell and Windows Remote Management 3.0 capabilities we will enable dynamic creation of customized automation environments that users can access through the Windows PowerShell Web Access. + + + + + + Aleksandar Nikolic + + + + Configuring Your Windows PowerShell Workflow Environment + + + + In this session you will learn how to set up your environment to run Windows PowerShell workflows. We will discuss different workflow configurations, how to prepare computers to run workflows, what is workflow session configuration and how to customize it. At the end, you will learn how to properly run your Windows PowerShell workflows. + + + + + + Aleksandar Nikolic + + + + Build Your Demo Environment or a Test Lab with Windows PowerShell + + + + With Windows PowerShell 3.0 and the new Client Hyper-V available in Windows 8, it is so easy, and fun, to automate creation of your demo environment or a test lab infrastructure. You can easily convert ISO files to VHDs, deploy your VMs and configure networking and storage. Join us for this demo-heavy session to see all the steps. + + + + + + Alan Renouf + + + + Creating a complex and reusable HTML reporting structure + + + + In this session I will show you the shortcuts and tricks picked up when creating a complex reporting structure with PowerShell, how a simple HTML output script grew to be a reporting structure which can adapt to give detailed, nicely formatted reports on any application or system that has a PowerShell interface, and even some that don't! + + + + + + Alan Renouf + + + + Practical PowerShell Integration from Bare Metal to the Cloud + + + + See how PowerShell can be used as the glue of the datacenter, take information from VMware, Cisco and Microsoft, Glue them all together and go from bare metal up to the cloud and beyond. Learn how PowerShell is now expanding to be the language of choice and how Microsoft and third party products can be tied together to create fantastic solutions. + + + + + + Andy Schneider + + + + PowerShell and Source Control for the IT Pro + + + + Are you ever concerned about updating a script, having it break, and can't remember what you changed. This is source control by an IT Pro for IT Pros. Come check out some best practices and lessons learned on how to incorporate source control as part of writing scripts. Learn how to have your code available via the web and easily accessed on multiple machines. We'll take a look at using GIT to ensure your code is always up to date and you can always get back to where you were if you break something. + + + + + + Andy Schneider + + + + PowerShell and Active Directory + + + + This session will provide a quick overview of different options to manage AD using PowerShell. It will quickly jump into some of the shortcomings of the MSFT provided Active Directory module and how to work around them, and even "fix" them using proxy functions and the new Default Parameter Set feature in V3. + + + + + + Richard Siddaway + + + + CIM sessions + + + + The introduction of the CIM cmdlets and "cmdlets over objects" in PowerShell v3 provide new ways to work with WMI. In addition, they bring a new way to access remote systems ? CIM sessions. Analogous to PowerShell remoting sessions they provide a new flexibility when working with WMI and remote machines. This session will demonstrate: + - How to use CIM sessions against systems running PowerShell v3 + - How to work with legacy installations of PowerShell v2 + - How to use the available CIM session options to configure the session to meet your requirements + - Compare and contrast working with WMI, CIM and WSMAN cmdlets against remote machines to illustrate the strengths and weaknesses of each + - How to mix and match CIM sessions using WSMAN and DCOM.The key takeaways from this session will be: + - The CIM cmdlets provide a new way to access WMI + - WSMAN is required knowledge + - WSMAN and DCOM can both be used with the CIM cmdlets + - CIM sessions are easy to use and very powerful + - No more DCOM problems + + + + + + Richard Siddaway + + + + PowerShell Web Access + + + + PowerShell Web Access is a new feature in Windows Server 2012 that provides a web based PowerShell console. You don't need PowerShell on your client to administer remote machines as long as you have PWA. This session will demonstrate how to configure PWA, its strengths and weaknesses – you might even see PowerShell being accessed from a non-Windows machine! The security implications of PWA will be discussed. PWA will be compared to other ways to access remote machines through PowerShell including PS Remoting and CIM sessions. + + + + + + Richard Siddaway + + + + PowerShell events + + + + The PowerShell event engine enables you to work with .NET; WMI and PowerShell engine events. What are these and how do they work? What can I do with them? Want to stop a process that shouldn't be running? Want to start a process that's stopped? That's what this session will show you with PowerShell events. + + + + + + Ed Wilson + + + + Write modules, not scripts + + + + Learn how to get the most from Windows PowerShell by learning a simple five-step method to transform your Windows PowerShell code into a highly reusable module. This presentation is a live demo that begins with a single line of Windows PowerShell code, transforms the code into a function, adds comment based help to the function, and converts it into a module. Next, the installation and discovery of Windows PowerShell modules is covered, as is updating the module and creating a Windows PowerShell module manifest. Ed Wilson + + + + + + Ed Wilson + + + + What I learned by grading 2000 PowerShell Scripts in the 2012 Scripting Games + + + + The 2012 Scripting Games attracted both experienced and novice scripters from more than 100 countries around the world. In grading the 2000 submitted scripts, I noticed a common theme emerged. Some of the things that were consistently confused by both beginners and advanced scripters include the following: failure to return objects from functions, not creating reusable functions, spending too much duplicating capabilities of native PowerShell, using meaningless comments, omission of error handling, and an overreliance on Write-Host. In this session, I will address each of these areas of concern and show both good and bad examples from the games. A thorough discussion of each of these topics rounds out the presentation. This presentation uses live demos to illustrate the techniques that are discussed. Ed Wilson + + + + + + Ed Wilson + + + + PoshMon: PowerShell does performance counters + + + + One of the cool features on Windows PowerShell 3.0 is easy consumption of WMI performance counters into Windows PowerShell. In the past, leveraging these performance counters meant writing long lines of cryptic code, calling refresher objects, and dealing with weird timestamp issues. But no more! Using a simple cmdlet, Windows PowerShell throws open the door to the treasure trove of performance counter information. But where does the oversubscribed IT pro begin? A question on my Windows NT 3.51 MCSE exam stated there are four areas for performance monitoring: disk, memory, network, and CPU. These four resources have not changed much, regardless of the application these basic areas of investigation still ring true. In this session, I talk about discovering performance counters, using performance counters, and storing information gathered from performance counters. The talk will be strengthened by live demos at each stage of the presentation. + + + + + + Matt Wrock* + + + + Unit Testing PowerShell + + + + This talk will provide a walk through of Unit Testing PowerShell scripts. The OSS project Pester ([https://github.com/pester/Pester](https://github.com/pester/Pester)) will be used to illustrate popular unit testing patterns such as ArrangeActAssert and Mocking to provide testability to PowerShell. There will be discussion on why and when to use unit testing in PowerShell as well. + + + + + + Keep an eye on my blog for additional news about this conference, because more exciting news is on the way! + + + + + + Thanks, + + + + + + Kirk out. + + + + + + Technorati Tags: [PowerShell](http://technorati.com/tags/PowerShell),[PoSh](http://technorati.com/tags/PoSh),[Poshoholic](http://technorati.com/tags/Poshoholic),[PowerShell Summit](http://technorati.com/tags/PowerShell+Summit) + + + + + + [![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/824/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/824/) ![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=824&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + + + [1]: http://powershellsummit.org/ diff --git a/content/articles/2012/11/special-powershell-team-workshop-to-be-held-at-powershell-summit-n-a-2013/index.md b/content/articles/2012/11/special-powershell-team-workshop-to-be-held-at-powershell-summit-n-a-2013/index.md new file mode 100644 index 000000000..9b17befa1 --- /dev/null +++ b/content/articles/2012/11/special-powershell-team-workshop-to-be-held-at-powershell-summit-n-a-2013/index.md @@ -0,0 +1,49 @@ +--- +url: /articles/2012-11-06-special-powershell-team-workshop-to-be-held-at-powershell-summit-n-a-2013/ +title: Special PowerShell Team Workshop to be Held at PowerShell Summit N.A. 2013 +authors: + - Don Jones +date: "2012-11-06T21:32:24+00:00" +categories: + - PowerShell for Admins +aliases: + - /2012/11/special-powershell-team-workshop-to-be-held-at-powershell-summit-n-a-2013/ +--- + +To cap off the 2013 PowerShell Summit the PowerShell Team is going to host a half day Windows PowerShell scenario walkthrough. This is designed to not only familiarize folks with specific PowerShell features, but also to help the team see how you interact with these features. + + + The event will take place on April 24 from 1pm - 5pm.  During this time we will collectively solve a problem from the ground up using many of the new features in Windows PowerShell 3.0 and Windows Server 2012. + Starting from base Windows Server 2012 images, we will walk you through: + + + + + - + Writing a PowerShell script workflow to perform Server deployments + + + - + Creating a constrained endpoint that hosts only the deployment workflow + + + - + Delegate a set of credentials for the workflow to use + + + - + Exposing the workflow and it's results through a RESTful webservice + + + - + Using Windows PowerShell Web Access to manage the workflow + + + + + + + + This is a BYOD event, so please don't forget to bring your own laptop to follow along. + We can accomodate 50 people at this event. **This will be first-come, first-served registration, open only to paid attendees of the PowerShell Summit N.A. 2013. **We will e-mail the invitation code to **paid attendees** on December 1st (watch your e-mail; it'll come from EventBrite). Once the 50 slots are filled, the workshop will be closed. + If you're attending but don't get a slot in this workshop, or don't want to attend, then you'll be able to partake in some lightning-round and ad-hoc sessions in the Summit's other meeting room. diff --git a/content/articles/2012/11/verify-your-powershell-skills/index.md b/content/articles/2012/11/verify-your-powershell-skills/index.md new file mode 100644 index 000000000..340e3f820 --- /dev/null +++ b/content/articles/2012/11/verify-your-powershell-skills/index.md @@ -0,0 +1,41 @@ +--- +url: /articles/2012-11-09-verify-your-powershell-skills/ +title: Verify Your PowerShell Skills +authors: + - Don Jones +date: "2012-11-09T23:58:21+00:00" +categories: + - Announcements + - News + - PowerShell for Admins +aliases: + - /2012/11/verify-your-powershell-skills/ +--- + +A long time ago... about a year, in fact... [Jason Helmick][1] and I started talking about a community-owned PowerShell "certification." It went nowhere. Well, not very far. +Some background on exams: Microsoft, in my opinion, will **never** do a PowerShell cert. I say this having been part owner of a company that did outsourced exam development for the company. The deal is that Microsoft tries to certify _job tasks, _not _tools. _Nobody (well, maybe me) wakes up thinking, "gonna do me some PowerShell today." No, PowerShell is the means to an end: "gonna automate me some user creation today" is more likely. And Microsoft tries to certify that end. PowerShell's an important tool, and it already shows up on certification exams here and there. +For the most part, I agree with Microsoft's reasoning, there. The argument can be summarized as saying "bosses don't hire IT pros based on their ability to operate a low-level tool, they hire them to perform job tasks, which _encompasses_ the tool." Except that, in the case of PowerShell, I think it'd be _tremendously_ useful for an employer to use PowerShell expertise as a discriminating factor in hiring. I mean, "someone who can automate stuff" is more valuable than "someone who can only do stuff manually," in any situation. +So "PowerShell Verified" was intended to be a way for someone to prove - at least to themselves - that they've taken their PowerShell skills _to the minimum level necessary to be an effective automator. _Not a guru. Not an expert. Not [Poshoholic][2]. _Minimally effective, _who could then grow from there with experience. +So that's what I'm going to put together. +I want to explain why I'm not using the word "Certification," though. In my mind, certifications come from, mainly, first-parties like Microsoft. Microsoft has to jump through a lot of hoops to make sure their exam content is accurate, legally defensible, blah blah blah. They worry about security, brain dumps, and other stuff that diminishes the value of the certification. I don't have that kind of bandwidth or their resources, so in many ways my little program will be less effective than a "real" certification. Plus, few bosses will give a rat's patooty what that Don Jones guy said about your skillz (I can't even convince bosses to buy you guys 12-core 64GB workstations for your desk). So my "Verified" program is going to be _low stakes, _meaning you take it to prove something to _ +yourself +_. +Here's how this is going to go. + + +## How You Can Help + +First, I'm attaching a doc with the general program description. Drop a comment in here after you read it, and tell me what you think. [PowerShellVerified][3] (it's a Word doc). +Second, the cost on this is going to be in the neighborhood of $100. There's some infrastructure that has to support this, because it's a _practical, hands-on exam using the actual product _running in a cloud-based virtual environment. To the cloud! +Third, let me know if you'd like to participate in a LiveMeeting where I'll cover the general approach of the test scenario, and gather your feedback. This is appropriate mainly if you're pretty high-level in your org - senior IT, IT management, etc. In the comment, give me a way to contact you (Twitter's fine). You **will** be asked to sign a Nondisclosure Agreement (NDA) prior to that LiveMeeting, which will be in January sometime, I think. +Fourth, let me know if you'd like to beta test this. I'm only taking 2-3 people for this. For logistical reasons, you need to be in the US (mainly to keep time zone coordination from becoming a hassle) and you need to have a Twitter handle. Drop that handle in a comment if you'd like to beta. That'll be free. + +## What's Tested + +Now, for a bit of background. This first-go will verify what I call **toolmaker** competency. That means you have the skills needed to write and deploy high-level tools across your organization, particularly those which involve delegated administration. The scenario **will** be slightly artificial, but that's so that it can include a number of underlying objectives that test the breadth of your PowerShell knowledge. That said, the overall skill set you'll have to demonstrate will be _very_ real-world. No esoteric stuff, here, just techniques you'd actually deploy for real-real. I know there are a _lot_ of other things that could be tested; this is where I'm choosing to start because I can make it relatively constrained, and therefore automate the grading process somewhat. +The focus of the exam will be on _PowerShell. _Not AD, not Exchange, not anything domain-specific. The intent is PowerShell competency, not your super guru-ness with some other product. +Alright. Let me know what you think. + + [1]: http://twitter.com/thejasonhelmick + [2]: http://poshoholic.com + [3]: https://powershell.org/wp-content/uploads/2012/11/PowerShellVerified.docx diff --git a/content/articles/2012/11/what-to-do-if-you-dont-score-a-powershell-summit-ticket/index.md b/content/articles/2012/11/what-to-do-if-you-dont-score-a-powershell-summit-ticket/index.md new file mode 100644 index 000000000..80c38c185 --- /dev/null +++ b/content/articles/2012/11/what-to-do-if-you-dont-score-a-powershell-summit-ticket/index.md @@ -0,0 +1,28 @@ +--- +url: /articles/2012-11-24-what-to-do-if-you-dont-score-a-powershell-summit-ticket/ +title: "What To Do If You Don't Score a PowerShell Summit Ticket" +authors: + - Don Jones +date: "2012-11-24T20:46:11+00:00" +categories: + - Announcements +aliases: + - /2012/11/what-to-do-if-you-dont-score-a-powershell-summit-ticket/ +--- + +As I write this, we're down to one ticket for the [PowerShell Summit North America 2013][1]. So what do you do if you really wanted to go, but miss that last, golden ticket? + +## Cry a Little + +Let's face it, this was totally avoidable. It's probably your boss' fault for not approving the expense, and so some subtle retribution may be in order. Burn the coffee for a week. Reboot domain controllers randomly. You know, just sulk. + +## Waitlist + +But all is not lost. You can still [go through the registration process][2] and get on the wait list. You won't have to pay any money. If a slot opens up, you'll be notified via e-mail from EventBrite, and have 24 hours to purchase the ticket. If you don't buy it within 24 hours, you'll go to the bottom of the list and the next person will be offered the ticket. There's a solid chance that at least a few top waitlist spots will be filled; I know we have a couple of tentative attendees, and we have a couple of volunteers who've said they'd give up their spot (but continue to help out at the event) if it came down to this. + +## Plan Ahead + +Our 2014 event will go on sale in April, 2013, during the 2013 event. Don't miss it next time! Start getting the boss on board in advance, like maybe in February or March. We _know_ the cost is going to be higher next time - we're going to try and move to an actual conference center, and that's just a bit more expensive. We also need to do a better job of fully reimbursing speaker expenses, which we might not be able to do 100% this time. But we're still going to try and keep things as close to our cost as possible. + + [1]: http://powershellsummit.org + [2]: http://powershellsummit.eventbrite.com/# diff --git a/content/articles/2012/12/_index.md b/content/articles/2012/12/_index.md new file mode 100644 index 000000000..0222981c2 --- /dev/null +++ b/content/articles/2012/12/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from December 2012" +description: "PowerShell.org Articles published in December 2012." +--- diff --git a/content/articles/2012/12/phillyposh-12062012-meeting-summary-and-presentation-materials/index.md b/content/articles/2012/12/phillyposh-12062012-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..abac7e5de --- /dev/null +++ b/content/articles/2012/12/phillyposh-12062012-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2012-12-10-phillyposh-12062012-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 12/06/2012 meeting summary and presentation materials +authors: + - John Mello +date: "2012-12-10T16:52:55+00:00" +aliases: + - /2012/12/phillyposh-12062012-meeting-summary-and-presentation-materials/ +--- + +- + [John Mello](http://mellositmusings.com/) gave a presentation entitled "Intro to PowerShell's Pipeline, Part 1". A copy of his slide deck and code examples are available [here](https://powershell.org/wp-content/uploads/2012/12/PhillyPosh_2012-12-05_Presentations.zip). + + + - + Script Club : + + + John R. Nahrgang and [Lido Paglia](http://paglia.org/) presented a work in progress script that returns all the members of the Local Administrators Group on a filtered list of Active Directory PCs. A copy of the script is available [here](https://powershell.org/wp-content/uploads/2012/12/PhillyPosh_2012-12-05_ScriptClub.zip). + + + + + + + - + Various other information worth mentioning. + + + In response to [last month's script club](https://powershell.org/2012/11/08/phillyposh-11012012-meeting-summary-and-presentation-materials/), Carl Larson submitted a script that splits an Active Directory users' *distinguishedName* into an array and then put's it back together so that you can get the Parent OU. This script is meant as a jumping off point for [John Mello's](http://mellositmusings.com/) expressed difficulty trying to pull a user name from a full Active Directory path. A copy of the script is available [here](https://powershell.org/wp-content/uploads/2012/12/PhillyPosh_2012-12-05_Extras.zip). diff --git a/content/articles/2012/12/powershell-deep-dives/index.md b/content/articles/2012/12/powershell-deep-dives/index.md new file mode 100644 index 000000000..874a23cdb --- /dev/null +++ b/content/articles/2012/12/powershell-deep-dives/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2012-12-18-powershell-deep-dives/ +title: PowerShell Deep Dives +authors: + - Richard Siddaway +date: "2012-12-18T19:23:45+00:00" +aliases: + - /2012/12/powershell-deep-dives/ +--- + +PowerShell Deep Dives is a book put together by the PowerShell community. I"™m editing one of the sections and have contributed some of the chapters. Manning have just started releasing it on their MEAP program. The full book will hopefully be ready in the spring. + +Best of all the royalties are being donated to worthwhile cause. + +Check it out – [http://manning.com/hicks/][1] + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2772/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2772/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2772&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: http://manning.com/hicks/ "http://manning.com/hicks/" diff --git a/content/articles/2012/12/powershell-org-our-first-year-in-review/index.md b/content/articles/2012/12/powershell-org-our-first-year-in-review/index.md new file mode 100644 index 000000000..3f995f102 --- /dev/null +++ b/content/articles/2012/12/powershell-org-our-first-year-in-review/index.md @@ -0,0 +1,36 @@ +--- +url: /articles/2012-12-21-powershell-org-our-first-year-in-review/ +title: "PowerShell.org: Our First Year in Review" +authors: + - Don Jones +date: "2012-12-21T17:28:34+00:00" +categories: + - PowerShell for Admins +aliases: + - /2012/12/powershell-org-our-first-year-in-review/ +--- + +In September 2012, we incorporated PowerShell.org, Inc., and founded PowerShell.org. Our goal was to provide a solid Q&A forum, and to act as a portal to the rest of the PowerShell community. +By any measure, we've had a great first showing. +We have more than a dozen shareholders in PowerShell.org, Inc., making this the first community-owned PowerShell organization ever. We've signed on three Platinum sponsors - [CBT Nuggets][1], [SAPIEN Technologies][2], and [Interface Technical Training][3]. We're now funded for 2-3 years of operation, including providing (upon request), gift cards to help local user groups pay for pizza and other monthly meeting expenses. +PowerShell.org is now taking an average of 18,000 visits per month from more than 12,000 unique visitors, with a total of almost 57,000 monthly page views. Our forums have helped more than 760 people answer more than 850 questions. +Microsoft's Scripting Guy, Ed Wilson, has handed off the Scripting Games for 2013, and we're preparing for a small-scale "Winter Scripting Camp" trial run that will include a purpose-built platform for reviewing events, submitting entries, and judging. And by the looks of things, that platform will run on PowerShell itself. +We've announced our first [PowerShell Summit North America][5], and have completely sold out. We're already doing initial planning for 2014, aiming for a larger venue and hoping to accommodate twice as many attendees, and to fully cover speaker travel expenses. +We've launched PowerShell People, accessible via PowerShell.net, where you can write a PowerShell script to create and post your own profile and "brag" page about your PowerShell activities and accomplishments. +We've launched three free PowerShell.org-branded [ebooks][7], and are preparing to launch our PowerShell.org TechLetter _monthly_ (!!!) e-mail newsletter complete with feature articles, news updates, and more. That's by (free) subscription only, so sign up if you haven't done so already! We've also had help from [Jason Hofferle][9] on our new Books page, rounding up all the free and commercial PowerShell books out there. +It's been a whirlwind year, and it's all thanks to you for supporting it. By asking questions in the forums, offering answers, creating your People page, registering for the Summit, signing up for the Newsletter - all of these little activities spur us all on to new heights, and we appreciate all the feedback you've offered. There will be more to come - follow the [community on Twitter][10] (and the [Summit][11] too, while you're at it) for the latest announcements.If you'd like to contribute, just drop a note in the Suggestion Box [forum][12] - whether you want to help monitor a discussion forum, write book reviews, or whatever, there's always room to contribute. +There have been some setbacks. [Will Steele][13], who had volunteered to populate our Events page, has had to step down due to health problems. Will has been a great contributor to the site and to the overall community, and we miss him. Our thoughts are with him and his family this holiday season. +As we all wind down and look forward to the New Year, I wanted to personally express my gratitude to everyone who's helped make all of this happen. Happy Holidays, Happy New Year, and I'll see you again in 2013! +Don Jones +President and CEO, PowerShell.org, Inc. + + [1]: http://cbtnuggets.com + [2]: http://sapien.com "Writing 10961: Remoting" + [3]: http://interfacett.com + [5]: /summit/ + [7]: http://powershellbooks.com + [9]: http://twitter.com/jhofferle + [10]: http://twitter.com/powershellorg + [11]: https://twitter.com/PSHSummit + [12]: https://forums.powershell.org + [13]: http://twitter.com/pen_test diff --git a/content/articles/2012/12/renaming-a-user/index.md b/content/articles/2012/12/renaming-a-user/index.md new file mode 100644 index 000000000..8befaf4c7 --- /dev/null +++ b/content/articles/2012/12/renaming-a-user/index.md @@ -0,0 +1,74 @@ +--- +url: /articles/2012-12-19-renaming-a-user/ +title: Renaming a user +authors: + - Richard Siddaway +date: "2012-12-19T15:45:34+00:00" +aliases: + - /2012/12/renaming-a-user/ +--- + +I was asked about searching a user name for a string and replacing it so that the object is renamed. + +This is a three stage activity. First get the user. Two modify the name. Three rename the object. In active directory the name attribute has the LDAP name of cn but the Microsoft AD cmdlets treta it as name. So we end up with this code: + + +`$user + += + +Get-ADUser + +-Filter + +{ + +cn + +-eq + +'GREYIEN Bill' + +} + + +$newname + += + +$user + +. + +Name + +. + +Replace + +( + +"YI" + +, + +"A" + +) + + +Rename-ADObject + +-Identity + +$user + +-NewName + +$newname + +-PassThru + +`The trick is in the middle line because the name is a string so you can use the standard string methods to perform the search and replacement. Using "“Passthru displays the object so you can see the change has taken place. + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2773/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2773/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2773&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2012/12/uk-powershell-group-sessions-for-2013/index.md b/content/articles/2012/12/uk-powershell-group-sessions-for-2013/index.md new file mode 100644 index 000000000..f0c99af71 --- /dev/null +++ b/content/articles/2012/12/uk-powershell-group-sessions-for-2013/index.md @@ -0,0 +1,28 @@ +--- +url: /articles/2012-12-20-uk-powershell-group-sessions-for-2013/ +title: UK PowerShell Group sessions for 2013 +authors: + - Richard Siddaway +date: "2012-12-20T17:17:23+00:00" +aliases: + - /2012/12/uk-powershell-group-sessions-for-2013/ +--- + +This is the list of proposed sessions for 2013. It is subject to change depending on circumstances. + +All sessions are delivered by Live Meeting on Tuesdays at 7:30 UK time + +29 January – PowerShell and Active Directory +26 February – PowerShell Advanced Functions +26 March – PowerShell cmdlets for Hyper-V +30 April – Notes from the PowerShell summit (may be changed) +21 May – Powershell Web Access +25 June – guest speaker PowerShell MVP Max Trinidad +30 July – Lessons from the Scripting Games +27 August – PowerShell eventing engine +24 September – CIM – cmdlets and sessions +29 October – PowerShell and XML +26 November – PowerShell type system – formatting and types files +17 December – PowerShell error handling + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2777/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2777/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2777&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2012/12/wmf-compatibility/index.md b/content/articles/2012/12/wmf-compatibility/index.md new file mode 100644 index 000000000..3a4e4e481 --- /dev/null +++ b/content/articles/2012/12/wmf-compatibility/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2012-12-20-wmf-compatibility/ +title: WMF compatibility +authors: + - Richard Siddaway +date: "2012-12-20T16:18:43+00:00" +aliases: + - /2012/12/wmf-compatibility/ +--- + +The Windows Management Framework 3.0 has been released as a Windows update. + +However there are some compatibility issues as documented on the PowerShell team blog. if you haven"™t see the post it here + +[http://blogs.msdn.com/b/powershell/archive/2012/12/20/windows-management-framework-3-0-compatibility-update.aspx][1] + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2775/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2775/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2775&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: http://blogs.msdn.com/b/powershell/archive/2012/12/20/windows-management-framework-3-0-compatibility-update.aspx "http://blogs.msdn.com/b/powershell/archive/2012/12/20/windows-management-framework-3-0-compatibility-update.aspx" diff --git a/content/articles/2012/12/writing-10961-first-module-in-for-review/index.md b/content/articles/2012/12/writing-10961-first-module-in-for-review/index.md new file mode 100644 index 000000000..29aef9d4b --- /dev/null +++ b/content/articles/2012/12/writing-10961-first-module-in-for-review/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2012-12-24-writing-10961-first-module-in-for-review/ +title: "Writing 10961: First Module in For Review" +authors: + - Don Jones +date: "2012-12-24T15:28:20+00:00" +categories: + - PowerShell for Admins +aliases: + - /2012/12/writing-10961-first-module-in-for-review/ +--- + +Microsoft course 10961, which will be a 5-day course on PowerShell 3.0, is officially in development! We received signoff on the outline this week, and I've submitted a first module for review. A big part of that review is making sure I'm using the template properly, as the authoring tool is fairly complex. It does, however, offer (more-or-less) one-touch publishing of the student manual, instructor slide deck, OneNote trainer pack, Lab Answer Key, and other documents, so it's worth a bit of complexity. +The outline process, along with the actual details of the writing, has been challenging. I pored through the feedback for 10325A, and the only consistent thing I took away was a general feeling that students and instructors worldwide are _really, really_ different! +Some European instructors cautioned against running class longer than 3 or 4pm. US instructors pointed out that a short day ending at 3pm often left students feeling shortchanged. Er. To try and accommodate both crowds, most days in 10961A will end in a significant lab, letting folks kind of free-form the end of the day however they want. +Many folks pointed out that they liked to get into variables early in the course, not so much for scripting purposes but to simplify command-line stuff. Other instructors suggested I avoid variables too early, since they created the impression of a programming course, which scared off some students. Again... er. So I'm officially waffling on that one: I don't _formally_ cover variables until fairly late in the course (well, midway), but I _introduce_ them quite early. It means students can potentially see and use variables on day 1, although I don't get into all the details about how they work, naming rules, and so on. The way I'm writing them in, instructors also have the option to just gloss over them or skip them entirely if their students aren't ready. +I asked a few MCTs to look over some of my draft material and give me a delivery time estimate. I had pacing ranging from 2 minutes per slide to almost 8. Er. So I'm going with fairly simple slides that have minimal bullets (always, in most folks' opinion, the right thing to do). Instructors can then decide how deeply they'll cover the material based on their class' needs. It does mean the instructor will need to be familiar with the material in advance - this will be a tough course to just pick up and teach ad-hoc. As, I believe, it should be. +If there's a theme here, it's that _you need a good instructor_ teaching you. As a courseware author, all I can really do is provide raw material, and an instructional design that leads _most_ students through a sensible learning progression. But the instructor's value-add is to be able to switch things up to meet the specific needs of their class. Every time an instructor tells me, "oh, I always move Module 11 to the second day of class," I don't take it as a sign of bad instructional design - I take it as the sign of a good instructor who hopefully is making the change to benefit his class. But classes vary widely, and I kind of have to write for the worst-case scenario. That can sometimes make a course seem overly timid - but that's why the instructor is there, to add their own value, experience, examples, and demonstrations to further instruct and clarify. +So the one thing I'm keeping in mind as I write 10961 is to _leave room for the instructor to shine._ Don't fill the course so full of information that the instructor has no wiggle room. Give the instructor the ability to go slowly and less deep for classes that need it, and to go faster and deeper for classes that need _that._ Provide instructors with notes on what can be skipped if necessary, and what's absolutely critical, so that they can triage. I'll be doing a prep video to help provide even more context to instructors in that regard, and to let them know that customizing the delivery is absolutely okay, provided they're doing so with an understanding of the original instructional design. +Fingers crossed. diff --git a/content/articles/2012/12/writing-10961-remoting/index.md b/content/articles/2012/12/writing-10961-remoting/index.md new file mode 100644 index 000000000..a53fd0021 --- /dev/null +++ b/content/articles/2012/12/writing-10961-remoting/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2012-12-21-writing-10961-remoting/ +title: "Writing 10961: Remoting" +authors: + - Don Jones +date: "2012-12-21T15:26:43+00:00" +categories: + - PowerShell for Admins +aliases: + - /2012/12/writing-10961-remoting/ +--- + +As I write this, we're close to sign-off on the outline of 10961A, which is a new 5-day Microsoft course on PowerShell v3. I sat down yesterday and starting doing some detailed-level design work on the proposed Module 9, which will cover PowerShell Remoting. +I _love_ Remoting (and yes, I capitalize the "R" when referring to the specific feature, much as I would for Workflow). And although I've taught Remoting over and over and over since it was introduced in v2, although with this course I'm trying something a bit new. +I'm going to start by covering the basics: What Remoting is, what WS-MAN is (and yes, I know it's formally called WS-Management, but you never see it referred to that way in-product), what WinRM is, and so on. I cover Invoke-Command and Enter-PSSession. Then I get into some advanced stuff, primarily covering how to pass arguments to Invoke-Command via its -ArgumentList parameter and an in-scriptblock Param() block. Surprisingly, _this isn't covered in the examples of Invoke-Command in the help._ I was shocked to discover that. I need to use that technique in Module 10, so I'm covering it in 9. +Then I get into sessions, and I also cover disconnected sessions. Then the cool begins. +I cover both implicit remoting (which is tons easier to do in v3) and delegated administration via custom session configurations (also vastly easier in v3). In the penultimate lab for the module, students will create a Remoting endpoint that contains a single command (Set-ADAccountPassword), have that command run under Domain Admin credentials, and restrict the endpoint to members of a HelpDesk domain user group. Voila, delegated administration! We don't go so far as to build a GUI tool atop it all, but that would be out of scope for this course. As-is, the lab covers an _extremely_ real-world use of PowerShell and Remoting, and does it in a very practical and production-ready way. I think it's gonna be awesome. diff --git a/content/articles/2012/12/writing-10961-the-ultimate-lab/index.md b/content/articles/2012/12/writing-10961-the-ultimate-lab/index.md new file mode 100644 index 000000000..aa4ecdd51 --- /dev/null +++ b/content/articles/2012/12/writing-10961-the-ultimate-lab/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2012-12-18-writing-10961-the-ultimate-lab/ +title: "Writing 10961: The Ultimate Lab" +authors: + - Don Jones +date: "2012-12-18T20:50:30+00:00" +categories: + - PowerShell for Admins +aliases: + - /2012/12/writing-10961-the-ultimate-lab/ +--- + +My company has been contracted by Microsoft to design and author Microsoft Official Curriculum (MOC) course 10961A, Automating Administration with Windows PowerShell v3. While there is no announced release date I can share, I did want to share some of the experience. +As I write this, 10961A's proposed outline is going through several review cycles. In the meantime, I wanted to sit down and start doing some detail-level design on some of the more complex labs in the course - the most complex of which is a proposed Module 10, consisting of little more than a big, 2-hour lab where you write a script to provision a newly installed Server Core computer. +This, for me, is the ultimate lab. It's practical, meaning it focuses on a scenario that's extremely real-world. It's also not "perfect," meaning it doesn't throw you into an everything-just-works environment and hand-hold you though a few self-guided demos. Initiating communications between a domain client and a non-domain machine is tricky in PowerShell, and automating that is not entirely straightforward. +The approach I'm planning to take will break down all the major sub-tasks, and then walk students through some of the considerations for each. What commands will you need? What information will you need up front in order to run them? Where will you get that information - and how? I think it'll be a very nice "putting it all together" module (although there are two modules after it, so it isn't exactly the end of the course). It should occupy the entire afternoon of the course's fourth day (Thursday), which makes for a nice open-ended wrap to that day (meaning faster students can finish and leave early, while leaving time for slower students to work through everything without feeling rushed). +In the lab, you'll write a parameterized script that saves off your old Remoting TrustedHosts list, queries DHCP for the new server's IP address, and saves that IP address into your TrustedHosts. You'll make a Remoting connection to the new machine and have it join itself to the domain while renaming itself, wait for it to reboot, and then add a role (IIS) to it. You wrap by putting TrustedHosts back to where it came from. +This is actually a trimmed-down, more methodical version of a workshop I just did last week at Live! 360 in Orlando. That workshop took four hours, which I don't have in the class' time budget, so I trimmed out a few things that were cool, but not entirely necessary, such as testing to see if a DHCP reservation already exists before creating one (without testing, you can potentially get an error, but it's non-tragic). +I'm looking forward to getting into the actual writing of the module once the outline is approved; I think this'll really be the highlight of the course. It replaces a module in the older 10325A course (which I also wrote) where you break down a script _someone else wrote,_ customizing it to run in your environment. While I think that's a useful skill, the feedback I got was that it wasn't the most interesting lab possible, and that the script I provided (written by Jeffery Hicks, actually) was pretty complex given the time allotted. This new lab provides the same beginning-to-end scripting opportunity, but hopefully folks will find it to be a lot more practical and useful, both educationally and when they get back to the office. diff --git a/content/articles/2012/_index.md b/content/articles/2012/_index.md new file mode 100644 index 000000000..195ba3de2 --- /dev/null +++ b/content/articles/2012/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from 2012" +description: "PowerShell.org Articles published in 2012." +--- diff --git a/content/articles/2013-01-03-displaying-data-from-multiple-servers-as-html.md b/content/articles/2013-01-03-displaying-data-from-multiple-servers-as-html.md deleted file mode 100644 index 08faa238c..000000000 --- a/content/articles/2013-01-03-displaying-data-from-multiple-servers-as-html.md +++ /dev/null @@ -1,273 +0,0 @@ ---- -title: Displaying data from multiple servers as HTML -authors: - - Richard Siddaway -date: "2013-01-03T19:12:53+00:00" -aliases: - - /2013/01/displaying-data-from-multiple-servers-as-html/ ---- - -A forum question regarding retrieving WMI based data from multiple servers and displaying it as HTML was interesting. I would approach it like this - - -`$servers - -= - -Get-Content - --Path - -C:\scripts\servers.txt - - -$data - -= - -@( - -) - - -foreach - -( - -$server - -in - -$servers - -) - -{ - - -$compdata - -= - -New-Object - --TypeName - -PSObject - --Property - -@{ - - -Computer - -= - -$server - - -Contactable - -= - -$false - - -LastBootTime - -= - -"" - - -AllowTSConnections - -= - -$false - - -} - - -if - -( - -Test-Connection - --ComputerName - -$server - --Quiet - --Count - -1 - -) - -{ - - -$compdata - -. - -Contactable - -= - -$true - - -$os - -= - -Get-WmiObject - --Class - -Win32_OperatingSystem - --ComputerName - -$server - - -$compdata - -. - -LastBootTime - -= - -$os - -. - -ConvertToDateTime - -( - -$os - -. - -LastBootUpTime - -) - - -$ts - -= - -Get-WmiObject - --Namespace - -root\cimv2\terminalservices - --Class - -Win32_TerminalServiceSetting - --ComputerName - -$server - --Authentication - -PacketPrivacy - - -if - -( - -$ts - -. - -AllowTSConnections - --eq - -1 - -) - -{ - - -$compdata - -. - -AllowTSConnections - -= - -$true - - -} - - -} - - -$data - -+= - -$compdata - - -} - - -$data - - -$data - -| - -ConvertTo-Html - -| - -Out-File - --FilePath - -c:\scripts\report.html - - -Invoke-Item - --Path - -c:\scripts\report.html - -`Put the list of servers in a text file & read it in via get-content. - -use foreach to iterate over the list of servers. - -For each server create an object and then test if you can ping the server. Note that the default setting for Contactable is $false so don"™t need to deal with that case. - -Get the WMI data and set the properties on the object. - -Add the object to an array - -After you"™ve hit all the servers use ConvertTo-Html and write to a file with out-file. - -use Invoke-Item to view the report - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2780/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2780/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2780&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-03-ensuring-that-parameter-values-are-passed-to-your-function.md b/content/articles/2013-01-03-ensuring-that-parameter-values-are-passed-to-your-function.md deleted file mode 100644 index 5eca08998..000000000 --- a/content/articles/2013-01-03-ensuring-that-parameter-values-are-passed-to-your-function.md +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: Ensuring that parameter values are passed to your function -authors: - - Richard Siddaway -date: "2013-01-03T18:46:59+00:00" -aliases: - - /2013/01/ensuring-that-parameter-values-are-passed-to-your-function/ ---- - -A question on the forum about a function had me thinking. The user had defined two parameters for the function and then used Read-Host to get the values. - -NO - -Much better way is to use an advanced function and make the parameters mandatory - - -`function - -Getuserdetails - -{ - - -[ - -CmdletBinding - -( - -) - -] - - -param - -( - - -[ - -parameter - -( - -Mandatory - -= - -$true - -) - -] - - -[string] - -$Givenname - -, - - -[ - -parameter - -( - -Mandatory - -= - -$true - -) - -] - - -[string] - -$Surname - - -) - - -Get-ADUser - --properties - -telephonenumber - -, - -office - --Filter - -{ - -( - -GivenName - --eq - -$Givenname - -) - --and - -( - -Surname - --eq - -$Surname - -) - -} - - -} - -`If you call the function and don"™t give values for the parameters you will be prompted for them - -The other point is the "“Filter property on get-aduser. Don"™t put quotes round the variable - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2779/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2779/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2779&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-03-powershell-workflow-articles.md b/content/articles/2013-01-03-powershell-workflow-articles.md deleted file mode 100644 index 0c68ba5fd..000000000 --- a/content/articles/2013-01-03-powershell-workflow-articles.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: PowerShell workflow articles -authors: - - Richard Siddaway -date: "2013-01-03T12:01:51+00:00" -aliases: - - /2013/01/powershell-workflow-articles/ ---- - -I"™ve written a series of articles on PowerShell workflows that are appearing on the Scripting Guy blog. The first two in the series have been published at: - -[http://blogs.technet.com/b/heyscriptingguy/archive/2012/12/26/powershell-workflows-the-basics.aspx][1] - -[http://blogs.technet.com/b/heyscriptingguy/archive/2013/01/02/powershell-workflows-restrictions.aspx][2] - - - -Enjoy - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2778/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2778/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2778&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: http://blogs.technet.com/b/heyscriptingguy/archive/2012/12/26/powershell-workflows-the-basics.aspx "http://blogs.technet.com/b/heyscriptingguy/archive/2012/12/26/powershell-workflows-the-basics.aspx" - [2]: http://blogs.technet.com/b/heyscriptingguy/archive/2013/01/02/powershell-workflows-restrictions.aspx "http://blogs.technet.com/b/heyscriptingguy/archive/2013/01/02/powershell-workflows-restrictions.aspx" diff --git a/content/articles/2013-01-04-finding-the-domain-controller-that-authenticated-you.md b/content/articles/2013-01-04-finding-the-domain-controller-that-authenticated-you.md deleted file mode 100644 index e525c538d..000000000 --- a/content/articles/2013-01-04-finding-the-domain-controller-that-authenticated-you.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Finding the domain controller that authenticated you -authors: - - Richard Siddaway -date: "2013-01-04T17:57:56+00:00" -aliases: - - /2013/01/finding-the-domain-controller-that-authenticated-you/ ---- - -A question on my blog asked how do you know which domain controller you are running against when you search Active Directory. Unless you explicitly instruct your script to use a specific domain controller it will use the one to which you authenticated. - -You can find the DC to which you authenticated with this simple function - -function get-logonserver{ -$env:LOGONSERVER -replace "\\", "" -} - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2781/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2781/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2781&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-04-writing-10961-trademarks.md b/content/articles/2013-01-04-writing-10961-trademarks.md deleted file mode 100644 index fef859f83..000000000 --- a/content/articles/2013-01-04-writing-10961-trademarks.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Writing 10961: Trademarks" -authors: - - Don Jones -date: "2013-01-04T16:09:02+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/01/writing-10961-trademarks/ ---- - -Microsoft's a big company, and that makes it a big target for lawsuits. We all know that. But what doesn't always sink in is how careful the company has to be. -For example, in Microsoft Official Curriculum course 10961, Automating Administration with Windows PowerShell 3.0, I have to type _Windows PowerShell_ every single time. I've actually been using "the shell" a lot, just to break things up a bit. We all casually refer to the shell as _PowerShell,_ but Microsoft never does. Their trademark is on _Windows_ PowerShell, and believe it or not someone has a trademark on _PowerShell._ I think it's a sporting equipment manufacturer. -As I'm writing the course, I started using _Windows PowerShell_ on first reference, and then naturally - for me, at least - used just _PowerShell_ from then on. Nope. Had to go fix 'em all. -Weird, huh? -I mean, technically... legally... you don't trademark an entire word. You trademark it for use in a particular field. So it's theoretically possible for Microsoft to own the trademark _PowerShell_ in the world of computer software, and another company to own the same trademark for making backpacks or ski boots or whatever. But... I get it. You gotta be careful, and it's easier just to not overlap with someone else's trademark. -Maybe they should have named it FrabulouShellâ„¢ instead, just to be really sure. diff --git a/content/articles/2013-01-05-number-of-processors-in-a-box.md b/content/articles/2013-01-05-number-of-processors-in-a-box.md deleted file mode 100644 index 0d314ac90..000000000 --- a/content/articles/2013-01-05-number-of-processors-in-a-box.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Number of processors in a box -authors: - - Richard Siddaway -date: "2013-01-05T12:21:23+00:00" -aliases: - - /2013/01/number-of-processors-in-a-box/ ---- - -WMI enables you find the number of processors in your system: - -PS> Get-WmiObject -Class Win32_ComputerSystem | fl Number* - -NumberOfLogicalProcessors : 2 -NumberOfProcessors : 1 - -This works fine for Windows Vista/Windows 2008 and above. - -Earlier versions of Windows mis-report the number of processors "“ it counts the number of logical processors reports it as the number of physical processors. - -Win32_Processor has the same problem on Windows 2003 and below. - -There is a hotfix available from [http://support.microsoft.com/kb/932370][1] that will correct the behaviour of these two WMI classes so that they report correctly - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2782/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2782/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2782&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: http://support.microsoft.com/kb/932370 "http://support.microsoft.com/kb/932370" diff --git a/content/articles/2013-01-05-select-string-confusion.md b/content/articles/2013-01-05-select-string-confusion.md deleted file mode 100644 index 7012d6e00..000000000 --- a/content/articles/2013-01-05-select-string-confusion.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Select-String confusion -authors: - - Richard Siddaway -date: "2013-01-05T13:08:59+00:00" -aliases: - - /2013/01/select-string-confusion/ ---- - -I have seen a lot of confusion recently over the use of Select-String. - -One mis-conception is that you need to use Get-Content to pipe the file contents into Select-String. Not so. Select-String will read the file for you. - -If you just want to scan the files in a single folder to find a specific string then Select-String can do the work for you - -Select-String -Path C:\Test\*.txt -Pattern "trial" "“SimpleMatch - -If you need to work through a folder structure add get-ChildItem to the pipeline - -Get-ChildItem -Path C:\Test -Filter *.txt -Recurse | -Select-String -Pattern "trial" "“SimpleMatch - -One line of PowerShell gives you a very powerful way of filtering the files recursively and testing their contents for a given string - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2783/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2783/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2783&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-07-phillyposh-01032013-meeting-summary-and-presentation-materials.md b/content/articles/2013-01-07-phillyposh-01032013-meeting-summary-and-presentation-materials.md deleted file mode 100644 index a13eb5db1..000000000 --- a/content/articles/2013-01-07-phillyposh-01032013-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: PhillyPoSH 01/03/2013 meeting summary and presentation materials -authors: - - John Mello -date: "2013-01-07T18:23:39+00:00" -aliases: - - /2013/01/phillyposh-01032013-meeting-summary-and-presentation-materials/ ---- - -1. User group member [Greg Martin][1] gave a presentation on Active Directory and PowerShell. A copy of his presentation can be found [here][2] and included the following topics: - 1. Building a copy of your production AD domain - 2. Notifying users of expiring passwords - 3. Dealing with expired computer accounts - 2. User group member [Sunny Chakraborty][3] gave a presentation on how to use the techniques of Prof [George Poyla][4] and Chess Grandmasters in order to improve your scripting skills. A copy of his presentation materials can be found [here][2]. - 3. Various other information worth mentioning - 1. User group member [Sunny Chakraborty][3] submitted a list of PowerShell commands to retrieve Dell specific WMI objects. A copy of that list can be found [here][5]. - 2. Another group member (Name forthcoming!) submitted a list of PowerShell commands to retrieve HP Insight manager WMI Objects. A copy of that list can be found [here][5]. - 3. [Do not install Windows Management Framework 3.0 (PowerShell 3.0) on the following systems][6], if you have please uninstall it so that you do not run into any issues with subsequent patches. - 1. System Center 2012 Configuration Manager running on any Windows Server 2008 or 2008 R2 version - 2. System Center Virtual Machine Manager running on any Windows Server 2008 or 2008 R2 version - 3. Microsoft Exchange 2007 or 2010 running on any Windows Server 2008 or 2008 R2 version - 4. Microsoft SharePoint 2010 running on any Windows Server 2008 or 2008 R2 version - 5. Windows Small Business Server 2008 or 2011 - 4. On Twitter? Follow the [#PowerShell][7] hashtag or check our [Lido Paglia"™s][8] [Powershell Twitter List][9]. - 5. On Google+? Join the [PowerShell community][10]. - 6. Still haven"™t purchased a copy of [Learn PowerShell in a Month of Lunches][11] or any other PowerShell book on [Manning Publications][12]? Signup for their [deal of the day][13] newsletter or check the front page every day to see when it"™s on sale! - 7. If you"™re looking for .NET assembly browser and decomplier, take a look at [Sunny Chakraborty"™s][3] favorite utility: [ILSpy][14]. - -Attachments: - - * [PhillyPosh_2013-01-03_Presentations][2] - * [PhillyPosh_2013-01-03_Extras][5] - - [1]: http://tiki.gmartin.org/ "Greg's blog" - [2]: https://powershell.org/wp-content/uploads/2013/01/PhillyPosh_2013-01-03_Presentations.zip - [3]: http://tekout.wordpress.com/ - [4]: http://en.wikipedia.org/wiki/George_P%C3%B3lya - [5]: https://powershell.org/wp-content/uploads/2013/01/PhillyPosh_2013-01-03_Extras.zip - [6]: http://blogs.msdn.com/b/powershell/archive/2012/12/20/windows-management-framework-3-0-compatibility-update.aspx - [7]: https://twitter.com/search?q=%23Powershell&src=typd - [8]: http://paglia.org/ - [9]: https://twitter.com/nicemarmot/powershellers - [10]: https://plus.google.com/u/0/communities/114336958783305019912 - [11]: http://www.manning.com/jones3/ - [12]: http://www.manning.com/ - [13]: http://www.manning.com/free/dotd.html - [14]: http://ilspy.net/ diff --git a/content/articles/2013-01-07-select-string-scenarios-fixed-columns.md b/content/articles/2013-01-07-select-string-scenarios-fixed-columns.md deleted file mode 100644 index 6e887ff10..000000000 --- a/content/articles/2013-01-07-select-string-scenarios-fixed-columns.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: "Select-String scenarios \"“ fixed columns" -authors: - - Richard Siddaway -date: "2013-01-07T22:43:53+00:00" -aliases: - - /2013/01/select-string-scenarios-fixed-columns/ ---- - -I had some questions come in after mu recent post regarding select-string. I"™ll answer them as a series of posts. First off: - -_I'm recursively searching thru many files, and want to pull out specific data in 'fixed column' positions from the line(s) that match the phrase I'm seeking, i.e. position 10 thru 15 of the line or position 6 thru the end of the line (which might be unknown). -What is your preferred method for handling this situation?_ - -I started by creating a file - -12345ABCD123451234512345 -1234512345ABCD1234512345 -12345ABCD123451234512345 -12345abcd123451234512345 -123451234512345ABCD12345 -12345ABCD123451234512345 -123451234512345ABCD12345 -12345123451234512345ABCD -1234512345ABCD1234512345 - -I want to pick out the string ABCD but ONLY when its in columns6-9. A quick inspection shows I should get four lines returned. - -If you go with a simple match you get all lines returned - -PS> Select-String -Path c:\test\*.txt -Pattern "ABCD" -SimpleMatch - -C:\test\fxedcol.txt:1:12345ABCD123451234512345 -C:\test\fxedcol.txt:2:1234512345ABCD1234512345 -C:\test\fxedcol.txt:3:12345ABCD123451234512345 -C:\test\fxedcol.txt:4:12345abcd123451234512345 -C:\test\fxedcol.txt:5:123451234512345ABCD12345 -C:\test\fxedcol.txt:6:12345ABCD123451234512345 -C:\test\fxedcol.txt:7:123451234512345ABCD12345 -C:\test\fxedcol.txt:8:12345123451234512345ABCD -C:\test\fxedcol.txt:9:1234512345ABCD1234512345 - -Notice the match is case INSENSITIVE - -This means we get into the world of regular expressions "“ joy! - -This will work - -Select-String -Path c:\test\*.txt -Pattern "\A.{5}ABCD" - -The regular expression means match any 5 characters followed by ABCD starting at the beginning of the string. - -Alternatively you could use - -Select-String -Path c:\test\*.txt -Pattern "\A\w{5}ABCD" - -This is the same except its accepting any word character (letter, digit, math symbol and punctuation) - -These two searches are case INSENSITIVE - -if you need case sensitivity then compare - -Select-String -Path c:\test\*.txt -Pattern "\A\w{5}ABCD" -CaseSensitive -Select-String -Path c:\test\*.txt -Pattern "\A\w{5}abcd" -CaseSensitive - -or - -Select-String -Path c:\test\*.txt -Pattern "\A.{5}ABCD" -CaseSensitive -Select-String -Path c:\test\*.txt -Pattern "\A.{5}abcd" -CaseSensitive - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2784/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2784/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2784&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-08-3-updated-free-powershell-ebooks-in-january-2013.md b/content/articles/2013-01-08-3-updated-free-powershell-ebooks-in-january-2013.md deleted file mode 100644 index 1796d76c6..000000000 --- a/content/articles/2013-01-08-3-updated-free-powershell-ebooks-in-january-2013.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: 3 Updated Free PowerShell eBooks in January 2013! -authors: - - Don Jones -date: "2013-01-08T17:06:34+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/01/3-updated-free-powershell-ebooks-in-january-2013/ ---- - -I've been working to update my three free PowerShell ebooks for this month: - - * _Secrets of PowerShell Remoting_ - * _Creating HTML Reports in PowerShell_ - * _Making Historical and Trend Reports in PowerShell_ - -The updated versions will be made available to subscribers of the PowerShell.org TechLetter on January 15th. If you're not already signed up to receive this, you can [sign up right now][1]. The January issue will also feature a walkthrough article of how I started creating a new, better ConvertTo-HTML command, which gets used in the ebook on HTML reporting. Going forward, I'll be making updated ebooks available primarily through the TechLetter. -If you're not a subscriber and don't want to be, well fine. I'll just take my ball and go play in someone else's sandbox. Kidding . I'll post the updates at the end of January. However, right now access to the books still requires a subscription to the newsletter, although you can immediately unsubscribe if you want to. I had to put that "hurdle" in the way because we were losing a ton of bandwidth to people direct-linking the download files. Mostly from China, for some reason. You're welcome to host the files on your own server, if you want to (they're licensed for that), but bandwidth costs me money, so I'm trying to conserve a bit. -Anyway, keep an eye out for the TechLetter in your inbox on Jan 15th. Check those spam filters, and make sure newsletter@powershell.org is in your address book, so that your mail server will know it's a legitimate sender. - - [1]: https://powershell.org/newsletter "Select-String scenarios "“ fixed columns" diff --git a/content/articles/2013-01-08-select-string-information-on-matching-files.md b/content/articles/2013-01-08-select-string-information-on-matching-files.md deleted file mode 100644 index f838b7a36..000000000 --- a/content/articles/2013-01-08-select-string-information-on-matching-files.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: "Select-String\"“information on matching files" -authors: - - Richard Siddaway -date: "2013-01-08T21:31:36+00:00" -aliases: - - /2013/01/select-string-information-on-matching-files/ ---- - -Following on from yesterday"™s post this is the second question: - -_Since I'm recursively searching thru files to find matching phrases, how can I obtain other directory service information about the matching files file(s) – this is more of a methodology technique question because I realize there are multiple ways of achieving this?_ - -You could do something like this - -foreach ($find in Select-String -Path c:\test\*.txt -Pattern "\A\w{5}ABCD" -List){ -Get-ChildItem -Path $find.Path -} - -Run the Select-String as before but only get the first match in each file. Use foreach to access the match information and use the Path property to feed into Get-ChildItem. - -If you want things to be a bit simpler "“ break it down to: - -$finds = Select-String -Path c:\test\*.txt -Pattern "\A\w{5}ABCD" -List -foreach ($find in $finds){ -Get-ChildItem -Path $find.Path -} - -Alternatively if you want the PowerShell one-liner approach try - -Get-ChildItem -Path (Select-String -Path c:\test\*.txt -Pattern "\A\w{5}ABCD" -List).Path - -Personally I would probably go for the simple approach - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2785/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2785/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2785&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-09-select-string-finding-the-first-and-last-matches.md b/content/articles/2013-01-09-select-string-finding-the-first-and-last-matches.md deleted file mode 100644 index 72c50bedf..000000000 --- a/content/articles/2013-01-09-select-string-finding-the-first-and-last-matches.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: "Select-String \"“ finding the first and last matches" -authors: - - Richard Siddaway -date: "2013-01-09T17:55:40+00:00" -aliases: - - /2013/01/select-string-finding-the-first-and-last-matches/ ---- - -Today's question concerns finding the first and last matches in a file - -Sometimes, I need to make two passes at seeking content in this file, once for the first occurrence; and a second grep for obtaining the last occurrence of a phrase. After the second pass, I figure placing the values into an array is the best way, then need to combine first and last values onto one output line {somewhere else}. - -Let's consider the file we used in the first article in the series – - -The file looks like this - -12345ABCD123451234512345 -1234512345ABCD1234512345 -12345ABCD123451234512345 -12345abcd123451234512345 -123451234512345ABCD12345 -12345ABCD123451234512345 -123451234512345ABCD12345 -12345123451234512345ABCD -1234512345ABCD1234512345 - -If you this select-string - -Select-String -Path c:\test\*.txt -Pattern "\A\w{5}ABCD - -you will get multiple matches - -C:\test\fixedcol.txt:1:12345ABCD123451234512345 -C:\test\fixedcol.txt:3:12345ABCD123451234512345 -C:\test\fixedcol.txt:4:12345abcd123451234512345 -C:\test\fixedcol.txt:6:12345ABCD123451234512345 - -So, how can we find the first and last matches – preferably in one pass. - -I think the easiest way is to use the trick from the last article - -$finds = Select-String -Path c:\test\*.txt -Pattern "\A\w{5}ABCD" - -$finds[0]$finds[-1] - -The $finds variable conatins a collection of the MatchInfo objects created by Select-String. The first match will always have the index of 0 and the last can always be referenecd by an index of -1. This information is returned: - -C:\test\fixedcol.txt:1:12345ABCD123451234512345 -C:\test\fixedcol.txt:6:12345ABCD123451234512345 - -If you want this in an object for further processing – try something like this - -Get-ChildItem -Path c:\test -Filter *.txt -Recurse | -foreach { - -$finds = $null -$finds = Select-String -Path $_.Fullname -Pattern "\A\w{5}ABCD" - -if ($finds){ - - $props = [ordered]@{ - Filename = $finds[0].Path - FirstLine = $finds[0].LineNumber - FirstData = $finds[0].Line - LastLine = $finds[-1].LineNumber - LastData = $finds[-1].Line - } - New-Object -TypeName PSObject -Property $props -} -} - -Use Get-ChildItem to find the files. For each of them run Select-String with your pattern. If you get any matches create an object holding the file path and your required properties. In this case I'm taking the first and last line numbers with the match data. - -If you only have a single match in a file you will get the same data in the First\* and Last\* properties as the first and last match are the same. You could put another if statement to control this so the Last* properties aren't populated if you want. - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2787/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2787/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2787&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-09-workflow-article-3.md b/content/articles/2013-01-09-workflow-article-3.md deleted file mode 100644 index 03dc71d61..000000000 --- a/content/articles/2013-01-09-workflow-article-3.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Workflow article 3 -authors: - - Richard Siddaway -date: "2013-01-09T17:19:28+00:00" -aliases: - - /2013/01/workflow-article-3/ ---- - -The next in the series of articles on PowerShell workflows that are appearing on the Scripting Guy blog has been published. - -The articles in the series that have been published are: - - - - - -Look for the next article in one weeks time. - -Until then Enjoy! - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2786/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2786/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2786&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-10-writing-10961a-the-damn-variables.md b/content/articles/2013-01-10-writing-10961a-the-damn-variables.md deleted file mode 100644 index 0f5bdb7d1..000000000 --- a/content/articles/2013-01-10-writing-10961a-the-damn-variables.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "Writing 10961A: The Damn Variables" -authors: - - Don Jones -date: "2013-01-10T17:51:07+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/01/writing-10961a-the-damn-variables/ ---- - -When I wrote Microsoft course 10325A, their original 5-day Windows PowerShell course, I saved variables until Module 11. My thought at the time was to focus on teaching just what students needed for what they were about to do - and no more. "Just in time learning" can be effective, because it lets you immediately experiment with whatever you've just learned, and helps minimize the need to store up concepts for later use. I'd also had a lot of class experiences where bringing up variables too soon engaged a defensive mechanism in some students: "I'm not a programmer, variables are programming, and I'm shutting down right now." -The biggest piece of MCT feedback from 10325A was, "don't do that." Trainers told me they were often teaching module 11 much sooner. Jeff Hicks had what I think is the best explanation for why: Without variables, you're locked into the one-liner approach in PowerShell. While one-liners are _neat,_ and effective, they aren't always easy to read or to mentally de-construct. Using variables earlier in the course, Jeff argued, let you break things down into smaller logical chunks. -Now, one thing I've had to accept in writing 10961A is that I can't please everyone. The feedback on 10325A is incredibly contradictory. Some MCTs want more programming, others want none at all. Some want classes to run 9am-4pm; others want 8am-6pm. Some want less content on the slides (actually, most wanted that). So what I decided to do is try and provide the material to accommodate what it felt like everyone was asking for, and rely on MCT's ability to mix things up as needed for their classes. -(As an aside, I do think some MCTs jump into the "programming" aspect of PowerShell too quickly. It's fine if you've got a room of people with programming experience, but it keeps students from learning some valuable fundamentals and turns the class into a "scripting" class awfully quickly. I'm not sure every MCT has done a really thorough cognitive analysis of their class results to determine if the programming-first approach is best; my experience with _Month of Lunches_ readers suggest it isn't.) -But I still didn't want to do the full deep-dive on variables super-early in the course. So here's what I think I'm doing: early in the course, you'll be exposed to variables, in a very simplistic sense. They're described as a named place to store objects, and used to de-construct a complex one-liner into a multi-line series of logical steps. Early in the course, I don't go into naming rules, the double quotes tricks, or anything else. You learn exactly enough about variables for the task at hand - and no more. -In module 7, which is right before the module where you turn a command-line into a parameterized script, I cover variables more formally. I cover their rules, usage, double quotes, all that stuff. So you learn a wee bit about variables early, and then learn the full details later - _just_ before you need to use variables more seriously in a script. So, keeping with the just-in-time learning. -The variables material is broken out into its own lesson in module 7, so an MCT hell-bent on teaching everything about variables right up-front can do so.While the feedback from 10325A suggests that MCTs think every course should be designed for the way _they_ teach, I'm not sure they all realize how _differently_ they all teach. The best I can do is provide the material in standalone chunks that MCTs can rearrange as needed. After all, the whole point of having a live instructor, as opposed to a recording, is the instructor's ability to teach to your specific needs. So MCTs will have to be happy rearranging the material a bit as-needed; my outline is the _recommnded_ approach that will work best across the broadest array of students, but it isn't perfect for _everyone._ Nothing could be. -As a point of reference, 10961A doesn't dive into scripting as deeply as 10325A did. PowerShell 3.0 has enough new, extra stuff that a 5-day course doesn't allow for deep programming topics. You do take a command and walk it through to being a script module, so you _see_ the range of scripting options, but you don't _practice_ them in depth. It's inch-deep, mile-wide coverage of scripting, as opposed to something deeper and more focused. I'm hoping Microsoft can find budget for a full-on "scripting/toolmaking" class in the future, but 10961A ain't it. -So... what do you think of this approach? diff --git a/content/articles/2013-01-11-select-string-keeping-in-context.md b/content/articles/2013-01-11-select-string-keeping-in-context.md deleted file mode 100644 index f5f27d99c..000000000 --- a/content/articles/2013-01-11-select-string-keeping-in-context.md +++ /dev/null @@ -1,2239 +0,0 @@ ---- -title: "Select-string \"“ keeping in context" -authors: - - Richard Siddaway -date: "2013-01-11T19:43:05+00:00" -aliases: - - /2013/01/select-string-keeping-in-context/ ---- - -Today"™s question involves using the Context parameter: - - - *It's probably just me, but I've never gotten the switch '-context 5 **or -context 2, 7′ to work predictably – where 5 lines before and after or 2 -before and 7 after will come out – have you?* - - - Let"™s start by looking at the default behaviour of select-string using the search pattern you"™ve seen previously: - - - PS> Select-String -Path c:\test\*.txt -Pattern "\A\w{5}ABCD" - - - C:\test\fixedcol.txt:1:12345ABCD123451234512345 - - - C:\test\fixedcol.txt:3:12345ABCD123451234512345 - - - C:\test\fixedcol.txt:4:12345abcd123451234512345 - - - C:\test\fixedcol.txt:6:12345ABCD123451234512345 - - - C:\test\fixedcol2.txt:1:12345ABCD123451234512345 - - - As you can see the line which matches your pattern is returned. - -Often this is all that is required but there are occasions when you need to be able to put the line into context that is you need to understand how the line containing you pattern relates to the data around it. - -The is what the context parameter can provide. - - - - If you look at the Select-String help file you will find this information on context. - - - --Context** * - - - - -Captures the specified number of lines before and after the line with the match. This allows you to view the match in context. - - - - -Required? - -false - - - - -Position? - -named - - - - -Default value - - - - -Accept pipeline input? - -false - - - - -Accept wildcard characters? - -false - - - - - The first thing to note is that the parameter takes an array of integers. The first (or only member of the array) tells PowerShell how many lines to show from before* and *after *the matching line while the second member of the array controls the number of lines that are displayed *after* the matching line. Put simply if you supply one values it controls the number of lines from before and after you match that are displayed but if you specify two values then you explicitly control the lines from before the match with the first value and the lines from after the match with the second. Some examples should make this clear. - - - I"™m going to use a file where we know the contents "“ it makes the explanations easier. If you run this: - - - Get-Process | sort CPU -Descending | Out-File -FilePath c:\test\proc.txt "“Force - - - You get a text file with the processes listed by CPU usage. You can examine the file for a particular process "“ this case let"™s look at Word: - - - PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch - - - - - - C:\test\proc.txt:8: - -360 - -25 - -20368 - -61728 - - - -331 - -41.89 - -4976 WINWORD - - - You know that the file is ordered by CPU usage so what are the processes using similar amounts of CPU to Word? - - - PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context 2 - - - - - - - -C:\test\proc.txt:6: - -653 - -34 - -66640 - -94416 - -286 - -48.77 - -3724 powershell - - - - -C:\test\proc.txt:7: - -1124 - -29 - -13912 - -19336 - -210 - -47.71 - -5868 LiveComm - - - > C:\test\proc.txt:8: - -360 - -25 - -20368 - -61728 - -331 - -41.89 - -4976 WINWORD - - - - -C:\test\proc.txt:9: - -212 - -9 - -2788 - -10956 - -78 - -28.67 - -4112 SynTPEnh - - - - -C:\test\proc.txt:10: - -565 - -35 - -49172 - -82572 - -347 - -12.50 - -5660 WWAHost - - - - - - The matching line is marked with a > symbol. I"™ve made it bold in the above listing for emphasis. - - - If you specify a number such that the file doesn"™t have enough lines to display then only those lines that are available will be displayed for instance - - - Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context 12 - - - This can only display the seven lines prior to the match so that"™s all it does. - - - What about the situation where you only want the three processes that are using more CPU than Word? - - - PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context 3,0 - - - - - - - -C:\test\proc.txt:5: - -1555 - -74 - -30660 - -87176 - -465 - -80.70 - -5308 explorer - - - - -C:\test\proc.txt:6: - -653 - -34 - -66640 - -94416 - -286 - -48.77 - -3724 powershell - - - - -C:\test\proc.txt:7: - -1124 - -29 - -13912 - -19336 - -210 - -47.71 - -5868 LiveComm - - - > C:\test\proc.txt:8: - -360 - -25 - -20368 - -61728 - -331 - -41.89 - -4976 WINWORD - - - This works as well - - - PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context 3,$null - - - - - - - -C:\test\proc.txt:5: - -1555 - -74 - -30660 - -87176 - -465 - -80.70 - -5308 explorer - - - - -C:\test\proc.txt:6: - -653 - -34 - -66640 - -94416 - -286 - -48.77 - -3724 powershell - - - - -C:\test\proc.txt:7: - -1124 - -29 - -13912 - -19336 - -210 - -47.71 - -5868 LiveComm - - - > C:\test\proc.txt:8: - -360 - -25 - -20368 - -61728 - -331 - -41.89 - -4976 WINWORD - - - The one thing you can"™t do is this: - - - PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context 3, - - - >> - - - PowerShell expects something after the comma and will prompt you to supply it. - - - The converse holds true if you want the lines that occur after the match. You can use a 0 as the first element: - - - PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context 0,3 - - - - - - > C:\test\proc.txt:8: - -360 - -25 - -20368 - -61728 - -331 - -41.89 - -4976 WINWORD - - - - -C:\test\proc.txt:9: - -212 - -9 - -2788 - -10956 - -78 - -28.67 - -4112 SynTPEnh - - - - -C:\test\proc.txt:10: - -565 - -35 - -49172 - -82572 - -347 - -12.50 - -5660 WWAHost - - - - -C:\test\proc.txt:11: - -276 - -19 - -6608 - -12628 - -88 - -9.33 - -5252 taskhostex - - - Or $null - - - PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context $null,3 - - - - - - > C:\test\proc.txt:8: - -360 - -25 - -20368 - -61728 - -331 - -41.89 - -4976 WINWORD - - - - -C:\test\proc.txt:9: - -212 - -9 - -2788 - -10956 - -78 - -28.67 - -4112 SynTPEnh - - - - -C:\test\proc.txt:10: - -565 - -35 - -49172 - -82572 - -347 - -12.50 - -5660 WWAHost - - - - -C:\test\proc.txt:11: - -276 - -19 - -6608 - -12628 - -88 - -9.33 - -5252 taskhostex - - - - - - You can"™t leave the first element blank - - - PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context ,3 - - - At line:1 char:76 - - - + Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context ,3 - - - + - -~ - - - Missing argument in parameter list. - - - - -+ CategoryInfo - -: ParserError: (:) [], ParentContainsErrorRecordException - - - - -+ FullyQualifiedErrorId : MissingArgument - - - This leads to the situation where you need to display a different number of lines before and after the match: - - - PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context 3,2 - - - - - - - -C:\test\proc.txt:5: - -1555 - -74 - -30660 - -87176 - -465 - -80.70 - -5308 explorer - - - - -C:\test\proc.txt:6: - -653 - -34 - -66640 - -94416 - -286 - -48.77 - - - -3724 powershell - - - - -C:\test\proc.txt:7: - -1124 - -29 - -13912 - -19336 - -210 - -47.71 - -5868 LiveComm - - - > C:\test\proc.txt:8: - -360 - -25 - -20368 - -61728 - -331 - -41.89 - -4976 WINWORD - - - - -C:\test\proc.txt:9: - -212 - -9 - -2788 - -10956 - -78 - - - -28.67 - -4112 SynTPEnh - - - - -C:\test\proc.txt:10: - -565 - -35 - -49172 - -82572 - -347 - -12.50 - -5660 WWAHost - - - What happens if you have multiple matches and their contexts overlap? - - - PS> Select-String -Path c:\test\*.txt -Pattern "PowerShell" -SimpleMatch - - - - - - C:\test\proc.txt:9: - -669 - -34 - -67544 - -62228 - -286 - -54.99 - -3724 powershell - - - C:\test\proc.txt:12: - -473 - -23 - -69112 - -86616 - -366 - -11.73 - -1688 powershell_ise - - - C:\test\proc.txt:19: - -346 - -13 - -39576 - -44540 - -207 - -3.15 - -280 PowerShell - - - This file shows matches on lines 9, 12 and 19 so let"™s try this - - - PS> Select-String -Path c:\test\*.txt -Pattern "PowerShell" -SimpleMatch -Context 4,5 - - - - - - - -C:\test\proc.txt:5: - -1840 - -91 - -35836 - -75652 - -545 - -142.49 - -5308 explorer - - - - -C:\test\proc.txt:6: - -618 - -23 - -68524 - -28788 - -194 - -108.84 - -5072 SkyDrive - - - - -C:\test\proc.txt:7: - -1377 - -29 - -15668 - -23440 - -210 - -95.07 - -5868 LiveComm - - - - -C:\test\proc.txt:8: - -211 - -9 - -2792 - -4516 - -78 - -59.98 - -4112 SynTPEnh - - - **> C:\test\proc.txt:9: - -669 - -34 - -67544 - -62228 - -286 - -54.99 - -3724 powershell** - - - - -C:\test\proc.txt:10: - -560 - -35 - -53480 - -88760 - -370 - -22.95 - -2656 WWAHost - - - - -C:\test\proc.txt:11: - -240 - -8 - -1952 - -2340 - -71 - -12.32 - -5580 TabTip - - - **> C:\test\proc.txt:12: - -473 - -23 - -69112 - -86616 - -366 - -11.73 - -1688 powershell_ise** - - - - -C:\test\proc.txt:13: - -254 - -9 - -4684 - -9940 - -86 - -11.31 - - - -6136 RuntimeBroker - - - - -C:\test\proc.txt:14: - -285 - -14 - -4116 - -4724 - -84 - -10.19 - -5252 taskhostex - - - - -C:\test\proc.txt:15: - -82 - -5 - -2008 - -6148 - -55 - -7.52 - -2416 conhost - - - - -C:\test\proc.txt:16: - -305 - -14 - -17608 - -5088 - -184 - -5.19 - -404 IAStorIcon - - - - -C:\test\proc.txt:17: - -337 - -8 - -2180 - -536 - -76 - -4.79 - -376 InputPersonalization - - - - -C:\test\proc.txt:18: - -409 - -12 - -4416 - -5464 - -79 - -4.26 - -5276 taskhost - - - **> C:\test\proc.txt:19: - -346 - - - -13 - -39576 - -44540 - -207 - -3.15 - -280 powershell** - - - - -C:\test\proc.txt:20: - -125 - -5 - -2820 - -744 - -70 - -2.61 - -908 splwow64 - - - - -C:\test\proc.txt:21: - -347 - -13 - -12180 - -804 - -183 - -2.40 - -4788 PopUp_DM - - - - -C:\test\proc.txt:22: - -335 - -10 - -2576 - -1756 - -83 - -2.20 - -4636 AdobeARM - - - - -C:\test\proc.txt:23: - -249 - -21 - -6628 - -540 - -129 - -1.44 - -5220 SRSPremiumPanel - - - - -C:\test\proc.txt:24: - -387 - -11 - -3436 - -12280 - -83 - -0.94 - -3828 WSHost - - - I"™ve highlighted the lines that actually match. - - - Starting with the first match you get 4 lines before it as requested. There should be 5 lines after the match BUT the next match is only 3 lines on and you asked for 5 lines after that. The lines before the last match overlap the lines after the second match. The lines after the last match are shown as requested. - - - At first glance it looks like the command hasn"™t worked but what seems to be happening is that only unique lines are displayed. - - - I looked at the individual matches - - - $finds = Select-String -Path c:\test\*.txt -Pattern "PowerShell" -SimpleMatch -Context 4,5 - - - for ($i=0; $i -le $finds.count; $i++){$finds[$i]; "###"*8} - - - and received this output (I"™ve split the display so you can see what is produced. - - - First match: - - - - -C:\test\proc.txt:5: - -1840 - -91 - -35836 - -75652 - -545 - -142.49 - -5308 explorer - - - - -C:\test\proc.txt:6: - -618 - -23 - -68524 - -28788 - -194 - -108.84 - -5072 SkyDrive - - - - -C:\test\proc.txt:7: - -1377 - -29 - -15668 - -23440 - -210 - -95.07 - -5868 LiveComm - - - - -C:\test\proc.txt:8: - -211 - -9 - -2792 - -4516 - -78 - -59.98 - -4112 SynTPEnh - - - **> C:\test\proc.txt:9: - -669 - -34 - -67544 - -62228 - -286 - -54.99 - -3724 powershell** - - - - -C:\test\proc.txt:10: - -560 - -35 - -53480 - -88760 - -370 - -22.95 - -2656 WWAHost - - - - -C:\test\proc.txt:11: - -240 - -8 - -1952 - -2340 - -71 - -12.32 - -5580 TabTip - - - ######################## - - - Correct number before but restricted output after - - - Second match: - - - **> C:\test\proc.txt:12: - -473 - -23 - -69112 - -86616 - -366 - -11.73 - -1688 powershell_ise** - - - - -C:\test\proc.txt:13: - -254 - -9 - -4684 - -9940 - -86 - -11.31 - -6136 RuntimeBroker - - - - -C:\test\proc.txt:14: - -285 - -14 - -4116 - -4724 - - - -84 - -10.19 - -5252 taskhostex - - - - -C:\test\proc.txt:15: - -82 - -5 - -2008 - -6148 - -55 - -7.52 - -2416 conhost - - - - -C:\test\proc.txt:16: - -305 - -14 - -17608 - -5088 - -184 - -5.19 - -404 IAStorIcon - - - - -C:\test\proc.txt:17: - -337 - -8 - -2180 - -536 - -76 - -4.79 - -376 InputPersonalization - - - ######################## - - - Nothing before and correct output after the match - - - Last match: - - - - -C:\test\proc.txt:18: - -409 - -12 - -4416 - -5464 - -79 - -4.26 - -5276 taskhost - - - **> C:\test\proc.txt:19: - - - -346 - -13 - -39576 - -44540 - -207 - -3.15 - -280 powershell** - - - - -C:\test\proc.txt:20: - -125 - -5 - -2820 - -744 - -70 - -2.61 - -908 splwow64 - - - - -C:\test\proc.txt:21: - -347 - -13 - -12180 - -804 - -183 - -2.40 - -4788 PopUp_DM - - - - -C:\test\proc.txt:22: - -335 - -10 - -2576 - -1756 - -83 - -2.20 - -4636 AdobeARM - - - - -C:\test\proc.txt:23: - -249 - -21 - -6628 - -540 - -129 - -1.44 - -5220 SRSPremiumPanel - - - - -C:\test\proc.txt:24: - -387 - -11 - -3436 - -12280 - -83 - -0.94 - -3828 WSHost - - - ######################## - - - One line before the match and correct number after the match. - - - This confirms that if a line has appeared in a previous match you won"™t see it again. Is there a way to see the full context for each match? Unfortunately, Select-String doesn"™t appear to provide that capability directly. A little bit of working with the output should enable this. - - - Select-String -Path c:\test\*.txt -Pattern "PowerShell" -SimpleMatch -Context 4,5 | - - - foreach { - - - #matching line - - - $padlength = (" {0}:{1:00}: " -f $_.Path, $_.LineNumber).Length - - - $pad = " "*$padlength - - - - - - $_.Context.PreContext | foreach {$_.Trim().Insert(0,$pad)} - - - "" - - - " {0}:{1:00}: {2}" -f $_.Path, $_.LineNumber, ($_.Line).Trim() - - - "" - - - $_.Context.PostContext | foreach {$_.Trim().Insert(0,$pad)} - - - "" - - - "" - - - } - - - - - - Run the select-string as before. For each of the matches find the length of the formatted path and line number and create a blank string of that length. - - - If you examine the MatchInfo type that Select-String produces you will see a Property called Context. If you examine that you will see it contains the collection of data for the pre and post context. (There are also display versions of the context). - - - - For each line in the pre-context insert the pad characters at the beginning. Display the formatted match line and then display the post-context data. - -I"™ve inserted some blank lines to help format the display - - - You will get output like this: - - - - - - -1840 - -91 - -35836 - -75652 - -545 - -142.49 - -5308 explorer - - - - -618 - -23 - -68524 - -28788 - -194 - -108.84 - -5072 SkyDrive - - - - -1377 - -29 - -15668 - -23440 - -210 - -95.07 - -5868 LiveComm - - - - -211 - -9 - -2792 - -4516 - -78 - -59.98 - -4112 SynTPEnh - - - - - - - -C:\test\proc.txt:09: 669 - -34 - -67544 - -62228 - -286 - -54.99 - -3724 powershell - - - - - - - -560 - -35 - -53480 - -88760 - -370 - -22.95 - -2656 WWAHost - - - - -240 - -8 - -1952 - -2340 - -71 - -12.32 - -5580 TabTip - - - - -473 - -23 - -69112 - -86616 - -366 - -11.73 - -1688 powershell_ise - - - - -254 - -9 - -4684 - -9940 - -86 - -11.31 - -6136 RuntimeBroker - - - - -285 - -14 - -4116 - -4724 - -84 - -10.19 - -5252 taskhostex - - - - - - - - - - -211 - -9 - -2792 - -4516 - -78 - -59.98 - -4112 SynTPEnh - - - - -669 - -34 - -67544 - -62228 - -286 - -54.99 - -3724 powershell - - - - -560 - -35 - -53480 - -88760 - -370 - -22.95 - -2656 WWAHost - - - - -240 - -8 - -1952 - -2340 - -71 - -12.32 - -5580 TabTip - - - - - - - -C:\test\proc.txt:12: 473 - -23 - -69112 - -86616 - -366 - -11.73 - -1688 powershell_ise - - - - - - - -254 - -9 - -4684 - -9940 - -86 - -11.31 - -6136 RuntimeBroker - - - - -285 - -14 - -4116 - -4724 - -84 - -10.19 - -5252 taskhostex - - - - -82 - -5 - -2008 - -6148 - -55 - -7.52 - -2416 conhost - - - - -305 - -14 - -17608 - -5088 - -184 - -5.19 - -404 IAStorIcon - - - - -337 - -8 - -2180 - -536 - -76 - -4.79 - -376 InputPersonalization - - - - - - - - - - -82 - -5 - -2008 - -6148 - -55 - -7.52 - -2416 conhost - - - - -305 - -14 - -17608 - -5088 - -184 - -5.19 - -404 IAStorIcon - - - - -337 - -8 - -2180 - -536 - -76 - -4.79 - -376 InputPersonalization - - - - -409 - -12 - -4416 - - - -5464 - -79 - -4.26 - -5276 taskhost - - - - - - - -C:\test\proc.txt:19: 346 - -13 - -39576 - -44540 - -207 - -3.15 - -280 powershell - - - - - - - -125 - -5 - -2820 - -744 - -70 - -2.61 - -908 splwow64 - - - - -347 - -13 - -12180 - -804 - -183 - -2.40 - -4788 PopUp_DM - - - - -335 - -10 - -2576 - -1756 - -83 - -2.20 - -4636 AdobeARM - - - - -249 - -21 - -6628 - -540 - -129 - -1.44 - -5220 SRSPremiumPanel - - - - - - -387 - -11 - -3436 - -12280 - -83 - -0.94 - -3828 WSHost - - - Not the greatest of displays but you do get to see the data. It should be possible to do this through PowerShell"™s formatting system but that"™s a post for another day. - - - Bottom line "“ the context parameter only displays unique lines so you won"™t necessarily get what you expect if there are multiple matches in a file. - - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2788/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2788/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2788&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-11-windows-powershell-v3-language-specification-posted.md b/content/articles/2013-01-11-windows-powershell-v3-language-specification-posted.md deleted file mode 100644 index 3893013e5..000000000 --- a/content/articles/2013-01-11-windows-powershell-v3-language-specification-posted.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Windows PowerShell V3 Language Specification Posted -authors: - - Keith Hill -date: "2013-01-11T15:52:14+00:00" -aliases: - - /2013/01/windows-powershell-v3-language-specification-posted/ ---- - -You can download it [here][1]. - -[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/275/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/275/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=275&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) - - [1]: http://www.microsoft.com/en-us/download/details.aspx?id=36389 diff --git a/content/articles/2013-01-12-planning-the-powershell-summit-north-america-2014.md b/content/articles/2013-01-12-planning-the-powershell-summit-north-america-2014.md deleted file mode 100644 index eefbf9d99..000000000 --- a/content/articles/2013-01-12-planning-the-powershell-summit-north-america-2014.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Planning the PowerShell Summit North America 2014 -authors: - - Don Jones -date: "2013-01-12T20:35:17+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/01/planning-the-powershell-summit-north-america-2014/ ---- - -We're already planning for the 2014 Summit... you have to get way out in front of these things to secure space, plan a budget, and more. -Here's what we know: - - * -We'll definitely still be in the Seattle metro area. That's the best way to ensure participation from the PowerShell team, since it doesn't require them to leave town for days at a time. - - * We'll be in April 2014. We're going to try for April 14-16 to avoid Easter, or April 28-30. - * We'll be in a bigger venue. We hope to support a crowd of up to 300, although we're still aiming for a smaller group. That'll give us more flexibility in session planning, along with the possibility of on-site evening events. - * We will **open up early bird ticketing** for 2013 alumni the week of April 29-May 3. 50 tickets will be available. If there are any of those tickets left after May 3, they'll be offered to the public May 6 through 10. Any remaining early bird tickets will be converted to full-price tickets after May 10, when general sales will begin. Early bird pricing will be in the $650 range. Full pricing will be around $850. This is more than 2013, but will help us (a) fully reimburse speaker travel expenses, which we couldn't do in 2013, (b) pay for the larger conference venue, (c) offer a full hot breakfast every day and beverages throughout the day, and (d) allow for bussing to the event venue (see below). Early Bird tickets will be fully refundable until the end of 2013. - * We are going to try and hold a percentage of our full-price tickets for release in January 2014. That way, people who can't get budget until the year-of will still have a shot at tickets. This will be a small block of tickets, though - probably less than 30 - so if you can get budget to buy your tickets in 2013, do it. - * We will offer bussing from **one** hotel complex to the event venue in the mornings, with return busses at night. It will be crucial that you book your hotel as soon as possible once we announce, so that you can lock in a room. This can help eliminate the need for a rental car, and lower your trip expenses. At least one hotel option at around $100-$110 a night will be offered, although it may be a limited room block. For folks in the US, you should be able to attend for about $2,000 including air, hotel, and registration. Add in dinners (which we don't provide) and you should be able to attend for under $2500 including expenses. Not bad! - -As you can see, we're still trying to keep things as affordable and accessible as possible, in keeping with the nature of a community-owned event. We're also trying to build this event into one that can support itself and continue to grow. -I know a lot of folks who wanted to come in 2013 missed out... so that's why I'm giving you as much heads-up as possible. Start getting the boss on board. Get purchasing on board. Start planning to have the credit card ready in April 2013. We'll get as many folks as we can into the 2014 Summit! diff --git a/content/articles/2013-01-15-updating-help-on-powershell-v3.md b/content/articles/2013-01-15-updating-help-on-powershell-v3.md deleted file mode 100644 index fb180f787..000000000 --- a/content/articles/2013-01-15-updating-help-on-powershell-v3.md +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Updating Help on PowerShell v3 -authors: - - Richard Siddaway -date: "2013-01-15T21:37:41+00:00" -aliases: - - /2013/01/updating-help-on-powershell-v3/ ---- - -One of the new features in PowerShell v3 is the capability to update the help files. In fact you have to do this because PowerShell v3 doesn"™t ship with any help files. Since Windows 8 RTM"™d there have been a succession of new help files released. - -I discovered one of my netbooks didn"™t have the latest version of the help files installed. So I needed to update them. This got me thinking that it would be better if the machine did this for me. - -I could think of two easy ways to do this "“ a scheduled job or a scheduled task. I chose the scheduled task because the ScheduledTasks module is available on the version of PowerShell v3 for Windows 7 and other legacy versions of Windows. The PSScheduledJob module is only available on Windows 8/2012 as it"™s based on WMI classes not present on older versions of Windows. - - -`$actionscript - -= - -'-NonInteractive -WindowStyle Normal -NoLogo -NoProfile -NoExit -Command "& {Update-Help -UICulture en-US -Force}"' - - -$pstart - -= - -"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" - - -#$days = "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" - - -$days - -= - -'Wednesday' - - -Get-ScheduledTask - --TaskName - -UpdatePSHelp - -| - -Unregister-ScheduledTask - --Confirm: - -$false - - -$act - -= - -New-ScheduledTaskAction - --Execute - -$pstart - --Argument - -$actionscript - - -$trig - -= - -New-ScheduledTaskTrigger - --Weekly - --WeeksInterval - -4 - --At - -19:00 - --DaysOfWeek - -$days - - -Register-ScheduledTask - --TaskName - -UpdatePSHelp - --Action - -$act - --Trigger - -$trig - --RunLevel - -Highest - -`Start by creating the command strings to start PowerShell and the arguments you pass to it. I left it as a visible PowerShell window that stays opn so I can see the results. The PowerShell command - -Update-Help -UICulture en-US "“Force - -performs the actual update. You will need to change the culture to match yours if you aren"™t using English. You can find it by using - -Get-UICulture - -I"™m only going to run this on Wednesdays . - -Any old copies of the task are cleaned out and new task actions (to execute PowerShell) and trigger to define when it runs are created. The last line registers the task. - -You can view the task - -Get-ScheduledTask -TaskName UpdatePSHelp - -or start the task manually - -Start-ScheduledTask -TaskName UpdatePSHelp - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2789/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2789/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2789&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-16-account-sids-revisited.md b/content/articles/2013-01-16-account-sids-revisited.md deleted file mode 100644 index 35c41576d..000000000 --- a/content/articles/2013-01-16-account-sids-revisited.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: Account SIDs revisited -authors: - - Richard Siddaway -date: "2013-01-16T22:48:05+00:00" -aliases: - - /2013/01/account-sids-revisited/ ---- - -I realised there is an easier way to get the data - - -`function - -get-SID - -{ - - -param - -( - - -[string] - -$computername - -= - -$env:COMPUTERNAME - - -) - - -Get-WmiObject - --Class - -Win32_AccountSID - --ComputerName - -$computername - -| - - -foreach - -{ - - -$exp - -= - -"[wmi]'" - -+ - -$( - -$_ - -. - -Element - -) - -+ - -"'" - - -Invoke-Expression - --Command - -$exp - -| - - -select - -Domain - -, - -Name - -, - -SID - -, - -LocalAccount - - -} - - -} - -`Use the wmi type accelerator with the path from the Element and you can just select the data you want. As a bonus you can discover if the account is local or not - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2795/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2795/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2795&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-16-account-sids.md b/content/articles/2013-01-16-account-sids.md deleted file mode 100644 index b440257bc..000000000 --- a/content/articles/2013-01-16-account-sids.md +++ /dev/null @@ -1,243 +0,0 @@ ---- -title: Account SIDs -authors: - - Richard Siddaway -date: "2013-01-16T22:22:45+00:00" -aliases: - - /2013/01/account-sids/ ---- - -A question on the forum asked about finding the accounts and SIDs on the local machine. - - -`function - -get-SID - -{ - - -param - -( - - -[string] - -$computername - -= - -$env:COMPUTERNAME - - -) - - -Get-WmiObject - --Class - -Win32_AccountSID - --ComputerName - -$computername - -| - - -foreach - -{ - - -$da - -= - -( - -( - -$_ - -. - -Element - -) - -. - -Split - -( - -"." - -) - -[ - -1 - -] - -) - -. - -Split - -( - -"," - -) - - -$sid - -= - -( - -$_ - -. - -Setting - --split - -"=" - -) - -[ - -1 - -] - --replace - -'"' - -, - -'' - - -$props - -= - -[ordered] - -@{ - - -Domain - -= - -( - -$da - -[ - - -] - --split - -"=" - -) - -[ - -1 - -] - --replace - -'"' - -, - -'' - - -Account - -= - -( - -$da - -[ - -1 - -] - --split - -"=" - -) - -[ - -1 - -] - --replace - -'"' - -, - -'' - - -SID - -= - -$sid - - -} - - -New-Object - --TypeName - -PSObject - --Property - -$props - - -} - - -} - -`Pass a computer name into the function "“ default is local machine. - -Use the AccountSID class which links Win32_SystemAccount and Win32_SID. For each returned instance clean up the data and create an object with three properties "“ domain, account and SID. - -You will see more than you thought "“ some very useful information buried in there - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2793/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2793/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2793&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-16-passing-function-names.md b/content/articles/2013-01-16-passing-function-names.md deleted file mode 100644 index 049cceef0..000000000 --- a/content/articles/2013-01-16-passing-function-names.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Passing function names -authors: - - Richard Siddaway -date: "2013-01-16T22:32:38+00:00" -aliases: - - /2013/01/passing-function-names/ ---- - -A question asked about passing a function name into another function which then called the function. It sounds worse than it is. if you need to pass the name of a command and then call it try using invoke-expression - - -`function - -ffour - -{ - - -Get-Random - - -} - - -function - -fthree - -{ - - -Get-Date - - -} - - -function - -ftwo - -{ - - -param - -( - - -[string] - -$fname - - -) - - -Invoke-Expression - -$fname - - -} - - -"date" - - -ftwo - -fthree - - -"random" - - -ftwo - -ffour - -`[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2794/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2794/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2794&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-16-powershell-wins-award.md b/content/articles/2013-01-16-powershell-wins-award.md deleted file mode 100644 index 58d73ce8f..000000000 --- a/content/articles/2013-01-16-powershell-wins-award.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: PowerShell wins award -authors: - - Richard Siddaway -date: "2013-01-16T18:19:21+00:00" -aliases: - - /2013/01/powershell-wins-award/ ---- - -PowerShell has won one on InfoWorld"™s Technology of the Year awards for 2013 - -See - -for details - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2791/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2791/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2791&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-16-uk-powershell-group-29-january-2013.md b/content/articles/2013-01-16-uk-powershell-group-29-january-2013.md deleted file mode 100644 index 38e492373..000000000 --- a/content/articles/2013-01-16-uk-powershell-group-29-january-2013.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: "UK PowerShell group \"“ 29 January 2013" -authors: - - Richard Siddaway -date: "2013-01-16T20:28:38+00:00" -aliases: - - /2013/01/uk-powershell-group-29-january-2013/ ---- - -`**When: Tuesday, Jan 29, 2013 7:30 PM (GMT) - - - - -Where: virtual - - - - - *~*~*~*~*~*~*~*~*~* - - -`Active Directory is one of the commonest automation targets for administrators. This session will covert the basics of automating your AD admin – scripts and the Microsoft cmdlets. The new features in PowerShell for Windows 2012 AD will also be covered - - - - - - - Notes**`Richard Siddaway has invited you to attend an online meeting using Live Meeting.**[Join the meeting.](https://www.livemeeting.com/cc/usergroups/join?id=RCRWH3&role=attend&pw=5p7%24%7DS_%21h)****Audio Information****Computer Audio****To use computer audio, you need speakers and microphone, or a headset. -First Time Users:****To save time before the meeting, [check your system ](http://go.microsoft.com/fwlink/?LinkId=90703)to make sure it is ready to use Microsoft Office Live Meeting. -Troubleshooting****Unable to join the meeting? Follow these steps: - - - - - Copy this address and paste it into your web browser: -[https://www.livemeeting.com/cc/usergroups/join](https://www.livemeeting.com/cc/usergroups/join) - - Copy and paste the required information: -Meeting ID: RCRWH3 -Entry Code: 5p7$}S_!h -Location: [https://www.livemeeting.com/cc/usergroups](https://www.livemeeting.com/cc/usergroups) - - - - - - - - If you still cannot enter the meeting, [contact support](http://r.office.microsoft.com/r/rlidLiveMeeting?p1=12&p2=en_US&p3=LMInfo&p4=support) - - - - - - - Notice** -Microsoft Office Live Meeting can be used to record meetings. By participating in this meeting, you agree that your communications may be monitored or recorded at any time during the meeting. - - - - - - - [![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2792/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2792/) ![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2792&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-16-workflow-article-4.md b/content/articles/2013-01-16-workflow-article-4.md deleted file mode 100644 index 5e65a9eb9..000000000 --- a/content/articles/2013-01-16-workflow-article-4.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Workflow article 4 -authors: - - Richard Siddaway -date: "2013-01-16T17:03:48+00:00" -aliases: - - /2013/01/workflow-article-4/ ---- - -The next in the series of articles on PowerShell workflows that are appearing on the Scripting Guy blog has been published. - -The articles in the series that have been published are: - - - - - - -Look for the next article in one weeks time. - -Until then Enjoy! - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2790/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2790/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2790&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-17-account-sids-hopefully-my-last-word.md b/content/articles/2013-01-17-account-sids-hopefully-my-last-word.md deleted file mode 100644 index 99548b930..000000000 --- a/content/articles/2013-01-17-account-sids-hopefully-my-last-word.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Account SIDs\"“hopefully my last word" -authors: - - Richard Siddaway -date: "2013-01-17T08:25:50+00:00" -aliases: - - /2013/01/account-sids-hopefully-my-last-word/ ---- - -Ok the embarrassing moral of this story is that you shouldn't answer questions in a hurry at the end of the evening. 5 minutes after shutting down I realised that there is a far, far simpler way to get the info. Win32_AccountSID is a WMI linking class. It links Win32_SystemAccount and Win32_SID classes. - -Get-WmiObject -Class Win32_SystemAccount | select Caption, Domain, Name, SID, LocalAccount - -gets you all you need - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2796/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2796/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2796&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-17-starting-virtual-machines-for-wsus.md b/content/articles/2013-01-17-starting-virtual-machines-for-wsus.md deleted file mode 100644 index 91d10d843..000000000 --- a/content/articles/2013-01-17-starting-virtual-machines-for-wsus.md +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Starting virtual machines for WSUS -authors: - - Richard Siddaway -date: "2013-01-17T19:50:54+00:00" -aliases: - - /2013/01/starting-virtual-machines-for-wsus/ ---- - -My test environment usually has a dozen or so machines at any one time. Some of these are short lived and used for a particular piece of testing "“ others are kept for years. I decided that I wanted to keep up to date on the patching of these virtual machines so installed WSUS on a Windows 2012 box. - -One issue is that if a VM isn"™t started for 10 days WSUS starts complaining that it hasn"™t been contacted and if you run the WSUS clean up wizard the non-reporting servers may be removed. Checking the WSUS console for which machines haven"™t sync"™d recently is a chore. - -In Windows 2012 both WSUS and Hyper-V come with a PowerShell module. This means I can do this: - - -`$date - -= - -( - -Get-Date - -) - -. - -AddDays - -( - --10 - -) - - -Get-WsusComputer - --ToLastSyncTime - -$date - -| - - -sort - -LastSyncTime - -| - - -select - --First - -4 - -| - - -foreach - -{ - - -$computer - -= - -( - -$_ - -. - -FullDomainName - --split - -"\." - -) - -[ - - -] - - -Start-VM - --Name - -$computer - --ComputerName - -Server02 - --Passthru - - -} - -`I"™m using the WSUS server as my admin box but if you were accessing a remote WSUS machine change the code to - -Get-WsusServer -Name w12sus -PortNumber 8530 | Get-WsusComputer "“ToLastSyncTime $date | - -I sorted the computers WSUS knows about by date "“ picked the last 4 to sync so I didn"™t overwhelm the Hyper-V host and started them up. Only trick is to get the computer name out of the FullDomainName property. - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2797/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2797/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2797&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-19-piping-between-functions.md b/content/articles/2013-01-19-piping-between-functions.md deleted file mode 100644 index e03390877..000000000 --- a/content/articles/2013-01-19-piping-between-functions.md +++ /dev/null @@ -1,445 +0,0 @@ ---- -title: Piping between functions -authors: - - Richard Siddaway -date: "2013-01-19T17:04:01+00:00" -aliases: - - /2013/01/piping-between-functions/ ---- - -A question came up about piping between advanced functions. The input to the second function might be an array. To illustrate how this works imagine a function that gets disk information "“ or better still use this one. - - -`function - -get-mydisk - -{ - - -[ - -CmdletBinding - -( - -) - -] - - -param - -( - - -[string] - -$computername - -= - -"$env:COMPUTERNAME" - - -) - - -BEGIN - -{ - -} - -#begin - - -PROCESS - -{ - - -Get-WmiObject - --Class - -Win32_LogicalDisk - --ComputerName - -$computername - -| - - -foreach - -{ - - -New-Object - --TypeName - -PSObject - --Property - -@{ - - -Disk - -= - -$_ - -. - -DeviceID - - -Free - -= - -$_ - -. - -FreeSpace - - -Size - -= - -$_ - -. - -Size - - -} - - -} - - -} - -#process - - -END - -{ - -} - -#end - - -} - -`Use a computername as a parameter. Use WMI to get the disk information and output an object. - -PS> get-mydisk | ft -AutoSize - -Disk Free Size -—- —- —- -C: 149778239488 249951154176 -D: 69271552 104853504 -E: -F: - -This works as well - - - -PS> get-mydisk | where Size -gt 0 | ft -AutoSize - -Disk Free Size -—- —- —- -C: 149778108416 249951154176 -D: 69271552 104853504 - -You now have a function outputs objects that behave properly on the pipeline. - -So now you want those objects piped into another function or you want an array of objects used as the input - - -`function - -get-freeperc - -{ - - -[ - -CmdletBinding - -( - -) - -] - - -param - -( - - -[ - -parameter - -( - -ValueFromPipeline - -= - -$true - -) - -] - - -[Object[]] - -$disklist - - -) - - -BEGIN - -{ - -} - -#begin - - -PROCESS - -{ - - -foreach - -( - -$disk - -in - -$disklist - -) - -{ - - -if - -( - -$disk - -. - -Size - --gt - - - -) - -{ - - -$disk - -| - -Select - -Disk - -, - - -@{ - -N - -= - -"Size(GB)" - -; - -E - -= - -{ - -[math] - -:: - -Round - -( - -( - -$( - -$_ - -. - -Size - -) - -/ - -1GB - -) - -, - -2 - -) - -} - -} - -, - - -@{ - -N - -= - -"FreePerc" - -; - -E - -= - -{ - -[math] - -:: - -Round - -( - -( - -$( - -$_ - -. - -Free - -) - -/ - -$( - -$_ - -. - -Size - -) - -) - -* - -100 - -, - -2 - -) - -} - -} - - -} - - -} - - -} - -#process - - -END - -{ - -} - -#end - - -} - -`* Set the parameter to accept pipeline input - * Set the parameter to accept an array of objects - * Use a process block - * Use a foreach block in the process block - - This works - - PS> get-mydisk | get-freeperc | ft -AutoSize - - Disk Size(GB) FreePerc -—- ——– ——– -C: 232.79 59.92 -D: 0.1 66.07 - - or this - - $disks = get-mydisk - get-freeperc -disklist $disks - - or this - - get-freeperc -disklist (get-mydisk) - - [![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2798/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2798/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2798&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-01-28-powershell-and-active-directory-reminder.md b/content/articles/2013-01-28-powershell-and-active-directory-reminder.md deleted file mode 100644 index dc81ad572..000000000 --- a/content/articles/2013-01-28-powershell-and-active-directory-reminder.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "PowerShell and Active Directory\"“reminder" -authors: - - Richard Siddaway -date: "2013-01-28T18:14:58+00:00" -aliases: - - /2013/01/powershell-and-active-directory-reminder/ ---- - -Quick reminder for tomorrow"™s session from the UK PowerShell group. Details from: - -[http://msmvps.com/blogs/richardsiddaway/archive/2013/01/16/uk-powershell-group-29-january-2013.aspx][1] - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2799/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2799/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2799&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: http://msmvps.com/blogs/richardsiddaway/archive/2013/01/16/uk-powershell-group-29-january-2013.aspx "http://msmvps.com/blogs/richardsiddaway/archive/2013/01/16/uk-powershell-group-29-january-2013.aspx" diff --git a/content/articles/2013-01-28-the-2013-winter-scripting-camp.md b/content/articles/2013-01-28-the-2013-winter-scripting-camp.md deleted file mode 100644 index bb0460195..000000000 --- a/content/articles/2013-01-28-the-2013-winter-scripting-camp.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: The 2013 Winter Scripting Camp -authors: - - Don Jones -date: "2013-01-28T20:56:00+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/01/the-2013-winter-scripting-camp/ ---- - -We'll be announcing Winter Scripting Camp the first week of February. This is a special invite-only event that will be open to subscribers of the PowerShell.org TechLetter. It will work just like the Scripting Games, but will feature only a couple of events and will not include any prizes. We will, however, announce the top scorers. -Scripting Camp is primarily an opportunity for us to audition our new platform, to kick the tires, and make sure everything's ready for the official Games, which will kick off in April at the [PowerShell Summit 2013 North America][2]. -If you're interested in Camping with us, please sign up for the TechLetter this week (prior to Feb 1st). We'll be sending out a special notification to the TechLetter subscriber list with sign-up instructions. - - [2]: /summit/ diff --git a/content/articles/2013-01-30-powershell-and-active-directory-recording.md b/content/articles/2013-01-30-powershell-and-active-directory-recording.md deleted file mode 100644 index e199f0bb4..000000000 --- a/content/articles/2013-01-30-powershell-and-active-directory-recording.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: PowerShell and Active Directory recording -authors: - - Richard Siddaway -date: "2013-01-30T22:05:51+00:00" -aliases: - - /2013/01/powershell-and-active-directory-recording/ ---- - -The recording, slides and demo script from yesterday"™s PowerShell and Active Directory session can be found here: - -[https://skydrive.live.com/?cid=43cfa46a74cf3e96#cid=43CFA46A74CF3E96&id=43CFA46A74CF3E96%2140563][1] - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2801/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2801/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2801&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: https://skydrive.live.com/?cid=43cfa46a74cf3e96#cid=43CFA46A74CF3E96&id=43CFA46A74CF3E96%2140563 "https://skydrive.live.com/?cid=43cfa46a74cf3e96#cid=43CFA46A74CF3E96&id=43CFA46A74CF3E96%2140563" diff --git a/content/articles/2013-01-30-powershell-workflows-now-we-are-six.md b/content/articles/2013-01-30-powershell-workflows-now-we-are-six.md deleted file mode 100644 index 6b512b0ce..000000000 --- a/content/articles/2013-01-30-powershell-workflows-now-we-are-six.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "PowerShell workflows\"“now we are six" -authors: - - Richard Siddaway -date: "2013-01-30T19:11:03+00:00" -aliases: - - /2013/01/powershell-workflows-now-we-are-six/ ---- - -The sixth in the series of articles on PowerShell workflows that are appearing on the Scripting Guy blog has been published. - -The articles in the series that have been published are: - - - - - - - - -Look for the next article in one weeks time. - -Until then Enjoy! - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2800/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2800/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2800&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-02-01-winter-scripting-camp-opened-to-the-public.md b/content/articles/2013-02-01-winter-scripting-camp-opened-to-the-public.md deleted file mode 100644 index 323bd3148..000000000 --- a/content/articles/2013-02-01-winter-scripting-camp-opened-to-the-public.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Winter Scripting Camp Opened to the Public -authors: - - Don Jones -date: "2013-02-01T22:45:39+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/02/winter-scripting-camp-opened-to-the-public/ ---- - -*Everything's been going pretty smoothly, so we've decided to open Winter Scripting Camp to everyone! Read everything below carefully for the best camping experience!* - - -Scripting Camp is a precursor to the Scripting Games, which will kick off in late April. During Camp, you'll have the opportunity to participate in two events. We aren't offering any prizes, but we will announce winners in the PowerShell.org blog, on Twitter, and so on. Camp is really a way for us to kick the tires on our new software platform. -If you want to participate, here's how: - - * Start by visiting the Games home page. There, you'll find our competitor's guide, which includes best practices and scoring information. You'll also find instructions for providing feedback. Be sure to check back there frequently, as it's also where we'll be posting news and updates. - * You will need a Microsoft Live account in order to sign-in and participate. - * Visit [TheScriptingGames.com][2] to join in. - -The first event runs Feb 1 to Feb 5; the second Feb 8 to Feb 12. You get one submission per entry, so make it count, and make sure it's in on time. -The new platform isn't entirely feature-complete, but you should be able to get in and see your event, along with your scores from our judges. For Camp, we aren't committing to doing multiple scores per entry - again, this is mainly about testing the software. -We are definitely interested in your feedback. For example, the schedule reflects that of the actual Games. Unlike prior years, we will be having non-overlapping events. You'll have about five days to review the event details and submit an entry - better reflecting the time pressures of a production environment. There will be a discussion forum on PowerShell.org for your feedback - please let us know what you think! - - - [2]: http://thescriptinggames.com diff --git a/content/articles/2013-02-02-verified-effective-powershell-certification-program-now-ready-for-beta.md b/content/articles/2013-02-02-verified-effective-powershell-certification-program-now-ready-for-beta.md deleted file mode 100644 index 08de263f1..000000000 --- a/content/articles/2013-02-02-verified-effective-powershell-certification-program-now-ready-for-beta.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "VERIFIED EFFECTIVE PowerShell \"certification\" program now ready for beta" -authors: - - Don Jones -date: "2013-02-02T23:43:15+00:00" -categories: - - Announcements -aliases: - - /2013/02/verified-effective-powershell-certification-program-now-ready-for-beta/ ---- - -**NOTE:** As of 4th February, we're full up for the beta. Check back later this year for the program launch. - - - I'm ready to begin a formal beta test of the new VERIFIED EFFECTIVEâ„¢ examination program, which we'd previously referred to as "PowerShell Verified." - - -Participation in the beta will be free, and if you pass it "counts." If you're interested, please [download the Program Guide][1] before February 10th, 2013. -You must agree to perform you examination on February 11th or 12th -. Complete the Program License Agreement found in the Guide, and return it, with photo ID, as indicated. Be sure to indicate either Feb 11th or 12th as your desired exam date. Materials will be sent to you via e-mail, and you will have 24 hours to complete the assignment. A qualified candidate should need no more than 4-5 hours. -We've [posted a complete set of information about the program][2] in general and the PowerShell exam in particular. -At this time, I can only accept participants who are USA residents (more on that below). International expansion will happen when the program formally launches later this year. **I will only be accepting 2-3 beta participants.** If you submit your Program License Agreement but don't hear back the same day, then you weren't selected for participation. -The final examination will be $150, and will be a human-graded assignment not a machine-graded exam. A certificate for passing scores will be delivered electronically, and you may order a physical certificate for a nominal fee. -The first exam will be **PowerShell 3.0 Toolmaking**. You should be able to pass if you know how to write advanced functions, including dealing with pipeline input, ShouldProcess support, and parameter attributes and validation. You will also need to know how to create custom formatting views and type extensions, and how to create script and manifest modules. You will need to be familiar with Windows PowerShell remoting and remoting configuration, and know how to create custom remoting endpoints (session configurations) having a specified configuration. You also need to know how to write proxy functions. You should know how to connect to SQL Server databases from within PowerShell, and how to issue queries to retrieve and manipulate database data. Note that not all of these topics may be included on every examination, but you should be prepared to perform all of them. -I look forward to hearing from you! - - - [1]: http://donjones.com/verified/ProgramGuide.pdf - [2]: http://donjones.com/verified diff --git a/content/articles/2013-02-05-scripting-games-warm-up.md b/content/articles/2013-02-05-scripting-games-warm-up.md deleted file mode 100644 index 9723e09eb..000000000 --- a/content/articles/2013-02-05-scripting-games-warm-up.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Scripting Games warm up -authors: - - Richard Siddaway -date: "2013-02-05T19:47:01+00:00" -aliases: - - /2013/02/scripting-games-warm-up/ ---- - -As a warm up for this years Scripting Games a two event Winter Scripting Camp has been organised. Details from [https://powershell.org/games/][1] - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2802/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2802/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2802&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: https://powershell.org/games/ "https://powershell.org/games/" diff --git a/content/articles/2013-02-05-want-to-be-verified-effective-for-powershell-heres-what-to-expect.md b/content/articles/2013-02-05-want-to-be-verified-effective-for-powershell-heres-what-to-expect.md deleted file mode 100644 index 3f926bcf2..000000000 --- a/content/articles/2013-02-05-want-to-be-verified-effective-for-powershell-heres-what-to-expect.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "Want to be VERIFIED EFFECTIVE for PowerShell? Here's what to expect." -authors: - - Don Jones -date: "2013-02-05T20:24:27+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/02/want-to-be-verified-effective-for-powershell-heres-what-to-expect/ ---- - -We're well into our beta for the VERIFIED EFFECTIVEâ„¢ Windows PowerShell 3.0 Toolmaker exam, and expect the program to go live in March or April of 2013. There's a good bit of information on the [program home page](http://donjones.com/verified) that you should review if you're interested in getting verified. - - - [As a note, once the program goes live, it'll be available to anyone worldwide - although the exam will only be available in English for the foreseeable future; we don't have the resources at this time to offer localized versions] - I should point out first that we're doing this program through my company, rather than directly through PowerShell.org, mainly because of some legalities. My company (Concentrated Tech) has the insurance and other items in place needed to do something like this, and I didn't want PowerShell.org, Inc., to have to pay for those things. That said, a *lot* of folks have been involved in vetting and designing the exam scenarios. Another advantage of using Concentrated Tech is that the company is set up to do a lot of the interviewing and statistical analysis needed to make a relevant exam. - The cost is the second thing I'll discuss: at $150/person, I know it's not cheap. But at least two human beings look at each person's work - there's no machine grading - and they gotta get paid. We also need to recoup some of the substantial investment that went into the exam design. Over a 3-year period, it'll hopefully be about break-even. We'll see. - On to the exam itself. There are a variety of "forms" for the exam, meaning everyone isn't getting the same assignment. That said, the approach for each form is pretty much the same. You'll get 2-3 "assignments" to complete, all of which involve writing scripts and/or commands. You get a specified amount of time to complete your assignments. - (as an aside, making multiple different exams that all test substantially the same skills is really tough, which is one reason we did a lot of testing and statistical analysis - to ensure the equivalency of each form - as part of the development process). - Some assignments are straightforward: write a script that does this, this, and that. You're given a bunch of criteria and just have to spew out the commands. There's room for creativity - so long as you (a) meet all the criteria and (b) comply with the stated best practices, you pass. "Extra" stuff doesn't count against you, and the exact approach you use isn't graded - so long as you achieve all of the results and comply with all of the stated criteria. - The "main" assignment in each form is harder. You're given a shell transcript, and you're asked to look at it and duplicate the tools you see used in it. For example: - - -`PS C:\> 'localhost' | Do-Something -confirm -verbose -VERBOSE: Checking for status.txt -VERBOSE: Status.txt exists, will append status to it -VERBOSE: Pinging localhost -VERBOSE: localhost responds -Performing action "Do-Something" on "localhost". Continue? -`That transcript should tell you that the command Do-Something accepts strings from the pipeline, supports the ShouldProcess mechanism, and outputs certain verbose status messages. You typically see each command used in several ways within the transcript, and each way reveals more about how that command works. Your job is to re-create the command, so that it produces the same results as shown in the transcript. -We've tried to use this approach to make the exam as objective as possible. If we can run the same commands using your code, and get the same output, then you probably pass. We then run a check on the "best practices" section (which is given to you in your assignment packet) to make sure you didn't deviate. -There's a tiny little bit of unstated stuff. Like, if you hand in awfully-formatted code, you just take a terribly long-winded approach that could have been vastly simplified, you write code that takes 12x longer to run than it could or should... if you do _enough_ of those wrong things in your assignment, you won't pass. We discussed these "soft" things a lot. -For example, we didn't want to add a best practice, "your code must run as efficiently as possible." That would let us explicitly ding someone who took a too-slow approach... but that kind of statement also makes people start to obsess and overthink the assignment. We don't care if your code runs 1s longer than our model solution. We care if it runs 10m longer. That's hard to state... and frankly, if someone has to _tell_ you not to write crappy, slow code... you shouldn't be "certified." -So you _can_ fail on unstated things... but you'd have to be pretty egregious about it. Two humans grading you would have to be in agreement, and in a case like that our internal policy is to get a third judge to agree with the decision. -Hopefully some of you are excited about this program and can't wait to start. Now, for some more logistics - this is stated elsewhere, but just so you're clear: -You get started by paying, and submitting a signed Program License Agreement and a copy of a government-issued photo ID. We do store that, offline, for our records. It isn't in a database anywhere. Once we have those items, we enroll you and you receive an enrollment e-mail. -The e-mail contains basic instructions for logging into our system and obtaining your Assignment Packet. Once you log in, your 24-hour countdown starts. From that point, you have a specified number of hours to download the Packet, read it, construct your script(s), ZIP them, and upload the ZIP file to us. You get one upload - once you do that, your answer is locked and we start grading. -Allow about 5 business days for grading - longer if we're swamped, although if that's the case we'll let you know. After grading, you'll get a pass/fail e-mail. We don't send you commentary on why - the goal of this isn't to make you a better person, it's to see if you've got the skills or not. If you fail, you can re-take after a 3-month wait (that helps prevent someone from slamming through all of our exam variations in a short period of time and cheating). -I know one thing that will frustrate some folks is that we don't provide any feedback. That's very common in exam situations - Microsoft certification exams don't provide item-by-item feedback, either. So, for folks who _want_ feedback, you can get that. We haven't come up with a full program yet, but you'll be able to purchase time with an expert, and you'll get a scenario similar to (but not exactly like) one of the exam assignments. You can work on your answer for as long as you like, and then sit down in LiveMeeting or Skype or whatever with the expert, who will go over your work with you. If you did a great job, you're still _not verified_ - you have to take the exam for that. But if you're unsure, it's a way to have a small "trial run" that gives you some feedback on how you did. It can also be a good distance-learning experience, for someone who's so inclined. -Anyway... there's the VERIFIED EFFECTIVE program in a nutshell. diff --git a/content/articles/2013-02-11-winter-scripting-camp-the-post-mortem.md b/content/articles/2013-02-11-winter-scripting-camp-the-post-mortem.md deleted file mode 100644 index 35fc2ee62..000000000 --- a/content/articles/2013-02-11-winter-scripting-camp-the-post-mortem.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: "Winter Scripting Camp: The Post Mortem" -authors: - - Don Jones -date: "2013-02-11T21:51:59+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/02/winter-scripting-camp-the-post-mortem/ ---- - -Ok, aftermath time. In Winter Scripting Camp I saw some very cool stuff, but I know folks want to learn from this event too, so I want to call out some stuff that I didn't like so much, and explain why. I'm keeping these brief - if you'd like a longer explanation, hit me up in the [PowerShell Q&A forum](/discuss/). BTW, none of the discussion below implies anything about the grade I awarded the entry. I considered a much broader range of criteria and opinions in awarding grades. - - -## - My -f Nitpick - - - This bugged me a wee bit. I know, it's a nit: - - -`Write-Warning ("{0} not online" -f $computer) -`I'd personally have done: - - -`Write-Warning "$computer not online" -`Personal preference; the latter is easier to read. I don't like using -f unless I actually need its formatting capability. - -## My Preference is No Preference - -Next up, a script with this: - - -`#$script:DebugPreference = "Continue" # debug msgs on -$script:DebugPreference =  "SilentlyContinue" # debug msgs off -`This only bugged me because this was in a script that contained a function; the function implemented [CmdletBinding()]. That means the function would suppress Write-Debug by default, and enable it when run with -Debug. Never a need to mess with those preference variables in an advanced function. - -## Redundant Code - -I noticed this: - - -`END{Clear-Variable -Name obj} -`Nothing wrong with that, but it's redundant. The variable $obj was created inside the function; PowerShell deletes the variable when its enclosing scope is destroyed. So the END block is just unnecessary code and an unnecessary step - forcing the shell to delete something before removing the scope, which would have deleted it anyway. - -## No Examples? - -Another one: The author took a great deal of time to put in detailed usage examples for their command. But didn't do so in comment-based help... which seems odd, because they'd added comment-based help already. That made the examples impossible to see unless you opened the script, which kinda defeats the point :(. - -## I Got Your SilentlyContinue Right Here... - -This is a huge concern for me, and it **is** something I deducted points for. **Please don't misuse** _-ErrorAction SilentlyContinue_ **and be very judicious** with _$ErrorActionPreference='SilentlyContinue'_. The former is appropriate when _you don't care if there's an error,_ like deleting a file that doesn't exist. You get an error, but who cares, because mission accomplished, right? Don't just suppress errors. I get really bugged at SilentlyContinue on Get-WmiObject statements, for example. It's bad coding. The latter example _will make me fail your script entirely_ if you just chuck it in at the top of a script. You're suppressing every error the script might generate, and it makes me wonder what you're hiding. Messing with $ErrorActionPreference is appropriate only when you need to suppress/handle a specific error that might be raised by a method or something else that doesn't have an -ErrorAction parameter. I saw some egregious overuse of this, and it's a bad, bad, bad, bad, bad coding practice. -Sadly, some of my fellow judges disagree with me on this and think that _-ErrorAction SilentlyContinue_ is merited. That's fine; that's why we have multiple judges looking at each entry. I say, if you're not going to _handle_ an error, don't _suppress_ it. Otherwise whoeever is running your command will be, like, "did anything just happen, or not?" Either let the default error messages shine through, or come up with your own alternative. -I'm gonna get a class of whiskey. Be right back. - -## Consistency! - -Ah, that's better. Next up is this: - - -`[Parameter(Mandatory=$true, ValueFromPipeline=$true)][string[]]$ComputerNames -`Try to stay consistent with PowerShell's own naming. Look at Get-WmiObject. What parameter does it use to accept computer names? -ComputerName. Not -ComputerNames. So your commands should all use -ComputerName, even if they're accepting more than one computer name. Keep your public interface - your parameter and command names - consistent. - -## You're Not an Accumulator - - -`begin {         $results = @()     } -process { $results += # whatever } -end { -        $results | Format-Table -AutoSize -    } -`Ouch. Don't like to see this. The purpose of the pipeline is to accumulate output - you shouldn't be building internal arrays to do that. And you also shouldn't ever, ever, ever, ever, almost ever use a Format command in your function. When you do that, you're preventing me from piping the output of your command to a CSV, or to XML, or into a GridView, or anyplace else. You've made your command non-reusable outside of your original scenario, a very poor programming practice. Just use Write-Output to write objects to the pipeline, and let the shell handle it from there. - -## $Args[0] - -Look, if you're going to accept parameters, _document them_ in a Param() block. So they have names and I can figure them out. $ComputerName I understand; what does $args[0] contain? I can't glance and tell - I have to follow the logic if your script, which means it isn't self-documenting, which means I'm sad. - -## Write-Host - -I will not be kind to you if you use Write-Host as a means of producing output from your script, unless your script/command is named "Show-XXXXX," indicating its only sad purpose in life is to display information on the screen and never anyplace else. - -## Don't OVERTHINK - -Too many people started treating this like a certification exam, unfortunately, and we're going to be making some changes to the real Games to address that. A lot of folks just frankly overthought things. In one case, we were really just looking for something like: - - -`Get-WmiObject -ClassName Win32_Volume -ComputerName (Get-Content names.txt) | Select-Object -Property DeviceID,@{n='FreeSpace(GB)';e={$PSItem.FreeSpace / 1GB -as [int]}} -`(That isn't the exact answer to an event - it's an illustration). In many cases we got multi-line scripts that created a dozen variables, suppressed errors (grr), pinged computers... sometimes, less is more. Again, I'm not saying anyone got down-checked for all the extra work, but guys and gals _try not to overthink this._ As I said, we're going to implement changes in the way scenarios are created for the real Games, because we want you all using creative approaches and worrying less about ticking off marks in a list. "Did I add error handling? Did I ping the computers? What am I missing? What secret thing are they looking for that I forgot?" Relax a little! - -## Up Next... - -Now... what's coming up for the real Scripting Games? Some changes, based on what we learned during Camp. Stay tuned. diff --git a/content/articles/2013-02-13-powershell-workflow-the-complete-series.md b/content/articles/2013-02-13-powershell-workflow-the-complete-series.md deleted file mode 100644 index 29a1618a6..000000000 --- a/content/articles/2013-02-13-powershell-workflow-the-complete-series.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: "PowerShell Workflow\"“the complete series" -authors: - - Richard Siddaway -date: "2013-02-13T19:34:04+00:00" -aliases: - - /2013/02/powershell-workflow-the-complete-series/ ---- - -The series of articles on PowerShell workflows that are appearing on the Scripting Guy blog is now complete. - -The articles in the series that have been published are: - - - - - - - - - - - - - -[http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/06/powershell-workflows-design-considerations.aspx][1] - -[http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/13/powershell-workflows-a-practical-example.aspx][2] - -The series is complete for now but as workflow is such a new topic expect more on it in the future. - -Until then Enjoy! - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2803/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2803/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2803&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/06/powershell-workflows-design-considerations.aspx "http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/06/powershell-workflows-design-considerations.aspx" - [2]: http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/13/powershell-workflows-a-practical-example.aspx "http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/13/powershell-workflows-a-practical-example.aspx" diff --git a/content/articles/2013-02-16-phillyposh-02072013-meeting-summary-and-presentation-materials.md b/content/articles/2013-02-16-phillyposh-02072013-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 7b3ab3d30..000000000 --- a/content/articles/2013-02-16-phillyposh-02072013-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: PhillyPoSH 02/07/2013 meeting summary and presentation materials -authors: - - John Mello -date: "2013-02-17T02:04:19+00:00" -aliases: - - /2013/02/phillyposh-02072013-meeting-summary-and-presentation-materials/ ---- - -[Jeff Hicks][1] (Microsoft MVP and [Author][2]) gave a presentation on "Getting Started with PowerShell Advanced Functions". You can download the presentation and example scripts [here][3] and watch a recording of the presentation below on our [YouTube channel][4]. -[youtube_sc url="http://www.youtube.com/watch?v=77VbOO14DFE&feature=youtu.be"] -You can keep up with Jeff at his [blog][5], on [Twitter, ][6]and on [Google Plus][7] -We would also like to thank [Interfacett][8] and [Powershell.org][9] for providing funding for this meeting! - - [1]: http://jdhitsolutions.com/ - [2]: http://www.manning.com/search/results?cx=008207406337866288189%3Avej9zumcdec&cof=FORID%3A9&ie=UTF-8&q=Jeffery+Hicks&sa=Search - [3]: https://powershell.org/wp-content/uploads/2013/02/PhillyPosh_2013-02-07_Presentations.zip - [4]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg?feature=watch - [5]: http://jdhitsolutions.com/blog/ - [6]: https://twitter.com/jeffhicks - [7]: http://gplus.to/JeffHicks - [8]: http://www.interfacett.com/ - [9]: https://powershell.org/ diff --git a/content/articles/2013-02-18-cim-cmdlets-and-remote-access.md b/content/articles/2013-02-18-cim-cmdlets-and-remote-access.md deleted file mode 100644 index fe2e84f46..000000000 --- a/content/articles/2013-02-18-cim-cmdlets-and-remote-access.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: CIM cmdlets and remote access -authors: - - Richard Siddaway -date: "2013-02-18T22:33:04+00:00" -aliases: - - /2013/02/cim-cmdlets-and-remote-access/ ---- - -When you used the WMI cmdlets - -Get-WmiObject -Class Win32_logicalDisk -ComputerName RSLAPTOP01 - -You were using DCOM to access the remote machine. Even if you accessed the local machine you were using DCOM. - -This changes in PowerShell v3 when using the CIM cmdlets. - -If you don"™t use a computername - -Get-CimInstance -ClassName Win32_logicalDisk - -You use DCOM to access the local machine. - -If you use "“computername - -Get-CimInstance -ClassName Win32_logicalDisk -ComputerName RSLAPTOP01 - -**You use WSMAN to access the machine named "“ irrespective of if it is local or remote** - -A further complication is that the named machine has to be running WSMAN 3.0 i.e. PowerShell v3 is installed. - -If you try to access a PowerShell v2 (WSMAN 2.0) machine with the CIM cmdlets you will get an error. The way round that is to create a CIMsession using DCOM as the transport protocol. If you want to learn how to do that you"™ll have to wait until after my session at the PowerShell Summit in April or buy a copy of PowerShell and WMI from [www.manning.com/siddaway2][1] - -I saw a number of people using the CIM cmdlets in the scripting games without thought to connectivity issues like this. - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2806/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2806/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2806&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: http://www.manning.com/siddaway2 diff --git a/content/articles/2013-02-18-filtering.md b/content/articles/2013-02-18-filtering.md deleted file mode 100644 index 346a49bb6..000000000 --- a/content/articles/2013-02-18-filtering.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Filtering -authors: - - Richard Siddaway -date: "2013-02-18T19:38:41+00:00" -aliases: - - /2013/02/filtering/ ---- - -I"™ve been grading the scripts in the warm up events for the Scripting Games and noticed a lot of people doing this: - -Get-WmiObject -Class Win32_LogicalDisk | where {$_.DriveType -eq 3} - -Ok now it works but there are a couple of things wrong with this approach. - -Firstly, you are ignoring the built in capabilities of the get-wmiobject cmdlet - -PS> Get-Command Get-WmiObject -Syntax - -Get-WmiObject [-Class] [[-Property] ] **[-Filter ]** [-Amended] [-DirectRead] [-AsJob] -[-Impersonation ] [-Authentication ] [-Locale ] -[-EnableAllPrivileges] [-Authority ] [-Credential -] [-ThrottleLimit ] [-ComputerName -] [-Namespace ] [] - -Get-WmiObject [[-Class] ] [-Recurse] [-Amended] [-List] [-AsJob] [-Impersonation ] -[-Authentication ] [-Locale ] [-EnableAllPrivileges] [-Authority ] [-Credential - -] [-ThrottleLimit ] [-ComputerName ] [-Namespace ] [] - -Get-WmiObject -Query [-Amended] [-DirectRead] [-AsJob] [-Impersonation ] [-Authentication -] [-Locale ] [-EnableAllPrivileges] [-Authority ] [-Credential -] -[-ThrottleLimit ] [-ComputerName ] [-Namespace ] [] - -Get-WmiObject [-Amended] [-AsJob] [-Impersonation ] [-Authentication ] -[-Locale ] [-EnableAllPrivileges] [-Authority ] [-Credential -] [-ThrottleLimit ] -[-ComputerName ] [-Namespace ] [] - -Get-WmiObject [-Amended] [-AsJob] [-Impersonation ] [-Authentication ] -[-Locale ] [-EnableAllPrivileges] [-Authority ] [-Credential -] [-ThrottleLimit ] -[-ComputerName ] [-Namespace ] [] - -Notice the filter parameter in the first parameter set. - -When you run Get-WMIObject in effect you are running a WQL query - -"SELECT * FROM Win32_LogicalDisk" - -if you move the filter into the query it changes to - -"SELECT * FROM Win32_LogicalDisk WHERE DriveType = 3" - -This is coded in the cmdlet as - -Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType = 3″ - -Why is this better? - -Because you are doing less work against the WMI repository "“ therefore more efficient. - -Also if you are running against a remote machine filtering in the WMI query means you bring less data back across the network which makes you whole process more efficient. - -Bottom line "“ filter as early as you sensibly can and preferably on the remote machine. - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2804/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2804/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2804&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-02-18-uk-powershell-group-advanced-functions.md b/content/articles/2013-02-18-uk-powershell-group-advanced-functions.md deleted file mode 100644 index 682485bae..000000000 --- a/content/articles/2013-02-18-uk-powershell-group-advanced-functions.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: "UK PowerShell Group\"“Advanced functions" -authors: - - Richard Siddaway -date: "2013-02-18T19:57:08+00:00" -aliases: - - /2013/02/uk-powershell-group-advanced-functions/ ---- - -When: Tuesday, Feb 26, 2013 7:30 PM (GMT) - -Where: Virtual - -\*~\*~\*~\*~\*~\*~\*~\*~\*~\* - -Advanced functions give you ability to create functions that act like cmdlets. Learn how to get the most from this powerful part of the PowerShell functionality - -**Notes** - -Richard Siddaway has invited you to attend an online meeting using Live Meeting. -**[Join the meeting.][1]** -**Audio Information** -**Computer Audio** -To use computer audio, you need speakers and microphone, or a headset. -**First Time Users:** -To save time before the meeting, [check your system][2] to make sure it is ready to use Microsoft Office Live Meeting. -**Troubleshooting** -Unable to join the meeting? Follow these steps: - -1. Copy this address and paste it into your web browser: - - -2. Copy and paste the required information: -Meeting ID: G79DNP -Entry Code: 9$t#&PK#8 -Location: - -If you still cannot enter the meeting, [contact support][3] - -**Notice** -Microsoft Office Live Meeting can be used to record meetings. By participating in this meeting, you agree that your communications may be monitored or recorded at any time during the meeting. - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2805/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2805/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2805&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: https://www.livemeeting.com/cc/usergroups/join?id=G79DNP&role=attend&pw=9%24t%23%26PK%238 - [2]: http://go.microsoft.com/fwlink/?LinkId=90703 - [3]: http://r.office.microsoft.com/r/rlidLiveMeeting?p1=12&p2=en_US&p3=LMInfo&p4=support diff --git a/content/articles/2013-02-18-verified-effective-about-ready-to-go-live.md b/content/articles/2013-02-18-verified-effective-about-ready-to-go-live.md deleted file mode 100644 index fccab95b6..000000000 --- a/content/articles/2013-02-18-verified-effective-about-ready-to-go-live.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "\"Verified Effective\" About Ready to Go Live" -authors: - - Don Jones -date: "2013-02-18T17:01:32+00:00" -categories: - - Announcements -aliases: - - /2013/02/verified-effective-about-ready-to-go-live/ ---- - -Before the verification exam becomes available to the public, I need ONE OR TWO people to be the first through the complete program. This is not a "beta;" the exam is finalized and you will have to pay for your verification. The first one or two people will be semi-automated as I nail down the final payment integration bits, and then we'll throw it open to the public. -If you're interested, contact me at don at Concentrated Tech.com. First come, first served. diff --git a/content/articles/2013-02-21-creating-a-windows-2012-domain-controller.md b/content/articles/2013-02-21-creating-a-windows-2012-domain-controller.md deleted file mode 100644 index 89b106f37..000000000 --- a/content/articles/2013-02-21-creating-a-windows-2012-domain-controller.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Creating a Windows 2012 Domain Controller -authors: - - Richard Siddaway -date: "2013-02-21T19:50:09+00:00" -aliases: - - /2013/02/creating-a-windows-2012-domain-controller/ ---- - -I decided to replace one of the DCs in my test environment with a Windows 2012 Server Core machine. Server Core has really come of age in Windows 2012 "“ its easy to configure. - -I"™ve covered configuring a server before but to recap: - - * Rename the machine "“ use Rename-Computer - * Set Network "“ use Set-NetIPInterface (address) & et-DnsClientServerAddress( dns address) & Rename-netAdapter - * Join to domain "“ use Add-Computer - -To create the domain controller use the ADDSDeployment module. You"™ll only find this on servers where you"™ve installed the AD Domain Services feature which you do like this: - -Install-WindowsFeature -Name AD-Domain-Services -Confirm:$false - - - -Import the module - -Import-Module ADDSDeployment -Get-Command -Module ADDSDeployment - -Create the Domain Controller. This is the equivalent of running DCPROMO in earlier versions. Even better you don"™t need the answer file. Everything is a parameter on the cmdlet. - -Install-ADDSDomain Controller -DomainName "manticore.org" -InstallDns -Credential (Get-Credential manticore\richard) -ApplicationPartitionsToReplicate * - -Thats it! Just wait for replication to happen. - -You can also demote a domain controller - -$cred = Get-Credential -Uninstall-ADDSDomainController -Credential $cred -RemoveApplicationPartitions -Confirm:$false - -Restart the machine and uninstall AD & DNS - -Uninstall-WindowsFeature -Name AD-Domain-Services, DNS -Confirm:$false -Restart-Computer -ComputerName dc02 - -Leave the domain - -$cred = Get-Credential manticore\richard -Remove-Computer -UnjoinDomainCredential $cred -Workgroup Test - -Trash the VM. - -And best of all it works over remoting. You will need to recreate the session for restarts & changes but it is really easy. - -Server Core is now a much friendlier option. - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2807/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2807/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2807&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-02-24-verified-effective-for-powershell-3-0-toolmaking-now-live.md b/content/articles/2013-02-24-verified-effective-for-powershell-3-0-toolmaking-now-live.md deleted file mode 100644 index 855a3e245..000000000 --- a/content/articles/2013-02-24-verified-effective-for-powershell-3-0-toolmaking-now-live.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: VERIFIED EFFECTIVE for PowerShell 3.0 Toolmaking now live -authors: - - Don Jones -date: "2013-02-24T19:10:05+00:00" -categories: - - Announcements -aliases: - - /2013/02/verified-effective-for-powershell-3-0-toolmaking-now-live/ ---- - -[It's now available globally][1]. -I suggest downloading the Program Guide, which includes the agreement and directions for enrolling. There's also a specific guide for the PowerShell 3.0 Toolmaking examination, which you should read prior to paying. -Once you've paid, and sent in the necessary signed paperwork, you'll get your exam info via e-mail. You can log in at any time to download your exam scenario and begin working. From the time of your first login, the clock starts ticking and you have 24 hours to upload your results. After uploading your results, you'll hear back within 5 business days - these are graded by a human, not a machine, so be patient. - - [1]: http://donjones.com/verified "Creating a Windows 2012 Domain Controller" diff --git a/content/articles/2013-02-25-advanced-functions-webcast.md b/content/articles/2013-02-25-advanced-functions-webcast.md deleted file mode 100644 index d902e82cb..000000000 --- a/content/articles/2013-02-25-advanced-functions-webcast.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Advanced Functions webcast -authors: - - Richard Siddaway -date: "2013-02-25T19:30:24+00:00" -aliases: - - /2013/02/advanced-functions-webcast/ ---- - -Quick reminder that the UK PowerShell group is hosting a Live Meeting webcast on PowerShell Advanced functions tomorrow "“ details from - -[http://richardspowershellblog.wordpress.com/2013/02/18/uk-powershell-groupadvanced-functions/][1] - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2810/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2810/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2810&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: http://richardspowershellblog.wordpress.com/2013/02/18/uk-powershell-groupadvanced-functions/ "http://richardspowershellblog.wordpress.com/2013/02/18/uk-powershell-groupadvanced-functions/" diff --git a/content/articles/2013-02-25-new-book.md b/content/articles/2013-02-25-new-book.md deleted file mode 100644 index e39fae163..000000000 --- a/content/articles/2013-02-25-new-book.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: New book -authors: - - Richard Siddaway -date: "2013-02-25T18:57:21+00:00" -aliases: - - /2013/02/new-book/ ---- - -My latest book has been released on the Manning Early Access Program (MEAP). Active Directory Management in a Month of Lunches takes the newcomer to AD through the tasks they need to perform to manage their organization"™s AD. - -it assumes no knowledge of AD and shows how to perform the common management tasks from the GUI (AD Administrative Center & the venerable AD Users & Computers) as well as PowerShell (using the Microsoft cmdlets). - -Chapters 1-7 are currently available from [www.manning.com\siddaway3][1] with more to come soon - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2808/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2808/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2808&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: http://www.manning.com%5Csiddaway3/ diff --git a/content/articles/2013-02-25-powershell-in-depth-nearly-there.md b/content/articles/2013-02-25-powershell-in-depth-nearly-there.md deleted file mode 100644 index 8a7e71f8f..000000000 --- a/content/articles/2013-02-25-powershell-in-depth-nearly-there.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "PowerShell in Depth\"“nearly there" -authors: - - Richard Siddaway -date: "2013-02-25T19:26:27+00:00" -aliases: - - /2013/02/powershell-in-depth-nearly-there/ ---- - -PowerShell in Depth is rapidly approaching its publication date "“ see [www.manning.com/jones2][1] for details - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2809/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2809/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2809&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: http://www.manning.com/jones2 diff --git a/content/articles/2013-02-27-book-offer-ad-management-in-a-month-of-lunches.md b/content/articles/2013-02-27-book-offer-ad-management-in-a-month-of-lunches.md deleted file mode 100644 index f0c3b4211..000000000 --- a/content/articles/2013-02-27-book-offer-ad-management-in-a-month-of-lunches.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Book offer\"“AD Management in a Month of Lunches" -authors: - - Richard Siddaway -date: "2013-02-27T20:24:14+00:00" -aliases: - - /2013/02/book-offer-ad-management-in-a-month-of-lunches/ ---- - -AD Management in a month of lunches is today"™s deal of the day from Manning "“ [www.manning.com][1] - -The get 50% off today using code **dotd0227cc. The offer is good for today only** - -The same code can be used for 50% off PowerShell in Practice - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2813/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2813/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2813&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: http://www.manning.com/ diff --git a/content/articles/2013-02-27-filter-or-ldap-filter.md b/content/articles/2013-02-27-filter-or-ldap-filter.md deleted file mode 100644 index f9c8f6488..000000000 --- a/content/articles/2013-02-27-filter-or-ldap-filter.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Filter or LDAP filter -authors: - - Richard Siddaway -date: "2013-02-27T20:16:47+00:00" -aliases: - - /2013/02/filter-or-ldap-filter/ ---- - -Many of the Microsoft AD cmdlets have a "“Filter and an "“LDAPFilter parameter. So what"™s the difference? - -PS> Get-Help Get-ADUser -Parameter \*Filter\* - --Filter - Specifies a query string that retrieves Active Directory objects. This string uses the PowerShell Expression - Language syntax. The PowerShell Expression Language syntax provides rich type-conversion support for value types received by the Filter parameter. The syntax uses an in-order representation, which means that the operator is placed between the operand and the value. For more information about the Filter parameter, see about_ActiveDirectory_Filter. - --LDAPFilter - Specifies an LDAP query string that is used to filter Active Directory objects. You can use this parameter to run your existing LDAP queries. The Filter parameter syntax supports the same functionality as the LDAP syntax. For more information, see the Filter parameter description and the about_ActiveDirectory_Filter. - -This means you have two ways to approach a problem. Lets think about finding a single user: - -Get-ADUser -LDAPFilter "(samAccountName=Richard)" - -Get-ADUser -Filter {samAccountName -eq 'Richard'} - -The LDAPFilter uses LDAP query syntax "“ attribute and value. Filter uses PowerShell syntax. You could think of the "“Filter as a condensed version of - -Get-ADUser -Filter * | where samAccountName -eq 'Richard' - -Use the "“Filter parameter because its less typing and you filter early "“ especially important if querying across a network. - -You can use multiple attributes in the filters – & implies AND in the LDAP filter - -Get-ADUser -LDAPFilter "(&(givenname=Bill)(sn=Green))" - -Get-ADUser -Filter {GivenName -eq 'Bill' -and Surname -eq 'Green'} - -The LDAP filter HAS to use the correct attribute name but Filter uses the property name returned by Get-ADUser. - -LDAP filters can get very complicated very quickly. For instance if you want to find the disabled user accounts - -Get-ADUser -LDAPFilter "(&(objectclass=user)(objectcategory=user)(useraccountcontrol:1.2.840.113556.1.4.803:=2))" - -Get-ADUser -Filter {Enabled -eq $false} - -Alternatively,and in my opinion, its simpler to use Search-ADaccount - -Search-ADAccount -AccountDisabled "“UsersOnly - -Which one should you use? The one that best solves your problem. I mix & match to suit the search I"™m performing - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2811/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2811/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2811&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-02-27-last-nights-live-meeting.md b/content/articles/2013-02-27-last-nights-live-meeting.md deleted file mode 100644 index 166b1a129..000000000 --- a/content/articles/2013-02-27-last-nights-live-meeting.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Last nights Live Meeting -authors: - - Richard Siddaway -date: "2013-02-27T20:18:54+00:00" -aliases: - - /2013/02/last-nights-live-meeting/ ---- - -The sound was awful on last night"™s Live Meeting so I intend to re-record it at the weekend. I"™ll post the recording and scripts once its done. - -I"™m also investigating an alternative delivery mechanism that will hopefully solve the sound issues. - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2812/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2812/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2812&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-02-27-powershell-org-forums-etiquette.md b/content/articles/2013-02-27-powershell-org-forums-etiquette.md deleted file mode 100644 index 1309e2e61..000000000 --- a/content/articles/2013-02-27-powershell-org-forums-etiquette.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: PowerShell.org Forums Etiquette -authors: - - Don Jones -date: "2013-02-27T17:19:13+00:00" -categories: - - Tips and Tricks -aliases: - - /2013/02/powershell-org-forums-etiquette/ ---- - -Folks often ask for some advice on what to do, and what not to do, in the forums. Here are some suggestions. - - - 1. Don't apologize for being a "noob" or "newbie" or "n00b." There's just no need - nobody will think you're stupid, and the forums are all about asking questions. Just ask. - 2. Try to avoid using obscure or punctuation aliases (like ? and %) - use command names instead. It makes your post easier for everyone, including n00bs, to follow. - 3. Use the CODE or POWERSHELL buttons in the forums editor to format PowerShell and other code. - 4. If your problem is solved, find the little green checkmark button along the top of your message (or one of the replies; it's near the Twitter and Facebook and other buttons), and click it. That helps indicate to everyone else that you found a solution. - 5. Don't post massive scripts. We're all volunteers, and we don't have time to read all that, nor will we copy, paste, and run it. Post an excerpt, and clearly state what you're having problems with. - 6. Post error messages, as appropriate. They help. - 7. Don't ask folks to provide you with a complete script, or to rewrite your script. Again, we're all volunteers - respect that we're taking time to help you, and help us minimize that time. - 8. Try to ask just one question at a time. Posts with ten questions are a lot harder to help with. - 9. DO post what you've tried, what errors you got, and what didn't work. It's a lot easier, sometimes, to correct what you've already done than to try and write something from scratch. - 10. If you've been given a working solution, SAY THANK YOU! Then make sure you know WHY it works... and ask for an explanation if you don't! - 11. Take the time to educate yourself. Pick up a book, or a training video, or take a class, or attend a conference. Yes, those take time - but it's time well-spent. If you're continually asking other people to spend time answering questions that are _already_ answered in every book, video, course, etc.... well, that's kinda wasting _their_ time, right? Folks on the forums can help you more effectively if you have a base education first. - -Have your own etiquette suggestions? Drop 'em in the comments! diff --git a/content/articles/2013-03-01-windows-8-kindle-app.md b/content/articles/2013-03-01-windows-8-kindle-app.md deleted file mode 100644 index 8b13483d0..000000000 --- a/content/articles/2013-03-01-windows-8-kindle-app.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Windows 8 Kindle app -authors: - - Richard Siddaway -date: "2013-03-01T20:22:50+00:00" -aliases: - - /2013/03/windows-8-kindle-app/ ---- - -Amazon have released an update for the Windows 8 Kindle app that appears to have resolved the corrupted display issue that occurred after every few pages of reading. - -I would recommend updating the app immediately. The app now seems to be usable. - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2814/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2814/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2814&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-03-04-network-adapters.md b/content/articles/2013-03-04-network-adapters.md deleted file mode 100644 index 5b8591573..000000000 --- a/content/articles/2013-03-04-network-adapters.md +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: Network adapters -authors: - - Richard Siddaway -date: "2013-03-04T20:24:52+00:00" -aliases: - - /2013/03/network-adapters/ ---- - -The WMI classes Win32_NetworkAdapter and Win32_NetworkAdapterConfiguration have seen a lot of use over the years. They can be a bit fiddly to use which is why the NetAdapter module in Windows 8/2012 is a so welcome. - -Lets start by looking at basic information gathering - -PS> Get-NetAdapter | ft -a - -Name InterfaceDescription ifIndex Status MacAddress LinkSpeed -—- ——————– ——- —— ———- ——— -Ethernet NVIDIA nForce 10/100/1000 Mbps Ethernet 13 Up 00-1F-16-63-F5-DF 100 Mbps -WiFi Qualcomm Atheros AR5007 802.11b/g WiFi Adapter 12 Up 00-24-2B-2F-9C-A5 54 Mbps - -We get the Name & description, status, MAC address and link speed as the default display. Contrast with Win32_NetworkAdapter for the same two interfaces - -ServiceName : athr -MACAddress : 00:24:2B:2F:9C:A5 -AdapterType : Ethernet 802.3 -DeviceID : 10 -Name : Qualcomm Atheros AR5007 802.11b/g WiFi Adapter -NetworkAddresses : -Speed : 54000000 - -ServiceName : NVNET -MACAddress : 00:1F:16:63:F5:DF -AdapterType : Ethernet 802.3 -DeviceID : 11 -Name : NVIDIA nForce 10/100/1000 Mbps Ethernet -NetworkAddresses : -Speed : 100000000 - -Notice the ifIndex from Get-NetAdapter & DeviceId from Win32_NetworkAdapter. Two different numbers to identify the device. - -What else can Get-NetAdapter tell us: - -PS> Get-NetAdapter -Name Ethernet | fl * - -ifAlias : Ethernet -InterfaceAlias : Ethernet -ifIndex : 13 -ifDesc : NVIDIA nForce 10/100/1000 Mbps Ethernet -ifName : Ethernet_7 -DriverVersion : 73.3.0.0 -LinkLayerAddress : 00-1F-16-63-F5-DF -MacAddress : 00-1F-16-63-F5-DF -Status : Up -**LinkSpeed : 100 Mbps -MediaType : 802.3 -PhysicalMediaType : 802.3 -AdminStatus : Up -MediaConnectionState : Connected -**DriverInformation : Driver Date 2010-03-04 Version 73.3.0.0 NDIS 6.20 -DriverFileName : nvmf6232.sys -NdisVersion : 6.20 -ifOperStatus : Up -Caption : -Description : -ElementName : -InstanceID : {188C370D-AD90-46F3-8AD2-0C10AFB6490C} -CommunicationStatus : -DetailedStatus : -HealthState : -InstallDate : -Name : Ethernet -OperatingStatus : -OperationalStatus : -PrimaryStatus : -StatusDescriptions : -AvailableRequestedStates : -EnabledDefault : 2 -EnabledState - : 5 -OtherEnabledState : -RequestedState : 12 -TimeOfLastStateChange : -TransitioningToState : 12 -AdditionalAvailability : -Availability : -CreationClassName : MSFT_NetAdapter -DeviceID : {188C370D-AD90-46F3-8AD2-0C10AFB6490C} -ErrorCleared : -ErrorDescription : -IdentifyingDescriptions : -LastErrorCode : -MaxQuiesceTime : -OtherIdentifyingInfo : -PowerManagementCapabilities : -PowerManagementSupported : -PowerOnHours : -StatusInfo : -SystemCreationClassName : CIM_NetworkPort -SystemName : RSLAPTOP01 -TotalPowerOnHours : -MaxSpeed : -OtherPortType : -PortType : -RequestedSpeed : -Speed : 100000000 -UsageRestriction : -ActiveMaximumTransmissionUnit : 1500 -AutoSense : -FullDuplex : True -LinkTechnology : -NetworkAddresses : {001F1663F5DF} -OtherLinkTechnology : -OtherNetworkPortType : -PermanentAddress : 001F1663F5DF -PortNumber : 0 -Support - edMaximumTransmissionUnit : -AdminLocked : False -ComponentID : pci\ven_10de&dev_0760 -ConnectorPresent : True -DeviceName : \Device\{188C370D-AD90-46F3-8AD2-0C10AFB6490C} -DeviceWakeUpEnable : False -DriverDate : 2010-03-04 -DriverDateData : 129121344000000000 -DriverDescription : NVIDIA nForce 10/100/1000 Mbps Ethernet -DriverMajorNdisVersion : 6 -DriverMinorNdisVersion : 20 -DriverName : \SystemRoot\system32\DRIVERS\nvmf6232.sys -DriverProvider : NVIDIA -DriverVersionString : 73.3.0.0 -EndPointInterface : False -**HardwareInterface : True -**Hidden : False -HigherLayerInterfaceIndices : {26} -IMFilter : False -InterfaceAdminStatus : 1 -InterfaceDescription : NVIDIA nForce 10/100/1000 Mbps Ethernet -InterfaceGuid : {188C370D-AD90-46F3-8AD2-0C10AFB6490C} -InterfaceIndex : 13 -InterfaceName : Ethernet_7 -InterfaceOperationalStatus : 1 -InterfaceType : 6 -iSCSIInterface : False -LowerLayerInterfaceIndices : -MajorDriverVersion : 73 -MediaConnectState : 1 -MediaDuplexState : 2 -MinorDriverVersion : 30 -**MtuSize : 1500 -**NdisMedium : 0 -NdisPhysicalMedium : 14 -NetLuid &n - bsp; : 1688849977704448 -NetLuidIndex : 7 -NotUserRemovable : False -OperationalStatusDownDefaultPortNotAuthenticated : False -OperationalStatusDownInterfacePaused : False -OperationalStatusDownLowPowerState : False -OperationalStatusDownMediaDisconnected : False -PnPDeviceID : PCI\VEN_10DE&DEV_0760&SUBSYS_360A103C&REV_A2\3&2411E6FE&0&50 -**PromiscuousMode : False -**ReceiveLinkSpeed : 100000000 -State : 2 -TransmitLinkSpeed : 100000000 -Virtual : False -VlanID : -WdmInterface : False -PSComputerName : -**CimClass : ROOT/StandardCimv2:MSFT_NetAdapter -**CimInstanceProperties : {Caption, Description, ElementName, InstanceID...} -CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties - -Notice the CimClass property ROOT/StandardCimv2:MSFT_NetAdapter – this is one of the new WMI classes introduced in Windows 8. Does this class have any methods? - -Get-CimClass -Namespace ROOT/StandardCimv2 -ClassName MSFT_NetAdapter | select -ExpandProperty CimClassMethods - -Name -—- -RequestStateChange -SetPowerState -Reset -EnableDevice -OnlineDevice -QuiesceDevice -SaveProperties -RestoreProperties -Enable -Disable -Restart -Lock -Unlock -Rename - -These will be investigated in other posts "“ maybe we get cmdlets to work with these as well - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2815/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2815/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2815&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-03-08-announcing-winter-scripting-camp-winners.md b/content/articles/2013-03-08-announcing-winter-scripting-camp-winners.md deleted file mode 100644 index 8a80b3f6d..000000000 --- a/content/articles/2013-03-08-announcing-winter-scripting-camp-winners.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Announcing Winter Scripting Camp Winners -authors: - - Don Jones -date: "2013-03-08T22:57:07+00:00" -categories: - - Scripting Games -aliases: - - /2013/03/announcing-winter-scripting-camp-winners/ ---- - -I know, this took forever. Mea culpa. I've been working my shell off, and finally got around to pulling the info. - - -**Beginner Track** - - 1. Wouter Beens (4.667) - 2. Laurel Raven (4.5) - 3. Chris Davis (4.5) - -**Advanced Track** - - 1. Alexander Kuzin (4.5) - 2. Lido Paglia (4.5) - 3. (anonymous) (4) - -Those are the average scores from those entries, and in case of a tie we broke it by submission timestamp. Things will be working a bit differently in the actual Games, coming your way in April, so stay tuned. In fact, you can [subscribe to a specific topic for Scripting Games announcements][1], if you like. - - - [1]: https://powershell.org/category/announcements/scripting-games/ diff --git a/content/articles/2013-03-08-powershell-summit-2014-planning-continues.md b/content/articles/2013-03-08-powershell-summit-2014-planning-continues.md deleted file mode 100644 index 06d74a3fd..000000000 --- a/content/articles/2013-03-08-powershell-summit-2014-planning-continues.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: PowerShell Summit 2014 Planning Continues -authors: - - Don Jones -date: "2013-03-08T15:09:16+00:00" -categories: - - PowerShell Summit -aliases: - - /2013/03/powershell-summit-2014-planning-continues/ ---- - -In an effort to keep folks as fully informed as possible, I'll periodically share information about the Summit for next year. In this update, I want to explain how we're hoping to address some of the issues (all good ones, actually) that we've experienced with the 2013 event. - - -First, the 2013 event sold out _fast._ We have a fire code limit of about 100 people and we hit it quickly - and our wait list ballooned to almost as many people. The moral of that story is that (a) we need more space and (b) people gotta sign up quicker if they want a spot! This is like grabbing those U2 tickets - camp out overnight and snap 'em up. So we're hoping to be in the Microsoft Conference Center (MSCC) on campus, which should allow us around 250 attendees in 2014. We can't book that space until about a year out, we're told, but once we can start booking we will announce it here. Our 2013 alumni will get first dibs, and we'll have about 25 early bird tickets to sell. We expect pricing to be about $700 for those, and about $850 for full-price tickets, plus about $40-$50 in ticketing fees (which covers credit card merchant fees and the ticketing company fee). -Second, we _will_ offer tickets as soon as we can do so. That may include an "I'm Feeling Lucky" ticket even before we know our dates (we're still aiming for April 2014). However, due to changing regulations, we can only offer refunds for 30 days after you make your purchase, or (due to logistics) until February 1st, _whichever comes first._ That's something you'll have to take into account. -Third, we're going to make the waitlist process a bit more automated, and give you the ability to use the waitlist to sell your ticket to someone else if you change your mind about attending. People will be able to waitlist on PowerShell.org, and prospective ticket-sellers will be able to offer tickets to that list. You're on your own for completing the transaction (we suggest PayPal), and you simply notify us of the transfer once it's complete. -Fourth, in case the question of recording the sessions comes up again, here's the deal. It's expensive. We've looked into it, and we'll need about $8,000 in equipment, which is a one-time expense that will let us record sessions with a minimum of on-site labor. So we're going to launch an IndieGoGo campaign in late 2013 to try and raise that money. Contributors will receive (depending on the amount they contribute) access to all future Summit recordings, a discount on Summit recordings for 2014, or full access to the 2014 recordings. If we don't meet our goal, we won't record, and everyone gets their money back. If we do meet our goal, only contributors will get access to the 2014 videos. However, in subsequent years we will sell (for a nominal fee) access to the videos to the public - that'll happen after the Summit is over. In years where the Summit sells out, we'll put the videos online for free (unless we need to recoup labor costs, in which case there might still be a nominal fee). This is the fair-est approach we could come up with that balances our need to have a successful on-site event (without the paying attendees, we can't do this thing at all) and to accommodate the needs of folks who can't possibly attend. -Fifth, we still have no word on any events outside the US, and probably will not. We are simply not pursuing it at this time. It gets very complicated when a US business starts doing events in other countries, and we don't have the manpower or resources to tackle that right now. Several folks have expressed an interest in spearheading various non-US versions of the Summit, and most of those are going nowhere. One problem is that, in Europe, nobody appears interested in a "Euro Summit;" they all want one in their own country, which makes the whole endeavor financially risky and exponentially more complicated. There's a huge concern that if we do one in (say) Barcelona, nobody from outside that area will even come. Another problem is that the Summit involves an insane amount of work - personally, I've spent hundreds of hours on this and I know Kirk has as well, along with Jason, Jeff, and Richard, the Scripting Wife, and a few more volunteers. It's a _lot_ of work, and thus far we haven't seen anyone outside the US willing to take it on. Keep in mind that we all still _need to have our full-time jobs_ to pay for silly things like groceries and electricity; we can't afford to take out much more volunteer time. -Sixth, the 2014 Summit will look much like the 2013 Summit in terms of content: about three dozen sessions in one-hour blocks, with about 45 minutes per session (including Q&A time). We'll feed you breakfast and lunch. We _are_ going to book out a block of rooms at a nearby hotel, and will run a shuttle bus to and from that hotel (only!) and the Summit venue. That should help lower travel costs by reducing the need for a rental car. We are _not_ going to be able to hold enough rooms for all 200-250 attendees (when you hold a room, you pay for it whether it gets used or not, so the financial risk there is huge). We are hoping to block about 60 rooms - so it'll become important to book early. Once that block is sold, you're on your own - although the same hotel may well have rooms at their normal rate, which is what we're hoping will happen. -Seventh, communications with registered attendees has been a huge PITA, mainly because some providers - like ForeFront Online Protection (FOLP) have a global block against EventBrite, our ticket company. Yeah, awesome. So for 2014 we're going to use [THIS blog category][1] and our [Twitter feed][2] to "push" communications. We'll still attempt to use email, but it's just not reliable in this age of ultra-spam-blocking. So if you register, _it will be your responsibility to check for updated information._ After all, you're supposed to be the big, smart IT professional, so you should be able to figure out how to do that . -I'll continue posting updates as information is available, and we hope you'll start talking to the boss about the 2014 show. The 2013 show is **sold out**. As of right now, we are no longer to able process refunds for existing attendees, so we're no longer processing the 2013 wait list. That means it's time to start looking at the 2014 show. -Any questions, drop 'em in the comments! -Thanks! -Don - - - [1]: https://powershell.org/category/announcements/powershell-summit/ - [2]: http://twitter.com/pshsummit "Episode 218 "“ PowerScripting Podcast "“ PowerShell jokes and SQL talk with the MidnightDBAs" diff --git a/content/articles/2013-03-08-wmi-explorer.md b/content/articles/2013-03-08-wmi-explorer.md deleted file mode 100644 index 7b69344cf..000000000 --- a/content/articles/2013-03-08-wmi-explorer.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: WMI Explorer -authors: - - Don Jones -date: "2013-03-08T16:02:33+00:00" -categories: - - Tools -aliases: - - /2013/03/wmi-explorer/ ---- - -This is a PowerShell-based WMI Explorer tool created by Marc van Orsouw (aka /\/\O\/\/). His Web site has been down for ages, but [Thomas Lee][1] was helpful enough to post a copy of this, and we're hosting it here as a backup against further unavailability. -[Download WMI Explorer][2] - - [1]: http://tfl09.blogspot.com/2013/03/wmi-explorerwheres-it-gonea-temporary.html?utm_source=twitterfeed&utm_medium=twitter - [2]: https://powershell.org/wp-content/uploads/2013/03/wmiexplorer.zip diff --git a/content/articles/2013-03-10-phillyposh-03072013-meeting-summary-and-presentation-materials.md b/content/articles/2013-03-10-phillyposh-03072013-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 05c7de6d6..000000000 --- a/content/articles/2013-03-10-phillyposh-03072013-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: PhillyPoSH 03/07/2013 meeting summary and presentation materials -authors: - - John Mello -date: "2013-03-10T23:06:50+00:00" -aliases: - - /2013/03/phillyposh-03072013-meeting-summary-and-presentation-materials/ ---- - -1. [John Mello][1] gave a brief overview of the history of the Scripting Games and an overview of the beginner events from the 2013 Winter Scripting Camp. A copy of his presentation and 2013 Winter Scripting Camp submissions can be found [here][2]. - 2. [Lido Paglia][3] gave an overview of the advanced events from the 2013 Winter Scripting Camp in addition to doing an in-depth review of [Don Jones][4]"™ [Winter Scripting Camp Post Mortem][5]. A copy of his 2013 Winter Scripting Camp submissions can be found [here][6]. - 3. Various other information worth mentioning: - 1. Group member [Greg Martin][7] presented a problem he ran into creating a COM object in PowerShell to hold an instance of Internet Explorer which he would then use to open a page. Stepping through the script worked fine, but running the script failed.  The issue was that the object would more often than not be blank when he tried to reference it. The group offered some - suggestions and ideas to work around the issue which later helped Greg find the root cause. A breakdown of the problem and final solution can be found on [Greg"™s Blog][8] - 2. Need help making sure your script is not using aliases? Take a look at [Jeff Hicks convert to Alias function!][9] - 3. Following up on [Lido Paglia][3]"™s discussion of [Don Jones][4]"™ [Winter Scripting Camp Post Mortem][5], here is a list of approved verbs and naming conventions for PowerShell directly from Microsoft: - 1. - 2. - 4. [The][10] [PowerShell Mississippi User Group][11] is offering a series of [online meetings every 2nd Tuesday of the month at 8:30PM CST for the rest of 2013][12]. The speaker line-up is an impressive who"™s who of PowerShell MVPs! - 5. Check out the [Windows 7 Resource Kit PowerShell Pack][13], which contains over 800 scripts in 10 different modules. For example : - 1. ISE shortcuts - 2. Task Scheduler - 3. PowerShell Image manipulation - 4. And many more! - 4. Post Meeting announcement - 1. [Lido Paglia][3] came in 2nd place in the [2013 Winter Scripting Camp][14]! Give him a high five next time you see him! - - [1]: http://mellositmusings.com/ - [2]: https://powershell.org/wp-content/uploads/2013/03/PhillPosh_2013-03-04_PT1.zip - [3]: http://paglia.org/ - [4]: http://donjones.com/ - [5]: https://powershell.org/2013/02/11/winter-scripting-camp-the-post-mortem/ - [6]: https://powershell.org/wp-content/uploads/2013/03/PhillPosh_2013-03-04_PT2.zip - [7]: http://tiki.gmartin.org/ - [8]: http://tiki.gmartin.org/tiki-view_blog_post.php?postId=181 - [9]: http://jdhitsolutions.com/blog/2011/04/powershell-ise-alias-to-command/ - [10]: http://msdn.microsoft.com/en-us/library/windows/desktop/ms714395(v=vs.85).aspx - [11]: http://mspsug.com/ - [12]: http://mspsug.com/2013/02/27/mississippi-powershell-user-group-speaker-lineup-for-2013/ - [13]: http://blogs.msdn.com/b/powershell/archive/2009/10/15/introducing-the-windows-7-resource-kit-powershell-pack.aspx - [14]: https://powershell.org/category/announcements/scripting-games/ diff --git a/content/articles/2013-03-11-network-adapters-disableenable.md b/content/articles/2013-03-11-network-adapters-disableenable.md deleted file mode 100644 index 78adb7b7a..000000000 --- a/content/articles/2013-03-11-network-adapters-disableenable.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: "Network Adapters\"“Disable/Enable" -authors: - - Richard Siddaway -date: "2013-03-11T20:09:06+00:00" -aliases: - - /2013/03/network-adapters-disableenable/ ---- - -Last time we saw the Get-NetAdapter cmdlet from the NetAdapter module - -PS> Get-NetAdapter | ft Name, InterfaceDescription, Status -a - -Name InterfaceDescription Status -—- ——————– —— -Ethernet NVIDIA nForce 10/100/1000 Mbps Ethernet Up -WiFi Qualcomm Atheros AR5007 802.11b/g WiFi Adapter Up - -If you look in the module you also find Disable-NetAdapter & Enable-NetAdapter - -PS> Disable-NetAdapter -Name Wifi -Confirm:$false -PS> Get-NetAdapter | ft Name, InterfaceDescription, Status -a - -Name InterfaceDescription Status -—- ——————– —— -Ethernet NVIDIA nForce 10/100/1000 Mbps Ethernet Up -WiFi Qualcomm Atheros AR5007 802.11b/g WiFi Adapter Disabled - -PS> Enable-NetAdapter -Name Wifi -Confirm:$false -PS> Get-NetAdapter | ft Name, InterfaceDescription, Status -a - -Name InterfaceDescription Status -—- ——————– —— -Ethernet NVIDIA nForce 10/100/1000 Mbps Ethernet Up -WiFi Qualcomm Atheros AR5007 802.11b/g WiFi Adapter Up - -You can also enable/disable based on an Input Object, the alias (-ifalias) or the description (-InterfaceDescription) - -PS> Get-NetAdapter -Name Wifi | Disable-NetAdapter -Confirm:$false -PS> Get-NetAdapter | ft Name, InterfaceDescription, Status -a - -Name InterfaceDescription Status -—- ——————– —— -Ethernet NVIDIA nForce 10/100/1000 Mbps Ethernet Up -WiFi Qualcomm Atheros AR5007 802.11b/g WiFi Adapter Disabled - -PS> Get-NetAdapter -Name Wifi | Enable-NetAdapter -Confirm:$false -PS> Get-NetAdapter | ft Name, InterfaceDescription, Status -a - -Name InterfaceDescription Status -—- ——————– —— -Ethernet NVIDIA nForce 10/100/1000 Mbps Ethernet Up -WiFi Qualcomm Atheros AR5007 802.11b/g WiFi Adapter Up - -What"™s the alias? - -PS> Get-NetAdapter | ft Name, InterfaceDescription, ifAlias, InterfaceAlias -a - -Name InterfaceDescription ifAlias InterfaceAlias -—- ——————– ——- ————– -Ethernet NVIDIA nForce 10/100/1000 Mbps Ethernet Ethernet Ethernet -WiFi Qualcomm Atheros AR5007 802.11b/g WiFi Adapter WiFi WiFi - -If you want to use these cmdlets against remote machines you can run them through a CIMsession - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2816/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2816/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2816&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-03-21-powershell-3-sdk-samples.md b/content/articles/2013-03-21-powershell-3-sdk-samples.md deleted file mode 100644 index f579dbb78..000000000 --- a/content/articles/2013-03-21-powershell-3-sdk-samples.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: PowerShell 3 SDK samples -authors: - - Richard Siddaway -date: "2013-03-21T19:49:18+00:00" -aliases: - - /2013/03/powershell-3-sdk-samples/ ---- - -A sample pack for the SDK is now available - see [http://blogs.msdn.com/b/powershell/archive/2013/03/17/windows-powershell-3-0-sample-pack.aspx][1] - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2817/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2817/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2817&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: http://blogs.msdn.com/b/powershell/archive/2013/03/17/windows-powershell-3-0-sample-pack.aspx "http://blogs.msdn.com/b/powershell/archive/2013/03/17/windows-powershell-3-0-sample-pack.aspx" diff --git a/content/articles/2013-03-21-uk-powershell-group-session-postponement.md b/content/articles/2013-03-21-uk-powershell-group-session-postponement.md deleted file mode 100644 index 1b4579c22..000000000 --- a/content/articles/2013-03-21-uk-powershell-group-session-postponement.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: UK PowerShell group session postponement -authors: - - Richard Siddaway -date: "2013-03-21T19:52:43+00:00" -aliases: - - /2013/03/uk-powershell-group-session-postponement/ ---- - -I"™m postponing the 26 March session on PowerShell and Hyper-V until 9 April. Invites will go out shortly - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2818/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2818/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2818&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-03-24-wmi-vs-cim.md b/content/articles/2013-03-24-wmi-vs-cim.md deleted file mode 100644 index 33a2b53e9..000000000 --- a/content/articles/2013-03-24-wmi-vs-cim.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: WMI vs CIM -authors: - - Richard Siddaway -date: "2013-03-24T12:03:24+00:00" -aliases: - - /2013/03/wmi-vs-cim/ ---- - -An email debate yesterday regarding the use of the CIM cmdlets (new in PowerShell 3) vs the WMI cmdlets made me realise that other people are probably wondering the same thing, - -The question is really part of a the semi-philosophical debate about when you should adopt new technology. - -In the case of the WMI/CIM cmdlets the resolution is fairly straightforward. - -If you are using PowerShell v2 you have to use the WMI cmdlets. - -If you are using PowerShell v3 "“ even if you are accessing legacy systems I would recommend the CIM cmdlets. There are a number of benefits to using the CIM cmdlets: - - * use of WSMAN for remote access "“ no more DCOM error. You can drop back to DCOM for accessing systems with WSMAN 2 installed - * use of CIM sessions for accessing multiple machines - * Get-CIMClass for investigating WMI classes - * improved way of dealing with WMI associations - -As far as I am aware the only thing the CIM cmdlets can"™t do is access amended qualifiers such as the class description. Seeing that many classes don"™t that set it"™s not a major hardship. - -Now that I"™ve recommended you should use them I"™d better show you how "“ that will cover a mini-series of posts over the next few days - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2819/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2819/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2819&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-03-26-cim-cmdlets.md b/content/articles/2013-03-26-cim-cmdlets.md deleted file mode 100644 index a48bf6ec9..000000000 --- a/content/articles/2013-03-26-cim-cmdlets.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: CIM cmdlets -authors: - - Richard Siddaway -date: "2013-03-26T21:04:00+00:00" -aliases: - - /2013/03/cim-cmdlets/ ---- - -The CIM cmdlets are found in the CIMcmdlets module. - -Get-Command -Module CimCmdlets produces this list of names. I"™ve added some information on the tasks they perform - -Get-CimAssociatedInstance is for working with WMI associated classes -Get-CimClass is for discovering the properties and methods of a WMI class -Get-CimInstance is analogous to Get-WmiObject -Get-CimSession -Invoke-CimMethod is analogous to Invoke-WMIMethod -New-CimInstance can be used for creating a new WMI instance in certain circumstances -New-CimSession -New-CimSessionOption -Register-CimIndicationEvent is analogous to Register-WMIEvent -Remove-CimInstance is analogous to Remove-WMIObject -Remove-CimSession -Set-CimInstance is analogous to Set-WMIInstance - -The CIM session cmdlets are for working with the CIm sessions which are analogous to PowerShell remoting sessions but are used by the CIM cmdlets AND the new WMI based cmdlets in Windows 8/2012 such as the networking cmdlets - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2820/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2820/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2820&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-04-01-mvp-renewal-2013.md b/content/articles/2013-04-01-mvp-renewal-2013.md deleted file mode 100644 index 7430220f5..000000000 --- a/content/articles/2013-04-01-mvp-renewal-2013.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: MVP renewal 2013 -authors: - - Richard Siddaway -date: "2013-04-01T16:46:55+00:00" -aliases: - - /2013/04/mvp-renewal-2013/ ---- - -This afternoon I received the email notifying me that my MVP award had been renewed for another year. - -Thank you to Microsoft "“ I regard the award as a great honour. - -And thank you to the PowerShell community "“ its a great place to be - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2822/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2822/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2822&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-04-01-shutting-down-a-remote-computer.md b/content/articles/2013-04-01-shutting-down-a-remote-computer.md deleted file mode 100644 index e2b33c1f0..000000000 --- a/content/articles/2013-04-01-shutting-down-a-remote-computer.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Shutting down a remote computer -authors: - - Richard Siddaway -date: "2013-04-01T11:15:52+00:00" -aliases: - - /2013/04/shutting-down-a-remote-computer/ ---- - -PowerShell provides the Stop-Computer cmdlet for closing down a remote machine. I find this especially useful in my virtual test environment. I"™ll have several machines running but won"™t necessarily have logged onto them. Using Stop-Computer means that I can shut them down cleanly without the hassle of logging onto them. - -In modern Windows systems you have to explicitly enable remote WMI access through the Windows firewall. Stop-Computer uses WMI. If the WMI firewall ports aren"™t enabled you can"™t use Stop-Computer. I"™ve taken to use the CIM cmdlets rather than WMI so sometimes don"™t open the WMI firewall ports. - -One quick function later and I have an answer - - -`function - -invoke-cimshutdown - -{ - - -[ - -CmdletBinding - -( - -) - -] - - -param - -( - - -[string] - -$computername - - -) - - -$comp - -= - -Get-CimInstance - -win32_operatingsystem - --ComputerName - -$computername - - -Invoke-CimMethod - --InputObject - -$comp - --MethodName - -Shutdown - - -} - -`Pass the computer name as a parameter "“ I deliberately didn"™t put a default - -Use Get-CimInstance to get the Win32_operatingsystem class and use Invoke-CimMethod to call the Shutdown method. - -Another reason not to enable WMI on my server 2012 firewalls. - -You can use this on legacy versions of Windows if you have PowerShell v3, and therefore WSMAN v3, installed - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2821/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2821/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2821&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-04-02-2013-scripting-games-competitor-guide-for-the-public-too.md b/content/articles/2013-04-02-2013-scripting-games-competitor-guide-for-the-public-too.md deleted file mode 100644 index 4d60e3411..000000000 --- a/content/articles/2013-04-02-2013-scripting-games-competitor-guide-for-the-public-too.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: 2013 Scripting Games Competitor Guide (for the Public, too!) -authors: - - Don Jones -date: "2013-04-02T14:58:41+00:00" -categories: - - Scripting Games -aliases: - - /2013/04/2013-scripting-games-competitor-guide-for-the-public-too/ ---- - -Our Competitor Guide is now online - you can download it here: -[2013 Competitor Guide][1] -We're doing things a bit differently this year. We'll be engaging the overall PowerShell community for numeric grades - and those _doing_ the grading have an awesome chance to win some great prizes! Our expert Judges will be focused on commentary, making this even more of a learning event. Download the Guide and see what's in store - the Games are scheduled to start the week of April 22nd. -As a note, you should get used to checking our Scripting Games Announcements thread (https://powershell.org/category/announcements/scripting-games/) so that you don't miss any goodies. - - [1]: https://powershell.org/wp-content/uploads/2013/04/2013CompetitorGuide.pdf diff --git a/content/articles/2013-04-03-2013-scripting-games-schedule.md b/content/articles/2013-04-03-2013-scripting-games-schedule.md deleted file mode 100644 index 6c53eac9c..000000000 --- a/content/articles/2013-04-03-2013-scripting-games-schedule.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: 2013 Scripting Games Schedule -authors: - - Don Jones -date: "2013-04-04T06:26:31+00:00" -categories: - - Scripting Games -aliases: - - /2013/04/2013-scripting-games-schedule/ ---- - -Registration for the 2013 Scripting Games will begin April 22nd (check this post in case we need to make a change to that). You will register for **either** the Beginner or Advanced track. - - - * [Get the Beginner Track Practice Event][1] - * [Get the Advanced Track Practice Event][2] - -Each event will kick off on a Thursday, which is when you will be able to download the event details in a PDF file. You will have until the end of the following Monday to upload your one and only entry. Please pay attention to the time zone information displayed on the Web site so that you don't misunderstand when the event starts and stops! -The dates in this schedule refer to 00:00 hours, GMT, on the date given. So "April 25" means "00:00 hours on April 25, GMT," or just as the clock ticks from April 24 to April 25 GMT. This is especially important for the end time - "April 30" means "as soon as it stops being April 29, GMT." - - * Event 1 starts April 25, ends April 30. Voting runs April 30 to May 7. - * Event 2 starts May 2, ends May 7. Voting runs May 7 to May 14. - * Event 3 starts May 9, ends May 14. Voting runs May 14 to May 21. - * Event 4 starts May 16, ends May 21. Voting runs May 21 to May 28. - * Event 5 starts May 23, ends May 28. Voting runs May 28 to June 4. - * Event 6 starts May 30, ends June 4. Voting runs June 4 to June 11. - -For each event, you get to upload one and only one entry - and once uploaded, you may not change, revise, correct, or alter your entry. -**In each case,** our commenting judges will be asked to post comments -during the voting period - following each event. Our celebrity judges will announce the top winners for each event about one week after the voting period ends. [We will post those announcements right here][3]. -Tuesday morning after the event closes, the event opens for public viewing, which is when people can vote on your entry and our judges can comment. Voting runs for one week following event close (Tuesday to Tuesday). -**Remember: Even if you're not competing, you can vote on other people's entries. Voting is one of the best ways to win prizes in the Games this year, as each vote counts as a "raffle ticket" to one of our many prizes.** -Registration and all other URLs will be prominently posted on the [2013 Scripting Games Home Page][4]. - - - [1]: https://powershell.org/games/BeginnerPractice.pdf - [2]: https://powershell.org/games/AdvancedPractice.pdf - [3]: https://powershell.org/category/announcements/scripting-games/ - [4]: https://powershell.org/games diff --git a/content/articles/2013-04-03-powershell-excerpt-week-2.md b/content/articles/2013-04-03-powershell-excerpt-week-2.md deleted file mode 100644 index aa790843f..000000000 --- a/content/articles/2013-04-03-powershell-excerpt-week-2.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: PowerShell excerpt week -authors: - - Richard Siddaway -date: "2013-04-03T19:00:52+00:00" -aliases: - - /2013/04/powershell-excerpt-week-2/ ---- - -The Scripting Guy is running a series of excerpts from the PowerShell books published by Manning. Today is PowerShell in Practice - -Check out the deals all this week on Manning PowerShell books - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2823/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2823/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2823&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-04-03-putting-the-date-in-a-file-name.md b/content/articles/2013-04-03-putting-the-date-in-a-file-name.md deleted file mode 100644 index caa4f4cd8..000000000 --- a/content/articles/2013-04-03-putting-the-date-in-a-file-name.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Putting the date in a file name -authors: - - Richard Siddaway -date: "2013-04-03T19:18:43+00:00" -aliases: - - /2013/04/putting-the-date-in-a-file-name/ ---- - -I often need to create file names that include the date & time the file was created in the name. I"™ve come up with all sorts of ways to do but this I think is the simplest. - -I want the date in this format: year-month-day-hour-minute-second. In other words a format that is easily sortable. I discovered that if you convert a data to a string there is a formatter that does most of the work for you. That"™s a lower case s. - -PS> (Get-Date).ToString("s") -2013-04-03T20:09:31 - -You can"™t have a : symbol in a file name so need to get rid of those - -PS> (Get-Date).ToString("s").Replace(":","-") -2013-04-03T20-10-02 - -To complete the file name - -PS> $datestring = (Get-Date).ToString("s").Replace(":","-") -PS> $file = "c:\folder\Prefix_$datestring.txt" -PS> $file -c:\folder\Prefix_2013-04-03T20-16-48.txt -PS> - -I"™ve done this as a two step process otherwise when you replace the : you also take out the one for the disk drive "“ oops - -Enjoy - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2824/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2824/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2824&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-04-04-manning-deal-of-the-day-april-6-2013-2.md b/content/articles/2013-04-04-manning-deal-of-the-day-april-6-2013-2.md deleted file mode 100644 index 8e59b3d64..000000000 --- a/content/articles/2013-04-04-manning-deal-of-the-day-april-6-2013-2.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Manning Deal of the Day \"“ April 6 2013" -authors: - - Richard Siddaway -date: "2013-04-04T20:42:32+00:00" -aliases: - - /2013/04/manning-deal-of-the-day-april-6-2013-2/ ---- - -My PowerShell and WMI book will be Manning"™s deal of the day for 6 April 2013. The deal will go live at Midnight US ET and will stay active for about 48 hours. - -This is your chance to get the book with a 50% discount. - -Use code dotd0406au at [manning.com/siddaway2/][1] - -The Deal of the Day offer also applies to _SharePoint Workflow in Action_ ****(). - -Enjoy - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2825/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2825/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2825&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: http://manning.com/siddaway2/ diff --git a/content/articles/2013-04-05-coming-tips-for-the-scripting-games.md b/content/articles/2013-04-05-coming-tips-for-the-scripting-games.md deleted file mode 100644 index 5512d0efe..000000000 --- a/content/articles/2013-04-05-coming-tips-for-the-scripting-games.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Coming: Tips for the Scripting Games" -authors: - - Don Jones -date: "2013-04-06T06:36:05+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/04/coming-tips-for-the-scripting-games/ ---- - -In preparation for the upcoming Scripting Games, the April 2013 issue of the free PowerShell.org TechLetter will feature tips, examples, and advice for helping you do the best in the Games! Remember that the Competitor Guide is now available, so you can start reviewing how the Games will be graded (by the community) and judged this year. -If you're not already receiving the TechLetter, subscribe by April 15th to receive the April issue in your Inbox! diff --git a/content/articles/2013-04-05-powershell-script-that-relaunches-as-admin.md b/content/articles/2013-04-05-powershell-script-that-relaunches-as-admin.md deleted file mode 100644 index 8cd6f6266..000000000 --- a/content/articles/2013-04-05-powershell-script-that-relaunches-as-admin.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: PowerShell Script that Relaunches as Admin -authors: - - Keith Hill -date: "2013-04-05T15:08:17+00:00" -aliases: - - /2013/04/powershell-script-that-relaunches-as-admin/ ---- - -If were following good security practices we run our Windows system with UAC enabled. This means that if you forget to launch your PowerShell prompt as Administrator when you run a script that requires administrative privilege then that script will fail. - -It would be nice to build a mechanism into our script to "auto-elevate" if UAC is enabled. The trick to doing this is to run Start-Process "“verb runas. After that you only need to figure out if the current user is an administrator and if UAC is enabled. And you have to package up the script"™s parameters as an array of strings. All of this can be accomplished fairly easily with this bit of PowerShell script: - - - -`function - IsAdministrator -{ - $Identity = [System.Security.Principal.WindowsIdentity]::GetCurrent() - $Principal = New-Object System.Security.Principal.WindowsPrincipal($Identity) - $Principal.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator) -} - - -function - IsUacEnabled -{ - (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System).EnableLua --ne - 0 -} - - -# - - -# Main script - - -# - - -if - (!(IsAdministrator)) -{ - -if - (IsUacEnabled) - { - [string[]]$argList = @( -'-NoProfile' -, -'-NoExit' -, -'-File' -, $MyInvocation.MyCommand.Path) - $argList += $MyInvocation.BoundParameters.GetEnumerator() | Foreach { -"-$($_.Key)" -, -"$($_.Value)" -} - $argList += $MyInvocation.UnboundArguments - Start-Process PowerShell.exe -Verb Runas -WorkingDirectory $pwd -ArgumentList $argList - -return - - } - -else - - { - -throw - -"You must be administrator to run this script" - - } -} - - -`If you launch this script from a non-elevated context, it will fire up a new PoweShell session that is elevated assuming UAC is enabled. - -[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/276/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/276/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=276&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-04-06-2013-scripting-games-judges.md b/content/articles/2013-04-06-2013-scripting-games-judges.md deleted file mode 100644 index f60671ad3..000000000 --- a/content/articles/2013-04-06-2013-scripting-games-judges.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: 2013 Scripting Games Judges -authors: - - Don Jones -date: "2013-04-06T12:32:23+00:00" -categories: - - Scripting Games -aliases: - - /2013/04/2013-scripting-games-judges/ ---- - -As described in the 2013 Scripting Games Competitors' Guide, our expert judges this year will not be awarded numeric scores. Frankly, folks seem more interested in having their entries peer-reviewed than just getting a number - and why not? Expert review is a great way to learn! Unfortunately, there aren't enough judges in the world to review all the entries we'll receive, so our judges will be picking their own "best and worst" lists, and commenting on those (taking care to not reveal authors' names, as much as possible). - - -Our judges will be blogging either here on PowerShell.org, or on their own blogs; we've asked them to all at least post links here at PowerShell.org so that you can find their write-ups. You can use the [Judges' Notes blog category][1] to find their posts - and hopefully learn something! -This year's judges (in no special order, other than this is how they're in my address book for some reason): - - * Jan Egil Ring - * Jonathan Medd - * Bartek Bielawski - * Sean Kearney - * Richard Siddaway - * Mark Schill - * Art Beane - * Jason Helmick - * Ed Wilson - * Oliver Lipkau - * Glenn Sizemore - * Tobias Weltner - * Boe Pox - * Bhargav Shukla - -Thanks so much to these folks - they're going to be donating a LOT of time to review entries, pick out ones they love, point out ones that could use improvement, and above all tell us _why_ so that we can all learn to do better. -The idea is to have a diversity of opinions. Multiple judges may latch on to the same entries and offer differing advice - and that's _awesome_, because it helps us all develop new approaches, and understand that in PowerShell there are very few "one, right ways" to do anything. -The Games begin April 22nd! - - - [1]: https://powershell.org/category/announcements/scripting-games/judges-notes/ diff --git a/content/articles/2013-04-06-2013-scripting-games-mighty-panel-of-celebrity-judges.md b/content/articles/2013-04-06-2013-scripting-games-mighty-panel-of-celebrity-judges.md deleted file mode 100644 index dde506700..000000000 --- a/content/articles/2013-04-06-2013-scripting-games-mighty-panel-of-celebrity-judges.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: "2013 Scripting Games' Mighty Panel of Celebrity Judges" -authors: - - Don Jones -date: "2013-04-06T12:21:38+00:00" -categories: - - Scripting Games -aliases: - - /2013/04/2013-scripting-games-mighty-panel-of-celebrity-judges/ ---- - -As revealed in the [2013 Scripting Games Competitors' Guide](/games/), the 2013 Games will invite the community in general to award numeric votes for entries. Our expert judges will instead focus on commentary, helping make the Games into an even better learning experience. They'll be commenting without revealing competitors' names, and even if you don't recognize your entry in their comments, you'll hopefully find plenty to learn from. - - -Our top prizes, however, will be awarded by a Mighty Panel of Celebrity Judges. They'll review all the other judges' top picks, stack-rank them, and through some Ingenious Number Crunchingâ„¢ award the top prizes. -Bet you'd like to meet the judges. - - * **Don Jones** (that's me) is a Windows PowerShell MVP Award recipient, author of bazillions of books, and one of the most well-known PowerShell educators out there. - * **Jeffery Hicks** is also a PowerShell MVP, has also written gobs of books, and does more than a little PowerShell education here and there. - * **June Blender** is a former PowerShell team member (who wrote the Get-Help help), still a big PowerShell enthusiast, and has spent a ton of time figuring out how people learn to use the shell. - * **Ed Wilson** is the Scripting Guy, and needs absolutely no more introduction than that. He's single-handedly kept scripting alive, and helps us all learn every day with the "Hey, Scripting Guy!" blog. - * **Jon White** - As a member of the PowerShell feature team since its inception, Jon  was the first person in the world to write a production PowerShell script. - * **David Simmons** is a proud new member of the PowerShell team, but follower within Microsoft since its early days, and has been involved since the 1980"™s outside of and within Microsoft in development of hi-performance dynamic languages and their runtime engines including various JavaScript engines. - -Finally, this year we're proud to bring a member of the community on board as a judge. Selected from the top posters in the PowerShell.org forums, I bring you... - - - **Jakub JareÅ¡** (nohandle in the forums), who lives in Prague, Czech Republic. - - -Meet him in his own words: - - - Since 2008 he works for Trask solutions a.s. as a system engineer focused on Microsoft desktop operating systems. He enjoys competition and solving problems that everyone else gave up on. Jakub is pretty new to the PowerShell language and the community, he is scripting roughly a year, but during that time he spent all of his free time and energy learning to unleash the power in PowerShell. He is a member of the PowerShell.org, Powershell.com forums, guest writer on PowershellMagazine.com and blogs on PowerShell.cz. - - -Welcome, Jakub! This just goes to show that the PowerShell community truly is a diverse one that's constantly growing. I hope _everyone_ will be excited about grading the entries we'll get for each event, and showing your support for your fellow competitors. -The Games commence on April 22nd, 2013! diff --git a/content/articles/2013-04-06-ad-management-in-a-month-of-lunches.md b/content/articles/2013-04-06-ad-management-in-a-month-of-lunches.md deleted file mode 100644 index e459bfb8d..000000000 --- a/content/articles/2013-04-06-ad-management-in-a-month-of-lunches.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: AD Management in a Month of Lunches -authors: - - Richard Siddaway -date: "2013-04-06T15:40:22+00:00" -aliases: - - /2013/04/ad-management-in-a-month-of-lunches/ ---- - -The MEAP marches on with chapter 8 now released: - -Chapter 8 "“ creating Group Policies - -details from [http://www.manning.com/siddaway3/][1] - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2826/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2826/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2826&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: http://www.manning.com/siddaway3/ "http://www.manning.com/siddaway3/" diff --git a/content/articles/2013-04-07-phillyposh-04042013-meeting-summary.md b/content/articles/2013-04-07-phillyposh-04042013-meeting-summary.md deleted file mode 100644 index 1d3efd7c4..000000000 --- a/content/articles/2013-04-07-phillyposh-04042013-meeting-summary.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: PhillyPoSH 04/04/2013 meeting summary -authors: - - John Mello -date: "2013-04-08T02:58:13+00:00" -aliases: - - /2013/04/phillyposh-04042013-meeting-summary/ ---- - -1. [Jason Helmick][1] remotely gave a demo of [Sapien"™s Powershell Studio][2] - 2. [Ed Wilson][3], [The Scripting Guy][4], gave a presentation on the different ways to remotely manage a Windows 8 workstation (remotely via the [Charlotte PowerShell User Group][5]) - 3. Announcements - 1. The [Scripting games start][6] on [04/25/2013,][7] make sure to sign up! We plan on doing a post mortem once the games are done just like we did with the [Winter Scripting Camp][8] - 2. Check out the [Mississippi PowerShell User][9], which meets virtually every 2nd Tuesday. Take a look at their [schedule which is filled with great speakers][10]. - - [1]: http://www.jasonhelmick.com/ - [2]: http://sapien.com/software/powershell_studio - [3]: http://www.edwilson.com/ - [4]: http://blogs.technet.com/b/heyscriptingguy/ - [5]: http://powershellgroup.org/charlotte.nc - [6]: https://powershell.org/category/announcements/scripting-games/ - [7]: https://powershell.org/2013/04/03/2013-scripting-games-schedule/ - [8]: https://powershell.org/2013/03/10/phillyposh-03072013-meeting-summary-and-presentation-materials/ - [9]: http://mspsug.com/ - [10]: http://mspsug.com/2013/02/27/mississippi-powershell-user-group-speaker-lineup-for-2013/ diff --git a/content/articles/2013-04-08-running-workflows.md b/content/articles/2013-04-08-running-workflows.md deleted file mode 100644 index 00b095c6d..000000000 --- a/content/articles/2013-04-08-running-workflows.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Running workflows -authors: - - Richard Siddaway -date: "2013-04-08T17:12:38+00:00" -aliases: - - /2013/04/running-workflows/ ---- - -I tripped over an interesting issue recently regarding the running of PowerShell workflows. - -Consider the world"™s simplest workflow - -workflow test-w1 {"hello world"} - -If I run this on a 32bit Windows 8 PowerShell machine "“ it works - -If I run this on Windows 2012 (64bit) on PowerShell it works - -if I run this on Windows 2012 PowerShell (x86) "“ it doesn"™t work! - -Be aware of how you are running your workflows - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2827/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2827/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2827&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-04-11-time-is-running-out-to-own-a-piece-of-powershell-org.md b/content/articles/2013-04-11-time-is-running-out-to-own-a-piece-of-powershell-org.md deleted file mode 100644 index 9c1c6a3bd..000000000 --- a/content/articles/2013-04-11-time-is-running-out-to-own-a-piece-of-powershell-org.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "[UPDATED] Time is running out to own a piece of PowerShell.org" -authors: - - Don Jones -date: "2013-04-11T08:25:30+00:00" -categories: - - Announcements -aliases: - - /2013/04/time-is-running-out-to-own-a-piece-of-powershell-org/ ---- - -Believe it or not, we are coming up on our one year anniversary, and will be winding down our capital campaign. If you'd like to become a stockholder in PowerShell.org, you will have until June 1st May 15 to do so. Read the details at https://powershell.org/discuss/viewtopic.php?f=26&t=239 if you're interested! -**Updated** to show May 15 as the cutoff date. Our shareholder meeting notices and ballots will go out on May 16, so we can't accept new stock purchases after that date. diff --git a/content/articles/2013-04-11-windows-server-backup-4.md b/content/articles/2013-04-11-windows-server-backup-4.md deleted file mode 100644 index 1aa4b5564..000000000 --- a/content/articles/2013-04-11-windows-server-backup-4.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Windows Server Backup -authors: - - Richard Siddaway -date: "2013-04-11T19:50:36+00:00" -aliases: - - /2013/04/windows-server-backup-4/ ---- - -Windows Server 2012 has a PowerShell enabled backup utility. When you enable the feature you get a module called WindowsServerBackup. It has the cmldets you would expect for creating and managing backups. No surprise you may say as this was avialable in Windows 2008 R2. - -The difference with Windows Server 2012 is that you can do restores from PowerShell cmdlets whcih wasn"™t available in the earlier version. - -The restore cmdlets are - -Start-WBFileRecovery - -Start-WBHyperVRecovery - -Start-WBSystemStateRecovery - -Start-WBVolumeRecovery - - - -This might not replace your currebt backup system but is very useful for backing up test environments and experimenting with things like authorative AD restores. - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2828/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2828/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2828&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-04-12-creating-a-new-disk-3.md b/content/articles/2013-04-12-creating-a-new-disk-3.md deleted file mode 100644 index b3a50b50d..000000000 --- a/content/articles/2013-04-12-creating-a-new-disk-3.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Creating a new disk -authors: - - Richard Siddaway -date: "2013-04-12T18:44:16+00:00" -aliases: - - /2013/04/creating-a-new-disk-3/ ---- - -I really like Windows Server Core. The concept has come of age in Windows 2012. - -I needed to add a new disk to a virtual machine – that"™s easy using the Hyper-V cmdlets. But what about formating the disk. - -A module new to Windows 2012 & Windows can be used. Its the Storage module. I"™ve not had chance, or reason, to play with this module yet. So many cmdlets so little time. - -Start with viewing the disks: - -PS C:\Users\richard> Get-Disk | ft -a - -Number Friendly Name OperationalStatus Total Size Partition Style -—— ————- —————– ———- ————— -0 Virtual HD ATA Device Online 120 GB MBR -1 Microsoft Virtual Disk Offline 127 GB RAW - - - -Disk 1 is the new disk so need to initialise it. - -PS C:\Users\richard> Initialize-Disk -Number 1 -PartitionStyle MBR - -View the disks again - -PS C:\Users\richard> Get-Disk | ft -a - -Number Friendly Name OperationalStatus Total Size Partition Style -—— ————- —————– ———- ————— -0 Virtual HD ATA Device Online 120 GB MBR -1 Microsoft Virtual Disk Online 127 GB MBR - - - -Create a partition on the disk - -useMaximimSize means use all of the disk for this partition - -PS C:\Users\richard> New-Partition -DiskNumber 1 -UseMaximumSize -DriveLetter R - -Now view the partitions - -PS C:\Users\richard> Get-Partition | ft -a - - Disk Number: 0 - -PartitionNumber DriveLetter Offset Size Type -————— ———– —— —- —- -1 1048576 350 MB IFS -2 C 368050176 119.66 GB IFS - - Disk Number: 1 - -PartitionNumber DriveLetter Offset Size Type -————— ———– —— —- —- -1 R 1048576 127 GB Logical - -And finally format the new disk: - -PS C:\Users\richard> Get-Volume | where DriveLetter -eq R | Format-Volume -FileSystem NTFS -NewFileSystemLabel Backup - -Confirm -Are you sure you want to perform this action? -Warning, all data on the volume will be lost! -[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): Y - -You get a nice friendly warning (you could bypass using "“Confirm $false) and the format happens - -You could pipe the cmdlets together to do everything in one pass. Best of all "“ the cmdlets are WMI based. - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2830/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2830/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2830&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-04-13-busy-busy-busy-2.md b/content/articles/2013-04-13-busy-busy-busy-2.md deleted file mode 100644 index b8bd57aa5..000000000 --- a/content/articles/2013-04-13-busy-busy-busy-2.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Busy, busy, busy -authors: - - Richard Siddaway -date: "2013-04-13T17:17:13+00:00" -aliases: - - /2013/04/busy-busy-busy-2/ ---- - -A very busy time coming up in PowerShell land with the first PowerShell Summit kicking off in just over a week"™s time. The 2013 Scripting Games will also be starting very soon. - -I"™ll try and post about both of them as time allows - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2832/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2832/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2832&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-04-13-powershell-deep-dives-another-meap-release-2.md b/content/articles/2013-04-13-powershell-deep-dives-another-meap-release-2.md deleted file mode 100644 index cef5f6732..000000000 --- a/content/articles/2013-04-13-powershell-deep-dives-another-meap-release-2.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "PowerShell Deep Dives\"“another MEAP release" -authors: - - Richard Siddaway -date: "2013-04-13T17:24:52+00:00" -aliases: - - /2013/04/powershell-deep-dives-another-meap-release-2/ ---- - -Manning have released another set of chapters in their early access program for [PowerShell Deep Dives][1]. - -If you have an interest in PowerShell I would strongly urge you to buy a copy. It has chapters from a number of well known PowerShell authors together with some very good material from new authors. Best of all the royalties are going to charity. - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2834/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2834/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2834&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: http://www.manning.com/hicks/ diff --git a/content/articles/2013-04-13-scripting-games-instructions-now-available.md b/content/articles/2013-04-13-scripting-games-instructions-now-available.md deleted file mode 100644 index e6d80b2cf..000000000 --- a/content/articles/2013-04-13-scripting-games-instructions-now-available.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Scripting Games Instructions Now Available -authors: - - Don Jones -date: "2013-04-13T19:51:09+00:00" -categories: - - Scripting Games -aliases: - - /2013/04/scripting-games-instructions-now-available/ ---- - -I've [posted an instruction booklet][1] for the 2013 Scripting Games. Although you can't register until April 22nd, you can get a sneak peek at what the new Games Web site looks like, and start preparing yourself to compete. -**READ THE FRIENDLY MANUAL.** -There are some one-time decisions you'll have to make, and some "if you mess this up, you're screwed" moments (like forgetting your password). It's all on you - so familiarize yourself with the potential "gotchas" right away. You're welcome to leave a comment on this post if you have any questions, or [ask in the forums][2]. -Note that the forums **may not be used** to ask for feedback on your entry from judges - they won't be monitoring the forum. It should also not be used for technical support questions about the Web site; the site will have a "feedback" link on the bottom of every page for that purpose. - - [1]: https://powershell.org/games - [2]: https://powershell.org/discuss/viewforum.php?f=39&sid=bf378a7ec4e2c6748515b1d3bb87429f diff --git a/content/articles/2013-04-15-changes-coming-to-powershell-org.md b/content/articles/2013-04-15-changes-coming-to-powershell-org.md deleted file mode 100644 index 52db4da01..000000000 --- a/content/articles/2013-04-15-changes-coming-to-powershell-org.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Changes Coming to PowerShell.org -authors: - - Don Jones -date: "2013-04-15T20:34:04+00:00" -categories: - - Announcements -aliases: - - /2013/04/changes-coming-to-powershell-org/ ---- - -If you've been on the site today, you've doubtless noticed some of the visual changes. In addition to providing a simpler theme that - over time - will be more mobile-friendly, we're also lining up for a major move of our discussion forums. That'll probably happen after TechEd, but we may be able to squeeze it in prior. - - -The existing forums are fine, but they're a bit heavy in the code department, and hard to maintain. We've also gotten a bit bloated with the categories. Sorry about that. Anyway, the plan is to move to an integrated forums, a simpler hierarchy, and better notification options. It'll make it a lot easier for us moderators to help answer questions. -We'll be archiving the old content, so it'll still be accessible and searchable. However... and here's the rub... we're gonna ditch your user accounts. We have to. The old database is cloggy with spambots, and we just need to get away from it. We're going to offer integrated login (Twitter, Facebook, LinkedIn, a bunch others), so you won't have to entrust your password to us any longer if you don't want to. We are not linking the old forums to this WordPress site. You'll be creating a NEW login here, and it can use those external authentication systems. The NEW login you create HERE will be completely separate from any login you have in the existing, old forums. You don't need to create a new account now - you can wait until the new forums go live. -Anyway... that's all ahead. Love to hear your thoughts as we continue planning. -There's another thing: The PowerShell People site. To be honest, that was created as a kind of... game/toy. Something to see if I could do. We've gotten a few people using it but not many, and it just kind of sits there on its own. We're probably going to be spinning that down, but we're going to take what we learned from it and try and incorporate something into this main site. No firm ideas, yet, and we'd appreciate any you may have. -In the meantime, we've already implemented a few changes. The new site theme is perhaps the most obvious; you'll notice that we've also moved a lot of static pages - like the newsletter, Scripting Games, and Summit pages - into the new theme. We've also enabled single sign-on to the site, using Facebook, Twitter, Google, OpenID, WordPress.com, and Live ID (or whatever Microsoft is calling it this week). -Thanks! diff --git a/content/articles/2013-04-17-pre-summit-hang.md b/content/articles/2013-04-17-pre-summit-hang.md deleted file mode 100644 index 58950fca0..000000000 --- a/content/articles/2013-04-17-pre-summit-hang.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Pre-Summit Hang -authors: - - Don Jones -date: "2013-04-18T01:15:57+00:00" -categories: - - PowerShell Summit -aliases: - - /2013/04/pre-summit-hang/ ---- - -If you're attending the Summit and are arriving Sunday afternoon, drop by the Azteca restaurant on 148th. I'll be there with some of the Board from 5pm, in the bar. It's informal, pay-your-own-way, and a chance just to say hi before we kick off on Monday. Safe journey! diff --git a/content/articles/2013-04-17-scripting-games-2013-prize-list.md b/content/articles/2013-04-17-scripting-games-2013-prize-list.md deleted file mode 100644 index 43ea0a8a8..000000000 --- a/content/articles/2013-04-17-scripting-games-2013-prize-list.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: "[UPDATED] Scripting Games 2013 Prize List" -authors: - - Don Jones -date: "2013-04-17T13:51:41+00:00" -categories: - - Scripting Games -aliases: - - /2013/04/scripting-games-2013-prize-list/ ---- - -We've finalized the prizes! - - -## Overall Winners - -These are the folks who do the best overall. This prize will be awarded in mid-June. -The **overall winners** from both the Advanced and Beginner events will win a free pass (travel expenses not included) to TechEd North America 2014 or TechEd Europe 2013 - your choice. We realize the TechEd Europe dates are pretty close to when this prize will be awarded... so we'll try and intervene and make it a 2014 pass, if we can. -Second place overall winners will receive a SAPIEN Software Suite 2012, valued at $699, from SAPIEN Technologies. -Third place overall winners will receive 5 ebooks (per person) from Manning. - -## Event Winners - -These folks place top in each event, with one prize available per track. We'll award a free ebook from Manning. In addition, the top placer in Event 6 (which is the toughest) will win a copy of PrimalScript 2012 from SAPIEN, and the top placer in Event 5 will win a copy of PowerShell Studio 2012 from SAPIEN. -Second-place for each event will win 6 months of free video training library access from [Interface Technical Training][1]. -Third-place for each event will win a free year of [Phoneominal][2] cloud-based phone line service from Start-Automating.com. -For the competitors who earn the top CrowdScore vote in each event, we'll award a free ebook from Manning. - -## Prizes for Community Voting - -Each time you vote on an entry, whether your competing or not, you earn a chance to win a prize. See - you can win without even trying hard! We'll be awarding a total of four $50.00 gift certificates to the SAPIEN Technologies online store, and a total of 20 ebooks from Manning, along with 12 one-month passes to the Interface Technical Training video training library. So that's 36 chances to win! We will award these prizes in batches after voting closes on each event (meaning we'll award about 6 prizes per event - we will **not** be resetting pointlet counts, so any pointlets earned will count toward prizes in each event). -In addition, our top two voters will receive a complimentary pass (no travel included) to the PowerShell Summit North America 2014. That's pretty impressive! We will be looking at the quality, consistency, and fairness of your votes - so if you do bubble up to be a top voter, you'll be scrutinized to make sure you were voting fairly. We'll also be weighting votes that are accompanied by comments (good, useful comments, not gibberish or two-word "nice script" comments), meaning commenting is more likely to make you a winner! - - - [1]: http://videotraining.interfacett.com - [2]: http://phoneominal.com diff --git a/content/articles/2013-04-18-beginner-practice-event.md b/content/articles/2013-04-18-beginner-practice-event.md deleted file mode 100644 index ab5c28c84..000000000 --- a/content/articles/2013-04-18-beginner-practice-event.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Beginner Practice Event -authors: - - Don Jones -date: "2013-04-18T19:07:38+00:00" -categories: - - Scripting Games -aliases: - - /2013/04/beginner-practice-event/ ---- - -As you may be aware, we posted [Practice Events for the 2013 Scripting Games][1], in an effort to give people an idea of what the events would look like and involve. There's been a [lively discussion][2] in the PowerShell.org forums about the Beginner Practice, so I thought I'd weigh in. Here's my solution: -[![Beginner practice event](https://powershell.org/wp-content/uploads/2013/04/VMware-FusionScreenSnapz001.png)](https://powershell.org/wp-content/uploads/2013/04/VMware-FusionScreenSnapz001.png) -Of course, that's hardly the only way to go about it. I used this approach because it minimizes the use of extra variables, and doesn't create a script-style approach - it's a "one-liner," although I've broken it across several physical lines for readability. I think it makes good use of PowerShell's native ability to deal with multiple objects in a stream - there's no need for a ForEach loop, here. - - [1]: https://powershell.org/2013/04/03/2013-scripting-games-schedule/ - [2]: https://powershell.org/discuss/viewtopic.php?f=39&t=1674 diff --git a/content/articles/2013-04-18-last-minute-summit-info-and-changes.md b/content/articles/2013-04-18-last-minute-summit-info-and-changes.md deleted file mode 100644 index 5742f9e5b..000000000 --- a/content/articles/2013-04-18-last-minute-summit-info-and-changes.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "[UPDATED] Last-Minute Summit Info and Changes" -authors: - - Don Jones -date: "2013-04-18T14:19:14+00:00" -categories: - - PowerShell Summit -aliases: - - /2013/04/last-minute-summit-info-and-changes/ ---- - -Please make sure you're following this announcements category as you travel to, and attend, the Summit. It's the best way for us to get out late-breaking news. - - -**Registration begins** at 8am on Monday, April 22nd, in the lobby of Building 40. Now, sometimes the lobby doors open a wee bit late - so bear with us. The first sessions aren't until 9am, so there's plenty of time. Please bring a printout of your ticket from EventBrite, and a photo ID. -**Session pre-registration** didn't happen - we had some volunteers have emergency health issues that just got us behind schedule, so we couldn't get the mobile app thing going. No fear. Sessions will be on a first-come, first-seated basis. Note that we are spread between two adjacent buildings, so you may have to traipse from one to the other during the 15-minute session breaks. -**Meals** will include a _very light continental breakfast_ and a lunch. We will endeavor to supply soft drinks throughout the day, but that will require Microsoft employees to shuttle them to us. You're welcome to bring your own soft drinks. We've got coffee lined up. _Please_ respect your fellow attendees - we've ordered enough food for everyone, but that assumes everyone's taking a normal-sized serving. A plate piled high with croissants isn't normal, and deprives your fellow attendees of their share. Seriously - this happened at a conference I was at a couple of weeks ago. Pretty sad. -**Kickoff** we will have a VERY SHORT kickoff in each session room at 8:45am. We'll endeavor to present all general material in both session rooms, since neither room can accommodate all of us at once. Jason Helmick and myself will be handling those duties throughout the event. You're welcome to come to us with any problems you run into. -**Problems** may arise - bear in mind this is our first year, and just be patient with us. If you bring it to our attention, we'll fix what we can, as soon as we can. We really appreciate your help and patience as we try to make a great event! -**Wi-Fi** is not guaranteed, and we will not have power drops for everyone's laptop. Please **do not** stretch your laptop power cord across any walkways - you **will** be asked to unplug for safety reasons. We suggest leaving the laptop in your hotel room, so help make the room more comfortable for everyone (if everyone brings a laptop and a giant bag for it, it's going to get cramped). -**Parking is limited** on-site, and you need to make sure you park in a space that isn't restricted. Check-in with the building receptionist to see if your car needs to be registered. You can also park at the ExtendedStay America hotel across the street, and walk to buildings 40 and 41. You're responsible for your own transportation during the event. -**Evening events** are strictly on-your-own. We don't have anything official planned. If someone puts something together ad-hoc and tells us, we'll do our best to spread the word. -**This is an informal event** - don't think of the Summit as a conference like TechEd, but rather as a gathering of friends and colleagues. It'll be less structured, more ad-hoc, and hopefully more engaging. -**Please be respectful of speakers** while they present, and follow their guidelines on when to ask questions. We do have to push them off the stage at the end of their allotted time, so give them their time to complete their presentation for you. If you have additional Q&A after the session ends, please take it into the lobby so that the next session can start. -**MONDAY AT LUNCH** we will launch the 2013 Scripting Games with an EnergizedTech opening ceremonies video. It'll be a pageant - don't miss it. 12:30pm in each session room. -**WEDNESDAY AT LUNCH** in the lobby or session room in building 40, you're invited to meet the Summit organizers (if you've managed to avoid us until then) and offer feedback for 2014. - -**Company Store** vouchers may be are a reality, thanks to The Scripting Guy. You will need to use Microsoft transportation to get to Commons, where the Store is located; you'll be able to spend your own money, up to the voucher limit, to purchase products at employee prices. These products MAY NOT BE RESOLD and are for your personal use (they may be given as gifts).  - -**PowerShell.org** stickers will be available at registration - please, limit 1 per person. We only brought a limited supply. -**THANK YOU TO OUR VOLUNTEERS** who are helping make the Summit happen - Christopher Gannon and The Scripting Wife, Teresa Wilson, will be running registration and guarding our food from poachers. Jason Helmick will be helping me with room monitoring, pacing, and general content presentations. Kirk Munro ran content selection and speaker relations. And of course, all of our speakers are presenting on their own time, without compensation, although we've been able to cover most of their travel expenses. -**2014 is coming.** We're planning a bigger event, but that means a bigger commitment - we will nee about 130 people to break even (although we'll be able to handle about 250, if things go as planned). We hope you'll help us publicize the 2014 event when the time comes, so that we can make it happen for you. -_**THANK YOU AND SEE YOU IN REDMOND!**_ diff --git a/content/articles/2013-04-18-scripting-games-competitor-guide-instructions-update.md b/content/articles/2013-04-18-scripting-games-competitor-guide-instructions-update.md deleted file mode 100644 index c922c62df..000000000 --- a/content/articles/2013-04-18-scripting-games-competitor-guide-instructions-update.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Scripting Games Competitor Guide / Instructions Update -authors: - - Don Jones -date: "2013-04-18T13:41:21+00:00" -categories: - - Scripting Games -aliases: - - /2013/04/scripting-games-competitor-guide-instructions-update/ ---- - -We've made some minor fixes and clarifications to the 2013 Scripting Games Competitors' Guide and Instructions booklet. I encourage you to [download them and review them][1] once more before we kick off next week. -In addition, we have some additional prizes for our winners in each event - I've updated the [prize list post][2] to include this new information. That post, going forward, will be the authoritative prize list. -Registration is now open, and the Games will formally kick off on April 22nd. The first event opens April 25th. Please rely on the [Scripting Games Home Page][1] for a complete list of links and information, and make sure you're watching this [announcement category][3] for breaking news. Because we are not collecting e-mail addresses, this is the best way for us to communicate with you. - - [1]: https://powershell.org/the-scripting-games/ "The Scripting Games" - [2]: https://powershell.org/2013/04/17/scripting-games-2013-prize-list/ "[UPDATED] Scripting Games 2013 Prize List" - [3]: https://powershell.org/category/announcements/scripting-games/ diff --git a/content/articles/2013-04-18-what-are-your-powershell-newbie-gotchas.md b/content/articles/2013-04-18-what-are-your-powershell-newbie-gotchas.md deleted file mode 100644 index c990b425b..000000000 --- a/content/articles/2013-04-18-what-are-your-powershell-newbie-gotchas.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: What are Your PowerShell Newbie Gotchas? -authors: - - Don Jones -date: "2013-04-18T13:55:31+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -aliases: - - /2013/04/what-are-your-powershell-newbie-gotchas/ ---- - -I'm putting together a list of common "gotchas" for PowerShell, mainly things that affect newcomers. So far, I've got: - - * Piping the output of a Format cmdlet to nearly anything else - * Using -contains instead of -like - * Selecting a subset of object properties and then trying to sort/fiter on a now-missing property - * Wrong syntax for -filter parameters on various commands - * Commands that don't produce pipeline output (e.g., piping Export-CSV to something) - * Using ConvertTo-HTML without -Fragment and appending multiple pages in one file - * Confusion with ( [ { and the other punctuation - * Concatenating strings (hard) vs. using double quotes (easier) - * $ not being part of the variable name (esp with -ErrorVariable) - * Accumulating objects in a variable and returning it, vs. outputting to the pipeline directly - -What are your "gotchas?" diff --git a/content/articles/2013-04-19-comments-from-the-powershell-org-survey.md b/content/articles/2013-04-19-comments-from-the-powershell-org-survey.md deleted file mode 100644 index 469a363f0..000000000 --- a/content/articles/2013-04-19-comments-from-the-powershell-org-survey.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Comments from the PowerShell.org survey -authors: - - Don Jones -date: "2013-04-19T17:09:26+00:00" -categories: - - Announcements -aliases: - - /2013/04/comments-from-the-powershell-org-survey/ ---- - -As you probably know, we've been [running a survey for PowerShell.org][1], which helps us both improve the site and create demographic information that makes us appealing to sponsors (who, you know, _pay_ for everything here). We've gotten a ton of great feedback. Yeah, we really are reading every single comment you left. -Let's start with the biggies: - -> Maybe some more guest writers for articles? I imagine it's difficult with all the articles that get posted all over the net every day, but maybe some of those folks (like the scripting guys or scripting wife) can do some to help the Powershell.org community. - -You find us guest authors, we'll give 'em a place to write. Problem is, not many folks want to write. We try to aggregate the better PowerShell-related blogs out there (we link to the original site so that we're not stealing their traffic) just as a discovery mechanism, but I'm not sure what else we could do. - -> On the forum almost every thread remains 'unsolved'. Maybe moderators can close threads, and even remove posts that are not relevant. I also see a lot of questions returning, for example on 'how to change a property in AD'. I don't know if this can be avoided, but if you know a way to diminish double threads, that would be great. - -Testify, brother. You tell me how to fix it and we'll give it a shot. The rest of the interwebz would probably like to know how to fix that, too. We can't make people click "solved," and believe it or not they get TESTY if we click it for them. Seriously. Been yelled at. And don't know how to make people search before they post. Just don't. -And now for some shorter responses: - - * **PHPBB forums for questions... just link to StackExchange.** Honestly, whatevs. We literally have at least one comment telling us to use every piece of forums software out there, and/or link to every other forum already out there. ServerFault, ExpertsExchange, we've got 'em all in here. We'll continue having our own forums mainly because it's easier to ensure newcomers (especially) get a polite answer, not a brush-off, which happens too often in some of the other forums I've seen. As for software, we're moving off of phpBB in June. - * **I don't know if that something not to like - but I do think that people should be awarded for contributing to the community.** Agreed. Looking into it. - * **forum email notifications work sporadically (does not always send an email for notices/updates)**. I'm not sure they're that sporadic - I've looked into this a LOT. A lot a lot. Problem is that people have their spam settings set to DEFCON 1, with three layers of filtering. ForeFront Online Protection, for example, had a global block against our hosting company's IP addresses that we had to get resolved - when things are blocked at that level, you'll never see it in your Spam folders. - * **I love the simplicity of the site, please DON'T make it too busy with meaningless ads and trivialites.** Dang. There goes our plans for putting ads every three inches on the page. Oh, well. - * **It needs rss feeds.** It has 'em. - * **Regarding Summit info, and especially the session registration process has been a bit confusing. I'm not sure of a single place to optionally check status updates.** I know. That's my fault. We're going to do better next time, putting everything in the "Announcements" category here. - * **There is too much fokus on American area. We need more European stuff / events.** Dude, you help us put it together, then. You live there. Asking Americans to put on a European event does not smell like a recipe for success, ya know? - * **It's not possible but it'd be nice if the moderators when stumped would reach out to the masters to get threads answered.** We really try to. Sometimes the other folks aren't all that responsive. They got jobs too, and whatnot. - * **The home page isn't very appealing - not a big complaint but it could do with a makeover.** Done. Hope you like it. The Forums will be moving, too. - * **There's a lot of good email newsletter design templates available out there to make it more reader friendly and not just a wall of text.** Well, PowerShell's pretty text-heavy. Guess we're not big GUI folks . - * **I do not like the fact that you make business around powershell.** Yeah, I'm not sure you and I agree on what a "business" is. We set up PowerShell.org, Inc., so that an entity could own the Web site and pay for its hosting. We make about enough money from sponsorships to pay those bills. Officially, PowerShell.org, Inc. is "not for profit." Nobody draws a salary or gets paid. We can't give you all of these resources for free without someone paying, and the "business" gives that money a place to go so that it is _only_ used to run the community. Nobody else can pinch off pieces of the money for their own purposes. - * **More integration / collaboration with PowerShell User Groups.** Yeah, working on it. Literally, Mark Schill (who runs that site) and I have been exchanging e-mails this morning. We both understand the value in having one place to discover user groups and keep up with their schedules; we're trying to figure out the best way to deliver the functionality user group leaders require to post that information, and where the best place is for it to all live. We'll link to it from here, wherever that turns out to be. Stay tuned. - * **Put newsletters in an online archive.** Working on it. The March switch in mail providers was in large part to facilitate this. I just need some time to finish up the programmery bits needed. - * **Live hangouts/webinars in the vein of what vBrownbag does for virtualization.** Awesome idea. You volunteering to lead 'em? Please, contact me if you are. - -Y'all had a bunch of nice things to say, too, which we all appreciate. We'll be sharing the complete survey results once it finishes running at the end of May. -But let's wrap with a big philosophical comment, because I'd really like your feedback on this one - just drop a comment below if you care to weigh in. - -> I would like to see a site that becomes the authoritative place to go for resources since Microsoft doesn't really seem all that interested any more. There are way to many sites hosting scripts and pieces of "stuff". I would really like to have "One site to rule them all." 😉 - -I get that. But... in some cases, the folks running a great resource (take PoshCode.org) want to rule their own destiny, and not become part of the collective. Nothing wrong with that - it lets them do their own thing. We're trying to just link to the best of those community resources, so that people can find them when they run across this site. If someone _wants_ to jump in and be part of PowerShell.org, we'll try and make it happen - our charter is to offer support and resources to anyone who's contributing - but we don't really lobby for them to do that. If **you** see something out there you like, and you think they should hook up with us in some fashion, tell them. - - [1]: http://674004.polldaddy.com/s/2013-powershell-org-member-survey diff --git a/content/articles/2013-04-20-advanced-practice-event.md b/content/articles/2013-04-20-advanced-practice-event.md deleted file mode 100644 index ecfed04a6..000000000 --- a/content/articles/2013-04-20-advanced-practice-event.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Advanced Practice Event -authors: - - Don Jones -date: "2013-04-20T16:00:56+00:00" -categories: - - Scripting Games -aliases: - - /2013/04/advanced-practice-event/ ---- - -I want to direct your attention to [this forums post][1], which I think is worth anyone's time to look through. I've left a pretty long reply with some comments on the entry that would also be worth a read. -I find that a LOT of folks - like the gentleman who posted his script - have a really good approach to PowerShell scripts. They want to use parameters. They want verbose output. They want to proactively check for errors. Where I think folks get lost is in the fine points of how PowerShell enables these features. I see folks working harder than they need to, coding functionality that the shell will actually give them for free. I also see some not-entirely-perfect approaches to things like parameters and error handling, and some occasional mis-use of advanced features (I often see SupportsShouldProcess _declared_ but not actually _implemented_). -Sometimes, this simply happens because a lot of these advanced features aren't well-documented in one convenient spot - they're all spread out - and because folks are learning from blog posts, which may themselves have been written by someone with an incomplete understanding. Or, they're pasting bits together without _really_ knowing what they're doing. That's cool - what you have to sometimes do is take a whack at something like this poster did, and get some feedback. I'm _really_ glad he did, because it offers an opportunity to clear up some misunderstandings, which will just make his scripts even better in the future. -I hope everyone's looking at the Games as a learning opportunity. I hope _everyone_ will vote on folks' entries and leave comments when they do; I hope as many people as possible spend some time blogging about what  they see, what they've learned, and _what they don't understand._ That's how we'll all improve. -Let me give you a perfect example (we're no longer discussing the forums post, here - I'm moving on to a new topic): - - -`Try { - $continue = $true - $bios = Get-WmiObject -class Win32_BIOS -computername $computer -EA Stop -} Catch { - $continue = $false - $computer | Out-File errors.txt -append -} -if ($continue) { - $os = Get-WmiObject -class Win32_OperatingSystem -computername $computer - # and so on... -} -`This is how I used to code for error handling when querying multiple WMI classes. I'd set a "flag" variable, $continue, to $false if the first WMI call failed, so that I didn't waste time on subsequent calls. Note that this is just a snippet; it isn't an entire script. Then I had a student who coded it this way: - - -`Try { - $bios = Get-WmiObject -class Win32_BIOS -computername $computer -EA Stop - $os = Get-WmiObject -class Win32_OperatingSystem -computername $computer - # and so on... -} Catch { - $computer | Out-File errors.txt -append -} -`Much more concise, and same effect. If the first WMI call fails, I jump into the Catch block, and skip the remaining code anyway. So there are constantly learning opportunities in seeing someone else's approach. For me, I learn new approaches that are sometimes better than what I've been doing. I also learn how to better teach PowerShell to people, by seeing common mistakes and misunderstandings. It's great to share your failures - that's how we grow! -**Update:** Someone dropped me a line and made a couple of points, which I want to address: - -> In the reply to the blog post you say: "Please consider properly setting -ErrorAction on the command (Get-WmiObject, in your case) and using a Try/Catch construct to actually handle errors, not just hide them." The example shown does the exact opposite. Any terminating error is caught, logged to a file, but not re-thrown effectively hiding the exception. - -I disagree. First, _handling_ an error _may still involve suppressing the error message._ But I'm suppressing it for just one command, not the entire script; I'm also _handling_ the error by, in my case, logging it to a file. How you choose to handle may differ. What I don't want to do is toss a terminating exception - I'm in a loop, and want my command to continue processing the next object. - -> Also the $os  = ... part is missing the -errorAction STOP. - -That's deliberate. If there's going to be an _anticipated_ error - lack of connectivity, bad credentials, etc., I'm going to get an error on the first WMI call ($bios). I'll trap it, log it, and move on to the next computer (one presumes those snippets of mine are running in a loop of some kind, processing one computer at a time). If there's an _unexpected_ error, like a corrupt WMI repository or something, the second WMI call ($os) will explode, generating an error that I very much want to see, because I didn't anticipate it. -Notice a word that I used a lot there: "I." I'm coding the script for the way _I_ want to it to run. _I_ want anticipated errors logged, and _I_ want unanticipated errors to continue exploding. _You_ may want your scripts to do different things. I'm not putting these snippets out there as the One True Way To Code, because there's no such thing. What I _am_ saying is that you need to _think about_ why you're coding the way you are, and have some justification for it. -Globally suppressing error messages, but not doing anything to handle errors that you do suppress, is a poor practice. Beyond that, do what you need to do. I'm fine with someone suppressing an error _they've dealt with._ But if your code isn't dealing with it, then the person running the script needs to see something's gone wrong. - - - [1]: https://powershell.org/discuss/viewtopic.php?f=39&t=1810&p=8059#p8059 diff --git a/content/articles/2013-04-20-show-your-scripting-games-pride.md b/content/articles/2013-04-20-show-your-scripting-games-pride.md deleted file mode 100644 index 04c374aa3..000000000 --- a/content/articles/2013-04-20-show-your-scripting-games-pride.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Show Your Scripting Games Pride! -authors: - - Don Jones -date: "2013-04-20T15:06:24+00:00" -categories: - - Scripting Games -aliases: - - /2013/04/show-your-scripting-games-pride/ ---- - -If you're participating in the Scripting Games, log on to the Scripting Games Web site and check out your Profile page. You'll find a redemption code that can be used to unlock a Participant achievement on the main PowerShell.org Web site! -[![FirefoxScreenSnapz001](https://powershell.org/wp-content/uploads/2013/04/FirefoxScreenSnapz0012.png)](https://powershell.org/wp-content/uploads/2013/04/FirefoxScreenSnapz0012.png) diff --git a/content/articles/2013-04-22-meet-the-scripting-games-judges-jeffery-hicks.md b/content/articles/2013-04-22-meet-the-scripting-games-judges-jeffery-hicks.md deleted file mode 100644 index dc2a7afeb..000000000 --- a/content/articles/2013-04-22-meet-the-scripting-games-judges-jeffery-hicks.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: "Meet the Scripting Games Judges: Jeffery Hicks" -authors: - - Don Jones -date: "2013-04-22T14:46:22+00:00" -categories: - - Scripting Games -aliases: - - /2013/04/meet-the-scripting-games-judges-jeffery-hicks/ ---- - -Jeffery Hicks is a Microsoft MVP in Windows PowerShell, Microsoft - Certified Trainer and an IT veteran with over 20 years of experience, - much of it spent as an IT consultant specializing in Microsoft server - technologies with an emphasis in automation and efficiency.He works - today as an independent author, trainer and consultant.Jeffwritesthe - popular Prof. PowerShell column for MPCMag.com, is a regular contributor - to the Petri IT Knowledgebase, 4SysOps and the Altaro Hyper-V blog, as - well as frequent speaker at technology conferences and user groups. - - -Jeff is looking forward to seeing entries that are more than -re-formatted VBScript. Beginner scripts should demonstrate an -understanding of the PowerShell paradigm.Advanced scripts should go -beyond and demonstrate mastery of complex techniques and concepts. The -best of the best will have a pure, elegant, zen-like simplicity even for -the most challenging tasks. -You can keep up with Jeff at his blog http://jdhitsolutions.com/blog , on -Twitter at https://twitter.com/jeffhicks and on -Google Plus (http://gplus.to/JeffHicks) diff --git a/content/articles/2013-04-22-powershell-summit-2013-conference-schedule.md b/content/articles/2013-04-22-powershell-summit-2013-conference-schedule.md deleted file mode 100644 index fa370147b..000000000 --- a/content/articles/2013-04-22-powershell-summit-2013-conference-schedule.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "[UPDATED] PowerShell Summit 2013 Conference Schedule" -authors: - - Poshoholic -date: "2013-04-22T15:49:02+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2013/04/powershell-summit-2013-conference-schedule/ ---- - -If you are attending the PowerShell Summit next week in Redmond, you might want to make sure you have copies of the schedule on hand.  There are two tracks, and I have created two pdf documents, one for each track, that provide the full schedule including session abstracts and speaker bios. -[PowerShell Summit 2013 Conference Schedule - Track 1](https://powershell.org/wp-content/uploads/2013/04/PowerShell-Summit-2013-Conference-Agenda-Track-1.pdf) -[PowerShell Summit 2013 Conference Schedule - Track 2][1] -While those details are very useful, some of the conference attendees have expressed an interest in having a consolidated view of the agenda so that they could see which sessions were taking place on each of the tracks and choose which they were more interested in.  Ask, and ye shall receive.  Here is a consolidated view of the conference sessions on all tracks, with each day on a separate page. -[PowerShell Summit 2013 Conference Schedule - At at glance](https://powershell.org/wp-content/uploads/2013/04/PowerShell-Summit-2013-Conference-Agenda-At-a-glance.pdf) -Note that if you don"™t have a ticket for the conference, it is sold out for this year.  We"™re planning the 2014 conference now, so keep watching this blog for news about that conference as it becomes available.  There are already a few posts about it that are worth reviewing if you missed them. -Thanks, and enjoy the conference next week! -Kirk out. - - [1]: https://powershell.org/wp-content/uploads/2013/04/PowerShell-Summit-2013-Conference-Agenda-Track-2.pdf "PowerShell Summit 2013 Conference Schedule - Track 2.pdf" diff --git a/content/articles/2013-04-22-summit-downloads.md b/content/articles/2013-04-22-summit-downloads.md deleted file mode 100644 index 97033d8fb..000000000 --- a/content/articles/2013-04-22-summit-downloads.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Summit Downloads -authors: - - Don Jones -date: "2013-04-22T18:23:28+00:00" -categories: - - PowerShell Summit -aliases: - - /2013/04/summit-downloads/ ---- - -We'll be updating this post as presenters turn over materials to us. Most of these files will be ZIPs. If there are any session materials missing - please be patient (we're uploading as quickly as we can), or -contact the presenter directly - (as they may not have provided materials to us yet). -[Driscoll AST Manipulation][1] -[Prosser WrappingBinaryModule][2] -[Creating HTML Reports with Style PSHSummit][3] -[Wrock Unit Testing Powershell.pptx][4] -[Brundage The Powers of PowerShell Pipeworks.pptx][5] -[Don Jones All][6] -[Slides from Several Speakers in one ZIP][7] -[Renouf BothSessionsAndExampleScripts][8] -[Hicks How Secure Can You Be.pdf][9] -[Hicks Look No WinForms][10] -[Team - PowerShellSummitNA2013 - WinRM Drilldown.potx][11] -[Shirk FasterPowerShellTalk][12] -[Ricardo's Device Mgmt talk][13] -[Bunch more - should be the rest of them][14] -Ian Davis has his at -Here is the link to Ricardo Mendes"™ Device Management PowerShell module he mentioned during his session. http://gallery.technet.microsoft.com/Device-Management-7fad2388 - - [1]: https://powershell.org/wp-content/uploads/2013/04/ASTManipulation.zip - [2]: https://powershell.org/wp-content/uploads/2013/04/pssummit2013WrappingBinaryModule.zip - [3]: https://powershell.org/wp-content/uploads/2013/04/Creating-HTML-Reports-with-Style-PSHSummit.zip - [4]: https://powershell.org/wp-content/uploads/2013/04/Unit-Testing-Powershell.pptx.zip - [5]: https://powershell.org/wp-content/uploads/2013/04/The-Powers-of-PowerShell-Pipeworks.pptx.zip - [6]: https://powershell.org/wp-content/uploads/2013/04/DonJonesAll.zip - [7]: https://powershell.org/wp-content/uploads/2013/04/Slides.zip - [8]: https://powershell.org/wp-content/uploads/2013/04/BothSessionsAndExampleScripts.zip - [9]: https://powershell.org/wp-content/uploads/2013/04/How-Secure-Can-You-Be.pdf.zip - [10]: https://powershell.org/wp-content/uploads/2013/04/Look-No-WinForms.zip - [11]: https://powershell.org/wp-content/uploads/2013/04/PowerShellSummitNA2013-WinRM-Drilldown.potx.zip - [12]: https://powershell.org/wp-content/uploads/2013/04/FasterPowerShellTalk.zip - [13]: https://powershell.org/wp-content/uploads/2013/04/DevMgmt.zip - [14]: https://powershell.org/wp-content/uploads/2013/04/BunchMore.zip diff --git a/content/articles/2013-04-24-now-accepting-nominations-for-powershell-org-inc-board-of-directors.md b/content/articles/2013-04-24-now-accepting-nominations-for-powershell-org-inc-board-of-directors.md deleted file mode 100644 index 1bc66857f..000000000 --- a/content/articles/2013-04-24-now-accepting-nominations-for-powershell-org-inc-board-of-directors.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Now Accepting Nominations for PowerShell.org, Inc. Board of Directors -authors: - - Don Jones -date: "2013-04-24T16:10:56+00:00" -categories: - - Announcements -aliases: - - /2013/04/now-accepting-nominations-for-powershell-org-inc-board-of-directors/ ---- - -At our first annual Shareholders Meeting (shareholders will receive an e-mail from me later this week about that meeting), we will be voting on our Board of Directors. Our corporate articles permit our existing Board members to serve indefinitely, and so all are automatically re-nominated. The current Board includes: - - * Myself (Don Jones) - * Kirk Munro - * Richard Siddaway - * Jason Helmick - * Jeffery Hicks - -The Board is responsible for appointing a CEO (which is currently myself) to run the company; the CEO then appoints other officers as needed to conduct the corporation's business. I'll reiterate that PowerShell.org is a not-for-profit business, meaning our goal is to more or less break even. We obviously have expenses - Web site hosting, running the Summit, and so on - and the corporation provides a place where the needed funds can be managed, without running through anyone's personal checking account. -If you would like to nominate someone for the Board, please e-mail president/at/powershell.org no later than May 15th, 2013. Provide the person's name and e-mail address. You are welcome to nominate yourself. -Each shareholder will receive 5 votes per share owned, and can distribute those votes however they like amongst the nominees. The top 5 vote-earning nominees will comprise our new Board. They will then elect their Chairman, who presides over Board meetings, and either reconfirm the existing CEO or appoint a new one. -If you are interested in becoming a shareholder, [please see this post][1]. Note that shares must be purchased before May 1st, 2013, in order to be eligible for voting in the upcoming cycle. We are also [nearing the end of our capital campaign][2], so time is running out to own a piece of PowerShell.org. - - [1]: https://powershell.org/discuss/viewtopic.php?f=26&t=239 - [2]: http://wp.me/p3priC-EW diff --git a/content/articles/2013-04-24-pscustomobject-save-puppies-and-avoid-dead-ends.md b/content/articles/2013-04-24-pscustomobject-save-puppies-and-avoid-dead-ends.md deleted file mode 100644 index 82fb34c27..000000000 --- a/content/articles/2013-04-24-pscustomobject-save-puppies-and-avoid-dead-ends.md +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: "PSCustomObject: Save Puppies and Avoid Dead Ends" -authors: - - June Blender -date: "2013-04-24T21:06:59+00:00" -aliases: - - /2013/04/pscustomobject-save-puppies-and-avoid-dead-ends/ ---- - -Welcome to Scripting Games 2013. Here's my favorite hint for improving your functions and scripts. Avoid writing to the console or formatting your output. Instead use **PSCustomObject** in Windows PowerShell 3.0 and leave the formatting to the end user. -Windows PowerShell provides lots of great ways to return the output of a command or function. You can write to the host program (Write-Host), write to a file (Out-File), and format your output to look really pretty (Format-*). But all of these techniques kill puppies and bring the pipeline to an abrupt halt. -"Puppies?," you ask. Yes! Windows PowerShell MVP and Scripting Games 2013 Viceroy Don Jones (@concentrateddon) famously says that every time you use Write-Host, a puppy dies. So sad! -The Format cmdlets are almost as bad, although no deaths have yet been attributed to them. Instead, when you use a Format cmdlet, a huge STOP sign should appear warning you that you've brought the pipeline to a halt. Not technically, of course, but for all practical purposes. -To see what I mean, take a peek at these two commands. The output of these commands looks very similar, but it's really quite different. - - -`PS C:\ Get-Process csrss -Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName -------- ------ ----- ----- ----- ------ -- ----------- -885 14 2568 5092 49 516 csrss -714 19 3996 28036 92 632 csrss -PS C:\ Get-Process csrss | Format-Table -Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName -------- ------ ----- ----- ----- ------ -- ----------- -885 14 2568 5092 49 516 csrss -714 19 3996 28036 92 632 csrss -`These two commands return different objects and the difference really matters. To see the different output types, you can pipe them to Get-Member. I've used a slightly different approach that gets only the names of types in the output, but it's the same idea. - - -`PS C:\ Get-Process csrss | foreach {$_.gettype().fullname} -System.Diagnostics.Process -System.Diagnostics.Process -PS C:\ Get-Process csrss | Format-Table | foreach {$_.gettype().fullname} -Microsoft.PowerShell.Commands.Internal.Format.FormatStartData -Microsoft.PowerShell.Commands.Internal.Format.GroupStartData -Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData -Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData -Microsoft.PowerShell.Commands.Internal.Format.GroupEndData -Microsoft.PowerShell.Commands.Internal.Format.FormatEndData -`Instead of a process object, the formatted command returns a bunch of format objects. You usually discover this when you try to use them in another command. For example, these format objects don't have the properties of a process object, like PagedMemorySize or Handles. - - -`PS C:\ $p = Get-Process csrss -PS C:\ $p | foreach PagedMemorySize -2629632 -4075520 -PS C:\ $pf = Get-Process csrss | Format-Table -PS C:\ $pf | foreach PagedMemorySize -PS C:\ -PS C:\ get-process csrss | sort Handles -Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName -------- ------ ----- ----- ----- ------ -- ----------- - 723 19 3980 28416 87 632 csrss - 881 14 2568 5096 49 516 csrss -PS C:\ get-process csrss | ft | sort Handles -out-lineoutput : The object of type "Microsoft.PowerShell.Commands. -Internal.Format.FormatEntryData" is not valid or not in the correct -sequence. This is likely caused by a user-specified "format-*" -command which is conflicting with the default formatting. - + CategoryInfo : InvalidData: (:) [out-lineoutput], -InvalidOperationException - + FullyQualifiedErrorId : ConsoleLineOutputOutOfSequencePacket, -Microsoft.PowerShell.Commands.OutLineOutputCommand -`So you've lost the opportunity to use these objects in subsequent commands. Unless you really want formatting object, the pipeline is effectively dead. Almost as sad as those puppies. -I realized this problem when some colleagues at Microsoft asked me to generate a report that listed the CDXML files in a CIM module and the CIM commands that were defined in each CDXML file. I wrote a tiny script that produced a nice report that looked like this: - - -`MSFT_NetIPAddress.cdxml-help.xml ------------------------------------- -Get-NetIPAddress -Set-NetIPAddress -Remove-NetIPAddress -New-NetIPAddress -MSFT_NetIPInterface.cdxml-help.xml ------------------------------------- -Get-NetIPInterface -Set-NetIPInterface -MSFT_NetIPv4Protocol.cdxml-help.xml ------------------------------------- -Get-NetIPv4Protocol -Set-NetIPv4Protocol -MSFT_NetIPv6Protocol.cdxml-help.xml ------------------------------------- -Get-NetIPv6Protocol -Set-NetIPv6Protocol -. . . -`But, instead of being delighted, they reported that they now had data that they couldn't use. I had created a dead end. Pretty, but useless. They were happier with a command that produced useable results, even if they weren't pretty. - - -`PS C:\ (Get-Module $ModuleName).NestedModules | Select-Object Name, Path, ExportedCommands -Name Path ExportedCommands ----- ---- ---------------- -MSFT_NetIPAddress C:\windows\system32\WindowsPowerShel... {[Get-NetIPAddres -MSFT_NetIPInterface C:\windows\system32\WindowsPowerShel... {[Get-NetIPInterf -MSFT_NetIPv4Protocol C:\windows\system32\WindowsPowerShel... {[Get-NetIPv4Prot -MSFT_NetIPv6Protocol C:\windows\system32\WindowsPowerShel... {[Get-NetIPv6Prot -. . . -`To avoid this dead end in the silly Get-Process case, you just remove the Format-Table command. Or, you can use the Select-Object cmdlet to create an object that is a filtered subset of the current object, if that's what you need. -But how do you manage when you're returning values from different objects? It's easy to put them in a table, but there's a much better way that doesn't stop the pipeline. -Windows PowerShell 3.0 introduces PSCustomObject. You can read all about it, and about Windows PowerShell 2.0 alternatives, in about_Object_Creation. PSCustomObject makes it easy for you to create objects. -As the name implies, PSCustomObject creates a custom object with the properties that you specify. The resulting custom object works just like any .NET class object, so you can pass it through the pipeline and use it in subsequent commands. -The value of PSCustomObject is a hash table (@{Key = Value; Key=Value...}) where the keys are property names and the values are property values. When you define a PSCustomObject hash table in a script or function, Windows PowerShell magically creates an object for every instance that you pass to it. -Here's how I used it in a little script that tells you the versions of Updatable Help you have on your local machine. - - -`foreach ($helpInfoFile in $helpInfoFiles) -{ - $ModuleName = $HelpInfoFile.Name.Split('_')[0] - $CultureInfo = ([xml](Get-Content ` - $HelpInfoFile)).HelpInfo.SupportedUICultures.UICulture - $UICulture = $CultureInfo.UICultureName - $Version = $CultureInfo.UICultureVersion - [PSCustomObject]@{"ModuleName"=$ModuleName; - "Culture"=$UICulture; - "Version"=$Version} -} -`In this case , I was processing a bunch of HelpInfo XML files. I want to return an object that contains the module name, the name of the UI culture, and the version number for that UI culture. The details don't matter, except that the property values weren't all in the same object, so I couldn't just select from an object. -PSCustomObject to the rescue! See how easy this is! -In the ForEach loop, I get the values that I need. Then I just define a PSCustomObject and "¦ voila! "¦ I have my objects. The default formatting makes them look nice enough. - - -`ModuleName Culture Version ----------- ------- ------- -AppLocker en-US 3.1.0.0 -Appx en-US 3.1.0.0 -BitLocker en-US 3.1.0.0 -BranchCache en-US 3.1.0.0 -`But more importantly, the pipeline continues. When I pipe to Get-Member, it shows that I have a usable custom object: - - -`PS C:\ $u | get-member - TypeName: System.Management.Automation.PSCustomObject -Name MemberType Definition ----- ---------- ---------- -Equals Method bool Equals(System.Object obj) -GetHashCode Method int GetHashCode() -GetType Method type GetType() -ToString Method string ToString() -Culture NoteProperty System.String Culture=en-US -ModuleName NoteProperty System.String ModuleName=AppLocker -Version NoteProperty System.String Version=3.1.0.0 -`And, I can use the output in subsequent commands. - - -`PS C:\ $u | sort Version | group Version -Count Name Group ------ ---- ----- - 24 3.0.0.0 {@{ModuleName=NetSwitchTeam; - 1 3.0.1.0 {@{ModuleName=MsDtc; Culture= - 1 3.0.2.0 {@{ModuleName=Wdac; Culture=e - 15 3.1.0.0 {@{ModuleName=ScheduledTasks; - 4 3.2.0.0 {@{ModuleName=Microsoft.WSMan - 1 {3.2.15.3, 3.2.15.0, 3... {@{ModuleName=Show-Calendar; - 1 3.4.0.0 {@{ModuleName=NetTCPIP; Cultu -`Now, go out and try it! Some of the Scripting Games challenges might require a table, list, or some other formatting, but if it doesn't, be sure return a really useful object. -Good luck to everyone! diff --git a/content/articles/2013-04-25-meet-the-scripting-games-judges-scripting-guy-ed-wilson.md b/content/articles/2013-04-25-meet-the-scripting-games-judges-scripting-guy-ed-wilson.md deleted file mode 100644 index 965e78381..000000000 --- a/content/articles/2013-04-25-meet-the-scripting-games-judges-scripting-guy-ed-wilson.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Meet the Scripting Games Judges: \"Scripting Guy\" Ed Wilson" -authors: - - Don Jones -date: "2013-04-25T18:24:40+00:00" -categories: - - Scripting Games -aliases: - - /2013/04/meet-the-scripting-games-judges-scripting-guy-ed-wilson/ ---- - -Ed Wilson is the Microsoft Scripting Guy and a well-known scripting expert. He writes the twice daily Hey Scripting Guy! blog (the number 1 blog on TechNet). He has also spoken at TechEd and at the Microsoft internal TechReady conferences. He is a Microsoft-certified trainer who has delivered a popular Windows PowerShell workshop to Microsoft Premier Customers worldwide. He has written 11 books including 8 on Windows scripting that were published by Microsoft Press. He has also contributed to nearly a dozen other books. He has two Microsoft Press Windows PowerShell 3.0 books: Windows PowerShell 3.0 Step by Step and Windows PowerShell 3.0 First Steps. Ed holds more than 20 industry certifications, including Microsoft Certified Systems Engineer (MCSE) and Certified Information Systems Security Professional (CISSP). Prior to coming to work for Microsoft, he was a senior consultant for a Microsoft Gold Certified Partner where he specialized in Active Directory design and Exchange implementation. In his spare time, he enjoys woodworking, underwater photography, and scuba diving. diff --git a/content/articles/2013-04-25-recording-the-powershell-summit.md b/content/articles/2013-04-25-recording-the-powershell-summit.md deleted file mode 100644 index 248dcee6c..000000000 --- a/content/articles/2013-04-25-recording-the-powershell-summit.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Recording the PowerShell Summit -authors: - - Don Jones -date: "2013-04-26T01:51:45+00:00" -categories: - - PowerShell Summit -aliases: - - /2013/04/recording-the-powershell-summit/ ---- - -So, we **did** have one enterprising fella use his Webcam to record the Summit sessions he attended. Once he gets with me, we'll get those online so you can see. -We **are** trying to think really hard about formal recordings for next time. It depends a lot on what folks want. For example: - - * Pointing a camera at the front of the room is easy and cheap. We worry that the audio might suck and that you might not be able to read on-screen code - although many presenters make their code/slides available for download. - * Putting software on presenters' machines to capture what they do is out of the question. There are MORE than enough moving parts already going on in the room - this just won't work out consistently. - * We can get one-button-recording devices that capture everything the speaker does on-screen, and an audio feed. You don't get to SEE the speaker, and these are about $1000 each, plus sundry cables and adapters. For several hundred more, we can add a picture-in-picture from a camera feed. - -So we can do cheap-o... well, cheaply. And if folks are happy with that, we'll do it. We can do pretty awesome-looking for pretty-expensive... and that's going to require a fundraising campaign. We aren't Microsoft, and recording three rooms, along with possible general sessions, is going to take about $8-$12k in equipment. Our goal, however, would be to give the videos away for free once a year's event sells to its "break even" attendance point. -Live streaming won't happen. Meeting venues get like $5,000 per day for a 5-10Mbps pipe. Yeah, you thought they made money off the $80/gallon coffee. We just can't afford the bandwidth to livestream. We're not even always sure we can turn on WiFi for people to check e-mail. It's that expensive. -Please drop some comments. Knowing what kind of video people are willing to accept will really help us plan this out for next time, and we need a lot of lead time to do that. diff --git a/content/articles/2013-04-26-forums-migration-schedule.md b/content/articles/2013-04-26-forums-migration-schedule.md deleted file mode 100644 index bd4050f78..000000000 --- a/content/articles/2013-04-26-forums-migration-schedule.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Forums Migration Schedule -authors: - - Don Jones -date: "2013-04-26T18:08:39+00:00" -categories: - - Announcements -aliases: - - /2013/04/forums-migration-schedule/ ---- - -Here's the schedule for our Forums migration: -From **Now until May 4th,** the [old forums][1] will remain online and in-use. However, you should consider creating an account here on the "new" site (distinguishable by the different visual theme). Your new account will have no connection to the old one, and may be a Twitter, Facebook, Live, or other login. To create an account, just click "Login" at the top-left of any site page (in the dark gray toolbar). -**On May 4th** we will activate the new forums. From then on, the Forums menu link will go there. The old forums will remain available at https://powershell.org/discuss. You can continue to use the old forums to wrap-up old topics, or if the new ones stop working for some reason. -On **May 13th** we will shut down the old forums and direct everyone to the new ones. -By **May 20** we will have migrated the content from the old forums into the new ones. These will be imported as static threads that are closed for new messages, but they'll still be searchable. - - [1]: https://forums.powershell.org diff --git a/content/articles/2013-04-27-powershell-summit-thank-you.md b/content/articles/2013-04-27-powershell-summit-thank-you.md deleted file mode 100644 index 982a4c978..000000000 --- a/content/articles/2013-04-27-powershell-summit-thank-you.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "PowerShell Summit\"“thank you" -authors: - - Richard Siddaway -date: "2013-04-27T11:46:19+00:00" -aliases: - - /2013/04/powershell-summit-thank-you/ ---- - -I"™d like to extend a huge thank you to everyone who attended the PowerShell Summit this last week. The Summit was a success "“ in no small part due to you. Your questions, and discussions, are what this is all about. - -It was a pleasure meeting you all and I hope to return next year "“ I hope to see many of you there as well. - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2836/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2836/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2836&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-04-28-cim-cmdlets-vs-wmi-cmdlets-speed-of-execution.md b/content/articles/2013-04-28-cim-cmdlets-vs-wmi-cmdlets-speed-of-execution.md deleted file mode 100644 index 1eb071474..000000000 --- a/content/articles/2013-04-28-cim-cmdlets-vs-wmi-cmdlets-speed-of-execution.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: "CIM cmdlets vs WMI cmdlets\"“speed of execution" -authors: - - Richard Siddaway -date: "2013-04-28T21:04:47+00:00" -aliases: - - /2013/04/cim-cmdlets-vs-wmi-cmdlets-speed-of-execution/ ---- - -One question that came up at the summit was the comparative speed of execution of the new CIM cmdlets vs the old WMI cmdlets. No of us knew the answer because we"™d never tried measuring the speed. - -I decided to perform some tests. - -This first test is accessing the local machine. In both cases the cmdlets are using COM. WMI uses COM and CIM will use COM if a "“ComputerName parameter isn"™t used. - -The results are as follows: - -**PS> 1..100 | -foreach {Measure-Command -Expression { -1..100 | foreach {Get-WmiObject -Class Win32_ComputerSystem} } -} | Measure-Object -Average TotalMilliseconds** - -Count : 100 -Average : 2008.953978 -Sum : -Maximum : -Minimum : -Property : TotalMilliseconds - - - -**PS> 1..100 | -foreach {Measure-Command -Expression { -1..100 | foreach {Get-CimInstance -ClassName Win32_ComputerSystem} } -} | Measure-Object -Average TotalMilliseconds** - -Count : 100 -Average : 2078.763174 -Sum : -Maximum : -Minimum : -Property : TotalMilliseconds - - - -So for pure COM access the WMI cmdlets are marginally (3.4%) faster. - -What if we use the ComputerName parameter? - -**PS> 1..100 | -foreach { -Measure-Command -Expression { -1..100 | foreach {Get-WmiObject -Class Win32_ComputerSystem -ComputerName $env:COMPUTERNAME } } -} | Measure-Object -Average TotalMilliseconds** - -Count : 100 -Average : 1499.14379 -Sum : -Maximum : -Minimum : -Property : TotalMilliseconds - -**PS> 1..100 | -foreach { -Measure-Command -Expression { -1..100 | foreach {Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName $env:COMPUTERNAME } } -} | Measure-Object -Average TotalMilliseconds** - -Count : 100 -Average : 3892.921851 -Sum : -Maximum : -Minimum : -Property : TotalMilliseconds - -This one surprised me "“ the WMI cmdlets are 2.5 times faster. I suspect that is because the CIM cmdlet has to build and then breakdown the WSMAN connection each time. - -Next time we"™ll look at accessing a remote machine. - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2842/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2842/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2842&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-04-28-comparing-sql-server-table-schemas-with-powershell.md b/content/articles/2013-04-28-comparing-sql-server-table-schemas-with-powershell.md deleted file mode 100644 index 40d2f2cd6..000000000 --- a/content/articles/2013-04-28-comparing-sql-server-table-schemas-with-powershell.md +++ /dev/null @@ -1,1952 +0,0 @@ ---- -title: Comparing SQL Server table schemas with PowerShell -authors: - - Enrique Puig -date: "2013-04-28T22:44:17+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/04/comparing-sql-server-table-schemas-with-powershell/ ---- - -As a SQL Server DBA or SQL Server developer sometimes is necessary to know whether two tables have equal schemas or not. For example, a few months ago I had to consolidate two SQL Server instances in just one. One of the main problems were the collisions between Databases and Tables. I found out that both instances had Databases with equal name and the same thing happened with tables inside those databases. When consolidating databases is very important to make sure that users and apps will find the same schema they were used to find before consolidation, so in order to consolidate databases it will be necessary to find tables with different schemas, merge them and solve conflicts. - - - SQL Server provides a tool to compare schemas between databases, the tool comes with visual Studio or SQL Server Data tools with Database Projects. That could be very useful to identify schema differences among objects from both databases and see what tables have to be merged. So that"™s it, if we have a tool that provides us that functionality, why do we need PowerShell? The answer to this question is quite surprising, it happens that the tool compares schemas based on the T-SQL Code, which means that the comparison is made by using Strings. Let"™s see an example to introduce the issue. - - - If we create in SQL Server two databases with one table per database as it is showed in the following script: - - -`-------------------------- --- Enrique Puig --- epuig1984@gmail.com --- Databases Demo creation ---------------------------- ---Database1 - - -create database -TableCompare -; - - -alter database -TableCompare -set recovery simple - -; - - -use -TableCompare -; - - -create table -dbo -. -TestTable - -( - -id -int identity - -( -1 -, -1 -) - -primary key - -, - -col1 -int - -not null, - -col2 -int - -not null, - -col3 -int - -not null -); - - ---Database2 - - -create database -TableCompare2 -; - - -alter database -TableCompare2 -set recovery simple - -; - - -use -TableCompare2 -; - - -create table -dbo -. -TestTable - -( - -id -int identity - -( -1 -, -1 -), - -col1 -int - -not null, - -col2 -int - -not null, - -col3 -int - -not null -); - - ---create primary key - - -alter table -dbo -. -TestTable - -add constraint -PK_TestTable -primary key - -( -id -); - -`The databases and tables look like follows: - - -[![clip_image002](https://powershell.org/wp-content/uploads/2013/04/clip_image002_thumb.jpg)](https://powershell.org/wp-content/uploads/2013/04/clip_image002.jpg) - - - Figure 1-Database comparison- - - - As it is showed in Figure 1, both Tables look exactly the same, they have: - - - * - - - Equal Name - - - - * - - - Equal number of columns - - - - * - - - Equal name of columns - - - - * - - - Equal number of keys - - - - * - - - Equal columns in every key - - - - - - - The only different thing is the name of the key, because for the first table was created automatically and in the second one it was created manually specifying a name. Does it really matter? In this case the name of the key is not relevant as long as the columns are the same. Well, if we compare it with Visual Studio 2012 we get the following results: - - -[![clip_image004](https://powershell.org/wp-content/uploads/2013/04/clip_image004_thumb.jpg)](https://powershell.org/wp-content/uploads/2013/04/clip_image004.jpg) - - - Figure 2- Database Comparison- - - - The figure 2 shows the result. According to the result the tables are not equals because of a name. This is not the logic intended for us, because when we want to consolidate tables the only thing that matters is that the table will have a primary key clustered by Id column, the name does not make a difference. So this method is going to show us **a lot of false positives** when looking for tables with different schemas. The same thing happens with some third party tools, I"™ve tried to compare objects with them and got the same result. For this example we are working with one database and only one table per database for a better understanding of the issue, but imagine when you are working with 100 database and an average of 70 or 80 tables per database, you need to make sure that you are no getting false positives identifying tables with different schemas. So here is when PowerShell comes up to save the day. - - - Using SMO we are able to create a function to compare schemas. The function looks like follows: - - -`################################################################# -## Enrique Puig Nouselles -## Epuig1984@gmail.com -## Compare SQL Server Table schemas -################################################################# - - -function - -Compare-SQLServerTables - -( - -[ - -string - -] - -$srv1 - -,[ - -string - -] - -$bd1 - -,[ - -string - -] - -$sch1 - -,[ - -string - -] - -$TableName1 - -, - [ - -string - -] - -$srv2 - -,[ - -string - -] - -$bd2 - -,[ - -string - -] - -$sch2 - -,[ - -string - -] - -$TableName2 - -) -{ - -[ - -reflection.assembly - -]:: -LoadWithPartialName( -"Microsoft.SqlServer.Smo" -) -| - -Out-Null - - -$S1 - -= - -New-Object - -"Microsoft.SqlServer.Management.Smo.Server" - -$srv1 - - -if -( -$S1 - --ne - -$null -) - { - -if -( -$S1 - -. -databases -[ - -$bd1 - -] -ne - -$null -) - { - -$tab1 - -= - -$S1 - -. -databases -[ - -$bd1 - -]. -Tables -[ - -$TableName1 - -] - - -$res - -= - -$tab1 - -| - -Where-Object -{ -$_ - -. -Schema --eq - -$sch1 -} - -if -( -$res - -. -Count --eq - - -) - { - -throw - -"Error: The schema - -$sch1 - -doesn't contain any table called - -$TableName1 - -." - -} - } - -else - -{ - -throw - -"Error: The database ' - -$bd1 - -' doesn't exist." - -} - } - -else - -{ - -throw - -"Error: We couldn't connect to the server ' - -$srv1 - -'. Please check your credentials and the servername" - -} - -$S2 - -= - -New-Object - -"Microsoft.SqlServer.Management.Smo.Server" - -$srv2 - - -if -( -$S2 - --ne - -$null -) - { - -if -( -$S2 - -. -databases -[ - -$bd2 - -] -ne - -$null -) - { - -$tab2 - -= - -$S2 - -. -databases -[ - -$bd2 - -]. -Tables -[ - -$TableName2 - -] - - -$res - -= - -$tab2 - -| - -Where-Object -{ -$_ - -. -Schema --eq - -$sch2 -} - -if -( -$res - -. -Count --eq - - -) - { - -throw - -"Error: The schema - -$sch2 - -doesn't contain any table called - -$TableName2 - -." - -} - } - -else - -{ - -throw - -"Error: The database ' - -$bd2 - -' doesn't exist." - -} - } - -else - -{ - -throw - -"Error: We couldn't connect to the server ' - -$srv1 - -'. Please check your credentials and the servername" - -} - -##check columns - - -$ncols1 - -= - -$tab1 - -. -Columns -. -Count - -$ncols2 - -= - -$tab2 - -. -Columns -. -Count - -$eqCols - -= - -$true - $eqChecks - -= - -$true - $eqIndexes - -= - -$true - $resultCompare - -= - -$true - - -if -( -$ncols1 - --ne - -$ncols2 -) - { - -return - -$false -; - } - -[ - -Array - -] - -$colList - -= -@() - -##check data types, nullable columns,computed columns, identity columns, persisted columns, cols with default - ## rimary keys and foreign keys - - -$tab1 - -. -Columns -| - -ForEach-Object -{ - -$c1 - -= - -$_ - $aux - -= - -$tab2 - -. -Columns -| - -Where-Object -{ - -$_ - -. -Name --eq - -$c1 - -. -Name --and - -$c1 - -. -DataType --eq - -$_ - -. -DataType --and - -$c1 - -. -Nullable --eq - -$_ - -. -Nullable --and - -$c1 - -. -Identity --eq - -$_ - -. -Identity --and - -$c1 - -. -IdentitySeed --eq - -$_ - -. -IdentitySeed --and - -$c1 - -. -Computed --eq - -$_ - -. -Computed --and - -$c1 - -. -ComputedText --eq - -$_ - -. -ComputedText --and - -$c1 - -. -DefaultConstraint -. -Text --eq - -$_ - -. -DefaultConstraint -. -Text --and - -$c1 - -. -InPrimaryKey --eq - -$_ - -. -InPrimaryKey --and - -$c1 - -. -IsPersisted --eq - -$_ - -. -IsPersisted --and - -$c1 - -. -IsForeignKey --eq - -$_ - -. -IsForeignKey - } - -if -( -$aux - --eq - -$null -) - { - -$eqCols - -= - -$false - - -return -; - } - } - -#check the other way to make sure that are completely equal tables - - -if -( -$eqCols -) - { - -$tab2 - -. -Columns -| - -ForEach-Object -{ - -$c1 - -= - -$_ - $aux - -= - -$tab1 - -. -Columns -| - -Where-Object -{ - -$_ - -. -Name --eq - -$c1 - -. -Name --and - -$c1 - -. -DataType --eq - -$_ - -. -DataType --and - -$c1 - -. -Nullable --eq - -$_ - -. -Nullable --and - -$c1 - -. -Identity --eq - -$_ - -. -Identity --and - -$c1 - -. -IdentitySeed --eq - -$_ - -. -IdentitySeed --and - -$c1 - -. -Computed --eq - -$_ - -. -Computed --and - -$c1 - -. -ComputedText --eq - -$_ - -. -ComputedText --and - -$c1 - -. -DefaultConstraint -. -Text --eq - -$_ - -. -DefaultConstraint -. -Text --and - -$c1 - -. -InPrimaryKey --eq - -$_ - -. -InPrimaryKey --and - -$c1 - -. -IsPersisted --eq - -$_ - -. -IsPersisted - } - -if -( -$aux - --eq - -$null -) - { - -$eqCols - -= - -$false - - -return -; - } - } - } - -##check constraints - ##we cannot create 2 constraints with the same name at the same database - - -$tab1 - -. -Checks -| - -ForEach-Object -{ - -$tab2 - -. -Columns -| - -ForEach-Object -{ - -$chk1 - -= - -$_ - $checks - -= - -$tab2 - -. -Checks -| - -Where-Object -{ -$chk1 - -. -Text --eq - -$_ - -. -Text --and - -$chk1 - -. -IsEnabled --eq - -$_ - -. -IsEnabled} - -if -( -$checks - --eq - -$null - --or - -$checks - -. -Count --eq - - -) - { - -$eqChecks - -= - -$false - - -return -; - } - } - } - -##check it out in the other way - - -if -( -$eqChecks -) - { - -$tab2 - -. -Checks -| - -ForEach-Object -{ - -Write-Host - -"hola que ase" - - -$chk1 - -= - -$_ - $checks - -= - -$tab1 - -. -Checks -| - -Where-Object -{ -$chk1 - -. -Text --eq - -$_ - -. -Text --and - -$chk1 - -. -IsEnabled --eq - -$_ - -. -IsEnabled} - -if -( -$checks - --eq - -$null - --or - -$checks - -. -Count --eq - - -) - { - -$eqChecks - -= - -$false - - -return -; - } - } - } - -##Indexes section - - -[ - -Array - -] - -$indexes1 - -= -@() - -[ - -Array - -] - -$cols - -= -@() - -##check indexes - - -$tab1 - -. -Indexes -| - -ForEach-Object -{ - -$ix1 - -= - -$_ - - - #check index type and properties - - -$ix - -= - -$tab2 - -. -Indexes -| - -Where-Object -{ - -$ix1 - -. -IsClustered --eq - -$_ - -. -IsClustered --and - -$ix1 - -. -HasFilter --eq - -$_ - -. -HasFilter --and - -$ix1 - -. -IgnoreDuplicateKeys --eq - -$_ - -. -IgnoreDuplicateKeys --and - -$ix1 - -. -IndexedColumns -. -Count --eq - -$_ - -. -IndexedColumns -. -Count --and - -$ix1 - -. -IsIndexOnComputed --eq - -$_ - -. -IsIndexOnComputed --and - -$ix1 - -. -IsPartitioned --eq - -$_ - -. -IsPartitioned --and - -$ix1 - -. -IsSpatialIndex --eq - -$_ - -. -IsSpatialIndex --and - -$ix1 - -. -IsUnique --eq - -$_ - -. -IsUnique --and - -$ix1 - -. -IsXmlIndex --eq - -$_ - -. -IsXmlIndex - } - -if -( -$ix - --eq - -$null - --or - -$ix - -. -Count --eq - - -) - { - -$eqIndexes - -= - -$false - - -return -; - } - -else - -{ - -##check index column names - - -$ix1 - -. -IndexedColumns -| - -ForEach-Object -{ - -$col1 - -= - -$_ - - -#Get all indexed columns - - -$cols - -= - -$ix - -. -IndexedColumns -| - -Where-Object -{ - -$col1 - -. -Name --eq - -$_ - -. -Name - } - -if -( -$cols - --eq - -$null - --or - -$cols - -. -Count --eq - - -) - { - -$eqIndexes - -= - -$false - - -return -; - } - } - } - } - -if -( -$eqIndexes -) - { - -$tab2 - -. -Indexes -| - -ForEach-Object -{ - -$ix1 - -= - -$_ - - -#check index type and properties - - -$ix - -= - -$tab1 - -. -Indexes -| - -Where-Object -{ - -$ix1 - -. -IsClustered --eq - -$_ - -. -IsClustered --and - -$ix1 - -. -HasFilter --eq - -$_ - -. -HasFilter --and - -$ix1 - -. -IgnoreDuplicateKeys --eq - -$_ - -. -IgnoreDuplicateKeys --and - -$ix1 - -. -IndexedColumns -. -Count --eq - -$_ - -. -IndexedColumns -. -Count --and - -$ix1 - -. -IsIndexOnComputed --eq - -$_ - -. -IsIndexOnComputed --and - -$ix1 - -. -IsPartitioned --eq - -$_ - -. -IsPartitioned --and - -$ix1 - -. -IsSpatialIndex --eq - -$_ - -. -IsSpatialIndex --and - -$ix1 - -. -IsUnique --eq - -$_ - -. -IsUnique --and - -$ix1 - -. -IsXmlIndex --eq - -$_ - -. -IsXmlIndex - } - -if -( -$ix - --eq - -$null - --or - -$ix - -. -Count --eq - - -) - { - -$eqIndexes - -= - -$false - - -return -; - } - -else - -{ - -##check index column names - - -$ix1 - -. -IndexedColumns -| - -ForEach-Object -{ - -$col1 - -= - -$_ - $cols - -= - -$ix - -. -IndexedColumns -| - -Where-Object -{ - -$col1 - -. -Name --eq - -$_ - -. -Name - } - -if -( -$cols - --eq - -$null - --or - -$cols - -. -Count --eq - - -) - { - -$eqIndexes - -= - -$false - - -return -; - } - } - } - } - } - -if -( -$eqCols - --eq - -$false - --or - -$eqChecks - --eq - -$false - --or - -$eqIndexes - --eq - -$false -) - { - -$resultCompare - -= - -$false - -} - -return - -$resultCompare - -} -`[][1] - - - This is a personalized function and three main blocks are checked in order to determine whether two tables have the same schema or not: - - - 1. **Columns**: In this section we check the number of columns, the name of the columns, the data types for every column, if is part of a primary key, if is part of a foreign key, if is a computed column and so on. - - - 2. **Checks**: In this section all checks defined in a table are compared. As we explained before, the name doesn"™t matter, the only thing that matters is the check definition text and the columns involved. - - - 3. **Indexes:** In this sections all the indexes are compared. The index name doesn"™t make a difference, we only check for index type, columns and so on. - - - In order to test this PowerShell function we will run a main program to test it: - - -`#main program -##Define Variables - - -$srv1 - -= - -"(local)\SQLDWH" - - -$srv2 - -= - -"(local)\SQLDWH" - - -$bd1 - -= - -"TableCompare" - - -$bd2 - -= - -"TableCompare2" - - -$sch1 - -= - -"dbo" - - -$sch2 - -= - -"dbo" - - -$TableName1 - -= - -"TestTable" - - -$TableName2 - -= - -"TestTable" - - -#function call - - -Compare-SQLServerTables - -$srv1 $bd1 $sch1 $TableName1 $srv2 $bd2 $sch2 $TableName2 - - -`[][1] - - - The result that we get by running the main program is: - - -[![clip_image005](https://powershell.org/wp-content/uploads/2013/04/clip_image005_thumb.png)](https://powershell.org/wp-content/uploads/2013/04/clip_image005.png) - - - Figure 3-Execution result- - - - Now we are getting **True** as a result, which means that both tables are equals in terms of schema. If we change the schema of one of the test tables we will get a different result. Let"™s say we change the primary for one of the tables: - - -`--alter table - - -use -TableCompare2 -; - - -alter table -TestTable - -drop constraint -PK_TestTable -; - - -alter table -TestTable - -add constraint -PK_TestTable -primary key - -( -id -, -col1 -); - -`Now the table schemas look like follows: - - -[![clip_image007](https://powershell.org/wp-content/uploads/2013/04/clip_image007_thumb.jpg)](https://powershell.org/wp-content/uploads/2013/04/clip_image007.jpg) - - - Figure 4- New Table schemas- - - - The schemas have changed as it is showed in Figure 4. The primary key of the table TestTabe in TableCompare2 Database has two keys instead of one. If we execute again our function the result is: - - -[![clip_image009](https://powershell.org/wp-content/uploads/2013/04/clip_image009_thumb.jpg)](https://powershell.org/wp-content/uploads/2013/04/clip_image009.jpg) - - - Figure 5- Result with different schemas- - - - Now we get **False** because the schemas are different, so our function is working as intended. As you can see, once again PowerShell shows us its power and allows us to solve a problem easily. - - - **Note**: Is very important to remark that this function **only compares Columns, Checks and indexes**. The main reason is because the function was created to solve a given problem but it could be extended to compare more object types like triggers, users and so on. - - - [1]: http://11011.net/software/vspaste diff --git a/content/articles/2013-04-28-scripting-games-2013-have-started.md b/content/articles/2013-04-28-scripting-games-2013-have-started.md deleted file mode 100644 index ab1c2fe5d..000000000 --- a/content/articles/2013-04-28-scripting-games-2013-have-started.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Scripting Games 2013 have started -authors: - - Richard Siddaway -date: "2013-04-28T11:49:53+00:00" -aliases: - - /2013/04/scripting-games-2013-have-started/ ---- - -The 2013 Scripting Games kicked off during the PowerShell summit. Event 1 is open and you can submit entries up until 23:59:59 GMT on 29 April 2013. Voting on the entries starts at at midnight on 30 April. - -You can enter and **you** can vote on the entries. This is a community games run by powershell.org "“ all are welcome. - -If you haven"™t entered yet there is still plenty of time to get you entry in for event 1. Start by reviewing the information at [https://powershell.org/the-scripting-games/][1] - -Enjoy and good luck - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2838/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2838/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2838&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) - - [1]: https://powershell.org/the-scripting-games/ "https://powershell.org/the-scripting-games/" diff --git a/content/articles/2013-04-28-time-for-d-crud.md b/content/articles/2013-04-28-time-for-d-crud.md deleted file mode 100644 index 367306189..000000000 --- a/content/articles/2013-04-28-time-for-d-crud.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Time for D-CRUD? -authors: - - Richard Siddaway -date: "2013-04-28T17:52:28+00:00" -aliases: - - /2013/04/time-for-d-crud/ ---- - -I was thinking on the plane back from the PowerShell summit about the CRUD activities. They are a concept we have inherited from the database world: - -C = Create - -R = Read - -U = Update - -D= Delete - -Create, Update and Delete correspond directly to the PowerShell verbs "“ New,Set and Remove respectively. - -The Read action corresponds to the Get verb. - -Well sort of. - -Get-* is used in two distinct scenarios. Firstly we know of an object and we we want to read its properties "“ for example: - -Get-Process -Name powershell - -We are reading the information about the PowerShell process. That corresponds directly to the Read action in the CRUD paradigm. - -However, we also use Get* when we want to Discover the processes that are running: - -Get-Process - -In which case we are Discovering the processes that are running. - -I think its time to update the CRUD concept and make it DCRUD where D stands for discovery. - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2840/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2840/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2840&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-04-29-ad-management-in-a-month-of-lunches-chapter-9-in-meap.md b/content/articles/2013-04-29-ad-management-in-a-month-of-lunches-chapter-9-in-meap.md deleted file mode 100644 index 82b99f159..000000000 --- a/content/articles/2013-04-29-ad-management-in-a-month-of-lunches-chapter-9-in-meap.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "AD Management in a Month of Lunches\"“ chapter 9 in MEAP" -authors: - - Richard Siddaway -date: "2013-04-29T18:23:15+00:00" -aliases: - - /2013/04/ad-management-in-a-month-of-lunches-chapter-9-in-meap/ ---- - -The MEAP for AD Management in a Month of Lunches has been updated with the release of chapter 9 on managing group policies - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2844/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2844/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2844&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-04-29-cim-vs-wmi-cmdlets-remote-execution-speed.md b/content/articles/2013-04-29-cim-vs-wmi-cmdlets-remote-execution-speed.md deleted file mode 100644 index 399afa204..000000000 --- a/content/articles/2013-04-29-cim-vs-wmi-cmdlets-remote-execution-speed.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: CIM vs WMI cmdlets-remote execution speed -authors: - - Richard Siddaway -date: "2013-04-29T19:08:48+00:00" -aliases: - - /2013/04/cim-vs-wmi-cmdlets-remote-execution-speed/ ---- - -Following on from my previous post we"™ll look at how the two types of cmdlets compare for accessing remote machines. - -I used a similar format to the previous tests but was accessing a remote machine. - -First off was the WMI cmdlet "“ using DCOM to access the remote Windows 2012 server - -**PS> 1..100 | -foreach { -Measure-Command -Expression{1..100 | foreach {Get-WmiObject -Class Win32_ComputerSystem -ComputerName W12SUS }} -} | -Measure-Object -Average TotalMilliseconds** - -Count : 100 -Average : 2084.122547 -Sum : -Maximum : -Minimum : -Property : TotalMilliseconds - - - -The CIM cmdlets are similar but apparently a bit slower "“ probably due to having to build the WSMAN connection and teat it down each time. - -**PS> 1..100 | -foreach { -Measure-Command -Expression{1..100 | foreach {Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName W12SUS }} -} | -Measure-Object -Average TotalMilliseconds** - -Count : 100 -Average : 2627.287458 -Sum : -Maximum : -Minimum : -Property : TotalMilliseconds - - - -So what happens is you run the CIM command over a CIM session? - -**PS> $sess = New-CimSession -ComputerName W12SUS -PS> 1..100 | -foreach { -Measure-Command -Expression{1..100 | foreach {Get-CimInstance -ClassName Win32_ComputerSystem -CimSession $sess }} -} | -Measure-Object -Average TotalMilliseconds** - -Count : 100 -Average : 877.746649999999 -Sum : -Maximum : -Minimum : -Property : TotalMilliseconds - -This removes the setup and tear-down of the WSMAN connection. It suggests that the actual retrieval time for the CIM cmdlets should be reduced to 1749.540808 milliseconds for 100 accesses which is faster than the WMI cmdlets - -It looks like the fastest way to access WMI information is across a CIM session. Next time we"™ll look at running multiple commands - -[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2846/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2846/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2846&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013-04-29-event-1-my-way.md b/content/articles/2013-04-29-event-1-my-way.md deleted file mode 100644 index 0a4478735..000000000 --- a/content/articles/2013-04-29-event-1-my-way.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Event 1: My way…" -authors: - - Bartek Bielawski -date: "2013-04-30T06:11:36+00:00" -aliases: - - /2013/04/event-1-my-way/ ---- - -Looking for not-so-expert solution for Event 1 in both categories? Wonder how one of the judges would do it, if he had a chance? Want to return favor and tell me what I could do better and what I'm doing wrong? Don't hesitate. 🙂 I decided it may be helpful to post my solutions before I ever see yours. Please find full article with lots of code on my [blog](http://becomelotr.wordpress.com/2013/04/30/event-1-my-way/). If you want to tell me you like/ hate this idea - please don't hesitate either. And now I move on to your work. Can't wait! diff --git a/content/articles/2013-04-29-name-that-property.md b/content/articles/2013-04-29-name-that-property.md deleted file mode 100644 index 92f6417ad..000000000 --- a/content/articles/2013-04-29-name-that-property.md +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: Name that Property -authors: - - June Blender -date: "2013-04-29T18:47:25+00:00" -aliases: - - /2013/04/name-that-property/ ---- - -Challenge #1 of Scripting Games 2013 is coming to a close. I can't wait to see the results! I solved both the Beginner and Advanced versions just for practice and I learned a lot along the way. They're not easy, but if you haven't yet tried them, go for it. And be sure to review the candidate solutions for new techniques. -In my last post, I showed a very easy way to create a custom object in Windows PowerShell 3.0 and I argued that returning a custom object is far better than returning formatted objects. But, when you are formatting or selecting properties from an existing object, you can customize the names of the properties and their values. This techique isn't new to Windows PowerShell 3.0 "“ it works in all versions -- but it's really handy, and I've noticed that not a lot of people use it. -Let's start by changing the name of a table column. In this case, the big boss wants a list of files and their attributes. Get-ChildItem ("dir") just about does it, but the property name is "Mode," not "Atrributes," and the big boss is a picky dude. - - -`PS C:\ Get-ChildItem - Directory: C:\ -Mode LastWriteTime Length Name ----- ------------- ------ ---- -d---- 10/9/2012 1:05 PM 2008 -d---- 10/9/2012 1:05 PM 2009 -d---- 10/9/2012 1:05 PM AssemblyTest -d---- 10/9/2012 1:05 PM CabTest -d---- 10/24/2012 1:27 PM Snippets --ar-- 3/7/2011 6:50 AM 0 ApplicationError.txt --ar-- 11/19/2010 2:42 PM 274 archive-Projects.ps1 --a-- 12/13/2010 11:18 AM 3052 Backup-Files.ps1 --a-- 3/2/2011 7:42 PM 312 Check-Examples.ps1 --a-- 9/29/2010 6:57 AM 728 Compare-ParameterSets.ps1 --ar-- 10/24/2012 12:44 PM 1146 Compare-UpdatableHelpVersion.ps1 -`Quick fix! Change the name of the Mode property to Attributes. - - -`Get-ChildItem | Select-Object @{Name="Attributes";Expression={$_.Mode}}, ` -LastWriteTime, Name -Directory: C:\ -Attributes LastWriteTime Name ----------- ------------- ---- -d---- 10/9/2012 1:05 PM 2008 -d---- 10/9/2012 1:05 PM 2009 -d---- 10/9/2012 1:05 PM AssemblyTest -d---- 10/9/2012 1:05 PM CabTest -d---- 10/24/2012 1:27 PM Snippets --ar-- 3/7/2011 6:50 AM ApplicationError.txt --ar-- 11/19/2010 2:42 PM archive-Projects.ps1 --a-- 12/13/2010 11:18 AM Backup-Files.ps1 --a-- 3/2/2011 7:42 PM Check-Examples.ps1 --a-- 9/29/2010 6:57 AM Compare-ParameterSets.ps1 --ar-- 10/24/2012 12:44 PM Compare-UpdatableHelpVersion.ps1 -`Note: I omitted the Length property here so the table is easier to display, but you can add it back if you'd like. -This value is called a _calculated property_. You can use calculated properties in Select-Object, Format-Table, and Format-List commands, and in commands that use other cmdlets where it's noted in the help topic. -A _calculated property_ is a hash table (@{Name=Value; Name=Value"¦} ). The first key is either **Name** or **Label** and the second key is **Expression**. The value of the **Name** (or **Label**) key is the name that you want to assign to the property. The value of the **Expression** key is a script block (inside braces) that gets the property value. -In this case, I just want to rename the "Mode" property to "Attributes," so the value of the **Name** key is "Attributes" and the value of the **Expression** key is a tiny script block that gets the value of the Mode property of each object that is passed to it. - - -`@{Name = "Attributes"; Expression = {$_.Mode}} -`Just for practice, let's rename "LastWriteTime" to "Updated." - - -`@{Name = "Updated"; Expression = {$_.LastWriteTime}} -`Now, you can use the calculated property in a Select-Object, Format-Table, or Format-List command. Put it where you usually put the property name. - - -`Get-ChildItem | Select-Object @{Name = "Attributes"; Expression = {$_.Mode}}, ` - @{Name = "Updated"; Expression = {$_.LastWriteTime}}, Name -Directory: C:\ -Attributes Updated Name ----------- ------- ---- -d---- 10/9/2012 1:05 PM 2008 -d---- 10/9/2012 1:05 PM 2009 -d---- 10/9/2012 1:05 PM AssemblyTest -d---- 10/9/2012 1:05 PM CabTest -d---- 10/24/2012 1:27 PM Snippets --ar-- 3/7/2011 6:50 AM ApplicationError.txt --ar-- 11/19/2010 2:42 PM archive-Projects.ps1 --a-- 12/13/2010 11:18 AM Backup-Files.ps1 --a-- 3/2/2011 7:42 PM Check-Examples.ps1 --a-- 9/29/2010 6:57 AM Compare-ParameterSets.ps1 --ar-- 10/24/2012 12:44 PM Compare-UpdatableHelpVersion.ps1 -`After you've played with this for a while, try changing the value of the **Expression** key so that it gets exactly the value that you need instead of the default property value. -What if the big boss wants that Updated (LastWriteTime) value in Coordinated Universal Time (UTC)? No problem! Just change the expression to call the ToUniversalTime method of DateTime objects. And while we're perfecting, let's change the property name to better describe its new value. -Here's the calculated property: - - -`@{Name = "Updated_UTC";Expression={$_.LastWriteTime.ToUniversalTime()}} -`And here it is in a command: - - -`PS C:\ Get-ChildItem | Select-Object @{Name = "Attributes"; Expression = {$_.Mode}}, - @{Name = "Updated_UTC"; Expression = {$_.LastWriteTime.ToUniversalTime()}}, Name -Attributes Updated_UTC Name ----------- ----------- ---- -d---- 10/9/2012 8:05:46 PM 2008 -d---- 10/9/2012 8:05:46 PM 2009 -d---- 10/9/2012 8:05:46 PM AssemblyTest -d---- 10/9/2012 8:05:46 PM CabTest -d---- 10/24/2012 8:27:30 PM Snippets --ar-- 3/7/2011 2:50:08 PM ApplicationError.txt --ar-- 11/19/2010 10:42:33 PM archive-Projects.ps1 --a--- 12/13/2010 7:18:18 PM Backup-Files.ps1 --a--- 3/3/2011 3:42:02 AM Check-Examples.ps1 --a--- 9/29/2010 1:57:27 PM Compare-ParameterSets.ps1 --ar-- 10/24/2012 7:44:49 PM Compare-UpdatableHelpVersion.ps1 -`I find this technique to be really handy and I hope you do, too. Just don't get caught up in syntax errors. Remember that a calculated property ends in _**two braces**_; one to end the expression script block and the other to end the hash table. diff --git a/content/articles/2013-04-29-state-of-the-games.md b/content/articles/2013-04-29-state-of-the-games.md deleted file mode 100644 index 8786f3c2f..000000000 --- a/content/articles/2013-04-29-state-of-the-games.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: State of the Games -authors: - - Don Jones -date: "2013-04-29T15:10:48+00:00" -categories: - - Scripting Games -aliases: - - /2013/04/state-of-the-games/ ---- - -As of Monday at 5pm Pacific time (which is Tuesday morning, 00:00 hours GMT), the 2013 Scripting Games' first event will conclude. That means the first event is open for community voting - [so get on it!][1] -Remember, some of the best prizes - including a free pass to the 2014 PowerShell Summit - are reserved for folks who offer their votes and comments. -Incoming new registrations for the Games will not be able to compete in Event 1 at this point, but they can jump in with Event 2 (and subsequent events) if desired. -We presently have 1100 registered participants - which may include people who just signed up to spectate and vote, as well as our judges. 475 are registered in the Beginner track, 307 in Advanced, and 318 are presently view-only (meaning they're just voting, not submitting entries). As I write this, we've only got 218 entries - but there are still a few more hours to get them in. - - - [1]: http://scriptinggames.org/ diff --git a/content/articles/2013-04-30-how-to-name-your-help-files.md b/content/articles/2013-04-30-how-to-name-your-help-files.md deleted file mode 100644 index 3275c1b10..000000000 --- a/content/articles/2013-04-30-how-to-name-your-help-files.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: How to Name Your Help Files -authors: - - June Blender -date: "2013-04-30T22:42:53+00:00" -aliases: - - /2013/04/how-to-name-your-help-files/ ---- - -The first challenge of Scripting Games 2013 is complete! Honestly, you win by getting the experience of playing. I hope everyone is in there voting and writing really constructive comments. I'll get over there in a minute, but I wanted to make sure that I got this information out to everyone before I get involved in voting. -Everyone who writes shared Windows PowerShell cmdlets, functions, scripts, CIM commands, and workflows also writes help topics "“ or gets a friend or colleague to do it. -For scripts and functions, you can write [comment-based help][1] (aka "inline help").  All parameters of the Get-Help cmdlet support comment-based help, including the new ShowWindow parameter, and by adding a URL to the first related link, you can support the Online parameter in comment-based help. -But XML help files are required to document cmdlets (C#), CIM commands, and workflows, and to support Updatable Help. If you're delivering your content in a module, you typically want to use XML-based help topics. -When you create XML-based help topics, you need to put them where Get-Help looks and give them the name that Get-Help expects. Otherwise, Get-Help will not find the help topic. -Get-Help looks for the XML-based help topics for the commands in a module in language-specific subdirectories of the module's installation directory.  This is generally well-known and an easy instruction to follow. -The naming guidelines are a bit trickier. In general (specifics follow), Get-Help expects the help topic for a command to be in a help file that is named for the file in which the command is defined, including the file name extension. When the commands in a module are defined in multiple assemblies or multiple CDXML files, the module must include a separate help file for each assembly or CDXML file. -The help file name format is: **-help.xml** -For example: - - * System.Management.Automation.dll-help.xml    #Cmdlets, providers - * MSFT_NetIPAddress.cdxml-help.xml             # CIM commands - * RemoteDesktop.psm1-help.xml                  # Functions, Script workflows - -Here are the specifics: - - * **Cmdlets**:  Help topics for cmdlets must be in a file that is named for the _assembly_ in which the cmdlet is defined. - * **Providers**:  Just like cmdlets, the help topics for providers must be in a file that is named for the assembly in which the provider is defined. The order in which cmdlet and provider help topics appear in the XML file doesn't matter a bit. - * **CIM Commands**: Help topics for CIM commands must be in a file that is named for the CDXML file in which the cmdlet is defined. Yup, if you have a module with 22 nested CIM modules, each with its own CDXML file, you need to create 22 CDXML-help.xml files. J - -Easy, right? Now it gets a bit weird. - - * **Script workflows**: You can write XML help files for script workflows in modules. The names don't matter. Get-Help looks in all XML files in the language-specific subdirectories of the module directory. However, to be consistent, it's best to name script workflow help files for the script module in which they are defined. For example, .psm1-help.xml. - * **Functions**:  Get-Help looks in the function code for an **.ExternalHelp** comment. The value of the comment is the help file name. If there's no ExternalHelp comment, Get-Help cannot find the XML based help file, no matter where it is or what it's named.Get-Help does not require a particular name for function help files, but they're typically named for the script module in which they are defined, such as MyModule.psm1-help.xml.For example: - -`Function MyFunction -{ - #.ExternalHelp MyModule.psm1-help.xml - [CmdletBinding()] - [OutputType([int])] - Param . . . -} -`-or - - -`#.ExternalHelp MyModule.psm1-help.xml -Function MyFunction -{ - [CmdletBinding()] - [OutputType([int])] - Param . . . -} -`If your module contains cmdlets and functions, you can put all of your help topics in the same XML file, but each function must include an ExternalHelp comment with the name of the XML help file. - - -That's the story. So, if you are writing XML help files, be sure that the name and placement of the help files is correct. If you're stuck, ping me on Facebook or Twitter (@juneb_get_help) and I'll give you a hand. - - [1]: http://go.microsoft.com/fwlink/?LinkID=144309 diff --git a/content/articles/2013-04-30-meet-the-scripting-games-judges-june-blender.md b/content/articles/2013-04-30-meet-the-scripting-games-judges-june-blender.md deleted file mode 100644 index d8d3282b5..000000000 --- a/content/articles/2013-04-30-meet-the-scripting-games-judges-june-blender.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Meet the Scripting Games Judges: June Blender" -authors: - - Don Jones -date: "2013-04-30T17:15:20+00:00" -categories: - - Scripting Games -aliases: - - /2013/04/meet-the-scripting-games-judges-june-blender/ ---- - -June Blender is was a senior programming writer on the Windows PowerShell team at Microsoft from Windows PowerShell 1.0 "“ 3.0. You see her work every time you type Get-Help for the core modules. She's now working on the Windows Azure Active Directory SDK team, and she remains an avid Windows PowerShell user and a passionate user advocate. She's a guest blogger for the Scripting Guys and she tweets Windows PowerShell tips on Twitter at @juneb_get_help. -An engineering type by disposition, June was attracted to Windows PowerShell by the efficiency, productivity, and uniformity of automation. As a full-time working mom of three sons (now adults!), the idea of doing anything twice, unless it's fun, is appalling. When evaluating scripts, she looks for elegance, but prefers scripts that inspire to those that intimidate. If saving a line of code makes your script difficult to understand and maintain, it's not worth it. The scripts that get a thumbs-up from June are those that reveal a new way of performing a task and can be used as a template for scripts to come. Oh, and they must have Help! -June's philosophy about Help is pretty simple. It's supposed to make the task easier "“ clear, complete, and accurate. A parameter description that says that ServerName is the name of the server isn't worth the characters you use to type it, but neither is the one that says that a parameter retrieves the modification of the nth cell in the hierarchically rarified data structure. She hates passive voice, too, because you don't know who is supposed to act. About topics are critical. A whole mess of disjointed cmdlet help without an explanation of how they are intended to be used is not really helpful. And the best part of help is the examples. You really can't have too many (see "Get-Help Invoke-Command"). -Community is the secret sauce in Windows PowerShell, so the best scripts contribute to our shared knowledge, productivity, and fun. June much prefer scripts and functions that you can open, read, and model to compiled anything. -A 16-year veteran of Microsoft, June lives in magnificent Escalante, Utah, where she works remotely when she's not out hiking, canyoneering, taking Coursera classes, or convincing lost tourists to try Windows PowerShell. She believes that outstanding documentation is a collaborative effort, and she welcomes your comments and contributions to Windows PowerShell and Windows Azure Help. diff --git a/content/articles/2013-04-30-new-technical-product-manager-at-provance-technologies.md b/content/articles/2013-04-30-new-technical-product-manager-at-provance-technologies.md deleted file mode 100644 index ede1f1c65..000000000 --- a/content/articles/2013-04-30-new-technical-product-manager-at-provance-technologies.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: New Technical Product Manager at Provance Technologies -authors: - - Kirk Munro -date: "2013-04-30T19:25:34+00:00" -aliases: - - /2013/04/new-technical-product-manager-at-provance-technologies/ ---- - -Today is my first day working in my new role as Technical Product Manager at [Provance Technologies][1].  A little while back Provance approached me to talk about this position, and it seemed like a very natural fit.  Rarely have I felt such a positive vibe from a company through the interview process, so I was really happy to accept the position of Technical Product Manager with them and I have been looking forward to starting work with them. - -Now that I am working full-time with [Provance][2], I"™ll be getting up to speed as quickly as I can on the IT Asset Management Pack and the Data Management Pack products that we offer to help companies properly manage the assets they have inside their organization.  I know there is already some PowerShell support in one of the products, although I haven"™t personally taken a look at it yet (but you can bet I will be soon). - -For those of you who regularly follow my blog, if you happen to use either of these products in your organization, I"™d love to hear about it. - -Kirk out. - -[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/862/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/862/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=862&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) - - [1]: http://www.provance.com/ "Provance Technologies" - [2]: http://provance.com/ "Provance Technologies" diff --git a/content/articles/2013-04-30-scripting-games-voting-continues.md b/content/articles/2013-04-30-scripting-games-voting-continues.md deleted file mode 100644 index 6027a75fa..000000000 --- a/content/articles/2013-04-30-scripting-games-voting-continues.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Scripting Games Voting Continues! -authors: - - Don Jones -date: "2013-04-30T17:52:21+00:00" -categories: - - Scripting Games -aliases: - - /2013/04/scripting-games-voting-continues/ ---- - -As of right now, we've got almost 1900 votes on entries in the [Scripting Games][1]. Remember that each vote is a "pointlet" (see the PowerShell tie-in we did there?), which is basically a raffle ticket in our prize lottery. -But... there's a secret about the lottery. It's weighted based on how many entries you've voted on. -The algorithm is a bit complex, but for example, if you've voted on 90% of the available entries, you're something like 30% more likely to win a prize. Vote on 50%, and you're about 12% more likely to win... and so on. It's a bit logarithmic... as you get closer to 100% your chances of winning increase more and more, with about a 39% advantage if you've voted on 100% of the events. -Of course, you can't just abuse the system. We've got automated and manual checks in place for people who are just randomly voting - clicking all the same vote, voting in patterns, or voting with very little time separation between votes. All of those things will trigger a manual review, and you can be banned _for life_ for attempting to game the system. We're also tracking IP addresses and whatnot, so if you're voting from multiple accounts, or trying to upvote your own entries... we're going to just shut you out. You won't even necessarily be notified, because we're not confrontational folks. -But I know nobody'd do all that - we're all in this to make the Games fun and educational! So get in there and vote. And leave comments. If you vote 1-star, tell the author why, so they can improve. Hey, it's what YOU would want if someone 1-starred YOUR code, right? Right! -So vote! [http://ScriptingGames.org][1]! -(PS - please don't report any tech problems in the comments here. The Games Web site has a feedback link) - - [1]: http://scriptinggames.org/ diff --git a/content/articles/2013-04-30-thoughts-on-event-1-and-frankly-a-rant.md b/content/articles/2013-04-30-thoughts-on-event-1-and-frankly-a-rant.md deleted file mode 100644 index e0f29a898..000000000 --- a/content/articles/2013-04-30-thoughts-on-event-1-and-frankly-a-rant.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Thoughts on Event 1 – and, frankly, a rant. -authors: - - Don Jones -date: "2013-05-01T00:06:53+00:00" -categories: - - Scripting Games -aliases: - - /2013/04/thoughts-on-event-1-and-frankly-a-rant/ ---- - -There's been a lot of dismay floating around the community about the state of "community voting" in the Scripting Games. Some folks are voting without leaving comments (we've expanded the comment field to 2000 characters, hopefully that'll help), and some disagreement about scores. -Disagreement is natural. For example, stick a **Write-Host** in your script and I'm likely to score you lower. You may disagree, but it's how I feel in many situations... and I'm seeing a distressing amount of it. -Did you know that using **[CmdletBinding(SupportsShouldProcess=$True)]** doesn't automatically and universally _make the -confirm switch work?_ You have to do a bit more. -Did you know that if you put **$DebugPreference='SilentlyContinue'** in your **BEGIN{}** block, that you disable the built in -Debug switch's functionality? Yep, seen this one a few times also. -The community is showing a distinct lack of love for scripts that look like VBScript scripts. Does that mean your script is wrong? No - but it means you're not approaching the problem in a way that the world in general feels is best. It doesn't mean your script won't work - but it means it wouldn't be widely accepted. -If you're not happy with your score, look at some higher-scoring scripts. See what they're doing differently. If you can't figure it out, post in the forums on PowerShell.org (there's a Scripting Games forum). Provide the permalink to your script, and solicit some feedback from the community. Tweet people and ask them to take a look. You can _ask_ for more feedback, if you want it and aren't getting enough. -As our judges begin to post their notes, look at what they're writing. Maybe they didn't pick your script to write about - but are they writing about things that you also did in your script? -I'm seeing a lot of good scripts. But I'm also seeing some misunderstandings of some core, advanced features, like error handling, use of Verbose output, and so on. Each of those is a star to a half-star off, for me... some of these things, _in my opinion,_ are severe, and I score accordingly. I haven't seen a perfect, un-improve-able script, yet (I'm not even halfway through, yet). So no 5-stars yet. But I _am_ trying to leave comments, and I know others are, too, so hopefully folks can improve. But be patient - it takes _time._ -And _opinions differ._ Let me offer an example: -**Write-Verbose ("Script: {0} ended at {1}" -f $MyInvocation.ScriptName, (get-date) )** -****Dislike. Not saying it's wrong at all - and some people will disagree, vehemently, with me. But I find -f strings hard to read. -**Write-Verbose "Script $($MyInvocation.ScriptName) ended at $(Get-Date)"** -****For me, that's easier to read. Not any more "right," but in my company that's the standard we adopted and that we use. Now, hopefully my opinion is being balanced by others' opinions. But, if a substantial number of people share my opinion, this code would get a low score, and a _community standard practice_ would emerge - something we can learn from _after the Games are complete._ Because yes, I'm going to harvest the Games entries and comments long after the Games are over to help keep the conversation and education going. -My point of this is that _none of us_ are as awesome as we think. Others will always have points of disagreement. What's really exciting here is the opportunity to create a community consensus of what's best. That won't come for several weeks, yet... but it _will_ come. There is **zero immediate benefit in getting a high score in the Games, and zero immediate detriment to a low score.** This is going to seem harsh, but the Games are not about _you._ They're about _all of us._ They're about us developing a sense of community involvement and standards in an industry that doesn't supply many of its own. This will happen over time, and with a lot of effort. But it's worth it. -Let's continue. -**[ValidateScript({(Test-Path $_ -PathType Container)})]** -I love that. I never thought to do that, and I love it. I've seen a few people do it. Bless them. I learned something! -An aside: There's this general undercurrent of, "I wish 'expert' judges were scoring me instead of the great unwashed masses." Let me point out some practical realities. One, every entry in the Games at this point has at least 4 votes; many have double that. The last event, most had 1, 2 at most. And yes, while 'expert' judges are allegedly well-qualified to render judgment, I'm not seeing a ton of scores I completely disagree with, yet. A few. Not a ton. And you want to know a dirty secret? How many entries do you think an 'expert' can look at, in the evening, after working all day (we're all volunteers), before he just starts getting a little arbitrary and inconsistent? The number is not "infinite." I know I got a little arbitrary last year before I caught myself and stopped for the night. So... don't discount the value of your peers' opinions. If you're getting a low score and don't know why, seek out answers. Yes, people should leave comments with their votes. If they don't, take charge and seek out answers yourself. -I **love** that I'm seeing so many divergent approaches to a single (admittedly open-ended) problem. Frankly, the value here is in browsing others' approaches and picking up some tips from them. Or just seeing something different. You shouldn't care about your _score._ You should care about what other people are doing, and about why you think their way might be better, worse, or just different. _Make_ a learning opportunity. Don't wait for someone to come to you with a free, written analysis of your code. Analyze _other people's entries_ and judge yourself against their work. -I've seen this a few times: - - -`# Validate that the source/log path provided is valid -if (-not (Test-Path $LogDirectory)) { - Read-Host -Prompt 'Please provide a valid log directory'; -} -`I had honestly never thought of that. I'm not sure how I feel about it. Generally, PowerShell commands throw errors - they don't prompt you to retry, and I'm a big fan of consistency with the native commands. Right now I think this is a 1/8th point off for me... but I appreciate the approach and I'm still thinking about it. -I've seen this a **lot:** - - -`Get-ChildItem -Path $LogDirectory -Filter $Filter | -Where-Object { - $_.PSIsContainer -eq $false - -and - $_.LastWriteTime -le (Get-Date).AddDays(-($RetentionPeriod)) } | -ForEach-Object { - $RelativePath = $_.FullName.Substring($LogDirectory.Length); - # (truncated) -`Personally, dislike. That's command-line, console-host approach - not a script. I think these massive pipeline blocks, in a script, are harder to read. Are they wrong? No. Will someone disagree with me? Yes. Again, vehemently. But I'm entitled to my opinion, and my opinion is that I'd rather see a scripting construct (ForEach) than a massive pipeline construct. Not in every scenario ever, perhaps, but... I'm biased against this approach. Understand that **Where-Object** is really just a ForEach loop in sheep's clothing... I suspect a single ForEach scripting construct could accomplish this block of logic in less time. As-is, you're looping through each object at least once... and many of them twice. That could be tighter. -**Write-Warning $_.Exception.Message** -****This bums me out a little and I've seen it a lot. $_ can get hijacked a little easily, depending on your code... and frankly, it's hard to read. Why not take one extra step and use -ErrorVariable to capture the error into an easy-to-read variable name, and work with that? There _are_ some arguments why not... but, in a broad sense, I prefer declarative, explicit stuff vs. weird built-in variables. I hate $_ even though it's used bloody everywhere. - -> Another aside: I've gotten several support e-mails from folks who missed the cutoff time. The site **clearly indicates that all times are GMT.** This is a global competition, and your local time zone isn't the only one out there. We can't provide exceptions to the cutoff - I'm truly sorry about that, but you can continue to participate in the next event. **All times are GMT.** The Competitor Guide also clearly states that all ties will be given as GMT, and if you've any confusion, the menu bar of the Games Web site lists the current time in GMT, which is what the server uses to make all scheduling decisions. - -**[ValidateScript({Test-Path $_})]** -****I freaking love that. Points off if you've included that **and** you've coded a manual check for the path. Redundancy doesn't pay, unless it's a server cluster. - - -`if (!(Get-PSDrive -Name "dest" -ErrorAction:SilentlyContinue)){ - try { - New-PSDrive -Name "dest" -PSProvider FileSystem -Root $Destination -ErrorAction:Stop | Out-Null } - catch { throw "Cannot establish PS Drive for destination: $Destination. Check the path and try again." } } -`I am at a bit of a loss as to why this solution needed a PSDrive. I mean... not wrong, but befuddling. I do tend to down-vote code I regard as unnecessary (and a lengthy comment explaining why you feel it's necessary won't help, if I disagree). In this case... I was just confused as to the need. Oh, and **-ErrorAction:SilentlyContinue** looks plain weird. Why would you include the colon? You didn't for any other parameter. Minus 1/8th point for style - just because I'm a stickler for consistency, and using the colon breaks consistency. Some poor slob in the future is going to look at this and wonder, "when do I use a colon and when don't I? Aggh!" and I'm going to have to write a book about it. Argh. . -Look at and tell me why I love it. Man, I hope that link works. If it doesn't don't yell - I'll fix it. -Oh: - - -`param( -[Parameter(Position=0)] -[string]$Source = "C:\Application\Log", -[Parameter(Position=1)] -[string]$Destination = "\\NASServer\Archives", -[int]$MaxAge = 90 -) -`I don't downvote for this, but I'm curious: Why declare a position for every parameter, when what you've declared is the default? Without those **Position=x** statements, you'd get exactly the same thing, right? Seems unnecessary? -Want more feedback? http://scriptinggames.org/entrylist.php?entryid=165. That's the Scripting Wife's entry. She's an _accountant._ But she's taken the time to be loved, so everyone votes on her entry. And I'll point out she's not getting a 5.0 score - so folks are clearly willing to be critical, even in spite of love. -Go, and be loved . diff --git a/content/articles/2013-05-01-and-the-norweigian-judge-says.md b/content/articles/2013-05-01-and-the-norweigian-judge-says.md deleted file mode 100644 index a634a23cb..000000000 --- a/content/articles/2013-05-01-and-the-norweigian-judge-says.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: And the Norweigian judge says… -authors: - - Don Jones -date: "2013-05-01T20:22:12+00:00" -aliases: - - /2013/05/and-the-norweigian-judge-says/ ---- - -Jan Egil Ring weighs in with his thoughts on Event 1: diff --git a/content/articles/2013-05-01-do-you-really-support-should-process.md b/content/articles/2013-05-01-do-you-really-support-should-process.md deleted file mode 100644 index dd3c4c7c1..000000000 --- a/content/articles/2013-05-01-do-you-really-support-should-process.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Do you really Support Should Process…? -authors: - - Bartek Bielawski -date: "2013-05-01T22:02:38+00:00" -aliases: - - /2013/05/do-you-really-support-should-process/ ---- - -While working on my notes for first event of Scripting Games I was looking around what others wrote, and was surprised that people really think that enabling SupportsShouldProcess is good enough. In my opinion - it is not. And because this is relatively big topic I decided to write separate blog post just about that. You can find it [here](http://becomelotr.wordpress.com/2013/05/01/supports-should-process-oh-really/). I hope it will highlight the difference between **enabling** this feature and actually **implementing** it. And remember: **do not** kill the messenger. 😉 More from me (mainly on other topics related to first event) tomorrow. diff --git a/content/articles/2013-05-01-few-notes-written-after-event-1.md b/content/articles/2013-05-01-few-notes-written-after-event-1.md deleted file mode 100644 index b3e4b0683..000000000 --- a/content/articles/2013-05-01-few-notes-written-after-event-1.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Few notes written after event 1. -authors: - - Bartek Bielawski -date: "2013-05-02T06:48:11+00:00" -aliases: - - /2013/05/few-notes-written-after-event-1/ ---- - -As promised, today more general thoughts on scripts I've seen in both categories in the first event. I'm Polish, so I decided to blog notes both in my own language, and in English, "just in case". Also, my Polish is much better than my English (I hope!), so for people from Poland: they can read Polish version, without the pain of translating my-English to English-English. Enjoy! -[English version](http://becomelotr.wordpress.com/2013/05/02/event-1-my-notes/) -[Polish version](http://powershellpl.net/2013/05/02/scripting-games-moje-notatki-1/) diff --git a/content/articles/2013-05-01-scripting-games-2013-thoughts-after-event-1.md b/content/articles/2013-05-01-scripting-games-2013-thoughts-after-event-1.md deleted file mode 100644 index 4b7a303d0..000000000 --- a/content/articles/2013-05-01-scripting-games-2013-thoughts-after-event-1.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Scripting Games 2013: Thoughts After Event 1" -authors: - - Boe Prox -date: "2013-05-02T02:21:16+00:00" -aliases: - - /2013/05/scripting-games-2013-thoughts-after-event-1/ ---- - -With Event 1 in the books for the 2013 Scripting Games, we are now in the voting period where the community gets the chance to play judge on all of the scripts submitted by voting and commenting on the submissions. I aim to take a look at the common items that pose problems and recommendations on what to do to fix this. The full article is available [here][1]. - - [1]: http://learn-powershell.net/2013/05/01/scripting-games-2013-thoughts-after-event-1/ diff --git a/content/articles/2013-05-01-tobias-judge-notes.md b/content/articles/2013-05-01-tobias-judge-notes.md deleted file mode 100644 index 7c7c0b2b7..000000000 --- a/content/articles/2013-05-01-tobias-judge-notes.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Tobias' Judge Notes" -authors: - - Don Jones -date: "2013-05-01T13:33:45+00:00" -aliases: - - /2013/05/tobias-judge-notes/ ---- - -Tobias Weltner offers some "don'ts" from his review of Event 1 entries: diff --git a/content/articles/2013-05-01-why-doesnt-my-validatescript-work-correctly.md b/content/articles/2013-05-01-why-doesnt-my-validatescript-work-correctly.md deleted file mode 100644 index d64db0ff0..000000000 --- a/content/articles/2013-05-01-why-doesnt-my-validatescript-work-correctly.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "Why Doesn't My ValidateScript() work correctly?" -authors: - - Don Jones -date: "2013-05-01T13:52:06+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -aliases: - - /2013/05/why-doesnt-my-validatescript-work-correctly/ ---- - -I've received a few comments from folks after my observations on the Scripting Games Event 1. In those observations, I noted how much I loved: -**[ValidateScript({Test-Path $_})][string]$path** -As a way of testing to make sure your -Path parameter got a valid value, I love this. I'd never thought of it, and I plan to use it in classes. I may write a book about it someday, or maybe even an ode. Seriously good logic. But... I also bemoaned some scripts that provided an additional Test-Path, in the script's main body of code. Why have a redundant check? -So, first, thanks for the e-mails you all sent. Second... please understand that I can't respond to you all. I've got this full-time job thing, and I've _got_ to do it or the grocery store will stop taking our checks. You're _welcome_ to drop comments here, and I _really appreciate_ when you say stuff like, "can you explain ___ in a future post?" because it gives me ideas to write about. I just can't get into private e-mail based education for a dozen folks. Teaching is kinda what I do for my job, so most of my time has to go to that. -But - there's a great teaching point here. Let's take this example: -[![valid-default-path](https://powershell.org/wp-content/uploads/2013/05/valid-default-path.png)](https://powershell.org/wp-content/uploads/2013/05/valid-default-path.png) -This works as you would hopefully expect. When given a valid path, it's fine. When allowed to use a valid default, it's fine. When given an invalid path, it barfs in the ValidateScript. Now look at the next example - which more closely approximates what people have been seeing in their Scripting Games scripts: -[![invalid-default-path](https://powershell.org/wp-content/uploads/2013/05/invalid-default-path.png)](https://powershell.org/wp-content/uploads/2013/05/invalid-default-path.png) -In the Games, you were given a default path that _wasn't valid on your computer._ So folks allowed their script to run with that default, and got errors, and were annoyed that ValidateScript() didn't catch the problem. -It never will. -When you run a command, PowerShell goes through a process called parameter binding, wherein it attaches values to parameters and runs any declarative validation - like ValidateScript(). That validation will _always_ catch invalid incoming data that's been manually specified or sent in via the pipeline (for parameters that accept pipeline input). Because my -Path parameter wasn't declared as mandatory, the validation routine will let me run the script and not specify -path. -_Then_ the shell actually _runs_ my code - and _that's_ when it assigns the default value to $path if one wasn't specified on -path. Validation is over by this point, so an invalid default value will sneak by. The assumption by the shell is that _you're_ providing the default value, so _you're_ smart enough to provide a valid one. If you don't, it's your problem. -So do you just add a second, in-code check for the parameter? I'd still say no. I really dislike redundancy. If you know, because of your situation, that you can't rely on ValidateScript(), then don't use it at all - one check should suffice, and if it needs to be in-code instead of declarative, that's fine. What'd be nice is if there was a declarative way of specifying a default, like **[Default('whatever')]** that ran before the validation checks, but such a thing doesn't exist. Frankly, you could probably argue that if you can't guarantee the validity of a default, then you shouldn't provide one - and I'd probably buy into that argument, and subscribe to your newsletter. -In this case, the problem is entirely artificial. The default path value given to you in the Games scenario _is_ valid _in the context of the Games;_ it's just when you test it on _your_ system, _outside_ that context, that a problem crops up. -Hopefully this helps explain how the ValidateXXX() attributes work, and how they interact with other features, like a default value. -_Now_ explain why this will never assign C:\ as a default value: -**[Parameter(Mandatory=$True)][string]$path = 'c:\'** diff --git a/content/articles/2013-05-02-event-1-moving-old-files.md b/content/articles/2013-05-02-event-1-moving-old-files.md deleted file mode 100644 index d635d0faa..000000000 --- a/content/articles/2013-05-02-event-1-moving-old-files.md +++ /dev/null @@ -1,227 +0,0 @@ ---- -title: "Event #1: Moving Old Files" -authors: - - June Blender -date: "2013-05-02T21:31:40+00:00" -aliases: - - /2013/05/event-1-moving-old-files/ ---- - -As a celebrity judge, I'm not required to blog "“ I'm just here for my good looks :> -- but I'm having a great time reading the blogs posted by the Expert Judges about the [Event #1][1] candidate solutions.  Much of the judging is subjective, but I'll add the criteria that I use to distinguish a working solution from a great solution. -Before I do, though, I want to congratulate everyone who submitted an entry. Most of the entries work and you probably learned just from playing with the challenge. Keep it up and come back year after year. -One hint to everyone: **TEST!** Most of the entries work, but many fail if the directory for the application (e.g. App1 in \\NASServer\Archives\App1) does not already exist. And, a few fail with regular expression errors on the Replace operator (more in the blog). There are lots of great test strategies, but you can just run your code on file in your own directories or step through the code in the Windows PowerShell ISE debugger. - -## Get-Help: An Archival Atrocity - -Let's start with a quick review of the event challenge. You can read the beginner challenge [here][1]. -Basically, the task is to move log files older than 90 days old from their current locations in application-specific subdirectories of C:\Application\Log  (such as C:\Application\Log\\.log) to an archive share, \\NASServer\Archives. -The files have GUID filenames (read: you can't predict them). You need to maintain the subdirectory structure, so if a log file starts in the App582 subdirectory of C:\Application\Log, after the move, it should be in the App852 subdirectory of NASServer\Archives. -The final instruction/hint is that the applications generate the files and never touch them again. I'm not an expert, but I interpreted this to mean that the CreationTime property and the LastWriteTime property of these log files will be the same and you can use either in your solution. (Is that right?) -The advanced challenge involves the same task, but generalized into a reusable tool, so you want to create a script with parameters for the log path and archive paths. This is one of those advanced challenges that many beginners should be able to do. For giggles, try it on your beginner solution. -To recap, here are the elements of this challenge and solutions, all of which I think are acceptable in a beginner challenge. - - * Find the log files - * Get only the ones that are at least 90 days old (CreationTime or LastWriteTime) - * Move them to the same subdirectory in the archive directory - -Finding the log files is pretty easy: - - -`Get-ChildItem C:\Application\Log\*.log "“Recurse -Get-ChildItem C:\Application\Log -Include *.log "“Recurse -Get-ChildItem C:\Application\Log -Filter *.log "“Recurse -Get-ChildItem C:\Application\Log\ *\*.log -`Calculating 90 days is only a bit harder: - - -`(Get-Date).AddDays(-90) #Yes, a negative number! -(Get-Date).Subtract(New-TimeSpan -Days 90) -((Get-Date) - $file.LastWriteTime).Days -gt 90 -`Because the only really tricky part in this challenge is moving the file and maintaining the directory structure, I'm concentrating on that part. - - * First,  you need to get the current subdirectory and make sure the file goes in that same subdirectory in the new location. - * Second, if you try to copy or move an item to a directory that doesn't exist, the command fails "“ and the Force parameter will not build the path for you. - -## Get-MyVote - -Here are the elements that I look for in a solution. - - * **Preserve the path**:  I look for solutions that preserve or build the new path correctly. This is required by the challenge, but it's also a place for some creativity. - * **Test-Path/New-Item**: I look for solutions that test to see if the path exists in the new location (Test-Path) and creates the directories in the path if they don't already exist, typically by using Mkdir (md) or New-Item "“Type Directory. - * **New-Item | Out-Null**:  When you create a new path, New-Item and Mkdir return a directory object. This can be confusing to users who run your script, so I give extra points for suppressing the output. I typically do this by piping the output to Out-Null. Here's a possible solution, but I'm open to creative variation. - -`New-Item -Type Directory -Path C:\Application\Log\$p | Out-Null -`* **Help** (of course). More below - * **Test.** Don't share a solution that you haven't tested. There are many ways to test, but running the solution on datasets with different elements is a great way. I always run my code in the Windows PowerShell ISE debugger before using it or sharing it. **** - -## Get-Help - -All shared functions and scripts should have help. Help helps the end user and makes the script maintainable. Unless you plan a use a command once and toss it, you need help. -Comment-based help for a simple script like this is easy to write: -<# - - -`.SYNOPSIS - Move-Oldfiles.ps1 - By juneb 4/25/2013 -.DESCRIPTION - Moves files that are at least 90 days old from a - subdirectory of C:\Application\Log to the same - subdirectory in NASServer\Archives. -.EXAMPLE - Move-OldFiles.ps1 -`#> -Additional comments are great, especially if you're doing something clever. For example, if you use the $Path.Directory.Name to get the path (thanks to [Bartek Bielawski][2] for this hint), a comment that it gets only the immediate parent directory would be very helpful to someone reading the script. -I actually deduct points for "help" that Get-Help can't get, such as this sort of stuff: - - -`# This script moves files that are older than 90 days -# old from a subdirectory of C:\Application\Log to the -# same subdirectory in NASServer\Archives. I wrote it -# for Scripting Games 2013, Event 1 -`It's so easy to do it right that doing it wrong is pretty silly. - -## Efficiency: Calculating 90 Days - -I've seen a lot of this approach in solutions, usually in one-liners. - - -`Get-ChildItem C:\Application\Log\*\*.log | - Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-90)} | - Move-Item -Destination ... -`This approach recalculates the archive date FOR EVERY FILE. That would make sense only if the script took more than a day to run. Computers are pretty fast these days, but there's no reason to be purposefully inefficient. It's much better to calculate the archive date once, save it, and reuse it. - - -`$ArchiveDate = (Get-Date).AddDays(-90) -Get-ChildItem C:\Application\Log\*\*.log | - Where-Object {$_.LastWriteTime -lt $ArchiveDate} | - Move-Item -Destination ... -`## Get-ChildItem: -File, -Directory -Hidden -ReadOnly, -Attributes - -The FileSystem provider in Windows PowerShell 3.0 adds awesome new parameters to the Get-ChildItem cmdlet. For help, Get-Help [Get-ChildItem for FileSystem][3]. I give extra points to people who use them correctly and deduct points for the more old-fashioned PSISContainer. -The following code works: - - -`Get-ChildItem C:\Application\Log -Recurse | Where-Object {$_.PSIsContainer} -`But the preferred version uses the new features and it is really much easier to interpret: - - -`Get-ChildItem C:\Application\Log -Directory -Recurse -`On the same note, I noticed the following: - - -`Get-ChildItem -Attributes D ... -`Like a lot of solutions, this works -- it gets only directories in the path -- but it's more confusing than the simpler equivalent: - - -`Get-ChildItem -Directory -`The Attributes parameter is designed for attribute combinations and for attributes that cannot be expressed with the simpler parameters, like this expression, which gets files that are compressed and not hidden. - - -`Get-ChildItem -File -Attributes Compressed+!Hidden -`## Regular Expressions in Replace Statements - -One of the tricky parts of this challenge was preserving the original path in the new archive directory. There were many clever ways to do this. But several (presumably untested) solutions will fail with a regular expression error. -For example: - - -`foreach ($file in $files) -{ - $newName = $file.fullname -replace 'C:\Application\Log','\\NASServer\Archives' - move-item -Destination $newName -} -`Generates this error: - - -`Regular expression pattern is not valid: C:\Application\Log. -At C:\ps-test\ScriptingGames2013\Move-TestEsc.ps1:5 char:5 -+     $newName = $file.fullname -replace 'C:\Application\Log','\\NASServer\Archive ... -+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+ CategoryInfo          : InvalidOperation: (C:\Application\Log:String) [], RuntimeException -+ FullyQualifiedErrorId : InvalidRegularExpression -`The problem here is that you didn't intend to supply a regular expression as input, but the Replace operator interprets the text that it is replacing (the first operand) as a regular expression. In this case, it interprets the backslashes as escape characters.  To resolve the error, escape the backslashes by doubling them, that is, preceding each backslash with another backslash. -For example: - - -`-replace 'C:\\Application\\Log' ... -`Here is the corrected code: - - -`foreach ($file in $files) -{ - $newName = $file.fullname -replace 'C:\\Application\\Log','\\NASServer\Archives' - move-item -Destination $newName -} -`You don't need to escape the backslash in the replacement text (second operand), because the Replace operator doesn't interpret that text as a regular expression. It just pastes it. -NOTE: The [Replace method of strings][4] does not use regular expressions, so you don't need to worry about those backslashes. - - -`$newName = ($file.fullname).Replace('C:\ps-test','\\NASServer\Archives') -`## Simplify Booleans - -Here's a very frequent pattern: - - -`if ($a -eq $true) {} elseif ($a -eq $false) {} -`But notice that: - - -`$a -eq $true -`Is equivalent to: - - -`$a -`Similarly: - - -`$a -eq $false -`Is equivalent to: - - -`!$a -`And, if $a is not true, the only alternative, is that it's false. So you can simplify that original code to: - - -`if ($a) {} else {} -`So, when you see yourself typing: - - -`Where {$_.PSIsContainer -eq $true} -`You can react immediately and change it to: - - -`Where {$_.PSIsContainer } -`Or change: - - -`$_.PsISContainer -ne $True -`To: - - -`!$_.PsISContainer -`A side note: In some languages, $a is true if it contains a true statement or any numeric value other than zero. In Windows PowerShell $a is true if it contains a true statement or a value of 1; otherwise, it is false. - -## Enumerating the paths - -Many of the solutions included enumerated paths, like this: - - -`Get-Childitem -Path "C:\Application\Log\App1", ` - "C:\Application\Log\OtherApp", ` - "C:\Application\Log\OtherApp" -Recurse ... -`I feel badly, but I think these folks misinterpreted examples to be absolute paths. It's really important for us to write the challenges clearly and unambiguously, especially because we have a truly international audience, but participants need to read carefully, too. - -## Don't use aliases - -Aliases are terrific for interactive commands and commands that you don't share with others. But for anything else, including the Scritping Games, avoid them. Can you imagine a beginner trying to intepret a solution in which "?" is used instead of Where-Object? How would the person search for that "?"?  Because understanding is the goal, I have no trouble with eliminating the "Object" in Where-Object, Sort-Object, Select-Object, but it's better to leave it in. -In general, you should also include the names of positional parameters, although I don't mind omitting the most frequently used ones. Other people might be pickier, but I don't use "Where-Object -Property" or "Get-ChildItem -Path" in my own code and I don't require it from others. - -## One-Liners - -A final note: one-liners are very useful, but I don't count lines of code or characters in a command when evaluating solutions. Solutions that use fancy regular expression statements are impressive but they can be difficult to interpret and maintain. If you can get your code onto one line, that's terrific, but it's not necessary and I don't give it any extra points. -Now, we can get ready for Event #2. Good luck, everyone! - - [1]: http://blogs.technet.com/b/heyscriptingguy/archive/2013/04/25/2013-scripting-games-beginner-event-1.aspx - [2]: http://becomelotr.wordpress.com/2013/04/30/event-1-my-way/ - [3]: http://technet.microsoft.com/en-us/library/hh847897.aspx - [4]: http://msdn.microsoft.com/en-us/library/fk49wtc1.aspx diff --git a/content/articles/2013-05-02-event-2-opens-event-1-winding-down.md b/content/articles/2013-05-02-event-2-opens-event-1-winding-down.md deleted file mode 100644 index 7298c57c3..000000000 --- a/content/articles/2013-05-02-event-2-opens-event-1-winding-down.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Event 2 Opens / Event 1 Winding Down -authors: - - Don Jones -date: "2013-05-02T14:25:12+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/event-2-opens-event-1-winding-down/ ---- - -Event 2 is scheduled to open this evening in The Scripting Games - _remember, all times on the [Scripting Games Web site][1] are GMT._ You will need to adjust for your local time zone. -Voting on Event 1 is scheduled to end on May 7th, so you still have 5 days to earn pointlets and leave comments for your colleagues. As of right now, we have over 330 entries, and an astounding 4,900 votes - an average ratio of more than 14 votes per entry. Folks, that's _seven times more_ than we've been able to provide in the past by just having "expert judges" voting. -Those experts are now being put to better use, providing the learning experience we so much want to deliver. They're posting in their own blogs ([list][2]) as well as [here on PowerShell.org][3], and there's a lot to read. I'm delighted that we've been able to provide so much commentary before Event 2 starts, since that'll doubtlessly help everyone do better. -The average CrowdScore is 2.551 per entry - obviously there's everything from 1-point entries to 5-point entries. Folks are being pretty critical, and identifying things they don't like, as well as things they do. With more than 1800 comments (that's an average of more than 5 per entry), hopefully competitors are starting to get some take-aways from the community as well. -On Mighty Panel of Celebrity Judges will start awarding first, second, and third place in Event 1 very soon, and that process will take a few days. Keep in mind that their decisions are in no way connected to the community-based CrowdScore. Instead, they're exploring entries on their own, stating with the ones "favorited" by our expert commentary judges. -Also, I've heard some concern about people trying to "cheat" the system by simply dropping in random votes in order to rack up pointlets and win prizes. We're watching for that - we log IP addresses, vote times, and a lot of other data. We'll be filtering the votes before awarding prizes, so there's just no value in cheating. _You won't see that filtering -_ we're doing it on an offline copy of the data so that there's no chance of accidentally deleting anything valuable - but you'll also be happy to know that, right now, there's very little in the way of anything suspicious, and nothing that's been confirmed. -I want to re-emphasize that the CrowdScore activity doesn't become a true learning experience until _after the Games are over,_ which is when we can start mining that data and divining some crowdsourced best practices and patterns - creating our own community sense of "right and wrong" in PowerShell. I also want to point out that, after the Games, we'll be posting all entries, and their comments, into easier-to-download archives (I know the Web site doesn't make copy n paste super-easy; that's largely an artifact of what we need to do to display things properly; we're not offering downloads at this time mainly to control server load). -Enjoy Event 2! - - [1]: http://scriptinggames.org/ - [2]: https://powershell.org/the-scripting-games/scripting-games-judges-notes/ - [3]: https://powershell.org/category/announcements/scripting-games/judges-notes/ diff --git a/content/articles/2013-05-02-judge-notes-for-event-1.md b/content/articles/2013-05-02-judge-notes-for-event-1.md deleted file mode 100644 index 40b41aea9..000000000 --- a/content/articles/2013-05-02-judge-notes-for-event-1.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Judge Notes for Event 1 -authors: - - Art Beane -date: "2013-05-02T17:24:49+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/05/judge-notes-for-event-1/ ---- - - A lot of you have been working too hard at solving the problem (both beginner and advanced). Some of this is clearly related to trying to offer a very complete solution but some look like attempts to write extra clever or elegant code. In the "real world", there"™s probably not enough time or interest in putting lots of effort into these extras. The minimum it takes to achieve the goal is most often good enough. Here are a couple of examples to illustrate this (with the intent of providing a learning opportunity). -Working with the destination folder address. -A common error here was missing the subdirectory. Most folks got this correct by using some version of _$_.FullName.Replace("˜C:\Application\Log"™,"™\\NASServer\Archives"™)_ or _Join-Path "˜\\NASServer\Archives"™ $_.Directory.Name_, but there were a number who just used the root destination folder name without looking for the subfolder. And some others had solutions that (although I thought were innovative), took too much effort. Among them are: - - -`Join-Path "˜\\NASServer\Archives"™ ($_.Directory.Split("˜\"™)[-1]) -$_.FullName "“Replace [regex]::Escape("˜C:\Application\Log"™,"™\\NASServer\Archives"™) -`Once computing the destination, most solutions checked to see if the folder existed and created it if it was missing. But some just tried to create it anyway (too much effort) and others who did not (too little effort). -I"™m not going to comment on the use of Copy-Object vs. Move-Object other than to say that (related to the destination folder) it looks like some people thought the cmdlets would create the path structure but never tested to see that they don"™t. Don't forget to test your solution to verify that it works: working code is far more important that "pretty" or "elegant" code. -**Using Try-Catch-Finally.** -Try-Catch-Finally is an awesomely potent construct but you really need to understand how it works. Here's why I think it is serious overkill for this problem. Compare these: - - -`If (-not (Test-Path $DestinationFolder)) {New-Item "“ItemType Directory "“Path $DestinationFolder}`Try {Test-Path $DestinationFolder "“ErrorAction Stop} Catch {New-Item "“ItemType Directory "“Path $DestinationFolder} -`Look the same, right? But they have very different results, not to mention different typing efforts. If the destination folder does not exist, then with IF, the folder gets created, but with Try-Catch it will not. This is because Test-Path will return $false, but NO error, so the catch clause will never execute. -Most folks understand that a terminating error has to occur in the Try script block in order for the Catch block to execute. But, instead of using the "“ErrorAction Stop parameter in the cmdlet, some of the solutions set $ErrorActionPreference to Stop and then reset it to Continue in a Finally block. There are two problems with this. First, it forces every command in the Try block to generate terminating errors, when there"™s normally only one that you care about. Second, $ErrorActionPreference might not have been originally set to Continue. Shouldn"™t the previous value be saved and then restored in Finally? -So, going forward, think about how hard you"™re working to get to an answer. Don"™t use a more complex method than you need to in order to solve a problem. Make good use of Get-Help to verify the parameters and outputs of the cmdlets that you use. And test your objects with Format-List and Get-Member to make sure that the properties really are what you think they are. diff --git a/content/articles/2013-05-02-scripting-games-2013-event-1-favorite-and-not-so-favorite-submissions.md b/content/articles/2013-05-02-scripting-games-2013-event-1-favorite-and-not-so-favorite-submissions.md deleted file mode 100644 index 3478178e6..000000000 --- a/content/articles/2013-05-02-scripting-games-2013-event-1-favorite-and-not-so-favorite-submissions.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Scripting Games 2013: Event 1 \"˜Favorite' and \"˜Not So Favorite' Submissions" -authors: - - Boe Prox -date: "2013-05-03T03:07:27+00:00" -aliases: - - /2013/05/scripting-games-2013-event-1-favorite-and-not-so-favorite-submissions/ ---- - -As a follow-up to my [previous blog](http://learn-powershell.net/2013/05/01/scripting-games-2013-thoughts-after-event-1/) post, I plan to pick out a submission or two or three which stood out as my personal favorite and least favorite and tell you why I think this by pointing pieces of code that was either put together nicely or could have been improved in one way or another. Depending on my time, I will do at least 1 Advanced and 1 Beginner submission for both "˜Favorite"™ and "˜Not so Favorite. I'll start out by listing the code and then discussing it bullet point style to highlight my thoughts. So with that, lets begin this journey through the Event 1 submissions by [following this link to my blog!][1] - - [1]: http://learn-powershell.net/2013/05/02/scripting-games-2013-event-1-favorite-and-not-so-favorite-submissions/ diff --git a/content/articles/2013-05-03-beginner-event-tips.md b/content/articles/2013-05-03-beginner-event-tips.md deleted file mode 100644 index 00d2ff63f..000000000 --- a/content/articles/2013-05-03-beginner-event-tips.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Beginner Event Tips -authors: - - Don Jones -date: "2013-05-03T15:57:10+00:00" -aliases: - - /2013/05/beginner-event-tips/ ---- - -Folks, as we dive into Event 2, I want to offer some advice based on the _comments_ I saw for Event 1. - - * Don't overthink the Beginner event. We're not looking for a script or function - a one-liner, if possible. Don't overdeliver. - * Avoid aliases and positional parameters - this is a practice outlined in the Competitor Guide. - * TEST YOUR CODE. You can't modify it. Also, judges can't see any comment you might leave when "voting" on your own entry, so you can't use comments to mitigate an error. TEST. Submitting an entry is like pushing a script into production. - * If there's a straightforward, native way to do something - do it. People seemed to down-vote a lot of entries in Event 1 for using Robocopy. Not that it's wrong... but the general community opinion seems to be, "use native commands when they exist and can solve the problem." - -Remember, these aren't my guidelines - this is what I'm seeing in the comments that I'm reviewing, and wanted to pass them along as a sense of what the community seems to favor and disfavor. diff --git a/content/articles/2013-05-03-ok-im-impressed-scripting-games-week-1.md b/content/articles/2013-05-03-ok-im-impressed-scripting-games-week-1.md deleted file mode 100644 index 93fadff08..000000000 --- a/content/articles/2013-05-03-ok-im-impressed-scripting-games-week-1.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: "OK i'm impressed: Scripting Games Week 1" -authors: - - Glenn Sizemore -date: "2013-05-03T14:44:21+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/ok-im-impressed-scripting-games-week-1/ ---- - -Well guys, and gals another year has passed, and the annual scripting games are upon us again.  After a week of reviewing submissions for their technique and style I must say that I am truly impressed!  As a community the average ability seems to be growing by leaps and bounds.  That"™s not to say we"™re all Samurai just yet, but we"™re getting there! -Before I go off and nit-pick I want to congratulate you all on a small mountain of really well written scripts.  Some of the things that the community was preaching 5 years ago are now just standard.  Stuff like comment your code, format for readability, and Parameters.  At this point I"™m convinced those who still aren't conforming are simply non-conformist and well that"™s a lost cause.  For the rest of us great work and keep it up! -**Where is the Help! -** -What I  -didn't - see enough of in the advanced category is help.  Honestly if you"™re going to write a 200 line script fill out the help!  It"™s not that hard and it is THE difference between a good script and a great solution! It"™s also one of the fundamental differences between hacking and tool building, both are focused around automating a given problem set.  The hacker just gets it to work, the tool builder makes it usable by the masses.  If you haven"™t figured it out yet the real money is in tool building, I"™m just sayin! - -**Trust but Validate. -** -I was pleasantly surprised by the amount of error handling in this first round of submissions, however I was disappointed by the lack of parameter validation.  When done correctly parameter validation can remove most of the potential errors a script can run into, and the best part is you find out that it"™s not going to work before the script does anything!  For example in this week"™s scenario every single script was asked to supply a source and destination path.  The following would have removed all but an access denied error. - - -`Param ( - [Parameter(Mandatory=$true, ValuefrompipelineByPropertyName=$true)] - [ValidateScript({Test-Path $_ -PathType Container})] - [Alias("FullName")] - [string]$Source -, - [Parameter(Mandatory=$true, ValuefrompipelineByPropertyName=$true)] - [ValidateScript({Test-Path $_ -PathType Container})] - [Alias("FullName")] - [string]$Destination -) -`This is the equivalent of filter to the left, and  -I've - talked to endless developers who are a little jealous of our ability to use an arbitrary scriptblock for parameter validation. For more static values the ValidateSet attribute will perform the same function, but with the added benefit of Intelli-sense and tab completion.* Guys use this* I"™m telling you it"™s one of the most powerful features in PowerShell and I just don"™t see it use often enough, but then again[ I"™ve been tilting at this windmill for years now.](http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/15/simplify-your-powershell-script-with-parameter-validation.aspx) - -**Parameter names -** -This one is a little more nitpicky than the average, but honestly there simply isn"™t an excuse for a script with three parameters to all start with the same letter.  Meaning the following is just disrespectful to yourself and your users. - - -`Param( - [String]$ArchiveSource, - [String]$ArchiveDestination, - [String]$ArchiveAge -) -`I mean that"™s a no-brainer right?  I don"™t assume malice here just a lack of focus.  Anyone who stops and thinks about it immediately sees the problem, and solution. So I guess what I"™m asking is that we collectively take a second to think about usability.  For those of you that haven"™t had your coffee yet. The solution is that since three parameters all contain Archive we need to move that bit from the beginning of each parameter name.   In this case since there is no real need to differentiate I would suggest removing it all together. - - -`Param( - [String]$Source, - [String]$Destination, - [String]$Age -) -`Here we"™re focusing on what"™s really important which makes the parameters easier to comprehend, but also lets us get to TAB faster which is a huge part of usability! -**Bring it in -** -In summary all in all I would say we had a fantastic showing for our industry this initial week.  I really like the new site and voting has been very productive which is nice.  As we head into week two I look forward to what"™s to come as we collectively build upon what we"™ve learned this week. - - -~Glenn diff --git a/content/articles/2013-05-03-placing-comment-based-help.md b/content/articles/2013-05-03-placing-comment-based-help.md deleted file mode 100644 index 2c4677d51..000000000 --- a/content/articles/2013-05-03-placing-comment-based-help.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: Placing Comment-Based Help -authors: - - June Blender -date: "2013-05-03T19:03:39+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/05/placing-comment-based-help/ ---- - -What an amazing event. I'm now reading through each of the Advanced entries in a vain attempt to whittle the entries down to a short list. It's an incredibly difficult task, which is testament to your skill and diligence. We are so lucky to have so many competent scripters in the community. -As I read through the comments on each script, I've noticed several that say: -"Help should be nested under the function to work properly." -Au contraire! This is not true and I want to make sure that people who see this comment are not misled. The Windows PowerShell team designed comment-based help to be really flexible. -As I explained in [about_Comment_Based_Help][1], you can put comment-based help for a function in one of three positions: - - * At the beginning of the function body - * At the end of the function body - * On the line before the Function keyword - -So, all of these work. - - -`function Move-OldFiles -{ -<# -.Synopsis - Moves old log files to an archive directory. -#> - Param - ( - [parameter(Mandatory=$true)] - [String] - $InputDirectory - ) -}`function Move-OldFiles -{ - Param - ( - [parameter(Mandatory=$true)] - [String] - $InputDirectory - ) - #Script logic goes here -<# -.Synopsis - Moves old log files to an archive directory. -#> -}`<# -.Synopsis - Moves old log files to an archive directory. -#> -function Move-OldFiles -{ - Param - ( - [parameter(Mandatory=$true)] - [String] - $InputDirectory - ) - #Script logic goes here -} -`If you place the comment-based help on the line before the Function keyword, make sure that there is, at most, one blank line between the end of the comment-based help and the line with the function keyword. To avoid this problem, I always make sure that there are no blank lines between the end of the comment-based help and the Function keyword. -When reading the comments about your solutions, please remember that we are all volunteers. Everyone who takes the time to comment on your solution is trying to help, and should be appreciated, but not every comment is correct. Trust, but verify! - - [1]: http://go.microsoft.com/fwlink/?LinkID=144309 diff --git a/content/articles/2013-05-03-scripting-games-what-should-we-do-with-comments.md b/content/articles/2013-05-03-scripting-games-what-should-we-do-with-comments.md deleted file mode 100644 index dbb67610e..000000000 --- a/content/articles/2013-05-03-scripting-games-what-should-we-do-with-comments.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Scripting Games: What Should We Do With Comments?" -authors: - - Don Jones -date: "2013-05-03T19:02:08+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/scripting-games-what-should-we-do-with-comments/ ---- - -Right now, I've got the Scripting Games Web site built to only make comments visible to a entry's author. Some of the comments have been a little snarky, and I don't want to create an online argument forum. -I'm curious what folks think we should do as a next step. -I could, for example, make comments visible to everyone once voting has ended for an event (I don't want to make comments visible while we're still accepting comments, because it'll run a big risk of creating a discussion, which isn't the intent). -We do have a plan to dump all the entries into static files for long-term reference; I could insert entries' comments at the end of each entry, in a PowerShell comment block. -Or, we could just leave comments visible to the entry's author. That provides a learning experience for the author, although not for the public, and only until we purge the database for the next event. -Thoughts? diff --git a/content/articles/2013-05-06-a-helpful-message-about-helpmessage.md b/content/articles/2013-05-06-a-helpful-message-about-helpmessage.md deleted file mode 100644 index 31be72a06..000000000 --- a/content/articles/2013-05-06-a-helpful-message-about-helpmessage.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: A Helpful Message about HelpMessage -authors: - - June Blender -date: "2013-05-06T23:39:21+00:00" -aliases: - - /2013/05/a-helpful-message-about-helpmessage/ ---- - -The Scripting Games 2013 winners have not yet been announced, but for the 3rd year running, I'm in the lead for the "Learned Most from the Scripting Games" award. I'm making space for the prize on my bookshelf. Seriously, I play with PowerShell all the time and read lots of blogs, but nothing compares to looking at dozens of scripts and commands and seeing how people do things in the real world. -One of the practices I've noticed is use of the [HelpMessage parameter attribute][1] to document a parameter. It's a real thing, but I didn't know that anyone used it any more. -Here's my help message about HelpMessage: -**Don't use it!** Users can't see it. It does no harm, but it has no value. Danger lurks in writing a HelpMessage instead of writing help that users can see. Write help that Get-Help gets, that is, XML help or comment-based help. -Here's what I'm talking about. This code is valid. The language permits it. But it's not useful. And I saw it in several of the advanced solutions. - - -`function Get-PowerShellLog -{ - [CmdletBinding()] - Param - ( - [Parameter(Mandatory=$true, HelpMessage="Your message goes here")] - $InstanceID - ) - Get-Eventlog -LogName "Windows PowerShell" -InstanceId $InstanceID -} -`But Get-Help doesn't get the HelpMessage string. -There are two ways for the user to see this help message. Here's one way. These commands get the value of the HelpMessage property of the parameter. I don't think people run commands like these very often, but I don't get out much. - - -`#Windows PowerShell 3.0 -C:\> ((Get-Command Get-PowerShellLog).ParameterSets.Parameters | - Where-Object Name -eq InstanceId).HelpMessage -Your message goes here -#Windows PowerShell 2.0 -C:\> ((Get-Command Get-PowerShellLog).ParameterSets | - Foreach {$_.Parameters} | - Where-Object {$_.Name -eq InstanceId).HelpMessage -Your message goes here -`Here's the other way. It works only on mandatory (required) parameters. When you omit a mandatory parameter, you get a message like this one: - - -`PS C:\> Get-PowerShellLog -cmdlet Get-PowerShellLog at command pipeline position 1 -Supply values for the following parameters: -(Type !? for Help.) -InstanceID: -`And then you type "!?" to get the HelpMessage value. - - -`InstanceID: !? -Your message goes here -`You've never done that? Me neither! -To get a sense of how often HelpMessage is used, I played Nate Silver with Kim's famous test server. My dear friend, Kim Ditto, is famous for many things -- she's a fabulous person and a renowned Microsoft Certified Trainer -- but, in addition, she set up and maintains a test server on which she's installed almost all of the Windows PowerShell modules from Microsoft. I could not live without Kim's test server. -Here are the results. Out of 2468 commands with 8471 parameters, 8 have the HelpMessage attribute and none are mandatory, so the HelpMessage is _NEVER DISPLAYED_ unless you go hunting for it. - - -`# How many commands? -PS C:\> Invoke-Command -Session $s {(Get-Command).Count} -2468 -# How many parameters? -PS C:\> $a = Invoke-Command -Session $s ` - {(Get-Command).ParameterSets.Parameters.Count} -8471 -# How many parameters have HelpMessage? -PS C:\> Invoke-Command -Session $s ` - {((Get-Command).ParameterSets.Parameters | where HelpMessage).Count} -8 -# How many of the parameters with HelpMessage are mandatory? -PS C:\> Invoke-Command -Session $s ` - {((Get-Command).ParameterSets.Parameters | - where HelpMessage -and isMandatory).Count} -0 -`If you want to be helpful, the correct way to provide help for a parameter in a script or function is this: - - -`<# -.PARAMETER InstanceId - Specifies the instance IDs of events in the - event log. Get-PowerShellLog gets only logs - with the specified ID. -#> -`Or, this: - - -`[Parameter(Mandatory=$true, HelpMessage="Your message goes here")] -# Specifies the instance IDs of events in the -# event log. Get-PowerShellLog gets only logs -# with the specified ID. -$InstanceID -`Hope that's helpful. - - [1]: http://msdn.microsoft.com/en-us/library/windows/desktop/system.management.automation.parameterattribute.helpmessage(v=vs.85).aspx diff --git a/content/articles/2013-05-06-event-2-is-final.md b/content/articles/2013-05-06-event-2-is-final.md deleted file mode 100644 index 284bec48b..000000000 --- a/content/articles/2013-05-06-event-2-is-final.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Event 2 is final! -authors: - - Don Jones -date: "2013-05-07T00:23:43+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/event-2-is-final/ ---- - -Event 2 has closed for submissions and will open for voting later this evening. Good luck! And voters: remember that quality comments will vastly increase your chances of winning a prize! diff --git a/content/articles/2013-05-06-event-2-my-way.md b/content/articles/2013-05-06-event-2-my-way.md deleted file mode 100644 index 23b6c0ef4..000000000 --- a/content/articles/2013-05-06-event-2-my-way.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Event 2: My way…" -authors: - - Bartek Bielawski -date: "2013-05-07T04:26:03+00:00" -aliases: - - /2013/05/event-2-my-way/ ---- - -I haven't received any negative feedback on idea to blog about "_how would I do it_" (what you think about my approach is different topic) so I decided to continue. Again: because I don't want to be influenced by your ideas and make my task as close to your work as possible I post it early, before I see any of cool techniques I haven't thought of and you did, so that I can regret it later. [You can find whole article on my blog](http://becomelotr.wordpress.com/2013/05/07/event-2-my-way/). Enjoy, and please - if you see something silly, let me know. I really **do** appreciate negative feedback! diff --git a/content/articles/2013-05-07-are-you-geting-unfair-comments-in-the-games.md b/content/articles/2013-05-07-are-you-geting-unfair-comments-in-the-games.md deleted file mode 100644 index 3cdc6e5dc..000000000 --- a/content/articles/2013-05-07-are-you-geting-unfair-comments-in-the-games.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Are you getting unfair comments in the Games? -authors: - - Don Jones -date: "2013-05-07T17:33:59+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/are-you-geting-unfair-comments-in-the-games/ ---- - -I continue to be amused by folks' reactions to the Games this year. -There's been some buzz on Twitter this morning from folks who feel some of their comments - and the corresponding low scores - aren't warranted. In a couple of cases I've looked at, they're right - their entries are being downrated for reasons that are actually not best practices; by following the best practices, these entries are getting lower scores. -This reinforces a point I keep trying to make: The Games _**aren't about YOU. They're about US.**_ **** -Let me put it another way: if you're getting comments from folks whose opinions are founded in a misunderstanding or misconception, that's an opportunity to educate. Not to attack that commenter - which is why commenter names aren't shown - but to educate the community in general. The community took the time to give you comments, and although some of them might be misguided, _you_ can take the time to offer a productive counterpoint and perhaps lay some misunderstandings to rest. -That's the point of the Games: to learn. Maybe not for **you** to learn, but maybe for you to help **someone else** learn. Or to put it another way, I haven't received Microsoft's MVP Award for ten years straight because I got a good "score" on something. I got it because I look for teachable moments and try to offer explanations. Being able to teach something shows that you _really_ know it. -Think of your Games entries as a honeypot. If you can attract some folks who don't quite get what you're doing, then through the comments you'll spot broad areas of educational opportunity, or what I call "teachable moments." Seize on those and help bring the community as a whole to a higher level. -Does that mean the educational opportunity has to come at the cost of you getting a lower score? Yup. Will that score in any other way impact your life? Nope. It's not going on your permanent record. Human Resources will never know. It won't affect your salary, or your ability to choose which movie you will see this weekend (Iron Man 3, BTW). Thicken up that skin a little - every vote isn't a personal attack on you. Every "unqualified" comment is not a stain upon your honor. -I really wish I could use some of the cooler interjections from _Spartacus_ here, but none of that stuff is suitable for a professional environment :(. -In short: Cool yer jets. Take the opportunity to educate. Not on Twitter. Man, you guys with the tweets. You don't have a blog, drop me an e-mail and I'll give you authoring permissions right here on PowerShell.org. Help us, as a community, educate each other. -And hey, remember not ALL of your comments are non-constructive. Learn from the ones you can, tune out the rest. Like watching CNN. Ever notice how, on a slow news day, the talk about Atlanta's traffic? Exactly. diff --git a/content/articles/2013-05-07-dons-event-2-notes.md b/content/articles/2013-05-07-dons-event-2-notes.md deleted file mode 100644 index dbf2fcbcf..000000000 --- a/content/articles/2013-05-07-dons-event-2-notes.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: "Don's Event 2 Notes" -authors: - - Don Jones -date: "2013-05-07T23:02:02+00:00" -aliases: - - /2013/05/dons-event-2-notes/ ---- - -I thought I'd mentioned this last time (tap tap, this thing on?), but maybe not: don't format the output of your functions. The minute a function includes Format-\*, you've trapped me into on-screen display, a text file or piece of paper modeled after the on-screen display, or not a lot of other choices. If I want formatting, I'll pipe your function to my own Format-\* command of choice. But if I want CSV, or HTML, or XML, I'd like that option. Thanks. -This is not a favorite technique of mine: - - -`$ServerInfo = "" | Select-Object Name, SerialNumber, OS, Model, CPU, CPUCount, Memory, GBMemory -$ServerInfo.Name = $Server.ToUpper() -$ServerInfo.SerialNumber =(Get-WmiObject -Class Win32_BIOS -ComputerName $Server -Credential $Credential).SerialNumber -`That said, it's not "wrong" so I only knock of like 1/10th of a point. For me, this technique is a bit of a hack, and it doesn't parse well visually. You're relying on Select-Object accepting non-existent property names and turning them into blank properties for you. It's... well, it's weird, and frankly this behavior - while convenient in this instance - causes more harm than good. Ever typo a property name on Select, and get a blank column as a result? Yeah, that. I wish Select didn't work this way, and so as a result I'm not a fan of this technique. -\--- - - -`if ($ServerInfo.CPU -is [array]) { - $ServerInfo.CPU = $ServerInfo.CPU[0] -} -`Nice thinking, muchacho. You don't know if you've got more than one object, so you check. I'll note, however, that this could have been done more concisely when you got the property: - - -`$ServerInfo.CPU = (Get-WmiObject -Class Win32_Processor -ComputerName $Server -Credential $Credential).Name -`Add a **Select -First 1** to the end of that and you'd be guaranteed of only having one. -\--- - - -`$ServerInfo.SerialNumber =(Get-WmiObject -Class Win32_BIOS -ComputerName $Server -Credential $Credential).SerialNumber -$ServerInfo.OS = (Get-WmiObject -Class Win32_OperatingSystem -ComputerName $Server -Credential $Credential).Caption -$ServerInfo.Model = (Get-WmiObject -Class Win32_ComputerSystem -ComputerName $Server -Credential $Credential).Model -$ServerInfo.CPU = (Get-WmiObject -Class Win32_Processor -ComputerName $Server -Credential $Credential).Name -$ServerInfo.CPUCount = (Get-WmiObject -Class Win32_Processor -ComputerName $Server -Credential $Credential).count -$ServerInfo.Memory = (Get-WmiObject -Class Win32_ComputerSystem -ComputerName $Server -Credential $Credential).TotalPhysicalMemory -`Saw a lotta this. I'm kinda picking examples from one script, but this happened a lot. You're executing 6 queries. You needed 3. Double the effort, double the time. Bad call. Query it once, save it in a variable, extract what you need from that. -\--- - - -`param( - [Parameter( - Position=0, - Mandatory=$true, - ValueFromPipeline=$true, - ValueFromPipelineByPropertyName=$true - )] - [string[]]$computers -) -`This hurts a little. Look at every native PowerShell command that accepts computer names, and it does so on a -ComputerName parameter. So why pick -computers for your function and be all nonstandard? Stay consistent. -\--- - - -`$s = New-Object System.Object -$os = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $computer -$s | Add-Member -Type NoteProperty -Name "Server Name" -Value $os.CSName -$s | Add-Member -Type NoteProperty -Name "OS Version" -Value $os.Caption -$cs = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $computer -$mem = [string]([Math]::Round(($cs.TotalPhysicalMemory / 1MB),2)) + " MB" -$s | Add-Member -Type NoteProperty -Name "PhysicalMem" -Value $mem -$s | Add-Member -Type NoteProperty -Name "# CPUs" -Value $cs.NumberOfProcessors -$cpu = Get-WmiObject -Class Win32_Processor -ComputerName $computer -`Ahh, that's better. One query per class, then extract what you want from a variable. You can be a bit more concise using a hashtable, but I'm jiggy with this technique. -I said "jiggy." -\--- -I want to point out that Dr. Scripto was optional about the "number of cores in each socket" thing. He said, "if you can do it." You can't. Not readily; XP doesn't expose that information (having existed before the advent of cores, um, time to upgrade okaythanksbuhbye) so you couldn't get it consistently for all of the operating systems you were asked for. Sometimes, the test is about seeing when you know to quit, not seeing if you can piledrive your way into a half-answer. -\--- -You know you totally get downvoted if you don't include comment-based help with functions, right? Advanced track only. Just saying.\--- - - -`"Server name: " + $Info.Caption -"OS: " + $Info2.Caption + $Info2.CSDVersion -"Processor sockets: " + $Info.NumberOfProcessors -"Processor cores: " + $Info.NumberOfLogicalProcessors -"Physical memory: " + [Math]::Round(($Info.TotalPhysicalMemory/1GB),2) + "GB" -`Yeah. Outputting formatted text instead of objects. I know. I cried for the dead puppies, and then drank. I drank _vodka._ I hate vodka, but the puppies. There is seriously a better way to output - outputting text prevents PowerShell from doing ANYTHING USEFUL with your output. [See how this guy did it][1]? Do that. I'm not a huge ordered hashtable fan, but that's just me. I don't hate them as much as vodka. Or text output. -\--- -[This one is trending well][2]. I get it. It's beautiful. I think I wrote a book about this. My ONLY SINGLE NITPICK is that it's maybe a wee bit overwrought. I think it's because of the whole try CIM, then try DCOM, thing. He probably had to do it this way. I wish the new CIM cmdlets didn't require an explicit session to do DCOM. I think that's a big fail, because it forces you to write functions like this. Meh. I should write a proxy function for this. Anyway. -\--- - - -`Write-Verbose -Message 'Creating runspace pool' -$rp = [System.Management.Automation.Runspaces.RunspaceFactory]::CreateRunspacePool(1, $ThrottleLimit, $iss, $Host) -$rp.Open() -`I have no idea what to do with this. [Here's the whole thing][3]. This person is likely a LOT smarter than me. Certainly WAY more patient. I'm not sure Dr. Scripto anticipated a 317-line solution. I think he's rolled his own multithreading here. Just... wow. It's definitely overkill, by an order of magnitude, but props, man. -Someone can explain it to me sometime after the vodka wears off, yeah? -\--- -People are [hating on this one][4]. They're wrong. It's a good entry. Let me tell you something, stop giving a score of "2" because someone did something _extra_ like add logging. If it works, they went above and beyond. Do you not reward people for going above and beyond in your organization? No? Well, you should. - - [1]: http://scriptinggames.org/entrylist.php?entryid=519 - [2]: http://scriptinggames.org/entrylist.php?entryid=552 - [3]: http://scriptinggames.org/entrylist.php?entryid=482 - [4]: http://scriptinggames.org/entrylist.php?entryid=513 diff --git a/content/articles/2013-05-07-phillyposh-05022013-meeting-summary-and-presentation-materials.md b/content/articles/2013-05-07-phillyposh-05022013-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 41dd9dc52..000000000 --- a/content/articles/2013-05-07-phillyposh-05022013-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: PhillyPoSH 05/02/2013 meeting summary and presentation materials -authors: - - John Mello -date: "2013-05-08T02:56:14+00:00" -aliases: - - /2013/05/phillyposh-05022013-meeting-summary-and-presentation-materials/ ---- - -- - [Jeff Wouters](http://jeffwouters.nl/) gave an excellent [presentation ](https://powershell.org/wp-content/uploads/2013/05/PhillyPosh_2013-05-02_Presentation_JeffWouters.zip)via Lync on: - - - Avoiding the pipeline - - - - - Improving your learning curve - - - - - Improving your teaching curve - - - - - - - - - [John Mello](http://technet.microsoft.com/en-us/library/hh529924%28v=exchg.141%29.aspx#BKMK_MultiValueCustom) gave a [presentation and demo of script ](https://powershell.org/wp-content/uploads/2013/05/PhillyPosh_2013-05-02_ScriptClub.zip)that uses [Exchange multi-valued custom attributes](http://technet.microsoft.com/en-us/library/hh529924%28v=exchg.141%29.aspx#BKMK_MultiValueCustom) to store information on when to remove users from a security group after a specified amount of days. - - - - - Standalone meeting material links - - - [PhillyPosh_2013-05-02_ScriptClub](https://powershell.org/wp-content/uploads/2013/05/PhillyPosh_2013-05-02_ScriptClub.zip) - - - - - [PhillyPosh_2013-05-02_Presentation_JeffWouters](https://powershell.org/wp-content/uploads/2013/05/PhillyPosh_2013-05-02_Presentation_JeffWouters.zip) diff --git a/content/articles/2013-05-07-powershell-summit-videos.md b/content/articles/2013-05-07-powershell-summit-videos.md deleted file mode 100644 index 44fc10480..000000000 --- a/content/articles/2013-05-07-powershell-summit-videos.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: PowerShell Summit Videos -authors: - - Don Jones -date: "2013-05-07T15:52:59+00:00" -categories: - - PowerShell Summit -aliases: - - /2013/05/powershell-summit-videos/ ---- - -Aaron Hoover, one of our Summit attendees, was kind enough to record via webcam the sessions he attended - and he's posted about 13 hours of video on YouTube for your viewing pleasure. -What I'd like to know from you, if you don't mind dropping a comment below, is what you think of these. If we offered this KIND of recording in the future, would it be helpful? This is something we can do easily and is affordable from a technical perspective; there's obviously a production quality compromise. We can do more... but it costs more, and someone's going to have to pay for it. So... where do you sit on this kind of recording? - - * http://youtu.be/0NeEU3FHp8I Device Management With PowerShell - Ricardo Mendes - PowerShell Summit 2013 - * http://youtu.be/XsnE_OQGvdo Creating a Complex and Reusable HTML Reporting Structure - Alan Renouf - PowerShell Summit 2013 - * http://youtu.be/iV6cYsQDL0Y How Secure Can You Be - Jeff Hicks PowerShell Summit 2013 - * http://youtu.be/qSE06GkQWV4 Standards Based Hardware Management - Steve Lee - PowerShell Summit 2013 - * http://youtu.be/7C53pawPw3Y Workshop - Automating for DevOps - Kenneth Hansen and Hemant Mahawar - PowerShell Summit 2013 - * http://youtu.be/KFA-zSojxqw CIM Sessions - Richard Siddaway - PowerShell Summit 2013 - * http://youtu.be/EloMKpvfES8 PowerShell Web Access - Richard Siddaway - PowerShell Summit 2013 - * http://youtu.be/3deY6e6Npzo Sapien PowerShell Products - David Corrales - PowerShell Summit 2013 - * http://youtu.be/xZtapxf1ytI What I learned Judging 5000 Scripts - Ed Wilson - PowerShell Summit 2013 - * http://youtu.be/Ahvs1rGPk1s PowerShell Events - Richard Siddaway - PowerShell Summit 2013 - * http://youtu.be/U_niW85TtJE Write Modules, Not Scripts - Ed Wilson - PowerShell Summit 2013 - * http://youtu.be/Y8IbadEHoPg PoshMon - PowerShell Does Performance Counters - Ed Wilson - PowerShell Summit 2013 - * http://youtu.be/1XuB71tLNvg Configuring Your PowerShell Workflow Environment - Aleksandar Nikolic - PowerShell Summit 2013 - * http://youtu.be/msHGx-mxWJA Practical PowerShell Integration from Bare Metal to the Cloud - Alan Renouf - PowerShell Summit 2013 - * http://youtu.be/eAZ-agh182g Source Control for IT Pros - Andy Schneider - PowerShell Summit 2013 - * http://youtu.be/pL_Ry5LzX3w Creating HTML Reports with Style - Jeff Hicks - PowerShell Summit 2013 - * http://youtu.be/-ERyfmOmyoI Remoting Configuration Deep Dive - Don Jones - PowerShell Summit 2013 - * http://youtu.be/jMVBN5V0G4Y Advanced Network Scripting with PowerShell - Lee Holmes - PowerShell Summit 2013 - * http://youtu.be/GXkLtEOM-DM Build Your Demo Environment with Windows PowerShell - Aleksandar Nikolic - PowerShell Summit 2013 diff --git a/content/articles/2013-05-07-scripting-games-event-1-winners.md b/content/articles/2013-05-07-scripting-games-event-1-winners.md deleted file mode 100644 index 4f0882526..000000000 --- a/content/articles/2013-05-07-scripting-games-event-1-winners.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Scripting Games Event 1 Winners -authors: - - Don Jones -date: "2013-05-07T16:11:57+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/scripting-games-event-1-winners/ ---- - -We're pleased to announce the winners for Event 1 of The Scripting Games 2013! -Winners: You can log into [The Scripting Games Web site][1] and go to your Profile page to see your prize. You will be given a prize redemption code and either a URL where you can redeem it, or an e-mail address of the prize provider (they will need the redemption code). All prizes must be claimed by the end of July 2013. I will list winners by username; if you used your e-mail address as your username, then a portion of that will be truncated for your privacy. Anyone can log in and check their Profile page to see if they've won a prize. - - * Event 1 Beginner First Place (free ebook from Manning): taygibb - * Event 1 Beginner Second Place (free video training from Interface Technical Training): alvaroBT - * Event 1 Beginner Third Place (free year of Phoneominal service from Start-Automating): Novice - - * Event 1 Advanced First Place (free ebook from Manning): mikefrobbins - * Event 1 Advanced Second Place (free video training from Interface Technical Training): Toni - * Event 1 Advanced Third Place (free year of Phoneominal service from Start-Automating): lido - - * Event 1 Beginner Top CrowdScore (free ebook from Manning): taygibb - * Event 1 Advanced Top CrowdScore (free ebook from Manning): mikefrobbins - - * CrowdScore Voter (free month of video training from Interface Technical Training): kirkaldrin - * CrowdScore Voter (free month of video training from Interface Technical Training): KmTatar - * CrowdScore Voter (free ebook from Manning): Klaus_Schulte - * CrowdScore Voter (free ebook from Manning): Daniel - * CrowdScore Voter ($50 Gift Certificate from SAPIEN Technologies): theotherkidd@__.com - -Congratulations to all of our winners! Note that our top three prizes in each category were awarded by our Mighty Panel of Celebrity Judges. Each judge nominated a first, second, and third place winner from the entries that our expert commentators identified as "best." Those nominations were compiled, and in the event of a tie the earliest entry was deemed winner (that didn't happen, actually). I'm mildly surprised that our community voting identified the same top scripters in each track - the 1st, 2nd, and 3rd-place award process didn't factor in the CrowdScore at all. - - - - [1]: http://scriptinggames.org/ diff --git a/content/articles/2013-05-07-tips-on-implementing-pipeline-support.md b/content/articles/2013-05-07-tips-on-implementing-pipeline-support.md deleted file mode 100644 index d22f93cbb..000000000 --- a/content/articles/2013-05-07-tips-on-implementing-pipeline-support.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Tips on Implementing Pipeline Support -authors: - - Boe Prox -date: "2013-05-08T03:16:27+00:00" -aliases: - - /2013/05/tips-on-implementing-pipeline-support/ ---- - -While reviewing Event 1 (and now Event 2) I've seen some scripts that don't quite have the correct pipeline support and others that do a great job with it. Whether it is an unneeded Begin or End statement, or throwing everything into a Process block and not quite getting the expected output or even having a Process block when ValueFromPipeline/ValueFromPipelineByPropertyName is not even enabled. Before I start working through my notes for Event 2, I wanted to get this post out of the way. I hope that what I put together here will help those out who are working to implement pipeline support in their code as well as providing a method of troubleshooting the parameter binding using Trace-Command. The blog post is available [here to view][1]. - - [1]: http://learn-powershell.net/2013/05/07/tips-on-implementing-pipeline-support/ diff --git a/content/articles/2013-05-08-event-2-smart-aleck.md b/content/articles/2013-05-08-event-2-smart-aleck.md deleted file mode 100644 index a9685663a..000000000 --- a/content/articles/2013-05-08-event-2-smart-aleck.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Event 2 Smart-Aleck -authors: - - Don Jones -date: "2013-05-08T21:08:11+00:00" -aliases: - - /2013/05/event-2-smart-aleck/ ---- - -Very funny.[ - ](https://powershell.org/wp-content/uploads/2013/05/FirefoxScreenSnapz001.jpg) -[![FirefoxScreenSnapz001](https://powershell.org/wp-content/uploads/2013/05/FirefoxScreenSnapz001.jpg)](https://powershell.org/wp-content/uploads/2013/05/FirefoxScreenSnapz001.jpg) diff --git a/content/articles/2013-05-08-more-judges-notes-on-event-2.md b/content/articles/2013-05-08-more-judges-notes-on-event-2.md deleted file mode 100644 index ae1d47bea..000000000 --- a/content/articles/2013-05-08-more-judges-notes-on-event-2.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "More Judges' Notes on Event 2" -authors: - - Don Jones -date: "2013-05-08T19:42:02+00:00" -aliases: - - /2013/05/more-judges-notes-on-event-2/ ---- - -Tobias Weltner: -Jan Egil Ring: -Voting for Event 2 is going strong, and you've got several more days in which to vote and (most importantly) add comments. Hopefully, you're also considering the judges' notes and adjusting your approach for each event. diff --git a/content/articles/2013-05-08-notes-on-beginner-event-2.md b/content/articles/2013-05-08-notes-on-beginner-event-2.md deleted file mode 100644 index 62b1df1cc..000000000 --- a/content/articles/2013-05-08-notes-on-beginner-event-2.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Notes on Beginner Event 2 -authors: - - Art Beane -date: "2013-05-08T15:29:51+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/05/notes-on-beginner-event-2/ ---- - - First of all, congratulations! It looks to me like a lot of learning is going on; the 2nd event entries look really good to me. I especially liked the way a number of you built up a one-liner by starting with a_ Get-WmiObject Win32_ComputerSystem -ComputerName (Get-Content file.txt)_ and piping it into _Select-Object_ to generate the data. However, there were a couple of areas within the Select block that make me think that some more discussion of what $_ means in a pipeline would be helpful. -Within the Select block, it is necessary to make a call to _Get-WmiObject Win32_OperatingSystem_ to get come additional information. It looks like everybody got the format correct: _@{Name='OS';Expression={Get-WmiObject}}_ where folks got into trouble was in specifying the ComputerName property. Some didn't even include it, meaning that the OS value would be taken from the local computer and not the remote one. But, more often than not, the code contained a plain $_ : _@{Name='OS';Expression={(Get-WmiObject Win32_OperatingSystem -ComputerName $_).Caption}}_. So, what's wrong with this? The problem is the value of $_ at this point in the pipeline. -Let's try an experiment to show what I mean. Try this: - - -`Get-WmiObject Win32_ComputerSystem | Select-Object @{Name='OS';Expression={Get-WmiObject Win32_OperatingSystem -ComputerName $_}} -`What does it return? Only the label "OS" with no data and no error message. Why? To find out, lets change the code a little and see. - - -`Get-WmiObject Win32_ComputerSystem | foreach {Get-WmiObject Win32_OperatingSystem -ComputerName $_} -`This time, we do get an error message: - - -`Get-WmiObject : Invalid parameter At line:1 char:47 + Get-WmiObject Win32_ComputerSystem | foreach {Get-WmiObject Win32_OperatingSyste ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Get-WmiObject], ManagementException + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand -` "Invalid Parameter" means that $_ isn't a computer name. What is it? It's actually the entire Win32_ComputerSystem object. What you need to do is to select one of the object properties that contains the system's name ($_.__SERVER, $_.Name, or $_.PSComputerName). -Hopefully, this wasn't too long or complex a description. The point is be careful in your pipelines that you know exactly what $_ means at each step. - -> -> diff --git a/content/articles/2013-05-08-scripting-games-2013-event-2-favorite-and-not-so-favorite.md b/content/articles/2013-05-08-scripting-games-2013-event-2-favorite-and-not-so-favorite.md deleted file mode 100644 index 121ba7420..000000000 --- a/content/articles/2013-05-08-scripting-games-2013-event-2-favorite-and-not-so-favorite.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Scripting Games 2013: Event 2 \"˜Favorite\"™ and \"˜Not So Favorite\"™" -authors: - - Boe Prox -date: "2013-05-09T03:27:44+00:00" -aliases: - - /2013/05/scripting-games-2013-event-2-favorite-and-not-so-favorite/ ---- - -Event 2 is in the books and with that, it is time to take a look at all of the scripts submitted and make the difficult decisions as to which ones I liked and which ones I didn't quite like.  Just because a script landed on my "˜Not so Favorite"™ list doesn't mean it was terrible. It was just that I felt that there were some things here and there that could have been looked at a little differently. In fact, the amount of submissions that were great really made my decisions much for difficult. Everyone has really shown just how much knowledge is out there and how there are many different approaches to a single problem! -Check out my picks [here][1]. - - [1]: http://learn-powershell.net/2013/05/08/scripting-games-2013-event-2-favorite-and-not-so-favorite/ diff --git a/content/articles/2013-05-09-as-event-3-gets-underway-here-are-some-event-2-stats.md b/content/articles/2013-05-09-as-event-3-gets-underway-here-are-some-event-2-stats.md deleted file mode 100644 index 69486275b..000000000 --- a/content/articles/2013-05-09-as-event-3-gets-underway-here-are-some-event-2-stats.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: As Event 3 gets underway, here are some Event 2 stats… -authors: - - Don Jones -date: "2013-05-09T23:50:57+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/as-event-3-gets-underway-here-are-some-event-2-stats/ ---- - -Event 3 will be open for entries in about ten minutes, but I thought I'd share some Event 2 information. Keep in mind that Event 2 is open for voting until the 14th, GMT. -Our Beginner Track had 120 entries this time, while the Advanced had 124. That contrasts with 165 and 159 from Event 1 - a perfectly normal falloff that's occurred during every edition of past Games. Folks get busy, maybe get discouraged, but we're keeping right on the trendline. -Voting is down... that happens, too, as the thrill of event 1 falls off. We had 3,966 Beginner votes and 2,775 Advanced votes in Event 1; so far we've gotten 1,446 Beginner and 1,131 Advanced in Event 2. Of course, we still have almost a week of voting left to go in Event 2, and in Event 1 we took a lot of votes up to the last minute. -The good news is that Event 2's votes have, so far, included a much higher percentage of comments. Event 1 Beginner has about 55% comments, while Advanced had 58%. In Event 2, Beginner is tracking to 63%, while Advanced is at 59%. Good job, guys - those comments are a big help. As you know, we've also put up some general guidelines to help keep everyone on the same page with what the score levels mean, so hopefully that's helping, too. -Something's sure helping. The average score in Event 1 Beginner was 2.5585, and Advanced 2.3870. Event 2 is up a notch, at 2.6957 and 2.6631. That's a 5% jump in Beginner scores and over 11% jump in Advanced scores. I know, people are tough on the scoring. And in some cases, I'm seeing comments that indicate the comment author had some misunderstandings. That's okay - it's an opportunity for us all to learn together, especially after the Games complete and we can start diving into this mess of data. -I hope you're already to start on Event 3! Our fastest entry so far is just over 51 minutes, and I might be saving some special prizes for the overall fastest entry (don't worry - I'm going to look at it to make sure it's decent). -May the Games be Ever in Your Fav... ugh, sorry. Don't know where that came from. Good luck! diff --git a/content/articles/2013-05-09-event-2-my-notes.md b/content/articles/2013-05-09-event-2-my-notes.md deleted file mode 100644 index 811f62d5f..000000000 --- a/content/articles/2013-05-09-event-2-my-notes.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Event 2: My notes…" -authors: - - Bartek Bielawski -date: "2013-05-09T21:50:28+00:00" -aliases: - - /2013/05/event-2-my-notes/ ---- - -Today I finally had some time to look at all entries in both categories. What I liked, and what I did not like about them? You can find answers, as previously, either in [Polish](http://powershellpl.net/2013/05/09/scripting-games-moje-notatki-2/), or in [English](http://becomelotr.wordpress.com/2013/05/09/event-2-my-notes/). I focused mainly on things I did not like, but I would anyway say that scripts are really good (overall) this year. Still: few poppies died. If you are responsible for it - remember: at the end of the day, it is you who is tossing away strength that PowerShell offers: Object Oriented Pipeline. 1* note is nothing in comparison with report, that will exists only as long as your **host**, very same that you want to **write** on so much... 😉 diff --git a/content/articles/2013-05-09-meet-the-scripting-games-judges-jan-egil-ring.md b/content/articles/2013-05-09-meet-the-scripting-games-judges-jan-egil-ring.md deleted file mode 100644 index d5d3eed22..000000000 --- a/content/articles/2013-05-09-meet-the-scripting-games-judges-jan-egil-ring.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Meet the Scripting Games Judges: Jan Egil Ring" -authors: - - Don Jones -date: "2013-05-09T13:37:33+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/meet-the-scripting-games-judges-jan-egil-ring/ ---- - -[Jan Egil Ring][1] is a multiple-year recipient of the Microsoft Most Valuable Professional Award for his contributions in the Windows PowerShell technical community. -He has a strong passion for Windows PowerShell, and regularly writes articles on his [blog][2]. He occasionally also writes articles for others, such as the [PowerShell Magazine.][3] -As a judge in the Scripting Games, he will be writing articles on his blog reviewing both good and bad observations in the reviewed scripts. Clean formatting and avoidance of using aliases in scripts is among the things he will be paying attention to. - - [1]: http://twitter.com/janegilring - [2]: http://blog.powershell.no - [3]: http://www.powershellmagazine.com diff --git a/content/articles/2013-05-10-changes-in-scripting-games-displays.md b/content/articles/2013-05-10-changes-in-scripting-games-displays.md deleted file mode 100644 index be4271222..000000000 --- a/content/articles/2013-05-10-changes-in-scripting-games-displays.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Changes in Scripting Games Displays -authors: - - Don Jones -date: "2013-05-10T23:52:49+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/changes-in-scripting-games-displays/ ---- - -I want to point out some changes that are being made to the Games: -Effective immediately, entry author names and current scores will not be shown for events that are still open for new votes. This is intended to help ensure everyone submitting a score isn't influenced by other people. I've seen a bit of ganging-up that I'd rather not see. -Archived events - those completely closed and for which prizes have been awarded - will display full information, including user names of comment authors. -The new event viewer, which is currently under development, will display comment author names. These will be visible to an entry's author immediately, and to the public once the event is no longer open for voting. -Entry authors: This means you won't be able to see your score while it's still open for voting, unless you use the new beta viewer (which I'll be wrapping up this weekend). diff --git a/content/articles/2013-05-10-scripting-games-beta-entry-viewer.md b/content/articles/2013-05-10-scripting-games-beta-entry-viewer.md deleted file mode 100644 index b63beb30f..000000000 --- a/content/articles/2013-05-10-scripting-games-beta-entry-viewer.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Scripting Games beta entry viewer -authors: - - Don Jones -date: "2013-05-10T19:43:04+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/scripting-games-beta-entry-viewer/ ---- - -If you'd like a quick peek at something, log into the [Scripting Games Web site][1], and go look at the entries in Event 1. Your URL should look like this: -**http://scriptinggames.org/entrylist.php?eventid=11** -Change it to this: -**http://scriptinggames.org/entrylist_.php?eventid=11** -This is the new viewer I'm building. It isn't rigged up to accept votes or comments, yet, but I'm working on that. It's being developed for Firefox; I'll test the other major browsers once it's a bit more complete. This is under development, so it may be offline or unreliable. Don't _tell_ me about it - I'm _already working on it_ . -You can probably use this on Event 2 as well. The voting and commenting should be working. Note that you must vote before you can comment, and right now it'll only accept one comment per person. That will probably remain the case for the current iteration of the Games based on some back-end dependencies. However, you CAN tie a comment to a particular line number or range of lines, and when viewing the comment it'll highlight those lines. It's pretty neat, I think. -Oh, and I know the coloring on block comments is wonky. I need to dive into the color-er's regexes and see if I can tweak that. Any regex wizards who want to volunteer to help with that, drop me a line. Right now the PowerShell syntax in the color-er is a little primitive. Actually, there are probably several regexes we could add to this to spruce up the listings. -And yes, I know the comments now show the author's user name. That's been a big back-and-forth. I'm not a huge fan of anonymous commenting, and right now it's just your username anyway. Hopefully nobody said anything truly offensive simply because they thought they were anonymous :). -Back to work. - - [1]: http://scriptinggames.org/ diff --git a/content/articles/2013-05-10-scripting-games-week-2-formatting-edition.md b/content/articles/2013-05-10-scripting-games-week-2-formatting-edition.md deleted file mode 100644 index 35cb8de4e..000000000 --- a/content/articles/2013-05-10-scripting-games-week-2-formatting-edition.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: "Scripting Games Week 2: Formatting edition" -authors: - - Glenn Sizemore -date: "2013-05-10T12:40:16+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/scripting-games-week-2-formatting-edition/ ---- - -This time of the year always feels like someone is holding down the fast forward button.  I blinked and here we are Friday morning another week of scripts in the rear view.  I spent most of my week in the beginner class this week, and was greeted by a combination of beginners and scripters who weren"™t quite ready to step up to advanced.  More of the latter if I"™m to be honest.  This was a pleasant surprise as it"™s another sign of the continuing growth of our community.  Now on to the scripts I knew when I signed up to do this, that at least one of these weeks I"™d talk about formatting.  It"™s one of those best practices that you don"™t appreciate until you"™re asked to review someone else"™s code. -**Don"™t Crunch the Code, and for the love of all things, Hit Enter!** -I did not deduct any points for readability, but you didn"™t make my good list either.  Personally I find it disrespectful to share an ungodly one-liner, but it"™s downright wrong if that single line has semicolons!  We"™re not printing these scripts the crunch gets us nothing. I"™m not going to call out the litany of scripts that were manually formatting the data directly which is even worse, but consider the following. - - -`Get-Content C:\IpList.txt | Foreach-Object { $Processor = Get-WmiObject -ComputerName $_ -NameSpace "Root\CIMV2" -Class "Win32_Processor"; $OpSystem = Get-WmiObject -ComputerName $_ -Namespace "Root\CIMV2" -Class "Win32_OperatingSystem"; New-Object -TypeName PSObject -Property @{ Name = $Processor.SystemName; Cores = $Processor.NumberOfCores; OS = $OpSystem.Caption; Version = $OpSystem.Version; Memory = $OpSystem.TotalVisibleMemorySize } } -`This is an almost perfect solution and it"™s utilizing my next tip for this week already, but the formatting made it unnecessarily hard to read. Let just clean this up a bit by inserting a proper CR in place of all those semi-colons. - - -`Get-Content C:\IpList.txt | Foreach-Object { - $Processor = Get-WmiObject -ComputerName $_ -Class "Win32_Processor" - $OpSystem = Get-WmiObject -ComputerName $_ -Class "Win32_OperatingSystem" - New-Object -TypeName PSObject -Property @{ - "Name" = $Processor.SystemName - "Cores" = $Processor.NumberOfCores - "OS" = $OpSystem.Caption - "Version" = $OpSystem.Version - "Memory" = $OpSystem.TotalVisibleMemorySize - } -} -`Does anyone honestly not think the latter is better? The whitespace cost nothing at execution, and makes it an order of magnitude easier for a human being to read, process, and comprehend! I don"™t care what you do in your own scripts but when another human being is going to be asked to read it take a moment and format it. By the way for those in audience in love with the all-powerful one-liner both those examples are one-liners. -**That"™s Sooooo 2006!** -Seriously, it"™s okay to use the latest features of the language! Heck how about we just agree to use the features from the last version! What am I talking about? object creation! Again I didn"™t take any points off for this, and you may have made my good list, but I didn"™t like it. Select-Object and Add-Member NoteProperty were how we built custom object in 2006 with PowerShell v1. PowerShell V2 added an extremely powerful "“Property parameter to New-Object that completely removed the need for Add-Member, and PowerShell V3 introduced the [PSCustomObject] type accelerator that removed them all! Consider the following look back at the past six years of PowerShell Object Creation. - - -`# 2006 -Get-Content .\IpList.txt | Foreach-Object { - $Processor = Get-WmiObject -ComputerName $_ -Class "Win32_Processor" - $OpSystem = Get-WmiObject -ComputerName $_ -Class "Win32_OperatingSystem" - New-Object -TypeName PSObject | - Add-Member -MemberType Noteproperty -Name "Name" -value $Processor.SystemName -PassThru | - Add-Member -MemberType Noteproperty -Name "Cores" -value $Processor.NumberOfCores -PassThru | - Add-Member -MemberType Noteproperty -Name "OS" -value $OpSystem.Caption -PassThru | - Add-Member -MemberType Noteproperty -Name "Version" -value $OpSystem.Version -PassThru | - Add-Member -MemberType Noteproperty -Name "Memory" -value $OpSystem.TotalVisibleMemorySize -PassThru -} -# 2007 This worked in 2006, but it took a little while to catch on. -Get-Content .\IpList.txt | Foreach-Object { - $OpSystem = Get-WmiObject -ComputerName $_ -Class "Win32_OperatingSystem" - Get-WmiObject -ComputerName $_ -Class "Win32_Processor"| - Select-Object -Property SystemName, NumberOfCores, - @{'Name'="OS";"Expression"={$OpSystem.Caption}}, - @{'Name'="Version";"Expression"={$OpSystem.Version}}, - @{'Name'="Memory";"Expression"={$OpSystem.TotalVisibleMemorySize}} -} -# 2009 -Get-Content .\IpList.txt | Foreach-Object { - $Processor = Get-WmiObject -ComputerName $_ -Class "Win32_Processor" - $OpSystem = Get-WmiObject -ComputerName $_ -Class "Win32_OperatingSystem" - New-Object -TypeName PSObject -Property @{ - "Name" = $Processor.SystemName - "Cores" = $Processor.NumberOfCores - "OS" = $OpSystem.Caption - "Version"= $OpSystem.Version - "Memory" = $OpSystem.TotalVisibleMemorySize - } -} -# 2012 -Get-Content .\IpList.txt | Foreach-Object { - $Processor = Get-WmiObject -ComputerName $_ -Class "Win32_Processor" - $OpSystem = Get-WmiObject -ComputerName $_ -Class "Win32_OperatingSystem" - [PSCustomObject]@{ - "Name" = $Processor.SystemName - "Cores" = $Processor.NumberOfCores - "OS" = $OpSystem.Caption - "Version"= $OpSystem.Version - "Memory" = $OpSystem.TotalVisibleMemorySize - } -} -`They are all more or less the same. When properly formatted they are all equally readable. Most of them use a hash table of some sort. Therefor there are some language hurdles that need to be cleared, so why bother, why does it matter?... simple performance, with every release the PowerShell team have refined Object creation and the new way is always just a little bit faster. I used measure-command to measure the execution times for the above examples and well as you can see while minute every subsequent technique is slightly faster. -New-Object/Add-Member = 1128 Milliseconds -Select-Object                    = 1114 Milliseconds -New-Object "“property      = 1107 Milliseconds -PSCustomObject             = 1100 Milliseconds -Again not a huge deal but given a large enough dataset every tick counts. There were a litany of other things that I saw this week that made my list. The good news is this is all nitpicky stuff which is awesome!   Keep it up, and for the rest of you voters out there lets ease up with the ones and twos these are awesome scripts.  They may not use the technique you'd prefer but for the most part they're getting the job done. -~Glenn diff --git a/content/articles/2013-05-10-some-notes-on-event-2-advanced.md b/content/articles/2013-05-10-some-notes-on-event-2-advanced.md deleted file mode 100644 index 0d355d63d..000000000 --- a/content/articles/2013-05-10-some-notes-on-event-2-advanced.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Some notes on Event 2 Advanced -authors: - - Art Beane -date: "2013-05-10T16:17:32+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/05/some-notes-on-event-2-advanced/ ---- - -I hate to seem negative, but I've noticed a few things about a number of the advanced entries that seem like folks didn't read the instructions, or just weren't careful about details. -There were a surprising number of entries that had [string]$ComputerName instead of [string[]]$ComputerName in the params section and then went on to treat the parameter as if it were an array. - - * Somewhat related to the array issue, the problem statement indicated that there could be several files that had computer identification for piping into the solution. Several scripts went beyond the minimum by accepting a filename property to process those files directly. I don't think that extension is out-of-bounds, but  scripts that accepted only filenames and excluded ComputerName input didn't get my vote. - * The instructions asked for a "full help display", but many of the entries had fairly limited documentation. One thing I especially missed was a .PARAMETER description. - * My last negative comment is about parameter names. Although there's nothing in PowerShell to prevent it, best practices in parameter names should be followed. The parameter ought to be $ComputerName, not $Name, $Server, $Computer, etc. I know it's easier with verbs and nouns because of the Get-Verb and Get-Noun cmdlets, but please pay attention to how you name your parameters. - -On the whole, though I really liked the effort everyone put into their scripts. Those that exactly met the requirements were short, sweet, and to the point. There were several extensions that I also liked. - - * Working with optional credentials. It was reasonable to assume that the script would be run using appropriate credentials, some of the scripts accepted alternate credentials for making the CIM or WMI queries. I consider it a best practice to log in and execute tasks at low permissions levels (standard user) and to use elevated credentials only on the specific commands that need them. Kudos also to those of you who accepted either a credentials object or a user name and found the credentials. - * Using parallel execution to speed up the process. PowerShell provides runspaces, workspaces, and jobs to allow multiple commands to execute concurrently. Nothing in the event hinted at using parallelism, so I put these on my "clever" list. - * Using PowerShell 3's CIM cmdlets. Using the new features of the latest version of PowerShell is quite good, especially when making use of the backwards compatibility features. I would have done this a bit differently than most, though. Instead of always using the Dcom session option, I would have opened a SimSession using a _try {WSMAN} Catch {DCOM}_ and running the queries against the session. - -So, good work, everybody. Let's see what more we can learn in event 3. diff --git a/content/articles/2013-05-11-people-who-are-blogging-about-the-2013-scripting-games.md b/content/articles/2013-05-11-people-who-are-blogging-about-the-2013-scripting-games.md deleted file mode 100644 index d2638ebe5..000000000 --- a/content/articles/2013-05-11-people-who-are-blogging-about-the-2013-scripting-games.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: People Who are Blogging About the 2013 Scripting Games -authors: - - Mike F Robbins -date: "2013-05-11T23:13:49+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/people-who-are-blogging-about-the-2013-scripting-games/ ---- - -I'm sure that most people can easily find any of the blogs of the official judges from the 2013 Scripting Games. I recommend reading those blogs whether you're competing in the scripting games or not since there's a wealth of great information contained in them. The best place to find those blogs if you don't know already is the [Judges Notes section](https://powershell.org/category/announcements/scripting-games/judges-notes/) under the [Scripting Games area](https://powershell.org/category/announcements/scripting-games/) on [PowerShell.org](https://powershell.org/) so there's no reason to duplicate them here. -There are also a number of people who are competing in the Scripting Games that are writing blog articles of their own blog sites. A couple of the ones that I'm aware of are listed below and while they're my competition in the advanced class and have links promoting their Scripting Games entries in their blogs (I do the same thing),  I don't mind promoting their blog articles because there's some great information to be found in them. I'm actually glad they provided links to their entries because both of these guys are excellent PowerShell scripters and you could learn a lot from viewing their Scripting Games entries. Ultimately the scripting games is all about the community learning more about using PowerShell best practices in a friendly competition that's just for fun. [Click here](http://mikefrobbins.com/2013/05/11/people-who-are-blogging-about-the-2013-scripting-games/) to be redirected to the original post of this article on the author's blog site where you can read the remainder of the article. -µ diff --git a/content/articles/2013-05-12-scripting-games-2013-event-2-notes.md b/content/articles/2013-05-12-scripting-games-2013-event-2-notes.md deleted file mode 100644 index 1a488f7eb..000000000 --- a/content/articles/2013-05-12-scripting-games-2013-event-2-notes.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Scripting Games 2013: Event 2 Notes" -authors: - - Boe Prox -date: "2013-05-13T02:32:40+00:00" -aliases: - - /2013/05/scripting-games-2013-event-2-notes/ ---- - -I spent some time last week and this weekend to compile a list of notes of what I have seen with the Event 2 submissions that could show improvement. I touched up on some items with my [previous article](http://learn-powershell.net/2013/05/08/scripting-games-2013-event-2-favorite-and-not-so-favorite/) where I picked out some submissions that I liked and didn't quite like but wanted to touch on a few more things. Some of this feels like a repeat of last week and even last years games, but that is Ok. This is all about learning and as long as everyone takes what all of the judges have been writing about, then there will be nothing but great improvements during the course of the games. [Click here][1] to go to continue reading this article. - - [1]: http://learn-powershell.net/2013/05/12/scripting-games-2013-event-2-notes/ diff --git a/content/articles/2013-05-13-event-3-my-way.md b/content/articles/2013-05-13-event-3-my-way.md deleted file mode 100644 index fb0dd1c5a..000000000 --- a/content/articles/2013-05-13-event-3-my-way.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Event 3: My way…" -authors: - - Bartek Bielawski -date: "2013-05-14T07:09:35+00:00" -aliases: - - /2013/05/event-3-my-way/ ---- - -Third event is open for voting, but as usual - before I see any of the scripts submitted by you, I'm posting my version. Tried to sneak in few tricks I've learned here and there, hope you will enjoy reading and will tell me why I'm wrong. 😉 You can find whole post [here](http://becomelotr.wordpress.com/2013/05/14/event-3-my-way/). diff --git a/content/articles/2013-05-14-announcing-the-powershell-summit-north-america-2014.md b/content/articles/2013-05-14-announcing-the-powershell-summit-north-america-2014.md deleted file mode 100644 index 85a87a655..000000000 --- a/content/articles/2013-05-14-announcing-the-powershell-summit-north-america-2014.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Announcing the PowerShell Summit North America 2014 -authors: - - Don Jones -date: "2013-05-14T14:39:11+00:00" -categories: - - PowerShell Summit -aliases: - - /2013/05/announcing-the-powershell-summit-north-america-2014/ ---- - -The PowerShell Summit North America 2014 will be held April 28, 29, and 30 at the Meydenbauer Center on Northeast 6th Street in Bellevue, WA. -Your membership in the PowerShell Summit also makes you a yearlong member of PowerShell.org, the online hub for the PowerShell community. Membership includes a daily continental breakfast, daily hot lunch, and three tracks of expert-led lectures and discussions. 2014 tracks include: - - * INTERNALS: Inner secrets of PowerShell, suitable for developers and admins alike. - * DEEP DIVES: Dig into technically rich topics related to the shell itself and broad administrative tasks. - * DOMAIN SPECIFIC: Focus on managing specific server products and technologies using the shell. - -[NB: For tax reasons, you become a "member" of the organization and go to our meeting as part of that; we don't sell "tickets."] -**Pricing** will range from $750-$950. We'd originally hoped to do a flat price, but the logistics of our venue is pushing this decision. So we'll be offering discounted tickets first, and then moving up the price as we go. Get in early to get the cheap seats! -If you choose to stay at one of our official hotels, you'll enjoy a reduced room rate, complimentary in-room Internet, and a short 15-minute walk to the Meydenbauer Center. We recommend taking a shuttle from the airport (http://bit.ly/ZNWGcw $20oneway; taxis $65+) instead of a rental car; parking is NOT complimentary. -NEARBY HOTELS include: Sheraton (http://bit.ly/10mVQog), Hilton (http://bit.ly/YsQiq8), and Red Lion (http://bit.ly/10gXH8v). All are adjacent to each other and are a .6 mile walk to the Meydenbauer Center. Courtyard by Marriott (http://bit.ly/12RvG9a) is across the street from the Meydenbauer Center. We do not yet have official room availability and rates. -These hotels are also less than a 4-minute taxi ride (under $5oneway) to downtown Bellevue, full of retail, dining, bars, and nightlife. You will probably spend MORE on a rental car (around $100 best-case, plus parking fees and fuel). -We will have a small-bandwidth Internet pipe available for WiFi use at the conference center. We recommend that you NOT rely on it for mission-critical or business-sensitive tasks, as it is a shared pipe and will likely have poor performance during peak usage. -We are not currently planning to offer power outlets in rooms. You may NOT stretch power cords across walkways to plug in your laptop. We are seeking out a Power Sponsor - the cost to have enough power for everyone's laptop is about $20,000 (it's one way conference centers make their profits), so this is a significant expense. -We are planning a brief private meet-and-greet reception for PowerShell.org, Inc. shareholders. We are also planning general evening events. -MEMBERSHIP SALES WILL BEGIN IN JULY with a private announcement to our 2013 alumni and our shareholders. After that, we will offer a block of memberships to our TechLetter subscribers. These folks will have first dibs not only on the event, but also on our limited block of nearby and discounted hotel rooms. We will release subsequent blocks in 2013 and 2014 for the public. -FULL DETAILS will always be available online at http://PowerShellSummit.org (this will redirect to the appropriate page for information and news). -**UPDATE**: I know there's a bit of disappointment that we're not "on campus." First... understand that we were a little under-the-radar in 2013, in terms of outside groups doing what we did in those particular locations. We also need to grow the event a bit in order to make it financially self-sustaining. And, the real clincher, no place "on campus" could accommodate us. However, "campus" (this is why I keep putting it in quotes) spans Redmond and Bellevue - we're actually adjacent to Microsoft offices, in 2014, and we're scheduling an evening event (community/team mixer, with team Q&A stations) in MS facilities. We'll also try to wrangle a company store/museum visit (there's a company Connector Shuttle that runs to Commons, which is where the store and museum are located). Most importantly, our location will ensure team participation - which is what doing this in the Seattle metro was all about. In fact, we're planning expanded team participation, with the addition of team-led "lightning demos" that will highlight cool features and tricks, and which will be a prelude to that evening's community/team mixer (so you can ask follow-up questions in smaller groups). So... given all of the possible alternatives, we felt this was the best solution. After all, the main session content is just you sitting in a room - shouldn't matter where that room is. The big thing for us is the team engagement, and the opportunity to do _fun_ stuff on campus, and we think we've got that nailed. More to come. diff --git a/content/articles/2013-05-14-scripting-games-event-1-winners-1.md b/content/articles/2013-05-14-scripting-games-event-1-winners-1.md deleted file mode 100644 index a4cf12a2a..000000000 --- a/content/articles/2013-05-14-scripting-games-event-1-winners-1.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Scripting Games Event 2 Winners -authors: - - Don Jones -date: "2013-05-14T15:22:41+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/scripting-games-event-1-winners-1/ ---- - -We're pleased to announce the winners for Event 2 of The Scripting Games 2013! -Winners: You can log into [The Scripting Games Web site][1] and go to your Profile page to see your prize. You will be given a prize redemption code and either a URL where you can redeem it, or an e-mail address of the prize provider (they will need the redemption code). All prizes must be claimed by the end of July 2013. I will list winners by username; if you used your e-mail address as your username, then a portion of that will be truncated for your privacy. Anyone can log in and check their Profile page to see if they've won a prize. - - * Event 2 Beginner First Place: kurtdg (free ebook from Manning) - * Event 2 Beginner Second Place: JayJay (6 months video training from Interface) - * Event 2 Beginner Third Place: wesleyhaut (1 year of Phoneominal from Start-Automating) - - * Event 2 Advanced First Place: _Emin_ (free ebook from Manning) - * Event 2 Advanced Second Place: mikefrobbins (6 months video training from Interface) - * Event 2 Advanced Third Place: SimonW (1 year of Phonenominal from Start-Automating) - - * Event 2 Beginner Top CrowdScore: taygibb (free ebook from Manning) - * Event 2 Advanced Top CrowdScore: mikefrobbins (free ebook from Manning) - -These are now listed on our [consolidated list of winners][2], which includes links to the winning entries. -Our CrowdScore winners get a selection of free ebooks from Manning, 1 month of video training from Interface, and $50 gift cards from SAPIEN; 1 prize per winner. - - * CrowdScore Voter: SimonW - * CrowdScore Voter: khopcroft - * CrowdScore Voter: markashley1961 - * CrowdScore Voter: kbrucej - * CrowdScore Voter: kraanr - * CrowdScore Voter: takenow350@_.com - -Congratulations to all of our winners! Note that our top three prizes in each category were awarded by our Mighty Panel of Celebrity Judges. Each judge nominated a first, second, and third place winner from the entries that our expert commentators identified as "best." Those nominations were compiled, and in the event of a tie the earliest entry was deemed winner. - - - - [1]: http://scriptinggames.org/ - [2]: http://scriptinggames.org/winners.php diff --git a/content/articles/2013-05-15-meet-the-scripting-games-judges-bartek-bielawski.md b/content/articles/2013-05-15-meet-the-scripting-games-judges-bartek-bielawski.md deleted file mode 100644 index e779efc2e..000000000 --- a/content/articles/2013-05-15-meet-the-scripting-games-judges-bartek-bielawski.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Meet the Scripting Games Judges: Bartek Bielawski" -authors: - - Don Jones -date: "2013-05-15T21:18:14+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/meet-the-scripting-games-judges-bartek-bielawski/ ---- - -Bartosz (Bartek) Bielawski is a busy IT Administrator with an international company, PAREXEL. He loves PowerShell and automation. That love earned him the honor of Microsoft MVP. He shares his knowledge mainly on his blogs: in English (http://becomelotr.wordpress.com) and Polish (http://powershellpl.net) and through articles published in the Polish IT Professional (http://it-professional.pl) magazine. He is co-author of PowerShell Deep Dives book (http://www.manning.com/hicks/). He loves good code that takes advantage of PowerShell pipeline and advanced functions grouped in modules. diff --git a/content/articles/2013-05-15-scripting-games-2013-event-3-notes.md b/content/articles/2013-05-15-scripting-games-2013-event-3-notes.md deleted file mode 100644 index 639918ab5..000000000 --- a/content/articles/2013-05-15-scripting-games-2013-event-3-notes.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Scripting Games 2013: Event 3 Notes" -authors: - - Boe Prox -date: "2013-05-16T03:03:08+00:00" -aliases: - - /2013/05/scripting-games-2013-event-3-notes/ ---- - -Wow, it is hard to believe that we are now halfway through the Scripting Games! As the events have progressed, I have seen a lot of improvement with the techniques as well as seeing new techniques that continue to impress me. On the flip side, I have seen some mistakes or assumptions when coding that cause a potential 5 star script to be a 2 or 3 star script. The best part about all of this is that we are all (yes, even the judges) learning new things that can only help to improve everyone"™s scripting knowledge. Check out the rest of the [article here][1]. - - [1]: http://learn-powershell.net/2013/05/15/scripting-games-2013-event-3-notes/ diff --git a/content/articles/2013-05-16-jan-egils-event-3-learning-points.md b/content/articles/2013-05-16-jan-egils-event-3-learning-points.md deleted file mode 100644 index 2312117c9..000000000 --- a/content/articles/2013-05-16-jan-egils-event-3-learning-points.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Jan Egil's Event 3 Learning Points" -authors: - - Don Jones -date: "2013-05-16T21:54:14+00:00" -aliases: - - /2013/05/jan-egils-event-3-learning-points/ ---- - -Another judge steps up with some tips! diff --git a/content/articles/2013-05-16-judge-notes-for-event-3.md b/content/articles/2013-05-16-judge-notes-for-event-3.md deleted file mode 100644 index f171714ce..000000000 --- a/content/articles/2013-05-16-judge-notes-for-event-3.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Judge notes for event 3 -authors: - - Art Beane -date: "2013-05-16T15:33:16+00:00" -aliases: - - /2013/05/judge-notes-for-event-3/ ---- - -This event's entries are impressive. Scoring appears to be higher than in the earlier events, so this one must have been easier to solve. So this time, instead of talking about good and bad scripts, I'm going to comment on some of the techniques I saw. -There was some "conversation" over whether Win32_Volume or Win32_LogicalDisk was the better approach to take. Fact is, either will return the requested data. So it really doesn't matter which one you use. The controversy seemed to include misreading or misunderstanding the requirement of reporting on "local hard drives", which implies that you need to use _-Filter "DriveType=3"_ (or equivalent) with either to eliminate network or CD/DVD drives. -When passing a Path parameter into a function, it's a good practice to include _[ValidateScript ({Test-Path -PathType Container})]_ in the definition to avoid having a file name passed in error. Doing the existence test for the path and creating it if necessary in the Begin section of the function would save some time over the various techniques used in the Process section. -One thing to remember when using a CIMSession is to close it when you've finished using it. A couple other points to pay attention to include accounting for the DCOM/WSMAN options when looking at remote computers and including _#requires -version 3_ in scripts that might be run by other people on computers that might not have PowerShell 3 installed. -Using a REGEX to validate a string parameter, such as a computer name, isn't a bad idea, but it's important to understand exactly what the match string means. As an example, some of the match strings included a pattern like this: _"[a-zA-Z0-9.-]"_. This means all lower and upper case letters, any numeric digit, any character, or a minus sign. The any character (".") defeats the whole purpose of the match. It really should have been escaped to "\." to mean a period. This error would probably never appear due to the unlikelihood of a badly formatted computer name being fed into the function. -Lastly, a caution when including an optional credentials parameter. It's probably not a good idea to default it to an empty credential object _($Credential = [System.Management.Automation.PSCredential]::Empty)_. If you do a _if ($Credential) {}_ call later in the script, it will always be $true and you may end up calling for the user to enter credentials far too many times. A better solution would be to check PSBoundParameters to see if a credential object was passed in. -Hope these ideas help. Good luck in Event 4. diff --git a/content/articles/2013-05-16-more-updates-to-the-scripting-games.md b/content/articles/2013-05-16-more-updates-to-the-scripting-games.md deleted file mode 100644 index 8acf0dd83..000000000 --- a/content/articles/2013-05-16-more-updates-to-the-scripting-games.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: More Updates to the Scripting Games -authors: - - Don Jones -date: "2013-05-16T20:50:09+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/more-updates-to-the-scripting-games/ ---- - -I've been making some more programming changes to the Scripting Games, based on folks' feedback. **If you run into problems, please notify me via the Feedback Forums link at the bottom of every page on the site.** Use the email address provided. Don't post a comment here, because I might not see it quickly. - - * **Multiple comments per reviewer -** you can now leave multiple comments on an entry. Combined with the ability to mark your comment as pertaining to a line or range of lines, this should allow for more granular commenting. - * **Comment without voting -** you are now free to offer comments without offering a score. - * **Delete comments** - you can now delete the comments you have written. - -I'm still plugging away at some IE9/10-related errors, which are causing the code reviewer/voter/commenter to not display on some entries. In the meantime, Safari, Chrome, and Firefox seem to be working fine. diff --git a/content/articles/2013-05-16-scheduled-powershell-org-maintenance-may-17-18.md b/content/articles/2013-05-16-scheduled-powershell-org-maintenance-may-17-18.md deleted file mode 100644 index 914b4bc6c..000000000 --- a/content/articles/2013-05-16-scheduled-powershell-org-maintenance-may-17-18.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Scheduled PowerShell.org Maintenance May 17-18 -authors: - - Don Jones -date: "2013-05-17T00:04:59+00:00" -categories: - - Announcements -aliases: - - /2013/05/scheduled-powershell-org-maintenance-may-17-18/ ---- - -We'll be doing some maintenance on the site Friday and Saturday, and it may be down for periods during the maintenance. Don't panic. This will not affect access to The Scripting Games Web site at all. diff --git a/content/articles/2013-05-16-tobias-notes-for-event-3.md b/content/articles/2013-05-16-tobias-notes-for-event-3.md deleted file mode 100644 index b2821d2f0..000000000 --- a/content/articles/2013-05-16-tobias-notes-for-event-3.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Tobias' Notes for Event 3" -authors: - - Don Jones -date: "2013-05-16T19:18:04+00:00" -aliases: - - /2013/05/tobias-notes-for-event-3/ ---- - -Tobias has some notes for Event 3 for you: diff --git a/content/articles/2013-05-17-event-3-my-notes.md b/content/articles/2013-05-17-event-3-my-notes.md deleted file mode 100644 index a416580ee..000000000 --- a/content/articles/2013-05-17-event-3-my-notes.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Event 3: My notes…" -authors: - - Bartek Bielawski -date: "2013-05-17T21:56:13+00:00" -aliases: - - /2013/05/event-3-my-notes/ ---- - -I'm almost done judging event 3, perfect time to share few thoughts about things I've seen in this event. A lot of great entries, but still few things that could have been done (in my opinion) better. If you want to know my general opinion - you can read it either in [English](http://becomelotr.wordpress.com/2013/05/17/event-3-my-notes/) or in [Polish](http://powershellpl.net/2013/05/17/scripting-games-moje-notatki-3/). Enjoy! diff --git a/content/articles/2013-05-18-meet-the-scripting-games-judges-olver-lipkau.md b/content/articles/2013-05-18-meet-the-scripting-games-judges-olver-lipkau.md deleted file mode 100644 index 7fdf78e96..000000000 --- a/content/articles/2013-05-18-meet-the-scripting-games-judges-olver-lipkau.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Meet the Scripting Games Judges: Olver Lipkau" -authors: - - Don Jones -date: "2013-05-18T13:36:13+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/05/meet-the-scripting-games-judges-olver-lipkau/ ---- - -I have been working for AtoS, formaly Siemens IT Solutions and Services, for 6 years as a IT Consultant. -I was 15 when I started scripting. First only batch scripts to automate simple things. With time the scriptt grew in complexity and languages. VBS, AutoIt, AHK and finally PowerShell, which superseeded all others. PowerShell became a passion and became more and more a daily thing. -I was invited to be a judge for the Scripting Games in 2011, 2012 and now 2013. -You are welcome to visit my Blog at http://oliver.lipkau.net/blog and check out what I have been up to. diff --git a/content/articles/2013-05-18-some-event-3-notes.md b/content/articles/2013-05-18-some-event-3-notes.md deleted file mode 100644 index 292bbe1e9..000000000 --- a/content/articles/2013-05-18-some-event-3-notes.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Some Event 3 Notes -authors: - - Don Jones -date: "2013-05-18T14:23:25+00:00" -aliases: - - /2013/05/some-event-3-notes/ ---- - -I didn't see anyone (although I'll admit I haven't checked every entry) using my EnhancedHTML module from _Creating HTML Reports in PowerShell._ I am ensaddened. -But man, Event 3 shows that you can really do well by learning a wee bit of HTML. Knowing an H2 and HR tag makes for much pretty results. Take it as career advice. -As a nitpick, don't use Convert as a function verb unless all the function is going to do is convert something. It shouldn't "Get" as well. That said, because this event wants a single function that both gets and converts... which is something I'd ordinarily avoid packing into one function... no big. It's interesting to see the function names folks picked out. -Folks, **test your scripts.** Seriously. -I kinda giggled when I saw this comment in an entry: - - -`# I'd like to Splat this but I don't know how / ran out of time -`Heh. In general, this is like a cooking show. If you know your food doesn't taste good, don't bring it to the judges. And if you do bring it to them, don't tell them all the cool toppings you were going to add. Just give them what you made. -Note to self: Don't write scenarios that require HTML. It messes up the Scripting Games Web site. Duh. -You know, overall, I'm seeing good stuff. I ran through some of the low-scoring entries and didn't see anything that didn't deserve a lowered score. If you constructed your own HTML instead of using ConvertTo-HTML, you pretty much got universally dinged, and I can understand and support that philosophy. -Oh, and ConvertTo-HTML doesn't output to stdout, whoever wrote that. It writes to the pipeline. Big difference. -Folks, when using Get-WmiObject, _use the -Filter parameter._ Don't get _everything_ and pipe it to Where-Object. Get the filtering done early - this is a huge performance concept. -This was interesting: - - -`[Parameter(Mandatory=$True,ValueFromPipeline=$True)] - [ValidateScript({Test-Connection -ComputerName $_ -Quiet -Count 2})] - [STRING[]]$ComputerName, -`I'm entirely unsure how I feel about this. I like the idea. I keep telling people than a Ping doesn't really tell you anything when you're about to use WMI, though. If the computer responds, WMI might still fail; if the computer doesn't respond, WMI might still succeed. A ping is not useful diagnostic information for WMI connections. I understand the desire to try and eliminate the WMI timeout, but you're not doing so. What if I block ICMP traffic but not WMI traffic - a very common thing at a lot of my clients? Just bear that in mind. -We're done with Hungarian notation ($objDisk, $strComputer). Time to move on. -Commenters: Dudes, you need to read. For example, this: - -> When localhost, an IP address, or an alias is provided, the actual computer name is not displayed on the web page and the file name is also incorrect. Consider using one of the properties from the WMI class that has the computer name instead of what the user provided on input. - -Was next to a 1-star vote. Totally inappropriate. 1 star, as the voting page clearly indicates, is when the script is totally non-functional. "Bad entry - does not function at all" is what it says under 1 star. This comment was on a working script. Maybe it didn't fulfill every requirement, but seriously, you'd _fire a guy_ whose script simply put an IP address instead of a computer name? No. This was a 3-star script according to the guidelines. -Anyway... things are looking great. On to Event 4, which opens for voting real soon! diff --git a/content/articles/2013-05-18-your-weekend-games-report.md b/content/articles/2013-05-18-your-weekend-games-report.md deleted file mode 100644 index 816a45f08..000000000 --- a/content/articles/2013-05-18-your-weekend-games-report.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Your Weekend Games Report -authors: - - Don Jones -date: "2013-05-18T14:05:18+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/your-weekend-games-report/ ---- - -It's been a crazy-busy week for me, so I'm just getting caught up here. I'm off observing the beta-teach of the new 10961A PowerShell 3 class in Phoenix next week, but I'll be keeping an eye on the Games. -So let's run some numbers. -The Games have 2092 users at present, along with 10960 scores and 5412 comments. There are 849 total entries. -Regarding Event 3, we have 109 Advanced entries and 122 Beginner entries. The average beginner score is 2.8416, and the advanced score is 2.8512. Darn close. -Site traffic is up to 25,000 visits from 18,200 unique visitors, for a total of 56,000 page views and a poo-load of bandwidth. I should have Event 3 winners posted on Tuesday sometime. diff --git a/content/articles/2013-05-21-scripting-games-event-3-winners.md b/content/articles/2013-05-21-scripting-games-event-3-winners.md deleted file mode 100644 index f0d6e7963..000000000 --- a/content/articles/2013-05-21-scripting-games-event-3-winners.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Scripting Games Event 3 Winners -authors: - - Don Jones -date: "2013-05-21T14:41:53+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/scripting-games-event-3-winners/ ---- - -We're pleased to announce the winners for Event 3 of The Scripting Games 2013! -Winners: You can log into [The Scripting Games Web site][1] and go to your Profile page to see your prize. You will be given a prize redemption code and either a URL where you can redeem it, or an e-mail address of the prize provider (they will need the redemption code). All prizes must be claimed by the end of July 2013. I will list winners by username; if you used your e-mail address as your username, then a portion of that will be truncated for your privacy. Anyone can log in and check their Profile page to see if they've won a prize. -**Note:** Our hosting company is doing some maintenance on their admin site, so it may be a day or two before redemption codes appear in your Scripting Games profile. Appreciate your patience. -And seriously, you're killing me with the usernames. Heh. - - * Event 3 Beginner First Place: TechieSponge (free ebook from Manning) - * Event 3 Beginner Second Place: LittleBunnyFooFoo (6 months video training from Interface) - * Event 3 Beginner Third Place: chadmcauley (1 year of Phoneominal from Start-Automating) - - * Event 3 Advanced First Place: glenn.faustino (free ebook from Manning) - * Event 3 Advanced Second Place: mikefrobbins (6 months video training from Interface) - * Event 3 Advanced Third Place: CarloM (1 year of Phonenominal from Start-Automating) - - * Event 3 Beginner Top CrowdScore: LittleBunnyFooFoo (free ebook from Manning) - * Event 3 Advanced Top CrowdScore: mikefrobbins (free ebook from Manning) - -These will be listed on our [consolidated list of winners][2], which includes links to the winning entries. -Our CrowdScore winners get a selection of free ebooks from Manning, 1 month of video training from Interface, and $50 gift cards from SAPIEN; 1 prize per winner. Check your profile to see if you've won! -Congratulations to all of our winners! Note that our top three prizes in each category were awarded by our Mighty Panel of Celebrity Judges. Each judge nominated a first, second, and third place winner from the entries that our expert commentators identified as "best." Those nominations were compiled, and in the event of a tie the earliest entry was deemed winner. - - - - [1]: http://scriptinggames.org/ - [2]: http://scriptinggames.org/winners.php diff --git a/content/articles/2013-05-21-validatescript-for-beginners.md b/content/articles/2013-05-21-validatescript-for-beginners.md deleted file mode 100644 index fc6596320..000000000 --- a/content/articles/2013-05-21-validatescript-for-beginners.md +++ /dev/null @@ -1,137 +0,0 @@ ---- -title: ValidateScript for Beginners -authors: - - June Blender -date: "2013-05-21T18:03:27+00:00" -aliases: - - /2013/05/validatescript-for-beginners/ ---- - -There"™s been a lot of chatter about in Scripting Games 2013 blog posts about the ValidateScript attribute. The chatter is, appropriately, confined to the advanced events "“ this sort of thing is not expected in a one-liner. But I thought I"™d take a minute and demystify it "“ and discuss an issue that it raises about when input should be rejected. -Let"™s start with a quick description of ValidateScript and its siblings. For help, see [about_functions_advanced_parameters][1]. - -## What is ValidateScript? - -ValidateScript and its siblings are _parameter validation attributes_. These attributes are statements that are added to the parameter definition. They tell Windows PowerShell to examine the parameter values that are used when the function is called and determine whether the parameter values meet some specified conditions. In particular, ValidateScript lets you write a script block to test the conditions that the values must satisfy. Windows PowerShell runs the validation script on the parameter values and, if the script returns $False, it throws a terminating error. -Before we get to the details, let"™s talk about why you"™d want to use something like this. The answer is simplicity. "What!!?!," you say, incredulously? The syntax of this thing looks like a sampler of Windows PowerShell enclosures. There"™s a square bracket "[" or two "]", a pair of parentheses "( )" and even some curly braces "{  }". So it doesn"™t look simple. -But once you get over the syntax, you realize that putting the parameter value validation into the parameter definition means that you don"™t need to test the parameter value in your script. Instead, the Windows PowerShell engine tests the parameter value and you can use the script to do scripty things. - -# Using ValidateScript - -Here"™s what I mean. Here"™s a silly function that will serve as our example. - - -`function Get-EventDate -{ - Param($EventDate) - if ($EventDate -is [DateTime] -and $EventDate -gt (Get-Date)) - {"The event is happening on $EventDate."} - else - {Write-Error "Event date must be a DateTime object ` - that represents a date in the future."} -} -`The Get-EventDate function has a $EventDate parameter. If the value of the $EventDate parameter is a DateTime object and it"™s later than now, the function writes a nice sentence with the date to the console or host program. But, if the value of $EventDate is not a DateTime object, or it"™s not a future date, the function generates an error. (To be complete, this info would be in the Help for the function.) -But much of this little function is wrapped around validating the value of the $EventDate parameter. So let"™s see if we can get Windows PowerShell to validate it for us. -In this version, we add a parameter value type enclosed in square brackets ([DateTime]) on the line before the parameter name ($EventDate). -But that"™s enough to allow us to delete the "if $EventDate "“is [DateTime]" from the If statement and from the error message. - - -`function Get-EventDate -{ - Param( - [DateTime] - $EventDate - ) - if ($EventDate -gt (Get-Date)) - {"The event is happening on $EventDate."} - else - { Write-Error "Event date must represents a future date."} -} -`Let"™s make sure it works. I"™ll send it a process object instead of a date. And, sure enough, Windows PowerShell generates an error explaining that it can"™t convert ("process argument transformation" "“ oy!) a process object to a DateTime object. - - -`PS C:\> Get-EventDate -EventDate (Get-Process PowerShell) -Get-EventDate : Cannot process argument transformation on parameter -'EventDate'. Cannot convert the "System.Diagnostics.Process (powershell)" -value of type "System.Diagnostics.Process" to type "System.DateTime". -At line:15 char:26 -+ Get-EventDate -EventDate (Get-Process PowerShell) -+                          ~~~~~~~~~~~~~~~~~~~~~~~~ -+ CategoryInfo          : InvalidData: (:) [Get -EventDate], -ParameterBindingArgumentTransformationException -+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Get-EventDate -`Now, let"™s get Windows PowerShell to test the other date condition for us. Here"™s where ValidateScript comes in. -The syntax is a bit wonky. ValidateScript is enclosed in square brackets: [ValidateScript]. Its parameter is enclosed in parentheses: [ValidateScript( )] and the parameter value is a script block, complete with curly braces: [ValidateScript({ Your-script-goes-here })]. I can never remember this, so I use an ISE snippet or copy it from [about_functions_advanced_parameters][1]. -But aside from the syntax, ValidateScript is easy to use. I just moved the (-gt (Get-Date)) from the script into the ValidateScript script block. Now, I can eliminate the error message, too. -In the script block, "$_" represents the parameter value. If a parameter takes a collection (more than one) of objects, "$_" represents each value in the collection, which is tested one at a time "“ no need for a Foreach-Object command. - - -`function Get-EventDate -{ - Param( - [ValidateScript({$_ -gt (Get-Date)})] - [DateTime] - $EventDate - ) - "The event is happening on $EventDate." -} -`When a parameter value fails a test, ValidateScript generates a terminating error. If the parameter value takes a collection, like a list of dates, and any one of the dates fails the test, ValidateScript throws an error that stops the script, even if all other dates pass the test. -Let"™s test by sending it a date in the past. (Today"™s date would generate the same error.) The error message explains (in more words that I could use) that the date failed the validation test. -It"™s not a great error message, but it"™s the best we could do, because Windows PowerShell just executes the validation script in the script block. It can"™t guess your intent. - - -`PS C:\> Get-EventDate -EventDate (Get-Date -Month 9 -Day 21 -Year 2007) -Get-EventDate : Cannot validate argument on parameter 'EventDate'. -The "$_ -gt (Get-Date)" validation script for the argument with value -"9/21/2007 5:36:36 PM" did not return true. Determine why the validation -script failed and then try the command again. -At line:1 char:26 -+ Get-EventDate -EventDate (Get-Date -Month 9 -Day 21 -Year 2007) -+                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+ CategoryInfo          : InvalidData: (:) [Get-EventDate], ParameterBindingValidationException -+ FullyQualifiedErrorId : ParameterArgumentValidationError,Get-EventDate -`And, just for kicks, let"™s pass it a date in the future. This one works. - - -`PS C:\ > Get-EventDate -EventDate (Get-Date -Month 9 -Day 21 -Year 2013) -The event is happening on 09/21/2013 18:00:50. -`## ValidateScript in Advanced Functions - -This is the sort of clever thing that the advanced folks are doing. For example, here"™s the parameter section from Toni"™s totally terrific Archival Atrocity solution. - - -`[CmdletBinding()] -param( -[ValidateScript({ Test-Path $_ -PathType Container })] -[string]$LogPath="C:\Application\Log", -[Parameter(Mandatory=$true)] -[ValidateScript({ Test-Path "$LogPath\*" -Include $_ -PathType Container })] -[string[]]$ApplicationLogFolder, -[Parameter(Mandatory=$true)] -[ValidateScript({ Test-Path $_ -PathType Container })] -[string]$DestinationPath, -[int]$Period=90 -) -`We"™re not even in the function statements yet, but we already know for sure that the values of the $LogPath, $ApplicationLog, and DestinationPath parameters are folders (not files), and the full path to these folders already exists in the file system. Not bad! Excellent, really. Clever enough to win second prize in the Nobel Prizes of PowerShell scripting. (Congratulations, Toni!) -In fact, almost all of the advanced scripts used validation parameters. Take a peek. Keep a copy of [about_functions_advanced_parameters][1] nearby. - -## Should we use ValidateScript? - -This is very clever scripting, but is it a good idea? It"™s easier for the author and easier to maintain, because the conditions are in a predictable place. -But, is this the right thing to do for users? I don"™t know the answer, but I think that we, as a community, need to consider the question. -Jeffrey Snover, the Windows PowerShell grand architect, wisely proclaims that Windows PowerShell differs from other languages in that scripts should "just work." Windows PowerShell scripts should make the user successful. -The language goes to all ends in its pursuit of this principle. When you send the wrong type of parameter value to a cmdlet, Windows PowerShell tries to convert the value to the right type. It returns an error only when its attempts to convert fail. -In Windows PowerShell 3.0, if you send it a collection of object and ask for a property that the collection doesn"™t have, Windows PowerShell checks to see if the objects in the collection have that property and, if they do, it returns the property value. (Try: (Get-Process).Name ). -If you ask Windows PowerShell 3.0 how many items are in an empty object, it tells you 0, even though empty objects don"™t have a Count or Length property. - - -`PS C:\> $zoo = $null -PS C:\> $zoo.Count -0 -`Many scripts, including those we"™ve seen in these esteemed Games, have elaborate try-catch syntax to capture errors and create a pleasant user experience. -So, given that background, should we encourage scripting techniques that throw errors to users, instead of making them successful? And, in particular, errors that cannot provide very helpful error messages? -Personally, I prefer scripts that optimize the user experience, instead of the authoring experience. In the Get-EventDate example, where I planned to write an error anyway, ValidateScript is probably a cleaner alternative. But in the Archival Atrocity script, it would have been a much better user experience to create a directory if it didn"™t already exist. -On the other hand, if I were writing a script only for myself, I would keep it strict. I would prefer the error message to the risk that I just created a directory structure for a typo. -What do you think? Should we create community guidance for using validation attributes? - - [1]: http://go.microsoft.com/fwlink/?LinkID=135173 diff --git a/content/articles/2013-05-22-jan-egils-event-4-notes.md b/content/articles/2013-05-22-jan-egils-event-4-notes.md deleted file mode 100644 index 1ca1a58d1..000000000 --- a/content/articles/2013-05-22-jan-egils-event-4-notes.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Jan Egil's Event 4 Notes" -authors: - - Don Jones -date: "2013-05-22T15:47:46+00:00" -aliases: - - /2013/05/jan-egils-event-4-notes/ ---- - -Jan offers some perspective on Event 4 at  diff --git a/content/articles/2013-05-23-event-4-notes.md b/content/articles/2013-05-23-event-4-notes.md deleted file mode 100644 index d43ed7065..000000000 --- a/content/articles/2013-05-23-event-4-notes.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Event 4 Notes -authors: - - Don Jones -date: "2013-05-23T15:10:15+00:00" -aliases: - - /2013/05/event-4-notes/ ---- - -Loved seeing **[OutputType([PSObject])]** in an entry this morning... that helps the help system document what your script produces. It's a shame it doesn't work well with custom type names (since those are a bit of a fake-out on the object), but it's an attention to detail I appreciate. -I **am** seeing a little bit of misunderstandings. Keep in mind that the lastLogonTimestamp attribute in AD is the one that replicates, although there is a long possible delay in that replication. There are other "last logged on" attributes that _don't_ replicate so you can't rely on them unless you're querying every DC (pretty inefficient). -Hey, one thing to think about: sometimes simpler is better. For example, instead of adding a dozen lines to check and see if a module exists and can be loaded, just add a #requires comment for that module. Let the shell do that work and spew an error if the module isn't present. It'll even force-load the module into memory. Saves lots of steps. -Hey, don't declare functions as **global:Do-This**. It's a neat trick, but you're polluting the shell's global scope. Plan to write in-scope functions and make them a script module, so they can be loaded and unloaded. From the Games perspective, "whatever," but in the real world... don't pollute the global scope. -A comment I saw: "You should check to make sure the module isn't loaded before loading it again." Disagree. The shell does this for you when you use Import-Module. But, doc your module dependency in a #requires, and you won't have to worry about the module. In fact, the whole theme of "checking to see if the AD module is loaded" appears to be a major point of commenting. I'm a fan of "easier" and a 1-line **#requires -module ActiveDirectory** is far easier to write and maintain than, say, and entire function designed specifically to load the ActiveDirectory module. diff --git a/content/articles/2013-05-23-judge-notes-for-event-4.md b/content/articles/2013-05-23-judge-notes-for-event-4.md deleted file mode 100644 index 581368eda..000000000 --- a/content/articles/2013-05-23-judge-notes-for-event-4.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Judge notes for Event 4 -authors: - - Art Beane -date: "2013-05-23T14:56:59+00:00" -aliases: - - /2013/05/judge-notes-for-event-4/ ---- - - Wow! That's the only word I can think of to describe the submissions this time. I'm really impressed with the approaches taken to solve this problem. The only thing that could have been better is quitting when the ActiveDirectory module or the Quest snapin weren't found. I chalked that up to not having experience with an actual audit where no answer is not acceptable, so I didn't count against it when evaluating the scripts. But, on this point kudos to the one script that tested for the AD module, then the Quest snapin, and fell back to the ADSI accelerator if neither were found. -**Beginner entries** -For me, the best entries were those that had the shortest pipelines. Those of you who used _Get-Random -Count 20 -InputObject (Get-ADUser...) | Select ... | ConvertTo-Html | Out-File_ had the shortest. And those who used _Get-ADUser | Get-Random -Count 20_ were a close second. -A couple of entries had something that at first I thought was silly. But, instead, it offers a learning opportunity. Here's the code fragment: _Get-ADUser -Filter {ObjectClass -eq 'User'}_. Paying attention to what the cmdlet does saves a lot of typing, not only here where the filter is redundant, but also when entering other parameters. For example, a similar extra effort occurs when default properties are explicitly listed in a -Properties parameter. -**Advanced entries** -As mentioned, the best entries were those that fell back to the [ADSI] accelerator when the AD module or the Quest snapin weren't found. Making this kind of check and fallback is pretty important when responding to audit requests. This reminds me of a case where I actually had to respond to an audit request with the actual last logon date in a domain with mixed W2K3, W2K8, and W2K8R2 domain controllers. The default choice was to use the AD module, but since we had to check each domain controller (there were 72 of them), it turned out to be a real pain determining which method to use on each of them. In the end, we decided to install the Quest tools on the audit server and just avoid the issue. -There were several different methods used to verify the presence of the AD module before trying to load it. Most of them were actually more work that really necessary. The reason for this is that the Import-Module cmdlet does not return an error if the module has already been loaded. Thus, the easiest test would be: - - -`Try { Import-Module ActiveDirectory -ErrorAction Stop $Users = Get-ADUser ... } Catch { Write-Error "AD Module not available" # Fall back to ADSI to get User data } -`The same is true for Add-PSSnapin for PowerShell 3, but in V2, it generates an error with "because it is already added" in $Error[0].Exception.Message. So, you can use something similar to check for that. -To close out this set of comments, here's something to think about. The topic is embedded, or local, functions in a master function. Question 1: should you even go through the trouble of writing a local function if it's only going used one time? Question 2: since the local function will execute in a controlled environment, does it need to be an advanced function with comments and parameter validation, or would a simple function make more sense? -Until next time: keep up the great work!! diff --git a/content/articles/2013-05-23-scripting-games-2013-event-4-notes.md b/content/articles/2013-05-23-scripting-games-2013-event-4-notes.md deleted file mode 100644 index 920c09539..000000000 --- a/content/articles/2013-05-23-scripting-games-2013-event-4-notes.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Scripting Games 2013: Event 4 Notes" -authors: - - Boe Prox -date: "2013-05-24T01:21:11+00:00" -aliases: - - /2013/05/scripting-games-2013-event-4-notes/ ---- - -It is all downhill from here folks! Event 4 is in the books and we only have 2 more to go! Everyone has been doing an outstanding job with their submissions and it is becoming clear that people are learning new things and showing some great techniques with their code. -Of course, this doesn't mean that there isn't room for improvement with some submissions to make them even better or just some simple mistakes that can be cleaned up to make average submissions into amazing submissions. With that, its time to dive into my notes"¦ You can check out the rest of this article [here](http://learn-powershell.net/2013/05/23/scripting-games-2013-event-4-notes/). diff --git a/content/articles/2013-05-23-want-a-premier-powershell-class-in-your-area-next-year-help-me-make-it-happen.md b/content/articles/2013-05-23-want-a-premier-powershell-class-in-your-area-next-year-help-me-make-it-happen.md deleted file mode 100644 index a7d3ade65..000000000 --- a/content/articles/2013-05-23-want-a-premier-powershell-class-in-your-area-next-year-help-me-make-it-happen.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Want a premier PowerShell class in your area next year? Help me make it happen. -authors: - - Don Jones -date: "2013-05-23T14:18:50+00:00" -categories: - - Announcements -aliases: - - /2013/05/want-a-premier-powershell-class-in-your-area-next-year-help-me-make-it-happen/ ---- - -We're putting together our schedule for 2014 (yes, already), and we're looking to hold premier-level PowerShell master classes throughout the world. But... we need your help. -If you've got a really top-notch training center in your area that might be interested in working with us, [contact me][1]. We'll need the name of someone there - the training manager, the marketing manager, someone like that. We co-market our classes, but rely on a local center to market to their existing customer base as well. These _are_ premium classes, and they do go for a premium price, so the center has to be comfortable marketing that kind of class. We're not the run-of-the-mill "official curriculum;" my Master Class packs in around eleven days of "normal" training, covering toolmaking, scripting, and advanced topics as well as the introductory-level stuff. _ -_ -International contacts are fine, and in fact it's something I'm excited to get going, as international classes also help me set up future PowerShell Forum and PowerShell Saturday events in a country or region. -So think about your area and see if we might be a fit, and if you've got a really top-notch training center you can put us in touch with! - - [1]: https://powershell.org/contact-us/ diff --git a/content/articles/2013-05-24-scripting-games-week-4.md b/content/articles/2013-05-24-scripting-games-week-4.md deleted file mode 100644 index 960686f31..000000000 --- a/content/articles/2013-05-24-scripting-games-week-4.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Scripting Games Week 4 -authors: - - Glenn Sizemore -date: "2013-05-24T21:37:18+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/scripting-games-week-4/ ---- - -Again if you"™re participating in the games this year you"™ve already won!  If you"™re not and you"™re reading this post what are you doing!  I"™ve watched authors step there game up over the past month, and I can tell you from personal experience the games will make you better at your real job.  It"™s like sharpening an axe, an axe made of super juice that can automate the world 🙂 -**Well that's clever! -** I came across this script this morning. - - -`$prop = Write-Output Name,Title,Department,LastLogonDate,PasswordLastSet,LockedOut,Enabled -Get-ADUser -Filter * -Properties $prop | - Get-Random -Count 20 | Select-Object $prop | - ConvertTo-Html -Title "Active Directory Audit" -PostContent " ---- -$(Get-Date)" | Out-File C:\adresult.html -`Well formatted, simple concise, all around a very clean approach to the problem.  However the use of write-output threw me for a second.  I actually had to run it to see what was happening there, for a second I thought maybe there was yet another way to create a custom object in PowerShell.  Alas no, our intrepid author has simply deduced a way to avoid having to put quotes around the text.  Consider the following Prop1, and Prop2 are identical, but it"™s one less character using write-output. - - -`$prop1 = Write-Output Name,Title,Department,LastLogonDate,PasswordLastSet,LockedOut,Enabled -$prop2 = 'Name','Title','Department','LastLogonDate','PasswordLastSet','LockedOut','Enabled' -`I"™m not saying we should start using write-output instead of quotation if for nothing other than syntax highlighting it"™s incorrect. However, this one time it"™s forgiven, and I"™m tipping my hat to you sir, well done. -**Don"™t put spaces or dashes in your property names. -** I"™ve seen this on and off throughout the games and I"™ll admit this one isn"™t a slam dunk, but that said don"™t do it. You"™re writing a script, camel case is the established standard for spaces. Yes the spaces do make it slightly easier to read, but at the cost of eliminate the reuse of the code. -**Oh the Humanity. -** Seriously read the damn help already. I could just fill this post with examples of simple mistakes that could have been avoided. Using the wrong cmdlet is one thing but take the following. - - -`Get-Process | Sort-Object {Get-Random} | select -First 5 -`What"™s wrong with that picture? Well nothing except it"™s horribly inefficient since the Get-Random cmdlet has a count parameter! - - -`Get-Process | Get-Random -Count 5 -`To the author You know who you are, everyone else read the help people! -Light week this week, but I will say I am super excited about next weeks offerings it"™s a problem that tickles my kind of fancy, and I hope you all have as much fun solving it as I did. -~Glenn diff --git a/content/articles/2013-05-24-the-new-powershell-class-is-coming-to-a-cpls-near-you.md b/content/articles/2013-05-24-the-new-powershell-class-is-coming-to-a-cpls-near-you.md deleted file mode 100644 index f067adeea..000000000 --- a/content/articles/2013-05-24-the-new-powershell-class-is-coming-to-a-cpls-near-you.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: The new PowerShell Class is Coming to a CPLS Near You! -authors: - - Don Jones -date: "2013-05-24T21:00:09+00:00" -categories: - - News - - Training -aliases: - - /2013/05/the-new-powershell-class-is-coming-to-a-cpls-near-you/ ---- - -Looking for a great getting-started PowerShell class? Or perhaps you'd like to send a colleague or peer to some PowerShell "zero to hero" training? -We've just finished the official beta-teach of Microsoft's 10961, Automating Administration with Windows PowerShell, and it went _great. _The sequencing of the class was spot-on, and we had an absolutely incredible group of students. Many were n00bs, which was perfect; a couple had "some" shell experience but wanted to learn "the right way." And they did. -Through a series of 12 modules, you're led through the basics all the way up to writing your own script. The grand semi-finale has you creating a script that provisions a brand-new, freshly-installed Server Core instance - all without logging on to that instance at all. The high moment for me was when one student, after struggling a bit to get started on the provisioning lab, concluded with a "well, that did it." Everything came together for him: command discovery, help, scripting, variables, remoting, _all_ of it. He _did_ the task, from scratch, with practically no help. He's _there. _ -10961 replaces MS course 10325, and it will soon be supplemented by a Microsoft Courseware Marketplace title that goes further into scripting, error handling, debugging, and more... what I've taken to calling _toolmaking. _We'll hopefully continue to refresh both courses as PowerShell evolves. -So call your local Microsoft Certified Partner - Learning Systems ("training center") and see when they're offering 10961. A bit of caution: this is a class where, unfortunately, an inexperienced MCT will be really challenged. While the course book is a full, almost-500-page book (you're welcome), it's tightly timed and you'll definitely want to check the credentials and experience of whatever trainer is running the class. You can't just "read the slides" to stay a module ahead of the students on this one. -This class is _strongly_ based upon _Learn Windows PowerShell 3.0 in a Month of Lunches, _in terms of how the material is presented, although the sequence and narrative was altered a bit to better accommodate Microsoft requirements and classroom logistics. I'm _really_ proud of how the course turned out - so if you've got folks who need some PowerShell training, tell 'em to look it up. Many CPLS centers offer remote training, too, meaning you can attend from the comfort of your own home or office. -If you take the class, I'd love to hear what you think. diff --git a/content/articles/2013-05-25-event-4-my-notes.md b/content/articles/2013-05-25-event-4-my-notes.md deleted file mode 100644 index bef81c390..000000000 --- a/content/articles/2013-05-25-event-4-my-notes.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Event 4: My notes…" -authors: - - Bartek Bielawski -date: "2013-05-25T21:09:10+00:00" -aliases: - - /2013/05/event-4-my-notes/ ---- - -Active Directory is one of those things I just love to work with. That's why I was really looking forward to this event. As always, I learned few things, but still - seen some mistakes that I would like to highlight. As always - you can read about those both in [Polish](http://powershellpl.net/2013/05/25/scripting-games-moje-notatki-4/) and in [English](http://becomelotr.wordpress.com/2013/05/25/event-4-my-notes/). Enjoy! diff --git a/content/articles/2013-05-28-scripting-games-event-4-winners.md b/content/articles/2013-05-28-scripting-games-event-4-winners.md deleted file mode 100644 index 0ac17e0be..000000000 --- a/content/articles/2013-05-28-scripting-games-event-4-winners.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Scripting Games Event 4 Winners -authors: - - Don Jones -date: "2013-05-28T13:32:27+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/scripting-games-event-4-winners/ ---- - -We're pleased to announce the winners for Event 4 of The Scripting Games 2013! -Remember that Event 5 is now open for community voting, and that Event 6 opens up near the end of this week. That'll be your last chance to contribute, and shortly after TechEd we'll announce the overall winners. Good luck! -Winners: You can log into [The Scripting Games Web site][1] and go to your Profile page to see your prize. You will be given a prize redemption code and either a URL where you can redeem it, or an e-mail address of the prize provider (they will need the redemption code). All prizes must be claimed by the end of July 2013. I will list winners by username; if you used your e-mail address as your username, then a portion of that will be truncated for your privacy. Anyone can log in and check their Profile page to see if they've won a prize. - - * Event 4 Beginner First Place: amello (free ebook from Manning) - * Event 4 Beginner Second Place: jwoods@__.com (6 months video training from Interface) - * Event 4 Beginner Third Place: Poshsg0606 (1 year of Phoneominal from Start-Automating) - - * Event 4 Advanced First Place: DawnVillejoin (free ebook from Manning) - * Event 4 Advanced Second Place: adweigert (6 months video training from Interface) - * Event 4 Advanced Third Place: JustinK70 (1 year of Phonenominal from Start-Automating) - - * Event 4 Beginner Top CrowdScore: taygibb (free ebook from Manning) - * Event 4 Advanced Top CrowdScore: mikefrobbins (free ebook from Manning) - -These will be listed on our [consolidated list of winners][2], which includes links to the winning entries. -Our CrowdScore winners get a selection of free ebooks from Manning, 1 month of video training from Interface, and $50 gift cards from SAPIEN; 1 prize per winner. Check your profile to see if you've won! -Congratulations to all of our winners! Note that our top three prizes in each category were awarded by our Mighty Panel of Celebrity Judges. Each judge nominated a first, second, and third place winner from the entries that our expert commentators identified as "best." Those nominations were compiled, and in the event of a tie the earliest entry was deemed winner. - - - - [1]: http://scriptinggames.org/ - [2]: http://scriptinggames.org/winners.php diff --git a/content/articles/2013-05-29-notes-for-event-5.md b/content/articles/2013-05-29-notes-for-event-5.md deleted file mode 100644 index 4923f214e..000000000 --- a/content/articles/2013-05-29-notes-for-event-5.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Notes for Event 5 -authors: - - Don Jones -date: "2013-05-29T12:27:33+00:00" -aliases: - - /2013/05/notes-for-event-5/ ---- - -Jan Egil, or Norwegian expert commentator/judge, has posted his learning notes for Event 5:  diff --git a/content/articles/2013-05-29-super-secret-snover-session-at-teched.md b/content/articles/2013-05-29-super-secret-snover-session-at-teched.md deleted file mode 100644 index 639ed5998..000000000 --- a/content/articles/2013-05-29-super-secret-snover-session-at-teched.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "\"Super Secret\" Snover Session at TechEd" -authors: - - Don Jones -date: "2013-05-29T12:39:09+00:00" -categories: - - Announcements - - News -aliases: - - /2013/05/super-secret-snover-session-at-teched/ ---- - -So what's with the ["super secret" PowerShell session][1] being given by Jeffrey Snover at TechEd 2013? -First, if you'll be in New Orleans, plan to attend this. The deal is pretty simple: Microsoft has got a lot of information pertaining to v.Next under embargo, which means people can't talk about it yet, or even tell you the title of the session. But trust me, if you're interested in the world of DevOps (and if you use PowerShell, you are), you'll want to be at this session. PowerShell MVPs were given a sneak peek at what Snover will be discussing, and it'll frankly blow your mind. It will, over the long haul, put PowerShell in a completely new place - and you'll want to get in on the ground floor. -Like most sessions at TechEd, it appears as if they'll be recording this, so even if you can't attend in person be sure to check back once the recording is live. That usually takes a day or two after the talk itself. -And spread the word a bit. There's a bit of a worry that, because even the _title_ of the session won't be announced until TechEd formally commences, folks won't have much time to realize the session exists and it'll go empty. We don't want that to happen - as with any new developments in PowerShell, it's crucial to get folks thinking about it early, to get their feedback early, and to start planning for it early. - - [1]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/MDC-B302#fbid=nMfDOO99OjI diff --git a/content/articles/2013-05-30-notes-on-event-5.md b/content/articles/2013-05-30-notes-on-event-5.md deleted file mode 100644 index a842a21fb..000000000 --- a/content/articles/2013-05-30-notes-on-event-5.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Notes on Event 5 -authors: - - Art Beane -date: "2013-05-30T13:54:17+00:00" -aliases: - - /2013/05/notes-on-event-5/ ---- - -Into the home stretch and the entries just keep getting better! The only advice I'd like to offer this time is to be careful to read the instructions carefully. They included the specific folder where the files were located and I noticed several misinterpretations in the scripts. Some included a mandatory Path parameter and others had a default Path that was not the specified folder. Including an optional Path with the correct default would certainly be acceptable, but not those variations. -The instructions also included some ambiguity about what the log file actually contains. Was the client IP address in the first column (as specified in the instructions) or in a different column (as presented in the example logs)? There were a number of entries that just searched the logs for IP addresses and returned all of them. This approach would not be able to distinguished between the client and server addresses, which would give a wrong answer. Another approach searched for the "c-ip" column, but this would only work if the log files were as in the samples. Another method, select the second IP address in a line would also only work on the sample log style. There weren't many entries that supported both file types, but one of them did it in a very concise manner, checking the first and ninth columns for an IP address and selecting the correct one. -Most of the entries used _Sort-Object -Unique_ or _Select-Object -Unique_ to eliminate duplicates, which was the first approach that I thought of. There were several entries, however, that used alternate methods that I thought were quite clever applications of PowerShell technology: hash tables with the IP address as the key, and _Group-Object_ on the IP address. Both options provided a fairly simple way to also report the instance count for each address. -Returning an instance count sounds like an interesting option, but after thinking about it some more, I'm not so sure. Counts of the number of sessions and the hits per session would be much more interesting than the raw hits count. But that's way, way beyond the scope of this event. -Anyway, just one more event to go. I'm expecting a spectacular finish! diff --git a/content/articles/2013-05-31-free-powershell-workshop-video-from-techmentor-and-me.md b/content/articles/2013-05-31-free-powershell-workshop-video-from-techmentor-and-me.md deleted file mode 100644 index b2f19ca97..000000000 --- a/content/articles/2013-05-31-free-powershell-workshop-video-from-techmentor-and-me.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Free PowerShell Workshop Video from TechMentor and Me -authors: - - Don Jones -date: "2013-05-31T12:16:42+00:00" -categories: - - Training -aliases: - - /2013/05/free-powershell-workshop-video-from-techmentor-and-me/ ---- - -At the last [TechMentor][1] (in Orlando), I did a Windows PowerShell pre-conference workshop. The conference was kind enough to let me record it - I basically just used Camtasia, so this isn't a professional video by any stretch, but it gives you an idea of what a TechMentor conference is like. Obviously, my focus was on the folks in the room, but you can see all of the demos and hear me pretty clearly. [You can view the video for free][2], although note that registration is required. - - [1]: http://techmentorevents.com - [2]: http://techmentorevents.com/forms/don-jones-video.aspx diff --git a/content/articles/2013-05-31-meet-the-scripting-games-judges.md b/content/articles/2013-05-31-meet-the-scripting-games-judges.md deleted file mode 100644 index 67df4da89..000000000 --- a/content/articles/2013-05-31-meet-the-scripting-games-judges.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Meet the Scripting Games Judges -authors: - - Glenn Sizemore -date: "2013-05-31T20:42:17+00:00" -categories: - - Announcements -aliases: - - /2013/05/meet-the-scripting-games-judges/ ---- - -I can honestly say that the interactions that I"™ve had with the PowerShell community over the past five years have been some of the most fulfilling. There is something to watching someone learn to script. Some plateau artificially mainly because they don"™t want to leave the GUI. Often they"™re forced into learning PowerShell and stubbornly go into trying to learn as little as possible. If you competed this year you do not fall into that category. You fall into the category that I love working with Talented Specialist that we watch graduate from good to great. I"™m happy to invite this year"™s class into "the club". -For everyone else I have an invitation. If you would like to know what makes a good script great and will be in New Orleans next week for TechEd 2012 NA, then please join the judges of the Scripting Games as we do a public Code review. Simply put we"™ll take a script and as a group discuss what makes it good and bad. We"™re calling it best practices for the real word, but you"™ll see it listed in the directory under [BOF-ITP23][1]. - - [1]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/BOF-ITP23#fbid=LcGTktzJqbc "BOF-ITP23" diff --git a/content/articles/2013-05-31-scripting-games-week-5.md b/content/articles/2013-05-31-scripting-games-week-5.md deleted file mode 100644 index e9053cbce..000000000 --- a/content/articles/2013-05-31-scripting-games-week-5.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Scripting Games Week 5 -authors: - - Glenn Sizemore -date: "2013-05-31T15:02:17+00:00" -categories: - - Scripting Games -aliases: - - /2013/05/scripting-games-week-5/ ---- - -I loved this week"™s challenge as it had the right wiggle room to bring out the best in our participants.  Of course, this is also the point in the games when we start to get everyone"™s "A" game.  At this point even our new competitors are all warmed up and in the zone, and let me tell you the entries this week show it!   I want to start with the beginners as I actually ran almost every entry this week.  Honestly everyone fell into one of three buckets Select-string, Import-CSV or ,Foreach.  Let me explain there where three primary means to solve this problem.  Use Select-String and some basic text parsing to get the ip addresses, and then using Select-Object to filter.  Converting the logs to objects with Import-CSV and using Where-Object to filter.  Or using Foreach and a combination of if and where. -They are all three correct, so how does one judge one from another?  As this is a competition I used speed as the determining gauge.  For a long time I was convinced that the following was about perfect.  Quick simple and accurate. - - -`Select-String -Path C:\Reporting\LogFiles\*\*.log -Pattern "(\b\d{1,3}\.){3}.\d{1,3}\b" -AllMatches | -Select-Object -Unique @{Label="IP";Expression={$_.matches[1]}} -`I was particularly drawn to this approach because it only used two cmdlets if that"™s not PowerShell I don"™t know what is. At first I was convinced converting the logs to objects was a waste.  Let me explain.  Over the course of this past month you"™ve heard us rant and rave about objects, and how PowerShell is not text, but rich .Net objects.  For the most part that is an iron law, but it"™s a law with an exception.  There is one place where text is just text, log files!  That"™s why I loved this event.  This is the exception where all the old tricks still apply and where we found out which of you really know your regular expressions.  However in this one instant since we had a well formed log converting to a CSV was actually faster.   I wasn"™t expecting that, but consider my gold standard example takes about 10 Seconds on my PC.   The Following finishes in 3! - - -`$LogFilePath = 'C:\Reporting\LogFiles' -$header = 'date','time','s-ip','cs-method','cs-uri-stem','cs-uri-query','s-port','cs-username','c-ip','cs(User-Agent)','sc-status','sc-substatus','sc-win32-status','time-taken' -Import-Csv -Path $(Get-ChildItem -Path $LogFilePath -File -Recurse).FullName -Header $header -Delimiter ' ' | -# if the contents of 'c-ip' can be converted to an IP address then it is a valid IP -Select-Object @{n='ClientIP';e={if ([IPAddress]$_.'c-ip'){ $_.'c-ip' }}} | -Sort-Object -Property 'ClientIP' -Unique -`Now I"™m not crazy about that entry it"™s hard to follow, and will always return a blank string, but if you really look what makes it work is the author is offloading the IP filtering to the [IPAddress] type accelerator.  That is brilliant, and is x5 faster than a regular expression, which really adds up when you"™re performing over 6k comparisons.   I know the general consensus is to leave the .Net stuff alone, but I have no religion when it comes to this stuff. If it"™s better it"™s better and in this instance it was better. -But that"™s not the end of the story. While sorting through the entries I found the following solution. - - -`Get-ChildItem -File C:\Reporting\LogFiles -Recurse | Get-Content | - # Selecting "GET /" gives us only the lines we want from the files. - Select-String -Pattern "GET /" | - # Split the remaining lines into an array and write element 8, the IP, to a file. - ForEach-Object {$_.Line.Split("")[8] } | Select-Object -Unique @{Name="Source Address"; Expression={$_}} -`Now that"™s an old school PowerShell solution if I"™ve ever seen one, and you know what it"™s fast as hell!  There"™s no validation of any kind. It will only work with provided source files, and it"™s absolutely perfect!  You see the goal is to get the job done.  We don"™t always have to author a tool that can be used by the world.  There is nothing wrong with leveraging your brain and cheating a little! -As for the advanced entries I think they"™ve been adequately covered by my fellow judges.  In general my feedback would be to start a slow clap for the group.  There not perfect, but as a group you"™ve learned from the feedback over this past month and man does it show! Heading into the final stretch I encourage you all to treat this last entry as your victory lap as you"™ve all already one. -~Glenn diff --git a/content/articles/2013-05-31-tobias-event-5-notes.md b/content/articles/2013-05-31-tobias-event-5-notes.md deleted file mode 100644 index 14dbaadd7..000000000 --- a/content/articles/2013-05-31-tobias-event-5-notes.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Tobias' Event 5 Notes" -authors: - - Don Jones -date: "2013-05-31T12:12:45+00:00" -aliases: - - /2013/05/tobias-event-5-notes/ ---- - -Find 'em at diff --git a/content/articles/2013-06-01-as-the-scripting-games-wrap-up.md b/content/articles/2013-06-01-as-the-scripting-games-wrap-up.md deleted file mode 100644 index 7e4aeed26..000000000 --- a/content/articles/2013-06-01-as-the-scripting-games-wrap-up.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: As The Scripting Games Wrap Up… -authors: - - Don Jones -date: "2013-06-01T18:39:15+00:00" -categories: - - Scripting Games -aliases: - - /2013/06/as-the-scripting-games-wrap-up/ ---- - -We've still got, oh, about 48 hours or so for Event 6 submissions, and then of course voting and judging. **But** I wanted to take a second and let you know what this year's Games looked like: -We've logged over 1,100 entries. Almost 13,000 votes. More than 6,700 comments. That's a lot - and it'll all be [archived][1] once the final votes are tallied and prizes awarded. There will be ZIP files of entries for each track and event, and I encourage you to download them over the Summer - we won't necessarily archive them permanently. -We've seen an enormous range of techniques and approaches, and generated hundreds of learning notes across more than a dozen active expert commentators. We've awarded - with some yet to be handed out - thousands of dollars worth of prizes. -This is also a good time to start collecting general feedback on the Games, so feel free to drop into our [official post-mortem thread and offer your feedback][2]. **Read the introductory post in that thread** before you post, please. I'm asking for a specific feedback format at this time, although you're always welcome to open your own thread if you have something specific or off-format you want to offer. I ask only that you keep things _constructive_ and _professional._ -Thanks to everyone who participated in the Games. We're formulating our next event, so stay tuned. - - [1]: http://scriptinggames.org/entries - [2]: https://powershell.org/forums/topic/post-mortem-likedislike/ diff --git a/content/articles/2013-06-03-scripting-games-2013-event-5-notes.md b/content/articles/2013-06-03-scripting-games-2013-event-5-notes.md deleted file mode 100644 index c64e4cd02..000000000 --- a/content/articles/2013-06-03-scripting-games-2013-event-5-notes.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Scripting Games 2013: Event 5 Notes" -authors: - - Boe Prox -date: "2013-06-04T03:36:46+00:00" -aliases: - - /2013/06/scripting-games-2013-event-5-notes/ ---- - -With week 5 in the books, I can see that everyone just continues to grow and show some great submissions. Of course, nothing is perfect and can always show areas of improvement, but trust me, you are all doing an excellent job! -I was hoping to have this article completed prior to now, but between a flight to Tech Ed and forgetting my power cord for the laptop, I am just now getting this accomplished. Better late than never :). -With that, head over to my blog to check out my notes on Event 5 [here](http://learn-powershell.net/2013/06/03/scripting-games-2013-event-5-notes/). diff --git a/content/articles/2013-06-04-microsoft-announces-powershell-v4-dsc.md b/content/articles/2013-06-04-microsoft-announces-powershell-v4-dsc.md deleted file mode 100644 index 823d109eb..000000000 --- a/content/articles/2013-06-04-microsoft-announces-powershell-v4-dsc.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Microsoft announces PowerShell v4, DSC -authors: - - Don Jones -date: "2013-06-04T14:00:15+00:00" -categories: - - Announcements -aliases: - - /2013/06/microsoft-announces-powershell-v4-dsc/ ---- - -Yesterday at TechEd North America, Jeffrey Snover and Kenneth Hansen began describing features to be delivered with PowerShell v4 in Windows Server 2012 R2 (the company has not yet announced availability dates for either). -In particular, a new feature called Desired State Configuration promises to become the foundation for some pretty serious expansion. Essentially, DSC lets administrators write a declarative "script" that describes what a computer should look like. PowerShell takes that, matches the declarative components with underlying modules, and ensures that the computer does, in fact, look like that. Nearly anything can be checked and controlled: roles, features, files, registry keys - anything, in fact, that a PowerShell module can do. -The architecture includes the notion of centrally stored declarative scripts, and the ability to dynamically deploy supporting modules on an as-needed basis to computers that are checking themselves. A System Center Virtual Machine Manager demonstration utilized the feature to dynamically spin up brand-new VM instances and have them immediately reconfigure to their desired state. -At first glance, it's easy to see "more Microsoft stuff" in this feature. After all, the company has previous given us Dynamic Systems Management (DSM), various universal "configuration languages," and even System Center Configuration Manager's somewhat primitive configuration auditing feature. But keep in mind that DSC will **be a core part of the OS.** That means product teams and ISVs can rely on it being there, with no other dependencies to worry about. DSC is also built around DMTF standards - like the MOF format - making it natively suitable for cross-platform management. A demo from Opscode using their Chef product showed clever use of the new DSC feature. -Hansen also mentioned that PowerShell modules will be deployable through DSC as ZIP files, helping make them more self-contained (not entirely unlike PECL packages in the Unix world). -There has been no announcement as yet on how far back PowerShell v4 will be made available, nor whether or not DSC is a PowerShell feature or a Windows Server 2012 R2 feature. If it is indeed a PowerShell feature (which I suspect it is), then it'll be available on any system with v4 installed. That will hopefully include at least Windows 7, Windows Server 2008 R2, and later. diff --git a/content/articles/2013-06-04-scripting-games-event-5-winners.md b/content/articles/2013-06-04-scripting-games-event-5-winners.md deleted file mode 100644 index 574311361..000000000 --- a/content/articles/2013-06-04-scripting-games-event-5-winners.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Scripting Games Event 5 Winners -authors: - - Don Jones -date: "2013-06-04T14:08:44+00:00" -categories: - - Scripting Games -aliases: - - /2013/06/scripting-games-event-5-winners/ ---- - -We're pleased to announce the winners for Event 5 of The Scripting Games 2013! -Remember that Event 6 is now open for community voting, and that Event 6 opens up near the end of this week. That'll be your last chance to contribute, and shortly after TechEd we'll announce the overall winners. Good luck! -Winners: You can log into [The Scripting Games Web site][1] and go to your Profile page to see your prize. You will be given a prize redemption code and either a URL where you can redeem it, or an e-mail address of the prize provider (they will need the redemption code). All prizes must be claimed by the end of July 2013. I will list winners by username; if you used your e-mail address as your username, then a portion of that will be truncated for your privacy. Anyone can log in and check their Profile page to see if they've won a prize. - - * Event 5 Beginner First Place: KmTatar (free ebook from Manning **and a copy of SAPIEN PowerShell Studio!**) - * Event 5 Beginner Second Place: skyrabin_yuri@__.ru (6 months video training from Interface) - * Event 5 Beginner Third Place: PShellMan (1 year of Phoneominal from Start-Automating) - - * Event 5 Advanced First Place: mjolinor (free ebook from Manning **and a copy of SAPIEN PowerShell Studio!**) - * Event 5 Advanced Second Place: mikefrobbins (6 months video training from Interface) - * Event 5 Advanced Third Place: dchristian3188@__.com (1 year of Phonenominal from Start-Automating) - - * Event 5 Beginner Top CrowdScore: KmTatar (free ebook from Manning) - * Event 5 Advanced Top CrowdScore: _Emin_ (free ebook from Manning) - -These will be listed on our [consolidated list of winners][2], which includes links to the winning entries. -Our CrowdScore winners get a selection of free ebooks from Manning, 1 month of video training from Interface, and $50 gift cards from SAPIEN; 1 prize per winner. Check your profile to see if you've won! -Congratulations to all of our winners! Note that our top three prizes in each category were awarded by our Mighty Panel of Celebrity Judges. Each judge nominated a first, second, and third place winner from the entries that our expert commentators identified as "best." Those nominations were compiled, and in the event of a tie the earliest entry was deemed winner. - - - - [1]: http://scriptinggames.org/ - [2]: http://scriptinggames.org/winners.php diff --git a/content/articles/2013-06-05-more-powershell-v4-and-dsc-details.md b/content/articles/2013-06-05-more-powershell-v4-and-dsc-details.md deleted file mode 100644 index 313c2162b..000000000 --- a/content/articles/2013-06-05-more-powershell-v4-and-dsc-details.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: More PowerShell v4 and DSC Details -authors: - - Don Jones -date: "2013-06-05T14:22:01+00:00" -categories: - - Announcements -aliases: - - /2013/06/more-powershell-v4-and-dsc-details/ ---- - -Here's what I know, much [based on a TechEd talk this week:][1] -We can expect PowerShell v4 to ship in the Windows Management Framework, as with previous versions. It will be preinstalled on Windows Server 2012 R2 and what they're calling Windows 8.1; the default execution policy will be RemoteSigned, and on the server OS Remoting will be enabled by default. Microsoft's past policy has been "current version and two back," and if they follow that then we'll get WMF 4.0 on Windows 7, Windows Server 2008 R2, and later. That would leave out Server 2008, if in fact they follow that same policy. -DSC itself starts with a PowerShell script that's mainly declarative code: Make sure x is installed, make sure y isn't installed, etc. PowerShell compiles that into a MOF, which can be transmitted to managed endpoints (computers). The built-in mechanisms for deployment aren't as complex or flexible as GPO or SCCM targeting, but you could use either GPO or SCCM to deploy those MOFs. That's the "push" model - you push MOFs out to managed nodes. A "pull" model requires you to configure managed nodes to have a URI and UDDI, and they check that URI for their MOFs. -DSC runs every 15 minutes or every 30 minutes by default, depending on whether you're using push or pull, and you can configure that time. Right now there's no feedback or reporting - it's a bit like GPO, where you push out the setting and it enforces it, but that's it. -When DSC runs, it takes your "desired state" MOFs and starts running "DSC resources." These resources are special modules that implement a predefined set of functions - a Get, a Test, and a Set function, to be specific. I expect MS product groups to provide these - the Exchange team will likely someday provide resources that can check/set Exchange settings, for example. You can also write your own modules. DSC calls the "test" to see if your setting is or isn't configured at that time; it calls the "set" to add/remove/whatever the setting. So the real work is done by these special modules - and those modules can do whatever they want. Write to the registry, run commands, call .NET classes, _anything._ -So there's two scripts: The "desired state" script that gets compiled to a MOF (so you shouldn't ever have to mess directly with MOFs yourself), and the "implementing module" that has the three special functions which actually do all the work. -In the "pull" model, those special modules can be dynamically downloaded by a managed node. "Hey, I grabbed this desired state MOF, and it seems to require 12 modules, so I'll go to the same URI and look for those 12 modules." You provide those modules as ZIPs, and PowerShell can grab the ZIP, expand it into the proper location, and then run the modules as needed. -Personal analysis (meaning this is my opinion, not something MS has said): I can see this DSC feature integrating super-well with some future version of SCCM. DSC writes out some local file with configuration details, and the SCCM client grabs it and feeds it up to the database. Those MOFs could potentially be pulled from a Distribution Point by the client, handed off to PowerShell, and run on a scheduled basis. I can also see DSC starting to supplant GPO in a lot of ways. After all, _most_ GPO stuff is just reg hacks in a special section of the registry; there's no reason DSC couldn't do that - and it does it on a more frequent basis, making it more reliable. Right now, the targeting of a MOF isn't as flexible as GPO targeting... but that could obviously evolve. Until more of the architectural details emerge, we won't know for sure... and this is of course a v1 feature that will doubtless be expanded on and invested in as the team moves forward. We do know that the first release of DSC will not have a lot of those underlying "resource modules," which means you won't actually be able to configure much. This is a feature the team needs to put in place so that folks can start building those things... so this is going to take a cycle or two to start being really useful. -There's obviously still a lot under wraps here, and this is all subject to change and tweaking as the team moves toward release. We're told there will be some kind of public preview - but they haven't announced a date on that. Personally, with the Build conference coming up, we can imagine that Microsoft will try and have a preview release ready for that show. There's also no announcement of ship date. It's still too early to tell, and I want to emphasize that the company hasn't announced _any_ dates. We can but try to make educated guesses at this stage. - - [1]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/MDC-B400#fbid=8yK1U1eJ0GQ diff --git a/content/articles/2013-06-07-notes-for-event-6.md b/content/articles/2013-06-07-notes-for-event-6.md deleted file mode 100644 index d6e315e0c..000000000 --- a/content/articles/2013-06-07-notes-for-event-6.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Notes for Event 6 -authors: - - Art Beane -date: "2013-06-07T13:26:41+00:00" -aliases: - - /2013/06/notes-for-event-6/ ---- - -When I read the instructions for event 6, I thought that here's a tough one. A lot of competitors won't have access to a test environment with Windows Server 2012 and Virtual Machines that they can actually work with. So, I expected that many of the entries wouldn't get tested and intended to forgive minor errors that would have shown up in testing. -Well, there was one thing that really surprised me. The instructions were quite clear about minimizing "Are You Sure" queries to the user, but you can count on one hand the number of entries that included _-Confirm:$false_. This is just an example of why it's so important to read the problem statement very carefully and extract the solution requirements. Then, after creating the solution, go back and verify that the requirements have all been met. Many of the entries called out this requirement in the comments, but then didn't account for it in the script. -I had mentioned in a previous blog entry that, particularly in the advanced entries, the author was working too hard. Sometimes this means putting more emphasis on "completeness" than in solving the problem. Here's an example of a wasted effort. A few entries used the _[ValidateNotNullOrEmpty()]_ test for a possible alternate to the default value for "Server".  Because there is a default value for the parameter, it won't be null or empty making this test unnecessary. Here, give this a try: - - -`function Test-NullOrEmpty { [CmdletBinding()] Param ( [ValidateNotNullOrEmpty()] $Name = "Server" ) "Got $Name" } Test-NullOrEmpty -`Note that calling the function without a named parameter just assigns the default value. In order to make it fail you have to deliberately call the function with an empty value (_Test-NullOrEmpty -Name_), which is not going to happen in the real world. -I know that these are just nit-picking -- and if these are examples of the nits in the Event 6 entries, then CONGRATULATIONS!! y'all did a mighty fine job of solving the problem. Calling out these issues is just intended as a learning opportunity. There are lots and lots of correct ways to write PowerShell solutions, it's just that some are more efficient or take less typing than others. And learning about them is one of the important results of participating in the games. -Thanks to all of you for your efforts! diff --git a/content/articles/2013-06-08-event-6-judges-notes-from-jan-egil-ring.md b/content/articles/2013-06-08-event-6-judges-notes-from-jan-egil-ring.md deleted file mode 100644 index ecf43ffab..000000000 --- a/content/articles/2013-06-08-event-6-judges-notes-from-jan-egil-ring.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Event 6 Judge's Notes from Jan Egil Ring" -authors: - - Don Jones -date: "2013-06-09T01:25:00+00:00" -aliases: - - /2013/06/event-6-judges-notes-from-jan-egil-ring/ ---- - - has Jan Egil's thoughts on the final event. diff --git a/content/articles/2013-06-08-last-events-my-notes-and-scripts.md b/content/articles/2013-06-08-last-events-my-notes-and-scripts.md deleted file mode 100644 index dfcf15349..000000000 --- a/content/articles/2013-06-08-last-events-my-notes-and-scripts.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Last events: my notes and scripts." -authors: - - Bartek Bielawski -date: "2013-06-08T20:46:30+00:00" -aliases: - - /2013/06/last-events-my-notes-and-scripts/ ---- - -Oops! Looks like I totally forgot about posting what I did over here. Sorry! -In order of appearance: -[Event 5 - script](http://becomelotr.wordpress.com/2013/05/28/event-5-my-way/) -[Event 5 - notes](http://becomelotr.wordpress.com/2013/06/02/event-5-my-notes/) -[Event 6 - script](http://becomelotr.wordpress.com/2013/06/05/event-6-my-way/) -[Event 6 - notes](http://becomelotr.wordpress.com/2013/06/08/event-6-my-notes/) -This is last event, and I would like to thank everybody who took part in this games. Thank you guys for great ideas, inspiration, feedback... It was really educational experience for me (as it was in the past), and I hope it was educational for you too. And - congratulations for all the winners. 🙂 diff --git a/content/articles/2013-06-09-scripting-games-2013-event-6-notes.md b/content/articles/2013-06-09-scripting-games-2013-event-6-notes.md deleted file mode 100644 index cc631efb7..000000000 --- a/content/articles/2013-06-09-scripting-games-2013-event-6-notes.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Scripting Games 2013: Event 6 Notes" -authors: - - Boe Prox -date: "2013-06-10T02:43:58+00:00" -aliases: - - /2013/06/scripting-games-2013-event-6-notes/ ---- - -We have finally hit the final event of the 2013 Scripting Games! The past 6 weeks have given us many amazing scripts and some that were in need of extra work. Regardless, for those of you who have finished all 6 scripts in your respective, I say Congratulations! You have hit the finish line sprinting hard to the end! Now you can sit back and know that you made it and have learned (hopefully) some great things along the way. Remember, not only have you learned some new techniques, but also the techniques that you have used have taught others how to write better scripts! -Check out the rest of my notes on my [blog here](http://learn-powershell.net/2013/06/09/scripting-games-2013-event-6-notes/)! diff --git a/content/articles/2013-06-10-call-for-debates.md b/content/articles/2013-06-10-call-for-debates.md deleted file mode 100644 index cf17bb7a7..000000000 --- a/content/articles/2013-06-10-call-for-debates.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Call for Debates! -authors: - - Don Jones -date: "2013-06-10T14:20:00+00:00" -categories: - - Announcements - - Scripting Games -aliases: - - /2013/06/call-for-debates/ ---- - -As the Scripting Games begin to wind down, I know that we've come across a number of divergent opinions, especially in the comments. "You shouldn't use .NET classes!" says one comment, "you should have done this with a .NET class" says another comment _in the same entry. _Fun. It's great to see those differences - but it'd be better to _discuss_ them. -So I'm asking everyone in the Games: Go through your comments on all of your entries. Find comments that you disagree with - but that you could possibly see someone making an argument for (and that you'd perhaps argue against). Post those here as a comment, or email me (there's a contact form on the Site Info tab). I want to collect these, and start a series of discussions where we can, jointly, start to hammer out some patterns and practices that we, as a community, feel work well. Some of those may have exceptions (rules always do) - "never use a .NET class _when there's a cmdlet that can do the same thing, _but otherwise go nuts" is one example. -Fire away. For now, you don't need to put your argument for or against - I'm just collecting the topics that we've seen disagreement or differing opinions on. Discussion will follow! -The result of this will be a community-guided Best Practices ebook, which I'll assemble and we'll give away for free. I might even build that, initially, as a wiki, so that folks could contribute to it over time. Will see - that's a bit of extra software. diff --git a/content/articles/2013-06-11-overall-winners-of-the-scripting-games.md b/content/articles/2013-06-11-overall-winners-of-the-scripting-games.md deleted file mode 100644 index 908cf4692..000000000 --- a/content/articles/2013-06-11-overall-winners-of-the-scripting-games.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Overall Winners of the Scripting Games -authors: - - Don Jones -date: "2013-06-11T14:24:22+00:00" -categories: - - Scripting Games -aliases: - - /2013/06/overall-winners-of-the-scripting-games/ ---- - -**Congratulations to our top winners, **determined by our expert judges (and in this case we also considered their CrowdScores), **mikefrobbins** and **taygibb**, who have just won a free pass to Microsoft TechEd Europe or Microsoft TechEd North America 2014. Instructions are in your profile for claiming your prize. It is transferrable, but must be claimed/transferred by the end of July. -**Congratulations to our top voters/commenters**, Klaus_Schulte and Poshsg0606. They were chosen randomly for this award, although I did review their comments and scores to ensure they were all meaningful and consistent. They've won free passes to the PowerShell Summit North America 2014; these are transferrable and must be claimed/transferred by the end of July. -Thanks to everyone who participated in The Scripting Games this year. We've received a lot of feedback from you, and very much appreciate the time and spirit you spent to offer it. We're taking it all into consideration for our next event. diff --git a/content/articles/2013-06-11-powershell-great-debate-error-trapping.md b/content/articles/2013-06-11-powershell-great-debate-error-trapping.md deleted file mode 100644 index 95728ebea..000000000 --- a/content/articles/2013-06-11-powershell-great-debate-error-trapping.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: "PowerShell Great Debate: Error Trapping" -authors: - - Don Jones -date: "2013-06-11T21:17:36+00:00" -aliases: - - /2013/06/powershell-great-debate-error-trapping/ ---- - -In the aftermath of The Scripting Games, it's clear we need to have several community discussions - thus, I present to you, The Great Debates. These will be a series of posts wherein I'll outline the basic situation, and you're encouraged to debate and discuss in the comments section. -The general gist is that, during the Games, we saw different people voting "up" and "down" for the exact same techniques. So... which one is right? Neither! But all approaches have pros and cons... so that's what we'll discuss and debate. In the end, I'll take the discussion into a community-owned (free) ebook on patterns and practices for PowerShell. - -## Today's Debate: Error Trapping - -There are a few different approaches folks take to trapping an error (I'm not discussing _capturing_ the error, just knowing that one occurred). -Hopefully the Trap construct is familiar to everyone; I've always believed it's awkward and outdated. The product team has said as much; it was just the best they could do in v1 given time constraints. Its use of scope makes it especially tricky sometimes. -Try...Catch...Finally seems to be what a lot of people prefer. It's procedural and structured, and it works against any terminating exception. You do have to remember to make errors into terminating exceptions (**-EA Stop** on a cmdlet, for example), but it's a very programmatic approach. -I see folks sometimes use $?: - - -`Do-Something -If ($?) { - # deal with it -} -`A "con" of this approach is that $? doesn't indicate an error. It indicates whether or not _the previous command  -thinks - it completed successfully. _It's reliable with _most_ cmdlets - but I've seen it fail for a lot of external utilities. Given that it isn't 100% reliable as an indicator, I tend to shy away from it. I'd rather learn one way that always works, and that's been Try/Catch for me. -Try/Catch also makes it easy to catch different exceptions differently. I don't always need to do so... but again, I'd rather learn _one_ way to do things that _always_ works and provides more flexibility. I don't want to use $? sometimes, and then use something else other times, because that's more to remember, teach, learn, etc. -Some folks will do an **$error.clear()**, clearing the error collection, and then run a command. They'll then check **$error.count** to see if it's nonzero. I don't like that as much because it looks messy to me, and again - it doesn't let me easily handle different exceptions as easily as Try/Catch. -Ok... your thoughts? - -[boilerplate greatdebate] diff --git a/content/articles/2013-06-11-scripting-games-event-5-winners-1.md b/content/articles/2013-06-11-scripting-games-event-5-winners-1.md deleted file mode 100644 index 82c91696d..000000000 --- a/content/articles/2013-06-11-scripting-games-event-5-winners-1.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Scripting Games Event 6 Winners -authors: - - Don Jones -date: "2013-06-11T14:17:31+00:00" -categories: - - Scripting Games -aliases: - - /2013/06/scripting-games-event-5-winners-1/ ---- - -We're pleased to announce the winners for Event 6 of The Scripting Games 2013! -Winners: You can log into [The Scripting Games Web site][1] and go to your Profile page to see your prize. You will be given a prize redemption code and either a URL where you can redeem it, or an e-mail address of the prize provider (they will need the redemption code). All prizes must be claimed by the end of July 2013. I will list winners by username; if you used your e-mail address as your username, then a portion of that will be truncated for your privacy. Anyone can log in and check their Profile page to see if they've won a prize. - - * Event 6 Beginner First Place: chanced (free ebook from Manning **and a copy of SAPIEN Software Suite!**) - * Event 6 Beginner Second Place: marches (6 months video training from Interface **and a copy of SAPIEN PrimalScript!**) - * Event 6 Beginner Third Place: jb.lewis (1 year of Phoneominal from Start-Automating) - - * Event 6 Advanced First Place: mikefrobbins (free ebook from Manning **and a copy of SAPIEN Software Suite!**) - * Event 6 Advanced Second Place: DaveGarnar (6 months video training from Interface **and a copy of SAPIEN PrimalScript!**) - * Event 6 Advanced Third Place: Alexy (1 year of Phonenominal from Start-Automating) - - * Event 6 Beginner Top CrowdScore: taygibb (free ebook from Manning) - * Event 6 Advanced Top CrowdScore: CarloM (free ebook from Manning) - -These will be listed on our [consolidated list of winners][2], which includes links to the winning entries. -Our CrowdScore winners get a selection of free ebooks from Manning, 1 month of video training from Interface, and $50 gift cards from SAPIEN; 1 prize per winner. Check your profile to see if you've won! -Congratulations to all of our winners! Note that our top three prizes in each category were awarded by our Mighty Panel of Celebrity Judges. Each judge nominated a first, second, and third place winner from the entries that our expert commentators identified as "best." Those nominations were compiled, and in the event of a tie the earliest entry was deemed winner. - - - - [1]: http://scriptinggames.org/ - [2]: http://scriptinggames.org/winners.php diff --git a/content/articles/2013-06-12-charlotte-user-group-july-meeting.md b/content/articles/2013-06-12-charlotte-user-group-july-meeting.md deleted file mode 100644 index 4aecf0922..000000000 --- a/content/articles/2013-06-12-charlotte-user-group-july-meeting.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Charlotte User Group July Meeting -authors: - - ScriptingWife -date: "2013-06-13T02:24:30+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/06/charlotte-user-group-july-meeting/ ---- - -Please join us on a special date in July. This month our meeting will be on July 11, 2013 instead of our normal first Thursday of the month due to the holiday. -Microsoft Scripting Guy Ed Wilson will make a presentation on DSC Desired State Configuration for PowerShell V4. -Sign up at the following link in Meetup so we know how many will be there and we can have adequate food for all. - diff --git a/content/articles/2013-06-17-powershell-great-debate-capturing-errors.md b/content/articles/2013-06-17-powershell-great-debate-capturing-errors.md deleted file mode 100644 index 303d87361..000000000 --- a/content/articles/2013-06-17-powershell-great-debate-capturing-errors.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "PowerShell Great Debate: Capturing Errors" -authors: - - Don Jones -date: "2013-06-17T14:30:30+00:00" -aliases: - - /2013/06/powershell-great-debate-capturing-errors/ ---- - -Hot on the heels of [our last Great Debate][1], let's take the discussion to the next logical step and talk about how you like to capture errors when they occur. -The first technique is to use -ErrorVariable: - - -`Try { - Get-WmiObject Win32_BIOS -comp nothing -ea stop -ev mine -} Catch { - # use $mine for error -} -`Another is to use the $Error collection: - - -`Try { - Get-WmiObject Win32_BIOS -comp badname -ea stop -} Catch { - # use $error[0] -} -`And a third is to use $_: - - -`Try { - Get-WmiObject Win32_BIOS -comp snoopy -ea stop -} Catch { - # use $_ -} -`Personally, I've always disliked the last approach, because people don't realize that in some situations $_ can get "hijacked." For example: - - -`Get-Content names.txt | -ForEach-Object { - Try { - Get-WmiObject Win32_BIOS -Comp $_ -EA Stop - } Catch { - # is $_ an error or a computer name? - } -} -`Now, I'm a big not-fan of using pipelines like this in a script, but that's another debate (it's on my list). The point is really that I can't universally, 100% rely on $_... and when someone uses $_ without realizing what's happening, they back themselves into a tricky corner that's difficult to diagnose. Since my big focus is on learning and teaching, I tend to want to teach techniques that are universal and always work the same way. -That said, $error[0] and the -ErrorVariable (-EV) technique return slightly different objects, meaning you have to work with them somewhat differently. -So what's your preference? Why? Which of these don't you like so much... and why? -[boilerplate greatdebate] - - [1]: https://powershell.org/2013/06/11/powershell-great-debate-error-trapping/ "PowerShell Great Debate: Error Trapping" diff --git a/content/articles/2013-06-21-pipeline-or-script-that-is-the-question.md b/content/articles/2013-06-21-pipeline-or-script-that-is-the-question.md deleted file mode 100644 index 740ad9e88..000000000 --- a/content/articles/2013-06-21-pipeline-or-script-that-is-the-question.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Pipeline or Script? That is the Question -authors: - - Don Jones -date: "2013-06-21T17:52:14+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/06/pipeline-or-script-that-is-the-question/ ---- - -When I teach PowerShell classes, I often start by assuring students that, with the shell, you can _accomplish a great deal without ever writing a script. _And it's true - you can. Unlike predecessor technologies like VBScript, PowerShell lets you pack a lot of goodness into a one-liner - or even into several lines run manually in the console. -What I never say is _you can accomplish  -anything - without ever writing a script. _That isn't true. I see folks struggle all the time to squeeze something into a one-liner pipeline, when life would be so much easier if they switched a script-style, procedural approach. -So what's the tipping point? -Actually, it's really easy to spot. You should be writing a script if: - - * -You need to take different actions based on some condition, like send an e-mail if there's data to send, but send nothing if there's no data. - - * You need to do more than one discrete task. Yeah, you can sometimes jam multiple actions into a one-liner using things like passthrough, but it's not consistently available, and the command becomes dreadfully difficult to read and debug. - * You need to run a command repeatedly over time, and each time some of its values will change (scripts offer declarative parameters). - -Many smart folks _start_ in the console to test a command, and then paste it into a script they're working on (I do that, too). And there are other reasons to switch from "running a command in the console" to "banging out a script in the ISE [or editor of choice]." What tips would you offer to a PowerShell newbie to help them get the most from the command-line... but know when it's time to move into a script-based approach? diff --git a/content/articles/2013-06-25-powershell-great-debate-to-accelerate-or-not.md b/content/articles/2013-06-25-powershell-great-debate-to-accelerate-or-not.md deleted file mode 100644 index c7af07238..000000000 --- a/content/articles/2013-06-25-powershell-great-debate-to-accelerate-or-not.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: "PowerShell Great Debate: To Accelerate, or Not?" -authors: - - Don Jones -date: "2013-06-25T14:38:57+00:00" -aliases: - - /2013/06/powershell-great-debate-to-accelerate-or-not/ ---- - -At his [Birds of a feather session at TechEd 2013][1], Glenn Sizemore and I briefly debated something that I'd like to make the topic of today's Great Debate. It has to do with how you create new, custom objects. For example, one approach - which I used to favor, but now think is too long-form: - - -`$obj = New-Object -Type PSObject -$obj | Add-Member NoteProperty Foo $bar -$obj | Add-Member NoteProperty This $that -`We saw some variants in The Scripting Games, including this one: - - -`$obj = New-Object PSObject -Add-Member -InputObject $obj -Name Foo -MemberType NoteProperty -Value $bar -`I generally don't like any syntax that explicitly uses -InputObject like that; the parameter is designed to catch pipeline input, and using it explicitly strikes me as overly wordy, and doesn't really leverage the shell. -Glenn and I both felt that, these days, a hashtable was the preferred approach: - - -`$props = @{This=$that; - Foo=$bar; - These=$those} -`The semicolons are optional when you type the construct that way, but I tend to use them out of habits that come from other languages. The point of our debate was that Glenn would use the hashtable like this: - - -`$obj = [pscustomobject]$props -`Because he feels it's more concise, and because he puts a high value on quick readability. I personally prefer (and teach) a somewhat longer version: - - -`$obj = New-Object -Type PSObject -Prop $props -`Because, I argued, type accelerators like [pscustomobject] aren't documented or discoverable. Someone running across your script can't use the shell's help system to figure out WTF is going on; with New-Object, on the other hand, they've got a help file and examples to rely on. -(BTW, I never worry about ordered hashtables; if I need the output in a specific order, I'll use a custom view, a Format cmdlet, or Select-Object. A developer once explained to me that unordered hashtables are more memory-efficient for .NET, so I go with them). -But the big question on the table here is "to use type accelerators, or no?" You see this in many instances: - - -`[null]Do-Something -# vs. -Do-Something | Out-Null -`Same end effect of course, but I've always argued that the latter is more discoverable, while Glenn (and many others) prefer the brevity of the former. -So we'll make today's Great Debate two-pronged. What approach do you favor for creating custom objects? And, do you tend to prefer type accelerators, or no? -[boilerplate greatdebate] - - [1]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/BOF-ITP23 diff --git a/content/articles/2013-06-28-caution-dont-run-update-help-right-now.md b/content/articles/2013-06-28-caution-dont-run-update-help-right-now.md deleted file mode 100644 index bcbee7eeb..000000000 --- a/content/articles/2013-06-28-caution-dont-run-update-help-right-now.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "[UPDATE: It's Safe] CAUTION: Don't Run Update-Help Right Now" -authors: - - Don Jones -date: "2013-06-28T15:19:22+00:00" -categories: - - Announcements - - PowerShell for Admins -aliases: - - /2013/06/caution-dont-run-update-help-right-now/ ---- - -**UPDATE 2 JULY 2013: Microsoft is informing MVPs that the fix is in, and new help files should be downloadable by (at latest) the morning of 3 July 2013. So get your Update-Help ready to run. [More info][1].** -If you haven't recently run Update-Help... don't. There's a problem with the help files that have been produced recently so that instead of: -**-computername ** -You're getting: -**-computername** -This affects all parameters - no value types will be shown. This has been reported to Microsoft, and they've acknowledged receipt of that report and are investigating. Personally, I believe the problem may be related to internal-use-only tools that are used to create the syntax section of the help files, so hopefully it'll be an easy fix. -The -full and -detail help still shows the correct information, so if you've downloaded the borked help files, you're not totally out of luck. -As far as I can determine, this only currently affects core PowerShell cmdlets, not add-in modules from product teams like Exchange, etc. I believe that's because the core cmdlets were just updated and re-published, something the PowerShell team tends to do a bit more frequently than some of the other product groups. -I'll keep you posted as I learn anything new. - - [1]: http://wp.me/p3priC-25s diff --git a/content/articles/2013-07-01-come-to-powershell-summer-school.md b/content/articles/2013-07-01-come-to-powershell-summer-school.md deleted file mode 100644 index 9912653c3..000000000 --- a/content/articles/2013-07-01-come-to-powershell-summer-school.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Come to PowerShell Summer School! -authors: - - Don Jones -date: "2013-07-01T22:11:31+00:00" -categories: - - Announcements - - PowerShell for Admins - - Training -aliases: - - /2013/07/come-to-powershell-summer-school/ ---- - -Through my company Concentrated Tech, I've decided to run a set of three [PowerShell Summer School][1] classes (click that link for descriptions). These will be a combo of self-study and weekly online sessions, designed to teach Toolmaking, Practical applications of PowerShell, or how to teach PowerShell in a lunch 'n' learn style format. Registration is open from now until August 1st, and you'll also get a discount on some great SAPIEN products to use during class, if you like. -The Toolmaking class will also prepare you for PowerShell VERIFIED EFFECTIVEâ„¢ certification, if you've been considering that. -Two of the classes will incorporate group code reviews of student assignments, to help improve your style; the third will include mock delivery sessions to help polish your delivery skills. All will include a private Q&A forum where you can ask questions both of me and of your fellow students while you're in the self-stufy phase. Classes will meet online, on Wednesdays, for six weeks through August and September. -Planning a vacation in the middle of summer school? It's fine - we can schedule a make-up online session when you get home. I'm also willing to try and make other accommodations to help make this an effective learning experience for everyone. -All of these classes assume a basic level of PowerShell knowledge, although you'll get plenty of review material to help you catch up, or dredge up old memories from when you _last_ tried to learn the shell. -Tell a friend, tell a colleague - I don't do these kinds of offerings all that often; my travel schedule usually precludes it. But a fortuitous schedule has made it possible, so consider taking advantage! - - [1]: http://itpro.concentratedtech.com/training/summerschool.php diff --git a/content/articles/2013-07-01-seeking-editor-for-powershell-org-techletter.md b/content/articles/2013-07-01-seeking-editor-for-powershell-org-techletter.md deleted file mode 100644 index 1f2787878..000000000 --- a/content/articles/2013-07-01-seeking-editor-for-powershell-org-techletter.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Seeking Editor for PowerShell.org TechLetter -authors: - - Don Jones -date: "2013-07-01T18:30:37+00:00" -categories: - - Announcements -aliases: - - /2013/07/seeking-editor-for-powershell-org-techletter/ ---- - -The PowerShell.org TechLetter goes out once a month, and we're looking for an editor to take over the task of building each monthly issue. -You'll need some basic HTML knowledge, and ideally will have a decent HTML editor. Not FrontPage. You'll be given articles in both HTML and Word format, and will need to insert those into a master HTML document and (especially in the case of Word), fix the formatting. You'll have plenty of examples from past issues to work with. Eventually, you'll also schedule the mid-month mailing. -It all takes a few hours once you have the monthly materials in hand, and you'll usually have at least a week to do assembly and mailing. You'll be helping us deliver technical content to a growing audience of more than 3,500 IT professionals and PowerShell enthusiasts! -If you're interested, [contact me][1]. Your pay will be _double_ what I'm currently paid to do this. Which is, sadly, nothing. - - [1]: https://powershell.org/contact-us/ "Contact Us" diff --git a/content/articles/2013-07-02-its-safe-to-run-update-help-and-you-should.md b/content/articles/2013-07-02-its-safe-to-run-update-help-and-you-should.md deleted file mode 100644 index 9c2e5cd90..000000000 --- a/content/articles/2013-07-02-its-safe-to-run-update-help-and-you-should.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "It's Safe to Run Update-Help – and you should!" -authors: - - Don Jones -date: "2013-07-02T17:23:30+00:00" -categories: - - Announcements -aliases: - - /2013/07/its-safe-to-run-update-help-and-you-should/ ---- - -I'm informed that sometime today Microsoft will be posting fixed core cmdlet help files for your downloading pleasure - so it's safe to run Update-Help again, and you should definitely do so. There are likely a lot of fixes and improvements to the help text, and you won't be "losing" the parameter value type information from the SYNTAX section. -Maybe schedule an Update-Help for tomorrow morning? -BTW - kudos to the team at Microsoft for getting this issue fixed so quickly. It's a shame this one snuck past them, but once notified of the problem they really did jump on it. The fact that the problem was (from the public perspective) just with the downloadable help files means it's an easy fix that doesn't involve pushing code out through Windows Update (thank goodness). diff --git a/content/articles/2013-07-02-powershell-great-debate-formatting-constructs.md b/content/articles/2013-07-02-powershell-great-debate-formatting-constructs.md deleted file mode 100644 index 47337f643..000000000 --- a/content/articles/2013-07-02-powershell-great-debate-formatting-constructs.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: "PowerShell Great Debate: Formatting Constructs" -authors: - - Don Jones -date: "2013-07-02T15:23:43+00:00" -aliases: - - /2013/07/powershell-great-debate-formatting-constructs/ ---- - -Here's an easy, low-stakes debate: How do you like to format your scripting constructs? And, more importantly, _why_ do you like your method? -For example, I tend to do this: - - -`If ($this -eq $that) { - # do this -} else { - # do this -} -`I do so out of long habit with C-like syntax, and because when I'm teaching this helps me keep more information on the screen. However, some folks prefer this: - - -`if ($this -eq $that) -{ - # do this -} -else -{ - # do this -} -`Because of my own long habits, I find that hard to read, but it does make it easier to see if your squigglies are lining up properly. It takes up a ton of room, though, and I personally don't follow this as easily as the previous example. -But what's your preference? _Why? _ -[boilerplate greatdebate] diff --git a/content/articles/2013-07-03-how-cloud-first-design-affects-you.md b/content/articles/2013-07-03-how-cloud-first-design-affects-you.md deleted file mode 100644 index d985a1d23..000000000 --- a/content/articles/2013-07-03-how-cloud-first-design-affects-you.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: How Cloud-First Design Affects You -authors: - - Don Jones -date: "2013-07-03T17:29:36+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/07/how-cloud-first-design-affects-you/ ---- - -Today, Brad Anderson (Corporate VP in the Windows Server/System Center unit) posted [the first in what should be a series of "What's New in 2012 R2" articles][1]. In it, Anderson focuses on how Microsoft squeezed so many features into the 2012R2 release in such a short period of time. The short answer, which has been stated by Jeffrey Snover before, is "we build for the cloud first." That means features we're getting in 2012R2 have, for the most part, already been developed, deployed, and in use in some of Microsoft's own cloud services. This is a huge deal. It means their cloud services (think Azure, O365, and the like) get stuff first, where _Microsoft_ can make sure it's stable. They then package those and hand them off to us. -It means we get better stability, but it also means we get better manageability. Look, you don't get excited when you have to deploy a new server, right? You want to automate that stuff. Well, Azure gets _really_ ticked off if they can't automate it, because they do it _thousands times more than you._ So forcing themselves to run a ginormous datacenter also forces the company to make better management tools - which they then hand down to us in an OS release. -If, that is, you're managing your datacenter as if it was your own little... dare I say it, _private cloud._ In other words, if you think of your datacenter as a wee little cloud, and you manage it like one, then you'll get the tech you need, because Microsoft has to develop that tech for themselves. If you want to keep managing it the old-fashioned way... well, you'll get less love. -This whole approach, for me, is the ultimate expression of the Microsoft phrase, "eat the dogfood." Meaning, _use our own products just as our customers would._ You just have to make sure you're eating the same flavor dogfood. Not that MS expects everyone to have their own in-house Azure. No, that's not the point. The point is that they're developing for a world where admins do nothing but create units of automation, and business processes (perhaps outside IT) initiate those processes. You're going to see more and more tools and technologies (um, PowerShell) to facilitate that model of IT operations; you'll see less and less tech that facilitates the old way (meaning, fewer and less robust GUI tools, I'm guessing). -Desired State Configuration (DSC) is probably an ideal example of this new approach. In the past, when you wanted to configure a few hundred machines to look and behave a certain way, you went clicky-click a few hundred times in a GUI. That's _imperative_ configuration; you tell each machine _what to do._ That doesn't scale to cloud-sized proportions, and so now we're getting DSC. DSC is _declarative_ configuration, meaning you tell a group of machines _what to be._ The OS itself figures out how to achieve that state of being. So admins have to shift from thinking "what do I make the machine do" and "how do I tell it what to be." It's not unlike Group Policy, actually, which is also declarative, except that DSC will eventually dwarf Group Policy in terms of reach and capability. -Point being, if you're in the old world of, "I just run through the Wizard and set the machine up," you're not aligned with the new world order. Expect fewer wizards, as product teams shift their investment to building things like DSC resources instead. With 12-18 month product cycles, time is in short supply for each new release. One-at-a-time approaches don't scale to the cloud, so those are likely to get less of that limited amount of time. -Anderson's post is worth a read. It's a little high-level - the man _is_ a Corporate VP, after all - but it shows where Microsoft is pointing their collective brain. It uses the word "delight." It describes in great detail how Microsoft is trying harder to put the customer in the front of every conversation - but, more subtly, it also shows how Microsoft is moving the conversation past "what do customers tell us they want" and more toward "here's what we see customers _needing._" Henry Ford would be proud. - - [1]: http://blogs.technet.com/b/in_the_cloud/archive/2013/07/03/what-s-new-in-2012-r2-beginning-and-ending-with-customer-specific-scenarios.aspx diff --git a/content/articles/2013-07-09-new-blog-posting-on-desired-state-configuration.md b/content/articles/2013-07-09-new-blog-posting-on-desired-state-configuration.md deleted file mode 100644 index 5a2415da5..000000000 --- a/content/articles/2013-07-09-new-blog-posting-on-desired-state-configuration.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: New Blog Posting on Desired State Configuration -authors: - - Darren Mar-Elia -date: "2013-07-09T14:29:29+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/07/new-blog-posting-on-desired-state-configuration/ ---- - -Just an FYI that I posted a walkthrough on my blog, of DSC, including my experiences as it relates to Group Policy: -http://bit.ly/1868BYS diff --git a/content/articles/2013-07-09-would-you-contribute-enterprise-software-reviews-offtopic.md b/content/articles/2013-07-09-would-you-contribute-enterprise-software-reviews-offtopic.md deleted file mode 100644 index 453182969..000000000 --- a/content/articles/2013-07-09-would-you-contribute-enterprise-software-reviews-offtopic.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Would you contribute enterprise software reviews? [OFFTOPIC]" -authors: - - Don Jones -date: "2013-07-09T18:03:55+00:00" -categories: - - News -aliases: - - /2013/07/would-you-contribute-enterprise-software-reviews-offtopic/ ---- - -I've been working with a couple of folks lately who've been trying to review and pilot Active Directory auditing solutions. Both bemoaned the fact that, unlike consumer products of nearly any kind, IT products (specifically, enterprise software in this instance), don't really get reviews from the admins who use those products. -So, I'm curious. If you could (a) anonymously, and (b) without giving your organization's name, would you (c) leave reviews of enterprise software for other admins? You'd need to leave some obvious details, like the approximate size of your organization (number of users), what you expected the software to do, what it really did, what you liked, what you didn't like, and so on. -Such a site would be a lot better (I think) than magazine or "professional" reviews, since you'd be reading the experiences of people who actually use the stuff every day. Yeah, as with any publicly-contributed content, review quality will vary - but you already know how to read between the lines, right? 😉 -Drop a comment, or even send a tweet to [@concentrateddon][1] with "Reviews: YES!" or "Reviews: NO!" comment. Or if you prefer Facebook, leave that comment [on my FB page][2]. It sure seems like we IT professionals could use something like this - it'd be a good place to start researching solutions to particular problems, and a good place to share some real-world intel on how different solutions really work. Even if you don't like _writing_ reviews, would you use such a site as part of your research process? - - [1]: http://twitter.com/concentrateddon - [2]: http://facebook.com/concentrateddon diff --git a/content/articles/2013-07-10-powershell-great-debate-backticks.md b/content/articles/2013-07-10-powershell-great-debate-backticks.md deleted file mode 100644 index 94a248e27..000000000 --- a/content/articles/2013-07-10-powershell-great-debate-backticks.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "PowerShell Great Debate: Backticks" -authors: - - Don Jones -date: "2013-07-10T21:26:50+00:00" -aliases: - - /2013/07/powershell-great-debate-backticks/ ---- - -Here's an age-old debate that we can finally, perhaps, put an end to: The backtick character for line continuation. -The basic concept looks like this: - - -`Get-WmiObject -Class Win32_BIOS ` - -ComputerName whatever ` - -Filter "something='else'" -`This trick relies on the fact that the backtick (grave accent) is PowerShell's escape character. In this case, it's escaping the carriage return, turning it from a logical end-of-line marker into a literal carriage return. It makes commands with a lot of parameters easier to read, since you can line up the parameters as I've done. -My personal beefs with this: - - * -The character is visually hard to distinguish. On-screen, it's just a couple of pixels; in a book, it looks like stray ink or toner. - - * If you put any whitespace after the backtick, it escapes _that_ character instead of the carriage return, and everything breaks. - * On some non-US keyboards, it's a difficult character to get to. - -In  many cases, you can achieve nice formatting without the back tick. - - -`Do-Something -Parameter this | - Get-Something -Parameter those -Parm these | - Something-Else -This that -Foo bar -`This is because a carriage return after a pipe, semicolon, or comma is always interpreted as a visual thing, and not as a logical end of line. Of course, some argue that you can make that command prettier by using the back tick: - - -`Do-Something -Param this ` -| Something-Else -this that -foo bar ` -| Invoke-Those -these those -`Here, the pipes line up on the front, making the command into a kind of visual block - but you have to rely on the backticks. You could then argue that a combination of splatting and careful formatting could be nicer, without the backticks: - - -`$do_something = @{parameter = $this; - foo = $bar} -$invoke_something = @{param = $these; - param = $those} -Do-Something @do_something | -Invoke-Something @invoke_something | -Something-Else -`Visually blocked-out, but no back ticks. -And the debate rages on. Your thoughts? Pros? Cons? _Why?_ - -[boilerplate greatdebate] diff --git a/content/articles/2013-07-11-powershell-summit-europe.md b/content/articles/2013-07-11-powershell-summit-europe.md deleted file mode 100644 index fa69bcb38..000000000 --- a/content/articles/2013-07-11-powershell-summit-europe.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: PowerShell Summit… EUROPE?!?!? -authors: - - Don Jones -date: "2013-07-11T18:47:05+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2013/07/powershell-summit-europe/ ---- - -I have received a lot of interest in a PowerShell Summit Europe, and we are starting to look at doing one in 2014. I know that's a long way off, but it takes time to put these together when everyone's volunteering that time! -I have put together a very short survey to see if there is any consensus on where such an event might be held. The survey is [online now and ready for your opinions][1]. Please forward this to your colleagues and co-workers, as well - we would really like a variety of opinions. If you want to tweet about it, Facebook it, or anything else to help us get a broad perspective, it would be much appreciated. -I must note that this event will be in English, as it is meant to be a pan-European event that involves as many different folks as possible. We are not attempting to hold a more regional, culture-specific event - some of those already exist (I'm aware of one in Germany, for example), and they do a better job serving their local market (which can be quite large) than we could ever do. We are trying to fill a different need, which is more along the lines of a very miniature TechEd Europe, which brings as many different folks together as possible. Hopefully we will achieve that goal. -Thank you for your time and input! - - [1]: http://67004.polldaddy.com/s/powershell-summit-europe diff --git a/content/articles/2013-07-11-working-with-the-wsus-api-and-the-susdb-database-using-powershell.md b/content/articles/2013-07-11-working-with-the-wsus-api-and-the-susdb-database-using-powershell.md deleted file mode 100644 index 8f0456f03..000000000 --- a/content/articles/2013-07-11-working-with-the-wsus-api-and-the-susdb-database-using-powershell.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Working with the WSUS API and the SUSDB Database using PowerShell -authors: - - Boe Prox -date: "2013-07-12T02:38:43+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/07/working-with-the-wsus-api-and-the-susdb-database-using-powershell/ ---- - -Tthe WSUS API can be used to perform a multitude of WSUS tasks from approving patches, removing clients to creating automatic approval rules to many other things. By diving deeper into the API reveals that we can also find out the name of the SQL server (if using a remote SQL database server) that the SUSDB database is residing on. Beyond that, we can actually perform queries to the database (using TSQL) or perform tasks against the database itself. -I've written a couple of articles hat focus on making the database connection via the WSUS API and preform a simple query and then following up on that by performing some database maintenance by re-indexing and updating the statistics on the database tables. -[Use the WSUS API and PowerShell to query the SUSDB Database](http://learn-powershell.net/2013/07/07/use-the-wsus-api-and-powershell-to-query-the-susdb-database/) -[Using the WSUS API and PowerShell to Perform Maintenance on the SUSDB Database](http://learn-powershell.net/2013/07/07/using-the-wsus-api-and-powershell-to-perform-maintenance-on-the-susdb-database/) diff --git a/content/articles/2013-07-15-phillyposh-07112013-meeting-summary-and-presentation-materials.md b/content/articles/2013-07-15-phillyposh-07112013-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 1ae4972ea..000000000 --- a/content/articles/2013-07-15-phillyposh-07112013-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: PhillyPoSH 07/11/2013 meeting summary and presentation materials -authors: - - John Mello -date: "2013-07-16T02:00:04+00:00" -aliases: - - /2013/07/phillyposh-07112013-meeting-summary-and-presentation-materials/ ---- - -1. Active Directory SDK team member and former Senior Programing writer for the Windows PowerShell team, [Jun Blender][1] gave a presentation on The Hidden Charms of Windows PowerShell 3.0 via Lync. You can get a copy of [her presentation here][2] and see a [recording of the Lync meeting][3] on our [YouTube channel][4] - 2. Microsoft Technology Evangelist [Yung Chou][5] gave demonstration on how to use the [PowerShell Azure cmdlets][6] to automate data center deployments - 1. You can try doing the same and test server 2012 R2 out with a free [1-month trial of Windows Azure][7] - 3. General Announcements - 1. [The Microsoft Virtual Academy][8] is hosting 2 separate day long PowerShell learning sessions that will be taught by the lead Architect of PowerShell [Jeffery Snover][9] and [PowerShell.org][10] board member [Jason Helmick.][11] Link to the sessions are as follows: - 1. [Getting Started with PowerShell 3.0 : 7/18/2013 9AM-5PM PDT][12] - 2. [Advanced Tools & Scripting with PowerShell 3.0: 8/1/2013 9AM-5PM PDT][13] - 2. The [PowerScript Podcast][14] is looking for show ideas - 3. In the wake of the 2013 scripting games there are many entries in the ["Great Debates"][15] series, in which the - community discusses the differing techniques that the community used during the games - 1. Speaking of the scripting games, the winners were on the [PowerScritping Podcast][16] this week - 2. [Mike Robbins][17], the winner of the advanced category, will be presenting for us in September! - 1. Mike also runs the virtual [Mississippi PowerShell User Group][18] and makes his meetings available to everyone. - 4. Last month"™s speaker, [Rohn Edwards][19], has recently [blogged][20] about how to use some of the functions included in his [PowerShellAccessControl Module][21] - 5. Check out [Chocolatey][22] which is a Machine Package Manager, somewhat like apt-get, but built with Windows and PowerShell in mind. - - [1]: https://twitter.com/juneb_get_help - [2]: https://powershell.org/wp-content/uploads/2013/07/PhillyPosh_2013-07-11_June_Blender.pptx - [3]: https://www.youtube.com/watch?v=rY-kkuTwWUs - [4]: https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg - [5]: http://blogs.technet.com/b/yungchou/ - [6]: http://msdn.microsoft.com/en-us/library/windowsazure/jj152841.aspx - [7]: http://aka.ms/200 - [8]: http://www.microsoftvirtualacademy.com - [9]: https://powershell.org/wp-admin/@jsnover - [10]: https://powershell.org/wp-admin/PowerShell.org - [11]: https://powershell.org/wp-admin/@theJasonHelmick - [12]: http://www.microsoftvirtualacademy.com/liveevents/PowerShell-JumpStart - [13]: http://www.microsoftvirtualacademy.com/liveevents/Adv-PowerShell-Jump-Start - [14]: http://powerscripting.wordpress.com/2013/07/08/we-want-your-powershell-show-ideas/ - [15]: https://powershell.org/category/great-debates/ - [16]: http://powerscripting.wordpress.com/2013/07/10/up-next-winners-from-the-2013-scripting-games/ - [17]: http://mikefrobbins.com/ - [18]: http://mspsug.com/ - [19]: http://rohnspowershellblog.wordpress.com/ - [20]: http://rohnspowershellblog.wordpress.com/tag/powershellaccesscontrol/ - [21]: http://gallery.technet.microsoft.com/scriptcenter/PowerShellAccessControl-d3be7b83 - [22]: http://chocolatey.org/ diff --git a/content/articles/2013-07-16-powershell-great-debate-piping-in-a-script.md b/content/articles/2013-07-16-powershell-great-debate-piping-in-a-script.md deleted file mode 100644 index 5b08210eb..000000000 --- a/content/articles/2013-07-16-powershell-great-debate-piping-in-a-script.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: "PowerShell Great Debate: Piping in a Script" -authors: - - Don Jones -date: "2013-07-16T17:40:09+00:00" -aliases: - - /2013/07/powershell-great-debate-piping-in-a-script/ ---- - -Take a look at this: - - -`# version 1 -Get-Content computers.txt | -ForEach-Object { - $os = Get-WmiObject Win32_OperatingSystem -comp $_ - $bios = Get-WmiObject Win32_BIOS -comp $_ - $props = @{computername=$_; - osversion=$os.version; - biosserial=$bios.serialnumber} - New-Object PSObject -Prop $props -} -# version 2 -$computers = Get-Content computers.txt -foreach ($computer in $computers) { - $os = Get-WmiObject Win32_OperatingSystem -comp $computer - $bios = Get-WmiObject Win32_BIOS -comp $computer - $props = @{computername=$computer; - osversion=$os.version; - biosserial=$bios.serialnumber} - New-Object PSObject -Prop $props -} -`These two snippets do the same thing. The first uses a more "pipeline" style approach, and I've personally never felt the urge to do that in a script. Probably habit - I come from the VBScript world, so a construct like foreach($x in $y) is natural for me. I've seen folks get into that "pipeline" approach inside a script and get into trouble, and if I'm scripting I often prefer to use the more formal, structured approach of the version 2 snippet. -What're your thoughts? For me, version 1 has some downsides - forcing yourself into that pipeline structure can be limiting, and I find the approach in version 2 to be more readable and a bit easier to follow. Frankly, I'm never a fan of having to mentally track what's in $_. -(Which brings up a sidebar: I tend to evaluate a script's goodness based on how well I can understand what it does _without running it_. That's a common criteria, in fact, and one I personally think helps aid in debugging as well as maintaining scripts.)_ -_ -Anyway... discuss! -[boilerplate greatdebate] diff --git a/content/articles/2013-07-16-powershell-summit-city-selection-criteria.md b/content/articles/2013-07-16-powershell-summit-city-selection-criteria.md deleted file mode 100644 index 40e10e47b..000000000 --- a/content/articles/2013-07-16-powershell-summit-city-selection-criteria.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: PowerShell Summit City Selection Criteria -authors: - - Don Jones -date: "2013-07-16T17:40:13+00:00" -categories: - - PowerShell Summit -aliases: - - /2013/07/powershell-summit-city-selection-criteria/ ---- - -As you may know, we're in the process of putting together a PowerShell Summit Europe for Fall 2014. It's a big task, with a lot of financial risks, so we try to get it right. Folks have been helpful on Twitter in offering city selection ideas... but there's a bit more involved than just tossing out a city name. With that, here is the selection criteria! -Given the information below... AND the fact that Germany/UK/Netherlands (in that order) have been getting the overwhelming majority of "in what cities would you attend the Summit" votes... what cities would YOU recommend we consider? -(BTW, this is TOTALLY a chance to "sell" your suggestion - so do so! The criteria below are what's really important to us, so help us understand how a given city helps meet all of that criteria! And, if you're willing to help be our local 'person on the scene' to help organize, mention that also!) -\--- -City Selection Criteria for PowerShell Summits -This guide is intended to provide a framework for selecting an appropriate city and venue for a PowerShell Summit. -Understand that a PowerShell Summit is meant to be a continent-level event, meaning the attendance of international speakers and attendees is a given. A PowerShell Summit is conducted primarily, if not entirely, in English, that being the "de facto" language of the technology industry, and the most-common language spoken by expert presenters in the field. A PowerShell Summit is open to everyone, and is not intended to fill the need for regional, culture- or language-specific events of any size. PowerShell.org recognizes the need for, and value of, those more-regional events, but the PowerShell Summit does not seek to full that need or provide that exact same value. -Throughout this guide, note that "venue" does not refer to a city. While in casual discussions we may refer to a city name or metropolitan area name - like London or Munich - our venue may not in fact be within the legal limits of such a city or area. "Venue" refers to a specific facility, which may be a hotel or a conference center or other specific location. -Our expectation is that most attendees will arrive at the event via common carrier - typically, train or airplane. Some may drive, but our focus is on providing good access for those who do not have their own personal transportation during the event. -Criterion 1: Airport Access -The first criterion is easy access to a major international airport. This is intended to accommodate the wide variety of attendees expected. In general, the venue should be either within a 15-20 minute drive from an airport by private car (including taxis and shuttle busses), or within a 30-minute ride via mass transit rail (specifically excluding public bus service, but including all levels of rail access). -Exception: The airport service area may be widened in instances where a venue offers significant other advantages in other criteria, or where the venue offers specialized access to expert presenters - e.g., using Bellevue for its convenient access to the PowerShell team, despite the fact that it is a ~30 minute ride by private car from SEA-TAC airport and lacks public rail access to the airport. -Criterion 2: Local Transit -The venue must be well-connected to the local area by mass transit rail (tram, train, metro, etc.). Alternately, the area must offer a variety of amenities within walking distance. Our goal is to minimize the need for rental cars to travel to the event venue from local hotels, restaurants, and other amenities. A 15-minute walking radius is a good "maximum" guideline. Due to this criterion, local parking fees are explicitly not considered during venue selection, although the organization recognizes than some local attendees may be impacted by parking fees. -Criterion 3: Evening Amenities -The selected venue must be accessible (via local rail transit or short walks) to evening amenities, including hotels, restaurants, and so forth. While the PowerShell Summit will often include evening events, attendees must have independent access to these kinds of amenities. -Criterion 4: Price, Quantity, and Quality of Lodging -The selected venue must be accessible (via local rail transit or short walks) to hotels of at least 3-star quality (as listed on travel Web sites such as Expedia or Orbitz), with as reasonable a price as possible given the choices of venues under consideration. When possible, the organization will reserve a room block for at least 1/3 of the expected attendance number (with the understanding that room blocks carry significant financial risk, and the organization has a primary goal of mitigating such risk). Additional hotel capacity meeting this criterion must be available, but may not necessarily be reserved, for the event. -Criterion 5: Language -The selected venue must be in an area where English is commonly spoken, at least by hospitality workers. English need not be the dominant language in the area, but as it is the "common language" of PowerShell, English must at least be commonly understood as a "lingua franca" in order for a maximum number of attendees to be able to navigate the area. Venues that do not meet this criterion may still be viable locations for a regional, cultural-specific event, but might not be qualified for a PowerShell Summit. -Criterion 6: Centrality -Given all of the other criteria previously listed, it is desirable to have a venue that provides equitable travel access from the majority of the target area. However, the organization recognizes that central location is often the most difficult to achieve in combination with the other criteria listed. -Criterion 7: Accessibility -The venue must conform with a general international standard of access for disabled persons, and must provide at least basic ability to meet common dietary restrictions, such as vegetarianism. The organization accepts that extremely specific dietary needs, such as cultural or religious needs or allergy concerns, might incur extra costs that would be passed along to the concerned attendee(s). -Criterion 8: Appropriateness -The venue must provide appropriate meeting facilities. This means the venue must be able to accommodate the expected number of attendees in a comfortable and safe surrounding, and attendees must be able to access the venue without undue overhead (e.g., extensive security checks in an office building, etc.). In multi-track events, meeting rooms should be able to accommodate a 15-20% offset (e.g., in a 300-person event with 300 attendees, each room must be able to handle 120 attendees, to deal with the fact that some sessions will be more popular than others). diff --git a/content/articles/2013-07-23-powershell-great-debate-credentials.md b/content/articles/2013-07-23-powershell-great-debate-credentials.md deleted file mode 100644 index 1b5d68cb2..000000000 --- a/content/articles/2013-07-23-powershell-great-debate-credentials.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "PowerShell Great Debate: Credentials" -authors: - - Don Jones -date: "2013-07-23T17:47:45+00:00" -aliases: - - /2013/07/powershell-great-debate-credentials/ ---- - -Credentials suck. -You obviously don't want to hardcode domain credentials into a script - and PowerShell actually makes it a bit difficult to do so, for good reason. On the other hand, you sometimes _need_ a script to do something using alternate credentials, and you don't necessarily want the runner of the script to know those credentials. -So how do you deal with it? -Let's be clear: This is _not_ a wish list. Comments like, "I wish PowerShell could do ____" aren't valid. What _do you do using the technology as it exists today_? Do you prompt for a credential and assume the script user will have it? Do you try to hardcode it? Do you set up a constrained endpoint? What? -[boilerplate greatdebate] diff --git a/content/articles/2013-07-23-techsessions-free-powershell-webinars.md b/content/articles/2013-07-23-techsessions-free-powershell-webinars.md deleted file mode 100644 index c5b9dfc05..000000000 --- a/content/articles/2013-07-23-techsessions-free-powershell-webinars.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "TechSessions: Free PowerShell Webinars" -authors: - - Don Jones -date: "2013-07-23T16:05:08+00:00" -categories: - - Announcements -aliases: - - /2013/07/techsessions-free-powershell-webinars/ ---- - -PowerShell.org is going to be launching TechSessions this Fall. These will be ~1 hour online webinars, which you're welcome to attend live. We'll also record them and make the recordings available. -In most cases you will need to _register_ for each one, so that we can send the appropriate invite information. Our sponsors are working with us on these, so each one might be in a different webinar platform (Lync, Webex, etc) depending on who is providing the infrastructure that month. -In all cases, we'll announce the TechSession in our TechLetter Newsletter, via banners on this site, and in a blog post. You'll notice a new "TechSessions" post category for those announcements. -I'll be soliciting presenters, and the goal is just to provide you with varied technical content around PowerShell. If you'd like to BE a presenter, hit the Contact link in the Site Info menu (above) and let me know! Attending live will obviously give you a Q&A opportunity as well. -Be on the lookout! I'm hoping to kick off in September or October. If there are specific topics you'd like to see, drop a comment below and let me know. I'm sure potential presenters would love some suggestions, and I know I would. \ No newline at end of file diff --git a/content/articles/2013-07-29-calling-all-powershell-teacherstrainers.md b/content/articles/2013-07-29-calling-all-powershell-teacherstrainers.md deleted file mode 100644 index 22d2592c4..000000000 --- a/content/articles/2013-07-29-calling-all-powershell-teacherstrainers.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Calling all PowerShell Teachers/Trainers -authors: - - Don Jones -date: "2013-07-29T15:02:56+00:00" -categories: - - Training -aliases: - - /2013/07/calling-all-powershell-teacherstrainers/ ---- - -I'm in the process of building a referral list for teachers and trainers who work with Windows PowerShell. My goal is to build a "find a trainer" page here on PowerShell.org, with the ability for prospective clients to send an inquiry via email. This would be for customers seeking private classes, not for individual students seeking a class. -If you'd like to be on the list, please send me an email, or use the "Contact" page under the "Site Info" menu here on PowerShell.org. Please provide an email address that referrals can be sent to; you'd receive the potential client's contact information directly and would work with them directly - I'm not looking to act s middleman or agent, and there are no referral fees. We won't be providing pricing information or anything other than a means of connecting clients and trainers. -You can also provide a link to your Web site, if you have one, preferably a page that describes your PowerShell training offering(s). diff --git a/content/articles/2013-07-30-powershell-great-debate-the-purity-laws.md b/content/articles/2013-07-30-powershell-great-debate-the-purity-laws.md deleted file mode 100644 index f466d8e21..000000000 --- a/content/articles/2013-07-30-powershell-great-debate-the-purity-laws.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "PowerShell Great Debate: The Purity Laws" -authors: - - Don Jones -date: "2013-07-30T17:50:21+00:00" -aliases: - - /2013/07/powershell-great-debate-the-purity-laws/ ---- - -This should be interesting. -During The Scripting Games, I observed (and in some cases made) a great many comments that I'm lumping under the name "Purity Laws." - - * -You shouldn't use a command-line utility like Robocopy in a PowerShell script. - - * You shouldn't use .NET classes in a PowerShell script. - * You should map a drive using New-PSDrive, not **net use**. - -And so on. You see where I'm going: there are folks out there who feel as if the only thing that goes into a PowerShell script is Pure PowerShell. Which is odd, because it isn't an approach the product team actually gave much value. They spent _extra time_ making sure the shell could use .NET, and could run external utilities - why not use them, if they work and get the job done? -A counterargument involves maintenance and readability. External commands, for example, are harder to read, may not be well-documented, and don't work consistently with the rest of PowerShell. .NET classes are hard to discover, and force you into a very "programmer-y" approach. Some environments might not want the extra overhead - even if it means giving up functionality. -So where do you come down on this debate? I'd really love some _detailed recommendations. _What's right for _your_ environment, and most importantly _why? _Are there any facts or situations that would sway you to the other side of the argument? -Go. -[boilerplate greatdebate] diff --git a/content/articles/2013-08-01-powershell-great-debate-powershell-versions.md b/content/articles/2013-08-01-powershell-great-debate-powershell-versions.md deleted file mode 100644 index bbda8dfc6..000000000 --- a/content/articles/2013-08-01-powershell-great-debate-powershell-versions.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "PowerShell Great Debate: PowerShell Versions?" -authors: - - Don Jones -date: "2013-08-01T14:32:38+00:00" -aliases: - - /2013/08/powershell-great-debate-powershell-versions/ ---- - -_Today's Great Debate is a bonus, offered from former team member June Blender. Take it away, June!_ -Like several of the excellent debates in our Great Debate series, this debate issue arose during in Scripting Games 2013 when different judges used different selection criteria to evaluate entries. -Some judges, like me, wanted to see evidence that the scripter had studied all features of the newest version of the Windows PowerShell language and selected the best approach for their solution. Other judges wanted the solutions to work on as many computers as possible. -Outside of the Scripting Games, this issue is very practical and very important. If you"™re writing a script to work on particular computers in your enterprise, you know which versions of Windows PowerShell are installed and which features you can use. But when you write a shared script or functions for a module, your scripts/functions can run in any environment. -What"™s the version best practice? -I think we can all agree that a #Requires statement should appear in any shared script. - - -`#Requires -Version [.] -`In fact, maybe we need a version property of commands that can be queried by using Get-Command, like the PowerShellVersion property of modules? -But, beyond that, should you restrict yourself to features in the oldest supported version of Windows PowerShell, or the most common version, or can you use features in the newest version, even if your scripts don"™t run on all computers in all enterprises? -Sometimes, the answers are trivial. The simplified syntax in Windows PowerShell 3.0 that omits curly braces {} and "$_." is just syntactic sugar for the original syntax. We might decide that it"™s best to avoid it unless you"™re sure that all computers are running at least 3.0. -At the other extreme are features that don"™t have any equivalent in a previous version. What if your module would benefit from using scheduled jobs, CIM commands, or workflows? Must you avoid them? -In the middle are cases where you can use a somewhat equivalent feature. Can you use Get-CimInstance, or are we forever tied to Get-WmiObject? Can you use PSCustomObject or are you committed to Add-Member? Do you need to write Types.ps1xml files when dynamic type data would suffice? diff --git a/content/articles/2013-08-06-is-this-list-everything-in-powershell.md b/content/articles/2013-08-06-is-this-list-everything-in-powershell.md deleted file mode 100644 index 23024598d..000000000 --- a/content/articles/2013-08-06-is-this-list-everything-in-powershell.md +++ /dev/null @@ -1,147 +0,0 @@ ---- -title: "Is this list \"Everything\" in PowerShell?" -authors: - - Don Jones -date: "2013-08-06T20:11:04+00:00" -categories: - - Training -aliases: - - /2013/08/is-this-list-everything-in-powershell/ ---- - -Soooo.... it's time for me to start looking at updating my various training materials (books, videos, courses, whatnot) for v4. -I'm going to, with at least some of these, take an all-versions approach. I'll teach what's in v2, then cover what v3 added, then cover v4, etc. It'll be easier to maintain over the upcoming years. -For right now, I'm trying to assemble an organized topic list of "everything" the shell does. Now, I need to wrap that in an important caveat: I'm aiming at _admins_. Not developers. I'm not saying devs aren't a great audience, but for this project I need to constrain my scope to just the admin audience. I'm also focused mainly on what the shell does _natively, _with only a few diversions into external or underlying technologies. Those are fixed caveats for this project - no exceptions. -Right now I"m kind of chunking the list into what I feel can be taught (by me) in 20-30 minutes, or a book chapter, or something like that. This isn't necessarily how the material will be presented - this is just me organizing my thoughts so as to not miss important stuff. -So, given the list below, what do you feel is missing? -(Numbers are major topics; letters are basically my mental notes about what the topic might include that I might otherwise forget; like I said, this isn't meant to be a real book outline - it's just a topic list) -PowerShell Core -1. Series Introduction and Lab Setup -2. Windows PowerShell Introduction and Requirements -3. Finding and Discovering Commands -a. Importing modules and snapins -4. Interpreting Command Help -5. Running Commands -6. Running External Commands: Tips and Tricks -a. $Lastexitcode -7. Working with PSProviders and PSDrives -8. Variables, Strings, Hashtables, and Core Operators -a. Double quote tricks, subexpressions -b. Here-strings -c. Escapes -d. Variable types -e. Arrays -f. Math operators -9. Regular Expression Basics -a. Basic regex language -b. "“Match -c. Select-String -10. Learning the Pipeline: Exporting and Converting Data -11. Understanding Objects in PowerShell -12. Core Commands: Selecting, Sorting, Meauring, and More -13. How the PowerShell Pipeline Works -14. Formatting Command Output -15. Comparison Operators and Filtering -16. Advanced Operators -17. Setting Default Values for Command Parameters -18. Enumerating Objects in the Pipeline -a. Working with object methods -19. Advanced Date and String Manipulation -20. Soup to Nuts: Completing a New Task -PowerShell Remoting -21. PowerShell Remoting Basics -22. Persistent Remoting: PSSessions -23. Implicit Remoting: Using Commands on Another Computer -24. Advanced Remoting: Passing Data and Working with Output -25. Advanced Remoting: Crossing Domain Boundaries -26. Advanced Remoting: Custom Session Configurations -27. Web Remoting: PowerShell Web Access -WMI and CIM -28. WMI and CIM: WMI, Docs, and the Repository -29. WMI and CIM: Using WMI to Commands Query Data -30. WMI and CIM: Using CIM Commands to Query Data -31. WMI and CIM: Filtering and WMI Query Language -32. WMI and CIM: Associations -33. WMI and CIM: Working with CIM Sessions -34. WMI and CIM: Executing Instance Methods -Jobs -35. Background Job Basics: Local, WMI, and Remoting Jobs -36. Scheduled Background Jobs -Scripting in PowerShell -37. PowerShell Script Security -38. Prompting for Input, Producing Output -39. Creating Basic Parameterized Scripts -40. PowerShell Scripting: Logical Constructs -41. PowerShell Scripting: Looping Constructs -a. Break and Continue -42. PowerShell Scripting: Basic Functions, Filters, and Pipeline Functions -43. PowerShell Scripting: Best Practices -a. Line breaking -b. Splatting -c. Formatting -d. Source Control -e. Etc. -44. PowerShell Scripting: From Command to Script to Function to Module -45. PowerShell Scripting: Scope -46. PowerShell Scripting: Combining Data from Multiple Sources -a. Ordered hashtables -Advanced Functions ("Script Cmdlets") -47. Advanced Functions: Adding Help -48. Advanced Functions: Parameter Attributes -49. Advanced Functions: Pipeline Input -50. Advanced Functions: Parameter Sets -Advanced Scripting Techniques -51. Creating Private Utility Functions and Preference Variables -52. Adding Error Capturing and Handling to a Function -53. Advanced Error Handling -a. Variety of error capturing options -b. Catching multiple exceptions -c. Etc. -54. Error Handling the Old Way: Trap -55. Debugging Techniques -56. Creating Custom Formatting Views -57. Creating Custom Type Extensions -58. Working with SQL Server (and other) Databases -59. Working with XML Data Files -60. Supporting "“WhatIf and "“Confirm in Functions -61. Troubleshooting and Tracing the Pipeline -62. Using Object Hierarchies for Complex Output -63. Creating a Proxy Function -PowerShell in the Field -64. From the Field: Enhanced HTML Reporting -65. From the Field: Trend Analysis Reporting -66. From the Field: Scraping HTML Pages -PowerShell Workflow -67. Introduction to PowerShell Workflow -Desired State Configuration -68. Desired State Configuration: The Basics -69. Desired State Configuration: Configuration Scripts -70. Desired State Configuration: Writing Resources -71. Globalizing a Function or Script -72. Discovering and Using COM Objects -73. Discovering and Using .NET Classes and Instances -Writing Scripts for Other People -74. Controller Scripts: Automating Business Processes -75. Controller Scripts: A Menu of Tools -76. Creating a GUI Tool: The GUI -77. Creating a GUI Tool: The Code -78. Creating a GUI Tool: The Output -79. Creating a GUI Tool: Using Data Tables -Advanced Core Techniques, Tricks, and Tips -80. Using Type Accelerators -a. [ADSI] -b. [XML] -c. [VOID] -d. where they"™re documented -81. The Big Gotchas in PowerShell -a. (from the ebook list) -82. Fun with Profiles -a. Profiles and hosts -b. Prompt -c. Colors -d. Get a credential -83. Random Tips and Tricks -a. Redirection changing pipelines -b. $$ -c. $? -d. Dot sourcing diff --git a/content/articles/2013-08-06-powershell-great-debate-script-or-function.md b/content/articles/2013-08-06-powershell-great-debate-script-or-function.md deleted file mode 100644 index ed035cd23..000000000 --- a/content/articles/2013-08-06-powershell-great-debate-script-or-function.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "PowerShell Great Debate: Script or Function?" -authors: - - Don Jones -date: "2013-08-06T14:31:41+00:00" -aliases: - - /2013/08/powershell-great-debate-script-or-function/ ---- - -One of the most frequent comments in The Scripting Games this year was along the lines of, "you should have submitted this as a function, not a script." Of course, the second-most frequent comment was something like, "you shouldn't have submitted this as a function." -Let's be clear: if an assignment explicitly asks for a function, you should write one. What we're debating are the pros and cons of a _single tool_ being written one way or another. Read that again: _a single tool. _If you're writing a library of tools, it's obvious that writing them as functions for inclusion in a single file (like a script module) is beneficial. -Some argue that any tool is potentially going to be included in a function... so why not write it that way to begin with? Others argue that functions are a smidge harder to test, so why not just write a script? -This is a debate I don't personally have a strong stake in. I mean, we're literally talking about a _single keyword. _Take _any_ script, add the **function** keyword, a function name, and a couple of curly brackets, and you've got a function. This really shouldn't be a criteria when you're looking at a contest entry... or even when you're looking at something a colleague offered to you. -Or should it? -[boilerplate greatdebate] diff --git a/content/articles/2013-08-08-a-quick-powershell-pshsummit-update-europe-na.md b/content/articles/2013-08-08-a-quick-powershell-pshsummit-update-europe-na.md deleted file mode 100644 index 9b58d35eb..000000000 --- a/content/articles/2013-08-08-a-quick-powershell-pshsummit-update-europe-na.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "A Quick #PowerShell #PSHSummit Update (Europe & NA)" -authors: - - Don Jones -date: "2013-08-08T20:44:11+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2013/08/a-quick-powershell-pshsummit-update-europe-na/ ---- - -**PowerShell Summit North America 2014**, April 28-30 (special precon on April 27) is open for registration to our 2013 alumni, shareholders, and to TechLetter subscribers. The alumni block will be released on August 15, and the subscriber block on September 15th; shortly after, sales will be open to the public. If you're a shareholder, alumni, or subscriber, and you didn't get your registration in e-mail, drop me a line (use the Contact link in the Site Info menu). Please only contact me if you're anxious to register right now, so I don't get swamped. -North America will be in Bellevue, WA, adjacent to Microsoft offices up there; we will -investigate - a move East for the 2015 show, just to perhaps spread the love a bit. We know SEA isn't the cheapest travel destination. -North America's **call for topics** should start fairly soon, and that information will be posted here, along with information on how to submit prospective sessions. I won't be taking the lead on that process, but some of my fellow Board members will be, so watch for their posts. -**PowerShell Summit Europe 2014** is being tentatively scheduled for September or October 2014. Our city shortlist includes Munich, Milan, and Amsterdam; we're too far out at this point to make inquiries with prospective venues (they usually work only 8-12 months out), but we've assembled a list to contact over the next couple of months. Venue pricing and availability (and suitability) will be a significant set of factors in the final city selection, and we'll post details right here. -You'll notice a "PowerShell Summit" post category here on PowerShell.org; that's your one and official source for news and info, with our Summit Page being your one and official source for more static information on both events. You can follow [@PSHSummit][1] on Twitter, which will be a good way to receive notifications of new posts here, but which will not contain any information not available on this site. We also try to hashtag #PSHSummit on Twitter, if you'd like to watch out for that. - - [1]: http://twitter.com/pshsummit diff --git a/content/articles/2013-08-12-coming-soon-55039-powershell-scripting-and-toolmaking-course.md b/content/articles/2013-08-12-coming-soon-55039-powershell-scripting-and-toolmaking-course.md deleted file mode 100644 index 38b63cca5..000000000 --- a/content/articles/2013-08-12-coming-soon-55039-powershell-scripting-and-toolmaking-course.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "Coming Soon: 55039 \"PowerShell Scripting and Toolmaking\" Course" -authors: - - Don Jones -date: "2013-08-12T15:23:53+00:00" -categories: - - Training -aliases: - - /2013/08/coming-soon-55039-powershell-scripting-and-toolmaking-course/ ---- - -Later this month, Jason Helmick will be offering a revised "PowerShell Scripting and Toolmaking" course at [Interface Technical Training][1] in Phoenix. This new course carries the Microsoft Courseware Marketplace number 55039 - that's right, this is an official, unofficial course that will be available to all Microsoft training partners! -(Courseware Marketplace offerings are not written or endorsed by Microsoft, but they are equivalent to Official Curriculum in many ways, including being eligible for Software Assurance voucher programs. Marketplace offerings supplement Official offerings by providing courses that Microsoft doesn't have the time or resources to generate themselves.) -This course is based _directly_ on _Learn PowerShell Toolmaking in a Month of Lunches_, and incorporates much of that book's actual text (in fact, a portion of the course's sale price goes to the book publisher, with a portion of _that_ going to the book authors as royalties). That's combined with a full slide deck, some awesome brand-new labs, lab answer key, "starting points" (for lab students who fall behind), and a complete inventory of demo scripts for the instructor to use. It walks through a quick PowerShell review, and moves all the way through creating modules, advanced functions, custom views, and much more. It's a pretty handy course, and even dives into creating "controller" scripts, such as scripts that automate processes or generate HTML reports. We provide a complete 3-VM build guide, and a simple ISO image containing all of the instructor and student files. Students are even welcome to download that ISO themselves for later reference! That URL will be provided in the student manual. -I'm especially proud of the labs, and thankful to Mike Robbins and Jason Helmick for debugging them for me. Through the main part of the course, students have _three_ lab tracks (A, B, and C) to choose from - and overachievers can work on more than one track. Through each module, the labs gradually build from a basic command to a complete, fleshed-out "script cmdlet" packaged in a module, with a custom view and more. It's extremely realistic, and it means much of the classroom time is spent on hands-on labs, where students will get the most value for their money. -This course is designed to complement Microsoft's official 10961 course, which covers substantially the same material as _Learn Windows PowerShell in a Month of Lunches_, meaning 55039 is kind of a "sequel" course. Training centers are welcome to offer a 5-day accelerated class that combines both courses; that's pretty much the class I teach myself. I don't personally categorize 55039 as "advanced;" rather, it's more of a specific application of PowerShell - building reusable tools. I do offer an [advanced course of my own][2], and there's a chance for that to become a packaged course in the future. -After the beta is complete, the course will be orderable in the Marketplace with a suggested price of $150 per student. It's a full 5-day course, with _multiple_ lab tracks per module, so I felt that was a pretty fair price, especially since students basically get the _Toolmaking_ book "included" in their manual! -If any other trainers would like to know more about the course, they're welcome to [contact me][3]. We will be selling it directly as well, for trainers who can't access the Marketplace. -Download the table of contents: [55039-TOC][4] - - [1]: http://interfacett.com - [2]: http://itpro.concentratedtech.com/training - [3]: http://concentratedtech.com/contact - [4]: https://powershell.org/wp-content/uploads/2013/08/55039-TOC.pdf diff --git a/content/articles/2013-08-12-my-powershell-workflow-series-on-technet-magazine.md b/content/articles/2013-08-12-my-powershell-workflow-series-on-technet-magazine.md deleted file mode 100644 index c4fd632fb..000000000 --- a/content/articles/2013-08-12-my-powershell-workflow-series-on-technet-magazine.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: My PowerShell Workflow Series on TechNet Magazine -authors: - - Don Jones -date: "2013-08-12T13:51:33+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/08/my-powershell-workflow-series-on-technet-magazine/ ---- - -As most folks are aware, I've been writing the [_Windows PowerShell_ column][1] for Microsoft's _TechNet Magazine _for... wow, going on 7 years now. For 2013, I was doing a serialized column on PowerShell Workflow, introducing a bit of the technology at a time in each month's article. Eagle-eyed observers will note that the series has "paused," with no new articles in July or August. -First, I'm sorry for the interruption. Unfortunately, right now Microsoft is re-evaluating and re-positioning TechNet Magazine (perhaps in line with a larger re-considering of the TechNet brand, where they recently discontinued the subscription product), and for the time being the company is sticking with internally generated content for TechNet Magazine. I'm hopeful the company will come to a decision soon, and I'll try and keep you posted here. -My past columns (all 77 of them) are still online and accessible, along with hundreds of other articles stretching back almost 8 years. - - [1]: http://technet.microsoft.com/en-us/magazine/ff628337.aspx?sdmr=windowspowershell&sdmi=columns diff --git a/content/articles/2013-08-12-need-desired-state-configuration-modules.md b/content/articles/2013-08-12-need-desired-state-configuration-modules.md deleted file mode 100644 index dee0ae48f..000000000 --- a/content/articles/2013-08-12-need-desired-state-configuration-modules.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Need Desired State Configuration Modules? -authors: - - Steven Murawski -date: "2013-08-12T23:59:59+00:00" -categories: - - Announcements - - News -aliases: - - /2013/08/need-desired-state-configuration-modules/ ---- - -You've probably been hearing about Desired State Configuration from a number of sources ([Runas Radio](http://runasradio.com/default.aspx?showNum=328), the [PowerScripting Podcast](http://powerscripting.wordpress.com/2013/07/30/episode-236-powerscripting-podcast-mvp-don-jones-on-powershell-desired-state-configuration/), or the [Channel 9 TechEd video](http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/MDC-B302#fbid=FsVi_S7Re5G) for example).  If you haven't go check out those previously mentioned resources, I'll wait... -Ok, now that you have a basic understanding of what Desired State Configuration (DSC) is, I have an announcement. - -### PowerShell.Org is building a [repository of DSC modules ](http://bit.ly/13fDxns)for the community to use and contribute to. - -As I've started working with Desired State Configuration, I began building up a repository of modules I would use in configuring my systems.  I started to round them out with some basic documentation and decent logging messages and began pushing them to GitHub. -I've also seen several others starting to post some DSC modules on Github and elsewhere.  Since we are very early in the Desired State Configuration lifecycle (it's still not RTM yet), I would like our community to come together on a central location for our community contributions.  I reached out to Don and the PowerShell.Org team and they graciously offered to host the contributions on the PowerShell.Org GitHub repository.  What that means is that this effort is no longer under the control of one person (me), but owned by the community, by PowerShell.Org. -There's not much in the repository yet, so if you've been experimenting with DSC and would like to share your efforts with the community, feel free to send a pull request (if you're into the whole GitHub thing) or file an issue on the GitHub site and we'll figure something out. -There is some basic ["Getting Started With Developing DSC Modules" information at the GitHub repository][1] as well. - - [1]: https://github.com/PowerShellOrg/DSC#powershell-community-dsc-modules diff --git a/content/articles/2013-08-12-phillyposh-08012013-meeting-summary-and-presentation-materials.md b/content/articles/2013-08-12-phillyposh-08012013-meeting-summary-and-presentation-materials.md deleted file mode 100644 index a1712ce3d..000000000 --- a/content/articles/2013-08-12-phillyposh-08012013-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: PhillyPoSH 08/01/2013 meeting summary and presentation materials -authors: - - John Mello -date: "2013-08-13T04:11:24+00:00" -aliases: - - /2013/08/phillyposh-08012013-meeting-summary-and-presentation-materials/ ---- - -1. [John Mello][1] gave a presentation on Tips and Tricks learned from the 2013 Scripting Games, a copy of his presentation and scripts can be obtained [here][2] - 2. Various group members contributed to a Script and Tell, scripts and participant names are forthcoming. - 3. A [recording of the meeting is available][3] on our [YouTube channel][4], please note that the recording ends about 5 minutes before our meeting was done. - - [1]: http://mellositmusings.com/ - [2]: https://powershell.org/wp-content/uploads/2013/08/PhillyPosh_2013-08-01_ScriptingGamesTipsandTricksLearned.zip - [3]: http://www.youtube.com/watch?v=mRS2275zUMk&feature=youtu.be - [4]: https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2013-08-13-powershell-great-debate-can-you-have-too-much-help.md b/content/articles/2013-08-13-powershell-great-debate-can-you-have-too-much-help.md deleted file mode 100644 index 30d36538e..000000000 --- a/content/articles/2013-08-13-powershell-great-debate-can-you-have-too-much-help.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "PowerShell Great Debate: Can You Have Too Much Help?" -authors: - - Don Jones -date: "2013-08-13T14:44:06+00:00" -aliases: - - /2013/08/powershell-great-debate-can-you-have-too-much-help/ ---- - -In The Scripting Games this year, more than a few folks took the time to write detailed comment-based help. Awesome. No debating it - comment-based help _is a good thing. _ -But some folks felt that others took it too far. There were definitely scripts where the authors used, for example, the .NOTES section to explain their thinking and approach. Some commenters felt it was excessive, while others have pointed out, "wow, what if every programmer gave us some idea what the heck he/she was thinking at the time?" Some felt these extensive comments were just at attempt to get a better score by "convincing" the reviewer of an approach or tactic; others felt, "so what?" -So let's leave the Games out of this debate - in a _production_ environment, where do you come down on extensive notes in a script? When is it not enough, and when is it going too far? Where's the value, and where's the annoyance? -[boilerplate greatdebate] diff --git a/content/articles/2013-08-15-new-powershell-org-visual-design-draft-pt-2.md b/content/articles/2013-08-15-new-powershell-org-visual-design-draft-pt-2.md deleted file mode 100644 index 51d96d3a6..000000000 --- a/content/articles/2013-08-15-new-powershell-org-visual-design-draft-pt-2.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: New PowerShell.org Visual Design Draft, Pt 2 -authors: - - Don Jones -date: "2013-08-15T17:09:36+00:00" -aliases: - - /2013/08/new-powershell-org-visual-design-draft-pt-2/ ---- - -Spoke too soon in the morning's updates; my designer buddies worked last night and took their first stab at the forums pages. They also changed their mind about the big black boxes, which I appreciate ;). The forums material is denser now, meaning more info per page, which should please some folks. -Samples below - and comments welcome. Just keep in mind these folks aren't being paid, so be nice ;). -[![new-forum-list](https://powershell.org/wp-content/uploads/2013/08/new-forum-list-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/new-forum-list.png) [![new-single-topic](https://powershell.org/wp-content/uploads/2013/08/new-single-topic-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/new-single-topic.png) [![new-topic-list](https://powershell.org/wp-content/uploads/2013/08/new-topic-list-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/new-topic-list.png) [![new-article](https://powershell.org/wp-content/uploads/2013/08/new-article-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/new-article.png) [![new-article-comments](https://powershell.org/wp-content/uploads/2013/08/new-article-comments-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/new-article-comments.png) [![new-front](https://powershell.org/wp-content/uploads/2013/08/new-front-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/new-front.png) - -Whatcha think? They said they're tweaking the smaller-screen version still, but I'll update this post and add those examples once they're ready. I know getting the forums working on a smartphone is something people have kvetched about, but it's fairly tricky. They said they might just end up _not_ making a smartphone version, but instead focus on dropping unnecessary elements and letting the phone scale the page. The text input box is apparently giving them a lot of grief when it's sized too small. Anyway... diff --git a/content/articles/2013-08-15-state-of-the-org-website-games-summit-and-more.md b/content/articles/2013-08-15-state-of-the-org-website-games-summit-and-more.md deleted file mode 100644 index 3019ca754..000000000 --- a/content/articles/2013-08-15-state-of-the-org-website-games-summit-and-more.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "State of the Org: Website, Games, Summit, and More" -authors: - - Don Jones -date: "2013-08-15T14:39:23+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2013/08/state-of-the-org-website-games-summit-and-more/ ---- - -I wanted to share a quick update on PowerShell.org, Inc. -First, a couple of Web designer friends of mine have volunteered to do a visual re-theme of the site. Below is some of their early work, and you're welcome to comment; I'll just remind you that they're _volunteers_ and doing this _as a favor. _So be nice! You'll notice that one of these reflects the layout a smartphone would use, which trims much of the "chrome" in favor of the content. They haven't tackled the forums yet - that's harder, and will probably come last. -[![3-001](https://powershell.org/wp-content/uploads/2013/08/3-001-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/3-001.png) [![3-002](https://powershell.org/wp-content/uploads/2013/08/3-002-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/3-002.png) [![3-003](https://powershell.org/wp-content/uploads/2013/08/3-003-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/3-003.png) - -Second, in the last quarter of the year we're planning a move from our current shared hosting plan (my company is actually hosting the site for free) to a more dedicated plan - likely in Azure, since that offers us redundancy without the need to actually pay for two servers. We'll set up a 2-server system with one server dedicated to the database, and the other the Web site, which reflects what we have now under the shared plan. We'll remain on the current LAMP stack, just running inside Azure. That takes a lot of work to set up and test, and the schedule will depend largely on our volunteers' time, but it's in the works. The move should help a bit with some of the performance. It's crazy expensive compared to "free" (around $3600/year max, although obviously it's based on usage so that's kind of a worst-case guess), but we're growing to the point where we need it and it isn't any more expensive than a dedicated server. I love that the Azure folks are smart enough to offer a LAMP stack. Own the back end, who cares what people do with it! -Third, we've disabled a few site features that were really eating up page load times. Most you won't notice, but the "badges" functionality is presently turned off. We haven't deleted any data, so we can bring that back, but for right now it's unavailable. -Fourth... and off of the Web site... the PowerShell Summit North America 2014 is about 12% sold out. As of today, our 2013 alumni and shareholders no longer have a reserved block; our TechLetter subscribers still have a reserved block through September 15th, at which point everything goes on sale to the public. The velocity of sales has been good, and we should be able to hit our next scheduled payment to the event venue. We _are_ still holding back about 50 slots for 2014Q1, for those of you who _can't_ register until next year. But I wouldn't hold out for those if you don't have to. It does _not_ look, at present, like we'll have many (if any) additional discounted memberships - in order to hit our numbers, it's likely everything will hold to full price. If we do offer any discounts, it'll be absolutely last-minute. Also, our team is getting going on content, and you should see a Call for Topics real soon, now. -Fifth, the PowerShell Summit Europe 2014 is coming along, but not really going anywhere. Ha! By that, I mean we're simply too far out (more than a year) for venues to be able to talk to us. So we're holding tight until September and October this year, when we can start checking pricing and availability. Madrid snuck on to our short-list of cities, along with Munich, Milan, and Amsterdam, due to the presence of a large MS conference facility there. If anyone lives in Europe and speaks Spanish, and wants to be our liaison to communicate with MS Madrid, please contact me (via the Site Info menu above). It'd be nice to have someone local who can contact the office and see what we can do there, or at least put us in touch with an evangelist over there who could work on our behalf. -Sixth, don't forget that Mark Schill has announced [PowerShell Saturday 005][1] for Atlanta. Mark's also been tasked to help one or two other organizations put on their own PowerShell Saturday, so if you think you'd be interested, please contact him. Having done this four times already, he's got a good grip on how to go about it. -Seventh, we've got some great new guys acting as editors for the TechLetter, and the September issue will be their first go at it. Wish them luck and give them your support! We're also looking to launch free online TechSession webinars next month; I'll probably run the first one, and there will be a required (and free) registration process, and it may be bumpy. But we're going to try and do those monthly. They'll supplement the new MVA offerings from MS, and get back to the days with TechNet did a whole series of different free webinars. Once we start, please help spread the word - if we're not getting good attendance or recording views, we won't keep doing it. -Eighth, I'm unsure if we'll be doing a Winter Games event or not. We had someone volunteer to coordinate it, but I haven't heard any details from them, and I'm kinda getting overbooked on my end, which will make it tough to do up whatever Web site they might need. We're going to play this one by ear. -Ninth... and before I make it to a full strike... I want to express my deep gratitude for everyone that's helping make this community work. The Forums are obviously a big piece, and it's been fantastic to see so many of you jumping in and volunteering your time to help answer questions. Truly, I feel that this whole thing is finally taking off and that it's a real _community. _Along those lines, in Q4 this year, we're going to announce (so start thinking about it) a PowerShell Heroes award. This will be for folks who have _not_ already received some kind of recognition (like MVP) for helping out in the community, so that we can formally offer them a thank-you. Awards will be by nomination, and will carry no benefits whatsoever (grin). But start thinking of who you'd like to thank, and why. -OK - that's probably enough for the morning. Thanks for coming along for the ride, and have a great rest of the week! -Don - - [1]: http://powershellsaturday.com diff --git a/content/articles/2013-08-16-site-maintenance-this-weekend-aug-17-18-2013.md b/content/articles/2013-08-16-site-maintenance-this-weekend-aug-17-18-2013.md deleted file mode 100644 index 87cc9c4e2..000000000 --- a/content/articles/2013-08-16-site-maintenance-this-weekend-aug-17-18-2013.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Site Maintenance this Weekend (Aug 17-18 2013) -authors: - - Don Jones -date: "2013-08-16T14:54:19+00:00" -categories: - - Announcements -aliases: - - /2013/08/site-maintenance-this-weekend-aug-17-18-2013/ ---- - -This weekend, we'll be conducting maintenance on PowerShell.org. We have several goals: -**New visual theme. **We'll be installing a new visual theme. While we hope to catch everything, you may run across something goofy-looking. Please use the Community Discussion forum to report that, so we can ask the designers to take a look. -**Performance. **We're going to continue to work on performance, with a goal of getting specified pages to have an "A" on the Page Test and YSlow tests. That's not the entirety of performance, but it's what we can address now without moving to a different hosting environment (which is planned). During this phase of our maintenance, the site may not function correctly, or certain features may come and go as we test different configurations. -**Cleanup****. **We'll be condensing certain features of the site, rearranging menus, and so on, to provide a better visual experience across a wider variety of devices. -We appreciate your patience! diff --git a/content/articles/2013-08-16-two-powershell-books-50-off-today-only.md b/content/articles/2013-08-16-two-powershell-books-50-off-today-only.md deleted file mode 100644 index 3b85c8bca..000000000 --- a/content/articles/2013-08-16-two-powershell-books-50-off-today-only.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Two PowerShell Books 50% off TODAY ONLY -authors: - - Don Jones -date: "2013-08-16T17:59:11+00:00" -categories: - - Books -aliases: - - /2013/08/two-powershell-books-50-off-today-only/ ---- - -_PowerShell in Depth_ and _Learn Windows PowerShell 3 in a Month of Lunches_ are on half-price August 25th, 2013. -Use code dotd0825au at [www.manning.com/jones2/][1] -or -Use code dotd0825au at [www.manning.com/jones3/](http://www.manning.com/jones3/) -Tell a friend who needs to start learning PowerShell - two great books at 50% off. All print books come with a voucher for free ebook versions (MOBI, EPUB, PDF), and the ebook-only version is also 50% off. - - [1]: http://www.manning.com/jones2/ diff --git a/content/articles/2013-08-19-powershell-orgs-azure-journey-part-1.md b/content/articles/2013-08-19-powershell-orgs-azure-journey-part-1.md deleted file mode 100644 index 6d7e7bf57..000000000 --- a/content/articles/2013-08-19-powershell-orgs-azure-journey-part-1.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "PowerShell.org's Azure Journey, Part 1" -authors: - - Don Jones -date: "2013-08-19T16:19:50+00:00" -aliases: - - /2013/08/powershell-orgs-azure-journey-part-1/ ---- - -When we started PowerShell.org, my company (Concentrated Tech) donated shared hosting space to get the site up and running. We knew it wouldn't be a permanent solution, but it let us start out for free. We're coming to the point where a move to dedicated hosting will be desirable, and we're looking at the options. Azure and Amazon Web Services are priced roughly the same for what we need, so as a Microsoft-centric community Azure's obviously the way to go. -Azure Technical Fellow Mark Russinovich is having someone on his team connect with me to discuss some of the models in which we could use Azure. What makes the discussion interesting is that PowerShell.org runs on a LAMP (Linux, Apache, MySQL, and PHP) stack. We're not looking to change that; WordPress requires PHP, and the Windows builds of PHP typically lack some of the key PHP extensions we use. I'm not interested in compiling my own PHP build, either - I want off-the-shelf. WordPress more or less requires MySQL; while there's a SQL Server adapter available, it can't handle plugins that don't use WordPress' database abstraction layer, and I just don't want to take the chance of needing such a plugin at some point and not being able to use it. -What's neat about Azure is that it doesn't care. I adore Microsoft for selling a service and not caring what I do with it. Azure runs Linux _just fine. _Huzzah! -So, we've got two basic models that could work for us. Model 1 is to just buy virtual machines in Azure. We're planning one for the database and another for the Web site itself, so that we can scale-out the Web end if we want to in the future. We're not going to do an availability set; that means we risk some short downtime if Azure experiences hardware problems and needs to move our VM, but we're fine with that because right now we can't afford better availability. We'd probably build CentOS machines using Azure's provided base image (again, _adore_ Microsoft for making this easy for Linux hosting and not just Windows). We know we tend to top out at 250GB of bandwidth a month, and that we need about 1GB of disk space for the Web site. 500MB of space for the database will last us a long time, but we'd probably get 1GB for that, too. It's only like $3 a month. We could probably start with Small VM instances and upgrade later if needed. All-in, we're probably looking at about $125/mo, less any prepay discounts. -Model 2 is to just run a _Website. _We still get to pick the kind of instance that hosts our site, so if we went with Small and a single instance, we'd be at about $110 including bandwidth and storage. That doesn't include MySQL, though. Interestingly, Microsoft doesn't host MySQL themselves as they do with SQL Azure. Instead, they outsource to ClearDB.com, which provides an Azure-like service for hosted MySQL. Unfortunately, the Azure price calculator doesn't cover the resold ClearDB service. Looking at ClearDB's own pricing, it'd probably push us to about $120-$125 a month - or about the same as having our own virtual machines. The difference is that, with Model 2, Microsoft can float our Web site to whatever virtual hosts they need to at the time to balance performance; with Model 1, they can potentially move our entire VM - although they're unlikely to do so routinely, since it'd involve taking us offline for a brief period. A super-neat part of this model is its integration with Git: I can run a local test version of the site, and as I make changes and commit them to our GitHub repository, Azure can execute a pull and get the latest version of the site code right from Git. Awesome and automated. I love automated. -An appeal of Model 1 is that I can build out the proposed CentOS environment on my own Hyper-V server, hit it with some test traffic loads, and size the machine appropriately. I can then deploy the VHDs right to Azure, knowing that the instance size I picked will be suitable for the traffic we need to handle. It also give me an opportunity to validate the fact that a dedicated VM will be faster than our current shared hosting system, and to play around with the more advanced caching and optimization options available on a dedicated VM. I can get everything dialed in perfectly, and then deploy. -Azure has other usage models, but these are the two applicable to us. I think it's great that we get these options, and that the pricing is more or less the same regardless. And again, I think it's pure genius that Azure's in the business of _making money_ for Microsoft, and that they're happy to do so running whatever OS I want them to. -I'll continue this series of posts as we move through the process, just for the benefit of anyone who's interested in seeing Azure-ification from start to finish. Let me know if you have any questions or feedback! diff --git a/content/articles/2013-08-19-powershell-orgs-azure-journey-part-2.md b/content/articles/2013-08-19-powershell-orgs-azure-journey-part-2.md deleted file mode 100644 index d0f535f92..000000000 --- a/content/articles/2013-08-19-powershell-orgs-azure-journey-part-2.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "PowerShell.org's Azure Journey: Part 2" -authors: - - Don Jones -date: "2013-08-20T01:10:01+00:00" -aliases: - - /2013/08/powershell-orgs-azure-journey-part-2/ ---- - -I had no idea Azure gives MSDN subscribers a huge free monthly credit - $200 for the first month, and then on the Ultimate subscription level (which is what I get as an MVP) you get  $175 per month thereafter. That starts to really justify the MSDN pricing. You want a lab in the cloud? Free Azure! -Given the free-ness of it, I decided to set up a PowerShell.org in the sky to see how it went. Configuring dual CentOS VMs was a bit of an all-day affair; I have less experience with RHEL (which is what CentOS is based on) and it took me a while to figure out that the built-in firewall was causing all my grief. Fixed now. -Microsoft publishes some pretty good guides for getting a LAMP stack running on CentOS in Azure. Not great guides, but good. They lack a decent guide on getting Passive FTP working - and it's a PITA because Azure only lets you configure incoming ports on a one-at-a-time basis (not ranges), and you can only have 25. So that's kind of a pain. But I got it working, got MySQL installed and working, and I'm presently waiting on VaultPress to smush up our latest site backup and spew it onto the Azure server. Remember: you don't pay for bandwidth going _into_ Azure, so I can load the backup in as many times as I want without incurring bandwidth. -This VaultPress thing is neat, if it works. It continually pulls changes from our WordPress installation and backs them up, timestamped, a la Apple Time Machine. Allegedly, if you give them the FTP info on you new server, and you have a base WordPress install working on the new server, they can "push" your whole site down to the new server. Given my fits and starts with FTP on CentOS today, we'll see how well it works, but I'm optimistic. Dunno. It's been saying "Testing Connection" for a long time now. Sigh. -Anyway, I'm starting both VMs in extra-small instances. Part of what I want to play with is whether or not I can upgrade those to bigger instances without breaking the universe. Depends on how CentOS behaves when it suddenly finds itself running on "new hardware." We shall see! If it works, then it'll truly be killer in terms of scaling. I also want to see if we get more "juice" running two load-balanced extra-small instances vs. a small instance (which is technically twice as big as an extra-small). Common logic suggests that more, smaller servers is better - a la every web farm, ever. But it'll be fun to test. -**Question:** anyone have any Web site load-testing software they're fond of? Mac or Windows is fine, or even both. I'll enlist some folks to help with that, since I know my DSL line's upstream side will chokepoint long before the Azure server does. Ooo, maybe we can have a PowerShell.org botnet that I could control... bwaa haa haa! -Meantime, Eric Courville, our new volunteer Webmaster, is setting up a similar Azure-based VM set with his own MSDN subscription. In addition to documenting the setup process, we're going to try and do some load-testing and see what kind of instances we need to run in to get solid performance out of the site. PowerShell.org currently peaks at fewer than 50-60 concurrent connections (and even that day was a rare peak), so we'll load test to that number. -Stay tuned! diff --git a/content/articles/2013-08-20-powershell-great-debate-whats-write-verbose-for.md b/content/articles/2013-08-20-powershell-great-debate-whats-write-verbose-for.md deleted file mode 100644 index 740b9a8e6..000000000 --- a/content/articles/2013-08-20-powershell-great-debate-whats-write-verbose-for.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "PowerShell Great Debate: What's Write-Verbose For?" -authors: - - Don Jones -date: "2013-08-20T18:07:32+00:00" -aliases: - - /2013/08/powershell-great-debate-whats-write-verbose-for/ ---- - -This was a fascinating thing to see throughout The Scripting Games this year: _When exactly should you use Write-Verbose, and why? _The same question applies to Write-Debug. - - * -"I use Write-Debug to provide developer-level comments in my scripts, since I can turn it on with -Debug to see variable contents." - - * "I use Write-Verbose to provide developer-level comments in my scripts, since I can turn it on with -Debug to see variable contents." - -See what I mean? Some folks will suggest that Verbose is for "user-friendly status messages;" others eschew Debug entirely and prefer PSBreakpoints for that functionality. -What guidance would _you_ offer for using Write-Verbose and Write-Debug in a script? -[boilerplate greatdebate] diff --git a/content/articles/2013-08-20-so-your-company-doesnt-want-to-enable-powershell-remoting.md b/content/articles/2013-08-20-so-your-company-doesnt-want-to-enable-powershell-remoting.md deleted file mode 100644 index 129a9376f..000000000 --- a/content/articles/2013-08-20-so-your-company-doesnt-want-to-enable-powershell-remoting.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "So your company doesn't want to enable PowerShell Remoting?" -authors: - - Don Jones -date: "2013-08-21T00:37:04+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/08/so-your-company-doesnt-want-to-enable-powershell-remoting/ ---- - -But I bet they're okay with Remote Desktop Protocol, right? And all those Remote Procedure Calls? -And I bet they never even thought about why _every *nix_ _system, ever, _has SSH enabled by default? But practically nothing else (by default)? -Hmm. diff --git a/content/articles/2013-08-21-powershell-orgs-azure-journey-part-3-load-testing.md b/content/articles/2013-08-21-powershell-orgs-azure-journey-part-3-load-testing.md deleted file mode 100644 index 60f167dc1..000000000 --- a/content/articles/2013-08-21-powershell-orgs-azure-journey-part-3-load-testing.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: "PowerShell.org's Azure Journey, Part 3: Load Testing [UPDATED]" -authors: - - Don Jones -date: "2013-08-21T17:43:58+00:00" -aliases: - - /2013/08/powershell-orgs-azure-journey-part-3-load-testing/ ---- - -So, I've gotten a two-VM version of PowerShell.org running in Azure. Yay, me! My *nix skills are unaccountably rusty (go fig), but it didn't take too long. Restoring the WordPress installation was the toughest, as a number of settings had to be tweaked since the site is no longer under the same URL (the  test site that is). - -## Baseline - -I ran a load test against the existing production site yesterday; you can view the results at . This simulated a 50-person concurrent load from three US locations and on UK location, which approximates our real-world traffic. The results are what they are; we're looking for the delta between these and the Azure-based system. In this test, the green line is the number of concurrent connections, and the blue is the time it took each page to load. The test ran for 10 minutes total, with each simulated user hitting three different pages on the site (home page, a forums topic, and a blog post). -A key fact is that the site currently runs under a shared hosting plan; I don't have any details on how much RAM, how much CPU, or what kind of bandwidth exists for the site. It's also important to note that the production Web site uses a Content Delivery Network, or CDN, which offloads a good amount of traffic from the site proper. Because that costs, we didn't implement a CDN for the test site. I'd therefore expect it to be somewhat slower. - -## Azure 1: XS+XS - -The first Azure test is at . This uses an extra-small instance for both the Web server and the database server (separate VMs; that reflects the fact that the current site runs the DB on a separate shared server). As you can see, the results weren't promising. By around 40 users, page load times exceeded 3 minutes, at which point they started timing out. So the test clearly overwhelmed the instance. That wasn't unexpected; an XS instance runs on a shared core with 768MB of RAM. That ain't much. I think it's also powered by a 9-volt battery. But I wanted a baseline; XS instances are super-cheap. -(As an aside, scaling out the Web tier of PowerShell.org isn't trivial, due mainly to the presence of user uploads. We'd need to make some tweaks to have all uploads sent to, and downloaded from, a single server; if we just scale-out by load-balancing in a second Web server, user-uploaded content won't work correctly. Also, doubling the instance size - e.g., from XS to S - costs the same as adding a second XS instance. Scale-out isn't off the table, but since it's more complicated to set up, I'm not testing it right now.) - -## Azure 2: S+XS - -The third test moved the Web server to a Small instance, which offers a dedicated core and 1.75GB of RAM. The DB server remained at an XS instance size. It was super-cool that you can upsize the instances whenever you want. You pay by the minute based on instance size, and the Azure Price Calculator rolls that up into a monthly estimate based on 24x7 usage. One thing I've learned is that when the Azure Web console says it's done with something, like starting a VM, you really still need to wait a few minutes before all the bits and bobs are in place to make the Web site work. Another PITA is that, when you shut down a VM, you lose both your public IP (no problem, since they handle DNS for you) and private IP (a bit of a pain since there's no DNS for it, so I had to re-point the Web server at the database server's new private IP). -(As another aside, Azure also offers the option of just moving the Web site and the database into the cloud, using PaaS rather than IaaS. We get to select the kind of instance our site runs on, but it's potentially shared with other sites. MySQL gets outsourced to ClearDB. There's some more complexity in that model from the perspective of getting the site working, and having our own VMs gives us some additional performance-improving abilities, like in-memory opcode caching. Either model costs about the same, so we're playing with the VM model at present.) -Anyway, the third test results are at . I'll mention that the S instance size allows a lot more room for opcode caching, which can help tremendously, as well as having more RAM and CPU for handling the concurrent requests. Because the simulated users are all asking for the same pages, the caching should go a long way toward helping. For this test, response times held pretty well under 20s for the majority of the test, excluding some spikes (likely due to cached items expiring and being re-generated). Things started to get dicey at 40 concurrent users, but still held about the same average performance that the current production site offers. Using the test site interactively while this load test was underway was slow, but not utterly painful. -(Real-world note: We disable a number of caching mechanisms for logged-in site users, because we don't want to serve a cached page form a logged-in user to an anonymous user. So logged-in users will get somewhat different results. For the purposes of this test, we're comparing apples to apples with anonymous simulated users.) - -## Azure 3: S+S - -Now the database server has also been upgraded to a small instance, featuring a dedicated CPU core and 1.75GB of RAM. Having to update the database server's private IP address each time it restarts is a PITA. I need to find out if there's any way to use a DNS name for that instead - something Azure updates for me when it reassigns the IP. I don't want to use the public IP/DNS, because I'd pay for bandwidth - with the internal IP, the traffic stays inside the Azure datacenter, so I don't pay for it. -Anyway, this test result is at . Can I tell you how much I love LoadImpact for doing these tests? Set up the test once, run it over and over against different configurations. Awesome. -As you're comparing the charts, pay close attention to the scale on the sides. They're not necessarily the same - you actually have to look at the numbers, not just the height of the blue line.  This time, although the blue line climbed high, it was actually under 1m for the entire test. That's a marked improvement over the XS+XS test! In addition, a S+S configuration is pretty affordable. It's about $180/mo in VMs, plus about $35 for storage and estimated bandwidth. That's less than two dedicated rackmount servers would cost, for sure. - -## Conclusion - -I need to do a bit of analysis - LoadImpact lets me download CSVs, which will let me make some direct-comparison charts - but Azure's looking like a good option for us, especially in the S+S option. I may also run a Medium+Small test (I have one credit left with LoadImpact for the month, so why not) just to see the difference. **UPDATE: **I did. The M+S test is at . diff --git a/content/articles/2013-08-23-powershell-orgs-azure-journey-part-4-incoming-advice-and-fun-facts.md b/content/articles/2013-08-23-powershell-orgs-azure-journey-part-4-incoming-advice-and-fun-facts.md deleted file mode 100644 index c35560b82..000000000 --- a/content/articles/2013-08-23-powershell-orgs-azure-journey-part-4-incoming-advice-and-fun-facts.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "PowerShell.org's Azure Journey, Part 4: Incoming Advice and Fun Facts" -authors: - - Don Jones -date: "2013-08-23T14:40:43+00:00" -aliases: - - /2013/08/powershell-orgs-azure-journey-part-4-incoming-advice-and-fun-facts/ ---- - -Had an opportunity to speak with some folks on the Azure team yesterday - Mark Russinovich was kind enough to make a contact for me. -First of all, fun fact: Azure only charges you for _used pages_ in VHDs. That is, if you create a 100GB VHD and load 1GB of data on it, you're paying for 1GB of data. Very clever. So it's charging you as if it was a dynamically expanding VHD, but of course it's a fixed VHD with all of the related performance improvements. Nice. -Second, they basically confirmed something I'd suspected. Azure's "website model" tends to appeal more to smaller businesses or personal Web sites; most "serious" players (my word) are using the IaaS model, meaning they're hosting VMs in the cloud, not just hosting a Web site. Having a full VM under your control obviously has advantages in terms of management, along with the ability to run things like in-memory caching software, load additional Web extensions, and so on. IaaS is absolutely the right model for PowerShell.org for many of those reasons. -That said, they also confirmed that the Web site model and the IaaS model cost about the same, at least as you get started. So it's really - for a smaller Web site - a matter of what you want to do. Again, there are specifics about the IaaS model that work well for us, so that's what we're looking to do. -Azure also costs about the same, in an apples-to-apples comparison, as Amazon Web Services. That's probably somewhat deliberate on Microsoft's part, but Azure has advantages. For one, their virtualization layer has been approved by the various Microsoft product teams, so if you're running SharePoint or SQL Server in an Azure VM, the team will support you. Not the case with AWS. Also, I frankly found Azure's presentation of the costs easier to grok. -Fifth (I love numbered lists, sorry), I confirmed that the IaaS option charges you for (a) the VM's you're running, by the minute; (b) the storage used by all VM VHDs' used pages, and (c) outbound bandwidth. This can potentially make IaaS more expensive than the "website" model because Azure won't spin down an IaaS VM, so you run 24x7 unless you're manually deallocating. With a website, Azure only spins up worker processes when they're needed, so your site isn't "running" 24x7, so you might pay less if it's not being "hit" 24x7. Again, though, the website model offers us less control and flexibility. -Just thought you'd enjoy some of those details! diff --git a/content/articles/2013-08-27-powershell-great-debate-fixing-output.md b/content/articles/2013-08-27-powershell-great-debate-fixing-output.md deleted file mode 100644 index f34a3d6c5..000000000 --- a/content/articles/2013-08-27-powershell-great-debate-fixing-output.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "PowerShell Great Debate: \"Fixing\" Output" -authors: - - Don Jones -date: "2013-08-27T14:11:31+00:00" -aliases: - - /2013/08/powershell-great-debate-fixing-output/ ---- - -When should a script (or more likely, function) output raw data, and when should it "massage" its output? -The classic example is something like disk space. You're querying WMI, and it's giving you disk space in bytes. Nobody cares about bytes. Should your function output bytes anyway, or output megabytes or gigabytes? -If you output raw data, how would you expect a user to get a more-useful version? Would you expect someone running your command to use Select-Object on their own to do the math, or would you perhaps provide a default formatting view (a la what Get-Process does) that manages the math? -The "Microsoft Way" is to use a default view - again, it's what Get-Process does. But views are separate files, and they're only really practical (many say) when they're part of a module that can auto-load them. -What do you think? -[boilerplate greatdebate] diff --git a/content/articles/2013-08-29-regular-expressions-are-a-replaces-best-friend.md b/content/articles/2013-08-29-regular-expressions-are-a-replaces-best-friend.md deleted file mode 100644 index 479e6864b..000000000 --- a/content/articles/2013-08-29-regular-expressions-are-a-replaces-best-friend.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "Regular Expressions are a -replace's best friend" -authors: - - Don Jones -date: "2013-08-29T17:31:13+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -aliases: - - /2013/08/regular-expressions-are-a-replaces-best-friend/ ---- - -Are you familiar with PowerShell's -replace operator? - - -`"John Jones" -replace "Jones","Smith" -`Most folks are aware of it, and rely on it for straightforward string replacements like this one. But not very many people know that -replace also does some amazing stuff using regular expressions. - - -`"192.168.15.12,192.168.22.8" -replace "\.\d{2}\.","10" -`That'd change the input string to "192.168.10.12,192.168.10.8," replacing all occurrences of two digits, between periods, to 10. The 12 would be skipped because it isn't followed by a period, as specified in the pattern. Note that _all_ occurrences are replaced, in keeping with the usual operation of -replace. -The operator can also do capturing expressions, and this is where it gets really neat-o. - - -`"Don Jones" -replace "([a-z]+)\s([a-z]+)",'$2, $1' -`Here, I've specified two capturing expressions in parentheses, with a space character between them. PowerShell will capture the first to $1, and the second to $2. Those aren't actually variables, which is important. In my replacement string, I put $2 first, followed by a comma, a space, and $1. The resulting string will be "Jones, Don". It's important that my replacement string be in single quotes. In double quotes, the shell will try and treat $1 and $2 as variables, instead of using them as captured regex placeholders. I kinda wish they'd used something other than a $ for the captured placeholders, so that they didn't look like variables, but the syntax is in keeping with regex standards. -I think it's cool to see all the places a regex can be put to use. The -split operator also supports regex syntax as a way of specifying the separator that will be used to break a string into components, so you're not limited to splitting just on a single character like a comma. -Apart from the well-known -match operator and the Select-String command, where else have you used a regex in PowerShell? diff --git a/content/articles/2013-09-05-writing-courseware-10961-powershell-class.md b/content/articles/2013-09-05-writing-courseware-10961-powershell-class.md deleted file mode 100644 index 94510ffb3..000000000 --- a/content/articles/2013-09-05-writing-courseware-10961-powershell-class.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: "Writing Courseware: 10961 PowerShell Class" -authors: - - Don Jones -date: "2013-09-05T15:36:56+00:00" -categories: - - Training -aliases: - - /2013/09/writing-courseware-10961-powershell-class/ ---- - -We're in the process of working on a 10961C revision to the Microsoft PowerShell course, and I've been reviewing the anonymous comments submitted by MCTs and students on 10961A (the "B" rev, which is what was produced after our beta teach, is just now orderable so we don't have comments yet). -**By the way - if you're a student or MCT who has taken/delivered 10961A, you're welcome to [contact me directly][1] if you want to share any info on typos you found. Would like to fix those. **Microsoft unfortunately didn't bill 10961A as "pre-beta," which it was, and I think that may have not properly set some expectations. -Anyway, if you've ever taken a course and thought anything bad about the _courseware_ (not necessarily the instructor), take a look at these comment excerpts from this one course: - - - By day 3 (5 day class) most students felt over-whelmed. I had to move some of the chapters around to give them time to acclimate to the product before continuing onto more advanced topics. Students agreed that this shifting around of material was essential, allowing them to absorb what was covered in the first 2 days. - - - There was not nearly enough material to fill a 5 day class. Students ended up leaving very early on the last two days. - - - The class had too much repetition of some concepts. - - - Students were not given enough time or repetition on core fundamentals. - - -Right. Same class. No idea what to do with that, as a courseware designer. -(and by the way, this is after parsing through _hundreds_ of comments from students who took the class remotely and were extremely dissatisfied with the experience. Believe me, you want to take training live and in-person.) -There's also a question of, "what the heck were you expecting?" - - - was looking for more examples and understanding of using exchange and AD comandlet. - - - Missed basic knowledge of Workflows and Web Access. - - - Should include Flowchart among new features released in Version 3 [as soon as I figure out what feature 'flowchart' is, I'll get right on it] - - - There was nothing geared toward using PowerShell with SQL Server. - - - Some material and labs not as relevant for me specifically without a networking/server background. I will likely use exclusively for SharePoint. - - - The book should have covered creating functions that utilize pipeline content coming in, and Filtering commandlets. Discussion about creating Gui components or a reference to it in the book would be helpful. - - -Astonishing, because _none of these things are mentioned in the course description. _Can you imagine writing a generic PowerShell course that included examples specific to [__insert technology here__]? Everyone else in the room would be bored and hate it. Look, you've got one comment from a SharePoint admin with no networking/server experience. Goodness. A few folks suggested more AD examples - which I'd used in 10325, the predecessor course, and gotten tons of comments along the lines of, "I don't do AD in my organization so all of the examples were useless to me." O-kay! Can't win 'em all, I guess. -I think a lot of _instructors_ miss the point on teaching PowerShell, which is to focus on teaching the shell and its discoverability mechanisms. I think setting expectations with students is key, too - let them know you're _not_ covering Exchange or SQL or SharePoint or Lync or whatever, but instead focusing on the core shell. And not even _everything the shell does_ - 5 days isn't enough time. In fact, that's why 55039 is being offered - to provide the functions/programming side of the class. -Anywho - love your feedback if you've taught or taken the class! We have a few weeks in which to decide what we're doing with 10961C. - - [1]: http://concentratedtech.com/contact diff --git a/content/articles/2013-09-08-phillyposh-09052013-meeting-summary.md b/content/articles/2013-09-08-phillyposh-09052013-meeting-summary.md deleted file mode 100644 index 048c0155d..000000000 --- a/content/articles/2013-09-08-phillyposh-09052013-meeting-summary.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: PhillyPoSH 09/05/2013 meeting summary -authors: - - John Mello -date: "2013-09-09T03:05:10+00:00" -aliases: - - /2013/09/phillyposh-09052013-meeting-summary/ ---- - -* [Author][1], [Scripting Games 2013 winner][2], and founder of the [Mississippi PowerShell User Group][3], [Mike Robbins][4], gave a presentation entitled "Using CIM Cmdlets and CIM Sessions" via Lync. - * Afterwards various group members participated in script and tell. - * A [recording of the meeting is available][5] on our [YouTube channel][6], please note that half way through our script club we had an issue with a duplicate audio track. - - [1]: http://www.manning.com/hicks/ - [2]: http://scriptinggames.org/ - [3]: http://mspsug.com/ - [4]: http://mikefrobbins.com - [5]: https://www.youtube.com/edit?video_id=KUw10Dc_igs&video_referrer=watch&ns=1 - [6]: https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2013-09-10-great-debate-the-conclusion.md b/content/articles/2013-09-10-great-debate-the-conclusion.md deleted file mode 100644 index de85f783a..000000000 --- a/content/articles/2013-09-10-great-debate-the-conclusion.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Great Debate: The Conclusion" -authors: - - Don Jones -date: "2013-09-10T20:23:57+00:00" -categories: - - Books -aliases: - - /2013/09/great-debate-the-conclusion/ ---- - -All this Summer, we've been encouraging your feedback in a [series of Great Debate posts][1]. Most of the topics came from the 2013 Scripting Games, where we definitely saw people coming down on both sides of these topics. My goal was to pull everyone's thoughts together into a kind of community consensus, and to offer a living book of community-accepted practices for PowerShell. This'll be a neverending story, likely adapting and growing to include more topics as the years wind on. -But here's the start: [DRAFT-2013Sep_Practices][2] is the first draft, officially a Request For Comments, based on the comments you've all contributed to the Great Debate posts over these past few weeks. I tried to capture consensus where I saw it, and to outline both sides of the great back-and-forth we've seen. -**NOTE:** The cover image in this draft is just a placeholder; this book is NOT dedicated to error handling. Its working title is correctly shown on the page following the cover image. -I'm going to leave _this_ post in place until October 1st. Please drop any comments you'd like to offer to the final first edition of this ebook, and let me know if there are any topics you'd like to see debated in the future. After October 1st, I'll publish the final edition of this Practices guide as one of PowerShell.org's free ebooks. The final first edition will also become part of the next iteration of The Scripting Games, as its official "best practices" guide. In fact, you'll notice in this draft that there are a couple of Games-specific comments, since the Games sometimes have different drivers than a production environment. -Thanks again to everyone who participated! - - [1]: https://powershell.org/category/great-debates/ - [2]: https://powershell.org/wp-content/uploads/2013/08/DRAFT-2013Sep_Practices.pdf diff --git a/content/articles/2013-09-11-my-new-powershell-video-series-covering-v2v3v4-launches.md b/content/articles/2013-09-11-my-new-powershell-video-series-covering-v2v3v4-launches.md deleted file mode 100644 index 055199718..000000000 --- a/content/articles/2013-09-11-my-new-powershell-video-series-covering-v2v3v4-launches.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: My New PowerShell Video Series, Covering v2/v3/v4, Launches -authors: - - Don Jones -date: "2013-09-11T17:35:25+00:00" -categories: - - Training -aliases: - - /2013/09/my-new-powershell-video-series-covering-v2v3v4-launches/ ---- - -It's finally starting to be published - my [Ultimate PowerShell Video Training Series][1], covering versions 2 and onward. -This series will initially consist of 90 chunks of roughly 20 minutes each, adding up to more than 30 hours total. I'm building each individual video to CLEARLY differentiate between PowerShell v2, v3, and v4; for the most part, I switch to Windows 7, Windows 8, and Windows 8.1 to demonstrate specifics in each version. That means you can clearly tell what features and techniques go with each version. It also means the series can be extended as new versions are released in the future. -This is going to cover _everything_ - think of it as a "PowerShell In Depth" done in video. And, whatever I forget, if there is anything, can be easily added to the series. In other words, this will be my new, permanent video training for PowerShell. It'll cover every version from v2, be extended to cover new version techniques and features, and be expanded to cover new topics as they become of interest. -It's being built with hands-on labs, too. I describe a lab environment you can set up (super-simple), and provide written lab documents for you to work through. Each is then covered in a standalone video, so that you can see sample solutions. -Best of all, you can watch the whole thing for under $100. CBT Nuggets' program gives you monthly access to their entire library for that price, including my entire PowerShell series, their hundreds of titles related to certification and technology, _everything. _Or pay $1000 for an entire year - which also gets you access to practice certification exams from Transcender. -I'll be publishing 5-10 videos per week in this series, until it's done - and we'll then be tackling domain-specific PowerShell management, including Exchange, AD, SQL Server, System Center, _all_ of it. It'll take some time to build out all of that, but I'm committed to building the most comprehensive PowerShell video training offering in the universe! -If you get a chance to check out the new series, let me know what you think. - - [1]: http://cbtnuggets.com/it-training-videos/course/cbtn_pwrshl_master diff --git a/content/articles/2013-09-12-winter-scripting-games-more-feedback-needed.md b/content/articles/2013-09-12-winter-scripting-games-more-feedback-needed.md deleted file mode 100644 index 291ea947a..000000000 --- a/content/articles/2013-09-12-winter-scripting-games-more-feedback-needed.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "Winter Scripting Games: More Feedback Needed" -authors: - - Don Jones -date: "2013-09-13T00:33:29+00:00" -categories: - - Scripting Games -aliases: - - /2013/09/winter-scripting-games-more-feedback-needed/ ---- - -So I'm continuing to work through some logistics regarding the Winter Scripting Games (and no, there's no dates set). -The intent of these Games, as I've written before, is to offer a _collaborative_ experience. You'll work in teams of (proposed) 2-6. You have two ways to join a team: Pick an existing one that needs players (you'll be shown the average time zone offset, in minutes, of the existing players, so that you can choose a team near you) or create a new team from scratch - which others can then join. You'd be welcome to "recruit" for your team using social media. -NB: _Collaborate_ does not mean _live online collaboration. _Your team could do a Google Hangout or whatever optionally, but we're only providing asynchronous collaboration. -You will be able to leave your team up to a point. That is, you could always LEAVE your team, but each event within the Games will have a deadline for joining - meaning if you're not on a team when the event starts, you'll have to wait for the next event to re-join a team. -My question right now revolves around the collaborative process. The idea is that the team has a single, shared code repository, meaning everyone on the team can see it. I want you to visualize this in your head, and then describe to me how you think it should work. -The overall idea is that your team works on the assignment together, and then forwards (by the deadline) a final team entry for judging. -Would you start by allowing one team member to upload an entry, and everyone would collaborate on it? Or would every member have the ability to upload a potential entry, and you'd all discuss which one you wanted to use as the team's starting point? If there can be multiple parallel entries, how will the team decide, and then indicate to the system, which one is the "final" one? Remember, the team only sends ONE entry up for judging. -NB: We will provide private team discussion threads within the system. You will not necessarily be able to comment on a given script file _per se, _but we'll provide a means to reference lines of code within the team discussion threads. That keeps the discussion in one place, but allows you to refer to specific wodges of code. -How will the code portion of the collaboration work? That is, when someone wants to provide a revision to the team entry, would they upload/paste an entirely new entry? Or would we provide a text editor so that you could edit the code that already exists? I'll note that we're _NOT NOT NOT_ providing an ISE experience - so a Web-based text editor might well leave room for unintentional errors. We won't help you with those. -If we use a paste-in text editor, we'd enable you to paste in an all-new entry, or to simply make quick changes to an existing entry, right in the Web page. That might be convenient. -The new system will recognize the concept of a given entry consisting of multiple files - e.g., a script module that includes a .psm1, .psd1, and .ps1xml file, all working as a unit. -Do we version-control this? That is, if everyone's uploading revisions, do we just keep 'em all, and indicate which one was most recent? That way you could always access older versions? Again, if each team gets a single entry, and each member can paste in new code or edit the existing code, this seems workable. We'd keep old versions so you could "roll back" if needed. -If we did that, would you NEED a version-to-version comparison tool? If so, the complexity of that may mean we don't run the Games this Winter. So think real hard about WANT vs. NEED. We COULD provide a way to download, in a ZIPped folder hierarchy, all versions of the entry, meaning you could then use local comparison tools on your computer to compare revisions. -Your thoughts? What do you think is the best workflow for this kind of Games? diff --git a/content/articles/2013-09-20-nominate-your-powershell-hero.md b/content/articles/2013-09-20-nominate-your-powershell-hero.md deleted file mode 100644 index 8eaa9303b..000000000 --- a/content/articles/2013-09-20-nominate-your-powershell-hero.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Nominate Your PowerShell Hero -authors: - - Don Jones -date: "2013-09-20T17:02:18+00:00" -categories: - - Announcements -aliases: - - /2013/09/nominate-your-powershell-hero/ ---- - -PowerShell.org is proud to announce a new community recognition program: **PowerShell Heroes**. We're looking for your Hero nominations! -A **PowerShell Hero** is someone who you feel does an outstanding job helping the community, perhaps by answering questions in forums (here or elsewhere), writing useful blog posts, offering education, and more. A **PowerShell Hero** is someone who  -has not already received formal recognition elsewhere -, meaning past and present MVPs are not eligible. _ -_ -We are accepting nominations until December 15th, 2013. At that point, the Board of PowerShell.org will review the nominations, and in early 2014 we will announce those we're honoring with this recognition. In subsequent years, past honorees will decide who gets recognized in the following years. -**Who can I nominate?** Anyone you want, except current or past MVPs, Microsoft employees, Microsoft Regional Directors, or others who have been formally recognized for their community contributions. -**How do I nominate them? **Send us an e-mail (admin@; our domain is powershell.org). We need the person's name or online handle, and some links to their contributions. Also describe in 100-500 words why they're your PowerShell Hero. Please put "PowerShell Hero" in the subject line of your email. -**How many people will be recognized?** We don't have a fixed number. -**What will honorees receive? **Online recognition; we'll be publishing an online directory of Heroes. We're looking into making plaques, but it depends a bit on the finances. There are no other benefits to the honoree. -**Must someone re-qualify every year? **This isn't like the MVP program - it's a recognition with no benefits. So there's nothing to "qualify" for. In future years, the previous year's honorees will select the next year's honorees, so you're prohibited from being recognized in sequential years. -**How can I think of who to nominate? **Think about who has helped _you_ with PowerShell problems. Did someone help you solve something through a discussion forum? Did someone's blog post give you that "aha!" moment? Did someone spend a massive amount of time putting together a PowerShell event that really helped you? Those are the heroes we want to recognize. Again, past and present MVP award recipients are not eligible - they've already been recognized. -We look forward to your nominations! diff --git a/content/articles/2013-09-23-seeking-curators-for-powershell-ebooks.md b/content/articles/2013-09-23-seeking-curators-for-powershell-ebooks.md deleted file mode 100644 index a62292b2b..000000000 --- a/content/articles/2013-09-23-seeking-curators-for-powershell-ebooks.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Seeking Curators for PowerShell eBooks -authors: - - Don Jones -date: "2013-09-23T19:15:22+00:00" -categories: - - Announcements - - Books -aliases: - - /2013/09/seeking-curators-for-powershell-ebooks/ ---- - -[UPDATE: I think I've finally gotten all the books under curation - but if you've an idea for a PowerShell-related ebook, and would like to co-author or even be a principal author (I'll help out with logistics), still hit me up.] -As you may know, PowerShell.org hosts a number of free ebooks that have, to date, been written mainly by me. But I've recently been delighted to welcome some co-contributors - Forums regular Dave Wyatt has contributed new content to "Secrets of PowerShell Remoting," for example, and Matt Penny has volunteered to organize the forthcoming "Community Book of PowerShell Practices." -I'd like to try and sign up "curators" for some of our other free ebooks, including the forthcoming "Big Book of PowerShell Error Handling" and the "Creating Trend and Analysis Reports in PowerShell" titles, as well as - and this is one I'm really interested in getting someone for - the "Big Book of PowerShell Gotchas." -What's a curator do? -Mainly, incorporate community feedback (typos, etc) into future editions, as well as integrating new content. That content might be written by the curator, or contributed by someone else. We use a very simple Word template, and you'd use Calibre to produce PDF and EPUB from that. I provide cover art images and whatnot - this is mainly an "assemble, organize, and deal with the errata" process at a minimum. If you are passionate about the topic, you can of course become a co-author with me and add your own content (and I'm happy to help you do so). That's especially true for the "Gotchas" title, which is mainly a series of short articles that cover some of the shell's biggest speed bumps. -A copy of Word, Calibre (free) and a GitHub client (free) are needed, plus a few free hours every few months and the willingness to take on the job. You'll truly be helping: I often can produce extra content now and again, but actually spell-checking it, putting it into the book, making the EPUB version, and so on - believe it or not, that stuff takes me more time and is one reason the ebooks don't get updated more often. Sigh. -[Hit me up if you're interested][1] in helping out! - - [1]: http://concentratedtech.com/contact diff --git a/content/articles/2013-09-24-the-new-look-of-the-scripting-games.md b/content/articles/2013-09-24-the-new-look-of-the-scripting-games.md deleted file mode 100644 index cba3a046e..000000000 --- a/content/articles/2013-09-24-the-new-look-of-the-scripting-games.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: The New Look of the Scripting Games -authors: - - Don Jones -date: "2013-09-24T16:25:35+00:00" -categories: - - Announcements - - Scripting Games -aliases: - - /2013/09/the-new-look-of-the-scripting-games/ ---- - -I've been busily working on a new interface for the Scripting Games - we're still planning a Winter Games event - and wanted to share progress. You can click this thumbnail to see the full image. - - - [![The new Scripting Games features movable, resizable panels](https://powershell.org/wp-content/uploads/2013/09/games-150x150.png)](https://powershell.org/wp-content/uploads/2013/09/games.png) - - - - The new Scripting Games features movable, resizable panes - - - - -The new layout features movable, resizable panels, allowing you to position them however works best on your screen. No, they're not especially mobile-friendly. -As you can see (at least in implication), entries can consist of multiple files, as in a complex script module. There's a team-level discussion as well as (as shown) discussion threads for each file. Any player on the team can add new files, delete files, or modify existing files by uploading a replacement. This view shows that I joined the team "Aliens" after the current event had started, which is why I'm unable to contribute new files. -Your team won't be restricted to using the Scripting Games Web site. In fact, you can collaborate and communicate however you like. Use Git or PoshCode for your scripts, and e-mail or a discussion list for communications. It's your choice. -We'll be recruiting a team of Coaches, who will browse whatever you've added to the Scripting Games Web site in advance of the event deadline, offering their own comments - you can see that Coach comments are highlighted for easy recognition. It'll pay to drop code into the Web site every day so our coaches have something to comment upon, and to check in daily for any coach comments that may have been left. -The upcoming Games events will be more complicated - you've got a team to work with, so we figure you can handle an extra challenge. Event scenarios will be authored by a team of community all-star volunteers, including The Scripting Guys and various MVPs and enthusiasts. That should give each scenario a slightly different flavor, exposing you to a wider variety of real-world challenges. -Judging of team entries will involve a more complex scoring rubric than our past 1-to-5-stars technique - giving you a more detailed scorecard. Keep in mind that each team will be able to submit only one combined entry, which will give our judges fewer to look at - and more time to look at each one. The new rubric will still allow judges to express some personal tastes and opinions, so you shouldn't expect to be able to please everyone every time! -Team assembly will allow you to form your own team, or be automatically assigned to a team that needs players (teams MUST have 2 players to participate). We've rigged the system to ask for your time zone, and to display the average time zone offset of potential teams. That way, you can look for a team whose players are geographically close to you, helping to facilitate any real-time collaboration you might set up (via YouTube, Google+, or whatever). If you choose auto-assignment, the system looks for a team whose players are geographically close to you, relatively speaking. -Local user groups are encouraged to form their own team, and to have their own members join - that way, the Scripting Games can be the topic of a monthly meeting or two. -Things are still evolving and under development, but wanted to share this early look! diff --git a/content/articles/2013-09-29-winter-scripting-games-tentatively-scheduled.md b/content/articles/2013-09-29-winter-scripting-games-tentatively-scheduled.md deleted file mode 100644 index ae17acfe2..000000000 --- a/content/articles/2013-09-29-winter-scripting-games-tentatively-scheduled.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Winter Scripting Games Tentatively Scheduled -authors: - - Don Jones -date: "2013-09-29T16:34:46+00:00" -categories: - - Scripting Games -aliases: - - /2013/09/winter-scripting-games-tentatively-scheduled/ ---- - -We're tentatively scheduling the 2014 Winter Scripting Games for 4-6 weeks beginning January 6, 2014. Right now, we're running functional tests on the platform (which will be all-new and much-improved), and soliciting scenarios from MVPs and PowerShell celebrities. -As previously announced, players will work in teams of 2-6 in this edition of the Games, and it's never too early to start finding friends to form a team with you. Because you'll be working in teams, and because you'll have a full week to complete each scenario, expect more complex scenarios! You'll have to practice breaking down tasks and assigning them to team members. -You'll also need to think about how you want to collaborate as a team. We'll be providing a very basic private in-Game discussion thread for each team, but you're welcome to use Git, PoshCode, e-mail, MailChimp lists, or _whatever_ for your collaboration. You'll be able to submit your entries' files whenever you like, and revise them to your heart's content right up to the entry submission deadline. - -> As a tip, I'll _strongly_ suggest setting up a free repository on GitHub. It's very easy to use (free GUI tools are available), it's _great_ for version-controlled collaboration (that's the point of it), and we're going to try and set up a way where the Scripting Games system can automatically retrieve your latest files right from Git. That means, if you're using Git, you wouldn't have to manually copy-and-paste your entries into the Games! Git also offers the ability to create issues (bugs), maintain a project wiki, and more. It's a great system to learn to use. - -Even if you're collaborating outside the Games system (which we expect many will do), we encourage you to drop your current files into the Games system every day or so. We'll be recruiting expert Coaches to drop in, see what you're doing, and offer commentary using the in-Games discussion thread for your team. -Scoring will be provided by a panel of expert judges, who will be using multi-item scoring rubrics (which you'll be given as part of your scenario). That means you won't have a 1-to-5-star score, but rather a complete "scorecard" with multiple items, as well as comments from each judge. -Once scoring is complete, you'll be able to see all other teams' entries and scores, judge comments, and so on. -More details are still forthcoming, but we hope you're getting amped up about this next edition of the Scripting Games! diff --git a/content/articles/2013-10-01-congrats.md b/content/articles/2013-10-01-congrats.md deleted file mode 100644 index 01a72707e..000000000 --- a/content/articles/2013-10-01-congrats.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Congrats! -authors: - - Don Jones -date: "2013-10-01T15:10:03+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/10/congrats/ ---- - -Congrats to our CFO, Jason Helmick, on receiving his first MVP Award! diff --git a/content/articles/2013-10-01-more-congrats.md b/content/articles/2013-10-01-more-congrats.md deleted file mode 100644 index d55eeac8c..000000000 --- a/content/articles/2013-10-01-more-congrats.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: More Congrats! -authors: - - Don Jones -date: "2013-10-01T19:29:51+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/10/more-congrats/ ---- - -Another kudos to Jon Walz, host of the long running PowerScripting Podcast, for his first and well-deserved MVP Award! diff --git a/content/articles/2013-10-02-building-a-desired-state-configuration-infrastructure.md b/content/articles/2013-10-02-building-a-desired-state-configuration-infrastructure.md deleted file mode 100644 index d7e5e6e26..000000000 --- a/content/articles/2013-10-02-building-a-desired-state-configuration-infrastructure.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Building a Desired State Configuration Infrastructure -authors: - - Steven Murawski -date: "2013-10-02T19:35:41+00:00" -categories: - - Tutorials -aliases: - - /2013/10/building-a-desired-state-configuration-infrastructure/ ---- - -This is a the kickoff in a series of posts about building a [Desired State Configuration (DSC)](http://technet.microsoft.com/en-us/library/dn249912.aspx) infrastructure. I'll be leveraging concepts I've been working on as I've been building out our DSC deployment at [Stack Exchange](http://stackexchange.com). - -## The High Points - - * Overview (this post) - * [Configuring the Pull Server (REST version)](https://powershell.org/2013/10/03/building-a-desired-state-configuration-pull-server/) - * Creating Configurations ([one of two](https://powershell.org/2013/10/08/building-a-desired-state-configuration-configuration/), [two of two](https://powershell.org/2013/10/14/building-a-desired-state-configuration-configuration-part-2/)) - * [Configuring Clients](https://powershell.org/2013/11/06/configuring-a-desired-state-configuration-client/) - * [Building Custom Resources](https://powershell.org/2014/03/13/building-desired-state-configuration-custom-resources/) - * Packaging Custom Resources - - - - * Advanced Client Targeting - -I'm starting today with the general overview of what I'm trying to accomplish and why I'm trying to accomplish this. The **what** and **why** are critical in determining the **how** - -## The Overview - -### Goal: - -All systems have basic and general purpose roles configured and monitored for drift via Desired State Configuration. - -### Reason: - -System configuration is the one of the silent killers for sysadmin (yes, I prefer sysadmin to IT Pro - deal with it). In the case where deployments are not automated, each system is unique, a snowflake that results from the our fallibility as humans. -The more steps involved that require human intervention allow for more potential failure points. Yes, if I make a mistake in my automation, then that mistake can be replicated out. But as Deming teaches with the Wheel of Continuous Improvement ([Plan, Do, Check, Act](http://totalqualitymanagement.wordpress.com/2009/02/25/deming-cycle-the-wheel-of-continuous-improvement/)),  we can't correct a process problem until we have a stable process. - - - [![](http://totalqualitymanagement.files.wordpress.com/2009/02/deming-wheel4.png?w=459&h=306)](http://totalqualitymanagement.wordpress.com/2009/02/25/deming-cycle-the-wheel-of-continuous-improvement/) - - - - Deming Cycle - - - - -Every intervention by a human adds instability to the equation, so first we need to make the process consistent. We do that by standardizing the location(s) of human intervention.  Those touch points become the areas that we can tweak to further optimize the system.  I'm getting a bit ahead of myself though. -Let's continue to look at how organizations tend to deploy systems.  Organizations tend to have several levels of flexibility in their organizations about how systems are built and provided for use.  The three main categories I see are: - - * Automated provisioning from a purpose built image - * Install and configure from checklist - * Install and configure on demand - -Usually, the size of the organization tends to indicate to what level they've automated deployments, but that is less true today.  Larger organizations tend to have more customized and automated deployments.  It's mainly been a matter of scale.  With virtualization and (please forgive me) cloud infrastructures, even smaller organizations can have ever increasing numbers of servers to manage, with admin to server ratios of 1 to hundreds being common and where the number of servers starts to overtake the client OS count. -If we aren't in a fully automated deployment environment, each server has the potential to be subtly (or not so subtly) unique.  Checklists and scripts can help with how varied our initial configurations can start out, but each server is like a unique piece of art ([or a snowflake](http://martinfowler.com/bliki/SnowflakeServer.html)). - - - [![](http://upload.wikimedia.org/wikipedia/commons/7/7d/Poseidon_sculpture_Copenhagen_2005.jpg)](http://upload.wikimedia.org/wikipedia/commons/7/7d/Poseidon_sculpture_Copenhagen_2005.jpg) - - - - Try to make more than one of me... - - - - -That's kind of appealing to sysadmins who like to think of themselves as crafters of solutions.  However, in terms of maintainability, it is a nightmare.  Every possible deviation in settings can cause problems or irregularities in operations that can be difficult to track down.  It's also much more work overall. -What we want our servers to be is like components fresh off the assembly line. - - - [![](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSJmOiGPPMI-4_RYvO-um41VjgVBE6i04TQWKUF83Gc_RhVbE8r7FyJcYCt)](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSJmOiGPPMI-4_RYvO-um41VjgVBE6i04TQWKUF83Gc_RhVbE8r7FyJcYCt) - - - - Keeping it consistent - - - - -Each server should be consistently stamped out, with minimal deviations, so that troubleshooting across like servers is more consistent.  Or, even more exciting, if you are experiencing some local problems, refreshing the OS and configuration to a known good state becomes trivial.  Building the assembly line and work centers can be time consuming up front, but pays off in the long haul. - -#### My Situation: - -At Stack Exchange, we are a mix of these categories.  All of our OS deployments are driven by PXE boot deployments.  For our Linux systems, we fall into the first group.  We can deploy an OS and make the addition to our [Puppet](https://puppetlabs.com/puppet/puppet-open-source) system, which will configure the box for the designated purpose.  For our Windows systems, we operate out of the second and third groups.  We have a basic checklist (about 30-some items) that details the standards our systems should be configured with, but once we get to configuring the server for a specific role, it's been a bit more chaotic.  As we've migrated to Server 2012 for a web farm and SQL servers, we've began to script out our installations for those roles, so they were kind of automated, but in a very one-time run way. -Given where we stood with our Windows deployments and the experience we had with Puppet, we looked at using Puppet with our Windows systems (like [Paul Stack](https://twitter.com/stack72) - [podcast](http://herdingcode.com/herding-code-174-paul-stack-on-automating-windows-configuration-management-with-puppet-and-powershell/), [video](https://vimeo.com/68226718)) and decided not to go that route (why is probably worthy of another post at another time).  That was around the time that DSC was starting to peek it's head out from under the covers of the Server 2012 R2 preview.  Long story made short, we decided to use DSC to standardize our Windows deployments and bring us parity with our Linux infrastructure in terms of configuration management. - -#### Proposed Solution: Desired State Configuration - -DSC offers us a pattern for building idempotent scripts (contained in DSC resources) and offers an engine for marshaling parameters from an external source (in my case a DSC Pull Server, but could be a tool like Chef or some other configuration management product) to be executed on the local machine, as well as coordinating the availability of extra functionality (custom resources).  I'm building an environment where a deployed server can request it's configuration from the pull server and reduce the number of touch points to improve consistency and velocity in server deployments. -**Next up, I'm going to talk about how I've configured my pull server, including step by step instructions to set one up on Server 2012 R2.** diff --git a/content/articles/2013-10-02-seeking-coaches-and-judges-for-the-winter-scripting-games.md b/content/articles/2013-10-02-seeking-coaches-and-judges-for-the-winter-scripting-games.md deleted file mode 100644 index f893b7ac5..000000000 --- a/content/articles/2013-10-02-seeking-coaches-and-judges-for-the-winter-scripting-games.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Seeking Coaches and Judges for the Winter Scripting Games -authors: - - Don Jones -date: "2013-10-02T17:58:14+00:00" -categories: - - Announcements - - Scripting Games -aliases: - - /2013/10/seeking-coaches-and-judges-for-the-winter-scripting-games/ ---- - -We're now seeking volunteer Coaches and Judges for the Winter Scripting Games! -The Games are tentatively scheduled to run for 4-6 weeks starting January 6th, 2014. There will be 4-6 events, each lasting one week. - - -## Coaches - -Coaches have access to all teams' entries and private discussion threads for the week while entries are being developed and accepted. Coaches are meant to log in _throughout_ that one-week period, evaluate what teams have submitted so far, and offer comments and advice in the in-Game discussion thread. -![6-002](https://powershell.org/wp-content/uploads/2013/09/6-002.png) -Coaches' comments receive a special flag, helping teams focus on them quickly. Note that teams are not required to use the in-Game discussion thread - they can discuss via email or elsewhere. Teams are also not required to continually submit entry files for coach review, so for some teams, coaches will have nothing to offer. -Team discussions are private to the team members and coaches; discussions will not be made public. -We'll accept as many coaches as want to participate. Note that you **cannot** be both a coach and a judge, and coaches are not permitted to participate on a team as a player. - - -## Judges - -We will accept a small panel of judges. After the event concludes, you'll have several days to review _all_ team entries. You'll complete a scorecard as shown, and offer any comments that justify your scoring. -[![6-001](https://powershell.org/wp-content/uploads/2013/09/6-001.png)](https://powershell.org/wp-content/uploads/2013/09/6-001.png) -Scorecards may have anything from just a few scoring items to more than a dozen; each scoring item corresponds to a requirement in the event scenario. Keep in mind that teams contain from 2-6 players, and there's only one event per team, so there will be fewer overall entries than in past years. Entries may, however, consist of multiple files. Some scenarios may ask teams to run their scripts, capture a transcript, and include the transcript in the entry - in those cases, judges will be able to see entries' output without running the scripts themselves. -We will provide judges the ability to download _all_ event entries for _all_ teams via a single ZIP file. That will enable offline review, if desired; you can then log in to submit your scorecards for each team. -Judge scores and comments, along with the judges' names, will be made public after scoring concludes. -Judges **cannot** participate as either players or coaches. - - -## Want to Volunteer? - -If you'd like to volunteer, [sign up for the appropriate (coach or judge) mailing list][1]. Note that we will only be accepting a limited number of judges, so not everyone who volunteers may be selected. However, **please do not sign up for both lists. **You need to pick one. If you volunteer to be a judge but aren't selected, you can go back later and sign up for the coach list. -Signing up at this stage **is not a commitment ** - you're just expressing an interest. We'll provide more information closer-in, and you can always opt-out prior to the start of the Games. - - - [1]: http://powershell.hosted.phplist.com/lists/?p=subscribe&id=6 diff --git a/content/articles/2013-10-03-building-a-desired-state-configuration-pull-server.md b/content/articles/2013-10-03-building-a-desired-state-configuration-pull-server.md deleted file mode 100644 index 8e992b160..000000000 --- a/content/articles/2013-10-03-building-a-desired-state-configuration-pull-server.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Building a Desired State Configuration Pull Server -authors: - - Steven Murawski -date: "2013-10-03T19:40:59+00:00" -categories: - - PowerShell for Admins - - Tutorials -aliases: - - /2013/10/building-a-desired-state-configuration-pull-server/ ---- - -Quick recap, I'm working through a series of posts about the [Desired State Configuration](http://technet.microsoft.com/en-us/library/dn249912.aspx) infrastructure that I'm building at [Stack Exchange](http://stackexchange.com), including some how-to's. - -## The High Points - - * [Overview](https://powershell.org/2013/10/02/building-a-desired-state-configuration-infrastructure/) - * Configuring the Pull Server (REST version) (this post) - * Creating Configurations ([one of two](https://powershell.org/2013/10/08/building-a-desired-state-configuration-configuration/), [two of two](https://powershell.org/2013/10/14/building-a-desired-state-configuration-configuration-part-2/)) - * [Configuring Clients](https://powershell.org/2013/11/06/configuring-a-desired-state-configuration-client/) - * [Building Custom Resources](https://powershell.org/2014/03/13/building-desired-state-configuration-custom-resources/) - * Packaging Custom Resources - * Advanced Client Targeting - -I started with an overview of **what** and **why**.  Today, I'm going to start the **how**. - -### Building a Pull Server - -I'm going to describe how to do this with Server 2012 R2 RTM (NOTE: this is not the General Availability  release, so there may be changes at GA), since that's the environment I'm working most in.  If there is enough demand, I may follow up with how to do this using the Windows Management Framework on downlevel operating systems after the GA version of WMF 4 is released. -The first step is adding the required roles and features, including the DSC Service. - - -`Add-WindowsFeature Dsc-Service -`Fortunately, the Dsc-Service feature has the right dependencies configured so IIS, the correct modules, and the Management OData Extension are all enabled. -Next we need to set up the IIS web site: - - * Create an directory to serve the web application from (I'll use c:\inetpub\wwwroot\PSDSCPullServer) - * Copy several files from $pshome/modules/psdesiredstateconfiguration/pullserver (Global.asax, PSDSCPullServer.mof, PSDSCPullServer.svc, PSDSCPullServer.xml) to this directory. - * Copy PSDSCPullServer.config and rename it to web.config - * Create a subdirectory named "bin". - * Copy one file from $pshome/modules/psdesiredstateconfiguration/pullserver (Microsoft.Powershell.DesiredStateConfiguration.Service.dll) to the "bin" directory. - * In IIS, create an application pool that runs under the "Local System" account. - * In, IIS, create a new site (or application in an existing site or just use the existing default site) - * Point the site or application root to the directory you designated as the root of the site. - * Unlock the sections of the web config as below - - -`$appcmd = "$env:windir\system32\inetsrv\appcmd.exe" -& $appCmd unlock config -section:access -& $appCmd unlock config -section:anonymousAuthentication -& $appCmd unlock config -section:basicAuthentication -& $appCmd unlock config -section:windowsAuthentication -`Now we need to set up the location where the pull server content will be served from.  Installing the DSC Service feature creates a default location ( $env:programfiles\WindowsPowerShell\DscService ).  There'll you find sub-directories for configuration and modules.  We can use these folders or we can create another location.  I'm going to stick with the defaults for now.  We've got a few steps left. -First, we need to copy the Devices.mdb from $pshome/modules/psdesiredstateconfiguration/pullserver to the root of our pull server data location (in this case, $env:programfiles\WindowsPowerShell\DscService ) -Update the web.config app settings with the following settings:`After that your pull server should be up and running.  You should see something like this if you navigate to http://yourpullserver/psdscpullserver.svc -[![PullServerDefaultUrl](https://powershell.org/wp-content/uploads/2013/10/PullServerDefaultUrl-300x83.png)](https://powershell.org/wp-content/uploads/2013/10/PullServerDefaultUrl.png) diff --git a/content/articles/2013-10-08-building-a-desired-state-configuration-configuration.md b/content/articles/2013-10-08-building-a-desired-state-configuration-configuration.md deleted file mode 100644 index eb64c9b19..000000000 --- a/content/articles/2013-10-08-building-a-desired-state-configuration-configuration.md +++ /dev/null @@ -1,315 +0,0 @@ ---- -title: Building a Desired State Configuration Configuration -authors: - - Steven Murawski -date: "2013-10-08T16:36:33+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/10/building-a-desired-state-configuration-configuration/ ---- - -Now that's a title!  We've worked through my reasoning as to why I want Desired State Configuration (DSC) and how to build a pull server.  Today and in the next post we are going to look at how to create configurations which describe how our target systems are supposed to work. - -## The High Points - - * [Overview](https://powershell.org/2013/10/02/building-a-desired-state-configuration-infrastructure/) - * [Configuring the Pull Server (REST version)](https://powershell.org/2013/10/03/building-a-desired-state-configuration-pull-server/) - * Creating Configurations (one of two - this post, [two of two][1]) - * [Configuring Clients](https://powershell.org/2013/11/06/configuring-a-desired-state-configuration-client/) - * [Building Custom Resources](https://powershell.org/2014/03/13/building-desired-state-configuration-custom-resources/) - * Packaging Custom Resources - * Advanced Client Targeting - -## Building Configurations - -Configurations are the driving force for DSC.  A configuration is a [Managed Object Format](http://msdn.microsoft.com/en-us/library/aa823192(v=vs.85).aspx) (MOF) document that describes the how a specified server (or servers) should look. - -### What You See - -A basic configuration may look like - - -`/* -@TargetNode='8c7bfb10-8540-4a89-904c-5e6759de6d80' -@GeneratedBy=svc_build -@GenerationDate=10/07/2013 19:43:24 -@GenerationHost=OR-WEB01 -*/ -instance of Pagefile as $Pagefile1ref -{ -ResourceID = "[Pagefile]Default::[BaseServer]JustTheBasics::[VirtualServer]VMWare"; - InitialSize = 4294967296; - SourceInfo = "C:\\windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\SELocalConfiguration\\StackExchangeConfiguration\\StackExchangeConfiguration.psm1::14::5::Pagefile"; - ModuleName = "Pagefile"; - MaximumSize = 4294967296; - ModuleVersion = "1.0"; -}; -instance of PowerPlan as $PowerPlan1ref -{ -ResourceID = "[PowerPlan]Default::[BaseServer]JustTheBasics::[VirtualServer]VMWare"; - SourceInfo = "C:\\windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\SELocalConfiguration\\StackExchangeConfiguration\\StackExchangeConfiguration.psm1::20::5::PowerPlan"; - Name = "High performance"; - ModuleName = "PowerPlan"; - ModuleVersion = "1.0"; -}; -instance of MSFT_RoleResource as $MSFT_RoleResource1ref -{ -ResourceID = "[WindowsFeature]snmp::[BaseServer]JustTheBasics::[VirtualServer]VMWare"; - SourceInfo = "C:\\windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\SELocalConfiguration\\StackExchangeConfiguration\\StackExchangeConfiguration.psm1::25::5::WindowsFeature"; - Name = "SNMP-Service"; - ModuleName = "MSFT_RoleResource"; - ModuleVersion = "1.0"; -}; -instance of OMI_ConfigurationDocument -{ - Version="1.0.0"; - Author="build_service"; - GenerationDate="10/07/2013 19:43:24"; - GenerationHost="OR-WEB01"; -}; -`Each instance of a MOF class (except for the OMI_ConfigurationDocument) refer to a DSC Resource and provides the parameters that resource will be called with when the configuration engine runs.  There are a couple of properties that are not passed to the resource module.  The ResourceID is a unique identifier that indicates the resource and the configuration inheritance tree where it is defined (we'll dig deeper into that shortly).  The ModuleVersion is the version number of the PowerShell module (from the psd1) of the DSC Resource. - -### Getting From Here To There - -We don't want to write straight MOF files to define configuration, mainly because they are kind of verbose, with a some boilerplate  stuff for each resource.  Fortunately, we've got a Domain Specific Language (DSL) in PowerShell v4 to generate them. - -##### The Configuration Keyword - -PowerShell v4 contains the keyword "configuration", which allows us to provide a name for the configuration (like a function name). - - -`configuration MyFirstServerConfig -{ -} -`It looks just like how you would define a function or workflow. Now let's put something useful inside of it. - - -`configuration MyFirstServerConfig -{ - WindowsFeature snmp - { - Name = 'SNMP-Service' - } -} -`In this most simple of examples, we've defined a particular feature to be installed on a Windows Server. When we run this snippet, a wrapper function will be generated (kind of like how a workflow wrapper is generated). At this point, no MOF file has been created or applied, this simply creates a function that can generate a configuration based on the resources specified within. If we execute this configuration - - -`PS> MyFirstServerConfig -`we'll get a file named localhost.mof in a folder at $pwd/MyFirstServerConfig. - -##### Configuration Default Parameters - OutputPath - -If we want to specify the server the configuration applies to, we can wrap the resources in a Node block. - - -`configuration MyFirstServerConfig -{ - Node Server1 - { - WindowsFeature snmp - { - Name = 'SNMP-Service' - } - } -} -`This will create a configuration named Server1. Node names will be important as we move on to talking about targeting via Start-DscConfiguration and using the pull server. -We do have some options as to how the configuration gets generated. We can use the OutputPath to control where the configuration files are deposited. - - -`PS> MyFirstServerConfig -OutputPath c:\Configurations -`##### Configuration Default Parameters - ConfigurationData - -Our other major parameter is ConfigurationData. ConfigurationData is a way to separate out your environmental concerns from the configuration documents. We'll come back to this one after we explore a few more concepts. ConfigurationData is a hashtable that expects a certain structure. The hashtable should contain an key named AllNodes, which is an array of hashtables that describe the nodes whose data you want to inject. For example - - -`$ConfigurationData = @{ - AllNodes = @( - @{NodeName = 'Server1';Role='Web'}, - @{NodeName = 'Server2';Role='FileShare'} - ) -} -`NodeName is a common convention for specifying the node name.  We don't want to use Node, as there are some automatic variables populated in a configuration, one of which is $Node.  All the other keys in the hashtable representing a node are completely up to you. -_Just a quick aside.. the node name does not necessarily equate to the server name.  When we get in to targeting (a bit in this post and more in an upcoming one), we'll see how this is true._ -After we have some data in our ConfigurationData hashtable (and the variable doesn't need to be called ConfigurationData, I just did for convenience sake), we can use that to help drive our configuration. We'll tweak our configuration function a bit, so that it can take advantage of the extra data being supplied. - - -`configuration MyFirstServerConfig -{ - node $allnodes.NodeName - { - WindowsFeature snmp - { - Name = 'SNMP-Service' - } - switch ($Node.Role) - { - 'FileShare' { - WindowsFeature FileSharing - { - Name = 'FS-FileServer' - } - } - 'Web' { - WindowsFeature Web - { - Name = 'web-Server' - } - } - } - } -} -`Since this is a PowerShell DSL, I can use PowerShell functions, operators, and flow control to manipulate the configuration details. In this case, I'm using a switch statement to add roles to my server based on role definitions I'm supplying in my ConfigurationData. - - -`PS> MyFirstServerConfig -ConfigurationData $ConfigurationData - Directory: C:\scripts\MyFirstServerConfig -Mode LastWriteTime Length Name ----- ------------- ------ ---- --a--- 10/8/2013 4:03 PM 1494 Server1.mof --a--- 10/8/2013 4:03 PM 1516 Server2.mof -`If we look at the MOF files generated by this, we'll see that Server1 does not have the FS-FileServer role, but does have the Web-Server role. - - -`/* -@TargetNode='Server1' -@GeneratedBy=smurawski -@GenerationDate=10/08/2013 16:03:51 -@GenerationHost=OR-UTIL02 -*/ -instance of MSFT_RoleResource as $MSFT_RoleResource1ref -{ -ResourceID = "[WindowsFeature]snmp"; - SourceInfo = "::12::9::WindowsFeature"; - Name = "SNMP-Service"; - ModuleName = "MSFT_RoleResource"; - ModuleVersion = "1.0"; -}; -instance of MSFT_RoleResource as $MSFT_RoleResource2ref -{ -ResourceID = "[WindowsFeature]Web"; - SourceInfo = "::25::29::WindowsFeature"; - Name = "web-Server"; - ModuleName = "MSFT_RoleResource"; - ModuleVersion = "1.0"; -}; -instance of OMI_ConfigurationDocument -{ - Version="1.0.0"; - Author="smurawski"; - GenerationDate="10/08/2013 16:03:51"; - GenerationHost="OR-UTIL02"; -}; -`And Server2 has the reverse. - - -`/* -@TargetNode='Server2' -@GeneratedBy=smurawski -@GenerationDate=10/08/2013 16:06:31 -@GenerationHost=OR-UTIL02 -*/ -instance of MSFT_RoleResource as $MSFT_RoleResource1ref -{ -ResourceID = "[WindowsFeature]snmp"; - SourceInfo = "::13::9::WindowsFeature"; - Name = "SNMP-Service"; - ModuleName = "MSFT_RoleResource"; - ModuleVersion = "1.0"; -}; -instance of MSFT_RoleResource as $MSFT_RoleResource2ref -{ -ResourceID = "[WindowsFeature]FileSharing"; - SourceInfo = "::20::29::WindowsFeature"; - Name = "FS-FileServer"; - ModuleName = "MSFT_RoleResource"; - ModuleVersion = "1.0"; -}; -instance of OMI_ConfigurationDocument -{ - Version="1.0.0"; - Author="smurawski"; - GenerationDate="10/08/2013 16:06:31"; - GenerationHost="OR-UTIL02"; -}; -`To highlight a neat trick since we are using a switch statement and [switch can process collections](http://technet.microsoft.com/en-us/library/ff730937.aspx), we can specify more than one role in our hashtable and our configuration should be able to add all the required resources. - - -`$ConfigurationData = @{ - AllNodes = @( - @{NodeName = 'Server1';Role='Web'}, - @{NodeName = 'Server2';Role='FileShare'} - @{NodeName = 'Server3';Role=@('FileShare','Web')} - ) -} -configuration MyFirstServerConfig -{ - node $allnodes.NodeName - { - WindowsFeature snmp - { - Name = 'SNMP-Service' - } - switch ($Node.Role) - { - 'FileShare' { - WindowsFeature FileSharing - { - Name = 'FS-FileServer' - } - } - 'Web' { - WindowsFeature Web - { - Name = 'web-Server' - } - } - } - } -} -MyFirstServerConfig -ConfigurationData $ConfigurationData -`If we look at the configuration generated for Server3, we'll find both Web-Server and FS-FileServer roles described. - - -`/* -@TargetNode='Server3' -@GeneratedBy=smurawski -@GenerationDate=10/08/2013 16:06:31 -@GenerationHost=OR-UTIL02 -*/ -instance of MSFT_RoleResource as $MSFT_RoleResource1ref -{ -ResourceID = "[WindowsFeature]snmp"; - SourceInfo = "::13::9::WindowsFeature"; - Name = "SNMP-Service"; - ModuleName = "MSFT_RoleResource"; - ModuleVersion = "1.0"; -}; -instance of MSFT_RoleResource as $MSFT_RoleResource2ref -{ -ResourceID = "[WindowsFeature]FileSharing"; - SourceInfo = "::20::29::WindowsFeature"; - Name = "FS-FileServer"; - ModuleName = "MSFT_RoleResource"; - ModuleVersion = "1.0"; -}; -instance of MSFT_RoleResource as $MSFT_RoleResource3ref -{ -ResourceID = "[WindowsFeature]Web"; - SourceInfo = "::26::29::WindowsFeature"; - Name = "web-Server"; - ModuleName = "MSFT_RoleResource"; - ModuleVersion = "1.0"; -}; -instance of OMI_ConfigurationDocument -{ - Version="1.0.0"; - Author="smurawski"; - GenerationDate="10/08/2013 16:06:31"; - GenerationHost="OR-UTIL02"; -}; -`#### Next Up - -In the next post, we'll continue this topic and look at other ways we can parameterize configurations as well as nesting configurations.  We'll also touch on how to apply these configurations from Start-DscConfiguration and via a Pull Server.  Stay tuned! - - [1]: https://powershell.org/2013/10/14/building-a-desired-state-configuration-configuration-part-2/ diff --git a/content/articles/2013-10-10-leak-powershell-summit-na-2014-speakers.md b/content/articles/2013-10-10-leak-powershell-summit-na-2014-speakers.md deleted file mode 100644 index 0f224f738..000000000 --- a/content/articles/2013-10-10-leak-powershell-summit-na-2014-speakers.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "LEAK: PowerShell Summit NA 2014 Speakers" -authors: - - Don Jones -date: "2013-10-10T19:21:05+00:00" -categories: - - PowerShell Summit -aliases: - - /2013/10/leak-powershell-summit-na-2014-speakers/ ---- - -I got a glance at the "short list" of speakers for the PowerShell Summit North America 2014. While none of these names are guaranteed - these guys haven't even been contacted to confirm - they'll _definitely_ receive an invite in the next few days. -First up, Mike Pfeiffer. This excites me because Mike's a former MVP, and now a Premier Field Engineer (PFE) with Microsoft. He _literally _wrote the book on managing Exchange Server with PowerShell, and should be a great addition to our new Domain-Specific track. -Next, Steven Murawski. I'm betting he'll be asked to deliver talks on Desired State Configuration (DSC), something he's been playing with intensely at his job. Yeah, _production use of DSC_. -Ed Wilson's going to be invited. What's a Summit without the Scripting Guy?!?!? -Ashley McGlone, too - another PFE, which gives us some awesome from-the-field experience, especially from large-scale environments where PFEs tend to work. Should be awesome stuff. -I imagine I'll be invited to speak , along with my often-co-author Jeffery Hicks and _PowerShell In Depth_ co-author Richard Siddaway. Richard's a WMI master, and his talks in 2013 were very well-received. Jeff, of course, is Jeff - it'll be a fun talk or two, whatever they're about. -I saw Adam Driscoll's name on the list (uber-developer with a ton of PowerShell experience), Jason Helmick (I'm hoping he'll do a deeply in-depth talk on PowerShell Web Access, since he's pretty much mastered all the not-documented intricacies of setting it up), and a few more. -Early November should see the schedule finalized. Stay tuned. diff --git a/content/articles/2013-10-12-help-me-design-the-advanced-powershell-class.md b/content/articles/2013-10-12-help-me-design-the-advanced-powershell-class.md deleted file mode 100644 index 20e7fbb8e..000000000 --- a/content/articles/2013-10-12-help-me-design-the-advanced-powershell-class.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Help me Design the Advanced PowerShell Class! -authors: - - Don Jones -date: "2013-10-12T16:06:39+00:00" -categories: - - Training -aliases: - - /2013/10/help-me-design-the-advanced-powershell-class/ ---- - -I've been asked to work on an "advanced" PowerShell class. Now, I don't like the "advanced" word very much, because it means something different to everyone, depending on their experience. So I'm trying to make the class focus on "powerful, practical things you can do with PowerShell that definitely drift into programming and scripting." -You can tell me what you think by [taking an online survey about the proposed outline][1], which will be online through October 18th, 2013. - - [1]: http://674004.polldaddy.com/s/advanced-powershell-class-design diff --git a/content/articles/2013-10-13-phillyposh-10032013-meeting-summary.md b/content/articles/2013-10-13-phillyposh-10032013-meeting-summary.md deleted file mode 100644 index 38101d184..000000000 --- a/content/articles/2013-10-13-phillyposh-10032013-meeting-summary.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: PhillyPoSH 10/03/2013 meeting summary and presentation materials -authors: - - John Mello -date: "2013-10-14T00:40:19+00:00" -aliases: - - /2013/10/phillyposh-10032013-meeting-summary/ ---- - -* [John Mello][1] gave a presentation on creating HTML reports in PowerShell, [a copy of his presentation and scripts can be found here][2] - * [TJ Turner][3] gave a presentation on Community Defined Best Practices, [a copy of his presentation can be found here][4] - * We had user error audio issues with Lync throughout the meeting so a recording will not be posted to our [YouTube channel][5], - * We celebrated our 1st anniversary! - -[![PhillyPosh_cake_10_03_2013](https://powershell.org/wp-content/uploads/2013/10/PhillyPosh_cake_10_03_2013-300x168.jpg)](https://powershell.org/wp-content/uploads/2013/10/PhillyPosh_cake_10_03_2013.jpg) - - [1]: http://mellositmusings.com/ - [2]: https://powershell.org/wp-content/uploads/2013/10/PhillyPosh_10_03_2013.zip - [3]: https://twitter.com/techguytj - [4]: https://powershell.org/wp-content/uploads/2013/10/PhillyPosh_10_03_03_Community_Best_Practices.zip - [5]: https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2013-10-14-building-a-desired-state-configuration-configuration-part-2.md b/content/articles/2013-10-14-building-a-desired-state-configuration-configuration-part-2.md deleted file mode 100644 index c427df80e..000000000 --- a/content/articles/2013-10-14-building-a-desired-state-configuration-configuration-part-2.md +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: Building a Desired State Configuration Configuration – Part 2 -authors: - - Steven Murawski -date: "2013-10-14T18:19:03+00:00" -categories: - - PowerShell for Admins - - Tutorials -aliases: - - /2013/10/building-a-desired-state-configuration-configuration-part-2/ ---- - -Ok, let's get back to creating a DSC configuration.  [If you haven't read the last post in this series, go back and do that now](https://powershell.org/2013/10/08/building-a-desired-state-configuration-configuration/), I'll wait.  Now with that out of the way, let's get back to it... - -## The High Points - - * [Overview](https://powershell.org/2013/10/02/building-a-desired-state-configuration-infrastructure/) - * [Configuring the Pull Server (REST version)](https://powershell.org/2013/10/03/building-a-desired-state-configuration-pull-server/) - * Creating Configurations ([one of two](https://powershell.org/2013/10/08/building-a-desired-state-configuration-configuration/), two of two - this post) - * [Configuring Clients](https://powershell.org/2013/11/06/configuring-a-desired-state-configuration-client/) - * [Building Custom Resources](https://powershell.org/2014/03/13/building-desired-state-configuration-custom-resources/) - * Packaging Custom Resources - * Advanced Client Targeting - -### Picking Back UP - -Now that we have some of the basics down, we can start to look deeper at how composable these configurations are. A DSC configuration defined in PowerShell offers several advantages, not the least of which is that a configuration can be parameterized. - -#### Parameterization - - -`configuration MyFirstServerConfig -{ - param ([string[]]$NodeName) - node $NodeName - { - WindowsFeature snmp - { - Name = 'SNMP-Service' - } - } -} -`With this simple tweak, I've taken a configuration that was hard-coded to one server name to one that can take an array of server names. The PowerShell savvy are probably going, "Big deal.. functions could do that since Monad". If you remember back in the last post, I showed how ConfigurationData could be used to pass data into a configuration. Then my main configuration did some stuff based on metadata about the node. My configuration was starting to look a bit complicated. The ability to parameterize configurations really helps us when we are ready for the next step, nesting configurations. - -#### Nesting Configurations - -Let's start with an example... - - -`$ConfigurationData = @{ - AllNodes = @( - @{NodeName = 'Server1';Role='Web'}, - @{NodeName = 'Server2';Role='FileShare'} - @{NodeName = 'Server3';Role=@('FileShare','Web')} - ) -} -configuration RoleConfiguration -{ - param ($Roles) - switch ($Roles) - { - 'FileShare' { - WindowsFeature FileSharing - { - Name = 'FS-FileServer' - } - } - 'Web' { - WindowsFeature Web - { - Name = 'web-Server' - } - } - } -} -configuration MyFirstServerConfig -{ - node $allnodes.NodeName - { - WindowsFeature snmp - { - Name = 'SNMP-Service' - } - RoleConfiguration MyServerRoles - { - Roles = $Node.Role - } - } -} -`So, what did we just see? I defined a parameterized configuration and then used it like a DSC Resource in my main configuration. Parameters are passed to the nested configuration in the exact same way as to a DSC Resource. This syntax also means that we can use DependsOn to create dependency chains between groups of functionality more easily. - - -`configuration MyFirstServerConfig -{ - node $allnodes.NodeName - { - WindowsFeature snmp - { - Name = 'SNMP-Service' - } - RoleConfiguration MyServerRoles - { - Roles = $Node.Role - DependsOn = '[WindowsFeature]snmp' - } - } -} -`We can leverage this technique of creating nested configurations to simplify our configuration scripts, minimize dependency chains, and provide an easy way to reuse configuration sections for multiple configurations, all using the same semantics of any DSC resource. - -#### Applying Configurations - -Once we have our configurations generated, we have a couple of ways to distribute and apply the configurations. We'll start assuming that we have generated our configurations for the servers we would like to target. - -##### Start-DscConfiguration - -Our first option is Start-DscConfiguration. We can point Start-DscConfiguration to the configuration files that we've generated (just point to the directory with the configuration files in them). - - -`Start-DscConfiguration -Path ./MyFirstServerConfig -`Doing this will attempt to run the configurations generated against any nodes specified. You can target specific servers by using the -computername or -cimsession parameters. -One downside to using Start-DscConfiguration is that any custom resources (not nested configurations) need to be present on the remote node BEFORE applying the configuration. -You CANNOT create a configuration that uses the file resource (or any other resource) to create the resource on disk during the DSC run. While this would be a cool trick, the resources contain a schema.mof file that defines the interface that DSC can use and the DSC engine will error if it cannot find the resource interface when the configuration is validated before it applies. One option is having two-phased configurations, one to distribute resources and the second to apply it. - -##### Pulling a Configuration - -The next alternative is to distribute configurations and resources using a pull Server. In box, DSC supports two types of pull server, an REST based pull server ([like described in my previous post][1]) and an SMB based pull server ([described here][2]). The pull server requires nodes to be labeled with a GUID (the configuration ID, which we'll talk about in an upcoming post), instead of server name. The pull server also requires that each config be accompanied by a checksum file with the file hash of the configuration file (example 72ed4117-fc49-4f81-822c-5bc59db64dd3.mof and 72ed4117-fc49-4f81-822c-5bc59db64dd3.mof.checksum).  One word off caution.. there can be no extra whitespace after the hash in the checksum file or the hash check will fail on the client node.  This means you cannot use - - -`Get-FileHash 72ed4117-fc49-4f81-822c-5bc59db64dd3.mof | out-file 72ed4117-fc49-4f81-822c-5bc59db64dd3.mof.checksum -`or - - -`Get-FileHash 72ed4117-fc49-4f81-822c-5bc59db64dd3.mof | set-content 72ed4117-fc49-4f81-822c-5bc59db64dd3.mof.checksum -`as those leave extra whitespace at the end of the file. I've been using - - -`[System.IO.File]::AppendAllText('72ed4117-fc49-4f81-822c-5bc59db64dd3.mof.checksum', (Get-FileHash 72ed4117-fc49-4f81-822c-5bc59db64dd3.mof).Hash) -`In my next post, I'll be talking about we can configure our clients to talk to a pull server, then we can see stuff really start to happen. - - [1]: https://powershell.org/2013/10/03/building-a-desired-state-configuration-pull-server/ - [2]: http://blog.cosmoskey.com/powershell/desired-state-configuration-in-pull-mode-over-smb/ diff --git a/content/articles/2013-10-15-questions-about-an-advanced-powershell-class-design.md b/content/articles/2013-10-15-questions-about-an-advanced-powershell-class-design.md deleted file mode 100644 index e5e963fa9..000000000 --- a/content/articles/2013-10-15-questions-about-an-advanced-powershell-class-design.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Questions about an Advanced PowerShell Class Design -authors: - - Don Jones -date: "2013-10-15T19:45:18+00:00" -categories: - - Training -aliases: - - /2013/10/questions-about-an-advanced-powershell-class-design/ ---- - -As we continue collecting responses to an outline survey about an Advanced PowerShell class, I've come up with a couple of questions and would appreciate any feedback you'd care to leave here. -Keep in mind that we're a bit bound by this course being Microsoft Official Curriculum. I gotta make sure, in other words, that the average MCT can teach it. Ahem. I also have to face facts that people don't read or obey course pre-requisite suggestions, and that a lot of people taking the course will have zero programming background. - - -## Question 1: GUI - -First, we desperately want to include some module on "building friendly GUI tools for techs and end-users." It's a massively demanded topic. That said, hand-coding a GUI in either WinForms or WPF is physically painful and time-consuming, and nobody would do it. Asking the class to use SAPIEN PowerShell Studio is probably not on the table; Microsoft has rules, these days, about third-party applications in classes, even if they're free (which Studio isn't). Using Visual Studio to generate WPF XAML is probably also out of the question - it adds a lot of build effort for just a single module. -So I'm down to a couple of options. Option A would be to provide students with a basic module that used PowerShell commands to construct a WinForms GUI. They would have after-class access to the module, too. After all, the big thing to teach here is less about how to physically build a GUI (if you were serious about it, you'd get PowerShell Studio), and more about the process of hooking up code to the GUI. By providing a module that shortcuts the hand-coding effort, we'd get to the important bit. -But there's also a valid perspective that creating little distributable GUI tools is dumb, and that you should be building Web-based ones instead. We could certainly build a module around a simple ASPX page - which is much easier to hand-code with a few examples in front of you - that hosts the PowerShell engine to execute PowerShell commands. They're centralized, great self-service tools, and easy to crank out once you've got a pattern to work from (which we'd provide in the class). -Thoughts? - - -## Question 2: Workflow - -We'd originally proposed a workflow overview module, with a basic example. Folks have quite rightly commented that workflow isn't all it was hyped to be. It's slow, in many cases. It's hard. It isn't really PowerShell. There aren't a ton of killer examples that you can cover in the scope of a class. -But it offers parallelization, which is a great feature. So we're considering replacing workflow with a module on parallelizing PowerShell. My thought is to do that mainly with jobs. Jobs work very consistently inside the shell, and are easy to use. They have some straightforward caveats, like the fact that they return serialized objects. -There's an argument to be made for runspace pools, too. But those get very programmer-y. You have to start worrying about concurrency, thread safety, thread and pool management, and a lot more. I'm not sure, in the context of a PowerShell class, we can sufficiently cover all those extras so that someone could be safely effective with runspace pools. I get that they're more flexible and low-level, but they're a big topic, and nothing else in the course "leads up" to that level of .NET programming. -Thoughts? - - -## Anything Else? - -Any other suggestions aside from these two questions would be better served in the [original survey][1]. I'm not the only one evaluating those responses, and that survey is the only place we can guarantee the entire team will see everything. - - [1]: http://t.co/Pv7lmFsUWu diff --git a/content/articles/2013-10-15-why-the-heck-do-you-want-to-be-taught-net-in-a-powershell-class.md b/content/articles/2013-10-15-why-the-heck-do-you-want-to-be-taught-net-in-a-powershell-class.md deleted file mode 100644 index 64bab022e..000000000 --- a/content/articles/2013-10-15-why-the-heck-do-you-want-to-be-taught-net-in-a-powershell-class.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Why the HECK Do You Want to be Taught .NET in a PowerShell Class?!?!?! -authors: - - Don Jones -date: "2013-10-15T20:01:23+00:00" -categories: - - Training -aliases: - - /2013/10/why-the-heck-do-you-want-to-be-taught-net-in-a-powershell-class/ ---- - -Ok, that post title is deliberately provocative. Twitter and all that. -So look, we're designed this advanced PowerShell class. One of the top five constant suggestions I get whenever I say "advanced" and "PowerShell" is ".NET Framework." -And I get it. When there's no cmdlet, .NET has a ton of goodies that can solve a lot of problems. Maybe you don't like turning to it, but you'll do it if you have to. -My problem is, what's that look like _in a class?_ -I mean, for me, using .NET basically works like this: - - 1. Spend hours on Google finding the .NET class that will do whatever I need done. - 2. Look up class documentation on MSDN. - 3. Fiddle around in PowerShell with properties and methods until I get what I want. - -I can totally see a class making #2 and #3 a little easier. That's just some basic experience, which is what a class helps build. The problem is, I can teach someone those steps in 30 minutes or less. The hard part is #1, and I truly don't know any way to "teach" that. You're either good at Google, or you aren't. I certainly can't provide some kind of mega-directory to the whole Framework - that's what bloody Google or MSDN Search is for. -#3 can also be a hard part, because it requires you to know a bit about the underlying technology. It's easy to use .NET to resolve DNS names to IP addresses - IF you know how DNS works. If you don't, .NET is hard to use for that task. I can't turn a PowerShell class into a "here's how ____ works, so that I can show you how to do it in .NET." -So everytime I try to teach .NET in a PowerShell class, I end up showing people how to read the MSDN documentation, execute methods in PowerShell, and look at properties in PowerShell. Kinda boring. I mean, they're just freakin' objects, right? Once you've grasped "objects," isn't .NET easy, assuming you've done #1 and found the class you need? -So if you were taking your dream class in "advanced PowerShell," and you were all excited that it had a module on "Using .NET Framework,"  -***exactly what would that module look***** like** -? What would you want to be TAUGHT? -Leave a comment. Tell me. -(By the way, if your answer to the question is, "I want to learn how to find what's in the .NET Framework," there's no need to leave a comment - we all want that, I've just no clue how to teach it other than teaching you to be better at Google!) diff --git a/content/articles/2013-10-17-did-you-attend-the-2013-powershell-summit.md b/content/articles/2013-10-17-did-you-attend-the-2013-powershell-summit.md deleted file mode 100644 index b1cd1406d..000000000 --- a/content/articles/2013-10-17-did-you-attend-the-2013-powershell-summit.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Did you attend the 2013 PowerShell Summit? -authors: - - Don Jones -date: "2013-10-17T15:45:10+00:00" -categories: - - PowerShell Summit -aliases: - - /2013/10/did-you-attend-the-2013-powershell-summit/ ---- - -I'm looking to hear from folks who attended the PowerShell Summit North America 2013. Specifically, I'd love to hear what you thought of it. What value did you get? If someone were considering attending in 2014, what advice would you offer them? How should they approach the boss? What did you, personally, "take home" from the Summit in the way of new information or skills? -Drop a comment below. Some comments might be re-published as standalone posts as we try to help people understand what the Summit is all about, and why they might want to attend. Thanks! diff --git a/content/articles/2013-10-18-desired-state-configuration-general-availability-changes.md b/content/articles/2013-10-18-desired-state-configuration-general-availability-changes.md deleted file mode 100644 index 35df84fd9..000000000 --- a/content/articles/2013-10-18-desired-state-configuration-general-availability-changes.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Desired State Configuration – General Availability Changes -authors: - - Steven Murawski -date: "2013-10-18T13:19:21+00:00" -categories: - - Tips and Tricks -aliases: - - /2013/10/desired-state-configuration-general-availability-changes/ ---- - -PowerShell DSC, along with Windows Server 2012 R2 has reached General Availability!  Yay! -However, there is (at least one so far) _**breaking change**_** **in Desired State Configuration (DSC). -Fortunately, the change is in an area I haven't blogged about yet.. creating custom resources.  Unfortunately, it does mean I'll have to update the [GitHub repository](https://github.com/PowerShellOrg/DSC) and all my internal content (should be done by early next week). -The short version is that DSC resources are now resources inside modules, rather than each resource being independent modules.  The benefit of this is that now DSC resources won't pollute the module scope, each resource won't need its own psd1 file (the source module will require one though), and it provides an easier way to group resources, which wasn't really possible before. -So, with GA, resources should go under the module root in a folder DSCResources.  You can have one or more resources in one PowerShell module.  The PowerShell module version is what will be used for the resource version number, so if you have several resources, a version number bump affects all the resources in the module. -I'll be picking back up with the DSC series next week with how to configure DSC clients, so stay tuned. diff --git a/content/articles/2013-10-18-more-summit-speaker-names-leaked.md b/content/articles/2013-10-18-more-summit-speaker-names-leaked.md deleted file mode 100644 index 7258e7368..000000000 --- a/content/articles/2013-10-18-more-summit-speaker-names-leaked.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: More Summit Speaker Names Leaked -authors: - - Don Jones -date: "2013-10-18T16:36:24+00:00" -categories: - - PowerShell Summit -aliases: - - /2013/10/more-summit-speaker-names-leaked/ ---- - -So, I got hold of one of the Summit planning spreadsheets and have the list of speaker names. Now, these folks haven't yet confirmed, so there are obviously possible changes, but here's who'll be invited based on their proposals: - - * Augh, they caught me! The **complete** session list isn't yet finalized, and there are a few on the "final cut list" that may not actually physically fit, so stay tuned... - -Lotta Jasons in there. Hmm, maybe I shouldn't put Helmick in charge of this again. He appears to be partial. There's also several slots for PowerShell product team members that haven't yet been sorted; they may come in a bit closer to the show, once the team has a better grip on their short-term work schedule. -That's about **63 sessions total**. Wow. We're planning to run continuous sessions from 9am to noon, and then from 1pm to 5pm every day, spread across three tracks. There'll also be welcome address at 8:15am Monday morning. -Please - tell a colleague. Help us get the word out, because this is going to be _amazing. _ diff --git a/content/articles/2013-10-19-the-shell-vs-the-host.md b/content/articles/2013-10-19-the-shell-vs-the-host.md deleted file mode 100644 index 7a9d2aa6f..000000000 --- a/content/articles/2013-10-19-the-shell-vs-the-host.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: The Shell vs. The Host -authors: - - Don Jones -date: "2013-10-19T18:03:11+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/10/the-shell-vs-the-host/ ---- - -One thing that's often _very_ confusing about PowerShell is the difference between the shell itself - what I'll call _the engine_ in this article - and the application that hosts the engine. -You see, you as a human being can't really interact directly with PowerShell's engine. Instead, you need a _host application_ that lets you do so. The standard console - PowerShell.exe - is one such host; the Integrated Script Environment (ISE) is another. Those hosts "spin up" a _runspace, _which is essentially an instance of the PowerShell engine. When you type a command and hit enter, the host creates a pipeline, jams your command into it, and then deals with the output. -A number of standardized PowerShell commands actually require the host to implement some kind of command support. For example, most of the core Write- cmdlets actually depend upon the host to do something. Write-Verbose is a great example: The command causes the engine to spew text into the Verbose pipeline; the host is responsible for doing something with it. In the case of the console host, the Verbose text is displayed as yellow text (by default) preceded by the word "VERBOSE:". -When you develop a script using the ISE or the console (which behave pretty similarly for most of the core commands), you get used to your script behaving in a certain way. If you then move that script over to another host - perhaps a runbook automation system that runs PowerShell scripts by hosting the engine, rather than by launching PowerShell.exe - you may get entirely different behavior. -Here's a perfect example: most of the "built-in" variables you're used to working with in the ISE or the console aren't actually built into the _engine, _they're built into those _hosts. _For example, since the host is responsible for presenting verbose output, the _host_ is what creates and uses the $VerbosePreference variable. When your script is running in a different host, $VerbosePreference may not exist, and indeed verbose output may simply be ignored. An off-the-shelf PowerShell runspace doesn't actually come with very much "built-in" at all, so scripts can behave _very_ differently. -It's pretty important to understand these potential differences. When a developer sets out to create their own host application - like most of the commercial script editors do - it can be very confusing and frustrating, because they essentially have to reverse-engineer much of what the PowerShell.exe console application is doing, so that they can provide an equivalent experience. But you should never _assume_ that a script's behavior under one host will be consistent in all other hosts; test and verify. diff --git a/content/articles/2013-10-21-why-get-content-aint-yer-friend.md b/content/articles/2013-10-21-why-get-content-aint-yer-friend.md deleted file mode 100644 index 8d41dcadb..000000000 --- a/content/articles/2013-10-21-why-get-content-aint-yer-friend.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "Why Get-Content Ain't Yer Friend" -authors: - - Don Jones -date: "2013-10-21T20:18:41+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -aliases: - - /2013/10/why-get-content-aint-yer-friend/ ---- - -Well, it isn't your _enemy_, of course, but it's definitely a tricky little beast. -Get-Content is quickly becoming my nemesis, because it's sucking a lot of PowerShell newcomers into its insidious little trap. Actually, the real problem is that most newcomers don't really understand that PowerShell is an object-oriented, rather than a text-oriented shell; they're trying to treat Get-Content like the old Type command (and why not? **type** is an alias to Get-Content in PowerShell, isn't it?), and failing. -Worse, PowerShell has just enough under-the-hood smarts to make _some_ things work, but not _everything. _ -For example, this works to replace all instances of "t" with "x" in the file test.txt, outputting the result to new.txt: - - -`$x = Get-Content test.txt -$x -replace "t","x" | Out-File new.txt -`Sadly, this reinforces - for newcomers - the notion that Get-Content is just reading in the text file as a big chunk o' text. -Nope. -You see, in reality, Get-Content reads _each line of the file individually,_and returns _collection of System.String objects. _It "loses" the carriage returns from the file at the same time. But you'd never know that, because when PowerShell _displays_ a collection of strings, it displays them _one object per line and inserts carriage returns._So if you do this, it'll look like you're dealing with a big hunk o' text: - - -`$x = Get-Content test.txt -$x -`But you're not. $x, in that example, is a _collection of objects,_ not a single string. -Never fear - you can make sense of this. First, if you use the **-Raw** parameter of Get-Content (available in v3+), it does in fact read the entire file as a big ol' string, preserving carriage returns instead of using them to separate the file into single-line string objects. In v2, you can achieve something similar by using Out-String: - - -`$x = Get-Content test.txt | Out-String -`So if you just _need_ to work with a big ol' string, you can. Alternately, you might find that some operations are quicker when you actually do work line-by-line. For example, asking PowerShell to do a regex replace on a huge string can consume a ton of memory; working with one line at a time is often quicker. Just use a foreach: - - -`ForEach ($line in (Get-Content test.txt)) { - $line -replace "\d","x" | Out-File new.txt -Append -} -`Of course, don't _assume_ it'll be quicker - Measure-Command lets you test different approaches, so you can see which one is _actually_ quicker. -You should also consider _not_ using Get-Content, especially with very large files. That's because it wants to read the _entire_ file into memory at once, at that can take a lot of memory - not to mention a bit more processor power, swap file space, or whatever else. -Instead, read your file from disk one line at a time, work with each line, and then (if that's your intent) write each line back out to disk. Instead of caching the entire file in RAM, you're reading it off disk one line at a time. - - -`$file = New-Object System.IO.StreamReader -Arg "test.txt" -while ($line = $file.ReadLine()) { - # $line has your line -} -$file.close() -`Or at least something like that. Yeah, welcome to .NET Framework. Other options available to the Framework include reading a text file in chunks - again, to help conserve memory and improve processing speed, but not necessarily making you read line-by-line. -Whatever approach you choose, just remember that, by default, Get-Content isn't just reading a stream of text all at once. You'll be getting, and need to be prepared to deal with, a _collection_ of objects. Those will often require that you enumerate them (line by line, in other words) using a foreach construct, and with large files the act of reading the entire file might negatively impact performance and system resources. -Knowing is half the battle! diff --git a/content/articles/2013-10-28-powershell-scripting-and-toolmaking-classroom-training-course-now-available-to-microsoft-training-centers.md b/content/articles/2013-10-28-powershell-scripting-and-toolmaking-classroom-training-course-now-available-to-microsoft-training-centers.md deleted file mode 100644 index ebfb270c5..000000000 --- a/content/articles/2013-10-28-powershell-scripting-and-toolmaking-classroom-training-course-now-available-to-microsoft-training-centers.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "PowerShell \"Scripting and Toolmaking\" Classroom Training Course Now Available to Microsoft Training Centers" -authors: - - Don Jones -date: "2013-10-28T17:11:03+00:00" -categories: - - Training -aliases: - - /2013/10/powershell-scripting-and-toolmaking-classroom-training-course-now-available-to-microsoft-training-centers/ ---- - -Attention Microsoft training centers! Microsoft's Courseware Marketplace now offers course 55039AC, "Windows PowerShell Scripting and Toolmaking." Designed as a 5-day course, it's a spiritual "Part 2" to Microsoft Official Curriculum course 10961. -With 10961, the goal was to provide a founding in PowerShell basics, in a somewhat product-neutral way. That is, the course doesn't cover Exchange, or SharePoint, or AD; it focuses on pure PowerShell. Unlike its predecessor, 10325, the 10961 course kind of "stops short" of actual scripting. It shows you how to build a parameterized script, but doesn't dig into advanced functions, debugging, error handling, and the like. There was a feeling - which has been largely upheld through customer feedback - that a sizable audience needed to get the shell basics under their belt, and weren't necessarily comfortable leaping into coding. 10325 kind of breezed through scripting at a somewhat high level, and didn't have time to offer much in the way of practices and other guidance, and it didn't really set you up for building reusable units of automation. -That's where 55039AC comes in. It is a scripting class, pure and simple, and it focuses on building reusable units of automation according to best practices and patterns. More time is devoted to design, structure, procedural error handling, and so on. There's also deeper coverage of module building, including building custom formatting views, and there's even an introduction to Workflow. Although designed for v3, the course is pretty version-agnostic, meaning it's suitable for someone who wants to use PowerShell v2, v3, or beyond. And, because it's a Courseware Marketplace offering, it's compatible with Software Assurance (SA) training vouchers. -Training centers are welcome to combine 10961 and 55039 to create an "accelerated" class that includes heavier scripting coverage than 10961 alone. I do that myself, actually, although it's a pretty hardcore week. If you're interested in doing that, [contact me][1] and I can provide some of the accelerated-delivery outlines that I use. -55039's modules are all standalone - with a twist. Students are encouraged to use and evolve a single code project throughout several modules. However, if you're not teaching all of the modules, or if a student falls behind, each lab comes with a complete "starting point" that keeps everyone on the same page. -55039 has already been beta-taught, and of course I [welcome feedback][1] if you've taught the course or taken it as a student. -My company also offers licensing for this course outside the Courseware Marketplace, mainly geared to training centers who want an unlimited perpetual license to reproduce the course materials on their own. We know courseware costs are a significant concern, so we're trying to offer something reasonable there. -Both 10961 and 55039 (or at least a subset of 55039; we're still working on exactly what) will be considered pre-requisites for the upcoming 3-day 10962 course, which will focus on advanced PowerShell techniques for us in production environments, including database connectivity, report generation, and so on. - - [1]: http://concentratedtech.com/contact diff --git a/content/articles/2013-11-06-configuring-a-desired-state-configuration-client.md b/content/articles/2013-11-06-configuring-a-desired-state-configuration-client.md deleted file mode 100644 index cd1bbfb80..000000000 --- a/content/articles/2013-11-06-configuring-a-desired-state-configuration-client.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Configuring a Desired State Configuration Client -authors: - - Steven Murawski -date: "2013-11-06T23:47:22+00:00" -categories: - - PowerShell for Admins - - Tutorials -aliases: - - /2013/11/configuring-a-desired-state-configuration-client/ ---- - -Once we have our pull server in place and we're starting to create configurations, we need to set up our client nodes to be able to connect to the pull server and how we want the node to behave. - -## The High Points - - * [Overview](https://powershell.org/2013/10/02/building-a-desired-state-configuration-infrastructure/) - * [Configuring the Pull Server (REST version)](https://powershell.org/2013/10/03/building-a-desired-state-configuration-pull-server/) - * Creating Configurations ([one of two](https://powershell.org/2013/10/08/building-a-desired-state-configuration-configuration/), [two of two](https://powershell.org/2013/10/14/building-a-desired-state-configuration-configuration-part-2/)) - * Configuring Clients (this post) - * [Building Custom Resources](https://powershell.org/2014/03/13/building-desired-state-configuration-custom-resources/) - * Packaging Custom Resources - * Advanced Client Targeting - -### Examining the Local Configuration Manager - -The Desired State Configuration agent included in Windows Management Framework 4 (or natively on Server 2012 R2 / Windows 8.1) is exposed through the Local Configuration Manager. - - -`PS> Get-DscLocalConfigurationManager -AllowModuleOverwrite : False -CertificateID : -ConfigurationID : -ConfigurationMode : ApplyAndMonitor -ConfigurationModeFrequencyMins : 30 -Credential : -DownloadManagerCustomData : -DownloadManagerName : -RebootNodeIfNeeded : False -RefreshFrequencyMins : 15 -RefreshMode : PUSH -PSComputerName : -`This is where we can configure the behavior of DSC for a particular node.  So, how do we configure it?  With DSC of course! -There is a configuration option LocalConfigurationManager that allows us to set values for the Local Configuration Manager.  A sample configuration looks something like this: - - -`configuration LetsGetConfiguring -{ - param ($NodeId, $PullServer) - LocalConfigurationManager - { - AllowModuleOverwrite = 'True' - ConfigurationID = $NodeId - ConfigurationModeFrequencyMins = 60 - ConfigurationMode = 'ApplyAndAutoCorrect' - RebootNodeIfNeeded = 'True' - RefreshMode = 'PULL' - DownloadManagerName = 'WebDownloadManager' - DownloadManagerCustomData = (@{ServerUrl = "https://$PullServer/psdscpullserver.svc"}) - } -} -`While this configuration looks similar to other configurations we might create, we need to apply it with a different command - Set-DscLocalConfigurationManager. - - -`LetsGetConfiguring -NodeId 71defb7f-232b-4213-b289-08c3d424e162 -PullServer pullserver.somedomain.com -Set-DscLocalConfigurationManager -path LetsGetConfiguring -`The Local Configuration Manager offers a number of options, which we'll examine. - -#### AllowModuleOverwrite - -This one is pretty straight-forward and only impacts configurations where you are using a pull server.  If you allow module overwrite, newer versions of modules can replace existing modules.  If you don't enable this, you'll have to manually remove modules if you want a new copy to pull down. - -#### CertificateID - -CertficateID is a thumbprint of a certificate in the machine certificate store that will be used to decrypt any secrets present in the configuration.  DSC allows PSCredential objects to be marshaled through a MOF file, but requires them (without explicit authorization) to be encrypted. (There is another option as well, if you use the ConfigurationData feature, you can also supply the path to a certificate file to use - I'll be blogging that scenario later when I cover some more advanced scenarios.) - -#### ConfigurationID - -The ConfigurationID is a GUID which uniquely identifies what configuration a node should retrieve from a pull server.  If you haven't had to generate GUIDs before, a really easy way to do so is: - - -`PS> [guid]::NewGuid().Guid -`#### ConfigurationMode - -ConfigurationMode defines how the DSC client operates.  There are three valid values: - - * Apply - * ApplyAndMonitor - * ApplyAndAutoCorrect - -(NOTE:  These descriptions of functionality are based on limited testing - the TechNet documentation is not up to date yet, but should be in the near future.) -Apply will apply the configuration once and after a successful run is logged, it will stop attempting to apply configuration or checking the configuration.  ApplyAndMonitor will apply a configuration as in Apply, but will continue to validate that a node is configured as described.  No corrective action will take place if there is configuration drift.  Finally, ApplyAndAutoCorrect is what most of us think of when looking at DSC as a configuration management tool.  This setting applies a configuration and checks it regularly.  If configuration drift is detected, the configuration manager will attempt to return the machine to the _desired state_ (see how I worked the product name in there..). - -#### ConfigurationModeFrequencyMins - -This setting determines how frequently the configured method (the RefreshMode) will be run.  In the case of a pull server, this is how frequently the pull server will be checked for updated configurations.  The minimum value for this is 30.  This value needs to be a multiple of the RefreshFrequencyMins.  If it is not, the engine will treat it as if it was a multiple (rounded up). - -#### Credential - -The Credential supplied can be used for accessing remote resources. - -#### DownloadManagerCustomData - -DownloadManagerCustomData is a hashtable of values that is passed to the specified download manager.  In the case of a a pull server, the two possible keys are ServerUrl and AllowUnsecureConnection. - -#### DownloadManagerName - -Here is where we specify which download manager to use.  DSC ships with two options, the WebDownloadManager (for the web-based pull server) and the DSCFileDownloadManager (for using an SMB share). - -#### RebootNodeIfNeeded - -Here's another pretty self-explanatory setting.  DSC offers a method for resources to request a reboot.  If this setting is $true, then DSC will reboot the node when it is requested.  If it is set to $false, DSC will notify (via the verbose stream and the DSC log) that a reboot is required, but not actually reboot the node. - -#### RefreshFrequencyMins - -The RefreshFrequencyMins setting determines how often DSC runs an integrity check against the cached configuration value (or if the check falls on the ConfigurationModeFrequencyMins interval against the pull server if one is configured).  The minimum value for this setting is 15 minutes. - -#### RefreshMode - -RefreshMode is either PUSH or PULL.  If you set the RefreshMode to PULL, you'll need to configure a download manager (via DownloadManagerName). -Next up, we'll look at how we can build custom resources. diff --git a/content/articles/2013-11-06-monitoring-sql-server-backups.md b/content/articles/2013-11-06-monitoring-sql-server-backups.md deleted file mode 100644 index 8bbf2ea02..000000000 --- a/content/articles/2013-11-06-monitoring-sql-server-backups.md +++ /dev/null @@ -1,2448 +0,0 @@ ---- -title: Monitoring SQL Server Backups -authors: - - Enrique Puig -date: "2013-11-07T07:30:31+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/11/monitoring-sql-server-backups/ ---- - -One of the most important tasks for the** **DBAs is to ensure that there is a maintenance plan to recover data from a given disaster. -  -As a DBA we need to design a maintenance plan according to our scenario and business requirements. Do we want to be able to recover data at any point of time? How much data loss can we accept? All these questions and many more must be answered before designing the plan. In this post we will assume a basic daily full backup to keep our data safe, we will assume that there is a job performing full backups to our databases every day at midnight. - - - -The next step after we have defined and implemented the maintenance plan is to monitor that all backups are being executed. In order to reach our goal it will be necessary to know whether a backup has been done or not and that could be possible by monitoring the backup job or querying the msdb database metadata among many other options. For this post we will use the second option, we will query msdb to check databases backup information. The main reason why we choose this option is because of the variability of backup maintenance plan definitions. The backup job is defined by every DBA and we cannot assume that all databases are included in the maintenance plan, on the other hand by querying msdb we will know for sure the databases which have been backed up and those that have not been backed up. - - -# -Querying msdb database - - - -As it has been explained before querying msdb database will give us the truth about database backups. Running the following query we will know how many days have happened since the last full backup of every database: - - - - - -Use - - msdb -; - - - - - - - - -  - - - - - - - -with - - backup_info - - - - - - - -as - - - - - - - -( - - - - - - - - -    - -select - - - - - - - - - -        -bck -. -database_name -, - - - - - - - - - -        -bck -. -database_guid -, - - - - - - - - - -        -bck -. -backup_start_date -, - - - - - - - - - -        -bck -. -backup_finish_date -, - - - - - - - - - -        -bckmf -. -physical_device_name -as - BackupFile_Path -, - - - - - - - - - -        -BackupType -= - - - - - - - - - -        - -case - - - - - - - - - -            - -when - bck -. -[type] -= - -'I' - -then - -'Differential' - - - - - - - - - -            - -when - -type - -= - -'D' - -then - -'Full' - - - - - - - - - -            - -when - -type - -= - -'L' - -then - -'Log' - - - - - - - - - -            - -else - -'Unknown' - - - - - - - - - -        - -end - - - - - - - - - -    - -from - backupset -as - bck - - - - - - - - -    - -inner - -join - backupmediafamily -as - bckmf - - - - - - - - -        - -on - bck -. -media_set_id -= -bckmf -. -media_set_id - - - - - - - -), - - Last_Backups - - - - - - - -as - - - - - - - -( - - - - - - - - -      - -select - -* - - - - - - - - - -      - -from - - - - - - - - - -      - - -( - - - - - - - - -            - -select - - - - - - - - - -                  - -ROW_NUMBER - -() - -over - -( - -PARTITION - -BY - V -. -database_guid, V.BackupType  -order - -by - V -. -backup_start_date -desc - -) - -as - r -, - - - - - - - - - -                  - -* - - - - - - - - - -            - -from - backup_info -as - V - - - - - - - - -      - -) - -as - VV - - - - - - - - -      - -where - VV -. -r -= -1 -and - VV -. -BackupType -= - -'FULL' - - - - - - - - -), - -dbs - - - - - - - -as - - - - - - - -( - - - - - - - - -      - -select - - - - - - - - - -    -name -, -database_guid -, -state_desc - - - - - - - - -      - -from - -sys - -. - -databases - -as - dbs - - - - - - - - -      - -inner - -join - -sys - -. - -database_recovery_status - -as - dbrs - - - - - - - - -            - -on - dbrs -. -database_id -= -dbs -. -database_id - - - - - - - -) - - - - - - - -select - - - - - - - - -    -name -, - - - - - - - - - -    - -case - -when - V -. -database_name -is - -null - -then - 365 -else - -DATEDIFF - -( - -day - -, -backup_start_date -, - -GETDATE - -()) - -end - -as - DaysSinceLastBackup - - - - - - - -from - - dbs - - - - - - - -left - - -join - Last_Backups -as - V - - - - - - - - -    - -on - V -. -database_guid -= -dbs -. -database_guid - - - - - - - -where - - dbs -. -state_desc -= - -'ONLINE' - -and - name -<> - -'TempDB' - - - - - - - - -order - - -by - 2 -desc - -; - - - - - - -  - - - -Notice that databases that never have been backed up will return 365 days as the number of days since the last full backup. - - - -This query returns the desired information like follows: - - - [![image](https://powershell.org/wp-content/uploads/2013/11/image_thumb.png)](https://powershell.org/wp-content/uploads/2013/11/image.png) - - - -In this case we can see a basic example with system databases with 0 days since last full backup, which means that all databases are up to date with full backups. Another possible result could be: - - - [![image](https://powershell.org/wp-content/uploads/2013/11/image_thumb1.png)](https://powershell.org/wp-content/uploads/2013/11/image1.png) - - - -In this case databases last full backup was four days ago. This second example could be a reason to be alarmed because in case of a disaster we only can recover data until four days ago, all changes made during the last four days would be lost. - - - -Notice that databases that never have been backed up will return 365 days as the number of days since the last full backup. - - - -As it was shown before, the query could help us to monitor backups in a single instance but what happen when the DBA has to monitor and manage more than one instance? And what if those instances are from different SQL Server Versions? Things start to get complicated and doing it one by one manually is not an option! I"™m currently facing that situation; I"™m managing more than 80 SQL Server instances from different versions. Here is when PowerShell comes to help the DBA. - - -# -PowerShell Solution - - - -With PowerShell we will be able to query all msdb databases from all the desired SQL Server instances. The solution will have two files: - - - -              1. Xml file with Server information - - - - -a. -       - - -SQL Server instance, user name, password"¦ - - - -              2. PowerShell script - - - -The idea is to run the query to msdb for every server registered in the xml file. For instance the XML file structure could like follows: - - - [![image](https://powershell.org/wp-content/uploads/2013/11/image_thumb5.png)](https://powershell.org/wp-content/uploads/2013/11/image5.png) - - - -For this demonstration we only need to provide the instance name, the SQL Server user name and the password to connect. The reason why I"™m using SQL Server authentication is because not all my SQL Server instances are in the same domain so I need to be able to connect to all of them from a single point (where the script is running). Anyway the script can always be modified to connect with integrated authentication easily. - - - -With the xml file ready the only thing missing is the script file which will read the xml file and execute the query for every server. The script looks like follows: - - - - - -Param - -( - - - - - - - - -  -[ - -int - -] - -$DaysSinceLastBackup - -=- - -1, - - - - - - - - -  -[ - -string - -] - -$serversPath - -= - -"C:\tmp\Servers.xml" - - - - - - - - -  -) - - - - - - - - -  - - -Function - -Get-SQLServer-DataTable - - ([ - -string - -] - -$conn - - , [ - -string - -] - -$query - -) - - - - - - - - -  -{ - - - - - - - - -     - - -$SqlConnection - -= - -New-Object - -System.Data.SqlClient.SqlConnection - -; - - - - - - - - -     - - -$SqlConnection - -. - -ConnectionString - -= - -$conn - - - - - - - - -     - - -$SqlCmd - -= - -New-Object - -System.Data.SqlClient.SqlCommand - -; - - - - - - - - -     - - -$SqlCmd - -. - -CommandText - -= - -$query - -; - - - - - - - - -     - - -$SqlCmd - -. - -Connection - -= - -$SqlConnection - -; - - - - - - - - -     - - -$SqlAdapter - -= - -New-Object - -System.Data.SqlClient.SqlDataAdapter - -; - - - - - - - - -     - - -$SqlAdapter - -. - -SelectCommand - -= - -$SqlCmd - -; - - - - - - - - -     - - -$DataTable - -= - -New-Object - -System.Data.DataTable - -; - - - - - - - - -     - - -$SqlAdapter - -. - -Fill - -( - -$DataTable - -) - -| - -out - -- - -Null; - - - - - - - - -     - - -$SqlConnection - -. - -Close - -() - -; - - - - - - - - -     - - - - - - - - - -     - - -return - -$DataTable - -; - - - - - - - -} - - - - - - - -  - - - - - - - -Function - -Get-SQLDatabaseBackupsInfo - - ([ - -string - -] - -$conn - -) - - - - - - - -{ - - - - - - - - -      - - -$query - -= - -" - - - - - - - - -            - - -Use - -msdb; - - - - - - - - -            - - - - - - - - - -            - - -with - -backup_info - - - - - - - - -            - - -as - - - - - - - - -            -( - - - - - - - - -                  - - -select - - - - - - - - -                        - - -bck.database_name - -, - - - - - - - - -                        - - -bck.database_guid - -, - - - - - - - - -                        - - -bck.backup_start_date - -, - - - - - - - - -                        - - -bck.backup_finish_date - -, - - - - - - - - -                        - - -bckmf.physical_device_name - -as - -BackupFile_Path - -, - - - - - - - - -                        - - -BackupType - -= - - - - - - - - -                        - - -case - - - - - - - - -                             - - -when - -bck - -.[ - -type - -] - -= - -'I' - -then - -'Differential' - - - - - - - - -                             - - -when - -type - -= - -'D' - -then - -'Full' - - - - - - - - -                             - - -when - -type - -= - -'L' - -then - -'Log' - - - - - - - - -                             - - -else - -'Unknown' - - - - - - - - -                        - - -end - - - - - - - - -                  - - -from - -backupset - -as - -bck - - - - - - - - -                  - - -inner - -join - -backupmediafamily - -as - -bckmf - - - - - - - - -                        - - -on - -bck.media_set_id - -= - -bckmf.media_set_id - - - - - - - - -            -), - -Last_Backups - - - - - - - - -            - - -as - - - - - - - - -            -( - - - - - - - - -                  - - -select - -* - - - - - - - - -                  - - -from - - - - - - - - -                  -( - - - - - - - - -                        - - -select - - - - - - - - -                             - - -ROW_NUMBER - -() - -over - - ( - -PARTITION  - -BY  - -V.database_guid, V.BackupType  - -order  - -by  - -V.backup_start_date  - -desc - -) - -as - -r - -, - - - - - - - - -                             - - -* - - - - - - - - -                        - - -from  - -backup_info  - -as  - -V - - - - - - - - -                  -) - -as  - -VV - - - - - - - - -                  - - -where  - -VV.r - -= - -1 - -and  - -VV.BackupType - -= - -'FULL' - - - - - - - - -            -), - -dbs - - - - - - - - -            - - -as - - - - - - - - -            -( - - - - - - - - -                  - - -select - - - - - - - - -                  - - -name - -, - -database_guid - -, - -state_desc - - - - - - - - -                  - - -from  - -sys.databases  - -as  - -dbs - - - - - - - - -                  - - -inner  - -join  - -sys.database_recovery_status  - -as  - -dbrs - - - - - - - - -                        - - -on  - -dbrs.database_id - -= - -dbs.database_id - - - - - - - - -            - - -) - - - - - - - - -            - - -select - - - - - - - - -                  - - -@@ - -SERVERNAME  - -as  - -ServerName - -, - - - - - - - - -                  - - -name - -as - -DbName - -, - - - - - - - - -                  - - -case  - -when  - -V.database_name  - -is  - -null  - -then - - 365 - -else  - -DATEDIFF - -( - -day - -, - -backup_start_date - -, - -GETDATE - -()) - -end  - -as  - -DaysSinceLastBackup - - - - - - - - -            - - -from  - -dbs - - - - - - - - -            - - -left  - -join  - -Last_Backups  - -as  - -V - - - - - - - - -                  - - -on  - -V.database_guid - -= - -dbs.database_guid - - - - - - - - -            - - -where  - -dbs.state_desc - -= - -'ONLINE'  - -and  - -name - - <> - -'TempDB' - - - - - - - - -            - - -order  - -by - - 2 - -desc; - - - - - - - - -                  -" - -; - - - - - - - - -      - - -return  - -Get - -- - -SQLServer - -- - -DataTable  - -$conn  - -$query - -; - - - - - - - -} - - - - - - - -  - - -    - - - - - - - - - -  -[ - -xml - -] - -$xml - -= - -Get-Content  - -$serversPath - - - - - - - - -  - - -$xml - -. - -Servers - -. - -server - -| - -foreach - -- - -object - -{ - - - - - - - - -    - - -$it - -= - -$_ - -; - - - - - - - - -    - - -$instance - -= - -$it - -. - -InstanceName - -; - - - - - - - - -    - - -$user - -= - -$it - -. - -username - -; - - - - - - - - -    - - -$pass - -= - -$it - -. - -password - -; - - - - - - - - -    - - - - - - - - - -    - - -$conn - -= - -"Server = $instance; Database = master; User=$user;Password=$pass;" - -; - - - - - - - - -      - - - - - - - - - -      - - -Get-SQLDatabaseBackupsInfo  - -$conn -| - -where-object - - { - -$_ - -. - -DaysSinceLastBackup  - --gt  - -$DaysSinceLastBackup - -} - - -  - -| - -  - -select - -ServerName - -, - -DbName - -, - -DaysSinceLastBackup - -; - - - - - - - - -  - - - - - - - - - -  - - -} - - - - - -The script has two parameters: - - - - - -  -         - - -** -DaysSinceLastBackup -** - : A threshold to filter result. The result will show all databases which latest full backups are older than the parameter value. The value by default is -1, a negative value that will make to show all results. - - - - - -  -          - - -** -ServersPath -** -: The path where the XML file with all servers is allocated. - - - -So we can execute the script like follows: - - - [![image](https://powershell.org/wp-content/uploads/2013/11/image_thumb6.png)](https://powershell.org/wp-content/uploads/2013/11/image6.png) - - - -The example shown before executes the script passing the two parameters, the first one is the xml file and the second one is the Threshold. In this case we have used the value 2, which means that the script will return all databases which latest full backups are older than 2 days. In this case only the database **test** matches the condition, the result shows 365 days since the last full backup which means that this database has never been backed up. - - - -On the other hand, if we execute the script without parameters we will see the information of all databases, this is what it will look like : - - - [![image](https://powershell.org/wp-content/uploads/2013/11/image_thumb7.png)](https://powershell.org/wp-content/uploads/2013/11/image7.png) - - -# -Conclusion - - - -As it has been shown during this post, is very easy to monitor SQL Server Backups over different servers in a very fast and efficient way by using PowerShell. Once we have this script we can implement a scheduled task and use it to generate HTML reports or alarms to notify the DBAs and System administrators about the databases backup status. Once again PowerShell comes up to save the day and make our working life easier. diff --git a/content/articles/2013-11-11-login-now-required-for-comments.md b/content/articles/2013-11-11-login-now-required-for-comments.md deleted file mode 100644 index dfa1f83c3..000000000 --- a/content/articles/2013-11-11-login-now-required-for-comments.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Login now required for comments -authors: - - Don Jones -date: "2013-11-11T14:49:05+00:00" -categories: - - Announcements -aliases: - - /2013/11/login-now-required-for-comments/ ---- - -A quick note and an apology: I've had to modify the site configuration to require users to be registered and logged in before they can comment. We've been taking a _ridiculous_ amount of comment spam, and it's consuming more and more time to weed through it. -You can register using any major social media account, so you don't have to remember yet another username and password with us, so hopefully that'll mitigate the inconvenience. -Have a great week! diff --git a/content/articles/2013-11-12-phillyposh-11072013-meeting-summary-and-presentation-materials.md b/content/articles/2013-11-12-phillyposh-11072013-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 085c958d5..000000000 --- a/content/articles/2013-11-12-phillyposh-11072013-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: PhillyPoSH 11/07/2013 meeting summary and presentation materials -authors: - - John Mello -date: "2013-11-13T02:07:36+00:00" -aliases: - - /2013/11/phillyposh-11072013-meeting-summary-and-presentation-materials/ ---- - -1. [John Mello][1] gave a presentation on a script that searches a mailbox for an email by subject and downloads any attachments it may contain. A copy of his scripts can be obtained [here.][2] - 2. [Jason Helmick][3], Senior Technologist at [Concentrated Tech][4] and [Windows PowerShell MVP][5], gave a presentation on "Understanding the Pipeline "“ Getting your one-liners to work!" A copy of his script can be found [here][6]. - 1. [A recording of Jason Helmick"™s presentation][7] can be found on our [YouTube channel][8]. Due to audio issues, John Mello"™s portion is not included in the recording. - 3. Announcements - 1. Tickets are still available for the [2014 PowerShell Summit North America][9], if you"™re going then make sure to say hi to [Lido Paglia][10]! - 2. We are still trying to arrange for a PowerShell Saturday sometime in 2014, if you are interested in presenting please let us know! - 4. We are assigning homework this week! Hopefully this will be a fun task that we can discuss during our next meeting, so try your hand at the following problem: - - - **Title**: On This Day in Pictures - - - **Description:** You have folder of photos on your computer that you take with your Smartphone or digital camera. From time to time you want to be reminded of the cool and interesting things you snapped photos of years before on this day. Being a PowerShell scripter you imagine that PowerShell would be a quick and easy tool for exploring your photo"™s meta-data to re-discover some fun memories you had by emailing yourself some pictures you took on this same day last year or any year before. You decide to format the email as HTML including the pictures and some data about them. Finally, using the task scheduler to set your script to run every morning so you can take a trip down memory lane with your photos on "this day in history". As a PowerShell scripter you roll up your sleeves and get to work. - - - **Requirements:** - - - - - Your script should look into a directory that may contain sub folders for image files (you may want to support .jpg, .jpeg, .png, etc.). - - - - - The script should then determine the date a photo was taken. Examining the [EXIF](http://en.wikipedia.org/wiki/Exchangeable_image_file_format) meta-data might be handy. - - - - - Get the date the script runs and find all the photos taken on the same day other than the current year. - - - - -  Finally send an email containing the photos taken on this day in history* - - - - [1]: http://mellositmusings.com/ - [2]: http://mellositmusings.com/2013/10/29/powershell-script-to-download-attachments-from-an-email/ - [3]: http://www.jasonhelmick.com/ - [4]: http://concentratedtech.com/ - [5]: http://mvp.microsoft.com/en-us/mvp/Jason%20Helmick-5000354 - [6]: https://powershell.org/wp-content/uploads/2013/11/PhillyPosh_11_07_2013_Jason_Helmick.zip - [7]: https://www.youtube.com/watch?v=uVsMbxj6188 - [8]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg - [9]: https://powershell.org/community-events/summit/powershell-summit-north-america/ - [10]: http://paglia.org/ diff --git a/content/articles/2013-11-14-community-book-of-powershell-practices.md b/content/articles/2013-11-14-community-book-of-powershell-practices.md deleted file mode 100644 index a83d09566..000000000 --- a/content/articles/2013-11-14-community-book-of-powershell-practices.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Community Book of PowerShell Practices -authors: - - Don Jones -date: "2013-11-14T18:36:30+00:00" -categories: - - Books -aliases: - - /2013/11/community-book-of-powershell-practices/ ---- - -Released in our new Git repo: _The Community Book of PowerShell Practices, _an ongoing book started from this past Summer's "Great Debates" blog post series. Grab it from https://github.com/PowerShellOrg/ebooks/blob/master/Practices/2013Sep_Practices/2013Sep_Practices.doc and enjoy! diff --git a/content/articles/2013-11-14-last-chance-for-feedback-on-powershell-course-10961ab.md b/content/articles/2013-11-14-last-chance-for-feedback-on-powershell-course-10961ab.md deleted file mode 100644 index c108f99df..000000000 --- a/content/articles/2013-11-14-last-chance-for-feedback-on-powershell-course-10961ab.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Last chance for feedback on PowerShell course 10961A/B -authors: - - Don Jones -date: "2013-11-14T17:45:34+00:00" -categories: - - Training -aliases: - - /2013/11/last-chance-for-feedback-on-powershell-course-10961ab/ ---- - -I'm in the midst of working on 10961C, the Windows Server 2012 R2 / Windows 8.1 / PowerShell 4.0 update of Microsoft's 10961A/B course, "Automating Administration with Windows PowerShell." I anticipate this being closed out by the end of November, 2013, so if you've taken or taught this course and have any feedback - even a typo - now's the time to tell me. Drop a comment below, or e-mail me (if you have my address). Please, no Twitter replies on this one. -The course will not be substantially changed from the B rev; because PowerShell v4 doesn't _change_ much, especially at the entry-level covered by 10961, there wasn't much to alter. But I'm trying to sweep up as many lingering bugs and typos as possible. Kudos to MCT Jason Yoder for firing over a list of fixes! - - - -Some fun comments from the "A" rev feedback: - -> - -> - -> - -> - -> By day 3 (5 day class) most students felt over-whelmed. - -> -> - -> - -> - -> - -> There is not enough material. -> - -> - -> - -> - -> - -> - -> - -> - - - - - - - - - - - - - - - - - Probably won't be reconciling those two . Fact is, it's really tough to write the perfect course for *everyone*, which is why having a live instructor who knows the material is so important to a great class. - - - > - -> - -> - -> - -> No mention of filtering functions. -> - -> - -> - -> - - - - - - - - - - - - Because they're largely "leftovers" that were succeeded by pipeline functions. That said, 10961 isn't a programming course; that's where 55039 picks up. If you've got folks who want programming taking 10961, they were placed into the wrong class. diff --git a/content/articles/2013-12-02-scheduled-site-downtime.md b/content/articles/2013-12-02-scheduled-site-downtime.md deleted file mode 100644 index 87a7addd1..000000000 --- a/content/articles/2013-12-02-scheduled-site-downtime.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Scheduled site downtime -authors: - - Don Jones -date: "2013-12-02T22:13:41+00:00" -categories: - - Announcements -aliases: - - /2013/12/scheduled-site-downtime/ ---- - -Windows Azure has advised us of scheduled downtime on Friday, December 6, from approximately 15:00 hours (US Pacific) until approximately midnight Pacific time. diff --git a/content/articles/2013-12-09-phillyposh-12052013-meeting-summary-and-presentation-materials.md b/content/articles/2013-12-09-phillyposh-12052013-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 7b1f49052..000000000 --- a/content/articles/2013-12-09-phillyposh-12052013-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: PhillyPoSH 12/05/2013 meeting summary and presentation materials -authors: - - John Mello -date: "2013-12-10T03:51:19+00:00" -aliases: - - /2013/12/phillyposh-12052013-meeting-summary-and-presentation-materials/ ---- - -1.  [Sunny Chakraborty][1] gave an in-depth presentation on WMI Eventing using PowerShell. A copy of his presentation and scripts can be found [here][2], and a [recording][3] of his presentation can be found on our [YouTube channel][4]. If you want to learn even more about WMI, Sunny recommends checking out [Alain Lissoir's][5] webpage and downloading he WSH and VBS scripts hosted on his site for the two books he was written: "[How to exploit the power of Microsoft's WMI to create mission-critical computing infrastructures][6]" and "[Leveraging Windows Management Instrumentation (WMI) Scripting][7]" - 2. Announcements: - - - - - - January's meeting will be on the 2nd Thursday (***01/09/2014***) of January as opposed to the       1st - - - - - Since we didn't get to last months homework assignment we are pushing it to January's meeting. Here it is again and hopefully this will be a fun task that we can discuss during our next meeting: - - - - - - - - > **Title**: On This Day in Pictures - > **Description:** You have folder of photos on your computer that you take with your Smartphone or digital camera. From time to time you want to be reminded of the cool and interesting things you snapped photos of years before on this day. Being a PowerShell scripter you imagine that PowerShell would be a quick and easy tool for exploring your photo's meta-data to re-discover some fun memories you had by emailing yourself some pictures you took on this same day last year or any year before. You decide to format the email as HTML including the pictures and some data about them. Finally, using the task scheduler to set your script to run every morning so you can take a trip down memory lane with your photos on this day in history. As a PowerShell scripter you roll up your sleeves and get to work. - > **Requirements:** - > - > 1. Your script should look into a directory that may contain sub folders for image files (you may want to support .jpg, .jpeg, .png, etc.). - > 2. The script should then determine the date a photo was taken. Examining the [EXIF][8] meta-data might be handy. - > 3. Get the date the script runs and find all the photos taken on the same day other than the current year. - > 4.  Finally send an email containing the photos taken on this day in history* - - - [1]: https://twitter.com/sunnyc7 - [2]: https://powershell.org/wp-content/uploads/2013/12/PhillyPosh_12_05_2014-Sunny.zip - [3]: http://www.youtube.com/watch?v=h3V6K8ov1Ao - [4]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg - [5]: http://www.lissware.net/ - [6]: http://www.amazon.com/exec/obidos/tg/detail/-/1555582664/qid=1048198398/sr=8-1/ref=sr_8_1/102-5879685-5285706?v=glance&s=books&n=507846 - [7]: http://www.amazon.com/exec/obidos/tg/detail/-/1555582990/qid=1048198398/sr=8-2/ref=sr_8_2/102-5879685-5285706?v=glance&s=books&n=507846 - [8]: http://en.wikipedia.org/wiki/Exchangeable_image_file_format diff --git a/content/articles/2013-12-10-charlotte-powershell-user-group-holiday-themed-scripting-games.md b/content/articles/2013-12-10-charlotte-powershell-user-group-holiday-themed-scripting-games.md deleted file mode 100644 index 4f71a95ad..000000000 --- a/content/articles/2013-12-10-charlotte-powershell-user-group-holiday-themed-scripting-games.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Charlotte Powershell User Group Holiday-themed Scripting Games -authors: - - Terri Donahue -date: "2013-12-10T22:16:10+00:00" -aliases: - - /2013/12/charlotte-powershell-user-group-holiday-themed-scripting-games/ ---- - -The Charlotte Powershell Users Group meeting was held on Dec 5th. Jim put together a nifty challenge related to image manipulation. We started off with this nifty image. Pretty huh? -[![stegan1](https://powershell.org/wp-content/uploads/2013/12/stegan1.png)](https://powershell.org/wp-content/uploads/2013/12/stegan1.png) -The challenge was to manipulate the image using PowerShell to find the hidden message. After some discussion, the code was cracked and the image was displayed. As is normal with Powershell, there were multiple ways to achieve the end goal. Feel free to stop reading here and grab the image if you want to give this a go yourself. Spoilers are below. - - - - -Here is one way to find the hidden message: -add-type -AssemblyName system.drawing -$height = $img.Height - 1 -$width = $img.Width - 1 -$img = [System.Drawing.Image]::FromFile("c:\temp\stegan1.png") -0..$height | %{ -$y=$_; -0..$width | %{ -$x=$_; -$p = $img.GetPixel($x,$y); -if ($p.r -ne 0) { -$img.setpixel($x,$y,[System.Drawing.Color]::Green) -} -} -} -$img.save('c:\temp\update.png') -Merry Christmas and Happy Holidays from your Charlotte Powershell Users Group. diff --git a/content/articles/2013-12-10-how-quick-and-dirty-becomes-permanent-and-annoying.md b/content/articles/2013-12-10-how-quick-and-dirty-becomes-permanent-and-annoying.md deleted file mode 100644 index 51aaef0e0..000000000 --- a/content/articles/2013-12-10-how-quick-and-dirty-becomes-permanent-and-annoying.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: "How \"Quick and Dirty\" Becomes \"Permanent and Annoying.\"" -authors: - - Don Jones -date: "2013-12-10T22:23:37+00:00" -categories: - - PowerShell for Admins -aliases: - - /2013/12/how-quick-and-dirty-becomes-permanent-and-annoying/ ---- - -Consider the following: - - -`$computers = Get-ADComputer -filter * -searchBase "ou=test,dc=company,dc=pri" -foreach ($computer in $computers) { - write-host "computer $computer" - $result = Do-Something -computername $computer - Write-Host "$($result.property) and $($result.value)" -} -`Would you ever consider that acceptable? Some folks might well say, "sure! if I was just testing this, throwing in those Write-Hosts is no big deal. Heck, even if I was the only one who was going to use this, Write-Host isn't bad." -And the point I'm going to make doesn't just apply to Write-Host. It applies to _anytime_ when you're doing something that you _know_ breaks "best practices," but you justify it because it's "just for you" or because "it's just for testing." -To wit: if you need your script to output some status or tracking information, as in the above, use Write-Verbose. Yes, Write-Verbose requires a script or function to have this at the top: - - -`[CmdletBinding()] -Param() -`Small price to pay for all the functionality it adds, but why not just use Write-Host and be done with it? -**Begin as you mean to proceed.** That means, from the outset, assume everything is going to be a production-class tool and that it needs to be done right. You don't create output using Write-Host*, or output formatted text instead of objects, or any of a dozen other things because _eventually_ that thing you made "just for you" will end up copied and pasted into something that everyone in the organization depends upon. -And weren't you the one complaining you never have time to do stuff? So where are you going to find the time to go back and _re-do something the right way_? You won't. Your quick-and-dirty "just for me" will end up becoming an ugly pimple for the rest of time. -It is _rarely_ _harder to do something the right way_ in PowerShell. Yes, the right way might not be what habitually flies off of your fingertips - but that's not extra time, that's just you changing a habit. And again, Write-Host is just a convenient and easy example. I once was helping someone on a script, and in twelve different places, they had copied-and-pasted a short little logical construct to test connectivity to a computer on a specific protocol. It was maybe four lines of code. Most instances were commented out, indicating they'd just been for testing. -"Why," I asked, "didn't you put that into a function, and build a toggle into the function?" -"Oh, it was just for testing." -"Yes, but this script is running a critical process now. It isn't just for testing. And it's fugly." -"I didn't have time to go back and..." -Just stop. Ugh. I know. Well, you had time to copy and paste in a dozen places, which took longer than just making the damn function would have taken in the first place. -So the point: bad practices are always bad. Good practices are always good. And you should stay on the right side of the Force all the time, even when it's "just for you," because someday that code is going to wind up being not "just for you" anymore. Begin coding as you mean to proceed: write as if everything's for posterity. - -*unless you're specifically drawing an on-screen menu or something. Maybe then. diff --git a/content/articles/2013-12-19-coaches-and-judges-selected-for-winter-scripting-games.md b/content/articles/2013-12-19-coaches-and-judges-selected-for-winter-scripting-games.md deleted file mode 100644 index dcf03494f..000000000 --- a/content/articles/2013-12-19-coaches-and-judges-selected-for-winter-scripting-games.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Coaches and Judges Selected for Winter Scripting Games -authors: - - Don Jones -date: "2013-12-19T17:32:44+00:00" -categories: - - Scripting Games -aliases: - - /2013/12/coaches-and-judges-selected-for-winter-scripting-games/ ---- - -We've had an outpouring of support for the upcoming games, with more volunteers than we know what to do with! -At this point, we have our judging panel completely full; we're operating with a fairly small group of celebrity judges this time around. Games Master Richard Siddaway will introduce our judges in a few days. -We've also filled our roster of Coaches, and Head Coach Mike Robbins will provide that lineup soon also. -If you've volunteered but not heard from Richard or Mike, then you should definitely start recruiting a team for when registration and team formation opens in a couple of weeks! diff --git a/content/articles/2013-12-20-my-outline-for-accelerated-powershell-training.md b/content/articles/2013-12-20-my-outline-for-accelerated-powershell-training.md deleted file mode 100644 index d78a93610..000000000 --- a/content/articles/2013-12-20-my-outline-for-accelerated-powershell-training.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: My outline for accelerated PowerShell training -authors: - - Don Jones -date: "2013-12-20T22:40:00+00:00" -categories: - - Training -aliases: - - /2013/12/my-outline-for-accelerated-powershell-training/ ---- - -When I teach PowerShell, either at a private client or in a public class, I tend to use my own outlines. I'm comfortable with them, and they work really well. They formed the basis for the Microsoft 10961 and 55039 courses, although I had to make some changes to accommodate Microsoft standards and varying MCT delivery styles. But I'm often asked if there's a "MOC-equivalent" outline that combines the entry-level 10961 with the scripting-focused 55039. -Yup. -First, do understand that I naturally teach at a very concise and accelerated pace. I don't spend much time on slides; I tend to skip right to demos, and use those to explain what I'm explaining. If you follow a more common delivery style of around 5min per slide, plus taking your time on demos, my approach might not work well for you. I also tend to not tell a lot of ancillary stories, I tend to make students take break during lab time (rather than individually scheduling breaks), and I tend to be as concise as possible in my lectures. -Also, when accelerating these courses together, you don't do _all_ of the labs. For labs with multiple components (find these 20 command), I'll do about 1/3 of them. For the 55039 main-sequence labs, I'll tell students to pick the "A," "B," or "C" version rather than doing all three; sometimes I'll just have them do the "D" version (which gives them a pre-done starting point for each module, rather than making them build on their own work from a previous module). -For Day 1, I'll cover modules 1-5, and maybe module 6, from 10961. Day 2 will be modules 7, 9, 11, and 12 (covering 6 first, if I didn't get it done on Day 1). That's the "core" PowerShell stuff. It's a fast delivery; it's possible to spread those out over three days if you prefer, but I explicitly skip modules 6, 8, and 10 at this stage. -When my students all have strong shell or scripting skills, 2 days often gets me through that. If they're newer, I'll go slower on modules 1-5, do more of the labs, and take 3 days to cover that 10961 material. -The remainder of the course comes from 55039. That'll be 2 or 3 days, depending on how long it took you to do the 10961 material. Regardless, I'll cover modules 2-5. I'll usually skip module 6, and try to end the day with module 7 on debugging. I'll cover module 8, 9, and 10. That's usually 2 days, so it's the last thing I do if I took 3 days to cover the 10961 stuff. -If I got through 10961 in 2 days, I'll finish the 55039 material, covering modules 11, 13, and 16. If students insist on workflows, I'll throw that module in there - I have mixed feelings and results when it comes to workflow, so it's not part of my standard accelerated delivery. If you have extra time, my priority then goes to modules 15, 13, and 14, in that order. 14 gets you some GUI-building experience, so if the class is pushing for that I'll include that module instead of workflow. -If all that seems a little informal - well, it is. I'm very good at reading my students, and making sure folks are actually keeping up, so I don't press too hard. This is a _lot_ of conceptual and practical material to cover in a week. -Price-wise, in the US, I see this kind of accelerated class going for around $3500, although a lot of training centers offer significant discounts. This accelerated outline is absolutely worth it: you're literally taking someone from zero and teaching them how to build their own script modules and tools in PowerShell. It's a _lot_ to cover; not every class will be up to it. -The labs in both courses are solid, and I'm especially happy with the ones in 55039 in terms of what they cover, and in how challenging they are. I'll warn you that the 55039 labs don't do a lot of hand-holding. Students are expected to _learn_ the material and then execute the labs; the "answer keys" are outright sample solutions, not hints. But if you teach the material as provided, everything students _need_ is in there - if they're willing to work hard and retain what you've shared. diff --git a/content/articles/2013-12-23-introducing-the-coaches-of-the-2014-winter-scripting-games.md b/content/articles/2013-12-23-introducing-the-coaches-of-the-2014-winter-scripting-games.md deleted file mode 100644 index 670f1deb5..000000000 --- a/content/articles/2013-12-23-introducing-the-coaches-of-the-2014-winter-scripting-games.md +++ /dev/null @@ -1,160 +0,0 @@ ---- -title: Introducing the Coaches of the 2014 Winter Scripting Games -authors: - - Mike F Robbins -date: "2013-12-23T17:21:37+00:00" -categories: - - Scripting Games -aliases: - - /2013/12/introducing-the-coaches-of-the-2014-winter-scripting-games/ ---- - -A few weeks ago, just before the announcement to start recruiting your team for the 2014 Winter Scripting Games, I was contacted by Don Jones and Richard Siddaway about an opportunity to become the Head Coach for the Winter Scripting Games. I was honored to have been contacted and I'm a firm believer of taking advantage of opportunities when they emerge, especially when they're PowerShell related, so I graciously accepted. -One of my first responsibilities was to recruit a small team of coaches. I immediately went to work before potential coaches committed themselves to participating on teams. We had a huge number of people in the PowerShell community who had volunteered to be a coach and while we would have liked to have selected everyone who volunteered, we only had a specific number of positions to fill. Without further ado, here is the list of the coaches for the 2014 Winter Scripting Games: - - - - - **Name** - - - - **Twitter** - - - - - - [Boe Prox](http://learn-powershell.net/) - - - - [@proxb](http://twitter.com/proxb) - - - - - - [Carlo Mancini](http://www.happysysadm.com/) - - - - [@sysadm2010](http://twitter.com/sysadm2010) - - - - - - [Claus Nielsen](http://xipher.dk/) - - - - [@claustn](http://twitter.com/claustn) - - - - - - [Emin Atac](http://p0w3rsh3ll.wordpress.com/) - - - - [@p0w3rsh3ll](http://twitter.com/p0w3rsh3ll) - - - - - - [Jan Egil Ring](http://blog.powershell.no/) - - - - [@JanEgilRing](http://twitter.com/JanEgilRing) - - - - - - [Jeff Wouters](http://jeffwouters.nl/) - - - - [@JeffWouters](http://twitter.com/JeffWouters) - - - - - - [Jonathan Medd](http://www.jonathanmedd.net/) - - - - [@jonathanmedd](http://twitter.com/jonathanmedd/) - - - - - - [Lido Paglia](http://paglia.org/) - - - - [@nicemarmot](http://twitter.com/nicemarmot) - - - - - - [Matt Hitchcock](http://sgitpro.com/) - - - - [@hitchysg](http://twitter.com/hitchysg) - - - - - - [Rob Campbell](http://mjolinor.wordpress.com/) - - - - [@mjolinor](http://twitter.com/mjolinor) - - - - - - [Rohn Edwards](http://rohnspowershellblog.wordpress.com/) - - - - [@magicrohn](http://twitter.com/magicrohn) - - - - - - [Sahal Omer](http://www.get-exchange.info/) - - - - [@GetExchange](http://twitter.com/GetExchange) - - - - - - [Steve Murawski](http://stevenmurawski.com/) - - - - [@StevenMurawski](http://twitter.com/StevenMurawski) - - - - -[Click here](http://mikefrobbins.com/2013/12/23/introducing-the-coaches-of-the-2014-winter-scripting-games/) - to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. - -µ diff --git a/content/articles/2013-12-27-january-charlotte-powershell-user-group-meeting.md b/content/articles/2013-12-27-january-charlotte-powershell-user-group-meeting.md deleted file mode 100644 index 3acb785d3..000000000 --- a/content/articles/2013-12-27-january-charlotte-powershell-user-group-meeting.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: January Charlotte PowerShell User Group Meeting -authors: - - Terri Donahue -date: "2013-12-27T14:15:39+00:00" -aliases: - - /2013/12/january-charlotte-powershell-user-group-meeting/ ---- - -Our monthly meeting will be held on January 2nd, 2014. This years Scripting Games is a team based event. What better place to find/join a team than a User Group meeting? We look forward to seeing you there. - -Here is some additional information about the Winter Scripting Games: - -##### Teams can consist of between 2 to 6 Scripters and official registration opens on Jan 2nd. - -There will be a total of 4 official events for the Winter Scripting Games: - -_January 19th, January 26th, February 2nd, & February 9th_ - -Check out the [schedule][1] for all the details. In addition, be sure to follow the [#pshgames][2] hashtag on twitter. There is also [a list of Coaches][3] who are blogging and [tweeting][4] helpful info and tips including this [excellent preparation guide][5]. Lastly, before you head over to the [scripting games website][6] be sure to read this [Important Scripting Games Login and Operational Information][7] post. - - [1]: https://powershell.org/2013/12/16/2014-winter-scripting-games-schedule/ - [2]: https://twitter.com/search?q=%23pshgames&src=hash - [3]: http://mikefrobbins.com/2013/12/23/introducing-the-coaches-of-the-2014-winter-scripting-games/ - [4]: https://twitter.com/mikefrobbins/lists/pshcoaches - [5]: http://p0w3rsh3ll.wordpress.com/2013/12/26/be-prepared-for-the-winter-scripting-games-3-2-1-go/ - [6]: http://scriptinggames.org/ - [7]: https://powershell.org/2013/12/21/important-scripting-games-login-and-operational-information/ diff --git a/content/articles/2013-12-28-introducing-the-judges-for-winter-2014-scripting-games.md b/content/articles/2013-12-28-introducing-the-judges-for-winter-2014-scripting-games.md deleted file mode 100644 index 582f59990..000000000 --- a/content/articles/2013-12-28-introducing-the-judges-for-winter-2014-scripting-games.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Introducing the Judges for Winter 2014 Scripting Games -authors: - - Richard Siddaway -date: "2013-12-28T15:50:47+00:00" -categories: - - Scripting Games -aliases: - - /2013/12/introducing-the-judges-for-winter-2014-scripting-games/ ---- - -In the last few years there has been a long list of people judging the Scripting Games. Those people were expected to view as many entries as possible, preferably all, and score the entries as well as providing feedback on the individual entries. That is a ton of work especially when you consider that the judges were all volunteers. -This time round we're attempting to spread the load somewhat. Mike Robbins has done a superb job recruiting coaches for the [](https://powershell.org/2013/12/23/introducing-the-coaches-of-the-2014-winter-scripting-games/) Its their job to look at the entries and make suggestions and hints to the teams - if the teams wish to take advantage of this option. Looking at the list of coaches - I know I would take advantage of their assistance if I was competing. -That leaves judging. This time we're using a small group of judges. We have prepared scoring criteria for the events with some additional style points available to the judges. This will make MOST of the scoring objective but we've a bit of subjectivity available for individual judges to pick out, and hopefully comment on, things they like or don't like. -The judges are all very experienced PowerShell practitioners with more books written, talks given, blog posts created and classes taught between them than anyone would want to count. In alphabetical order your judges for the Winter 2014 Scripting Games are: -Don Jones - founder and CEO of powershell.org. Author of several PowerShell books including the highly recommended Learn PowerShell v3 in a Month of Lunches and co-author of PowerShell in Depth. Don is a PowerShell MVP, PowerShell educator, columnist and course creator. -Jason Helmick - Board member of powershell.org. A PowerShell MVP and author of Learn IIS in a Month of Lunches which includes lots of PowerShell. Jason also delivered the recent two-part Introducing PowerShell MVA sessions with Jeffrey Snover. PowerShell educator, columnist and speaker. -Jeffery Hicks - Board member of powershell.org. PowerShell MVP. Co-author of PowerShell in Depth, lead editor of PowerShell Deep Dives and author of other PowerShell books. Jeffrey is also a PowerShell columnist and educator -Ed Wilson - The Scripting Guy. Ed runs the Hey! Scripting Guy [](http://blogs.technet.com/b/heyscriptingguy/) Author of several PowerShell books including Windows PowerShell Best Practices and Windows PowerShell Scripting Guide. Ed also delivers PowerShell classes and is a much in demand speaker. -The list of judges is completed by -Richard Siddaway - Board member of powershell.org. PowerShell MVP. Co-author of PowerShell in Depth and author of PowerShell in Practice and PowerShell and WMI. Frequent blogger on PowerShell related topics. -Between them the judges have accumulated over 30 years of PowerShell experience that is focussed on judging the Games. They are all looking forward to the Games and hope to see your entries. diff --git a/content/articles/2013-12-30-state-of-the-org-ending-2013.md b/content/articles/2013-12-30-state-of-the-org-ending-2013.md deleted file mode 100644 index 57af18262..000000000 --- a/content/articles/2013-12-30-state-of-the-org-ending-2013.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: State of the Org, ending 2013 -authors: - - Don Jones -date: "2013-12-30T19:24:37+00:00" -categories: - - Announcements -aliases: - - /2013/12/state-of-the-org-ending-2013/ ---- - -I wanted to take a moment and wish everyone a very happy new year, and to do a sort of wrap-up of 2013 from PowerShell.org's perspective. -We started 2013 with a bang, including our first-ever PowerShell Summit North America, held on-campus at Microsoft in Redmond. We'll be returning to the Seattle area in April 2014 for [PowerShell Summit North America 2014][1], and are planning the first [PowerShell Summit Europe 2014][1] in Amsterdam in September. For the N.A. show, we need about 50 more Summit attendees to break even, and can accommodate about 100 more than we've currently got registered. -We ran a very successful Scripting Games that kicked off just as the Summit was ending. Thousands participated, tens of thousands of dollars in prizes were handed out, and most importantly the Games made the transition from being a much-loved child of the Microsoft Scripting Guys to being a community-owned event that can hopefully continue forever. We've got the first Winter Scripting Games in a loooong time starting in just a few days, in fact. -In the wake of The Scripting Games, we ran a summer-long series of [Great Debates][2], and your comments on those informed the first-ever [Community Book of PowerShell Practices][3], now offered as a free ebook. -PowerShell.org, Inc. closed its first fiscal year at the end of June 2013, and financially we lost just a bit of money. Don't worry - that was always more or less the intent; we're not running the corporation to make a buck, but rather to more-or-less break even. At the moment, we have $29,988.25 in our checking account, most of which is earmarked for Summit 2014 expenses. -We're now providing hosting services for about 17 [local and regional user groups][4], giving them a spot to post upcoming meeting dates, post-meeting file attachments, and other details. We're hoping this helps raise awareness of the efforts they're all making to have a strong local PowerShell support system in place. -2013 also saw the [PowerScripting Podcast][5] become a welcome part of PowerShell.org. Host Jon Walz also got his first MVP Award, a long-awaited and well-deserved honor that he now shares with co-host Hal Rottenberg. Everyone appreciates the hard work they do, and we at PowerShell.org wanted to make sure they had the resources to keep doing it (equipment ain't free), so we offered to help out when they needed, and they graciously accepted. We're delighted to be working with them. -PowerShell.org played an important role in developing Microsoft's official entry-level PowerShell training, course 10961, by giving the authors (e.g., me) a place to survey folks about topic, level of coverage, and more, and to solicit feedback on the "A" and "B" revs while updating the course for PowerShell v4. This site (and all of you) also played an important role in selecting topics for the advanced-level training, course 10962, which will be developed in 2014. Finally, you all helped provide feedback for Microsoft Courseware Marketplace course 55039, which covers PowerShell scripting and toolmaking. When you see a survey posted here, jump in - it makes a very real difference in some very important projects! -2013 was also the year we Moved to Azure, spinning up an Azure-hosted CentOS VM that's now running the site. It's gotten faster, is a bit easier to maintain, and is a heck of a lot more highly available thanks to Microsoft's cloud hosting. -I'm extremely proud to have had so many folks jump in and help out this year. Dave Wyatt, Matt Penny, Matt Johnson, Mike Shepard, and Nicholas Getchell have all taken on curator roles for the free ebooks we offer on PowerShell.org. They're doing a wonderful job in making sure those titles stay updated - so much so, that [we're now just linking to the books' GitHub repository][3], where you can download the DOC files directly. Dave Wyatt has also been [posting some incredibly detailed and informative blog posts][6] that I hope you're reading - I really appreciate his contributions here. I also want to thank Matt Tilford, Chris Hunt, and Mark Keisling, who have taken on editorial duties for the [TechLetter newsletter][3]. Our aim is to put out a solid, informative, technically deep monthly offering and these guys are absolutely on the job. I hope you're subscribed, because if you aren't, you're missing out. Finally, MVP [Steven Murawski][7] has made PowerShell.org his home for Desired State Configuration (DSC) blogs and code, and he's been prolific. His employer, StackExchange, has been an early adopter of the DSC technology, and Steven's been sharing pretty much everything he's learned. -We've had some transitions in 2013. Board member and co-founder Kirk Munro has had to step away from day-to-day duties with PowerShell.org, although he remains a member of the board. Board member Jason Helmick has stepped into a second-in-command position, and is more or less running the North America Summit from an operational perspective. Jason earned his first MVP Award this year, giving us an all-MVP Board that also includes myself, Jeffery Hicks, and Richard Siddaway. -I'm extremely proud of everything we've accomplished. I'm delighted that so many folks are jumping into the [forums][8] and offering answers to questions - it's a massive relief on my own workload, and there are some damn smart folks offering their help to the community for free. In fact, we plan to recognize some of them in our first-ever PowerShell Heroes award, scheduled for January 2014. We're also going to make good on a promise I made when we started this site: our above-and-beyond contributors are going to become part-owners of this community with an award of stock in PowerShell.org, Inc. That'll give them some concrete control over the community they're helping to build. Look for that mid-2014, when we near the end of our fiscal year. -For 2014, I'd like to thank our returning sponsors, [SAPIEN Technologies][9] and [Interface Technical Training][10]. These folks give a lot, financially, to help make this site work. Please show them your appreciation in every way you can. In 2014, my company, [Concentrated Tech][11], is also coming aboard as a sponsor, and I'll be offering my first-ever public PowerShell training. -I think 2014 should be a great year, both for PowerShell.org and for the broader PowerShell community that we're trying to serve. If you're new here, or you've just been lurking, please jump in and help. Write an article about something you learned, answer a question in the forums, or volunteer to help out. We're all in this together, and the stronger a community we all make _together, _the more we'll be able to support each other when needs arise. -I look forward to serving you in 2014! -Don Jones -President and CEO - - - - [1]: https://powershell.org/community-events/summit/ - [2]: https://powershell.org/category/great-debates/ - [3]: https://powershell.org/newsletter/ - [4]: https://powershell.org/user-groups/ - [5]: https://powershell.org/powerscripting-podcast/ - [6]: https://powershell.org/author/dlwyatt/ - [7]: https://powershell.org/author/stevenmurawski/ - [8]: https://powershell.org/forums/ - [9]: http://www.sapien.com - [10]: http://interfacett.com - [11]: http://concentratedtech.com diff --git a/content/articles/2013/01/3-updated-free-powershell-ebooks-in-january-2013/index.md b/content/articles/2013/01/3-updated-free-powershell-ebooks-in-january-2013/index.md new file mode 100644 index 000000000..4ba421e5b --- /dev/null +++ b/content/articles/2013/01/3-updated-free-powershell-ebooks-in-january-2013/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2013-01-08-3-updated-free-powershell-ebooks-in-january-2013/ +title: 3 Updated Free PowerShell eBooks in January 2013! +authors: + - Don Jones +date: "2013-01-08T17:06:34+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/01/3-updated-free-powershell-ebooks-in-january-2013/ +--- + +I've been working to update my three free PowerShell ebooks for this month: + + * _Secrets of PowerShell Remoting_ + * _Creating HTML Reports in PowerShell_ + * _Making Historical and Trend Reports in PowerShell_ + +The updated versions will be made available to subscribers of the PowerShell.org TechLetter on January 15th. If you're not already signed up to receive this, you can [sign up right now][1]. The January issue will also feature a walkthrough article of how I started creating a new, better ConvertTo-HTML command, which gets used in the ebook on HTML reporting. Going forward, I'll be making updated ebooks available primarily through the TechLetter. +If you're not a subscriber and don't want to be, well fine. I'll just take my ball and go play in someone else's sandbox. Kidding . I'll post the updates at the end of January. However, right now access to the books still requires a subscription to the newsletter, although you can immediately unsubscribe if you want to. I had to put that "hurdle" in the way because we were losing a ton of bandwidth to people direct-linking the download files. Mostly from China, for some reason. You're welcome to host the files on your own server, if you want to (they're licensed for that), but bandwidth costs me money, so I'm trying to conserve a bit. +Anyway, keep an eye out for the TechLetter in your inbox on Jan 15th. Check those spam filters, and make sure newsletter@powershell.org is in your address book, so that your mail server will know it's a legitimate sender. + + [1]: https://powershell.org/newsletter "Select-String scenarios "“ fixed columns" diff --git a/content/articles/2013/01/_index.md b/content/articles/2013/01/_index.md new file mode 100644 index 000000000..1cb144376 --- /dev/null +++ b/content/articles/2013/01/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from January 2013" +description: "PowerShell.org Articles published in January 2013." +--- diff --git a/content/articles/2013/01/account-sids-hopefully-my-last-word/index.md b/content/articles/2013/01/account-sids-hopefully-my-last-word/index.md new file mode 100644 index 000000000..fddd104ed --- /dev/null +++ b/content/articles/2013/01/account-sids-hopefully-my-last-word/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-01-17-account-sids-hopefully-my-last-word/ +title: "Account SIDs\"“hopefully my last word" +authors: + - Richard Siddaway +date: "2013-01-17T08:25:50+00:00" +aliases: + - /2013/01/account-sids-hopefully-my-last-word/ +--- + +Ok the embarrassing moral of this story is that you shouldn't answer questions in a hurry at the end of the evening. 5 minutes after shutting down I realised that there is a far, far simpler way to get the info. Win32_AccountSID is a WMI linking class. It links Win32_SystemAccount and Win32_SID classes. + +Get-WmiObject -Class Win32_SystemAccount | select Caption, Domain, Name, SID, LocalAccount + +gets you all you need + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2796/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2796/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2796&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/account-sids-revisited/index.md b/content/articles/2013/01/account-sids-revisited/index.md new file mode 100644 index 000000000..30a3654b8 --- /dev/null +++ b/content/articles/2013/01/account-sids-revisited/index.md @@ -0,0 +1,112 @@ +--- +url: /articles/2013-01-16-account-sids-revisited/ +title: Account SIDs revisited +authors: + - Richard Siddaway +date: "2013-01-16T22:48:05+00:00" +aliases: + - /2013/01/account-sids-revisited/ +--- + +I realised there is an easier way to get the data + + +`function + +get-SID + +{ + + +param + +( + + +[string] + +$computername + += + +$env:COMPUTERNAME + + +) + + +Get-WmiObject + +-Class + +Win32_AccountSID + +-ComputerName + +$computername + +| + + +foreach + +{ + + +$exp + += + +"[wmi]'" + ++ + +$( + +$_ + +. + +Element + +) + ++ + +"'" + + +Invoke-Expression + +-Command + +$exp + +| + + +select + +Domain + +, + +Name + +, + +SID + +, + +LocalAccount + + +} + + +} + +`Use the wmi type accelerator with the path from the Element and you can just select the data you want. As a bonus you can discover if the account is local or not + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2795/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2795/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2795&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/account-sids/index.md b/content/articles/2013/01/account-sids/index.md new file mode 100644 index 000000000..b6b2528f5 --- /dev/null +++ b/content/articles/2013/01/account-sids/index.md @@ -0,0 +1,244 @@ +--- +url: /articles/2013-01-16-account-sids/ +title: Account SIDs +authors: + - Richard Siddaway +date: "2013-01-16T22:22:45+00:00" +aliases: + - /2013/01/account-sids/ +--- + +A question on the forum asked about finding the accounts and SIDs on the local machine. + + +`function + +get-SID + +{ + + +param + +( + + +[string] + +$computername + += + +$env:COMPUTERNAME + + +) + + +Get-WmiObject + +-Class + +Win32_AccountSID + +-ComputerName + +$computername + +| + + +foreach + +{ + + +$da + += + +( + +( + +$_ + +. + +Element + +) + +. + +Split + +( + +"." + +) + +[ + +1 + +] + +) + +. + +Split + +( + +"," + +) + + +$sid + += + +( + +$_ + +. + +Setting + +-split + +"=" + +) + +[ + +1 + +] + +-replace + +'"' + +, + +'' + + +$props + += + +[ordered] + +@{ + + +Domain + += + +( + +$da + +[ + + +] + +-split + +"=" + +) + +[ + +1 + +] + +-replace + +'"' + +, + +'' + + +Account + += + +( + +$da + +[ + +1 + +] + +-split + +"=" + +) + +[ + +1 + +] + +-replace + +'"' + +, + +'' + + +SID + += + +$sid + + +} + + +New-Object + +-TypeName + +PSObject + +-Property + +$props + + +} + + +} + +`Pass a computer name into the function "“ default is local machine. + +Use the AccountSID class which links Win32_SystemAccount and Win32_SID. For each returned instance clean up the data and create an object with three properties "“ domain, account and SID. + +You will see more than you thought "“ some very useful information buried in there + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2793/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2793/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2793&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/displaying-data-from-multiple-servers-as-html/index.md b/content/articles/2013/01/displaying-data-from-multiple-servers-as-html/index.md new file mode 100644 index 000000000..0bff11061 --- /dev/null +++ b/content/articles/2013/01/displaying-data-from-multiple-servers-as-html/index.md @@ -0,0 +1,274 @@ +--- +url: /articles/2013-01-03-displaying-data-from-multiple-servers-as-html/ +title: Displaying data from multiple servers as HTML +authors: + - Richard Siddaway +date: "2013-01-03T19:12:53+00:00" +aliases: + - /2013/01/displaying-data-from-multiple-servers-as-html/ +--- + +A forum question regarding retrieving WMI based data from multiple servers and displaying it as HTML was interesting. I would approach it like this + + +`$servers + += + +Get-Content + +-Path + +C:\scripts\servers.txt + + +$data + += + +@( + +) + + +foreach + +( + +$server + +in + +$servers + +) + +{ + + +$compdata + += + +New-Object + +-TypeName + +PSObject + +-Property + +@{ + + +Computer + += + +$server + + +Contactable + += + +$false + + +LastBootTime + += + +"" + + +AllowTSConnections + += + +$false + + +} + + +if + +( + +Test-Connection + +-ComputerName + +$server + +-Quiet + +-Count + +1 + +) + +{ + + +$compdata + +. + +Contactable + += + +$true + + +$os + += + +Get-WmiObject + +-Class + +Win32_OperatingSystem + +-ComputerName + +$server + + +$compdata + +. + +LastBootTime + += + +$os + +. + +ConvertToDateTime + +( + +$os + +. + +LastBootUpTime + +) + + +$ts + += + +Get-WmiObject + +-Namespace + +root\cimv2\terminalservices + +-Class + +Win32_TerminalServiceSetting + +-ComputerName + +$server + +-Authentication + +PacketPrivacy + + +if + +( + +$ts + +. + +AllowTSConnections + +-eq + +1 + +) + +{ + + +$compdata + +. + +AllowTSConnections + += + +$true + + +} + + +} + + +$data + ++= + +$compdata + + +} + + +$data + + +$data + +| + +ConvertTo-Html + +| + +Out-File + +-FilePath + +c:\scripts\report.html + + +Invoke-Item + +-Path + +c:\scripts\report.html + +`Put the list of servers in a text file & read it in via get-content. + +use foreach to iterate over the list of servers. + +For each server create an object and then test if you can ping the server. Note that the default setting for Contactable is $false so don"™t need to deal with that case. + +Get the WMI data and set the properties on the object. + +Add the object to an array + +After you"™ve hit all the servers use ConvertTo-Html and write to a file with out-file. + +use Invoke-Item to view the report + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2780/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2780/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2780&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/ensuring-that-parameter-values-are-passed-to-your-function/index.md b/content/articles/2013/01/ensuring-that-parameter-values-are-passed-to-your-function/index.md new file mode 100644 index 000000000..b25268345 --- /dev/null +++ b/content/articles/2013/01/ensuring-that-parameter-values-are-passed-to-your-function/index.md @@ -0,0 +1,135 @@ +--- +url: /articles/2013-01-03-ensuring-that-parameter-values-are-passed-to-your-function/ +title: Ensuring that parameter values are passed to your function +authors: + - Richard Siddaway +date: "2013-01-03T18:46:59+00:00" +aliases: + - /2013/01/ensuring-that-parameter-values-are-passed-to-your-function/ +--- + +A question on the forum about a function had me thinking. The user had defined two parameters for the function and then used Read-Host to get the values. + +NO + +Much better way is to use an advanced function and make the parameters mandatory + + +`function + +Getuserdetails + +{ + + +[ + +CmdletBinding + +( + +) + +] + + +param + +( + + +[ + +parameter + +( + +Mandatory + += + +$true + +) + +] + + +[string] + +$Givenname + +, + + +[ + +parameter + +( + +Mandatory + += + +$true + +) + +] + + +[string] + +$Surname + + +) + + +Get-ADUser + +-properties + +telephonenumber + +, + +office + +-Filter + +{ + +( + +GivenName + +-eq + +$Givenname + +) + +-and + +( + +Surname + +-eq + +$Surname + +) + +} + + +} + +`If you call the function and don"™t give values for the parameters you will be prompted for them + +The other point is the "“Filter property on get-aduser. Don"™t put quotes round the variable + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2779/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2779/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2779&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/finding-the-domain-controller-that-authenticated-you/index.md b/content/articles/2013/01/finding-the-domain-controller-that-authenticated-you/index.md new file mode 100644 index 000000000..3f18b38cb --- /dev/null +++ b/content/articles/2013/01/finding-the-domain-controller-that-authenticated-you/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-01-04-finding-the-domain-controller-that-authenticated-you/ +title: Finding the domain controller that authenticated you +authors: + - Richard Siddaway +date: "2013-01-04T17:57:56+00:00" +aliases: + - /2013/01/finding-the-domain-controller-that-authenticated-you/ +--- + +A question on my blog asked how do you know which domain controller you are running against when you search Active Directory. Unless you explicitly instruct your script to use a specific domain controller it will use the one to which you authenticated. + +You can find the DC to which you authenticated with this simple function + +function get-logonserver{ +$env:LOGONSERVER -replace "\\", "" +} + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2781/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2781/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2781&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/number-of-processors-in-a-box/index.md b/content/articles/2013/01/number-of-processors-in-a-box/index.md new file mode 100644 index 000000000..a90f59310 --- /dev/null +++ b/content/articles/2013/01/number-of-processors-in-a-box/index.md @@ -0,0 +1,28 @@ +--- +url: /articles/2013-01-05-number-of-processors-in-a-box/ +title: Number of processors in a box +authors: + - Richard Siddaway +date: "2013-01-05T12:21:23+00:00" +aliases: + - /2013/01/number-of-processors-in-a-box/ +--- + +WMI enables you find the number of processors in your system: + +PS> Get-WmiObject -Class Win32_ComputerSystem | fl Number* + +NumberOfLogicalProcessors : 2 +NumberOfProcessors : 1 + +This works fine for Windows Vista/Windows 2008 and above. + +Earlier versions of Windows mis-report the number of processors "“ it counts the number of logical processors reports it as the number of physical processors. + +Win32_Processor has the same problem on Windows 2003 and below. + +There is a hotfix available from [http://support.microsoft.com/kb/932370][1] that will correct the behaviour of these two WMI classes so that they report correctly + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2782/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2782/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2782&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: http://support.microsoft.com/kb/932370 "http://support.microsoft.com/kb/932370" diff --git a/content/articles/2013/01/passing-function-names/index.md b/content/articles/2013/01/passing-function-names/index.md new file mode 100644 index 000000000..4073fd0f0 --- /dev/null +++ b/content/articles/2013/01/passing-function-names/index.md @@ -0,0 +1,83 @@ +--- +url: /articles/2013-01-16-passing-function-names/ +title: Passing function names +authors: + - Richard Siddaway +date: "2013-01-16T22:32:38+00:00" +aliases: + - /2013/01/passing-function-names/ +--- + +A question asked about passing a function name into another function which then called the function. It sounds worse than it is. if you need to pass the name of a command and then call it try using invoke-expression + + +`function + +ffour + +{ + + +Get-Random + + +} + + +function + +fthree + +{ + + +Get-Date + + +} + + +function + +ftwo + +{ + + +param + +( + + +[string] + +$fname + + +) + + +Invoke-Expression + +$fname + + +} + + +"date" + + +ftwo + +fthree + + +"random" + + +ftwo + +ffour + +`[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2794/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2794/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2794&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/phillyposh-01032013-meeting-summary-and-presentation-materials/index.md b/content/articles/2013/01/phillyposh-01032013-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..448b84b55 --- /dev/null +++ b/content/articles/2013/01/phillyposh-01032013-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,48 @@ +--- +url: /articles/2013-01-07-phillyposh-01032013-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 01/03/2013 meeting summary and presentation materials +authors: + - John Mello +date: "2013-01-07T18:23:39+00:00" +aliases: + - /2013/01/phillyposh-01032013-meeting-summary-and-presentation-materials/ +--- + +1. User group member [Greg Martin][1] gave a presentation on Active Directory and PowerShell. A copy of his presentation can be found [here][2] and included the following topics: + 1. Building a copy of your production AD domain + 2. Notifying users of expiring passwords + 3. Dealing with expired computer accounts + 2. User group member [Sunny Chakraborty][3] gave a presentation on how to use the techniques of Prof [George Poyla][4] and Chess Grandmasters in order to improve your scripting skills. A copy of his presentation materials can be found [here][2]. + 3. Various other information worth mentioning + 1. User group member [Sunny Chakraborty][3] submitted a list of PowerShell commands to retrieve Dell specific WMI objects. A copy of that list can be found [here][5]. + 2. Another group member (Name forthcoming!) submitted a list of PowerShell commands to retrieve HP Insight manager WMI Objects. A copy of that list can be found [here][5]. + 3. [Do not install Windows Management Framework 3.0 (PowerShell 3.0) on the following systems][6], if you have please uninstall it so that you do not run into any issues with subsequent patches. + 1. System Center 2012 Configuration Manager running on any Windows Server 2008 or 2008 R2 version + 2. System Center Virtual Machine Manager running on any Windows Server 2008 or 2008 R2 version + 3. Microsoft Exchange 2007 or 2010 running on any Windows Server 2008 or 2008 R2 version + 4. Microsoft SharePoint 2010 running on any Windows Server 2008 or 2008 R2 version + 5. Windows Small Business Server 2008 or 2011 + 4. On Twitter? Follow the [#PowerShell][7] hashtag or check our [Lido Paglia"™s][8] [Powershell Twitter List][9]. + 5. On Google+? Join the [PowerShell community][10]. + 6. Still haven"™t purchased a copy of [Learn PowerShell in a Month of Lunches][11] or any other PowerShell book on [Manning Publications][12]? Signup for their [deal of the day][13] newsletter or check the front page every day to see when it"™s on sale! + 7. If you"™re looking for .NET assembly browser and decomplier, take a look at [Sunny Chakraborty"™s][3] favorite utility: [ILSpy][14]. + +Attachments: + + * [PhillyPosh_2013-01-03_Presentations][2] + * [PhillyPosh_2013-01-03_Extras][5] + + [1]: http://tiki.gmartin.org/ "Greg's blog" + [2]: https://powershell.org/wp-content/uploads/2013/01/PhillyPosh_2013-01-03_Presentations.zip + [3]: http://tekout.wordpress.com/ + [4]: http://en.wikipedia.org/wiki/George_P%C3%B3lya + [5]: https://powershell.org/wp-content/uploads/2013/01/PhillyPosh_2013-01-03_Extras.zip + [6]: http://blogs.msdn.com/b/powershell/archive/2012/12/20/windows-management-framework-3-0-compatibility-update.aspx + [7]: https://twitter.com/search?q=%23Powershell&src=typd + [8]: http://paglia.org/ + [9]: https://twitter.com/nicemarmot/powershellers + [10]: https://plus.google.com/u/0/communities/114336958783305019912 + [11]: http://www.manning.com/jones3/ + [12]: http://www.manning.com/ + [13]: http://www.manning.com/free/dotd.html + [14]: http://ilspy.net/ diff --git a/content/articles/2013/01/piping-between-functions/index.md b/content/articles/2013/01/piping-between-functions/index.md new file mode 100644 index 000000000..da4f34ab3 --- /dev/null +++ b/content/articles/2013/01/piping-between-functions/index.md @@ -0,0 +1,446 @@ +--- +url: /articles/2013-01-19-piping-between-functions/ +title: Piping between functions +authors: + - Richard Siddaway +date: "2013-01-19T17:04:01+00:00" +aliases: + - /2013/01/piping-between-functions/ +--- + +A question came up about piping between advanced functions. The input to the second function might be an array. To illustrate how this works imagine a function that gets disk information "“ or better still use this one. + + +`function + +get-mydisk + +{ + + +[ + +CmdletBinding + +( + +) + +] + + +param + +( + + +[string] + +$computername + += + +"$env:COMPUTERNAME" + + +) + + +BEGIN + +{ + +} + +#begin + + +PROCESS + +{ + + +Get-WmiObject + +-Class + +Win32_LogicalDisk + +-ComputerName + +$computername + +| + + +foreach + +{ + + +New-Object + +-TypeName + +PSObject + +-Property + +@{ + + +Disk + += + +$_ + +. + +DeviceID + + +Free + += + +$_ + +. + +FreeSpace + + +Size + += + +$_ + +. + +Size + + +} + + +} + + +} + +#process + + +END + +{ + +} + +#end + + +} + +`Use a computername as a parameter. Use WMI to get the disk information and output an object. + +PS> get-mydisk | ft -AutoSize + +Disk Free Size +—- —- —- +C: 149778239488 249951154176 +D: 69271552 104853504 +E: +F: + +This works as well + + + +PS> get-mydisk | where Size -gt 0 | ft -AutoSize + +Disk Free Size +—- —- —- +C: 149778108416 249951154176 +D: 69271552 104853504 + +You now have a function outputs objects that behave properly on the pipeline. + +So now you want those objects piped into another function or you want an array of objects used as the input + + +`function + +get-freeperc + +{ + + +[ + +CmdletBinding + +( + +) + +] + + +param + +( + + +[ + +parameter + +( + +ValueFromPipeline + += + +$true + +) + +] + + +[Object[]] + +$disklist + + +) + + +BEGIN + +{ + +} + +#begin + + +PROCESS + +{ + + +foreach + +( + +$disk + +in + +$disklist + +) + +{ + + +if + +( + +$disk + +. + +Size + +-gt + + + +) + +{ + + +$disk + +| + +Select + +Disk + +, + + +@{ + +N + += + +"Size(GB)" + +; + +E + += + +{ + +[math] + +:: + +Round + +( + +( + +$( + +$_ + +. + +Size + +) + +/ + +1GB + +) + +, + +2 + +) + +} + +} + +, + + +@{ + +N + += + +"FreePerc" + +; + +E + += + +{ + +[math] + +:: + +Round + +( + +( + +$( + +$_ + +. + +Free + +) + +/ + +$( + +$_ + +. + +Size + +) + +) + +* + +100 + +, + +2 + +) + +} + +} + + +} + + +} + + +} + +#process + + +END + +{ + +} + +#end + + +} + +`* Set the parameter to accept pipeline input + * Set the parameter to accept an array of objects + * Use a process block + * Use a foreach block in the process block + + This works + + PS> get-mydisk | get-freeperc | ft -AutoSize + + Disk Size(GB) FreePerc +—- ——– ——– +C: 232.79 59.92 +D: 0.1 66.07 + + or this + + $disks = get-mydisk + get-freeperc -disklist $disks + + or this + + get-freeperc -disklist (get-mydisk) + + [![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2798/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2798/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2798&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/planning-the-powershell-summit-north-america-2014/index.md b/content/articles/2013/01/planning-the-powershell-summit-north-america-2014/index.md new file mode 100644 index 000000000..9772529f2 --- /dev/null +++ b/content/articles/2013/01/planning-the-powershell-summit-north-america-2014/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2013-01-12-planning-the-powershell-summit-north-america-2014/ +title: Planning the PowerShell Summit North America 2014 +authors: + - Don Jones +date: "2013-01-12T20:35:17+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/01/planning-the-powershell-summit-north-america-2014/ +--- + +We're already planning for the 2014 Summit... you have to get way out in front of these things to secure space, plan a budget, and more. +Here's what we know: + + * +We'll definitely still be in the Seattle metro area. That's the best way to ensure participation from the PowerShell team, since it doesn't require them to leave town for days at a time. + + * We'll be in April 2014. We're going to try for April 14-16 to avoid Easter, or April 28-30. + * We'll be in a bigger venue. We hope to support a crowd of up to 300, although we're still aiming for a smaller group. That'll give us more flexibility in session planning, along with the possibility of on-site evening events. + * We will **open up early bird ticketing** for 2013 alumni the week of April 29-May 3. 50 tickets will be available. If there are any of those tickets left after May 3, they'll be offered to the public May 6 through 10. Any remaining early bird tickets will be converted to full-price tickets after May 10, when general sales will begin. Early bird pricing will be in the $650 range. Full pricing will be around $850. This is more than 2013, but will help us (a) fully reimburse speaker travel expenses, which we couldn't do in 2013, (b) pay for the larger conference venue, (c) offer a full hot breakfast every day and beverages throughout the day, and (d) allow for bussing to the event venue (see below). Early Bird tickets will be fully refundable until the end of 2013. + * We are going to try and hold a percentage of our full-price tickets for release in January 2014. That way, people who can't get budget until the year-of will still have a shot at tickets. This will be a small block of tickets, though - probably less than 30 - so if you can get budget to buy your tickets in 2013, do it. + * We will offer bussing from **one** hotel complex to the event venue in the mornings, with return busses at night. It will be crucial that you book your hotel as soon as possible once we announce, so that you can lock in a room. This can help eliminate the need for a rental car, and lower your trip expenses. At least one hotel option at around $100-$110 a night will be offered, although it may be a limited room block. For folks in the US, you should be able to attend for about $2,000 including air, hotel, and registration. Add in dinners (which we don't provide) and you should be able to attend for under $2500 including expenses. Not bad! + +As you can see, we're still trying to keep things as affordable and accessible as possible, in keeping with the nature of a community-owned event. We're also trying to build this event into one that can support itself and continue to grow. +I know a lot of folks who wanted to come in 2013 missed out... so that's why I'm giving you as much heads-up as possible. Start getting the boss on board. Get purchasing on board. Start planning to have the credit card ready in April 2013. We'll get as many folks as we can into the 2014 Summit! diff --git a/content/articles/2013/01/powershell-and-active-directory-recording/index.md b/content/articles/2013/01/powershell-and-active-directory-recording/index.md new file mode 100644 index 000000000..63c187302 --- /dev/null +++ b/content/articles/2013/01/powershell-and-active-directory-recording/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-01-30-powershell-and-active-directory-recording/ +title: PowerShell and Active Directory recording +authors: + - Richard Siddaway +date: "2013-01-30T22:05:51+00:00" +aliases: + - /2013/01/powershell-and-active-directory-recording/ +--- + +The recording, slides and demo script from yesterday"™s PowerShell and Active Directory session can be found here: + +[https://skydrive.live.com/?cid=43cfa46a74cf3e96#cid=43CFA46A74CF3E96&id=43CFA46A74CF3E96%2140563][1] + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2801/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2801/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2801&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: https://skydrive.live.com/?cid=43cfa46a74cf3e96#cid=43CFA46A74CF3E96&id=43CFA46A74CF3E96%2140563 "https://skydrive.live.com/?cid=43cfa46a74cf3e96#cid=43CFA46A74CF3E96&id=43CFA46A74CF3E96%2140563" diff --git a/content/articles/2013/01/powershell-and-active-directory-reminder/index.md b/content/articles/2013/01/powershell-and-active-directory-reminder/index.md new file mode 100644 index 000000000..7231e71a4 --- /dev/null +++ b/content/articles/2013/01/powershell-and-active-directory-reminder/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-01-28-powershell-and-active-directory-reminder/ +title: "PowerShell and Active Directory\"“reminder" +authors: + - Richard Siddaway +date: "2013-01-28T18:14:58+00:00" +aliases: + - /2013/01/powershell-and-active-directory-reminder/ +--- + +Quick reminder for tomorrow"™s session from the UK PowerShell group. Details from: + +[http://msmvps.com/blogs/richardsiddaway/archive/2013/01/16/uk-powershell-group-29-january-2013.aspx][1] + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2799/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2799/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2799&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: http://msmvps.com/blogs/richardsiddaway/archive/2013/01/16/uk-powershell-group-29-january-2013.aspx "http://msmvps.com/blogs/richardsiddaway/archive/2013/01/16/uk-powershell-group-29-january-2013.aspx" diff --git a/content/articles/2013/01/powershell-wins-award/index.md b/content/articles/2013/01/powershell-wins-award/index.md new file mode 100644 index 000000000..80ee16317 --- /dev/null +++ b/content/articles/2013/01/powershell-wins-award/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-01-16-powershell-wins-award/ +title: PowerShell wins award +authors: + - Richard Siddaway +date: "2013-01-16T18:19:21+00:00" +aliases: + - /2013/01/powershell-wins-award/ +--- + +PowerShell has won one on InfoWorld"™s Technology of the Year awards for 2013 + +See + +for details + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2791/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2791/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2791&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/powershell-workflow-articles/index.md b/content/articles/2013/01/powershell-workflow-articles/index.md new file mode 100644 index 000000000..67463d72f --- /dev/null +++ b/content/articles/2013/01/powershell-workflow-articles/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2013-01-03-powershell-workflow-articles/ +title: PowerShell workflow articles +authors: + - Richard Siddaway +date: "2013-01-03T12:01:51+00:00" +aliases: + - /2013/01/powershell-workflow-articles/ +--- + +I"™ve written a series of articles on PowerShell workflows that are appearing on the Scripting Guy blog. The first two in the series have been published at: + +[http://blogs.technet.com/b/heyscriptingguy/archive/2012/12/26/powershell-workflows-the-basics.aspx][1] + +[http://blogs.technet.com/b/heyscriptingguy/archive/2013/01/02/powershell-workflows-restrictions.aspx][2] + + + +Enjoy + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2778/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2778/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2778&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: http://blogs.technet.com/b/heyscriptingguy/archive/2012/12/26/powershell-workflows-the-basics.aspx "http://blogs.technet.com/b/heyscriptingguy/archive/2012/12/26/powershell-workflows-the-basics.aspx" + [2]: http://blogs.technet.com/b/heyscriptingguy/archive/2013/01/02/powershell-workflows-restrictions.aspx "http://blogs.technet.com/b/heyscriptingguy/archive/2013/01/02/powershell-workflows-restrictions.aspx" diff --git a/content/articles/2013/01/powershell-workflows-now-we-are-six/index.md b/content/articles/2013/01/powershell-workflows-now-we-are-six/index.md new file mode 100644 index 000000000..dc4711f7f --- /dev/null +++ b/content/articles/2013/01/powershell-workflows-now-we-are-six/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2013-01-30-powershell-workflows-now-we-are-six/ +title: "PowerShell workflows\"“now we are six" +authors: + - Richard Siddaway +date: "2013-01-30T19:11:03+00:00" +aliases: + - /2013/01/powershell-workflows-now-we-are-six/ +--- + +The sixth in the series of articles on PowerShell workflows that are appearing on the Scripting Guy blog has been published. + +The articles in the series that have been published are: + + + + + + + + +Look for the next article in one weeks time. + +Until then Enjoy! + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2800/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2800/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2800&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/select-string-confusion/index.md b/content/articles/2013/01/select-string-confusion/index.md new file mode 100644 index 000000000..626cd3cb0 --- /dev/null +++ b/content/articles/2013/01/select-string-confusion/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2013-01-05-select-string-confusion/ +title: Select-String confusion +authors: + - Richard Siddaway +date: "2013-01-05T13:08:59+00:00" +aliases: + - /2013/01/select-string-confusion/ +--- + +I have seen a lot of confusion recently over the use of Select-String. + +One mis-conception is that you need to use Get-Content to pipe the file contents into Select-String. Not so. Select-String will read the file for you. + +If you just want to scan the files in a single folder to find a specific string then Select-String can do the work for you + +Select-String -Path C:\Test\*.txt -Pattern "trial" "“SimpleMatch + +If you need to work through a folder structure add get-ChildItem to the pipeline + +Get-ChildItem -Path C:\Test -Filter *.txt -Recurse | +Select-String -Pattern "trial" "“SimpleMatch + +One line of PowerShell gives you a very powerful way of filtering the files recursively and testing their contents for a given string + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2783/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2783/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2783&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/select-string-finding-the-first-and-last-matches/index.md b/content/articles/2013/01/select-string-finding-the-first-and-last-matches/index.md new file mode 100644 index 000000000..61a870bdf --- /dev/null +++ b/content/articles/2013/01/select-string-finding-the-first-and-last-matches/index.md @@ -0,0 +1,78 @@ +--- +url: /articles/2013-01-09-select-string-finding-the-first-and-last-matches/ +title: "Select-String \"“ finding the first and last matches" +authors: + - Richard Siddaway +date: "2013-01-09T17:55:40+00:00" +aliases: + - /2013/01/select-string-finding-the-first-and-last-matches/ +--- + +Today's question concerns finding the first and last matches in a file + +Sometimes, I need to make two passes at seeking content in this file, once for the first occurrence; and a second grep for obtaining the last occurrence of a phrase. After the second pass, I figure placing the values into an array is the best way, then need to combine first and last values onto one output line {somewhere else}. + +Let's consider the file we used in the first article in the series – + +The file looks like this + +12345ABCD123451234512345 +1234512345ABCD1234512345 +12345ABCD123451234512345 +12345abcd123451234512345 +123451234512345ABCD12345 +12345ABCD123451234512345 +123451234512345ABCD12345 +12345123451234512345ABCD +1234512345ABCD1234512345 + +If you this select-string + +Select-String -Path c:\test\*.txt -Pattern "\A\w{5}ABCD + +you will get multiple matches + +C:\test\fixedcol.txt:1:12345ABCD123451234512345 +C:\test\fixedcol.txt:3:12345ABCD123451234512345 +C:\test\fixedcol.txt:4:12345abcd123451234512345 +C:\test\fixedcol.txt:6:12345ABCD123451234512345 + +So, how can we find the first and last matches – preferably in one pass. + +I think the easiest way is to use the trick from the last article + +$finds = Select-String -Path c:\test\*.txt -Pattern "\A\w{5}ABCD" + +$finds[0]$finds[-1] + +The $finds variable conatins a collection of the MatchInfo objects created by Select-String. The first match will always have the index of 0 and the last can always be referenecd by an index of -1. This information is returned: + +C:\test\fixedcol.txt:1:12345ABCD123451234512345 +C:\test\fixedcol.txt:6:12345ABCD123451234512345 + +If you want this in an object for further processing – try something like this + +Get-ChildItem -Path c:\test -Filter *.txt -Recurse | +foreach { + +$finds = $null +$finds = Select-String -Path $_.Fullname -Pattern "\A\w{5}ABCD" + +if ($finds){ + + $props = [ordered]@{ + Filename = $finds[0].Path + FirstLine = $finds[0].LineNumber + FirstData = $finds[0].Line + LastLine = $finds[-1].LineNumber + LastData = $finds[-1].Line + } + New-Object -TypeName PSObject -Property $props +} +} + +Use Get-ChildItem to find the files. For each of them run Select-String with your pattern. If you get any matches create an object holding the file path and your required properties. In this case I'm taking the first and last line numbers with the match data. + +If you only have a single match in a file you will get the same data in the First\* and Last\* properties as the first and last match are the same. You could put another if statement to control this so the Last* properties aren't populated if you want. + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2787/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2787/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2787&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/select-string-information-on-matching-files/index.md b/content/articles/2013/01/select-string-information-on-matching-files/index.md new file mode 100644 index 000000000..a2589a555 --- /dev/null +++ b/content/articles/2013/01/select-string-information-on-matching-files/index.md @@ -0,0 +1,36 @@ +--- +url: /articles/2013-01-08-select-string-information-on-matching-files/ +title: "Select-String\"“information on matching files" +authors: + - Richard Siddaway +date: "2013-01-08T21:31:36+00:00" +aliases: + - /2013/01/select-string-information-on-matching-files/ +--- + +Following on from yesterday"™s post this is the second question: + +_Since I'm recursively searching thru files to find matching phrases, how can I obtain other directory service information about the matching files file(s) – this is more of a methodology technique question because I realize there are multiple ways of achieving this?_ + +You could do something like this + +foreach ($find in Select-String -Path c:\test\*.txt -Pattern "\A\w{5}ABCD" -List){ +Get-ChildItem -Path $find.Path +} + +Run the Select-String as before but only get the first match in each file. Use foreach to access the match information and use the Path property to feed into Get-ChildItem. + +If you want things to be a bit simpler "“ break it down to: + +$finds = Select-String -Path c:\test\*.txt -Pattern "\A\w{5}ABCD" -List +foreach ($find in $finds){ +Get-ChildItem -Path $find.Path +} + +Alternatively if you want the PowerShell one-liner approach try + +Get-ChildItem -Path (Select-String -Path c:\test\*.txt -Pattern "\A\w{5}ABCD" -List).Path + +Personally I would probably go for the simple approach + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2785/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2785/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2785&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/select-string-keeping-in-context/index.md b/content/articles/2013/01/select-string-keeping-in-context/index.md new file mode 100644 index 000000000..107721480 --- /dev/null +++ b/content/articles/2013/01/select-string-keeping-in-context/index.md @@ -0,0 +1,2240 @@ +--- +url: /articles/2013-01-11-select-string-keeping-in-context/ +title: "Select-string \"“ keeping in context" +authors: + - Richard Siddaway +date: "2013-01-11T19:43:05+00:00" +aliases: + - /2013/01/select-string-keeping-in-context/ +--- + +Today"™s question involves using the Context parameter: + + + *It's probably just me, but I've never gotten the switch '-context 5 **or -context 2, 7′ to work predictably – where 5 lines before and after or 2 +before and 7 after will come out – have you?* + + + Let"™s start by looking at the default behaviour of select-string using the search pattern you"™ve seen previously: + + + PS> Select-String -Path c:\test\*.txt -Pattern "\A\w{5}ABCD" + + + C:\test\fixedcol.txt:1:12345ABCD123451234512345 + + + C:\test\fixedcol.txt:3:12345ABCD123451234512345 + + + C:\test\fixedcol.txt:4:12345abcd123451234512345 + + + C:\test\fixedcol.txt:6:12345ABCD123451234512345 + + + C:\test\fixedcol2.txt:1:12345ABCD123451234512345 + + + As you can see the line which matches your pattern is returned. + +Often this is all that is required but there are occasions when you need to be able to put the line into context that is you need to understand how the line containing you pattern relates to the data around it. + +The is what the context parameter can provide. + + + + If you look at the Select-String help file you will find this information on context. + + + +-Context** * + + + + +Captures the specified number of lines before and after the line with the match. This allows you to view the match in context. + + + + +Required? + +false + + + + +Position? + +named + + + + +Default value + + + + +Accept pipeline input? + +false + + + + +Accept wildcard characters? + +false + + + + + The first thing to note is that the parameter takes an array of integers. The first (or only member of the array) tells PowerShell how many lines to show from before* and *after *the matching line while the second member of the array controls the number of lines that are displayed *after* the matching line. Put simply if you supply one values it controls the number of lines from before and after you match that are displayed but if you specify two values then you explicitly control the lines from before the match with the first value and the lines from after the match with the second. Some examples should make this clear. + + + I"™m going to use a file where we know the contents "“ it makes the explanations easier. If you run this: + + + Get-Process | sort CPU -Descending | Out-File -FilePath c:\test\proc.txt "“Force + + + You get a text file with the processes listed by CPU usage. You can examine the file for a particular process "“ this case let"™s look at Word: + + + PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch + + + + + + C:\test\proc.txt:8: + +360 + +25 + +20368 + +61728 + + + +331 + +41.89 + +4976 WINWORD + + + You know that the file is ordered by CPU usage so what are the processes using similar amounts of CPU to Word? + + + PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context 2 + + + + + + + +C:\test\proc.txt:6: + +653 + +34 + +66640 + +94416 + +286 + +48.77 + +3724 powershell + + + + +C:\test\proc.txt:7: + +1124 + +29 + +13912 + +19336 + +210 + +47.71 + +5868 LiveComm + + + > C:\test\proc.txt:8: + +360 + +25 + +20368 + +61728 + +331 + +41.89 + +4976 WINWORD + + + + +C:\test\proc.txt:9: + +212 + +9 + +2788 + +10956 + +78 + +28.67 + +4112 SynTPEnh + + + + +C:\test\proc.txt:10: + +565 + +35 + +49172 + +82572 + +347 + +12.50 + +5660 WWAHost + + + + + + The matching line is marked with a > symbol. I"™ve made it bold in the above listing for emphasis. + + + If you specify a number such that the file doesn"™t have enough lines to display then only those lines that are available will be displayed for instance + + + Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context 12 + + + This can only display the seven lines prior to the match so that"™s all it does. + + + What about the situation where you only want the three processes that are using more CPU than Word? + + + PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context 3,0 + + + + + + + +C:\test\proc.txt:5: + +1555 + +74 + +30660 + +87176 + +465 + +80.70 + +5308 explorer + + + + +C:\test\proc.txt:6: + +653 + +34 + +66640 + +94416 + +286 + +48.77 + +3724 powershell + + + + +C:\test\proc.txt:7: + +1124 + +29 + +13912 + +19336 + +210 + +47.71 + +5868 LiveComm + + + > C:\test\proc.txt:8: + +360 + +25 + +20368 + +61728 + +331 + +41.89 + +4976 WINWORD + + + This works as well + + + PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context 3,$null + + + + + + + +C:\test\proc.txt:5: + +1555 + +74 + +30660 + +87176 + +465 + +80.70 + +5308 explorer + + + + +C:\test\proc.txt:6: + +653 + +34 + +66640 + +94416 + +286 + +48.77 + +3724 powershell + + + + +C:\test\proc.txt:7: + +1124 + +29 + +13912 + +19336 + +210 + +47.71 + +5868 LiveComm + + + > C:\test\proc.txt:8: + +360 + +25 + +20368 + +61728 + +331 + +41.89 + +4976 WINWORD + + + The one thing you can"™t do is this: + + + PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context 3, + + + >> + + + PowerShell expects something after the comma and will prompt you to supply it. + + + The converse holds true if you want the lines that occur after the match. You can use a 0 as the first element: + + + PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context 0,3 + + + + + + > C:\test\proc.txt:8: + +360 + +25 + +20368 + +61728 + +331 + +41.89 + +4976 WINWORD + + + + +C:\test\proc.txt:9: + +212 + +9 + +2788 + +10956 + +78 + +28.67 + +4112 SynTPEnh + + + + +C:\test\proc.txt:10: + +565 + +35 + +49172 + +82572 + +347 + +12.50 + +5660 WWAHost + + + + +C:\test\proc.txt:11: + +276 + +19 + +6608 + +12628 + +88 + +9.33 + +5252 taskhostex + + + Or $null + + + PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context $null,3 + + + + + + > C:\test\proc.txt:8: + +360 + +25 + +20368 + +61728 + +331 + +41.89 + +4976 WINWORD + + + + +C:\test\proc.txt:9: + +212 + +9 + +2788 + +10956 + +78 + +28.67 + +4112 SynTPEnh + + + + +C:\test\proc.txt:10: + +565 + +35 + +49172 + +82572 + +347 + +12.50 + +5660 WWAHost + + + + +C:\test\proc.txt:11: + +276 + +19 + +6608 + +12628 + +88 + +9.33 + +5252 taskhostex + + + + + + You can"™t leave the first element blank + + + PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context ,3 + + + At line:1 char:76 + + + + Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context ,3 + + + + + +~ + + + Missing argument in parameter list. + + + + ++ CategoryInfo + +: ParserError: (:) [], ParentContainsErrorRecordException + + + + ++ FullyQualifiedErrorId : MissingArgument + + + This leads to the situation where you need to display a different number of lines before and after the match: + + + PS> Select-String -Path c:\test\*.txt -Pattern "Winword" -SimpleMatch -Context 3,2 + + + + + + + +C:\test\proc.txt:5: + +1555 + +74 + +30660 + +87176 + +465 + +80.70 + +5308 explorer + + + + +C:\test\proc.txt:6: + +653 + +34 + +66640 + +94416 + +286 + +48.77 + + + +3724 powershell + + + + +C:\test\proc.txt:7: + +1124 + +29 + +13912 + +19336 + +210 + +47.71 + +5868 LiveComm + + + > C:\test\proc.txt:8: + +360 + +25 + +20368 + +61728 + +331 + +41.89 + +4976 WINWORD + + + + +C:\test\proc.txt:9: + +212 + +9 + +2788 + +10956 + +78 + + + +28.67 + +4112 SynTPEnh + + + + +C:\test\proc.txt:10: + +565 + +35 + +49172 + +82572 + +347 + +12.50 + +5660 WWAHost + + + What happens if you have multiple matches and their contexts overlap? + + + PS> Select-String -Path c:\test\*.txt -Pattern "PowerShell" -SimpleMatch + + + + + + C:\test\proc.txt:9: + +669 + +34 + +67544 + +62228 + +286 + +54.99 + +3724 powershell + + + C:\test\proc.txt:12: + +473 + +23 + +69112 + +86616 + +366 + +11.73 + +1688 powershell_ise + + + C:\test\proc.txt:19: + +346 + +13 + +39576 + +44540 + +207 + +3.15 + +280 PowerShell + + + This file shows matches on lines 9, 12 and 19 so let"™s try this + + + PS> Select-String -Path c:\test\*.txt -Pattern "PowerShell" -SimpleMatch -Context 4,5 + + + + + + + +C:\test\proc.txt:5: + +1840 + +91 + +35836 + +75652 + +545 + +142.49 + +5308 explorer + + + + +C:\test\proc.txt:6: + +618 + +23 + +68524 + +28788 + +194 + +108.84 + +5072 SkyDrive + + + + +C:\test\proc.txt:7: + +1377 + +29 + +15668 + +23440 + +210 + +95.07 + +5868 LiveComm + + + + +C:\test\proc.txt:8: + +211 + +9 + +2792 + +4516 + +78 + +59.98 + +4112 SynTPEnh + + + **> C:\test\proc.txt:9: + +669 + +34 + +67544 + +62228 + +286 + +54.99 + +3724 powershell** + + + + +C:\test\proc.txt:10: + +560 + +35 + +53480 + +88760 + +370 + +22.95 + +2656 WWAHost + + + + +C:\test\proc.txt:11: + +240 + +8 + +1952 + +2340 + +71 + +12.32 + +5580 TabTip + + + **> C:\test\proc.txt:12: + +473 + +23 + +69112 + +86616 + +366 + +11.73 + +1688 powershell_ise** + + + + +C:\test\proc.txt:13: + +254 + +9 + +4684 + +9940 + +86 + +11.31 + + + +6136 RuntimeBroker + + + + +C:\test\proc.txt:14: + +285 + +14 + +4116 + +4724 + +84 + +10.19 + +5252 taskhostex + + + + +C:\test\proc.txt:15: + +82 + +5 + +2008 + +6148 + +55 + +7.52 + +2416 conhost + + + + +C:\test\proc.txt:16: + +305 + +14 + +17608 + +5088 + +184 + +5.19 + +404 IAStorIcon + + + + +C:\test\proc.txt:17: + +337 + +8 + +2180 + +536 + +76 + +4.79 + +376 InputPersonalization + + + + +C:\test\proc.txt:18: + +409 + +12 + +4416 + +5464 + +79 + +4.26 + +5276 taskhost + + + **> C:\test\proc.txt:19: + +346 + + + +13 + +39576 + +44540 + +207 + +3.15 + +280 powershell** + + + + +C:\test\proc.txt:20: + +125 + +5 + +2820 + +744 + +70 + +2.61 + +908 splwow64 + + + + +C:\test\proc.txt:21: + +347 + +13 + +12180 + +804 + +183 + +2.40 + +4788 PopUp_DM + + + + +C:\test\proc.txt:22: + +335 + +10 + +2576 + +1756 + +83 + +2.20 + +4636 AdobeARM + + + + +C:\test\proc.txt:23: + +249 + +21 + +6628 + +540 + +129 + +1.44 + +5220 SRSPremiumPanel + + + + +C:\test\proc.txt:24: + +387 + +11 + +3436 + +12280 + +83 + +0.94 + +3828 WSHost + + + I"™ve highlighted the lines that actually match. + + + Starting with the first match you get 4 lines before it as requested. There should be 5 lines after the match BUT the next match is only 3 lines on and you asked for 5 lines after that. The lines before the last match overlap the lines after the second match. The lines after the last match are shown as requested. + + + At first glance it looks like the command hasn"™t worked but what seems to be happening is that only unique lines are displayed. + + + I looked at the individual matches + + + $finds = Select-String -Path c:\test\*.txt -Pattern "PowerShell" -SimpleMatch -Context 4,5 + + + for ($i=0; $i -le $finds.count; $i++){$finds[$i]; "###"*8} + + + and received this output (I"™ve split the display so you can see what is produced. + + + First match: + + + + +C:\test\proc.txt:5: + +1840 + +91 + +35836 + +75652 + +545 + +142.49 + +5308 explorer + + + + +C:\test\proc.txt:6: + +618 + +23 + +68524 + +28788 + +194 + +108.84 + +5072 SkyDrive + + + + +C:\test\proc.txt:7: + +1377 + +29 + +15668 + +23440 + +210 + +95.07 + +5868 LiveComm + + + + +C:\test\proc.txt:8: + +211 + +9 + +2792 + +4516 + +78 + +59.98 + +4112 SynTPEnh + + + **> C:\test\proc.txt:9: + +669 + +34 + +67544 + +62228 + +286 + +54.99 + +3724 powershell** + + + + +C:\test\proc.txt:10: + +560 + +35 + +53480 + +88760 + +370 + +22.95 + +2656 WWAHost + + + + +C:\test\proc.txt:11: + +240 + +8 + +1952 + +2340 + +71 + +12.32 + +5580 TabTip + + + ######################## + + + Correct number before but restricted output after + + + Second match: + + + **> C:\test\proc.txt:12: + +473 + +23 + +69112 + +86616 + +366 + +11.73 + +1688 powershell_ise** + + + + +C:\test\proc.txt:13: + +254 + +9 + +4684 + +9940 + +86 + +11.31 + +6136 RuntimeBroker + + + + +C:\test\proc.txt:14: + +285 + +14 + +4116 + +4724 + + + +84 + +10.19 + +5252 taskhostex + + + + +C:\test\proc.txt:15: + +82 + +5 + +2008 + +6148 + +55 + +7.52 + +2416 conhost + + + + +C:\test\proc.txt:16: + +305 + +14 + +17608 + +5088 + +184 + +5.19 + +404 IAStorIcon + + + + +C:\test\proc.txt:17: + +337 + +8 + +2180 + +536 + +76 + +4.79 + +376 InputPersonalization + + + ######################## + + + Nothing before and correct output after the match + + + Last match: + + + + +C:\test\proc.txt:18: + +409 + +12 + +4416 + +5464 + +79 + +4.26 + +5276 taskhost + + + **> C:\test\proc.txt:19: + + + +346 + +13 + +39576 + +44540 + +207 + +3.15 + +280 powershell** + + + + +C:\test\proc.txt:20: + +125 + +5 + +2820 + +744 + +70 + +2.61 + +908 splwow64 + + + + +C:\test\proc.txt:21: + +347 + +13 + +12180 + +804 + +183 + +2.40 + +4788 PopUp_DM + + + + +C:\test\proc.txt:22: + +335 + +10 + +2576 + +1756 + +83 + +2.20 + +4636 AdobeARM + + + + +C:\test\proc.txt:23: + +249 + +21 + +6628 + +540 + +129 + +1.44 + +5220 SRSPremiumPanel + + + + +C:\test\proc.txt:24: + +387 + +11 + +3436 + +12280 + +83 + +0.94 + +3828 WSHost + + + ######################## + + + One line before the match and correct number after the match. + + + This confirms that if a line has appeared in a previous match you won"™t see it again. Is there a way to see the full context for each match? Unfortunately, Select-String doesn"™t appear to provide that capability directly. A little bit of working with the output should enable this. + + + Select-String -Path c:\test\*.txt -Pattern "PowerShell" -SimpleMatch -Context 4,5 | + + + foreach { + + + #matching line + + + $padlength = (" {0}:{1:00}: " -f $_.Path, $_.LineNumber).Length + + + $pad = " "*$padlength + + + + + + $_.Context.PreContext | foreach {$_.Trim().Insert(0,$pad)} + + + "" + + + " {0}:{1:00}: {2}" -f $_.Path, $_.LineNumber, ($_.Line).Trim() + + + "" + + + $_.Context.PostContext | foreach {$_.Trim().Insert(0,$pad)} + + + "" + + + "" + + + } + + + + + + Run the select-string as before. For each of the matches find the length of the formatted path and line number and create a blank string of that length. + + + If you examine the MatchInfo type that Select-String produces you will see a Property called Context. If you examine that you will see it contains the collection of data for the pre and post context. (There are also display versions of the context). + + + + For each line in the pre-context insert the pad characters at the beginning. Display the formatted match line and then display the post-context data. + +I"™ve inserted some blank lines to help format the display + + + You will get output like this: + + + + + + +1840 + +91 + +35836 + +75652 + +545 + +142.49 + +5308 explorer + + + + +618 + +23 + +68524 + +28788 + +194 + +108.84 + +5072 SkyDrive + + + + +1377 + +29 + +15668 + +23440 + +210 + +95.07 + +5868 LiveComm + + + + +211 + +9 + +2792 + +4516 + +78 + +59.98 + +4112 SynTPEnh + + + + + + + +C:\test\proc.txt:09: 669 + +34 + +67544 + +62228 + +286 + +54.99 + +3724 powershell + + + + + + + +560 + +35 + +53480 + +88760 + +370 + +22.95 + +2656 WWAHost + + + + +240 + +8 + +1952 + +2340 + +71 + +12.32 + +5580 TabTip + + + + +473 + +23 + +69112 + +86616 + +366 + +11.73 + +1688 powershell_ise + + + + +254 + +9 + +4684 + +9940 + +86 + +11.31 + +6136 RuntimeBroker + + + + +285 + +14 + +4116 + +4724 + +84 + +10.19 + +5252 taskhostex + + + + + + + + + + +211 + +9 + +2792 + +4516 + +78 + +59.98 + +4112 SynTPEnh + + + + +669 + +34 + +67544 + +62228 + +286 + +54.99 + +3724 powershell + + + + +560 + +35 + +53480 + +88760 + +370 + +22.95 + +2656 WWAHost + + + + +240 + +8 + +1952 + +2340 + +71 + +12.32 + +5580 TabTip + + + + + + + +C:\test\proc.txt:12: 473 + +23 + +69112 + +86616 + +366 + +11.73 + +1688 powershell_ise + + + + + + + +254 + +9 + +4684 + +9940 + +86 + +11.31 + +6136 RuntimeBroker + + + + +285 + +14 + +4116 + +4724 + +84 + +10.19 + +5252 taskhostex + + + + +82 + +5 + +2008 + +6148 + +55 + +7.52 + +2416 conhost + + + + +305 + +14 + +17608 + +5088 + +184 + +5.19 + +404 IAStorIcon + + + + +337 + +8 + +2180 + +536 + +76 + +4.79 + +376 InputPersonalization + + + + + + + + + + +82 + +5 + +2008 + +6148 + +55 + +7.52 + +2416 conhost + + + + +305 + +14 + +17608 + +5088 + +184 + +5.19 + +404 IAStorIcon + + + + +337 + +8 + +2180 + +536 + +76 + +4.79 + +376 InputPersonalization + + + + +409 + +12 + +4416 + + + +5464 + +79 + +4.26 + +5276 taskhost + + + + + + + +C:\test\proc.txt:19: 346 + +13 + +39576 + +44540 + +207 + +3.15 + +280 powershell + + + + + + + +125 + +5 + +2820 + +744 + +70 + +2.61 + +908 splwow64 + + + + +347 + +13 + +12180 + +804 + +183 + +2.40 + +4788 PopUp_DM + + + + +335 + +10 + +2576 + +1756 + +83 + +2.20 + +4636 AdobeARM + + + + +249 + +21 + +6628 + +540 + +129 + +1.44 + +5220 SRSPremiumPanel + + + + + + +387 + +11 + +3436 + +12280 + +83 + +0.94 + +3828 WSHost + + + Not the greatest of displays but you do get to see the data. It should be possible to do this through PowerShell"™s formatting system but that"™s a post for another day. + + + Bottom line "“ the context parameter only displays unique lines so you won"™t necessarily get what you expect if there are multiple matches in a file. + + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2788/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2788/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2788&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/select-string-scenarios-fixed-columns/index.md b/content/articles/2013/01/select-string-scenarios-fixed-columns/index.md new file mode 100644 index 000000000..1522a265d --- /dev/null +++ b/content/articles/2013/01/select-string-scenarios-fixed-columns/index.md @@ -0,0 +1,72 @@ +--- +url: /articles/2013-01-07-select-string-scenarios-fixed-columns/ +title: "Select-String scenarios \"“ fixed columns" +authors: + - Richard Siddaway +date: "2013-01-07T22:43:53+00:00" +aliases: + - /2013/01/select-string-scenarios-fixed-columns/ +--- + +I had some questions come in after mu recent post regarding select-string. I"™ll answer them as a series of posts. First off: + +_I'm recursively searching thru many files, and want to pull out specific data in 'fixed column' positions from the line(s) that match the phrase I'm seeking, i.e. position 10 thru 15 of the line or position 6 thru the end of the line (which might be unknown). +What is your preferred method for handling this situation?_ + +I started by creating a file + +12345ABCD123451234512345 +1234512345ABCD1234512345 +12345ABCD123451234512345 +12345abcd123451234512345 +123451234512345ABCD12345 +12345ABCD123451234512345 +123451234512345ABCD12345 +12345123451234512345ABCD +1234512345ABCD1234512345 + +I want to pick out the string ABCD but ONLY when its in columns6-9. A quick inspection shows I should get four lines returned. + +If you go with a simple match you get all lines returned + +PS> Select-String -Path c:\test\*.txt -Pattern "ABCD" -SimpleMatch + +C:\test\fxedcol.txt:1:12345ABCD123451234512345 +C:\test\fxedcol.txt:2:1234512345ABCD1234512345 +C:\test\fxedcol.txt:3:12345ABCD123451234512345 +C:\test\fxedcol.txt:4:12345abcd123451234512345 +C:\test\fxedcol.txt:5:123451234512345ABCD12345 +C:\test\fxedcol.txt:6:12345ABCD123451234512345 +C:\test\fxedcol.txt:7:123451234512345ABCD12345 +C:\test\fxedcol.txt:8:12345123451234512345ABCD +C:\test\fxedcol.txt:9:1234512345ABCD1234512345 + +Notice the match is case INSENSITIVE + +This means we get into the world of regular expressions "“ joy! + +This will work + +Select-String -Path c:\test\*.txt -Pattern "\A.{5}ABCD" + +The regular expression means match any 5 characters followed by ABCD starting at the beginning of the string. + +Alternatively you could use + +Select-String -Path c:\test\*.txt -Pattern "\A\w{5}ABCD" + +This is the same except its accepting any word character (letter, digit, math symbol and punctuation) + +These two searches are case INSENSITIVE + +if you need case sensitivity then compare + +Select-String -Path c:\test\*.txt -Pattern "\A\w{5}ABCD" -CaseSensitive +Select-String -Path c:\test\*.txt -Pattern "\A\w{5}abcd" -CaseSensitive + +or + +Select-String -Path c:\test\*.txt -Pattern "\A.{5}ABCD" -CaseSensitive +Select-String -Path c:\test\*.txt -Pattern "\A.{5}abcd" -CaseSensitive + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2784/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2784/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2784&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/starting-virtual-machines-for-wsus/index.md b/content/articles/2013/01/starting-virtual-machines-for-wsus/index.md new file mode 100644 index 000000000..0fed7d99f --- /dev/null +++ b/content/articles/2013/01/starting-virtual-machines-for-wsus/index.md @@ -0,0 +1,114 @@ +--- +url: /articles/2013-01-17-starting-virtual-machines-for-wsus/ +title: Starting virtual machines for WSUS +authors: + - Richard Siddaway +date: "2013-01-17T19:50:54+00:00" +aliases: + - /2013/01/starting-virtual-machines-for-wsus/ +--- + +My test environment usually has a dozen or so machines at any one time. Some of these are short lived and used for a particular piece of testing "“ others are kept for years. I decided that I wanted to keep up to date on the patching of these virtual machines so installed WSUS on a Windows 2012 box. + +One issue is that if a VM isn"™t started for 10 days WSUS starts complaining that it hasn"™t been contacted and if you run the WSUS clean up wizard the non-reporting servers may be removed. Checking the WSUS console for which machines haven"™t sync"™d recently is a chore. + +In Windows 2012 both WSUS and Hyper-V come with a PowerShell module. This means I can do this: + + +`$date + += + +( + +Get-Date + +) + +. + +AddDays + +( + +-10 + +) + + +Get-WsusComputer + +-ToLastSyncTime + +$date + +| + + +sort + +LastSyncTime + +| + + +select + +-First + +4 + +| + + +foreach + +{ + + +$computer + += + +( + +$_ + +. + +FullDomainName + +-split + +"\." + +) + +[ + + +] + + +Start-VM + +-Name + +$computer + +-ComputerName + +Server02 + +-Passthru + + +} + +`I"™m using the WSUS server as my admin box but if you were accessing a remote WSUS machine change the code to + +Get-WsusServer -Name w12sus -PortNumber 8530 | Get-WsusComputer "“ToLastSyncTime $date | + +I sorted the computers WSUS knows about by date "“ picked the last 4 to sync so I didn"™t overwhelm the Hyper-V host and started them up. Only trick is to get the computer name out of the FullDomainName property. + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2797/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2797/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2797&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/the-2013-winter-scripting-camp/index.md b/content/articles/2013/01/the-2013-winter-scripting-camp/index.md new file mode 100644 index 000000000..7971ded49 --- /dev/null +++ b/content/articles/2013/01/the-2013-winter-scripting-camp/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-01-28-the-2013-winter-scripting-camp/ +title: The 2013 Winter Scripting Camp +authors: + - Don Jones +date: "2013-01-28T20:56:00+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/01/the-2013-winter-scripting-camp/ +--- + +We'll be announcing Winter Scripting Camp the first week of February. This is a special invite-only event that will be open to subscribers of the PowerShell.org TechLetter. It will work just like the Scripting Games, but will feature only a couple of events and will not include any prizes. We will, however, announce the top scorers. +Scripting Camp is primarily an opportunity for us to audition our new platform, to kick the tires, and make sure everything's ready for the official Games, which will kick off in April at the [PowerShell Summit 2013 North America][2]. +If you're interested in Camping with us, please sign up for the TechLetter this week (prior to Feb 1st). We'll be sending out a special notification to the TechLetter subscriber list with sign-up instructions. + + [2]: /summit/ diff --git a/content/articles/2013/01/uk-powershell-group-29-january-2013/index.md b/content/articles/2013/01/uk-powershell-group-29-january-2013/index.md new file mode 100644 index 000000000..ec3aae863 --- /dev/null +++ b/content/articles/2013/01/uk-powershell-group-29-january-2013/index.md @@ -0,0 +1,66 @@ +--- +url: /articles/2013-01-16-uk-powershell-group-29-january-2013/ +title: "UK PowerShell group \"“ 29 January 2013" +authors: + - Richard Siddaway +date: "2013-01-16T20:28:38+00:00" +aliases: + - /2013/01/uk-powershell-group-29-january-2013/ +--- + +`**When: Tuesday, Jan 29, 2013 7:30 PM (GMT) + + + + +Where: virtual + + + + + *~*~*~*~*~*~*~*~*~* + + +`Active Directory is one of the commonest automation targets for administrators. This session will covert the basics of automating your AD admin – scripts and the Microsoft cmdlets. The new features in PowerShell for Windows 2012 AD will also be covered + + + + + + + Notes**`Richard Siddaway has invited you to attend an online meeting using Live Meeting.**[Join the meeting.](https://www.livemeeting.com/cc/usergroups/join?id=RCRWH3&role=attend&pw=5p7%24%7DS_%21h)****Audio Information****Computer Audio****To use computer audio, you need speakers and microphone, or a headset. +First Time Users:****To save time before the meeting, [check your system ](http://go.microsoft.com/fwlink/?LinkId=90703)to make sure it is ready to use Microsoft Office Live Meeting. +Troubleshooting****Unable to join the meeting? Follow these steps: + + + - + Copy this address and paste it into your web browser: +[https://www.livemeeting.com/cc/usergroups/join](https://www.livemeeting.com/cc/usergroups/join) + + Copy and paste the required information: +Meeting ID: RCRWH3 +Entry Code: 5p7$}S_!h +Location: [https://www.livemeeting.com/cc/usergroups](https://www.livemeeting.com/cc/usergroups) + + + + + + + + If you still cannot enter the meeting, [contact support](http://r.office.microsoft.com/r/rlidLiveMeeting?p1=12&p2=en_US&p3=LMInfo&p4=support) + + + + + + + Notice** +Microsoft Office Live Meeting can be used to record meetings. By participating in this meeting, you agree that your communications may be monitored or recorded at any time during the meeting. + + + + + + + [![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2792/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2792/) ![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2792&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/updating-help-on-powershell-v3/index.md b/content/articles/2013/01/updating-help-on-powershell-v3/index.md new file mode 100644 index 000000000..5e78e00c2 --- /dev/null +++ b/content/articles/2013/01/updating-help-on-powershell-v3/index.md @@ -0,0 +1,131 @@ +--- +url: /articles/2013-01-15-updating-help-on-powershell-v3/ +title: Updating Help on PowerShell v3 +authors: + - Richard Siddaway +date: "2013-01-15T21:37:41+00:00" +aliases: + - /2013/01/updating-help-on-powershell-v3/ +--- + +One of the new features in PowerShell v3 is the capability to update the help files. In fact you have to do this because PowerShell v3 doesn"™t ship with any help files. Since Windows 8 RTM"™d there have been a succession of new help files released. + +I discovered one of my netbooks didn"™t have the latest version of the help files installed. So I needed to update them. This got me thinking that it would be better if the machine did this for me. + +I could think of two easy ways to do this "“ a scheduled job or a scheduled task. I chose the scheduled task because the ScheduledTasks module is available on the version of PowerShell v3 for Windows 7 and other legacy versions of Windows. The PSScheduledJob module is only available on Windows 8/2012 as it"™s based on WMI classes not present on older versions of Windows. + + +`$actionscript + += + +'-NonInteractive -WindowStyle Normal -NoLogo -NoProfile -NoExit -Command "& {Update-Help -UICulture en-US -Force}"' + + +$pstart + += + +"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" + + +#$days = "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" + + +$days + += + +'Wednesday' + + +Get-ScheduledTask + +-TaskName + +UpdatePSHelp + +| + +Unregister-ScheduledTask + +-Confirm: + +$false + + +$act + += + +New-ScheduledTaskAction + +-Execute + +$pstart + +-Argument + +$actionscript + + +$trig + += + +New-ScheduledTaskTrigger + +-Weekly + +-WeeksInterval + +4 + +-At + +19:00 + +-DaysOfWeek + +$days + + +Register-ScheduledTask + +-TaskName + +UpdatePSHelp + +-Action + +$act + +-Trigger + +$trig + +-RunLevel + +Highest + +`Start by creating the command strings to start PowerShell and the arguments you pass to it. I left it as a visible PowerShell window that stays opn so I can see the results. The PowerShell command + +Update-Help -UICulture en-US "“Force + +performs the actual update. You will need to change the culture to match yours if you aren"™t using English. You can find it by using + +Get-UICulture + +I"™m only going to run this on Wednesdays . + +Any old copies of the task are cleaned out and new task actions (to execute PowerShell) and trigger to define when it runs are created. The last line registers the task. + +You can view the task + +Get-ScheduledTask -TaskName UpdatePSHelp + +or start the task manually + +Start-ScheduledTask -TaskName UpdatePSHelp + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2789/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2789/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2789&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/windows-powershell-v3-language-specification-posted/index.md b/content/articles/2013/01/windows-powershell-v3-language-specification-posted/index.md new file mode 100644 index 000000000..0b0d02027 --- /dev/null +++ b/content/articles/2013/01/windows-powershell-v3-language-specification-posted/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-01-11-windows-powershell-v3-language-specification-posted/ +title: Windows PowerShell V3 Language Specification Posted +authors: + - Keith Hill +date: "2013-01-11T15:52:14+00:00" +aliases: + - /2013/01/windows-powershell-v3-language-specification-posted/ +--- + +You can download it [here][1]. + +[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/275/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/275/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=275&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) + + [1]: http://www.microsoft.com/en-us/download/details.aspx?id=36389 diff --git a/content/articles/2013/01/workflow-article-3/index.md b/content/articles/2013/01/workflow-article-3/index.md new file mode 100644 index 000000000..6e53ff653 --- /dev/null +++ b/content/articles/2013/01/workflow-article-3/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2013-01-09-workflow-article-3/ +title: Workflow article 3 +authors: + - Richard Siddaway +date: "2013-01-09T17:19:28+00:00" +aliases: + - /2013/01/workflow-article-3/ +--- + +The next in the series of articles on PowerShell workflows that are appearing on the Scripting Guy blog has been published. + +The articles in the series that have been published are: + + + + + +Look for the next article in one weeks time. + +Until then Enjoy! + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2786/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2786/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2786&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/workflow-article-4/index.md b/content/articles/2013/01/workflow-article-4/index.md new file mode 100644 index 000000000..e98507858 --- /dev/null +++ b/content/articles/2013/01/workflow-article-4/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2013-01-16-workflow-article-4/ +title: Workflow article 4 +authors: + - Richard Siddaway +date: "2013-01-16T17:03:48+00:00" +aliases: + - /2013/01/workflow-article-4/ +--- + +The next in the series of articles on PowerShell workflows that are appearing on the Scripting Guy blog has been published. + +The articles in the series that have been published are: + + + + + + +Look for the next article in one weeks time. + +Until then Enjoy! + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2790/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2790/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2790&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/01/writing-10961-trademarks/index.md b/content/articles/2013/01/writing-10961-trademarks/index.md new file mode 100644 index 000000000..527b281e1 --- /dev/null +++ b/content/articles/2013/01/writing-10961-trademarks/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2013-01-04-writing-10961-trademarks/ +title: "Writing 10961: Trademarks" +authors: + - Don Jones +date: "2013-01-04T16:09:02+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/01/writing-10961-trademarks/ +--- + +Microsoft's a big company, and that makes it a big target for lawsuits. We all know that. But what doesn't always sink in is how careful the company has to be. +For example, in Microsoft Official Curriculum course 10961, Automating Administration with Windows PowerShell 3.0, I have to type _Windows PowerShell_ every single time. I've actually been using "the shell" a lot, just to break things up a bit. We all casually refer to the shell as _PowerShell,_ but Microsoft never does. Their trademark is on _Windows_ PowerShell, and believe it or not someone has a trademark on _PowerShell._ I think it's a sporting equipment manufacturer. +As I'm writing the course, I started using _Windows PowerShell_ on first reference, and then naturally - for me, at least - used just _PowerShell_ from then on. Nope. Had to go fix 'em all. +Weird, huh? +I mean, technically... legally... you don't trademark an entire word. You trademark it for use in a particular field. So it's theoretically possible for Microsoft to own the trademark _PowerShell_ in the world of computer software, and another company to own the same trademark for making backpacks or ski boots or whatever. But... I get it. You gotta be careful, and it's easier just to not overlap with someone else's trademark. +Maybe they should have named it FrabulouShellâ„¢ instead, just to be really sure. diff --git a/content/articles/2013/01/writing-10961a-the-damn-variables/index.md b/content/articles/2013/01/writing-10961a-the-damn-variables/index.md new file mode 100644 index 000000000..f7f1b540e --- /dev/null +++ b/content/articles/2013/01/writing-10961a-the-damn-variables/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2013-01-10-writing-10961a-the-damn-variables/ +title: "Writing 10961A: The Damn Variables" +authors: + - Don Jones +date: "2013-01-10T17:51:07+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/01/writing-10961a-the-damn-variables/ +--- + +When I wrote Microsoft course 10325A, their original 5-day Windows PowerShell course, I saved variables until Module 11. My thought at the time was to focus on teaching just what students needed for what they were about to do - and no more. "Just in time learning" can be effective, because it lets you immediately experiment with whatever you've just learned, and helps minimize the need to store up concepts for later use. I'd also had a lot of class experiences where bringing up variables too soon engaged a defensive mechanism in some students: "I'm not a programmer, variables are programming, and I'm shutting down right now." +The biggest piece of MCT feedback from 10325A was, "don't do that." Trainers told me they were often teaching module 11 much sooner. Jeff Hicks had what I think is the best explanation for why: Without variables, you're locked into the one-liner approach in PowerShell. While one-liners are _neat,_ and effective, they aren't always easy to read or to mentally de-construct. Using variables earlier in the course, Jeff argued, let you break things down into smaller logical chunks. +Now, one thing I've had to accept in writing 10961A is that I can't please everyone. The feedback on 10325A is incredibly contradictory. Some MCTs want more programming, others want none at all. Some want classes to run 9am-4pm; others want 8am-6pm. Some want less content on the slides (actually, most wanted that). So what I decided to do is try and provide the material to accommodate what it felt like everyone was asking for, and rely on MCT's ability to mix things up as needed for their classes. +(As an aside, I do think some MCTs jump into the "programming" aspect of PowerShell too quickly. It's fine if you've got a room of people with programming experience, but it keeps students from learning some valuable fundamentals and turns the class into a "scripting" class awfully quickly. I'm not sure every MCT has done a really thorough cognitive analysis of their class results to determine if the programming-first approach is best; my experience with _Month of Lunches_ readers suggest it isn't.) +But I still didn't want to do the full deep-dive on variables super-early in the course. So here's what I think I'm doing: early in the course, you'll be exposed to variables, in a very simplistic sense. They're described as a named place to store objects, and used to de-construct a complex one-liner into a multi-line series of logical steps. Early in the course, I don't go into naming rules, the double quotes tricks, or anything else. You learn exactly enough about variables for the task at hand - and no more. +In module 7, which is right before the module where you turn a command-line into a parameterized script, I cover variables more formally. I cover their rules, usage, double quotes, all that stuff. So you learn a wee bit about variables early, and then learn the full details later - _just_ before you need to use variables more seriously in a script. So, keeping with the just-in-time learning. +The variables material is broken out into its own lesson in module 7, so an MCT hell-bent on teaching everything about variables right up-front can do so.While the feedback from 10325A suggests that MCTs think every course should be designed for the way _they_ teach, I'm not sure they all realize how _differently_ they all teach. The best I can do is provide the material in standalone chunks that MCTs can rearrange as needed. After all, the whole point of having a live instructor, as opposed to a recording, is the instructor's ability to teach to your specific needs. So MCTs will have to be happy rearranging the material a bit as-needed; my outline is the _recommnded_ approach that will work best across the broadest array of students, but it isn't perfect for _everyone._ Nothing could be. +As a point of reference, 10961A doesn't dive into scripting as deeply as 10325A did. PowerShell 3.0 has enough new, extra stuff that a 5-day course doesn't allow for deep programming topics. You do take a command and walk it through to being a script module, so you _see_ the range of scripting options, but you don't _practice_ them in depth. It's inch-deep, mile-wide coverage of scripting, as opposed to something deeper and more focused. I'm hoping Microsoft can find budget for a full-on "scripting/toolmaking" class in the future, but 10961A ain't it. +So... what do you think of this approach? diff --git a/content/articles/2013/02/_index.md b/content/articles/2013/02/_index.md new file mode 100644 index 000000000..abb1dcf9c --- /dev/null +++ b/content/articles/2013/02/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from February 2013" +description: "PowerShell.org Articles published in February 2013." +--- diff --git a/content/articles/2013/02/advanced-functions-webcast/index.md b/content/articles/2013/02/advanced-functions-webcast/index.md new file mode 100644 index 000000000..8ee7abdbc --- /dev/null +++ b/content/articles/2013/02/advanced-functions-webcast/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-02-25-advanced-functions-webcast/ +title: Advanced Functions webcast +authors: + - Richard Siddaway +date: "2013-02-25T19:30:24+00:00" +aliases: + - /2013/02/advanced-functions-webcast/ +--- + +Quick reminder that the UK PowerShell group is hosting a Live Meeting webcast on PowerShell Advanced functions tomorrow "“ details from + +[http://richardspowershellblog.wordpress.com/2013/02/18/uk-powershell-groupadvanced-functions/][1] + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2810/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2810/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2810&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: http://richardspowershellblog.wordpress.com/2013/02/18/uk-powershell-groupadvanced-functions/ "http://richardspowershellblog.wordpress.com/2013/02/18/uk-powershell-groupadvanced-functions/" diff --git a/content/articles/2013/02/book-offer-ad-management-in-a-month-of-lunches/index.md b/content/articles/2013/02/book-offer-ad-management-in-a-month-of-lunches/index.md new file mode 100644 index 000000000..b3b8342d8 --- /dev/null +++ b/content/articles/2013/02/book-offer-ad-management-in-a-month-of-lunches/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-02-27-book-offer-ad-management-in-a-month-of-lunches/ +title: "Book offer\"“AD Management in a Month of Lunches" +authors: + - Richard Siddaway +date: "2013-02-27T20:24:14+00:00" +aliases: + - /2013/02/book-offer-ad-management-in-a-month-of-lunches/ +--- + +AD Management in a month of lunches is today"™s deal of the day from Manning "“ [www.manning.com][1] + +The get 50% off today using code **dotd0227cc. The offer is good for today only** + +The same code can be used for 50% off PowerShell in Practice + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2813/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2813/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2813&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: http://www.manning.com/ diff --git a/content/articles/2013/02/cim-cmdlets-and-remote-access/index.md b/content/articles/2013/02/cim-cmdlets-and-remote-access/index.md new file mode 100644 index 000000000..d9a193fca --- /dev/null +++ b/content/articles/2013/02/cim-cmdlets-and-remote-access/index.md @@ -0,0 +1,39 @@ +--- +url: /articles/2013-02-18-cim-cmdlets-and-remote-access/ +title: CIM cmdlets and remote access +authors: + - Richard Siddaway +date: "2013-02-18T22:33:04+00:00" +aliases: + - /2013/02/cim-cmdlets-and-remote-access/ +--- + +When you used the WMI cmdlets + +Get-WmiObject -Class Win32_logicalDisk -ComputerName RSLAPTOP01 + +You were using DCOM to access the remote machine. Even if you accessed the local machine you were using DCOM. + +This changes in PowerShell v3 when using the CIM cmdlets. + +If you don"™t use a computername + +Get-CimInstance -ClassName Win32_logicalDisk + +You use DCOM to access the local machine. + +If you use "“computername + +Get-CimInstance -ClassName Win32_logicalDisk -ComputerName RSLAPTOP01 + +**You use WSMAN to access the machine named "“ irrespective of if it is local or remote** + +A further complication is that the named machine has to be running WSMAN 3.0 i.e. PowerShell v3 is installed. + +If you try to access a PowerShell v2 (WSMAN 2.0) machine with the CIM cmdlets you will get an error. The way round that is to create a CIMsession using DCOM as the transport protocol. If you want to learn how to do that you"™ll have to wait until after my session at the PowerShell Summit in April or buy a copy of PowerShell and WMI from [www.manning.com/siddaway2][1] + +I saw a number of people using the CIM cmdlets in the scripting games without thought to connectivity issues like this. + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2806/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2806/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2806&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: http://www.manning.com/siddaway2 diff --git a/content/articles/2013/02/creating-a-windows-2012-domain-controller/index.md b/content/articles/2013/02/creating-a-windows-2012-domain-controller/index.md new file mode 100644 index 000000000..a15c4b4dd --- /dev/null +++ b/content/articles/2013/02/creating-a-windows-2012-domain-controller/index.md @@ -0,0 +1,57 @@ +--- +url: /articles/2013-02-21-creating-a-windows-2012-domain-controller/ +title: Creating a Windows 2012 Domain Controller +authors: + - Richard Siddaway +date: "2013-02-21T19:50:09+00:00" +aliases: + - /2013/02/creating-a-windows-2012-domain-controller/ +--- + +I decided to replace one of the DCs in my test environment with a Windows 2012 Server Core machine. Server Core has really come of age in Windows 2012 "“ its easy to configure. + +I"™ve covered configuring a server before but to recap: + + * Rename the machine "“ use Rename-Computer + * Set Network "“ use Set-NetIPInterface (address) & et-DnsClientServerAddress( dns address) & Rename-netAdapter + * Join to domain "“ use Add-Computer + +To create the domain controller use the ADDSDeployment module. You"™ll only find this on servers where you"™ve installed the AD Domain Services feature which you do like this: + +Install-WindowsFeature -Name AD-Domain-Services -Confirm:$false + + + +Import the module + +Import-Module ADDSDeployment +Get-Command -Module ADDSDeployment + +Create the Domain Controller. This is the equivalent of running DCPROMO in earlier versions. Even better you don"™t need the answer file. Everything is a parameter on the cmdlet. + +Install-ADDSDomain Controller -DomainName "manticore.org" -InstallDns -Credential (Get-Credential manticore\richard) -ApplicationPartitionsToReplicate * + +Thats it! Just wait for replication to happen. + +You can also demote a domain controller + +$cred = Get-Credential +Uninstall-ADDSDomainController -Credential $cred -RemoveApplicationPartitions -Confirm:$false + +Restart the machine and uninstall AD & DNS + +Uninstall-WindowsFeature -Name AD-Domain-Services, DNS -Confirm:$false +Restart-Computer -ComputerName dc02 + +Leave the domain + +$cred = Get-Credential manticore\richard +Remove-Computer -UnjoinDomainCredential $cred -Workgroup Test + +Trash the VM. + +And best of all it works over remoting. You will need to recreate the session for restarts & changes but it is really easy. + +Server Core is now a much friendlier option. + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2807/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2807/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2807&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/02/filter-or-ldap-filter/index.md b/content/articles/2013/02/filter-or-ldap-filter/index.md new file mode 100644 index 000000000..39510138b --- /dev/null +++ b/content/articles/2013/02/filter-or-ldap-filter/index.md @@ -0,0 +1,54 @@ +--- +url: /articles/2013-02-27-filter-or-ldap-filter/ +title: Filter or LDAP filter +authors: + - Richard Siddaway +date: "2013-02-27T20:16:47+00:00" +aliases: + - /2013/02/filter-or-ldap-filter/ +--- + +Many of the Microsoft AD cmdlets have a "“Filter and an "“LDAPFilter parameter. So what"™s the difference? + +PS> Get-Help Get-ADUser -Parameter \*Filter\* + +-Filter + Specifies a query string that retrieves Active Directory objects. This string uses the PowerShell Expression + Language syntax. The PowerShell Expression Language syntax provides rich type-conversion support for value types received by the Filter parameter. The syntax uses an in-order representation, which means that the operator is placed between the operand and the value. For more information about the Filter parameter, see about_ActiveDirectory_Filter. + +-LDAPFilter + Specifies an LDAP query string that is used to filter Active Directory objects. You can use this parameter to run your existing LDAP queries. The Filter parameter syntax supports the same functionality as the LDAP syntax. For more information, see the Filter parameter description and the about_ActiveDirectory_Filter. + +This means you have two ways to approach a problem. Lets think about finding a single user: + +Get-ADUser -LDAPFilter "(samAccountName=Richard)" + +Get-ADUser -Filter {samAccountName -eq 'Richard'} + +The LDAPFilter uses LDAP query syntax "“ attribute and value. Filter uses PowerShell syntax. You could think of the "“Filter as a condensed version of + +Get-ADUser -Filter * | where samAccountName -eq 'Richard' + +Use the "“Filter parameter because its less typing and you filter early "“ especially important if querying across a network. + +You can use multiple attributes in the filters – & implies AND in the LDAP filter + +Get-ADUser -LDAPFilter "(&(givenname=Bill)(sn=Green))" + +Get-ADUser -Filter {GivenName -eq 'Bill' -and Surname -eq 'Green'} + +The LDAP filter HAS to use the correct attribute name but Filter uses the property name returned by Get-ADUser. + +LDAP filters can get very complicated very quickly. For instance if you want to find the disabled user accounts + +Get-ADUser -LDAPFilter "(&(objectclass=user)(objectcategory=user)(useraccountcontrol:1.2.840.113556.1.4.803:=2))" + +Get-ADUser -Filter {Enabled -eq $false} + +Alternatively,and in my opinion, its simpler to use Search-ADaccount + +Search-ADAccount -AccountDisabled "“UsersOnly + +Which one should you use? The one that best solves your problem. I mix & match to suit the search I"™m performing + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2811/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2811/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2811&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/02/filtering/index.md b/content/articles/2013/02/filtering/index.md new file mode 100644 index 000000000..314b6a575 --- /dev/null +++ b/content/articles/2013/02/filtering/index.md @@ -0,0 +1,69 @@ +--- +url: /articles/2013-02-18-filtering/ +title: Filtering +authors: + - Richard Siddaway +date: "2013-02-18T19:38:41+00:00" +aliases: + - /2013/02/filtering/ +--- + +I"™ve been grading the scripts in the warm up events for the Scripting Games and noticed a lot of people doing this: + +Get-WmiObject -Class Win32_LogicalDisk | where {$_.DriveType -eq 3} + +Ok now it works but there are a couple of things wrong with this approach. + +Firstly, you are ignoring the built in capabilities of the get-wmiobject cmdlet + +PS> Get-Command Get-WmiObject -Syntax + +Get-WmiObject [-Class] [[-Property] ] **[-Filter ]** [-Amended] [-DirectRead] [-AsJob] +[-Impersonation ] [-Authentication ] [-Locale ] +[-EnableAllPrivileges] [-Authority ] [-Credential +] [-ThrottleLimit ] [-ComputerName +] [-Namespace ] [] + +Get-WmiObject [[-Class] ] [-Recurse] [-Amended] [-List] [-AsJob] [-Impersonation ] +[-Authentication ] [-Locale ] [-EnableAllPrivileges] [-Authority ] [-Credential + +] [-ThrottleLimit ] [-ComputerName ] [-Namespace ] [] + +Get-WmiObject -Query [-Amended] [-DirectRead] [-AsJob] [-Impersonation ] [-Authentication +] [-Locale ] [-EnableAllPrivileges] [-Authority ] [-Credential +] +[-ThrottleLimit ] [-ComputerName ] [-Namespace ] [] + +Get-WmiObject [-Amended] [-AsJob] [-Impersonation ] [-Authentication ] +[-Locale ] [-EnableAllPrivileges] [-Authority ] [-Credential +] [-ThrottleLimit ] +[-ComputerName ] [-Namespace ] [] + +Get-WmiObject [-Amended] [-AsJob] [-Impersonation ] [-Authentication ] +[-Locale ] [-EnableAllPrivileges] [-Authority ] [-Credential +] [-ThrottleLimit ] +[-ComputerName ] [-Namespace ] [] + +Notice the filter parameter in the first parameter set. + +When you run Get-WMIObject in effect you are running a WQL query + +"SELECT * FROM Win32_LogicalDisk" + +if you move the filter into the query it changes to + +"SELECT * FROM Win32_LogicalDisk WHERE DriveType = 3" + +This is coded in the cmdlet as + +Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType = 3″ + +Why is this better? + +Because you are doing less work against the WMI repository "“ therefore more efficient. + +Also if you are running against a remote machine filtering in the WMI query means you bring less data back across the network which makes you whole process more efficient. + +Bottom line "“ filter as early as you sensibly can and preferably on the remote machine. + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2804/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2804/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2804&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/02/last-nights-live-meeting/index.md b/content/articles/2013/02/last-nights-live-meeting/index.md new file mode 100644 index 000000000..b25c2051f --- /dev/null +++ b/content/articles/2013/02/last-nights-live-meeting/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-02-27-last-nights-live-meeting/ +title: Last nights Live Meeting +authors: + - Richard Siddaway +date: "2013-02-27T20:18:54+00:00" +aliases: + - /2013/02/last-nights-live-meeting/ +--- + +The sound was awful on last night"™s Live Meeting so I intend to re-record it at the weekend. I"™ll post the recording and scripts once its done. + +I"™m also investigating an alternative delivery mechanism that will hopefully solve the sound issues. + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2812/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2812/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2812&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/02/new-book/index.md b/content/articles/2013/02/new-book/index.md new file mode 100644 index 000000000..26a4e2d80 --- /dev/null +++ b/content/articles/2013/02/new-book/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-02-25-new-book/ +title: New book +authors: + - Richard Siddaway +date: "2013-02-25T18:57:21+00:00" +aliases: + - /2013/02/new-book/ +--- + +My latest book has been released on the Manning Early Access Program (MEAP). Active Directory Management in a Month of Lunches takes the newcomer to AD through the tasks they need to perform to manage their organization"™s AD. + +it assumes no knowledge of AD and shows how to perform the common management tasks from the GUI (AD Administrative Center & the venerable AD Users & Computers) as well as PowerShell (using the Microsoft cmdlets). + +Chapters 1-7 are currently available from [www.manning.com\siddaway3][1] with more to come soon + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2808/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2808/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2808&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: http://www.manning.com%5Csiddaway3/ diff --git a/content/articles/2013/02/phillyposh-02072013-meeting-summary-and-presentation-materials/index.md b/content/articles/2013/02/phillyposh-02072013-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..8e9b6143c --- /dev/null +++ b/content/articles/2013/02/phillyposh-02072013-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2013-02-16-phillyposh-02072013-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 02/07/2013 meeting summary and presentation materials +authors: + - John Mello +date: "2013-02-17T02:04:19+00:00" +aliases: + - /2013/02/phillyposh-02072013-meeting-summary-and-presentation-materials/ +--- + +[Jeff Hicks][1] (Microsoft MVP and [Author][2]) gave a presentation on "Getting Started with PowerShell Advanced Functions". You can download the presentation and example scripts [here][3] and watch a recording of the presentation below on our [YouTube channel][4]. +[youtube_sc url="http://www.youtube.com/watch?v=77VbOO14DFE&feature=youtu.be"] +You can keep up with Jeff at his [blog][5], on [Twitter, ][6]and on [Google Plus][7] +We would also like to thank [Interfacett][8] and [Powershell.org][9] for providing funding for this meeting! + + [1]: http://jdhitsolutions.com/ + [2]: http://www.manning.com/search/results?cx=008207406337866288189%3Avej9zumcdec&cof=FORID%3A9&ie=UTF-8&q=Jeffery+Hicks&sa=Search + [3]: https://powershell.org/wp-content/uploads/2013/02/PhillyPosh_2013-02-07_Presentations.zip + [4]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg?feature=watch + [5]: http://jdhitsolutions.com/blog/ + [6]: https://twitter.com/jeffhicks + [7]: http://gplus.to/JeffHicks + [8]: http://www.interfacett.com/ + [9]: https://powershell.org/ diff --git a/content/articles/2013/02/powershell-in-depth-nearly-there/index.md b/content/articles/2013/02/powershell-in-depth-nearly-there/index.md new file mode 100644 index 000000000..039c29f09 --- /dev/null +++ b/content/articles/2013/02/powershell-in-depth-nearly-there/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-02-25-powershell-in-depth-nearly-there/ +title: "PowerShell in Depth\"“nearly there" +authors: + - Richard Siddaway +date: "2013-02-25T19:26:27+00:00" +aliases: + - /2013/02/powershell-in-depth-nearly-there/ +--- + +PowerShell in Depth is rapidly approaching its publication date "“ see [www.manning.com/jones2][1] for details + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2809/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2809/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2809&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: http://www.manning.com/jones2 diff --git a/content/articles/2013/02/powershell-org-forums-etiquette/index.md b/content/articles/2013/02/powershell-org-forums-etiquette/index.md new file mode 100644 index 000000000..80b80e861 --- /dev/null +++ b/content/articles/2013/02/powershell-org-forums-etiquette/index.md @@ -0,0 +1,28 @@ +--- +url: /articles/2013-02-27-powershell-org-forums-etiquette/ +title: PowerShell.org Forums Etiquette +authors: + - Don Jones +date: "2013-02-27T17:19:13+00:00" +categories: + - Tips and Tricks +aliases: + - /2013/02/powershell-org-forums-etiquette/ +--- + +Folks often ask for some advice on what to do, and what not to do, in the forums. Here are some suggestions. + + + 1. Don't apologize for being a "noob" or "newbie" or "n00b." There's just no need - nobody will think you're stupid, and the forums are all about asking questions. Just ask. + 2. Try to avoid using obscure or punctuation aliases (like ? and %) - use command names instead. It makes your post easier for everyone, including n00bs, to follow. + 3. Use the CODE or POWERSHELL buttons in the forums editor to format PowerShell and other code. + 4. If your problem is solved, find the little green checkmark button along the top of your message (or one of the replies; it's near the Twitter and Facebook and other buttons), and click it. That helps indicate to everyone else that you found a solution. + 5. Don't post massive scripts. We're all volunteers, and we don't have time to read all that, nor will we copy, paste, and run it. Post an excerpt, and clearly state what you're having problems with. + 6. Post error messages, as appropriate. They help. + 7. Don't ask folks to provide you with a complete script, or to rewrite your script. Again, we're all volunteers - respect that we're taking time to help you, and help us minimize that time. + 8. Try to ask just one question at a time. Posts with ten questions are a lot harder to help with. + 9. DO post what you've tried, what errors you got, and what didn't work. It's a lot easier, sometimes, to correct what you've already done than to try and write something from scratch. + 10. If you've been given a working solution, SAY THANK YOU! Then make sure you know WHY it works... and ask for an explanation if you don't! + 11. Take the time to educate yourself. Pick up a book, or a training video, or take a class, or attend a conference. Yes, those take time - but it's time well-spent. If you're continually asking other people to spend time answering questions that are _already_ answered in every book, video, course, etc.... well, that's kinda wasting _their_ time, right? Folks on the forums can help you more effectively if you have a base education first. + +Have your own etiquette suggestions? Drop 'em in the comments! diff --git a/content/articles/2013/02/powershell-workflow-the-complete-series/index.md b/content/articles/2013/02/powershell-workflow-the-complete-series/index.md new file mode 100644 index 000000000..1f7680c82 --- /dev/null +++ b/content/articles/2013/02/powershell-workflow-the-complete-series/index.md @@ -0,0 +1,38 @@ +--- +url: /articles/2013-02-13-powershell-workflow-the-complete-series/ +title: "PowerShell Workflow\"“the complete series" +authors: + - Richard Siddaway +date: "2013-02-13T19:34:04+00:00" +aliases: + - /2013/02/powershell-workflow-the-complete-series/ +--- + +The series of articles on PowerShell workflows that are appearing on the Scripting Guy blog is now complete. + +The articles in the series that have been published are: + + + + + + + + + + + + + +[http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/06/powershell-workflows-design-considerations.aspx][1] + +[http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/13/powershell-workflows-a-practical-example.aspx][2] + +The series is complete for now but as workflow is such a new topic expect more on it in the future. + +Until then Enjoy! + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2803/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2803/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2803&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/06/powershell-workflows-design-considerations.aspx "http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/06/powershell-workflows-design-considerations.aspx" + [2]: http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/13/powershell-workflows-a-practical-example.aspx "http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/13/powershell-workflows-a-practical-example.aspx" diff --git a/content/articles/2013/02/scripting-games-warm-up/index.md b/content/articles/2013/02/scripting-games-warm-up/index.md new file mode 100644 index 000000000..d441bd14b --- /dev/null +++ b/content/articles/2013/02/scripting-games-warm-up/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-02-05-scripting-games-warm-up/ +title: Scripting Games warm up +authors: + - Richard Siddaway +date: "2013-02-05T19:47:01+00:00" +aliases: + - /2013/02/scripting-games-warm-up/ +--- + +As a warm up for this years Scripting Games a two event Winter Scripting Camp has been organised. Details from [https://powershell.org/games/][1] + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2802/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2802/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2802&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: https://powershell.org/games/ "https://powershell.org/games/" diff --git a/content/articles/2013/02/uk-powershell-group-advanced-functions/index.md b/content/articles/2013/02/uk-powershell-group-advanced-functions/index.md new file mode 100644 index 000000000..7fee2aa46 --- /dev/null +++ b/content/articles/2013/02/uk-powershell-group-advanced-functions/index.md @@ -0,0 +1,48 @@ +--- +url: /articles/2013-02-18-uk-powershell-group-advanced-functions/ +title: "UK PowerShell Group\"“Advanced functions" +authors: + - Richard Siddaway +date: "2013-02-18T19:57:08+00:00" +aliases: + - /2013/02/uk-powershell-group-advanced-functions/ +--- + +When: Tuesday, Feb 26, 2013 7:30 PM (GMT) + +Where: Virtual + +\*~\*~\*~\*~\*~\*~\*~\*~\*~\* + +Advanced functions give you ability to create functions that act like cmdlets. Learn how to get the most from this powerful part of the PowerShell functionality + +**Notes** + +Richard Siddaway has invited you to attend an online meeting using Live Meeting. +**[Join the meeting.][1]** +**Audio Information** +**Computer Audio** +To use computer audio, you need speakers and microphone, or a headset. +**First Time Users:** +To save time before the meeting, [check your system][2] to make sure it is ready to use Microsoft Office Live Meeting. +**Troubleshooting** +Unable to join the meeting? Follow these steps: + +1. Copy this address and paste it into your web browser: + + +2. Copy and paste the required information: +Meeting ID: G79DNP +Entry Code: 9$t#&PK#8 +Location: + +If you still cannot enter the meeting, [contact support][3] + +**Notice** +Microsoft Office Live Meeting can be used to record meetings. By participating in this meeting, you agree that your communications may be monitored or recorded at any time during the meeting. + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2805/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2805/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2805&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: https://www.livemeeting.com/cc/usergroups/join?id=G79DNP&role=attend&pw=9%24t%23%26PK%238 + [2]: http://go.microsoft.com/fwlink/?LinkId=90703 + [3]: http://r.office.microsoft.com/r/rlidLiveMeeting?p1=12&p2=en_US&p3=LMInfo&p4=support diff --git a/content/articles/2013/02/verified-effective-about-ready-to-go-live/index.md b/content/articles/2013/02/verified-effective-about-ready-to-go-live/index.md new file mode 100644 index 000000000..0b3ee3488 --- /dev/null +++ b/content/articles/2013/02/verified-effective-about-ready-to-go-live/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2013-02-18-verified-effective-about-ready-to-go-live/ +title: "\"Verified Effective\" About Ready to Go Live" +authors: + - Don Jones +date: "2013-02-18T17:01:32+00:00" +categories: + - Announcements +aliases: + - /2013/02/verified-effective-about-ready-to-go-live/ +--- + +Before the verification exam becomes available to the public, I need ONE OR TWO people to be the first through the complete program. This is not a "beta;" the exam is finalized and you will have to pay for your verification. The first one or two people will be semi-automated as I nail down the final payment integration bits, and then we'll throw it open to the public. +If you're interested, contact me at don at Concentrated Tech.com. First come, first served. diff --git a/content/articles/2013/02/verified-effective-for-powershell-3-0-toolmaking-now-live/index.md b/content/articles/2013/02/verified-effective-for-powershell-3-0-toolmaking-now-live/index.md new file mode 100644 index 000000000..1df9e4fca --- /dev/null +++ b/content/articles/2013/02/verified-effective-for-powershell-3-0-toolmaking-now-live/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-02-24-verified-effective-for-powershell-3-0-toolmaking-now-live/ +title: VERIFIED EFFECTIVE for PowerShell 3.0 Toolmaking now live +authors: + - Don Jones +date: "2013-02-24T19:10:05+00:00" +categories: + - Announcements +aliases: + - /2013/02/verified-effective-for-powershell-3-0-toolmaking-now-live/ +--- + +[It's now available globally][1]. +I suggest downloading the Program Guide, which includes the agreement and directions for enrolling. There's also a specific guide for the PowerShell 3.0 Toolmaking examination, which you should read prior to paying. +Once you've paid, and sent in the necessary signed paperwork, you'll get your exam info via e-mail. You can log in at any time to download your exam scenario and begin working. From the time of your first login, the clock starts ticking and you have 24 hours to upload your results. After uploading your results, you'll hear back within 5 business days - these are graded by a human, not a machine, so be patient. + + [1]: http://donjones.com/verified "Creating a Windows 2012 Domain Controller" diff --git a/content/articles/2013/02/verified-effective-powershell-certification-program-now-ready-for-beta/index.md b/content/articles/2013/02/verified-effective-powershell-certification-program-now-ready-for-beta/index.md new file mode 100644 index 000000000..8e553ca0b --- /dev/null +++ b/content/articles/2013/02/verified-effective-powershell-certification-program-now-ready-for-beta/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2013-02-02-verified-effective-powershell-certification-program-now-ready-for-beta/ +title: "VERIFIED EFFECTIVE PowerShell \"certification\" program now ready for beta" +authors: + - Don Jones +date: "2013-02-02T23:43:15+00:00" +categories: + - Announcements +aliases: + - /2013/02/verified-effective-powershell-certification-program-now-ready-for-beta/ +--- + +**NOTE:** As of 4th February, we're full up for the beta. Check back later this year for the program launch. + + + I'm ready to begin a formal beta test of the new VERIFIED EFFECTIVEâ„¢ examination program, which we'd previously referred to as "PowerShell Verified." + + +Participation in the beta will be free, and if you pass it "counts." If you're interested, please [download the Program Guide][1] before February 10th, 2013. +You must agree to perform you examination on February 11th or 12th +. Complete the Program License Agreement found in the Guide, and return it, with photo ID, as indicated. Be sure to indicate either Feb 11th or 12th as your desired exam date. Materials will be sent to you via e-mail, and you will have 24 hours to complete the assignment. A qualified candidate should need no more than 4-5 hours. +We've [posted a complete set of information about the program][2] in general and the PowerShell exam in particular. +At this time, I can only accept participants who are USA residents (more on that below). International expansion will happen when the program formally launches later this year. **I will only be accepting 2-3 beta participants.** If you submit your Program License Agreement but don't hear back the same day, then you weren't selected for participation. +The final examination will be $150, and will be a human-graded assignment not a machine-graded exam. A certificate for passing scores will be delivered electronically, and you may order a physical certificate for a nominal fee. +The first exam will be **PowerShell 3.0 Toolmaking**. You should be able to pass if you know how to write advanced functions, including dealing with pipeline input, ShouldProcess support, and parameter attributes and validation. You will also need to know how to create custom formatting views and type extensions, and how to create script and manifest modules. You will need to be familiar with Windows PowerShell remoting and remoting configuration, and know how to create custom remoting endpoints (session configurations) having a specified configuration. You also need to know how to write proxy functions. You should know how to connect to SQL Server databases from within PowerShell, and how to issue queries to retrieve and manipulate database data. Note that not all of these topics may be included on every examination, but you should be prepared to perform all of them. +I look forward to hearing from you! + + + [1]: http://donjones.com/verified/ProgramGuide.pdf + [2]: http://donjones.com/verified diff --git a/content/articles/2013/02/want-to-be-verified-effective-for-powershell-heres-what-to-expect/index.md b/content/articles/2013/02/want-to-be-verified-effective-for-powershell-heres-what-to-expect/index.md new file mode 100644 index 000000000..ffc3f30aa --- /dev/null +++ b/content/articles/2013/02/want-to-be-verified-effective-for-powershell-heres-what-to-expect/index.md @@ -0,0 +1,41 @@ +--- +url: /articles/2013-02-05-want-to-be-verified-effective-for-powershell-heres-what-to-expect/ +title: "Want to be VERIFIED EFFECTIVE for PowerShell? Here's what to expect." +authors: + - Don Jones +date: "2013-02-05T20:24:27+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/02/want-to-be-verified-effective-for-powershell-heres-what-to-expect/ +--- + +We're well into our beta for the VERIFIED EFFECTIVEâ„¢ Windows PowerShell 3.0 Toolmaker exam, and expect the program to go live in March or April of 2013. There's a good bit of information on the [program home page](http://donjones.com/verified) that you should review if you're interested in getting verified. + + + [As a note, once the program goes live, it'll be available to anyone worldwide - although the exam will only be available in English for the foreseeable future; we don't have the resources at this time to offer localized versions] + I should point out first that we're doing this program through my company, rather than directly through PowerShell.org, mainly because of some legalities. My company (Concentrated Tech) has the insurance and other items in place needed to do something like this, and I didn't want PowerShell.org, Inc., to have to pay for those things. That said, a *lot* of folks have been involved in vetting and designing the exam scenarios. Another advantage of using Concentrated Tech is that the company is set up to do a lot of the interviewing and statistical analysis needed to make a relevant exam. + The cost is the second thing I'll discuss: at $150/person, I know it's not cheap. But at least two human beings look at each person's work - there's no machine grading - and they gotta get paid. We also need to recoup some of the substantial investment that went into the exam design. Over a 3-year period, it'll hopefully be about break-even. We'll see. + On to the exam itself. There are a variety of "forms" for the exam, meaning everyone isn't getting the same assignment. That said, the approach for each form is pretty much the same. You'll get 2-3 "assignments" to complete, all of which involve writing scripts and/or commands. You get a specified amount of time to complete your assignments. + (as an aside, making multiple different exams that all test substantially the same skills is really tough, which is one reason we did a lot of testing and statistical analysis - to ensure the equivalency of each form - as part of the development process). + Some assignments are straightforward: write a script that does this, this, and that. You're given a bunch of criteria and just have to spew out the commands. There's room for creativity - so long as you (a) meet all the criteria and (b) comply with the stated best practices, you pass. "Extra" stuff doesn't count against you, and the exact approach you use isn't graded - so long as you achieve all of the results and comply with all of the stated criteria. + The "main" assignment in each form is harder. You're given a shell transcript, and you're asked to look at it and duplicate the tools you see used in it. For example: + + +`PS C:\> 'localhost' | Do-Something -confirm -verbose +VERBOSE: Checking for status.txt +VERBOSE: Status.txt exists, will append status to it +VERBOSE: Pinging localhost +VERBOSE: localhost responds +Performing action "Do-Something" on "localhost". Continue? +`That transcript should tell you that the command Do-Something accepts strings from the pipeline, supports the ShouldProcess mechanism, and outputs certain verbose status messages. You typically see each command used in several ways within the transcript, and each way reveals more about how that command works. Your job is to re-create the command, so that it produces the same results as shown in the transcript. +We've tried to use this approach to make the exam as objective as possible. If we can run the same commands using your code, and get the same output, then you probably pass. We then run a check on the "best practices" section (which is given to you in your assignment packet) to make sure you didn't deviate. +There's a tiny little bit of unstated stuff. Like, if you hand in awfully-formatted code, you just take a terribly long-winded approach that could have been vastly simplified, you write code that takes 12x longer to run than it could or should... if you do _enough_ of those wrong things in your assignment, you won't pass. We discussed these "soft" things a lot. +For example, we didn't want to add a best practice, "your code must run as efficiently as possible." That would let us explicitly ding someone who took a too-slow approach... but that kind of statement also makes people start to obsess and overthink the assignment. We don't care if your code runs 1s longer than our model solution. We care if it runs 10m longer. That's hard to state... and frankly, if someone has to _tell_ you not to write crappy, slow code... you shouldn't be "certified." +So you _can_ fail on unstated things... but you'd have to be pretty egregious about it. Two humans grading you would have to be in agreement, and in a case like that our internal policy is to get a third judge to agree with the decision. +Hopefully some of you are excited about this program and can't wait to start. Now, for some more logistics - this is stated elsewhere, but just so you're clear: +You get started by paying, and submitting a signed Program License Agreement and a copy of a government-issued photo ID. We do store that, offline, for our records. It isn't in a database anywhere. Once we have those items, we enroll you and you receive an enrollment e-mail. +The e-mail contains basic instructions for logging into our system and obtaining your Assignment Packet. Once you log in, your 24-hour countdown starts. From that point, you have a specified number of hours to download the Packet, read it, construct your script(s), ZIP them, and upload the ZIP file to us. You get one upload - once you do that, your answer is locked and we start grading. +Allow about 5 business days for grading - longer if we're swamped, although if that's the case we'll let you know. After grading, you'll get a pass/fail e-mail. We don't send you commentary on why - the goal of this isn't to make you a better person, it's to see if you've got the skills or not. If you fail, you can re-take after a 3-month wait (that helps prevent someone from slamming through all of our exam variations in a short period of time and cheating). +I know one thing that will frustrate some folks is that we don't provide any feedback. That's very common in exam situations - Microsoft certification exams don't provide item-by-item feedback, either. So, for folks who _want_ feedback, you can get that. We haven't come up with a full program yet, but you'll be able to purchase time with an expert, and you'll get a scenario similar to (but not exactly like) one of the exam assignments. You can work on your answer for as long as you like, and then sit down in LiveMeeting or Skype or whatever with the expert, who will go over your work with you. If you did a great job, you're still _not verified_ - you have to take the exam for that. But if you're unsure, it's a way to have a small "trial run" that gives you some feedback on how you did. It can also be a good distance-learning experience, for someone who's so inclined. +Anyway... there's the VERIFIED EFFECTIVE program in a nutshell. diff --git a/content/articles/2013/02/winter-scripting-camp-opened-to-the-public/index.md b/content/articles/2013/02/winter-scripting-camp-opened-to-the-public/index.md new file mode 100644 index 000000000..cbc6e1a8e --- /dev/null +++ b/content/articles/2013/02/winter-scripting-camp-opened-to-the-public/index.md @@ -0,0 +1,28 @@ +--- +url: /articles/2013-02-01-winter-scripting-camp-opened-to-the-public/ +title: Winter Scripting Camp Opened to the Public +authors: + - Don Jones +date: "2013-02-01T22:45:39+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/02/winter-scripting-camp-opened-to-the-public/ +--- + +*Everything's been going pretty smoothly, so we've decided to open Winter Scripting Camp to everyone! Read everything below carefully for the best camping experience!* + + +Scripting Camp is a precursor to the Scripting Games, which will kick off in late April. During Camp, you'll have the opportunity to participate in two events. We aren't offering any prizes, but we will announce winners in the PowerShell.org blog, on Twitter, and so on. Camp is really a way for us to kick the tires on our new software platform. +If you want to participate, here's how: + + * Start by visiting the Games home page. There, you'll find our competitor's guide, which includes best practices and scoring information. You'll also find instructions for providing feedback. Be sure to check back there frequently, as it's also where we'll be posting news and updates. + * You will need a Microsoft Live account in order to sign-in and participate. + * Visit [TheScriptingGames.com][2] to join in. + +The first event runs Feb 1 to Feb 5; the second Feb 8 to Feb 12. You get one submission per entry, so make it count, and make sure it's in on time. +The new platform isn't entirely feature-complete, but you should be able to get in and see your event, along with your scores from our judges. For Camp, we aren't committing to doing multiple scores per entry - again, this is mainly about testing the software. +We are definitely interested in your feedback. For example, the schedule reflects that of the actual Games. Unlike prior years, we will be having non-overlapping events. You'll have about five days to review the event details and submit an entry - better reflecting the time pressures of a production environment. There will be a discussion forum on PowerShell.org for your feedback - please let us know what you think! + + + [2]: http://thescriptinggames.com diff --git a/content/articles/2013/02/winter-scripting-camp-the-post-mortem/index.md b/content/articles/2013/02/winter-scripting-camp-the-post-mortem/index.md new file mode 100644 index 000000000..a016d94b5 --- /dev/null +++ b/content/articles/2013/02/winter-scripting-camp-the-post-mortem/index.md @@ -0,0 +1,93 @@ +--- +url: /articles/2013-02-11-winter-scripting-camp-the-post-mortem/ +title: "Winter Scripting Camp: The Post Mortem" +authors: + - Don Jones +date: "2013-02-11T21:51:59+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/02/winter-scripting-camp-the-post-mortem/ +--- + +Ok, aftermath time. In Winter Scripting Camp I saw some very cool stuff, but I know folks want to learn from this event too, so I want to call out some stuff that I didn't like so much, and explain why. I'm keeping these brief - if you'd like a longer explanation, hit me up in the [PowerShell Q&A forum](/discuss/). BTW, none of the discussion below implies anything about the grade I awarded the entry. I considered a much broader range of criteria and opinions in awarding grades. + + +## + My -f Nitpick + + + This bugged me a wee bit. I know, it's a nit: + + +`Write-Warning ("{0} not online" -f $computer) +`I'd personally have done: + + +`Write-Warning "$computer not online" +`Personal preference; the latter is easier to read. I don't like using -f unless I actually need its formatting capability. + +## My Preference is No Preference + +Next up, a script with this: + + +`#$script:DebugPreference = "Continue" # debug msgs on +$script:DebugPreference =  "SilentlyContinue" # debug msgs off +`This only bugged me because this was in a script that contained a function; the function implemented [CmdletBinding()]. That means the function would suppress Write-Debug by default, and enable it when run with -Debug. Never a need to mess with those preference variables in an advanced function. + +## Redundant Code + +I noticed this: + + +`END{Clear-Variable -Name obj} +`Nothing wrong with that, but it's redundant. The variable $obj was created inside the function; PowerShell deletes the variable when its enclosing scope is destroyed. So the END block is just unnecessary code and an unnecessary step - forcing the shell to delete something before removing the scope, which would have deleted it anyway. + +## No Examples? + +Another one: The author took a great deal of time to put in detailed usage examples for their command. But didn't do so in comment-based help... which seems odd, because they'd added comment-based help already. That made the examples impossible to see unless you opened the script, which kinda defeats the point :(. + +## I Got Your SilentlyContinue Right Here... + +This is a huge concern for me, and it **is** something I deducted points for. **Please don't misuse** _-ErrorAction SilentlyContinue_ **and be very judicious** with _$ErrorActionPreference='SilentlyContinue'_. The former is appropriate when _you don't care if there's an error,_ like deleting a file that doesn't exist. You get an error, but who cares, because mission accomplished, right? Don't just suppress errors. I get really bugged at SilentlyContinue on Get-WmiObject statements, for example. It's bad coding. The latter example _will make me fail your script entirely_ if you just chuck it in at the top of a script. You're suppressing every error the script might generate, and it makes me wonder what you're hiding. Messing with $ErrorActionPreference is appropriate only when you need to suppress/handle a specific error that might be raised by a method or something else that doesn't have an -ErrorAction parameter. I saw some egregious overuse of this, and it's a bad, bad, bad, bad, bad coding practice. +Sadly, some of my fellow judges disagree with me on this and think that _-ErrorAction SilentlyContinue_ is merited. That's fine; that's why we have multiple judges looking at each entry. I say, if you're not going to _handle_ an error, don't _suppress_ it. Otherwise whoeever is running your command will be, like, "did anything just happen, or not?" Either let the default error messages shine through, or come up with your own alternative. +I'm gonna get a class of whiskey. Be right back. + +## Consistency! + +Ah, that's better. Next up is this: + + +`[Parameter(Mandatory=$true, ValueFromPipeline=$true)][string[]]$ComputerNames +`Try to stay consistent with PowerShell's own naming. Look at Get-WmiObject. What parameter does it use to accept computer names? -ComputerName. Not -ComputerNames. So your commands should all use -ComputerName, even if they're accepting more than one computer name. Keep your public interface - your parameter and command names - consistent. + +## You're Not an Accumulator + + +`begin {         $results = @()     } +process { $results += # whatever } +end { +        $results | Format-Table -AutoSize +    } +`Ouch. Don't like to see this. The purpose of the pipeline is to accumulate output - you shouldn't be building internal arrays to do that. And you also shouldn't ever, ever, ever, ever, almost ever use a Format command in your function. When you do that, you're preventing me from piping the output of your command to a CSV, or to XML, or into a GridView, or anyplace else. You've made your command non-reusable outside of your original scenario, a very poor programming practice. Just use Write-Output to write objects to the pipeline, and let the shell handle it from there. + +## $Args[0] + +Look, if you're going to accept parameters, _document them_ in a Param() block. So they have names and I can figure them out. $ComputerName I understand; what does $args[0] contain? I can't glance and tell - I have to follow the logic if your script, which means it isn't self-documenting, which means I'm sad. + +## Write-Host + +I will not be kind to you if you use Write-Host as a means of producing output from your script, unless your script/command is named "Show-XXXXX," indicating its only sad purpose in life is to display information on the screen and never anyplace else. + +## Don't OVERTHINK + +Too many people started treating this like a certification exam, unfortunately, and we're going to be making some changes to the real Games to address that. A lot of folks just frankly overthought things. In one case, we were really just looking for something like: + + +`Get-WmiObject -ClassName Win32_Volume -ComputerName (Get-Content names.txt) | Select-Object -Property DeviceID,@{n='FreeSpace(GB)';e={$PSItem.FreeSpace / 1GB -as [int]}} +`(That isn't the exact answer to an event - it's an illustration). In many cases we got multi-line scripts that created a dozen variables, suppressed errors (grr), pinged computers... sometimes, less is more. Again, I'm not saying anyone got down-checked for all the extra work, but guys and gals _try not to overthink this._ As I said, we're going to implement changes in the way scenarios are created for the real Games, because we want you all using creative approaches and worrying less about ticking off marks in a list. "Did I add error handling? Did I ping the computers? What am I missing? What secret thing are they looking for that I forgot?" Relax a little! + +## Up Next... + +Now... what's coming up for the real Scripting Games? Some changes, based on what we learned during Camp. Stay tuned. diff --git a/content/articles/2013/03/_index.md b/content/articles/2013/03/_index.md new file mode 100644 index 000000000..878864312 --- /dev/null +++ b/content/articles/2013/03/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from March 2013" +description: "PowerShell.org Articles published in March 2013." +--- diff --git a/content/articles/2013/03/announcing-winter-scripting-camp-winners/index.md b/content/articles/2013/03/announcing-winter-scripting-camp-winners/index.md new file mode 100644 index 000000000..0a4a5d4be --- /dev/null +++ b/content/articles/2013/03/announcing-winter-scripting-camp-winners/index.md @@ -0,0 +1,31 @@ +--- +url: /articles/2013-03-08-announcing-winter-scripting-camp-winners/ +title: Announcing Winter Scripting Camp Winners +authors: + - Don Jones +date: "2013-03-08T22:57:07+00:00" +categories: + - Scripting Games +aliases: + - /2013/03/announcing-winter-scripting-camp-winners/ +--- + +I know, this took forever. Mea culpa. I've been working my shell off, and finally got around to pulling the info. + + +**Beginner Track** + + 1. Wouter Beens (4.667) + 2. Laurel Raven (4.5) + 3. Chris Davis (4.5) + +**Advanced Track** + + 1. Alexander Kuzin (4.5) + 2. Lido Paglia (4.5) + 3. (anonymous) (4) + +Those are the average scores from those entries, and in case of a tie we broke it by submission timestamp. Things will be working a bit differently in the actual Games, coming your way in April, so stay tuned. In fact, you can [subscribe to a specific topic for Scripting Games announcements][1], if you like. + + + [1]: https://powershell.org/category/announcements/scripting-games/ diff --git a/content/articles/2013/03/cim-cmdlets/index.md b/content/articles/2013/03/cim-cmdlets/index.md new file mode 100644 index 000000000..e84cea2ba --- /dev/null +++ b/content/articles/2013/03/cim-cmdlets/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2013-03-26-cim-cmdlets/ +title: CIM cmdlets +authors: + - Richard Siddaway +date: "2013-03-26T21:04:00+00:00" +aliases: + - /2013/03/cim-cmdlets/ +--- + +The CIM cmdlets are found in the CIMcmdlets module. + +Get-Command -Module CimCmdlets produces this list of names. I"™ve added some information on the tasks they perform + +Get-CimAssociatedInstance is for working with WMI associated classes +Get-CimClass is for discovering the properties and methods of a WMI class +Get-CimInstance is analogous to Get-WmiObject +Get-CimSession +Invoke-CimMethod is analogous to Invoke-WMIMethod +New-CimInstance can be used for creating a new WMI instance in certain circumstances +New-CimSession +New-CimSessionOption +Register-CimIndicationEvent is analogous to Register-WMIEvent +Remove-CimInstance is analogous to Remove-WMIObject +Remove-CimSession +Set-CimInstance is analogous to Set-WMIInstance + +The CIM session cmdlets are for working with the CIm sessions which are analogous to PowerShell remoting sessions but are used by the CIM cmdlets AND the new WMI based cmdlets in Windows 8/2012 such as the networking cmdlets + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2820/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2820/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2820&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/03/network-adapters-disableenable/index.md b/content/articles/2013/03/network-adapters-disableenable/index.md new file mode 100644 index 000000000..3e0151841 --- /dev/null +++ b/content/articles/2013/03/network-adapters-disableenable/index.md @@ -0,0 +1,67 @@ +--- +url: /articles/2013-03-11-network-adapters-disableenable/ +title: "Network Adapters\"“Disable/Enable" +authors: + - Richard Siddaway +date: "2013-03-11T20:09:06+00:00" +aliases: + - /2013/03/network-adapters-disableenable/ +--- + +Last time we saw the Get-NetAdapter cmdlet from the NetAdapter module + +PS> Get-NetAdapter | ft Name, InterfaceDescription, Status -a + +Name InterfaceDescription Status +—- ——————– —— +Ethernet NVIDIA nForce 10/100/1000 Mbps Ethernet Up +WiFi Qualcomm Atheros AR5007 802.11b/g WiFi Adapter Up + +If you look in the module you also find Disable-NetAdapter & Enable-NetAdapter + +PS> Disable-NetAdapter -Name Wifi -Confirm:$false +PS> Get-NetAdapter | ft Name, InterfaceDescription, Status -a + +Name InterfaceDescription Status +—- ——————– —— +Ethernet NVIDIA nForce 10/100/1000 Mbps Ethernet Up +WiFi Qualcomm Atheros AR5007 802.11b/g WiFi Adapter Disabled + +PS> Enable-NetAdapter -Name Wifi -Confirm:$false +PS> Get-NetAdapter | ft Name, InterfaceDescription, Status -a + +Name InterfaceDescription Status +—- ——————– —— +Ethernet NVIDIA nForce 10/100/1000 Mbps Ethernet Up +WiFi Qualcomm Atheros AR5007 802.11b/g WiFi Adapter Up + +You can also enable/disable based on an Input Object, the alias (-ifalias) or the description (-InterfaceDescription) + +PS> Get-NetAdapter -Name Wifi | Disable-NetAdapter -Confirm:$false +PS> Get-NetAdapter | ft Name, InterfaceDescription, Status -a + +Name InterfaceDescription Status +—- ——————– —— +Ethernet NVIDIA nForce 10/100/1000 Mbps Ethernet Up +WiFi Qualcomm Atheros AR5007 802.11b/g WiFi Adapter Disabled + +PS> Get-NetAdapter -Name Wifi | Enable-NetAdapter -Confirm:$false +PS> Get-NetAdapter | ft Name, InterfaceDescription, Status -a + +Name InterfaceDescription Status +—- ——————– —— +Ethernet NVIDIA nForce 10/100/1000 Mbps Ethernet Up +WiFi Qualcomm Atheros AR5007 802.11b/g WiFi Adapter Up + +What"™s the alias? + +PS> Get-NetAdapter | ft Name, InterfaceDescription, ifAlias, InterfaceAlias -a + +Name InterfaceDescription ifAlias InterfaceAlias +—- ——————– ——- ————– +Ethernet NVIDIA nForce 10/100/1000 Mbps Ethernet Ethernet Ethernet +WiFi Qualcomm Atheros AR5007 802.11b/g WiFi Adapter WiFi WiFi + +If you want to use these cmdlets against remote machines you can run them through a CIMsession + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2816/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2816/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2816&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/03/network-adapters/index.md b/content/articles/2013/03/network-adapters/index.md new file mode 100644 index 000000000..4ea0f8d9e --- /dev/null +++ b/content/articles/2013/03/network-adapters/index.md @@ -0,0 +1,197 @@ +--- +url: /articles/2013-03-04-network-adapters/ +title: Network adapters +authors: + - Richard Siddaway +date: "2013-03-04T20:24:52+00:00" +aliases: + - /2013/03/network-adapters/ +--- + +The WMI classes Win32_NetworkAdapter and Win32_NetworkAdapterConfiguration have seen a lot of use over the years. They can be a bit fiddly to use which is why the NetAdapter module in Windows 8/2012 is a so welcome. + +Lets start by looking at basic information gathering + +PS> Get-NetAdapter | ft -a + +Name InterfaceDescription ifIndex Status MacAddress LinkSpeed +—- ——————– ——- —— ———- ——— +Ethernet NVIDIA nForce 10/100/1000 Mbps Ethernet 13 Up 00-1F-16-63-F5-DF 100 Mbps +WiFi Qualcomm Atheros AR5007 802.11b/g WiFi Adapter 12 Up 00-24-2B-2F-9C-A5 54 Mbps + +We get the Name & description, status, MAC address and link speed as the default display. Contrast with Win32_NetworkAdapter for the same two interfaces + +ServiceName : athr +MACAddress : 00:24:2B:2F:9C:A5 +AdapterType : Ethernet 802.3 +DeviceID : 10 +Name : Qualcomm Atheros AR5007 802.11b/g WiFi Adapter +NetworkAddresses : +Speed : 54000000 + +ServiceName : NVNET +MACAddress : 00:1F:16:63:F5:DF +AdapterType : Ethernet 802.3 +DeviceID : 11 +Name : NVIDIA nForce 10/100/1000 Mbps Ethernet +NetworkAddresses : +Speed : 100000000 + +Notice the ifIndex from Get-NetAdapter & DeviceId from Win32_NetworkAdapter. Two different numbers to identify the device. + +What else can Get-NetAdapter tell us: + +PS> Get-NetAdapter -Name Ethernet | fl * + +ifAlias : Ethernet +InterfaceAlias : Ethernet +ifIndex : 13 +ifDesc : NVIDIA nForce 10/100/1000 Mbps Ethernet +ifName : Ethernet_7 +DriverVersion : 73.3.0.0 +LinkLayerAddress : 00-1F-16-63-F5-DF +MacAddress : 00-1F-16-63-F5-DF +Status : Up +**LinkSpeed : 100 Mbps +MediaType : 802.3 +PhysicalMediaType : 802.3 +AdminStatus : Up +MediaConnectionState : Connected +**DriverInformation : Driver Date 2010-03-04 Version 73.3.0.0 NDIS 6.20 +DriverFileName : nvmf6232.sys +NdisVersion : 6.20 +ifOperStatus : Up +Caption : +Description : +ElementName : +InstanceID : {188C370D-AD90-46F3-8AD2-0C10AFB6490C} +CommunicationStatus : +DetailedStatus : +HealthState : +InstallDate : +Name : Ethernet +OperatingStatus : +OperationalStatus : +PrimaryStatus : +StatusDescriptions : +AvailableRequestedStates : +EnabledDefault : 2 +EnabledState + : 5 +OtherEnabledState : +RequestedState : 12 +TimeOfLastStateChange : +TransitioningToState : 12 +AdditionalAvailability : +Availability : +CreationClassName : MSFT_NetAdapter +DeviceID : {188C370D-AD90-46F3-8AD2-0C10AFB6490C} +ErrorCleared : +ErrorDescription : +IdentifyingDescriptions : +LastErrorCode : +MaxQuiesceTime : +OtherIdentifyingInfo : +PowerManagementCapabilities : +PowerManagementSupported : +PowerOnHours : +StatusInfo : +SystemCreationClassName : CIM_NetworkPort +SystemName : RSLAPTOP01 +TotalPowerOnHours : +MaxSpeed : +OtherPortType : +PortType : +RequestedSpeed : +Speed : 100000000 +UsageRestriction : +ActiveMaximumTransmissionUnit : 1500 +AutoSense : +FullDuplex : True +LinkTechnology : +NetworkAddresses : {001F1663F5DF} +OtherLinkTechnology : +OtherNetworkPortType : +PermanentAddress : 001F1663F5DF +PortNumber : 0 +Support + edMaximumTransmissionUnit : +AdminLocked : False +ComponentID : pci\ven_10de&dev_0760 +ConnectorPresent : True +DeviceName : \Device\{188C370D-AD90-46F3-8AD2-0C10AFB6490C} +DeviceWakeUpEnable : False +DriverDate : 2010-03-04 +DriverDateData : 129121344000000000 +DriverDescription : NVIDIA nForce 10/100/1000 Mbps Ethernet +DriverMajorNdisVersion : 6 +DriverMinorNdisVersion : 20 +DriverName : \SystemRoot\system32\DRIVERS\nvmf6232.sys +DriverProvider : NVIDIA +DriverVersionString : 73.3.0.0 +EndPointInterface : False +**HardwareInterface : True +**Hidden : False +HigherLayerInterfaceIndices : {26} +IMFilter : False +InterfaceAdminStatus : 1 +InterfaceDescription : NVIDIA nForce 10/100/1000 Mbps Ethernet +InterfaceGuid : {188C370D-AD90-46F3-8AD2-0C10AFB6490C} +InterfaceIndex : 13 +InterfaceName : Ethernet_7 +InterfaceOperationalStatus : 1 +InterfaceType : 6 +iSCSIInterface : False +LowerLayerInterfaceIndices : +MajorDriverVersion : 73 +MediaConnectState : 1 +MediaDuplexState : 2 +MinorDriverVersion : 30 +**MtuSize : 1500 +**NdisMedium : 0 +NdisPhysicalMedium : 14 +NetLuid &n + bsp; : 1688849977704448 +NetLuidIndex : 7 +NotUserRemovable : False +OperationalStatusDownDefaultPortNotAuthenticated : False +OperationalStatusDownInterfacePaused : False +OperationalStatusDownLowPowerState : False +OperationalStatusDownMediaDisconnected : False +PnPDeviceID : PCI\VEN_10DE&DEV_0760&SUBSYS_360A103C&REV_A2\3&2411E6FE&0&50 +**PromiscuousMode : False +**ReceiveLinkSpeed : 100000000 +State : 2 +TransmitLinkSpeed : 100000000 +Virtual : False +VlanID : +WdmInterface : False +PSComputerName : +**CimClass : ROOT/StandardCimv2:MSFT_NetAdapter +**CimInstanceProperties : {Caption, Description, ElementName, InstanceID...} +CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties + +Notice the CimClass property ROOT/StandardCimv2:MSFT_NetAdapter – this is one of the new WMI classes introduced in Windows 8. Does this class have any methods? + +Get-CimClass -Namespace ROOT/StandardCimv2 -ClassName MSFT_NetAdapter | select -ExpandProperty CimClassMethods + +Name +—- +RequestStateChange +SetPowerState +Reset +EnableDevice +OnlineDevice +QuiesceDevice +SaveProperties +RestoreProperties +Enable +Disable +Restart +Lock +Unlock +Rename + +These will be investigated in other posts "“ maybe we get cmdlets to work with these as well + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2815/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2815/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2815&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/03/phillyposh-03072013-meeting-summary-and-presentation-materials/index.md b/content/articles/2013/03/phillyposh-03072013-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..bb89440ad --- /dev/null +++ b/content/articles/2013/03/phillyposh-03072013-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,42 @@ +--- +url: /articles/2013-03-10-phillyposh-03072013-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 03/07/2013 meeting summary and presentation materials +authors: + - John Mello +date: "2013-03-10T23:06:50+00:00" +aliases: + - /2013/03/phillyposh-03072013-meeting-summary-and-presentation-materials/ +--- + +1. [John Mello][1] gave a brief overview of the history of the Scripting Games and an overview of the beginner events from the 2013 Winter Scripting Camp. A copy of his presentation and 2013 Winter Scripting Camp submissions can be found [here][2]. + 2. [Lido Paglia][3] gave an overview of the advanced events from the 2013 Winter Scripting Camp in addition to doing an in-depth review of [Don Jones][4]"™ [Winter Scripting Camp Post Mortem][5]. A copy of his 2013 Winter Scripting Camp submissions can be found [here][6]. + 3. Various other information worth mentioning: + 1. Group member [Greg Martin][7] presented a problem he ran into creating a COM object in PowerShell to hold an instance of Internet Explorer which he would then use to open a page. Stepping through the script worked fine, but running the script failed.  The issue was that the object would more often than not be blank when he tried to reference it. The group offered some + suggestions and ideas to work around the issue which later helped Greg find the root cause. A breakdown of the problem and final solution can be found on [Greg"™s Blog][8] + 2. Need help making sure your script is not using aliases? Take a look at [Jeff Hicks convert to Alias function!][9] + 3. Following up on [Lido Paglia][3]"™s discussion of [Don Jones][4]"™ [Winter Scripting Camp Post Mortem][5], here is a list of approved verbs and naming conventions for PowerShell directly from Microsoft: + 1. + 2. + 4. [The][10] [PowerShell Mississippi User Group][11] is offering a series of [online meetings every 2nd Tuesday of the month at 8:30PM CST for the rest of 2013][12]. The speaker line-up is an impressive who"™s who of PowerShell MVPs! + 5. Check out the [Windows 7 Resource Kit PowerShell Pack][13], which contains over 800 scripts in 10 different modules. For example : + 1. ISE shortcuts + 2. Task Scheduler + 3. PowerShell Image manipulation + 4. And many more! + 4. Post Meeting announcement + 1. [Lido Paglia][3] came in 2nd place in the [2013 Winter Scripting Camp][14]! Give him a high five next time you see him! + + [1]: http://mellositmusings.com/ + [2]: https://powershell.org/wp-content/uploads/2013/03/PhillPosh_2013-03-04_PT1.zip + [3]: http://paglia.org/ + [4]: http://donjones.com/ + [5]: https://powershell.org/2013/02/11/winter-scripting-camp-the-post-mortem/ + [6]: https://powershell.org/wp-content/uploads/2013/03/PhillPosh_2013-03-04_PT2.zip + [7]: http://tiki.gmartin.org/ + [8]: http://tiki.gmartin.org/tiki-view_blog_post.php?postId=181 + [9]: http://jdhitsolutions.com/blog/2011/04/powershell-ise-alias-to-command/ + [10]: http://msdn.microsoft.com/en-us/library/windows/desktop/ms714395(v=vs.85).aspx + [11]: http://mspsug.com/ + [12]: http://mspsug.com/2013/02/27/mississippi-powershell-user-group-speaker-lineup-for-2013/ + [13]: http://blogs.msdn.com/b/powershell/archive/2009/10/15/introducing-the-windows-7-resource-kit-powershell-pack.aspx + [14]: https://powershell.org/category/announcements/scripting-games/ diff --git a/content/articles/2013/03/powershell-3-sdk-samples/index.md b/content/articles/2013/03/powershell-3-sdk-samples/index.md new file mode 100644 index 000000000..8470b1e7f --- /dev/null +++ b/content/articles/2013/03/powershell-3-sdk-samples/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-03-21-powershell-3-sdk-samples/ +title: PowerShell 3 SDK samples +authors: + - Richard Siddaway +date: "2013-03-21T19:49:18+00:00" +aliases: + - /2013/03/powershell-3-sdk-samples/ +--- + +A sample pack for the SDK is now available - see [http://blogs.msdn.com/b/powershell/archive/2013/03/17/windows-powershell-3-0-sample-pack.aspx][1] + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2817/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2817/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2817&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: http://blogs.msdn.com/b/powershell/archive/2013/03/17/windows-powershell-3-0-sample-pack.aspx "http://blogs.msdn.com/b/powershell/archive/2013/03/17/windows-powershell-3-0-sample-pack.aspx" diff --git a/content/articles/2013/03/powershell-summit-2014-planning-continues/index.md b/content/articles/2013/03/powershell-summit-2014-planning-continues/index.md new file mode 100644 index 000000000..154a3ef21 --- /dev/null +++ b/content/articles/2013/03/powershell-summit-2014-planning-continues/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2013-03-08-powershell-summit-2014-planning-continues/ +title: PowerShell Summit 2014 Planning Continues +authors: + - Don Jones +date: "2013-03-08T15:09:16+00:00" +categories: + - PowerShell Summit +aliases: + - /2013/03/powershell-summit-2014-planning-continues/ +--- + +In an effort to keep folks as fully informed as possible, I'll periodically share information about the Summit for next year. In this update, I want to explain how we're hoping to address some of the issues (all good ones, actually) that we've experienced with the 2013 event. + + +First, the 2013 event sold out _fast._ We have a fire code limit of about 100 people and we hit it quickly - and our wait list ballooned to almost as many people. The moral of that story is that (a) we need more space and (b) people gotta sign up quicker if they want a spot! This is like grabbing those U2 tickets - camp out overnight and snap 'em up. So we're hoping to be in the Microsoft Conference Center (MSCC) on campus, which should allow us around 250 attendees in 2014. We can't book that space until about a year out, we're told, but once we can start booking we will announce it here. Our 2013 alumni will get first dibs, and we'll have about 25 early bird tickets to sell. We expect pricing to be about $700 for those, and about $850 for full-price tickets, plus about $40-$50 in ticketing fees (which covers credit card merchant fees and the ticketing company fee). +Second, we _will_ offer tickets as soon as we can do so. That may include an "I'm Feeling Lucky" ticket even before we know our dates (we're still aiming for April 2014). However, due to changing regulations, we can only offer refunds for 30 days after you make your purchase, or (due to logistics) until February 1st, _whichever comes first._ That's something you'll have to take into account. +Third, we're going to make the waitlist process a bit more automated, and give you the ability to use the waitlist to sell your ticket to someone else if you change your mind about attending. People will be able to waitlist on PowerShell.org, and prospective ticket-sellers will be able to offer tickets to that list. You're on your own for completing the transaction (we suggest PayPal), and you simply notify us of the transfer once it's complete. +Fourth, in case the question of recording the sessions comes up again, here's the deal. It's expensive. We've looked into it, and we'll need about $8,000 in equipment, which is a one-time expense that will let us record sessions with a minimum of on-site labor. So we're going to launch an IndieGoGo campaign in late 2013 to try and raise that money. Contributors will receive (depending on the amount they contribute) access to all future Summit recordings, a discount on Summit recordings for 2014, or full access to the 2014 recordings. If we don't meet our goal, we won't record, and everyone gets their money back. If we do meet our goal, only contributors will get access to the 2014 videos. However, in subsequent years we will sell (for a nominal fee) access to the videos to the public - that'll happen after the Summit is over. In years where the Summit sells out, we'll put the videos online for free (unless we need to recoup labor costs, in which case there might still be a nominal fee). This is the fair-est approach we could come up with that balances our need to have a successful on-site event (without the paying attendees, we can't do this thing at all) and to accommodate the needs of folks who can't possibly attend. +Fifth, we still have no word on any events outside the US, and probably will not. We are simply not pursuing it at this time. It gets very complicated when a US business starts doing events in other countries, and we don't have the manpower or resources to tackle that right now. Several folks have expressed an interest in spearheading various non-US versions of the Summit, and most of those are going nowhere. One problem is that, in Europe, nobody appears interested in a "Euro Summit;" they all want one in their own country, which makes the whole endeavor financially risky and exponentially more complicated. There's a huge concern that if we do one in (say) Barcelona, nobody from outside that area will even come. Another problem is that the Summit involves an insane amount of work - personally, I've spent hundreds of hours on this and I know Kirk has as well, along with Jason, Jeff, and Richard, the Scripting Wife, and a few more volunteers. It's a _lot_ of work, and thus far we haven't seen anyone outside the US willing to take it on. Keep in mind that we all still _need to have our full-time jobs_ to pay for silly things like groceries and electricity; we can't afford to take out much more volunteer time. +Sixth, the 2014 Summit will look much like the 2013 Summit in terms of content: about three dozen sessions in one-hour blocks, with about 45 minutes per session (including Q&A time). We'll feed you breakfast and lunch. We _are_ going to book out a block of rooms at a nearby hotel, and will run a shuttle bus to and from that hotel (only!) and the Summit venue. That should help lower travel costs by reducing the need for a rental car. We are _not_ going to be able to hold enough rooms for all 200-250 attendees (when you hold a room, you pay for it whether it gets used or not, so the financial risk there is huge). We are hoping to block about 60 rooms - so it'll become important to book early. Once that block is sold, you're on your own - although the same hotel may well have rooms at their normal rate, which is what we're hoping will happen. +Seventh, communications with registered attendees has been a huge PITA, mainly because some providers - like ForeFront Online Protection (FOLP) have a global block against EventBrite, our ticket company. Yeah, awesome. So for 2014 we're going to use [THIS blog category][1] and our [Twitter feed][2] to "push" communications. We'll still attempt to use email, but it's just not reliable in this age of ultra-spam-blocking. So if you register, _it will be your responsibility to check for updated information._ After all, you're supposed to be the big, smart IT professional, so you should be able to figure out how to do that . +I'll continue posting updates as information is available, and we hope you'll start talking to the boss about the 2014 show. The 2013 show is **sold out**. As of right now, we are no longer to able process refunds for existing attendees, so we're no longer processing the 2013 wait list. That means it's time to start looking at the 2014 show. +Any questions, drop 'em in the comments! +Thanks! +Don + + + [1]: https://powershell.org/category/announcements/powershell-summit/ + [2]: http://twitter.com/pshsummit "Episode 218 "“ PowerScripting Podcast "“ PowerShell jokes and SQL talk with the MidnightDBAs" diff --git a/content/articles/2013/03/uk-powershell-group-session-postponement/index.md b/content/articles/2013/03/uk-powershell-group-session-postponement/index.md new file mode 100644 index 000000000..2f8b8793e --- /dev/null +++ b/content/articles/2013/03/uk-powershell-group-session-postponement/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-03-21-uk-powershell-group-session-postponement/ +title: UK PowerShell group session postponement +authors: + - Richard Siddaway +date: "2013-03-21T19:52:43+00:00" +aliases: + - /2013/03/uk-powershell-group-session-postponement/ +--- + +I"™m postponing the 26 March session on PowerShell and Hyper-V until 9 April. Invites will go out shortly + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2818/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2818/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2818&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/03/windows-8-kindle-app/index.md b/content/articles/2013/03/windows-8-kindle-app/index.md new file mode 100644 index 000000000..4ee9db9a1 --- /dev/null +++ b/content/articles/2013/03/windows-8-kindle-app/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-03-01-windows-8-kindle-app/ +title: Windows 8 Kindle app +authors: + - Richard Siddaway +date: "2013-03-01T20:22:50+00:00" +aliases: + - /2013/03/windows-8-kindle-app/ +--- + +Amazon have released an update for the Windows 8 Kindle app that appears to have resolved the corrupted display issue that occurred after every few pages of reading. + +I would recommend updating the app immediately. The app now seems to be usable. + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2814/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2814/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2814&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/03/wmi-explorer/index.md b/content/articles/2013/03/wmi-explorer/index.md new file mode 100644 index 000000000..37b067598 --- /dev/null +++ b/content/articles/2013/03/wmi-explorer/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-03-08-wmi-explorer/ +title: WMI Explorer +authors: + - Don Jones +date: "2013-03-08T16:02:33+00:00" +categories: + - Tools +aliases: + - /2013/03/wmi-explorer/ +--- + +This is a PowerShell-based WMI Explorer tool created by Marc van Orsouw (aka /\/\O\/\/). His Web site has been down for ages, but [Thomas Lee][1] was helpful enough to post a copy of this, and we're hosting it here as a backup against further unavailability. +[Download WMI Explorer][2] + + [1]: http://tfl09.blogspot.com/2013/03/wmi-explorerwheres-it-gonea-temporary.html?utm_source=twitterfeed&utm_medium=twitter + [2]: https://powershell.org/wp-content/uploads/2013/03/wmiexplorer.zip diff --git a/content/articles/2013/03/wmi-vs-cim/index.md b/content/articles/2013/03/wmi-vs-cim/index.md new file mode 100644 index 000000000..ed92aeb77 --- /dev/null +++ b/content/articles/2013/03/wmi-vs-cim/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2013-03-24-wmi-vs-cim/ +title: WMI vs CIM +authors: + - Richard Siddaway +date: "2013-03-24T12:03:24+00:00" +aliases: + - /2013/03/wmi-vs-cim/ +--- + +An email debate yesterday regarding the use of the CIM cmdlets (new in PowerShell 3) vs the WMI cmdlets made me realise that other people are probably wondering the same thing, + +The question is really part of a the semi-philosophical debate about when you should adopt new technology. + +In the case of the WMI/CIM cmdlets the resolution is fairly straightforward. + +If you are using PowerShell v2 you have to use the WMI cmdlets. + +If you are using PowerShell v3 "“ even if you are accessing legacy systems I would recommend the CIM cmdlets. There are a number of benefits to using the CIM cmdlets: + + * use of WSMAN for remote access "“ no more DCOM error. You can drop back to DCOM for accessing systems with WSMAN 2 installed + * use of CIM sessions for accessing multiple machines + * Get-CIMClass for investigating WMI classes + * improved way of dealing with WMI associations + +As far as I am aware the only thing the CIM cmdlets can"™t do is access amended qualifiers such as the class description. Seeing that many classes don"™t that set it"™s not a major hardship. + +Now that I"™ve recommended you should use them I"™d better show you how "“ that will cover a mini-series of posts over the next few days + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2819/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2819/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2819&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/04/2013-scripting-games-competitor-guide-for-the-public-too/index.md b/content/articles/2013/04/2013-scripting-games-competitor-guide-for-the-public-too/index.md new file mode 100644 index 000000000..8931e88e7 --- /dev/null +++ b/content/articles/2013/04/2013-scripting-games-competitor-guide-for-the-public-too/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2013-04-02-2013-scripting-games-competitor-guide-for-the-public-too/ +title: 2013 Scripting Games Competitor Guide (for the Public, too!) +authors: + - Don Jones +date: "2013-04-02T14:58:41+00:00" +categories: + - Scripting Games +aliases: + - /2013/04/2013-scripting-games-competitor-guide-for-the-public-too/ +--- + +Our Competitor Guide is now online - you can download it here: +[2013 Competitor Guide][1] +We're doing things a bit differently this year. We'll be engaging the overall PowerShell community for numeric grades - and those _doing_ the grading have an awesome chance to win some great prizes! Our expert Judges will be focused on commentary, making this even more of a learning event. Download the Guide and see what's in store - the Games are scheduled to start the week of April 22nd. +As a note, you should get used to checking our Scripting Games Announcements thread (https://powershell.org/category/announcements/scripting-games/) so that you don't miss any goodies. + + [1]: https://powershell.org/wp-content/uploads/2013/04/2013CompetitorGuide.pdf diff --git a/content/articles/2013/04/2013-scripting-games-judges/index.md b/content/articles/2013/04/2013-scripting-games-judges/index.md new file mode 100644 index 000000000..d85f63e95 --- /dev/null +++ b/content/articles/2013/04/2013-scripting-games-judges/index.md @@ -0,0 +1,39 @@ +--- +url: /articles/2013-04-06-2013-scripting-games-judges/ +title: 2013 Scripting Games Judges +authors: + - Don Jones +date: "2013-04-06T12:32:23+00:00" +categories: + - Scripting Games +aliases: + - /2013/04/2013-scripting-games-judges/ +--- + +As described in the 2013 Scripting Games Competitors' Guide, our expert judges this year will not be awarded numeric scores. Frankly, folks seem more interested in having their entries peer-reviewed than just getting a number - and why not? Expert review is a great way to learn! Unfortunately, there aren't enough judges in the world to review all the entries we'll receive, so our judges will be picking their own "best and worst" lists, and commenting on those (taking care to not reveal authors' names, as much as possible). + + +Our judges will be blogging either here on PowerShell.org, or on their own blogs; we've asked them to all at least post links here at PowerShell.org so that you can find their write-ups. You can use the [Judges' Notes blog category][1] to find their posts - and hopefully learn something! +This year's judges (in no special order, other than this is how they're in my address book for some reason): + + * Jan Egil Ring + * Jonathan Medd + * Bartek Bielawski + * Sean Kearney + * Richard Siddaway + * Mark Schill + * Art Beane + * Jason Helmick + * Ed Wilson + * Oliver Lipkau + * Glenn Sizemore + * Tobias Weltner + * Boe Pox + * Bhargav Shukla + +Thanks so much to these folks - they're going to be donating a LOT of time to review entries, pick out ones they love, point out ones that could use improvement, and above all tell us _why_ so that we can all learn to do better. +The idea is to have a diversity of opinions. Multiple judges may latch on to the same entries and offer differing advice - and that's _awesome_, because it helps us all develop new approaches, and understand that in PowerShell there are very few "one, right ways" to do anything. +The Games begin April 22nd! + + + [1]: https://powershell.org/category/announcements/scripting-games/judges-notes/ diff --git a/content/articles/2013/04/2013-scripting-games-mighty-panel-of-celebrity-judges/index.md b/content/articles/2013/04/2013-scripting-games-mighty-panel-of-celebrity-judges/index.md new file mode 100644 index 000000000..1981d732b --- /dev/null +++ b/content/articles/2013/04/2013-scripting-games-mighty-panel-of-celebrity-judges/index.md @@ -0,0 +1,39 @@ +--- +url: /articles/2013-04-06-2013-scripting-games-mighty-panel-of-celebrity-judges/ +title: "2013 Scripting Games' Mighty Panel of Celebrity Judges" +authors: + - Don Jones +date: "2013-04-06T12:21:38+00:00" +categories: + - Scripting Games +aliases: + - /2013/04/2013-scripting-games-mighty-panel-of-celebrity-judges/ +--- + +As revealed in the [2013 Scripting Games Competitors' Guide](/games/), the 2013 Games will invite the community in general to award numeric votes for entries. Our expert judges will instead focus on commentary, helping make the Games into an even better learning experience. They'll be commenting without revealing competitors' names, and even if you don't recognize your entry in their comments, you'll hopefully find plenty to learn from. + + +Our top prizes, however, will be awarded by a Mighty Panel of Celebrity Judges. They'll review all the other judges' top picks, stack-rank them, and through some Ingenious Number Crunchingâ„¢ award the top prizes. +Bet you'd like to meet the judges. + + * **Don Jones** (that's me) is a Windows PowerShell MVP Award recipient, author of bazillions of books, and one of the most well-known PowerShell educators out there. + * **Jeffery Hicks** is also a PowerShell MVP, has also written gobs of books, and does more than a little PowerShell education here and there. + * **June Blender** is a former PowerShell team member (who wrote the Get-Help help), still a big PowerShell enthusiast, and has spent a ton of time figuring out how people learn to use the shell. + * **Ed Wilson** is the Scripting Guy, and needs absolutely no more introduction than that. He's single-handedly kept scripting alive, and helps us all learn every day with the "Hey, Scripting Guy!" blog. + * **Jon White** - As a member of the PowerShell feature team since its inception, Jon  was the first person in the world to write a production PowerShell script. + * **David Simmons** is a proud new member of the PowerShell team, but follower within Microsoft since its early days, and has been involved since the 1980"™s outside of and within Microsoft in development of hi-performance dynamic languages and their runtime engines including various JavaScript engines. + +Finally, this year we're proud to bring a member of the community on board as a judge. Selected from the top posters in the PowerShell.org forums, I bring you... + + + **Jakub JareÅ¡** (nohandle in the forums), who lives in Prague, Czech Republic. + + +Meet him in his own words: + + + Since 2008 he works for Trask solutions a.s. as a system engineer focused on Microsoft desktop operating systems. He enjoys competition and solving problems that everyone else gave up on. Jakub is pretty new to the PowerShell language and the community, he is scripting roughly a year, but during that time he spent all of his free time and energy learning to unleash the power in PowerShell. He is a member of the PowerShell.org, Powershell.com forums, guest writer on PowershellMagazine.com and blogs on PowerShell.cz. + + +Welcome, Jakub! This just goes to show that the PowerShell community truly is a diverse one that's constantly growing. I hope _everyone_ will be excited about grading the entries we'll get for each event, and showing your support for your fellow competitors. +The Games commence on April 22nd, 2013! diff --git a/content/articles/2013/04/2013-scripting-games-schedule/index.md b/content/articles/2013/04/2013-scripting-games-schedule/index.md new file mode 100644 index 000000000..a2071e747 --- /dev/null +++ b/content/articles/2013/04/2013-scripting-games-schedule/index.md @@ -0,0 +1,41 @@ +--- +url: /articles/2013-04-03-2013-scripting-games-schedule/ +title: 2013 Scripting Games Schedule +authors: + - Don Jones +date: "2013-04-04T06:26:31+00:00" +categories: + - Scripting Games +aliases: + - /2013/04/2013-scripting-games-schedule/ +--- + +Registration for the 2013 Scripting Games will begin April 22nd (check this post in case we need to make a change to that). You will register for **either** the Beginner or Advanced track. + + + * [Get the Beginner Track Practice Event][1] + * [Get the Advanced Track Practice Event][2] + +Each event will kick off on a Thursday, which is when you will be able to download the event details in a PDF file. You will have until the end of the following Monday to upload your one and only entry. Please pay attention to the time zone information displayed on the Web site so that you don't misunderstand when the event starts and stops! +The dates in this schedule refer to 00:00 hours, GMT, on the date given. So "April 25" means "00:00 hours on April 25, GMT," or just as the clock ticks from April 24 to April 25 GMT. This is especially important for the end time - "April 30" means "as soon as it stops being April 29, GMT." + + * Event 1 starts April 25, ends April 30. Voting runs April 30 to May 7. + * Event 2 starts May 2, ends May 7. Voting runs May 7 to May 14. + * Event 3 starts May 9, ends May 14. Voting runs May 14 to May 21. + * Event 4 starts May 16, ends May 21. Voting runs May 21 to May 28. + * Event 5 starts May 23, ends May 28. Voting runs May 28 to June 4. + * Event 6 starts May 30, ends June 4. Voting runs June 4 to June 11. + +For each event, you get to upload one and only one entry - and once uploaded, you may not change, revise, correct, or alter your entry. +**In each case,** our commenting judges will be asked to post comments +during the voting period + following each event. Our celebrity judges will announce the top winners for each event about one week after the voting period ends. [We will post those announcements right here][3]. +Tuesday morning after the event closes, the event opens for public viewing, which is when people can vote on your entry and our judges can comment. Voting runs for one week following event close (Tuesday to Tuesday). +**Remember: Even if you're not competing, you can vote on other people's entries. Voting is one of the best ways to win prizes in the Games this year, as each vote counts as a "raffle ticket" to one of our many prizes.** +Registration and all other URLs will be prominently posted on the [2013 Scripting Games Home Page][4]. + + + [1]: https://powershell.org/games/BeginnerPractice.pdf + [2]: https://powershell.org/games/AdvancedPractice.pdf + [3]: https://powershell.org/category/announcements/scripting-games/ + [4]: https://powershell.org/games diff --git a/content/articles/2013/04/_index.md b/content/articles/2013/04/_index.md new file mode 100644 index 000000000..581d3685e --- /dev/null +++ b/content/articles/2013/04/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from April 2013" +description: "PowerShell.org Articles published in April 2013." +--- diff --git a/content/articles/2013/04/ad-management-in-a-month-of-lunches-chapter-9-in-meap/index.md b/content/articles/2013/04/ad-management-in-a-month-of-lunches-chapter-9-in-meap/index.md new file mode 100644 index 000000000..119a9a29b --- /dev/null +++ b/content/articles/2013/04/ad-management-in-a-month-of-lunches-chapter-9-in-meap/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-04-29-ad-management-in-a-month-of-lunches-chapter-9-in-meap/ +title: "AD Management in a Month of Lunches\"“ chapter 9 in MEAP" +authors: + - Richard Siddaway +date: "2013-04-29T18:23:15+00:00" +aliases: + - /2013/04/ad-management-in-a-month-of-lunches-chapter-9-in-meap/ +--- + +The MEAP for AD Management in a Month of Lunches has been updated with the release of chapter 9 on managing group policies + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2844/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2844/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2844&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/04/ad-management-in-a-month-of-lunches/index.md b/content/articles/2013/04/ad-management-in-a-month-of-lunches/index.md new file mode 100644 index 000000000..46203d0fa --- /dev/null +++ b/content/articles/2013/04/ad-management-in-a-month-of-lunches/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-04-06-ad-management-in-a-month-of-lunches/ +title: AD Management in a Month of Lunches +authors: + - Richard Siddaway +date: "2013-04-06T15:40:22+00:00" +aliases: + - /2013/04/ad-management-in-a-month-of-lunches/ +--- + +The MEAP marches on with chapter 8 now released: + +Chapter 8 "“ creating Group Policies + +details from [http://www.manning.com/siddaway3/][1] + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2826/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2826/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2826&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: http://www.manning.com/siddaway3/ "http://www.manning.com/siddaway3/" diff --git a/content/articles/2013/04/advanced-practice-event/index.md b/content/articles/2013/04/advanced-practice-event/index.md new file mode 100644 index 000000000..5cb33c3d5 --- /dev/null +++ b/content/articles/2013/04/advanced-practice-event/index.md @@ -0,0 +1,55 @@ +--- +url: /articles/2013-04-20-advanced-practice-event/ +title: Advanced Practice Event +authors: + - Don Jones +date: "2013-04-20T16:00:56+00:00" +categories: + - Scripting Games +aliases: + - /2013/04/advanced-practice-event/ +--- + +I want to direct your attention to [this forums post][1], which I think is worth anyone's time to look through. I've left a pretty long reply with some comments on the entry that would also be worth a read. +I find that a LOT of folks - like the gentleman who posted his script - have a really good approach to PowerShell scripts. They want to use parameters. They want verbose output. They want to proactively check for errors. Where I think folks get lost is in the fine points of how PowerShell enables these features. I see folks working harder than they need to, coding functionality that the shell will actually give them for free. I also see some not-entirely-perfect approaches to things like parameters and error handling, and some occasional mis-use of advanced features (I often see SupportsShouldProcess _declared_ but not actually _implemented_). +Sometimes, this simply happens because a lot of these advanced features aren't well-documented in one convenient spot - they're all spread out - and because folks are learning from blog posts, which may themselves have been written by someone with an incomplete understanding. Or, they're pasting bits together without _really_ knowing what they're doing. That's cool - what you have to sometimes do is take a whack at something like this poster did, and get some feedback. I'm _really_ glad he did, because it offers an opportunity to clear up some misunderstandings, which will just make his scripts even better in the future. +I hope everyone's looking at the Games as a learning opportunity. I hope _everyone_ will vote on folks' entries and leave comments when they do; I hope as many people as possible spend some time blogging about what  they see, what they've learned, and _what they don't understand._ That's how we'll all improve. +Let me give you a perfect example (we're no longer discussing the forums post, here - I'm moving on to a new topic): + + +`Try { + $continue = $true + $bios = Get-WmiObject -class Win32_BIOS -computername $computer -EA Stop +} Catch { + $continue = $false + $computer | Out-File errors.txt -append +} +if ($continue) { + $os = Get-WmiObject -class Win32_OperatingSystem -computername $computer + # and so on... +} +`This is how I used to code for error handling when querying multiple WMI classes. I'd set a "flag" variable, $continue, to $false if the first WMI call failed, so that I didn't waste time on subsequent calls. Note that this is just a snippet; it isn't an entire script. Then I had a student who coded it this way: + + +`Try { + $bios = Get-WmiObject -class Win32_BIOS -computername $computer -EA Stop + $os = Get-WmiObject -class Win32_OperatingSystem -computername $computer + # and so on... +} Catch { + $computer | Out-File errors.txt -append +} +`Much more concise, and same effect. If the first WMI call fails, I jump into the Catch block, and skip the remaining code anyway. So there are constantly learning opportunities in seeing someone else's approach. For me, I learn new approaches that are sometimes better than what I've been doing. I also learn how to better teach PowerShell to people, by seeing common mistakes and misunderstandings. It's great to share your failures - that's how we grow! +**Update:** Someone dropped me a line and made a couple of points, which I want to address: + +> In the reply to the blog post you say: "Please consider properly setting -ErrorAction on the command (Get-WmiObject, in your case) and using a Try/Catch construct to actually handle errors, not just hide them." The example shown does the exact opposite. Any terminating error is caught, logged to a file, but not re-thrown effectively hiding the exception. + +I disagree. First, _handling_ an error _may still involve suppressing the error message._ But I'm suppressing it for just one command, not the entire script; I'm also _handling_ the error by, in my case, logging it to a file. How you choose to handle may differ. What I don't want to do is toss a terminating exception - I'm in a loop, and want my command to continue processing the next object. + +> Also the $os  = ... part is missing the -errorAction STOP. + +That's deliberate. If there's going to be an _anticipated_ error - lack of connectivity, bad credentials, etc., I'm going to get an error on the first WMI call ($bios). I'll trap it, log it, and move on to the next computer (one presumes those snippets of mine are running in a loop of some kind, processing one computer at a time). If there's an _unexpected_ error, like a corrupt WMI repository or something, the second WMI call ($os) will explode, generating an error that I very much want to see, because I didn't anticipate it. +Notice a word that I used a lot there: "I." I'm coding the script for the way _I_ want to it to run. _I_ want anticipated errors logged, and _I_ want unanticipated errors to continue exploding. _You_ may want your scripts to do different things. I'm not putting these snippets out there as the One True Way To Code, because there's no such thing. What I _am_ saying is that you need to _think about_ why you're coding the way you are, and have some justification for it. +Globally suppressing error messages, but not doing anything to handle errors that you do suppress, is a poor practice. Beyond that, do what you need to do. I'm fine with someone suppressing an error _they've dealt with._ But if your code isn't dealing with it, then the person running the script needs to see something's gone wrong. + + + [1]: https://powershell.org/discuss/viewtopic.php?f=39&t=1810&p=8059#p8059 diff --git a/content/articles/2013/04/beginner-practice-event/index.md b/content/articles/2013/04/beginner-practice-event/index.md new file mode 100644 index 000000000..a5ffc36f6 --- /dev/null +++ b/content/articles/2013/04/beginner-practice-event/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2013-04-18-beginner-practice-event/ +title: Beginner Practice Event +authors: + - Don Jones +date: "2013-04-18T19:07:38+00:00" +categories: + - Scripting Games +aliases: + - /2013/04/beginner-practice-event/ +--- + +As you may be aware, we posted [Practice Events for the 2013 Scripting Games][1], in an effort to give people an idea of what the events would look like and involve. There's been a [lively discussion][2] in the PowerShell.org forums about the Beginner Practice, so I thought I'd weigh in. Here's my solution: +[![Beginner practice event](https://powershell.org/wp-content/uploads/2013/04/VMware-FusionScreenSnapz001.png)](https://powershell.org/wp-content/uploads/2013/04/VMware-FusionScreenSnapz001.png) +Of course, that's hardly the only way to go about it. I used this approach because it minimizes the use of extra variables, and doesn't create a script-style approach - it's a "one-liner," although I've broken it across several physical lines for readability. I think it makes good use of PowerShell's native ability to deal with multiple objects in a stream - there's no need for a ForEach loop, here. + + [1]: https://powershell.org/2013/04/03/2013-scripting-games-schedule/ + [2]: https://powershell.org/discuss/viewtopic.php?f=39&t=1674 diff --git a/content/articles/2013/04/busy-busy-busy-2/index.md b/content/articles/2013/04/busy-busy-busy-2/index.md new file mode 100644 index 000000000..5b9f22bf8 --- /dev/null +++ b/content/articles/2013/04/busy-busy-busy-2/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-04-13-busy-busy-busy-2/ +title: Busy, busy, busy +authors: + - Richard Siddaway +date: "2013-04-13T17:17:13+00:00" +aliases: + - /2013/04/busy-busy-busy-2/ +--- + +A very busy time coming up in PowerShell land with the first PowerShell Summit kicking off in just over a week"™s time. The 2013 Scripting Games will also be starting very soon. + +I"™ll try and post about both of them as time allows + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2832/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2832/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2832&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/04/changes-coming-to-powershell-org/index.md b/content/articles/2013/04/changes-coming-to-powershell-org/index.md new file mode 100644 index 000000000..2d0f87b14 --- /dev/null +++ b/content/articles/2013/04/changes-coming-to-powershell-org/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2013-04-15-changes-coming-to-powershell-org/ +title: Changes Coming to PowerShell.org +authors: + - Don Jones +date: "2013-04-15T20:34:04+00:00" +categories: + - Announcements +aliases: + - /2013/04/changes-coming-to-powershell-org/ +--- + +If you've been on the site today, you've doubtless noticed some of the visual changes. In addition to providing a simpler theme that - over time - will be more mobile-friendly, we're also lining up for a major move of our discussion forums. That'll probably happen after TechEd, but we may be able to squeeze it in prior. + + +The existing forums are fine, but they're a bit heavy in the code department, and hard to maintain. We've also gotten a bit bloated with the categories. Sorry about that. Anyway, the plan is to move to an integrated forums, a simpler hierarchy, and better notification options. It'll make it a lot easier for us moderators to help answer questions. +We'll be archiving the old content, so it'll still be accessible and searchable. However... and here's the rub... we're gonna ditch your user accounts. We have to. The old database is cloggy with spambots, and we just need to get away from it. We're going to offer integrated login (Twitter, Facebook, LinkedIn, a bunch others), so you won't have to entrust your password to us any longer if you don't want to. We are not linking the old forums to this WordPress site. You'll be creating a NEW login here, and it can use those external authentication systems. The NEW login you create HERE will be completely separate from any login you have in the existing, old forums. You don't need to create a new account now - you can wait until the new forums go live. +Anyway... that's all ahead. Love to hear your thoughts as we continue planning. +There's another thing: The PowerShell People site. To be honest, that was created as a kind of... game/toy. Something to see if I could do. We've gotten a few people using it but not many, and it just kind of sits there on its own. We're probably going to be spinning that down, but we're going to take what we learned from it and try and incorporate something into this main site. No firm ideas, yet, and we'd appreciate any you may have. +In the meantime, we've already implemented a few changes. The new site theme is perhaps the most obvious; you'll notice that we've also moved a lot of static pages - like the newsletter, Scripting Games, and Summit pages - into the new theme. We've also enabled single sign-on to the site, using Facebook, Twitter, Google, OpenID, WordPress.com, and Live ID (or whatever Microsoft is calling it this week). +Thanks! diff --git a/content/articles/2013/04/cim-cmdlets-vs-wmi-cmdlets-speed-of-execution/index.md b/content/articles/2013/04/cim-cmdlets-vs-wmi-cmdlets-speed-of-execution/index.md new file mode 100644 index 000000000..e3251440d --- /dev/null +++ b/content/articles/2013/04/cim-cmdlets-vs-wmi-cmdlets-speed-of-execution/index.md @@ -0,0 +1,81 @@ +--- +url: /articles/2013-04-28-cim-cmdlets-vs-wmi-cmdlets-speed-of-execution/ +title: "CIM cmdlets vs WMI cmdlets\"“speed of execution" +authors: + - Richard Siddaway +date: "2013-04-28T21:04:47+00:00" +aliases: + - /2013/04/cim-cmdlets-vs-wmi-cmdlets-speed-of-execution/ +--- + +One question that came up at the summit was the comparative speed of execution of the new CIM cmdlets vs the old WMI cmdlets. No of us knew the answer because we"™d never tried measuring the speed. + +I decided to perform some tests. + +This first test is accessing the local machine. In both cases the cmdlets are using COM. WMI uses COM and CIM will use COM if a "“ComputerName parameter isn"™t used. + +The results are as follows: + +**PS> 1..100 | +foreach {Measure-Command -Expression { +1..100 | foreach {Get-WmiObject -Class Win32_ComputerSystem} } +} | Measure-Object -Average TotalMilliseconds** + +Count : 100 +Average : 2008.953978 +Sum : +Maximum : +Minimum : +Property : TotalMilliseconds + + + +**PS> 1..100 | +foreach {Measure-Command -Expression { +1..100 | foreach {Get-CimInstance -ClassName Win32_ComputerSystem} } +} | Measure-Object -Average TotalMilliseconds** + +Count : 100 +Average : 2078.763174 +Sum : +Maximum : +Minimum : +Property : TotalMilliseconds + + + +So for pure COM access the WMI cmdlets are marginally (3.4%) faster. + +What if we use the ComputerName parameter? + +**PS> 1..100 | +foreach { +Measure-Command -Expression { +1..100 | foreach {Get-WmiObject -Class Win32_ComputerSystem -ComputerName $env:COMPUTERNAME } } +} | Measure-Object -Average TotalMilliseconds** + +Count : 100 +Average : 1499.14379 +Sum : +Maximum : +Minimum : +Property : TotalMilliseconds + +**PS> 1..100 | +foreach { +Measure-Command -Expression { +1..100 | foreach {Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName $env:COMPUTERNAME } } +} | Measure-Object -Average TotalMilliseconds** + +Count : 100 +Average : 3892.921851 +Sum : +Maximum : +Minimum : +Property : TotalMilliseconds + +This one surprised me "“ the WMI cmdlets are 2.5 times faster. I suspect that is because the CIM cmdlet has to build and then breakdown the WSMAN connection each time. + +Next time we"™ll look at accessing a remote machine. + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2842/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2842/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2842&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/04/cim-vs-wmi-cmdlets-remote-execution-speed/index.md b/content/articles/2013/04/cim-vs-wmi-cmdlets-remote-execution-speed/index.md new file mode 100644 index 000000000..c4e779c58 --- /dev/null +++ b/content/articles/2013/04/cim-vs-wmi-cmdlets-remote-execution-speed/index.md @@ -0,0 +1,69 @@ +--- +url: /articles/2013-04-29-cim-vs-wmi-cmdlets-remote-execution-speed/ +title: CIM vs WMI cmdlets-remote execution speed +authors: + - Richard Siddaway +date: "2013-04-29T19:08:48+00:00" +aliases: + - /2013/04/cim-vs-wmi-cmdlets-remote-execution-speed/ +--- + +Following on from my previous post we"™ll look at how the two types of cmdlets compare for accessing remote machines. + +I used a similar format to the previous tests but was accessing a remote machine. + +First off was the WMI cmdlet "“ using DCOM to access the remote Windows 2012 server + +**PS> 1..100 | +foreach { +Measure-Command -Expression{1..100 | foreach {Get-WmiObject -Class Win32_ComputerSystem -ComputerName W12SUS }} +} | +Measure-Object -Average TotalMilliseconds** + +Count : 100 +Average : 2084.122547 +Sum : +Maximum : +Minimum : +Property : TotalMilliseconds + + + +The CIM cmdlets are similar but apparently a bit slower "“ probably due to having to build the WSMAN connection and teat it down each time. + +**PS> 1..100 | +foreach { +Measure-Command -Expression{1..100 | foreach {Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName W12SUS }} +} | +Measure-Object -Average TotalMilliseconds** + +Count : 100 +Average : 2627.287458 +Sum : +Maximum : +Minimum : +Property : TotalMilliseconds + + + +So what happens is you run the CIM command over a CIM session? + +**PS> $sess = New-CimSession -ComputerName W12SUS +PS> 1..100 | +foreach { +Measure-Command -Expression{1..100 | foreach {Get-CimInstance -ClassName Win32_ComputerSystem -CimSession $sess }} +} | +Measure-Object -Average TotalMilliseconds** + +Count : 100 +Average : 877.746649999999 +Sum : +Maximum : +Minimum : +Property : TotalMilliseconds + +This removes the setup and tear-down of the WSMAN connection. It suggests that the actual retrieval time for the CIM cmdlets should be reduced to 1749.540808 milliseconds for 100 accesses which is faster than the WMI cmdlets + +It looks like the fastest way to access WMI information is across a CIM session. Next time we"™ll look at running multiple commands + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2846/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2846/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2846&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/04/coming-tips-for-the-scripting-games/index.md b/content/articles/2013/04/coming-tips-for-the-scripting-games/index.md new file mode 100644 index 000000000..e1783a5fb --- /dev/null +++ b/content/articles/2013/04/coming-tips-for-the-scripting-games/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2013-04-05-coming-tips-for-the-scripting-games/ +title: "Coming: Tips for the Scripting Games" +authors: + - Don Jones +date: "2013-04-06T06:36:05+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/04/coming-tips-for-the-scripting-games/ +--- + +In preparation for the upcoming Scripting Games, the April 2013 issue of the free PowerShell.org TechLetter will feature tips, examples, and advice for helping you do the best in the Games! Remember that the Competitor Guide is now available, so you can start reviewing how the Games will be graded (by the community) and judged this year. +If you're not already receiving the TechLetter, subscribe by April 15th to receive the April issue in your Inbox! diff --git a/content/articles/2013/04/comments-from-the-powershell-org-survey/index.md b/content/articles/2013/04/comments-from-the-powershell-org-survey/index.md new file mode 100644 index 000000000..b6cd14ad0 --- /dev/null +++ b/content/articles/2013/04/comments-from-the-powershell-org-survey/index.md @@ -0,0 +1,47 @@ +--- +url: /articles/2013-04-19-comments-from-the-powershell-org-survey/ +title: Comments from the PowerShell.org survey +authors: + - Don Jones +date: "2013-04-19T17:09:26+00:00" +categories: + - Announcements +aliases: + - /2013/04/comments-from-the-powershell-org-survey/ +--- + +As you probably know, we've been [running a survey for PowerShell.org][1], which helps us both improve the site and create demographic information that makes us appealing to sponsors (who, you know, _pay_ for everything here). We've gotten a ton of great feedback. Yeah, we really are reading every single comment you left. +Let's start with the biggies: + +> Maybe some more guest writers for articles? I imagine it's difficult with all the articles that get posted all over the net every day, but maybe some of those folks (like the scripting guys or scripting wife) can do some to help the Powershell.org community. + +You find us guest authors, we'll give 'em a place to write. Problem is, not many folks want to write. We try to aggregate the better PowerShell-related blogs out there (we link to the original site so that we're not stealing their traffic) just as a discovery mechanism, but I'm not sure what else we could do. + +> On the forum almost every thread remains 'unsolved'. Maybe moderators can close threads, and even remove posts that are not relevant. I also see a lot of questions returning, for example on 'how to change a property in AD'. I don't know if this can be avoided, but if you know a way to diminish double threads, that would be great. + +Testify, brother. You tell me how to fix it and we'll give it a shot. The rest of the interwebz would probably like to know how to fix that, too. We can't make people click "solved," and believe it or not they get TESTY if we click it for them. Seriously. Been yelled at. And don't know how to make people search before they post. Just don't. +And now for some shorter responses: + + * **PHPBB forums for questions... just link to StackExchange.** Honestly, whatevs. We literally have at least one comment telling us to use every piece of forums software out there, and/or link to every other forum already out there. ServerFault, ExpertsExchange, we've got 'em all in here. We'll continue having our own forums mainly because it's easier to ensure newcomers (especially) get a polite answer, not a brush-off, which happens too often in some of the other forums I've seen. As for software, we're moving off of phpBB in June. + * **I don't know if that something not to like - but I do think that people should be awarded for contributing to the community.** Agreed. Looking into it. + * **forum email notifications work sporadically (does not always send an email for notices/updates)**. I'm not sure they're that sporadic - I've looked into this a LOT. A lot a lot. Problem is that people have their spam settings set to DEFCON 1, with three layers of filtering. ForeFront Online Protection, for example, had a global block against our hosting company's IP addresses that we had to get resolved - when things are blocked at that level, you'll never see it in your Spam folders. + * **I love the simplicity of the site, please DON'T make it too busy with meaningless ads and trivialites.** Dang. There goes our plans for putting ads every three inches on the page. Oh, well. + * **It needs rss feeds.** It has 'em. + * **Regarding Summit info, and especially the session registration process has been a bit confusing. I'm not sure of a single place to optionally check status updates.** I know. That's my fault. We're going to do better next time, putting everything in the "Announcements" category here. + * **There is too much fokus on American area. We need more European stuff / events.** Dude, you help us put it together, then. You live there. Asking Americans to put on a European event does not smell like a recipe for success, ya know? + * **It's not possible but it'd be nice if the moderators when stumped would reach out to the masters to get threads answered.** We really try to. Sometimes the other folks aren't all that responsive. They got jobs too, and whatnot. + * **The home page isn't very appealing - not a big complaint but it could do with a makeover.** Done. Hope you like it. The Forums will be moving, too. + * **There's a lot of good email newsletter design templates available out there to make it more reader friendly and not just a wall of text.** Well, PowerShell's pretty text-heavy. Guess we're not big GUI folks . + * **I do not like the fact that you make business around powershell.** Yeah, I'm not sure you and I agree on what a "business" is. We set up PowerShell.org, Inc., so that an entity could own the Web site and pay for its hosting. We make about enough money from sponsorships to pay those bills. Officially, PowerShell.org, Inc. is "not for profit." Nobody draws a salary or gets paid. We can't give you all of these resources for free without someone paying, and the "business" gives that money a place to go so that it is _only_ used to run the community. Nobody else can pinch off pieces of the money for their own purposes. + * **More integration / collaboration with PowerShell User Groups.** Yeah, working on it. Literally, Mark Schill (who runs that site) and I have been exchanging e-mails this morning. We both understand the value in having one place to discover user groups and keep up with their schedules; we're trying to figure out the best way to deliver the functionality user group leaders require to post that information, and where the best place is for it to all live. We'll link to it from here, wherever that turns out to be. Stay tuned. + * **Put newsletters in an online archive.** Working on it. The March switch in mail providers was in large part to facilitate this. I just need some time to finish up the programmery bits needed. + * **Live hangouts/webinars in the vein of what vBrownbag does for virtualization.** Awesome idea. You volunteering to lead 'em? Please, contact me if you are. + +Y'all had a bunch of nice things to say, too, which we all appreciate. We'll be sharing the complete survey results once it finishes running at the end of May. +But let's wrap with a big philosophical comment, because I'd really like your feedback on this one - just drop a comment below if you care to weigh in. + +> I would like to see a site that becomes the authoritative place to go for resources since Microsoft doesn't really seem all that interested any more. There are way to many sites hosting scripts and pieces of "stuff". I would really like to have "One site to rule them all." 😉 + +I get that. But... in some cases, the folks running a great resource (take PoshCode.org) want to rule their own destiny, and not become part of the collective. Nothing wrong with that - it lets them do their own thing. We're trying to just link to the best of those community resources, so that people can find them when they run across this site. If someone _wants_ to jump in and be part of PowerShell.org, we'll try and make it happen - our charter is to offer support and resources to anyone who's contributing - but we don't really lobby for them to do that. If **you** see something out there you like, and you think they should hook up with us in some fashion, tell them. + + [1]: http://674004.polldaddy.com/s/2013-powershell-org-member-survey diff --git a/content/articles/2013/04/comparing-sql-server-table-schemas-with-powershell/index.md b/content/articles/2013/04/comparing-sql-server-table-schemas-with-powershell/index.md new file mode 100644 index 000000000..fc689db55 --- /dev/null +++ b/content/articles/2013/04/comparing-sql-server-table-schemas-with-powershell/index.md @@ -0,0 +1,1953 @@ +--- +url: /articles/2013-04-28-comparing-sql-server-table-schemas-with-powershell/ +title: Comparing SQL Server table schemas with PowerShell +authors: + - Enrique Puig +date: "2013-04-28T22:44:17+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/04/comparing-sql-server-table-schemas-with-powershell/ +--- + +As a SQL Server DBA or SQL Server developer sometimes is necessary to know whether two tables have equal schemas or not. For example, a few months ago I had to consolidate two SQL Server instances in just one. One of the main problems were the collisions between Databases and Tables. I found out that both instances had Databases with equal name and the same thing happened with tables inside those databases. When consolidating databases is very important to make sure that users and apps will find the same schema they were used to find before consolidation, so in order to consolidate databases it will be necessary to find tables with different schemas, merge them and solve conflicts. + + + SQL Server provides a tool to compare schemas between databases, the tool comes with visual Studio or SQL Server Data tools with Database Projects. That could be very useful to identify schema differences among objects from both databases and see what tables have to be merged. So that"™s it, if we have a tool that provides us that functionality, why do we need PowerShell? The answer to this question is quite surprising, it happens that the tool compares schemas based on the T-SQL Code, which means that the comparison is made by using Strings. Let"™s see an example to introduce the issue. + + + If we create in SQL Server two databases with one table per database as it is showed in the following script: + + +`-------------------------- +-- Enrique Puig +-- epuig1984@gmail.com +-- Databases Demo creation +--------------------------- +--Database1 + + +create database +TableCompare +; + + +alter database +TableCompare +set recovery simple + +; + + +use +TableCompare +; + + +create table +dbo +. +TestTable + +( + +id +int identity + +( +1 +, +1 +) + +primary key + +, + +col1 +int + +not null, + +col2 +int + +not null, + +col3 +int + +not null +); + + +--Database2 + + +create database +TableCompare2 +; + + +alter database +TableCompare2 +set recovery simple + +; + + +use +TableCompare2 +; + + +create table +dbo +. +TestTable + +( + +id +int identity + +( +1 +, +1 +), + +col1 +int + +not null, + +col2 +int + +not null, + +col3 +int + +not null +); + + +--create primary key + + +alter table +dbo +. +TestTable + +add constraint +PK_TestTable +primary key + +( +id +); + +`The databases and tables look like follows: + + +[![clip_image002](https://powershell.org/wp-content/uploads/2013/04/clip_image002_thumb.jpg)](https://powershell.org/wp-content/uploads/2013/04/clip_image002.jpg) + + + Figure 1-Database comparison- + + + As it is showed in Figure 1, both Tables look exactly the same, they have: + + + * + + - Equal Name + + + + * + + - Equal number of columns + + + + * + + - Equal name of columns + + + + * + + - Equal number of keys + + + + * + + - Equal columns in every key + + + + + + + The only different thing is the name of the key, because for the first table was created automatically and in the second one it was created manually specifying a name. Does it really matter? In this case the name of the key is not relevant as long as the columns are the same. Well, if we compare it with Visual Studio 2012 we get the following results: + + +[![clip_image004](https://powershell.org/wp-content/uploads/2013/04/clip_image004_thumb.jpg)](https://powershell.org/wp-content/uploads/2013/04/clip_image004.jpg) + + + Figure 2- Database Comparison- + + + The figure 2 shows the result. According to the result the tables are not equals because of a name. This is not the logic intended for us, because when we want to consolidate tables the only thing that matters is that the table will have a primary key clustered by Id column, the name does not make a difference. So this method is going to show us **a lot of false positives** when looking for tables with different schemas. The same thing happens with some third party tools, I"™ve tried to compare objects with them and got the same result. For this example we are working with one database and only one table per database for a better understanding of the issue, but imagine when you are working with 100 database and an average of 70 or 80 tables per database, you need to make sure that you are no getting false positives identifying tables with different schemas. So here is when PowerShell comes up to save the day. + + + Using SMO we are able to create a function to compare schemas. The function looks like follows: + + +`################################################################# +## Enrique Puig Nouselles +## Epuig1984@gmail.com +## Compare SQL Server Table schemas +################################################################# + + +function + +Compare-SQLServerTables + +( + +[ + +string + +] + +$srv1 + +,[ + +string + +] + +$bd1 + +,[ + +string + +] + +$sch1 + +,[ + +string + +] + +$TableName1 + +, + [ + +string + +] + +$srv2 + +,[ + +string + +] + +$bd2 + +,[ + +string + +] + +$sch2 + +,[ + +string + +] + +$TableName2 + +) +{ + +[ + +reflection.assembly + +]:: +LoadWithPartialName( +"Microsoft.SqlServer.Smo" +) +| + +Out-Null + + +$S1 + += + +New-Object + +"Microsoft.SqlServer.Management.Smo.Server" + +$srv1 + + +if +( +$S1 + +-ne + +$null +) + { + +if +( +$S1 + +. +databases +[ + +$bd1 + +] -ne + +$null +) + { + +$tab1 + += + +$S1 + +. +databases +[ + +$bd1 + +]. +Tables +[ + +$TableName1 + +] + + +$res + += + +$tab1 + +| + +Where-Object +{ +$_ + +. +Schema +-eq + +$sch1 +} + +if +( +$res + +. +Count +-eq + + +) + { + +throw + +"Error: The schema + +$sch1 + +doesn't contain any table called + +$TableName1 + +." + +} + } + +else + +{ + +throw + +"Error: The database ' + +$bd1 + +' doesn't exist." + +} + } + +else + +{ + +throw + +"Error: We couldn't connect to the server ' + +$srv1 + +'. Please check your credentials and the servername" + +} + +$S2 + += + +New-Object + +"Microsoft.SqlServer.Management.Smo.Server" + +$srv2 + + +if +( +$S2 + +-ne + +$null +) + { + +if +( +$S2 + +. +databases +[ + +$bd2 + +] -ne + +$null +) + { + +$tab2 + += + +$S2 + +. +databases +[ + +$bd2 + +]. +Tables +[ + +$TableName2 + +] + + +$res + += + +$tab2 + +| + +Where-Object +{ +$_ + +. +Schema +-eq + +$sch2 +} + +if +( +$res + +. +Count +-eq + + +) + { + +throw + +"Error: The schema + +$sch2 + +doesn't contain any table called + +$TableName2 + +." + +} + } + +else + +{ + +throw + +"Error: The database ' + +$bd2 + +' doesn't exist." + +} + } + +else + +{ + +throw + +"Error: We couldn't connect to the server ' + +$srv1 + +'. Please check your credentials and the servername" + +} + +##check columns + + +$ncols1 + += + +$tab1 + +. +Columns +. +Count + +$ncols2 + += + +$tab2 + +. +Columns +. +Count + +$eqCols + += + +$true + $eqChecks + += + +$true + $eqIndexes + += + +$true + $resultCompare + += + +$true + + +if +( +$ncols1 + +-ne + +$ncols2 +) + { + +return + +$false +; + } + +[ + +Array + +] + +$colList + += +@() + +##check data types, nullable columns,computed columns, identity columns, persisted columns, cols with default + ## rimary keys and foreign keys + + +$tab1 + +. +Columns +| + +ForEach-Object +{ + +$c1 + += + +$_ + $aux + += + +$tab2 + +. +Columns +| + +Where-Object +{ + +$_ + +. +Name +-eq + +$c1 + +. +Name +-and + +$c1 + +. +DataType +-eq + +$_ + +. +DataType +-and + +$c1 + +. +Nullable +-eq + +$_ + +. +Nullable +-and + +$c1 + +. +Identity +-eq + +$_ + +. +Identity +-and + +$c1 + +. +IdentitySeed +-eq + +$_ + +. +IdentitySeed +-and + +$c1 + +. +Computed +-eq + +$_ + +. +Computed +-and + +$c1 + +. +ComputedText +-eq + +$_ + +. +ComputedText +-and + +$c1 + +. +DefaultConstraint +. +Text +-eq + +$_ + +. +DefaultConstraint +. +Text +-and + +$c1 + +. +InPrimaryKey +-eq + +$_ + +. +InPrimaryKey +-and + +$c1 + +. +IsPersisted +-eq + +$_ + +. +IsPersisted +-and + +$c1 + +. +IsForeignKey +-eq + +$_ + +. +IsForeignKey + } + +if +( +$aux + +-eq + +$null +) + { + +$eqCols + += + +$false + + +return +; + } + } + +#check the other way to make sure that are completely equal tables + + +if +( +$eqCols +) + { + +$tab2 + +. +Columns +| + +ForEach-Object +{ + +$c1 + += + +$_ + $aux + += + +$tab1 + +. +Columns +| + +Where-Object +{ + +$_ + +. +Name +-eq + +$c1 + +. +Name +-and + +$c1 + +. +DataType +-eq + +$_ + +. +DataType +-and + +$c1 + +. +Nullable +-eq + +$_ + +. +Nullable +-and + +$c1 + +. +Identity +-eq + +$_ + +. +Identity +-and + +$c1 + +. +IdentitySeed +-eq + +$_ + +. +IdentitySeed +-and + +$c1 + +. +Computed +-eq + +$_ + +. +Computed +-and + +$c1 + +. +ComputedText +-eq + +$_ + +. +ComputedText +-and + +$c1 + +. +DefaultConstraint +. +Text +-eq + +$_ + +. +DefaultConstraint +. +Text +-and + +$c1 + +. +InPrimaryKey +-eq + +$_ + +. +InPrimaryKey +-and + +$c1 + +. +IsPersisted +-eq + +$_ + +. +IsPersisted + } + +if +( +$aux + +-eq + +$null +) + { + +$eqCols + += + +$false + + +return +; + } + } + } + +##check constraints + ##we cannot create 2 constraints with the same name at the same database + + +$tab1 + +. +Checks +| + +ForEach-Object +{ + +$tab2 + +. +Columns +| + +ForEach-Object +{ + +$chk1 + += + +$_ + $checks + += + +$tab2 + +. +Checks +| + +Where-Object +{ +$chk1 + +. +Text +-eq + +$_ + +. +Text +-and + +$chk1 + +. +IsEnabled +-eq + +$_ + +. +IsEnabled} + +if +( +$checks + +-eq + +$null + +-or + +$checks + +. +Count +-eq + + +) + { + +$eqChecks + += + +$false + + +return +; + } + } + } + +##check it out in the other way + + +if +( +$eqChecks +) + { + +$tab2 + +. +Checks +| + +ForEach-Object +{ + +Write-Host + +"hola que ase" + + +$chk1 + += + +$_ + $checks + += + +$tab1 + +. +Checks +| + +Where-Object +{ +$chk1 + +. +Text +-eq + +$_ + +. +Text +-and + +$chk1 + +. +IsEnabled +-eq + +$_ + +. +IsEnabled} + +if +( +$checks + +-eq + +$null + +-or + +$checks + +. +Count +-eq + + +) + { + +$eqChecks + += + +$false + + +return +; + } + } + } + +##Indexes section + + +[ + +Array + +] + +$indexes1 + += +@() + +[ + +Array + +] + +$cols + += +@() + +##check indexes + + +$tab1 + +. +Indexes +| + +ForEach-Object +{ + +$ix1 + += + +$_ + + + #check index type and properties + + +$ix + += + +$tab2 + +. +Indexes +| + +Where-Object +{ + +$ix1 + +. +IsClustered +-eq + +$_ + +. +IsClustered +-and + +$ix1 + +. +HasFilter +-eq + +$_ + +. +HasFilter +-and + +$ix1 + +. +IgnoreDuplicateKeys +-eq + +$_ + +. +IgnoreDuplicateKeys +-and + +$ix1 + +. +IndexedColumns +. +Count +-eq + +$_ + +. +IndexedColumns +. +Count +-and + +$ix1 + +. +IsIndexOnComputed +-eq + +$_ + +. +IsIndexOnComputed +-and + +$ix1 + +. +IsPartitioned +-eq + +$_ + +. +IsPartitioned +-and + +$ix1 + +. +IsSpatialIndex +-eq + +$_ + +. +IsSpatialIndex +-and + +$ix1 + +. +IsUnique +-eq + +$_ + +. +IsUnique +-and + +$ix1 + +. +IsXmlIndex +-eq + +$_ + +. +IsXmlIndex + } + +if +( +$ix + +-eq + +$null + +-or + +$ix + +. +Count +-eq + + +) + { + +$eqIndexes + += + +$false + + +return +; + } + +else + +{ + +##check index column names + + +$ix1 + +. +IndexedColumns +| + +ForEach-Object +{ + +$col1 + += + +$_ + + +#Get all indexed columns + + +$cols + += + +$ix + +. +IndexedColumns +| + +Where-Object +{ + +$col1 + +. +Name +-eq + +$_ + +. +Name + } + +if +( +$cols + +-eq + +$null + +-or + +$cols + +. +Count +-eq + + +) + { + +$eqIndexes + += + +$false + + +return +; + } + } + } + } + +if +( +$eqIndexes +) + { + +$tab2 + +. +Indexes +| + +ForEach-Object +{ + +$ix1 + += + +$_ + + +#check index type and properties + + +$ix + += + +$tab1 + +. +Indexes +| + +Where-Object +{ + +$ix1 + +. +IsClustered +-eq + +$_ + +. +IsClustered +-and + +$ix1 + +. +HasFilter +-eq + +$_ + +. +HasFilter +-and + +$ix1 + +. +IgnoreDuplicateKeys +-eq + +$_ + +. +IgnoreDuplicateKeys +-and + +$ix1 + +. +IndexedColumns +. +Count +-eq + +$_ + +. +IndexedColumns +. +Count +-and + +$ix1 + +. +IsIndexOnComputed +-eq + +$_ + +. +IsIndexOnComputed +-and + +$ix1 + +. +IsPartitioned +-eq + +$_ + +. +IsPartitioned +-and + +$ix1 + +. +IsSpatialIndex +-eq + +$_ + +. +IsSpatialIndex +-and + +$ix1 + +. +IsUnique +-eq + +$_ + +. +IsUnique +-and + +$ix1 + +. +IsXmlIndex +-eq + +$_ + +. +IsXmlIndex + } + +if +( +$ix + +-eq + +$null + +-or + +$ix + +. +Count +-eq + + +) + { + +$eqIndexes + += + +$false + + +return +; + } + +else + +{ + +##check index column names + + +$ix1 + +. +IndexedColumns +| + +ForEach-Object +{ + +$col1 + += + +$_ + $cols + += + +$ix + +. +IndexedColumns +| + +Where-Object +{ + +$col1 + +. +Name +-eq + +$_ + +. +Name + } + +if +( +$cols + +-eq + +$null + +-or + +$cols + +. +Count +-eq + + +) + { + +$eqIndexes + += + +$false + + +return +; + } + } + } + } + } + +if +( +$eqCols + +-eq + +$false + +-or + +$eqChecks + +-eq + +$false + +-or + +$eqIndexes + +-eq + +$false +) + { + +$resultCompare + += + +$false + +} + +return + +$resultCompare + +} +`[][1] + + + This is a personalized function and three main blocks are checked in order to determine whether two tables have the same schema or not: + + + 1. **Columns**: In this section we check the number of columns, the name of the columns, the data types for every column, if is part of a primary key, if is part of a foreign key, if is a computed column and so on. + + + 2. **Checks**: In this section all checks defined in a table are compared. As we explained before, the name doesn"™t matter, the only thing that matters is the check definition text and the columns involved. + + + 3. **Indexes:** In this sections all the indexes are compared. The index name doesn"™t make a difference, we only check for index type, columns and so on. + + + In order to test this PowerShell function we will run a main program to test it: + + +`#main program +##Define Variables + + +$srv1 + += + +"(local)\SQLDWH" + + +$srv2 + += + +"(local)\SQLDWH" + + +$bd1 + += + +"TableCompare" + + +$bd2 + += + +"TableCompare2" + + +$sch1 + += + +"dbo" + + +$sch2 + += + +"dbo" + + +$TableName1 + += + +"TestTable" + + +$TableName2 + += + +"TestTable" + + +#function call + + +Compare-SQLServerTables + +$srv1 $bd1 $sch1 $TableName1 $srv2 $bd2 $sch2 $TableName2 + + +`[][1] + + + The result that we get by running the main program is: + + +[![clip_image005](https://powershell.org/wp-content/uploads/2013/04/clip_image005_thumb.png)](https://powershell.org/wp-content/uploads/2013/04/clip_image005.png) + + + Figure 3-Execution result- + + + Now we are getting **True** as a result, which means that both tables are equals in terms of schema. If we change the schema of one of the test tables we will get a different result. Let"™s say we change the primary for one of the tables: + + +`--alter table + + +use +TableCompare2 +; + + +alter table +TestTable + +drop constraint +PK_TestTable +; + + +alter table +TestTable + +add constraint +PK_TestTable +primary key + +( +id +, +col1 +); + +`Now the table schemas look like follows: + + +[![clip_image007](https://powershell.org/wp-content/uploads/2013/04/clip_image007_thumb.jpg)](https://powershell.org/wp-content/uploads/2013/04/clip_image007.jpg) + + + Figure 4- New Table schemas- + + + The schemas have changed as it is showed in Figure 4. The primary key of the table TestTabe in TableCompare2 Database has two keys instead of one. If we execute again our function the result is: + + +[![clip_image009](https://powershell.org/wp-content/uploads/2013/04/clip_image009_thumb.jpg)](https://powershell.org/wp-content/uploads/2013/04/clip_image009.jpg) + + + Figure 5- Result with different schemas- + + + Now we get **False** because the schemas are different, so our function is working as intended. As you can see, once again PowerShell shows us its power and allows us to solve a problem easily. + + + **Note**: Is very important to remark that this function **only compares Columns, Checks and indexes**. The main reason is because the function was created to solve a given problem but it could be extended to compare more object types like triggers, users and so on. + + + [1]: http://11011.net/software/vspaste diff --git a/content/articles/2013/04/creating-a-new-disk-3/index.md b/content/articles/2013/04/creating-a-new-disk-3/index.md new file mode 100644 index 000000000..07c041482 --- /dev/null +++ b/content/articles/2013/04/creating-a-new-disk-3/index.md @@ -0,0 +1,77 @@ +--- +url: /articles/2013-04-12-creating-a-new-disk-3/ +title: Creating a new disk +authors: + - Richard Siddaway +date: "2013-04-12T18:44:16+00:00" +aliases: + - /2013/04/creating-a-new-disk-3/ +--- + +I really like Windows Server Core. The concept has come of age in Windows 2012. + +I needed to add a new disk to a virtual machine – that"™s easy using the Hyper-V cmdlets. But what about formating the disk. + +A module new to Windows 2012 & Windows can be used. Its the Storage module. I"™ve not had chance, or reason, to play with this module yet. So many cmdlets so little time. + +Start with viewing the disks: + +PS C:\Users\richard> Get-Disk | ft -a + +Number Friendly Name OperationalStatus Total Size Partition Style +—— ————- —————– ———- ————— +0 Virtual HD ATA Device Online 120 GB MBR +1 Microsoft Virtual Disk Offline 127 GB RAW + + + +Disk 1 is the new disk so need to initialise it. + +PS C:\Users\richard> Initialize-Disk -Number 1 -PartitionStyle MBR + +View the disks again + +PS C:\Users\richard> Get-Disk | ft -a + +Number Friendly Name OperationalStatus Total Size Partition Style +—— ————- —————– ———- ————— +0 Virtual HD ATA Device Online 120 GB MBR +1 Microsoft Virtual Disk Online 127 GB MBR + + + +Create a partition on the disk - -useMaximimSize means use all of the disk for this partition + +PS C:\Users\richard> New-Partition -DiskNumber 1 -UseMaximumSize -DriveLetter R + +Now view the partitions + +PS C:\Users\richard> Get-Partition | ft -a + + Disk Number: 0 + +PartitionNumber DriveLetter Offset Size Type +————— ———– —— —- —- +1 1048576 350 MB IFS +2 C 368050176 119.66 GB IFS + + Disk Number: 1 + +PartitionNumber DriveLetter Offset Size Type +————— ———– —— —- —- +1 R 1048576 127 GB Logical + +And finally format the new disk: + +PS C:\Users\richard> Get-Volume | where DriveLetter -eq R | Format-Volume -FileSystem NTFS -NewFileSystemLabel Backup + +Confirm +Are you sure you want to perform this action? +Warning, all data on the volume will be lost! +[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): Y + +You get a nice friendly warning (you could bypass using "“Confirm $false) and the format happens + +You could pipe the cmdlets together to do everything in one pass. Best of all "“ the cmdlets are WMI based. + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2830/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2830/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2830&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/04/event-1-my-way/index.md b/content/articles/2013/04/event-1-my-way/index.md new file mode 100644 index 000000000..6de2b197d --- /dev/null +++ b/content/articles/2013/04/event-1-my-way/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2013-04-29-event-1-my-way/ +title: "Event 1: My way…" +authors: + - Bartek Bielawski +date: "2013-04-30T06:11:36+00:00" +aliases: + - /2013/04/event-1-my-way/ +--- + +Looking for not-so-expert solution for Event 1 in both categories? Wonder how one of the judges would do it, if he had a chance? Want to return favor and tell me what I could do better and what I'm doing wrong? Don't hesitate. 🙂 I decided it may be helpful to post my solutions before I ever see yours. Please find full article with lots of code on my [blog](http://becomelotr.wordpress.com/2013/04/30/event-1-my-way/). If you want to tell me you like/ hate this idea - please don't hesitate either. And now I move on to your work. Can't wait! diff --git a/content/articles/2013/04/forums-migration-schedule/index.md b/content/articles/2013/04/forums-migration-schedule/index.md new file mode 100644 index 000000000..db2f8f49e --- /dev/null +++ b/content/articles/2013/04/forums-migration-schedule/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-04-26-forums-migration-schedule/ +title: Forums Migration Schedule +authors: + - Don Jones +date: "2013-04-26T18:08:39+00:00" +categories: + - Announcements +aliases: + - /2013/04/forums-migration-schedule/ +--- + +Here's the schedule for our Forums migration: +From **Now until May 4th,** the [old forums][1] will remain online and in-use. However, you should consider creating an account here on the "new" site (distinguishable by the different visual theme). Your new account will have no connection to the old one, and may be a Twitter, Facebook, Live, or other login. To create an account, just click "Login" at the top-left of any site page (in the dark gray toolbar). +**On May 4th** we will activate the new forums. From then on, the Forums menu link will go there. The old forums will remain available at https://powershell.org/discuss. You can continue to use the old forums to wrap-up old topics, or if the new ones stop working for some reason. +On **May 13th** we will shut down the old forums and direct everyone to the new ones. +By **May 20** we will have migrated the content from the old forums into the new ones. These will be imported as static threads that are closed for new messages, but they'll still be searchable. + + [1]: https://forums.powershell.org diff --git a/content/articles/2013/04/how-to-name-your-help-files/index.md b/content/articles/2013/04/how-to-name-your-help-files/index.md new file mode 100644 index 000000000..39d480f8d --- /dev/null +++ b/content/articles/2013/04/how-to-name-your-help-files/index.md @@ -0,0 +1,58 @@ +--- +url: /articles/2013-04-30-how-to-name-your-help-files/ +title: How to Name Your Help Files +authors: + - June Blender +date: "2013-04-30T22:42:53+00:00" +aliases: + - /2013/04/how-to-name-your-help-files/ +--- + +The first challenge of Scripting Games 2013 is complete! Honestly, you win by getting the experience of playing. I hope everyone is in there voting and writing really constructive comments. I'll get over there in a minute, but I wanted to make sure that I got this information out to everyone before I get involved in voting. +Everyone who writes shared Windows PowerShell cmdlets, functions, scripts, CIM commands, and workflows also writes help topics "“ or gets a friend or colleague to do it. +For scripts and functions, you can write [comment-based help][1] (aka "inline help").  All parameters of the Get-Help cmdlet support comment-based help, including the new ShowWindow parameter, and by adding a URL to the first related link, you can support the Online parameter in comment-based help. +But XML help files are required to document cmdlets (C#), CIM commands, and workflows, and to support Updatable Help. If you're delivering your content in a module, you typically want to use XML-based help topics. +When you create XML-based help topics, you need to put them where Get-Help looks and give them the name that Get-Help expects. Otherwise, Get-Help will not find the help topic. +Get-Help looks for the XML-based help topics for the commands in a module in language-specific subdirectories of the module's installation directory.  This is generally well-known and an easy instruction to follow. +The naming guidelines are a bit trickier. In general (specifics follow), Get-Help expects the help topic for a command to be in a help file that is named for the file in which the command is defined, including the file name extension. When the commands in a module are defined in multiple assemblies or multiple CDXML files, the module must include a separate help file for each assembly or CDXML file. +The help file name format is: **-help.xml** +For example: + + * System.Management.Automation.dll-help.xml    #Cmdlets, providers + * MSFT_NetIPAddress.cdxml-help.xml             # CIM commands + * RemoteDesktop.psm1-help.xml                  # Functions, Script workflows + +Here are the specifics: + + * **Cmdlets**:  Help topics for cmdlets must be in a file that is named for the _assembly_ in which the cmdlet is defined. + * **Providers**:  Just like cmdlets, the help topics for providers must be in a file that is named for the assembly in which the provider is defined. The order in which cmdlet and provider help topics appear in the XML file doesn't matter a bit. + * **CIM Commands**: Help topics for CIM commands must be in a file that is named for the CDXML file in which the cmdlet is defined. Yup, if you have a module with 22 nested CIM modules, each with its own CDXML file, you need to create 22 CDXML-help.xml files. J + +Easy, right? Now it gets a bit weird. + + * **Script workflows**: You can write XML help files for script workflows in modules. The names don't matter. Get-Help looks in all XML files in the language-specific subdirectories of the module directory. However, to be consistent, it's best to name script workflow help files for the script module in which they are defined. For example, .psm1-help.xml. + * **Functions**:  Get-Help looks in the function code for an **.ExternalHelp** comment. The value of the comment is the help file name. If there's no ExternalHelp comment, Get-Help cannot find the XML based help file, no matter where it is or what it's named.Get-Help does not require a particular name for function help files, but they're typically named for the script module in which they are defined, such as MyModule.psm1-help.xml.For example: + +`Function MyFunction +{ + #.ExternalHelp MyModule.psm1-help.xml + [CmdletBinding()] + [OutputType([int])] + Param . . . +} +`-or + + +`#.ExternalHelp MyModule.psm1-help.xml +Function MyFunction +{ + [CmdletBinding()] + [OutputType([int])] + Param . . . +} +`If your module contains cmdlets and functions, you can put all of your help topics in the same XML file, but each function must include an ExternalHelp comment with the name of the XML help file. + + +That's the story. So, if you are writing XML help files, be sure that the name and placement of the help files is correct. If you're stuck, ping me on Facebook or Twitter (@juneb_get_help) and I'll give you a hand. + + [1]: http://go.microsoft.com/fwlink/?LinkID=144309 diff --git a/content/articles/2013/04/last-minute-summit-info-and-changes/index.md b/content/articles/2013/04/last-minute-summit-info-and-changes/index.md new file mode 100644 index 000000000..b8c9ad529 --- /dev/null +++ b/content/articles/2013/04/last-minute-summit-info-and-changes/index.md @@ -0,0 +1,34 @@ +--- +url: /articles/2013-04-18-last-minute-summit-info-and-changes/ +title: "[UPDATED] Last-Minute Summit Info and Changes" +authors: + - Don Jones +date: "2013-04-18T14:19:14+00:00" +categories: + - PowerShell Summit +aliases: + - /2013/04/last-minute-summit-info-and-changes/ +--- + +Please make sure you're following this announcements category as you travel to, and attend, the Summit. It's the best way for us to get out late-breaking news. + + +**Registration begins** at 8am on Monday, April 22nd, in the lobby of Building 40. Now, sometimes the lobby doors open a wee bit late - so bear with us. The first sessions aren't until 9am, so there's plenty of time. Please bring a printout of your ticket from EventBrite, and a photo ID. +**Session pre-registration** didn't happen - we had some volunteers have emergency health issues that just got us behind schedule, so we couldn't get the mobile app thing going. No fear. Sessions will be on a first-come, first-seated basis. Note that we are spread between two adjacent buildings, so you may have to traipse from one to the other during the 15-minute session breaks. +**Meals** will include a _very light continental breakfast_ and a lunch. We will endeavor to supply soft drinks throughout the day, but that will require Microsoft employees to shuttle them to us. You're welcome to bring your own soft drinks. We've got coffee lined up. _Please_ respect your fellow attendees - we've ordered enough food for everyone, but that assumes everyone's taking a normal-sized serving. A plate piled high with croissants isn't normal, and deprives your fellow attendees of their share. Seriously - this happened at a conference I was at a couple of weeks ago. Pretty sad. +**Kickoff** we will have a VERY SHORT kickoff in each session room at 8:45am. We'll endeavor to present all general material in both session rooms, since neither room can accommodate all of us at once. Jason Helmick and myself will be handling those duties throughout the event. You're welcome to come to us with any problems you run into. +**Problems** may arise - bear in mind this is our first year, and just be patient with us. If you bring it to our attention, we'll fix what we can, as soon as we can. We really appreciate your help and patience as we try to make a great event! +**Wi-Fi** is not guaranteed, and we will not have power drops for everyone's laptop. Please **do not** stretch your laptop power cord across any walkways - you **will** be asked to unplug for safety reasons. We suggest leaving the laptop in your hotel room, so help make the room more comfortable for everyone (if everyone brings a laptop and a giant bag for it, it's going to get cramped). +**Parking is limited** on-site, and you need to make sure you park in a space that isn't restricted. Check-in with the building receptionist to see if your car needs to be registered. You can also park at the ExtendedStay America hotel across the street, and walk to buildings 40 and 41. You're responsible for your own transportation during the event. +**Evening events** are strictly on-your-own. We don't have anything official planned. If someone puts something together ad-hoc and tells us, we'll do our best to spread the word. +**This is an informal event** - don't think of the Summit as a conference like TechEd, but rather as a gathering of friends and colleagues. It'll be less structured, more ad-hoc, and hopefully more engaging. +**Please be respectful of speakers** while they present, and follow their guidelines on when to ask questions. We do have to push them off the stage at the end of their allotted time, so give them their time to complete their presentation for you. If you have additional Q&A after the session ends, please take it into the lobby so that the next session can start. +**MONDAY AT LUNCH** we will launch the 2013 Scripting Games with an EnergizedTech opening ceremonies video. It'll be a pageant - don't miss it. 12:30pm in each session room. +**WEDNESDAY AT LUNCH** in the lobby or session room in building 40, you're invited to meet the Summit organizers (if you've managed to avoid us until then) and offer feedback for 2014. + +**Company Store** vouchers may be are a reality, thanks to The Scripting Guy. You will need to use Microsoft transportation to get to Commons, where the Store is located; you'll be able to spend your own money, up to the voucher limit, to purchase products at employee prices. These products MAY NOT BE RESOLD and are for your personal use (they may be given as gifts).  + +**PowerShell.org** stickers will be available at registration - please, limit 1 per person. We only brought a limited supply. +**THANK YOU TO OUR VOLUNTEERS** who are helping make the Summit happen - Christopher Gannon and The Scripting Wife, Teresa Wilson, will be running registration and guarding our food from poachers. Jason Helmick will be helping me with room monitoring, pacing, and general content presentations. Kirk Munro ran content selection and speaker relations. And of course, all of our speakers are presenting on their own time, without compensation, although we've been able to cover most of their travel expenses. +**2014 is coming.** We're planning a bigger event, but that means a bigger commitment - we will nee about 130 people to break even (although we'll be able to handle about 250, if things go as planned). We hope you'll help us publicize the 2014 event when the time comes, so that we can make it happen for you. +_**THANK YOU AND SEE YOU IN REDMOND!**_ diff --git a/content/articles/2013/04/manning-deal-of-the-day-april-6-2013-2/index.md b/content/articles/2013/04/manning-deal-of-the-day-april-6-2013-2/index.md new file mode 100644 index 000000000..365a17036 --- /dev/null +++ b/content/articles/2013/04/manning-deal-of-the-day-april-6-2013-2/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2013-04-04-manning-deal-of-the-day-april-6-2013-2/ +title: "Manning Deal of the Day \"“ April 6 2013" +authors: + - Richard Siddaway +date: "2013-04-04T20:42:32+00:00" +aliases: + - /2013/04/manning-deal-of-the-day-april-6-2013-2/ +--- + +My PowerShell and WMI book will be Manning"™s deal of the day for 6 April 2013. The deal will go live at Midnight US ET and will stay active for about 48 hours. + +This is your chance to get the book with a 50% discount. + +Use code dotd0406au at [manning.com/siddaway2/][1] + +The Deal of the Day offer also applies to _SharePoint Workflow in Action_ ****(). + +Enjoy + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2825/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2825/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2825&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: http://manning.com/siddaway2/ diff --git a/content/articles/2013/04/meet-the-scripting-games-judges-jeffery-hicks/index.md b/content/articles/2013/04/meet-the-scripting-games-judges-jeffery-hicks/index.md new file mode 100644 index 000000000..a4b71b7b3 --- /dev/null +++ b/content/articles/2013/04/meet-the-scripting-games-judges-jeffery-hicks/index.md @@ -0,0 +1,31 @@ +--- +url: /articles/2013-04-22-meet-the-scripting-games-judges-jeffery-hicks/ +title: "Meet the Scripting Games Judges: Jeffery Hicks" +authors: + - Don Jones +date: "2013-04-22T14:46:22+00:00" +categories: + - Scripting Games +aliases: + - /2013/04/meet-the-scripting-games-judges-jeffery-hicks/ +--- + +Jeffery Hicks is a Microsoft MVP in Windows PowerShell, Microsoft + Certified Trainer and an IT veteran with over 20 years of experience, + much of it spent as an IT consultant specializing in Microsoft server + technologies with an emphasis in automation and efficiency.He works + today as an independent author, trainer and consultant.Jeffwritesthe + popular Prof. PowerShell column for MPCMag.com, is a regular contributor + to the Petri IT Knowledgebase, 4SysOps and the Altaro Hyper-V blog, as + well as frequent speaker at technology conferences and user groups. + + +Jeff is looking forward to seeing entries that are more than +re-formatted VBScript. Beginner scripts should demonstrate an +understanding of the PowerShell paradigm.Advanced scripts should go +beyond and demonstrate mastery of complex techniques and concepts. The +best of the best will have a pure, elegant, zen-like simplicity even for +the most challenging tasks. +You can keep up with Jeff at his blog http://jdhitsolutions.com/blog , on +Twitter at https://twitter.com/jeffhicks and on +Google Plus (http://gplus.to/JeffHicks) diff --git a/content/articles/2013/04/meet-the-scripting-games-judges-june-blender/index.md b/content/articles/2013/04/meet-the-scripting-games-judges-june-blender/index.md new file mode 100644 index 000000000..94f8ad374 --- /dev/null +++ b/content/articles/2013/04/meet-the-scripting-games-judges-june-blender/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-04-30-meet-the-scripting-games-judges-june-blender/ +title: "Meet the Scripting Games Judges: June Blender" +authors: + - Don Jones +date: "2013-04-30T17:15:20+00:00" +categories: + - Scripting Games +aliases: + - /2013/04/meet-the-scripting-games-judges-june-blender/ +--- + +June Blender is was a senior programming writer on the Windows PowerShell team at Microsoft from Windows PowerShell 1.0 "“ 3.0. You see her work every time you type Get-Help for the core modules. She's now working on the Windows Azure Active Directory SDK team, and she remains an avid Windows PowerShell user and a passionate user advocate. She's a guest blogger for the Scripting Guys and she tweets Windows PowerShell tips on Twitter at @juneb_get_help. +An engineering type by disposition, June was attracted to Windows PowerShell by the efficiency, productivity, and uniformity of automation. As a full-time working mom of three sons (now adults!), the idea of doing anything twice, unless it's fun, is appalling. When evaluating scripts, she looks for elegance, but prefers scripts that inspire to those that intimidate. If saving a line of code makes your script difficult to understand and maintain, it's not worth it. The scripts that get a thumbs-up from June are those that reveal a new way of performing a task and can be used as a template for scripts to come. Oh, and they must have Help! +June's philosophy about Help is pretty simple. It's supposed to make the task easier "“ clear, complete, and accurate. A parameter description that says that ServerName is the name of the server isn't worth the characters you use to type it, but neither is the one that says that a parameter retrieves the modification of the nth cell in the hierarchically rarified data structure. She hates passive voice, too, because you don't know who is supposed to act. About topics are critical. A whole mess of disjointed cmdlet help without an explanation of how they are intended to be used is not really helpful. And the best part of help is the examples. You really can't have too many (see "Get-Help Invoke-Command"). +Community is the secret sauce in Windows PowerShell, so the best scripts contribute to our shared knowledge, productivity, and fun. June much prefer scripts and functions that you can open, read, and model to compiled anything. +A 16-year veteran of Microsoft, June lives in magnificent Escalante, Utah, where she works remotely when she's not out hiking, canyoneering, taking Coursera classes, or convincing lost tourists to try Windows PowerShell. She believes that outstanding documentation is a collaborative effort, and she welcomes your comments and contributions to Windows PowerShell and Windows Azure Help. diff --git a/content/articles/2013/04/meet-the-scripting-games-judges-scripting-guy-ed-wilson/index.md b/content/articles/2013/04/meet-the-scripting-games-judges-scripting-guy-ed-wilson/index.md new file mode 100644 index 000000000..d206b0cb5 --- /dev/null +++ b/content/articles/2013/04/meet-the-scripting-games-judges-scripting-guy-ed-wilson/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-04-25-meet-the-scripting-games-judges-scripting-guy-ed-wilson/ +title: "Meet the Scripting Games Judges: \"Scripting Guy\" Ed Wilson" +authors: + - Don Jones +date: "2013-04-25T18:24:40+00:00" +categories: + - Scripting Games +aliases: + - /2013/04/meet-the-scripting-games-judges-scripting-guy-ed-wilson/ +--- + +Ed Wilson is the Microsoft Scripting Guy and a well-known scripting expert. He writes the twice daily Hey Scripting Guy! blog (the number 1 blog on TechNet). He has also spoken at TechEd and at the Microsoft internal TechReady conferences. He is a Microsoft-certified trainer who has delivered a popular Windows PowerShell workshop to Microsoft Premier Customers worldwide. He has written 11 books including 8 on Windows scripting that were published by Microsoft Press. He has also contributed to nearly a dozen other books. He has two Microsoft Press Windows PowerShell 3.0 books: Windows PowerShell 3.0 Step by Step and Windows PowerShell 3.0 First Steps. Ed holds more than 20 industry certifications, including Microsoft Certified Systems Engineer (MCSE) and Certified Information Systems Security Professional (CISSP). Prior to coming to work for Microsoft, he was a senior consultant for a Microsoft Gold Certified Partner where he specialized in Active Directory design and Exchange implementation. In his spare time, he enjoys woodworking, underwater photography, and scuba diving. diff --git a/content/articles/2013/04/mvp-renewal-2013/index.md b/content/articles/2013/04/mvp-renewal-2013/index.md new file mode 100644 index 000000000..aed05fa37 --- /dev/null +++ b/content/articles/2013/04/mvp-renewal-2013/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-04-01-mvp-renewal-2013/ +title: MVP renewal 2013 +authors: + - Richard Siddaway +date: "2013-04-01T16:46:55+00:00" +aliases: + - /2013/04/mvp-renewal-2013/ +--- + +This afternoon I received the email notifying me that my MVP award had been renewed for another year. + +Thank you to Microsoft "“ I regard the award as a great honour. + +And thank you to the PowerShell community "“ its a great place to be + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2822/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2822/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2822&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/04/name-that-property/index.md b/content/articles/2013/04/name-that-property/index.md new file mode 100644 index 000000000..5c08dff4b --- /dev/null +++ b/content/articles/2013/04/name-that-property/index.md @@ -0,0 +1,104 @@ +--- +url: /articles/2013-04-29-name-that-property/ +title: Name that Property +authors: + - June Blender +date: "2013-04-29T18:47:25+00:00" +aliases: + - /2013/04/name-that-property/ +--- + +Challenge #1 of Scripting Games 2013 is coming to a close. I can't wait to see the results! I solved both the Beginner and Advanced versions just for practice and I learned a lot along the way. They're not easy, but if you haven't yet tried them, go for it. And be sure to review the candidate solutions for new techniques. +In my last post, I showed a very easy way to create a custom object in Windows PowerShell 3.0 and I argued that returning a custom object is far better than returning formatted objects. But, when you are formatting or selecting properties from an existing object, you can customize the names of the properties and their values. This techique isn't new to Windows PowerShell 3.0 "“ it works in all versions -- but it's really handy, and I've noticed that not a lot of people use it. +Let's start by changing the name of a table column. In this case, the big boss wants a list of files and their attributes. Get-ChildItem ("dir") just about does it, but the property name is "Mode," not "Atrributes," and the big boss is a picky dude. + + +`PS C:\ Get-ChildItem + Directory: C:\ +Mode LastWriteTime Length Name +---- ------------- ------ ---- +d---- 10/9/2012 1:05 PM 2008 +d---- 10/9/2012 1:05 PM 2009 +d---- 10/9/2012 1:05 PM AssemblyTest +d---- 10/9/2012 1:05 PM CabTest +d---- 10/24/2012 1:27 PM Snippets +-ar-- 3/7/2011 6:50 AM 0 ApplicationError.txt +-ar-- 11/19/2010 2:42 PM 274 archive-Projects.ps1 +-a-- 12/13/2010 11:18 AM 3052 Backup-Files.ps1 +-a-- 3/2/2011 7:42 PM 312 Check-Examples.ps1 +-a-- 9/29/2010 6:57 AM 728 Compare-ParameterSets.ps1 +-ar-- 10/24/2012 12:44 PM 1146 Compare-UpdatableHelpVersion.ps1 +`Quick fix! Change the name of the Mode property to Attributes. + + +`Get-ChildItem | Select-Object @{Name="Attributes";Expression={$_.Mode}}, ` +LastWriteTime, Name +Directory: C:\ +Attributes LastWriteTime Name +---------- ------------- ---- +d---- 10/9/2012 1:05 PM 2008 +d---- 10/9/2012 1:05 PM 2009 +d---- 10/9/2012 1:05 PM AssemblyTest +d---- 10/9/2012 1:05 PM CabTest +d---- 10/24/2012 1:27 PM Snippets +-ar-- 3/7/2011 6:50 AM ApplicationError.txt +-ar-- 11/19/2010 2:42 PM archive-Projects.ps1 +-a-- 12/13/2010 11:18 AM Backup-Files.ps1 +-a-- 3/2/2011 7:42 PM Check-Examples.ps1 +-a-- 9/29/2010 6:57 AM Compare-ParameterSets.ps1 +-ar-- 10/24/2012 12:44 PM Compare-UpdatableHelpVersion.ps1 +`Note: I omitted the Length property here so the table is easier to display, but you can add it back if you'd like. +This value is called a _calculated property_. You can use calculated properties in Select-Object, Format-Table, and Format-List commands, and in commands that use other cmdlets where it's noted in the help topic. +A _calculated property_ is a hash table (@{Name=Value; Name=Value"¦} ). The first key is either **Name** or **Label** and the second key is **Expression**. The value of the **Name** (or **Label**) key is the name that you want to assign to the property. The value of the **Expression** key is a script block (inside braces) that gets the property value. +In this case, I just want to rename the "Mode" property to "Attributes," so the value of the **Name** key is "Attributes" and the value of the **Expression** key is a tiny script block that gets the value of the Mode property of each object that is passed to it. + + +`@{Name = "Attributes"; Expression = {$_.Mode}} +`Just for practice, let's rename "LastWriteTime" to "Updated." + + +`@{Name = "Updated"; Expression = {$_.LastWriteTime}} +`Now, you can use the calculated property in a Select-Object, Format-Table, or Format-List command. Put it where you usually put the property name. + + +`Get-ChildItem | Select-Object @{Name = "Attributes"; Expression = {$_.Mode}}, ` + @{Name = "Updated"; Expression = {$_.LastWriteTime}}, Name +Directory: C:\ +Attributes Updated Name +---------- ------- ---- +d---- 10/9/2012 1:05 PM 2008 +d---- 10/9/2012 1:05 PM 2009 +d---- 10/9/2012 1:05 PM AssemblyTest +d---- 10/9/2012 1:05 PM CabTest +d---- 10/24/2012 1:27 PM Snippets +-ar-- 3/7/2011 6:50 AM ApplicationError.txt +-ar-- 11/19/2010 2:42 PM archive-Projects.ps1 +-a-- 12/13/2010 11:18 AM Backup-Files.ps1 +-a-- 3/2/2011 7:42 PM Check-Examples.ps1 +-a-- 9/29/2010 6:57 AM Compare-ParameterSets.ps1 +-ar-- 10/24/2012 12:44 PM Compare-UpdatableHelpVersion.ps1 +`After you've played with this for a while, try changing the value of the **Expression** key so that it gets exactly the value that you need instead of the default property value. +What if the big boss wants that Updated (LastWriteTime) value in Coordinated Universal Time (UTC)? No problem! Just change the expression to call the ToUniversalTime method of DateTime objects. And while we're perfecting, let's change the property name to better describe its new value. +Here's the calculated property: + + +`@{Name = "Updated_UTC";Expression={$_.LastWriteTime.ToUniversalTime()}} +`And here it is in a command: + + +`PS C:\ Get-ChildItem | Select-Object @{Name = "Attributes"; Expression = {$_.Mode}}, + @{Name = "Updated_UTC"; Expression = {$_.LastWriteTime.ToUniversalTime()}}, Name +Attributes Updated_UTC Name +---------- ----------- ---- +d---- 10/9/2012 8:05:46 PM 2008 +d---- 10/9/2012 8:05:46 PM 2009 +d---- 10/9/2012 8:05:46 PM AssemblyTest +d---- 10/9/2012 8:05:46 PM CabTest +d---- 10/24/2012 8:27:30 PM Snippets +-ar-- 3/7/2011 2:50:08 PM ApplicationError.txt +-ar-- 11/19/2010 10:42:33 PM archive-Projects.ps1 +-a--- 12/13/2010 7:18:18 PM Backup-Files.ps1 +-a--- 3/3/2011 3:42:02 AM Check-Examples.ps1 +-a--- 9/29/2010 1:57:27 PM Compare-ParameterSets.ps1 +-ar-- 10/24/2012 7:44:49 PM Compare-UpdatableHelpVersion.ps1 +`I find this technique to be really handy and I hope you do, too. Just don't get caught up in syntax errors. Remember that a calculated property ends in _**two braces**_; one to end the expression script block and the other to end the hash table. diff --git a/content/articles/2013/04/new-technical-product-manager-at-provance-technologies/index.md b/content/articles/2013/04/new-technical-product-manager-at-provance-technologies/index.md new file mode 100644 index 000000000..136d62f69 --- /dev/null +++ b/content/articles/2013/04/new-technical-product-manager-at-provance-technologies/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2013-04-30-new-technical-product-manager-at-provance-technologies/ +title: New Technical Product Manager at Provance Technologies +authors: + - Kirk Munro +date: "2013-04-30T19:25:34+00:00" +aliases: + - /2013/04/new-technical-product-manager-at-provance-technologies/ +--- + +Today is my first day working in my new role as Technical Product Manager at [Provance Technologies][1].  A little while back Provance approached me to talk about this position, and it seemed like a very natural fit.  Rarely have I felt such a positive vibe from a company through the interview process, so I was really happy to accept the position of Technical Product Manager with them and I have been looking forward to starting work with them. + +Now that I am working full-time with [Provance][2], I"™ll be getting up to speed as quickly as I can on the IT Asset Management Pack and the Data Management Pack products that we offer to help companies properly manage the assets they have inside their organization.  I know there is already some PowerShell support in one of the products, although I haven"™t personally taken a look at it yet (but you can bet I will be soon). + +For those of you who regularly follow my blog, if you happen to use either of these products in your organization, I"™d love to hear about it. + +Kirk out. + +[![](http://feeds.wordpress.com/1.0/comments/kirkmunro.wordpress.com/862/)](http://feeds.wordpress.com/1.0/gocomments/kirkmunro.wordpress.com/862/)![](http://stats.wordpress.com/b.gif?host=poshoholic.com&blog=1436967&%23038;post=862&%23038;subd=kirkmunro&%23038;ref=&%23038;feed=1) + + [1]: http://www.provance.com/ "Provance Technologies" + [2]: http://provance.com/ "Provance Technologies" diff --git a/content/articles/2013/04/now-accepting-nominations-for-powershell-org-inc-board-of-directors/index.md b/content/articles/2013/04/now-accepting-nominations-for-powershell-org-inc-board-of-directors/index.md new file mode 100644 index 000000000..99b249117 --- /dev/null +++ b/content/articles/2013/04/now-accepting-nominations-for-powershell-org-inc-board-of-directors/index.md @@ -0,0 +1,27 @@ +--- +url: /articles/2013-04-24-now-accepting-nominations-for-powershell-org-inc-board-of-directors/ +title: Now Accepting Nominations for PowerShell.org, Inc. Board of Directors +authors: + - Don Jones +date: "2013-04-24T16:10:56+00:00" +categories: + - Announcements +aliases: + - /2013/04/now-accepting-nominations-for-powershell-org-inc-board-of-directors/ +--- + +At our first annual Shareholders Meeting (shareholders will receive an e-mail from me later this week about that meeting), we will be voting on our Board of Directors. Our corporate articles permit our existing Board members to serve indefinitely, and so all are automatically re-nominated. The current Board includes: + + * Myself (Don Jones) + * Kirk Munro + * Richard Siddaway + * Jason Helmick + * Jeffery Hicks + +The Board is responsible for appointing a CEO (which is currently myself) to run the company; the CEO then appoints other officers as needed to conduct the corporation's business. I'll reiterate that PowerShell.org is a not-for-profit business, meaning our goal is to more or less break even. We obviously have expenses - Web site hosting, running the Summit, and so on - and the corporation provides a place where the needed funds can be managed, without running through anyone's personal checking account. +If you would like to nominate someone for the Board, please e-mail president/at/powershell.org no later than May 15th, 2013. Provide the person's name and e-mail address. You are welcome to nominate yourself. +Each shareholder will receive 5 votes per share owned, and can distribute those votes however they like amongst the nominees. The top 5 vote-earning nominees will comprise our new Board. They will then elect their Chairman, who presides over Board meetings, and either reconfirm the existing CEO or appoint a new one. +If you are interested in becoming a shareholder, [please see this post][1]. Note that shares must be purchased before May 1st, 2013, in order to be eligible for voting in the upcoming cycle. We are also [nearing the end of our capital campaign][2], so time is running out to own a piece of PowerShell.org. + + [1]: https://powershell.org/discuss/viewtopic.php?f=26&t=239 + [2]: http://wp.me/p3priC-EW diff --git a/content/articles/2013/04/phillyposh-04042013-meeting-summary/index.md b/content/articles/2013/04/phillyposh-04042013-meeting-summary/index.md new file mode 100644 index 000000000..8cb783b49 --- /dev/null +++ b/content/articles/2013/04/phillyposh-04042013-meeting-summary/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2013-04-07-phillyposh-04042013-meeting-summary/ +title: PhillyPoSH 04/04/2013 meeting summary +authors: + - John Mello +date: "2013-04-08T02:58:13+00:00" +aliases: + - /2013/04/phillyposh-04042013-meeting-summary/ +--- + +1. [Jason Helmick][1] remotely gave a demo of [Sapien"™s Powershell Studio][2] + 2. [Ed Wilson][3], [The Scripting Guy][4], gave a presentation on the different ways to remotely manage a Windows 8 workstation (remotely via the [Charlotte PowerShell User Group][5]) + 3. Announcements + 1. The [Scripting games start][6] on [04/25/2013,][7] make sure to sign up! We plan on doing a post mortem once the games are done just like we did with the [Winter Scripting Camp][8] + 2. Check out the [Mississippi PowerShell User][9], which meets virtually every 2nd Tuesday. Take a look at their [schedule which is filled with great speakers][10]. + + [1]: http://www.jasonhelmick.com/ + [2]: http://sapien.com/software/powershell_studio + [3]: http://www.edwilson.com/ + [4]: http://blogs.technet.com/b/heyscriptingguy/ + [5]: http://powershellgroup.org/charlotte.nc + [6]: https://powershell.org/category/announcements/scripting-games/ + [7]: https://powershell.org/2013/04/03/2013-scripting-games-schedule/ + [8]: https://powershell.org/2013/03/10/phillyposh-03072013-meeting-summary-and-presentation-materials/ + [9]: http://mspsug.com/ + [10]: http://mspsug.com/2013/02/27/mississippi-powershell-user-group-speaker-lineup-for-2013/ diff --git a/content/articles/2013/04/powershell-deep-dives-another-meap-release-2/index.md b/content/articles/2013/04/powershell-deep-dives-another-meap-release-2/index.md new file mode 100644 index 000000000..0261069b7 --- /dev/null +++ b/content/articles/2013/04/powershell-deep-dives-another-meap-release-2/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-04-13-powershell-deep-dives-another-meap-release-2/ +title: "PowerShell Deep Dives\"“another MEAP release" +authors: + - Richard Siddaway +date: "2013-04-13T17:24:52+00:00" +aliases: + - /2013/04/powershell-deep-dives-another-meap-release-2/ +--- + +Manning have released another set of chapters in their early access program for [PowerShell Deep Dives][1]. + +If you have an interest in PowerShell I would strongly urge you to buy a copy. It has chapters from a number of well known PowerShell authors together with some very good material from new authors. Best of all the royalties are going to charity. + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2834/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2834/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2834&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: http://www.manning.com/hicks/ diff --git a/content/articles/2013/04/powershell-excerpt-week-2/index.md b/content/articles/2013/04/powershell-excerpt-week-2/index.md new file mode 100644 index 000000000..7e65fb15a --- /dev/null +++ b/content/articles/2013/04/powershell-excerpt-week-2/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-04-03-powershell-excerpt-week-2/ +title: PowerShell excerpt week +authors: + - Richard Siddaway +date: "2013-04-03T19:00:52+00:00" +aliases: + - /2013/04/powershell-excerpt-week-2/ +--- + +The Scripting Guy is running a series of excerpts from the PowerShell books published by Manning. Today is PowerShell in Practice + +Check out the deals all this week on Manning PowerShell books + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2823/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2823/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2823&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/04/powershell-script-that-relaunches-as-admin/index.md b/content/articles/2013/04/powershell-script-that-relaunches-as-admin/index.md new file mode 100644 index 000000000..e5269b6ce --- /dev/null +++ b/content/articles/2013/04/powershell-script-that-relaunches-as-admin/index.md @@ -0,0 +1,84 @@ +--- +url: /articles/2013-04-05-powershell-script-that-relaunches-as-admin/ +title: PowerShell Script that Relaunches as Admin +authors: + - Keith Hill +date: "2013-04-05T15:08:17+00:00" +aliases: + - /2013/04/powershell-script-that-relaunches-as-admin/ +--- + +If were following good security practices we run our Windows system with UAC enabled. This means that if you forget to launch your PowerShell prompt as Administrator when you run a script that requires administrative privilege then that script will fail. + +It would be nice to build a mechanism into our script to "auto-elevate" if UAC is enabled. The trick to doing this is to run Start-Process "“verb runas. After that you only need to figure out if the current user is an administrator and if UAC is enabled. And you have to package up the script"™s parameters as an array of strings. All of this can be accomplished fairly easily with this bit of PowerShell script: + + + +`function + IsAdministrator +{ + $Identity = [System.Security.Principal.WindowsIdentity]::GetCurrent() + $Principal = New-Object System.Security.Principal.WindowsPrincipal($Identity) + $Principal.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator) +} + + +function + IsUacEnabled +{ + (Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System).EnableLua +-ne + 0 +} + + +# + + +# Main script + + +# + + +if + (!(IsAdministrator)) +{ + +if + (IsUacEnabled) + { + [string[]]$argList = @( +'-NoProfile' +, +'-NoExit' +, +'-File' +, $MyInvocation.MyCommand.Path) + $argList += $MyInvocation.BoundParameters.GetEnumerator() | Foreach { +"-$($_.Key)" +, +"$($_.Value)" +} + $argList += $MyInvocation.UnboundArguments + Start-Process PowerShell.exe -Verb Runas -WorkingDirectory $pwd -ArgumentList $argList + +return + + } + +else + + { + +throw + +"You must be administrator to run this script" + + } +} + + +`If you launch this script from a non-elevated context, it will fire up a new PoweShell session that is elevated assuming UAC is enabled. + +[![](http://feeds.wordpress.com/1.0/comments/rkeithhill.wordpress.com/276/)](http://feeds.wordpress.com/1.0/gocomments/rkeithhill.wordpress.com/276/)![](http://stats.wordpress.com/b.gif?host=rkeithhill.wordpress.com&blog=18780344&%23038;post=276&%23038;subd=rkeithhill&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/04/powershell-summit-2013-conference-schedule/index.md b/content/articles/2013/04/powershell-summit-2013-conference-schedule/index.md new file mode 100644 index 000000000..6286df499 --- /dev/null +++ b/content/articles/2013/04/powershell-summit-2013-conference-schedule/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2013-04-22-powershell-summit-2013-conference-schedule/ +title: "[UPDATED] PowerShell Summit 2013 Conference Schedule" +authors: + - Poshoholic +date: "2013-04-22T15:49:02+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2013/04/powershell-summit-2013-conference-schedule/ +--- + +If you are attending the PowerShell Summit next week in Redmond, you might want to make sure you have copies of the schedule on hand.  There are two tracks, and I have created two pdf documents, one for each track, that provide the full schedule including session abstracts and speaker bios. +[PowerShell Summit 2013 Conference Schedule - Track 1](https://powershell.org/wp-content/uploads/2013/04/PowerShell-Summit-2013-Conference-Agenda-Track-1.pdf) +[PowerShell Summit 2013 Conference Schedule - Track 2][1] +While those details are very useful, some of the conference attendees have expressed an interest in having a consolidated view of the agenda so that they could see which sessions were taking place on each of the tracks and choose which they were more interested in.  Ask, and ye shall receive.  Here is a consolidated view of the conference sessions on all tracks, with each day on a separate page. +[PowerShell Summit 2013 Conference Schedule - At at glance](https://powershell.org/wp-content/uploads/2013/04/PowerShell-Summit-2013-Conference-Agenda-At-a-glance.pdf) +Note that if you don"™t have a ticket for the conference, it is sold out for this year.  We"™re planning the 2014 conference now, so keep watching this blog for news about that conference as it becomes available.  There are already a few posts about it that are worth reviewing if you missed them. +Thanks, and enjoy the conference next week! +Kirk out. + + [1]: https://powershell.org/wp-content/uploads/2013/04/PowerShell-Summit-2013-Conference-Agenda-Track-2.pdf "PowerShell Summit 2013 Conference Schedule - Track 2.pdf" diff --git a/content/articles/2013/04/powershell-summit-thank-you/index.md b/content/articles/2013/04/powershell-summit-thank-you/index.md new file mode 100644 index 000000000..cd4f8a306 --- /dev/null +++ b/content/articles/2013/04/powershell-summit-thank-you/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-04-27-powershell-summit-thank-you/ +title: "PowerShell Summit\"“thank you" +authors: + - Richard Siddaway +date: "2013-04-27T11:46:19+00:00" +aliases: + - /2013/04/powershell-summit-thank-you/ +--- + +I"™d like to extend a huge thank you to everyone who attended the PowerShell Summit this last week. The Summit was a success "“ in no small part due to you. Your questions, and discussions, are what this is all about. + +It was a pleasure meeting you all and I hope to return next year "“ I hope to see many of you there as well. + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2836/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2836/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2836&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/04/pre-summit-hang/index.md b/content/articles/2013/04/pre-summit-hang/index.md new file mode 100644 index 000000000..ee1f94c4c --- /dev/null +++ b/content/articles/2013/04/pre-summit-hang/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-04-17-pre-summit-hang/ +title: Pre-Summit Hang +authors: + - Don Jones +date: "2013-04-18T01:15:57+00:00" +categories: + - PowerShell Summit +aliases: + - /2013/04/pre-summit-hang/ +--- + +If you're attending the Summit and are arriving Sunday afternoon, drop by the Azteca restaurant on 148th. I'll be there with some of the Board from 5pm, in the bar. It's informal, pay-your-own-way, and a chance just to say hi before we kick off on Monday. Safe journey! diff --git a/content/articles/2013/04/pscustomobject-save-puppies-and-avoid-dead-ends/index.md b/content/articles/2013/04/pscustomobject-save-puppies-and-avoid-dead-ends/index.md new file mode 100644 index 000000000..9a135e18d --- /dev/null +++ b/content/articles/2013/04/pscustomobject-save-puppies-and-avoid-dead-ends/index.md @@ -0,0 +1,157 @@ +--- +url: /articles/2013-04-24-pscustomobject-save-puppies-and-avoid-dead-ends/ +title: "PSCustomObject: Save Puppies and Avoid Dead Ends" +authors: + - June Blender +date: "2013-04-24T21:06:59+00:00" +aliases: + - /2013/04/pscustomobject-save-puppies-and-avoid-dead-ends/ +--- + +Welcome to Scripting Games 2013. Here's my favorite hint for improving your functions and scripts. Avoid writing to the console or formatting your output. Instead use **PSCustomObject** in Windows PowerShell 3.0 and leave the formatting to the end user. +Windows PowerShell provides lots of great ways to return the output of a command or function. You can write to the host program (Write-Host), write to a file (Out-File), and format your output to look really pretty (Format-*). But all of these techniques kill puppies and bring the pipeline to an abrupt halt. +"Puppies?," you ask. Yes! Windows PowerShell MVP and Scripting Games 2013 Viceroy Don Jones (@concentrateddon) famously says that every time you use Write-Host, a puppy dies. So sad! +The Format cmdlets are almost as bad, although no deaths have yet been attributed to them. Instead, when you use a Format cmdlet, a huge STOP sign should appear warning you that you've brought the pipeline to a halt. Not technically, of course, but for all practical purposes. +To see what I mean, take a peek at these two commands. The output of these commands looks very similar, but it's really quite different. + + +`PS C:\ Get-Process csrss +Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName +------- ------ ----- ----- ----- ------ -- ----------- +885 14 2568 5092 49 516 csrss +714 19 3996 28036 92 632 csrss +PS C:\ Get-Process csrss | Format-Table +Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName +------- ------ ----- ----- ----- ------ -- ----------- +885 14 2568 5092 49 516 csrss +714 19 3996 28036 92 632 csrss +`These two commands return different objects and the difference really matters. To see the different output types, you can pipe them to Get-Member. I've used a slightly different approach that gets only the names of types in the output, but it's the same idea. + + +`PS C:\ Get-Process csrss | foreach {$_.gettype().fullname} +System.Diagnostics.Process +System.Diagnostics.Process +PS C:\ Get-Process csrss | Format-Table | foreach {$_.gettype().fullname} +Microsoft.PowerShell.Commands.Internal.Format.FormatStartData +Microsoft.PowerShell.Commands.Internal.Format.GroupStartData +Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData +Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData +Microsoft.PowerShell.Commands.Internal.Format.GroupEndData +Microsoft.PowerShell.Commands.Internal.Format.FormatEndData +`Instead of a process object, the formatted command returns a bunch of format objects. You usually discover this when you try to use them in another command. For example, these format objects don't have the properties of a process object, like PagedMemorySize or Handles. + + +`PS C:\ $p = Get-Process csrss +PS C:\ $p | foreach PagedMemorySize +2629632 +4075520 +PS C:\ $pf = Get-Process csrss | Format-Table +PS C:\ $pf | foreach PagedMemorySize +PS C:\ +PS C:\ get-process csrss | sort Handles +Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName +------- ------ ----- ----- ----- ------ -- ----------- + 723 19 3980 28416 87 632 csrss + 881 14 2568 5096 49 516 csrss +PS C:\ get-process csrss | ft | sort Handles +out-lineoutput : The object of type "Microsoft.PowerShell.Commands. +Internal.Format.FormatEntryData" is not valid or not in the correct +sequence. This is likely caused by a user-specified "format-*" +command which is conflicting with the default formatting. + + CategoryInfo : InvalidData: (:) [out-lineoutput], +InvalidOperationException + + FullyQualifiedErrorId : ConsoleLineOutputOutOfSequencePacket, +Microsoft.PowerShell.Commands.OutLineOutputCommand +`So you've lost the opportunity to use these objects in subsequent commands. Unless you really want formatting object, the pipeline is effectively dead. Almost as sad as those puppies. +I realized this problem when some colleagues at Microsoft asked me to generate a report that listed the CDXML files in a CIM module and the CIM commands that were defined in each CDXML file. I wrote a tiny script that produced a nice report that looked like this: + + +`MSFT_NetIPAddress.cdxml-help.xml +------------------------------------ +Get-NetIPAddress +Set-NetIPAddress +Remove-NetIPAddress +New-NetIPAddress +MSFT_NetIPInterface.cdxml-help.xml +------------------------------------ +Get-NetIPInterface +Set-NetIPInterface +MSFT_NetIPv4Protocol.cdxml-help.xml +------------------------------------ +Get-NetIPv4Protocol +Set-NetIPv4Protocol +MSFT_NetIPv6Protocol.cdxml-help.xml +------------------------------------ +Get-NetIPv6Protocol +Set-NetIPv6Protocol +. . . +`But, instead of being delighted, they reported that they now had data that they couldn't use. I had created a dead end. Pretty, but useless. They were happier with a command that produced useable results, even if they weren't pretty. + + +`PS C:\ (Get-Module $ModuleName).NestedModules | Select-Object Name, Path, ExportedCommands +Name Path ExportedCommands +---- ---- ---------------- +MSFT_NetIPAddress C:\windows\system32\WindowsPowerShel... {[Get-NetIPAddres +MSFT_NetIPInterface C:\windows\system32\WindowsPowerShel... {[Get-NetIPInterf +MSFT_NetIPv4Protocol C:\windows\system32\WindowsPowerShel... {[Get-NetIPv4Prot +MSFT_NetIPv6Protocol C:\windows\system32\WindowsPowerShel... {[Get-NetIPv6Prot +. . . +`To avoid this dead end in the silly Get-Process case, you just remove the Format-Table command. Or, you can use the Select-Object cmdlet to create an object that is a filtered subset of the current object, if that's what you need. +But how do you manage when you're returning values from different objects? It's easy to put them in a table, but there's a much better way that doesn't stop the pipeline. +Windows PowerShell 3.0 introduces PSCustomObject. You can read all about it, and about Windows PowerShell 2.0 alternatives, in about_Object_Creation. PSCustomObject makes it easy for you to create objects. +As the name implies, PSCustomObject creates a custom object with the properties that you specify. The resulting custom object works just like any .NET class object, so you can pass it through the pipeline and use it in subsequent commands. +The value of PSCustomObject is a hash table (@{Key = Value; Key=Value...}) where the keys are property names and the values are property values. When you define a PSCustomObject hash table in a script or function, Windows PowerShell magically creates an object for every instance that you pass to it. +Here's how I used it in a little script that tells you the versions of Updatable Help you have on your local machine. + + +`foreach ($helpInfoFile in $helpInfoFiles) +{ + $ModuleName = $HelpInfoFile.Name.Split('_')[0] + $CultureInfo = ([xml](Get-Content ` + $HelpInfoFile)).HelpInfo.SupportedUICultures.UICulture + $UICulture = $CultureInfo.UICultureName + $Version = $CultureInfo.UICultureVersion + [PSCustomObject]@{"ModuleName"=$ModuleName; + "Culture"=$UICulture; + "Version"=$Version} +} +`In this case , I was processing a bunch of HelpInfo XML files. I want to return an object that contains the module name, the name of the UI culture, and the version number for that UI culture. The details don't matter, except that the property values weren't all in the same object, so I couldn't just select from an object. +PSCustomObject to the rescue! See how easy this is! +In the ForEach loop, I get the values that I need. Then I just define a PSCustomObject and "¦ voila! "¦ I have my objects. The default formatting makes them look nice enough. + + +`ModuleName Culture Version +---------- ------- ------- +AppLocker en-US 3.1.0.0 +Appx en-US 3.1.0.0 +BitLocker en-US 3.1.0.0 +BranchCache en-US 3.1.0.0 +`But more importantly, the pipeline continues. When I pipe to Get-Member, it shows that I have a usable custom object: + + +`PS C:\ $u | get-member + TypeName: System.Management.Automation.PSCustomObject +Name MemberType Definition +---- ---------- ---------- +Equals Method bool Equals(System.Object obj) +GetHashCode Method int GetHashCode() +GetType Method type GetType() +ToString Method string ToString() +Culture NoteProperty System.String Culture=en-US +ModuleName NoteProperty System.String ModuleName=AppLocker +Version NoteProperty System.String Version=3.1.0.0 +`And, I can use the output in subsequent commands. + + +`PS C:\ $u | sort Version | group Version +Count Name Group +----- ---- ----- + 24 3.0.0.0 {@{ModuleName=NetSwitchTeam; + 1 3.0.1.0 {@{ModuleName=MsDtc; Culture= + 1 3.0.2.0 {@{ModuleName=Wdac; Culture=e + 15 3.1.0.0 {@{ModuleName=ScheduledTasks; + 4 3.2.0.0 {@{ModuleName=Microsoft.WSMan + 1 {3.2.15.3, 3.2.15.0, 3... {@{ModuleName=Show-Calendar; + 1 3.4.0.0 {@{ModuleName=NetTCPIP; Cultu +`Now, go out and try it! Some of the Scripting Games challenges might require a table, list, or some other formatting, but if it doesn't, be sure return a really useful object. +Good luck to everyone! diff --git a/content/articles/2013/04/putting-the-date-in-a-file-name/index.md b/content/articles/2013/04/putting-the-date-in-a-file-name/index.md new file mode 100644 index 000000000..b8db5759d --- /dev/null +++ b/content/articles/2013/04/putting-the-date-in-a-file-name/index.md @@ -0,0 +1,35 @@ +--- +url: /articles/2013-04-03-putting-the-date-in-a-file-name/ +title: Putting the date in a file name +authors: + - Richard Siddaway +date: "2013-04-03T19:18:43+00:00" +aliases: + - /2013/04/putting-the-date-in-a-file-name/ +--- + +I often need to create file names that include the date & time the file was created in the name. I"™ve come up with all sorts of ways to do but this I think is the simplest. + +I want the date in this format: year-month-day-hour-minute-second. In other words a format that is easily sortable. I discovered that if you convert a data to a string there is a formatter that does most of the work for you. That"™s a lower case s. + +PS> (Get-Date).ToString("s") +2013-04-03T20:09:31 + +You can"™t have a : symbol in a file name so need to get rid of those + +PS> (Get-Date).ToString("s").Replace(":","-") +2013-04-03T20-10-02 + +To complete the file name + +PS> $datestring = (Get-Date).ToString("s").Replace(":","-") +PS> $file = "c:\folder\Prefix_$datestring.txt" +PS> $file +c:\folder\Prefix_2013-04-03T20-16-48.txt +PS> + +I"™ve done this as a two step process otherwise when you replace the : you also take out the one for the disk drive "“ oops + +Enjoy + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2824/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2824/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2824&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/04/recording-the-powershell-summit/index.md b/content/articles/2013/04/recording-the-powershell-summit/index.md new file mode 100644 index 000000000..e3e0458e3 --- /dev/null +++ b/content/articles/2013/04/recording-the-powershell-summit/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2013-04-25-recording-the-powershell-summit/ +title: Recording the PowerShell Summit +authors: + - Don Jones +date: "2013-04-26T01:51:45+00:00" +categories: + - PowerShell Summit +aliases: + - /2013/04/recording-the-powershell-summit/ +--- + +So, we **did** have one enterprising fella use his Webcam to record the Summit sessions he attended. Once he gets with me, we'll get those online so you can see. +We **are** trying to think really hard about formal recordings for next time. It depends a lot on what folks want. For example: + + * Pointing a camera at the front of the room is easy and cheap. We worry that the audio might suck and that you might not be able to read on-screen code - although many presenters make their code/slides available for download. + * Putting software on presenters' machines to capture what they do is out of the question. There are MORE than enough moving parts already going on in the room - this just won't work out consistently. + * We can get one-button-recording devices that capture everything the speaker does on-screen, and an audio feed. You don't get to SEE the speaker, and these are about $1000 each, plus sundry cables and adapters. For several hundred more, we can add a picture-in-picture from a camera feed. + +So we can do cheap-o... well, cheaply. And if folks are happy with that, we'll do it. We can do pretty awesome-looking for pretty-expensive... and that's going to require a fundraising campaign. We aren't Microsoft, and recording three rooms, along with possible general sessions, is going to take about $8-$12k in equipment. Our goal, however, would be to give the videos away for free once a year's event sells to its "break even" attendance point. +Live streaming won't happen. Meeting venues get like $5,000 per day for a 5-10Mbps pipe. Yeah, you thought they made money off the $80/gallon coffee. We just can't afford the bandwidth to livestream. We're not even always sure we can turn on WiFi for people to check e-mail. It's that expensive. +Please drop some comments. Knowing what kind of video people are willing to accept will really help us plan this out for next time, and we need a lot of lead time to do that. diff --git a/content/articles/2013/04/running-workflows/index.md b/content/articles/2013/04/running-workflows/index.md new file mode 100644 index 000000000..2cd6db822 --- /dev/null +++ b/content/articles/2013/04/running-workflows/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2013-04-08-running-workflows/ +title: Running workflows +authors: + - Richard Siddaway +date: "2013-04-08T17:12:38+00:00" +aliases: + - /2013/04/running-workflows/ +--- + +I tripped over an interesting issue recently regarding the running of PowerShell workflows. + +Consider the world"™s simplest workflow + +workflow test-w1 {"hello world"} + +If I run this on a 32bit Windows 8 PowerShell machine "“ it works + +If I run this on Windows 2012 (64bit) on PowerShell it works + +if I run this on Windows 2012 PowerShell (x86) "“ it doesn"™t work! + +Be aware of how you are running your workflows + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2827/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2827/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2827&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/04/scripting-games-2013-have-started/index.md b/content/articles/2013/04/scripting-games-2013-have-started/index.md new file mode 100644 index 000000000..6214615b7 --- /dev/null +++ b/content/articles/2013/04/scripting-games-2013-have-started/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2013-04-28-scripting-games-2013-have-started/ +title: Scripting Games 2013 have started +authors: + - Richard Siddaway +date: "2013-04-28T11:49:53+00:00" +aliases: + - /2013/04/scripting-games-2013-have-started/ +--- + +The 2013 Scripting Games kicked off during the PowerShell summit. Event 1 is open and you can submit entries up until 23:59:59 GMT on 29 April 2013. Voting on the entries starts at at midnight on 30 April. + +You can enter and **you** can vote on the entries. This is a community games run by powershell.org "“ all are welcome. + +If you haven"™t entered yet there is still plenty of time to get you entry in for event 1. Start by reviewing the information at [https://powershell.org/the-scripting-games/][1] + +Enjoy and good luck + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2838/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2838/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2838&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) + + [1]: https://powershell.org/the-scripting-games/ "https://powershell.org/the-scripting-games/" diff --git a/content/articles/2013/04/scripting-games-2013-prize-list/index.md b/content/articles/2013/04/scripting-games-2013-prize-list/index.md new file mode 100644 index 000000000..95f098635 --- /dev/null +++ b/content/articles/2013/04/scripting-games-2013-prize-list/index.md @@ -0,0 +1,37 @@ +--- +url: /articles/2013-04-17-scripting-games-2013-prize-list/ +title: "[UPDATED] Scripting Games 2013 Prize List" +authors: + - Don Jones +date: "2013-04-17T13:51:41+00:00" +categories: + - Scripting Games +aliases: + - /2013/04/scripting-games-2013-prize-list/ +--- + +We've finalized the prizes! + + +## Overall Winners + +These are the folks who do the best overall. This prize will be awarded in mid-June. +The **overall winners** from both the Advanced and Beginner events will win a free pass (travel expenses not included) to TechEd North America 2014 or TechEd Europe 2013 - your choice. We realize the TechEd Europe dates are pretty close to when this prize will be awarded... so we'll try and intervene and make it a 2014 pass, if we can. +Second place overall winners will receive a SAPIEN Software Suite 2012, valued at $699, from SAPIEN Technologies. +Third place overall winners will receive 5 ebooks (per person) from Manning. + +## Event Winners + +These folks place top in each event, with one prize available per track. We'll award a free ebook from Manning. In addition, the top placer in Event 6 (which is the toughest) will win a copy of PrimalScript 2012 from SAPIEN, and the top placer in Event 5 will win a copy of PowerShell Studio 2012 from SAPIEN. +Second-place for each event will win 6 months of free video training library access from [Interface Technical Training][1]. +Third-place for each event will win a free year of [Phoneominal][2] cloud-based phone line service from Start-Automating.com. +For the competitors who earn the top CrowdScore vote in each event, we'll award a free ebook from Manning. + +## Prizes for Community Voting + +Each time you vote on an entry, whether your competing or not, you earn a chance to win a prize. See - you can win without even trying hard! We'll be awarding a total of four $50.00 gift certificates to the SAPIEN Technologies online store, and a total of 20 ebooks from Manning, along with 12 one-month passes to the Interface Technical Training video training library. So that's 36 chances to win! We will award these prizes in batches after voting closes on each event (meaning we'll award about 6 prizes per event - we will **not** be resetting pointlet counts, so any pointlets earned will count toward prizes in each event). +In addition, our top two voters will receive a complimentary pass (no travel included) to the PowerShell Summit North America 2014. That's pretty impressive! We will be looking at the quality, consistency, and fairness of your votes - so if you do bubble up to be a top voter, you'll be scrutinized to make sure you were voting fairly. We'll also be weighting votes that are accompanied by comments (good, useful comments, not gibberish or two-word "nice script" comments), meaning commenting is more likely to make you a winner! + + + [1]: http://videotraining.interfacett.com + [2]: http://phoneominal.com diff --git a/content/articles/2013/04/scripting-games-competitor-guide-instructions-update/index.md b/content/articles/2013/04/scripting-games-competitor-guide-instructions-update/index.md new file mode 100644 index 000000000..018263f6f --- /dev/null +++ b/content/articles/2013/04/scripting-games-competitor-guide-instructions-update/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-04-18-scripting-games-competitor-guide-instructions-update/ +title: Scripting Games Competitor Guide / Instructions Update +authors: + - Don Jones +date: "2013-04-18T13:41:21+00:00" +categories: + - Scripting Games +aliases: + - /2013/04/scripting-games-competitor-guide-instructions-update/ +--- + +We've made some minor fixes and clarifications to the 2013 Scripting Games Competitors' Guide and Instructions booklet. I encourage you to [download them and review them][1] once more before we kick off next week. +In addition, we have some additional prizes for our winners in each event - I've updated the [prize list post][2] to include this new information. That post, going forward, will be the authoritative prize list. +Registration is now open, and the Games will formally kick off on April 22nd. The first event opens April 25th. Please rely on the [Scripting Games Home Page][1] for a complete list of links and information, and make sure you're watching this [announcement category][3] for breaking news. Because we are not collecting e-mail addresses, this is the best way for us to communicate with you. + + [1]: https://powershell.org/the-scripting-games/ "The Scripting Games" + [2]: https://powershell.org/2013/04/17/scripting-games-2013-prize-list/ "[UPDATED] Scripting Games 2013 Prize List" + [3]: https://powershell.org/category/announcements/scripting-games/ diff --git a/content/articles/2013/04/scripting-games-instructions-now-available/index.md b/content/articles/2013/04/scripting-games-instructions-now-available/index.md new file mode 100644 index 000000000..286dfd5e7 --- /dev/null +++ b/content/articles/2013/04/scripting-games-instructions-now-available/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-04-13-scripting-games-instructions-now-available/ +title: Scripting Games Instructions Now Available +authors: + - Don Jones +date: "2013-04-13T19:51:09+00:00" +categories: + - Scripting Games +aliases: + - /2013/04/scripting-games-instructions-now-available/ +--- + +I've [posted an instruction booklet][1] for the 2013 Scripting Games. Although you can't register until April 22nd, you can get a sneak peek at what the new Games Web site looks like, and start preparing yourself to compete. +**READ THE FRIENDLY MANUAL.** +There are some one-time decisions you'll have to make, and some "if you mess this up, you're screwed" moments (like forgetting your password). It's all on you - so familiarize yourself with the potential "gotchas" right away. You're welcome to leave a comment on this post if you have any questions, or [ask in the forums][2]. +Note that the forums **may not be used** to ask for feedback on your entry from judges - they won't be monitoring the forum. It should also not be used for technical support questions about the Web site; the site will have a "feedback" link on the bottom of every page for that purpose. + + [1]: https://powershell.org/games + [2]: https://powershell.org/discuss/viewforum.php?f=39&sid=bf378a7ec4e2c6748515b1d3bb87429f diff --git a/content/articles/2013/04/scripting-games-voting-continues/index.md b/content/articles/2013/04/scripting-games-voting-continues/index.md new file mode 100644 index 000000000..71d9cf420 --- /dev/null +++ b/content/articles/2013/04/scripting-games-voting-continues/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2013-04-30-scripting-games-voting-continues/ +title: Scripting Games Voting Continues! +authors: + - Don Jones +date: "2013-04-30T17:52:21+00:00" +categories: + - Scripting Games +aliases: + - /2013/04/scripting-games-voting-continues/ +--- + +As of right now, we've got almost 1900 votes on entries in the [Scripting Games][1]. Remember that each vote is a "pointlet" (see the PowerShell tie-in we did there?), which is basically a raffle ticket in our prize lottery. +But... there's a secret about the lottery. It's weighted based on how many entries you've voted on. +The algorithm is a bit complex, but for example, if you've voted on 90% of the available entries, you're something like 30% more likely to win a prize. Vote on 50%, and you're about 12% more likely to win... and so on. It's a bit logarithmic... as you get closer to 100% your chances of winning increase more and more, with about a 39% advantage if you've voted on 100% of the events. +Of course, you can't just abuse the system. We've got automated and manual checks in place for people who are just randomly voting - clicking all the same vote, voting in patterns, or voting with very little time separation between votes. All of those things will trigger a manual review, and you can be banned _for life_ for attempting to game the system. We're also tracking IP addresses and whatnot, so if you're voting from multiple accounts, or trying to upvote your own entries... we're going to just shut you out. You won't even necessarily be notified, because we're not confrontational folks. +But I know nobody'd do all that - we're all in this to make the Games fun and educational! So get in there and vote. And leave comments. If you vote 1-star, tell the author why, so they can improve. Hey, it's what YOU would want if someone 1-starred YOUR code, right? Right! +So vote! [http://ScriptingGames.org][1]! +(PS - please don't report any tech problems in the comments here. The Games Web site has a feedback link) + + [1]: http://scriptinggames.org/ diff --git a/content/articles/2013/04/show-your-scripting-games-pride/index.md b/content/articles/2013/04/show-your-scripting-games-pride/index.md new file mode 100644 index 000000000..b89b8f09f --- /dev/null +++ b/content/articles/2013/04/show-your-scripting-games-pride/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2013-04-20-show-your-scripting-games-pride/ +title: Show Your Scripting Games Pride! +authors: + - Don Jones +date: "2013-04-20T15:06:24+00:00" +categories: + - Scripting Games +aliases: + - /2013/04/show-your-scripting-games-pride/ +--- + +If you're participating in the Scripting Games, log on to the Scripting Games Web site and check out your Profile page. You'll find a redemption code that can be used to unlock a Participant achievement on the main PowerShell.org Web site! +[![FirefoxScreenSnapz001](https://powershell.org/wp-content/uploads/2013/04/FirefoxScreenSnapz0012.png)](https://powershell.org/wp-content/uploads/2013/04/FirefoxScreenSnapz0012.png) diff --git a/content/articles/2013/04/shutting-down-a-remote-computer/index.md b/content/articles/2013/04/shutting-down-a-remote-computer/index.md new file mode 100644 index 000000000..39bfd1633 --- /dev/null +++ b/content/articles/2013/04/shutting-down-a-remote-computer/index.md @@ -0,0 +1,83 @@ +--- +url: /articles/2013-04-01-shutting-down-a-remote-computer/ +title: Shutting down a remote computer +authors: + - Richard Siddaway +date: "2013-04-01T11:15:52+00:00" +aliases: + - /2013/04/shutting-down-a-remote-computer/ +--- + +PowerShell provides the Stop-Computer cmdlet for closing down a remote machine. I find this especially useful in my virtual test environment. I"™ll have several machines running but won"™t necessarily have logged onto them. Using Stop-Computer means that I can shut them down cleanly without the hassle of logging onto them. + +In modern Windows systems you have to explicitly enable remote WMI access through the Windows firewall. Stop-Computer uses WMI. If the WMI firewall ports aren"™t enabled you can"™t use Stop-Computer. I"™ve taken to use the CIM cmdlets rather than WMI so sometimes don"™t open the WMI firewall ports. + +One quick function later and I have an answer + + +`function + +invoke-cimshutdown + +{ + + +[ + +CmdletBinding + +( + +) + +] + + +param + +( + + +[string] + +$computername + + +) + + +$comp + += + +Get-CimInstance + +win32_operatingsystem + +-ComputerName + +$computername + + +Invoke-CimMethod + +-InputObject + +$comp + +-MethodName + +Shutdown + + +} + +`Pass the computer name as a parameter "“ I deliberately didn"™t put a default + +Use Get-CimInstance to get the Win32_operatingsystem class and use Invoke-CimMethod to call the Shutdown method. + +Another reason not to enable WMI on my server 2012 firewalls. + +You can use this on legacy versions of Windows if you have PowerShell v3, and therefore WSMAN v3, installed + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2821/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2821/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2821&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/04/state-of-the-games/index.md b/content/articles/2013/04/state-of-the-games/index.md new file mode 100644 index 000000000..d35eaeb3a --- /dev/null +++ b/content/articles/2013/04/state-of-the-games/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-04-29-state-of-the-games/ +title: State of the Games +authors: + - Don Jones +date: "2013-04-29T15:10:48+00:00" +categories: + - Scripting Games +aliases: + - /2013/04/state-of-the-games/ +--- + +As of Monday at 5pm Pacific time (which is Tuesday morning, 00:00 hours GMT), the 2013 Scripting Games' first event will conclude. That means the first event is open for community voting - [so get on it!][1] +Remember, some of the best prizes - including a free pass to the 2014 PowerShell Summit - are reserved for folks who offer their votes and comments. +Incoming new registrations for the Games will not be able to compete in Event 1 at this point, but they can jump in with Event 2 (and subsequent events) if desired. +We presently have 1100 registered participants - which may include people who just signed up to spectate and vote, as well as our judges. 475 are registered in the Beginner track, 307 in Advanced, and 318 are presently view-only (meaning they're just voting, not submitting entries). As I write this, we've only got 218 entries - but there are still a few more hours to get them in. + + + [1]: http://scriptinggames.org/ diff --git a/content/articles/2013/04/summit-downloads/index.md b/content/articles/2013/04/summit-downloads/index.md new file mode 100644 index 000000000..ff979d51d --- /dev/null +++ b/content/articles/2013/04/summit-downloads/index.md @@ -0,0 +1,46 @@ +--- +url: /articles/2013-04-22-summit-downloads/ +title: Summit Downloads +authors: + - Don Jones +date: "2013-04-22T18:23:28+00:00" +categories: + - PowerShell Summit +aliases: + - /2013/04/summit-downloads/ +--- + +We'll be updating this post as presenters turn over materials to us. Most of these files will be ZIPs. If there are any session materials missing - please be patient (we're uploading as quickly as we can), or +contact the presenter directly + (as they may not have provided materials to us yet). +[Driscoll AST Manipulation][1] +[Prosser WrappingBinaryModule][2] +[Creating HTML Reports with Style PSHSummit][3] +[Wrock Unit Testing Powershell.pptx][4] +[Brundage The Powers of PowerShell Pipeworks.pptx][5] +[Don Jones All][6] +[Slides from Several Speakers in one ZIP][7] +[Renouf BothSessionsAndExampleScripts][8] +[Hicks How Secure Can You Be.pdf][9] +[Hicks Look No WinForms][10] +[Team - PowerShellSummitNA2013 - WinRM Drilldown.potx][11] +[Shirk FasterPowerShellTalk][12] +[Ricardo's Device Mgmt talk][13] +[Bunch more - should be the rest of them][14] +Ian Davis has his at +Here is the link to Ricardo Mendes"™ Device Management PowerShell module he mentioned during his session. http://gallery.technet.microsoft.com/Device-Management-7fad2388 + + [1]: https://powershell.org/wp-content/uploads/2013/04/ASTManipulation.zip + [2]: https://powershell.org/wp-content/uploads/2013/04/pssummit2013WrappingBinaryModule.zip + [3]: https://powershell.org/wp-content/uploads/2013/04/Creating-HTML-Reports-with-Style-PSHSummit.zip + [4]: https://powershell.org/wp-content/uploads/2013/04/Unit-Testing-Powershell.pptx.zip + [5]: https://powershell.org/wp-content/uploads/2013/04/The-Powers-of-PowerShell-Pipeworks.pptx.zip + [6]: https://powershell.org/wp-content/uploads/2013/04/DonJonesAll.zip + [7]: https://powershell.org/wp-content/uploads/2013/04/Slides.zip + [8]: https://powershell.org/wp-content/uploads/2013/04/BothSessionsAndExampleScripts.zip + [9]: https://powershell.org/wp-content/uploads/2013/04/How-Secure-Can-You-Be.pdf.zip + [10]: https://powershell.org/wp-content/uploads/2013/04/Look-No-WinForms.zip + [11]: https://powershell.org/wp-content/uploads/2013/04/PowerShellSummitNA2013-WinRM-Drilldown.potx.zip + [12]: https://powershell.org/wp-content/uploads/2013/04/FasterPowerShellTalk.zip + [13]: https://powershell.org/wp-content/uploads/2013/04/DevMgmt.zip + [14]: https://powershell.org/wp-content/uploads/2013/04/BunchMore.zip diff --git a/content/articles/2013/04/thoughts-on-event-1-and-frankly-a-rant/index.md b/content/articles/2013/04/thoughts-on-event-1-and-frankly-a-rant/index.md new file mode 100644 index 000000000..5bcd70037 --- /dev/null +++ b/content/articles/2013/04/thoughts-on-event-1-and-frankly-a-rant/index.md @@ -0,0 +1,79 @@ +--- +url: /articles/2013-04-30-thoughts-on-event-1-and-frankly-a-rant/ +title: Thoughts on Event 1 – and, frankly, a rant. +authors: + - Don Jones +date: "2013-05-01T00:06:53+00:00" +categories: + - Scripting Games +aliases: + - /2013/04/thoughts-on-event-1-and-frankly-a-rant/ +--- + +There's been a lot of dismay floating around the community about the state of "community voting" in the Scripting Games. Some folks are voting without leaving comments (we've expanded the comment field to 2000 characters, hopefully that'll help), and some disagreement about scores. +Disagreement is natural. For example, stick a **Write-Host** in your script and I'm likely to score you lower. You may disagree, but it's how I feel in many situations... and I'm seeing a distressing amount of it. +Did you know that using **[CmdletBinding(SupportsShouldProcess=$True)]** doesn't automatically and universally _make the -confirm switch work?_ You have to do a bit more. +Did you know that if you put **$DebugPreference='SilentlyContinue'** in your **BEGIN{}** block, that you disable the built in -Debug switch's functionality? Yep, seen this one a few times also. +The community is showing a distinct lack of love for scripts that look like VBScript scripts. Does that mean your script is wrong? No - but it means you're not approaching the problem in a way that the world in general feels is best. It doesn't mean your script won't work - but it means it wouldn't be widely accepted. +If you're not happy with your score, look at some higher-scoring scripts. See what they're doing differently. If you can't figure it out, post in the forums on PowerShell.org (there's a Scripting Games forum). Provide the permalink to your script, and solicit some feedback from the community. Tweet people and ask them to take a look. You can _ask_ for more feedback, if you want it and aren't getting enough. +As our judges begin to post their notes, look at what they're writing. Maybe they didn't pick your script to write about - but are they writing about things that you also did in your script? +I'm seeing a lot of good scripts. But I'm also seeing some misunderstandings of some core, advanced features, like error handling, use of Verbose output, and so on. Each of those is a star to a half-star off, for me... some of these things, _in my opinion,_ are severe, and I score accordingly. I haven't seen a perfect, un-improve-able script, yet (I'm not even halfway through, yet). So no 5-stars yet. But I _am_ trying to leave comments, and I know others are, too, so hopefully folks can improve. But be patient - it takes _time._ +And _opinions differ._ Let me offer an example: +**Write-Verbose ("Script: {0} ended at {1}" -f $MyInvocation.ScriptName, (get-date) )** +****Dislike. Not saying it's wrong at all - and some people will disagree, vehemently, with me. But I find -f strings hard to read. +**Write-Verbose "Script $($MyInvocation.ScriptName) ended at $(Get-Date)"** +****For me, that's easier to read. Not any more "right," but in my company that's the standard we adopted and that we use. Now, hopefully my opinion is being balanced by others' opinions. But, if a substantial number of people share my opinion, this code would get a low score, and a _community standard practice_ would emerge - something we can learn from _after the Games are complete._ Because yes, I'm going to harvest the Games entries and comments long after the Games are over to help keep the conversation and education going. +My point of this is that _none of us_ are as awesome as we think. Others will always have points of disagreement. What's really exciting here is the opportunity to create a community consensus of what's best. That won't come for several weeks, yet... but it _will_ come. There is **zero immediate benefit in getting a high score in the Games, and zero immediate detriment to a low score.** This is going to seem harsh, but the Games are not about _you._ They're about _all of us._ They're about us developing a sense of community involvement and standards in an industry that doesn't supply many of its own. This will happen over time, and with a lot of effort. But it's worth it. +Let's continue. +**[ValidateScript({(Test-Path $_ -PathType Container)})]** +I love that. I never thought to do that, and I love it. I've seen a few people do it. Bless them. I learned something! +An aside: There's this general undercurrent of, "I wish 'expert' judges were scoring me instead of the great unwashed masses." Let me point out some practical realities. One, every entry in the Games at this point has at least 4 votes; many have double that. The last event, most had 1, 2 at most. And yes, while 'expert' judges are allegedly well-qualified to render judgment, I'm not seeing a ton of scores I completely disagree with, yet. A few. Not a ton. And you want to know a dirty secret? How many entries do you think an 'expert' can look at, in the evening, after working all day (we're all volunteers), before he just starts getting a little arbitrary and inconsistent? The number is not "infinite." I know I got a little arbitrary last year before I caught myself and stopped for the night. So... don't discount the value of your peers' opinions. If you're getting a low score and don't know why, seek out answers. Yes, people should leave comments with their votes. If they don't, take charge and seek out answers yourself. +I **love** that I'm seeing so many divergent approaches to a single (admittedly open-ended) problem. Frankly, the value here is in browsing others' approaches and picking up some tips from them. Or just seeing something different. You shouldn't care about your _score._ You should care about what other people are doing, and about why you think their way might be better, worse, or just different. _Make_ a learning opportunity. Don't wait for someone to come to you with a free, written analysis of your code. Analyze _other people's entries_ and judge yourself against their work. +I've seen this a few times: + + +`# Validate that the source/log path provided is valid +if (-not (Test-Path $LogDirectory)) { + Read-Host -Prompt 'Please provide a valid log directory'; +} +`I had honestly never thought of that. I'm not sure how I feel about it. Generally, PowerShell commands throw errors - they don't prompt you to retry, and I'm a big fan of consistency with the native commands. Right now I think this is a 1/8th point off for me... but I appreciate the approach and I'm still thinking about it. +I've seen this a **lot:** + + +`Get-ChildItem -Path $LogDirectory -Filter $Filter | +Where-Object { + $_.PSIsContainer -eq $false + -and + $_.LastWriteTime -le (Get-Date).AddDays(-($RetentionPeriod)) } | +ForEach-Object { + $RelativePath = $_.FullName.Substring($LogDirectory.Length); + # (truncated) +`Personally, dislike. That's command-line, console-host approach - not a script. I think these massive pipeline blocks, in a script, are harder to read. Are they wrong? No. Will someone disagree with me? Yes. Again, vehemently. But I'm entitled to my opinion, and my opinion is that I'd rather see a scripting construct (ForEach) than a massive pipeline construct. Not in every scenario ever, perhaps, but... I'm biased against this approach. Understand that **Where-Object** is really just a ForEach loop in sheep's clothing... I suspect a single ForEach scripting construct could accomplish this block of logic in less time. As-is, you're looping through each object at least once... and many of them twice. That could be tighter. +**Write-Warning $_.Exception.Message** +****This bums me out a little and I've seen it a lot. $_ can get hijacked a little easily, depending on your code... and frankly, it's hard to read. Why not take one extra step and use -ErrorVariable to capture the error into an easy-to-read variable name, and work with that? There _are_ some arguments why not... but, in a broad sense, I prefer declarative, explicit stuff vs. weird built-in variables. I hate $_ even though it's used bloody everywhere. + +> Another aside: I've gotten several support e-mails from folks who missed the cutoff time. The site **clearly indicates that all times are GMT.** This is a global competition, and your local time zone isn't the only one out there. We can't provide exceptions to the cutoff - I'm truly sorry about that, but you can continue to participate in the next event. **All times are GMT.** The Competitor Guide also clearly states that all ties will be given as GMT, and if you've any confusion, the menu bar of the Games Web site lists the current time in GMT, which is what the server uses to make all scheduling decisions. + +**[ValidateScript({Test-Path $_})]** +****I freaking love that. Points off if you've included that **and** you've coded a manual check for the path. Redundancy doesn't pay, unless it's a server cluster. + + +`if (!(Get-PSDrive -Name "dest" -ErrorAction:SilentlyContinue)){ + try { + New-PSDrive -Name "dest" -PSProvider FileSystem -Root $Destination -ErrorAction:Stop | Out-Null } + catch { throw "Cannot establish PS Drive for destination: $Destination. Check the path and try again." } } +`I am at a bit of a loss as to why this solution needed a PSDrive. I mean... not wrong, but befuddling. I do tend to down-vote code I regard as unnecessary (and a lengthy comment explaining why you feel it's necessary won't help, if I disagree). In this case... I was just confused as to the need. Oh, and **-ErrorAction:SilentlyContinue** looks plain weird. Why would you include the colon? You didn't for any other parameter. Minus 1/8th point for style - just because I'm a stickler for consistency, and using the colon breaks consistency. Some poor slob in the future is going to look at this and wonder, "when do I use a colon and when don't I? Aggh!" and I'm going to have to write a book about it. Argh. . +Look at and tell me why I love it. Man, I hope that link works. If it doesn't don't yell - I'll fix it. +Oh: + + +`param( +[Parameter(Position=0)] +[string]$Source = "C:\Application\Log", +[Parameter(Position=1)] +[string]$Destination = "\\NASServer\Archives", +[int]$MaxAge = 90 +) +`I don't downvote for this, but I'm curious: Why declare a position for every parameter, when what you've declared is the default? Without those **Position=x** statements, you'd get exactly the same thing, right? Seems unnecessary? +Want more feedback? http://scriptinggames.org/entrylist.php?entryid=165. That's the Scripting Wife's entry. She's an _accountant._ But she's taken the time to be loved, so everyone votes on her entry. And I'll point out she's not getting a 5.0 score - so folks are clearly willing to be critical, even in spite of love. +Go, and be loved . diff --git a/content/articles/2013/04/time-for-d-crud/index.md b/content/articles/2013/04/time-for-d-crud/index.md new file mode 100644 index 000000000..234f5edca --- /dev/null +++ b/content/articles/2013/04/time-for-d-crud/index.md @@ -0,0 +1,41 @@ +--- +url: /articles/2013-04-28-time-for-d-crud/ +title: Time for D-CRUD? +authors: + - Richard Siddaway +date: "2013-04-28T17:52:28+00:00" +aliases: + - /2013/04/time-for-d-crud/ +--- + +I was thinking on the plane back from the PowerShell summit about the CRUD activities. They are a concept we have inherited from the database world: + +C = Create + +R = Read + +U = Update + +D= Delete + +Create, Update and Delete correspond directly to the PowerShell verbs "“ New,Set and Remove respectively. + +The Read action corresponds to the Get verb. + +Well sort of. + +Get-* is used in two distinct scenarios. Firstly we know of an object and we we want to read its properties "“ for example: + +Get-Process -Name powershell + +We are reading the information about the PowerShell process. That corresponds directly to the Read action in the CRUD paradigm. + +However, we also use Get* when we want to Discover the processes that are running: + +Get-Process + +In which case we are Discovering the processes that are running. + +I think its time to update the CRUD concept and make it DCRUD where D stands for discovery. + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2840/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2840/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2840&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/04/time-is-running-out-to-own-a-piece-of-powershell-org/index.md b/content/articles/2013/04/time-is-running-out-to-own-a-piece-of-powershell-org/index.md new file mode 100644 index 000000000..e4857390a --- /dev/null +++ b/content/articles/2013/04/time-is-running-out-to-own-a-piece-of-powershell-org/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2013-04-11-time-is-running-out-to-own-a-piece-of-powershell-org/ +title: "[UPDATED] Time is running out to own a piece of PowerShell.org" +authors: + - Don Jones +date: "2013-04-11T08:25:30+00:00" +categories: + - Announcements +aliases: + - /2013/04/time-is-running-out-to-own-a-piece-of-powershell-org/ +--- + +Believe it or not, we are coming up on our one year anniversary, and will be winding down our capital campaign. If you'd like to become a stockholder in PowerShell.org, you will have until June 1st May 15 to do so. Read the details at https://powershell.org/discuss/viewtopic.php?f=26&t=239 if you're interested! +**Updated** to show May 15 as the cutoff date. Our shareholder meeting notices and ballots will go out on May 16, so we can't accept new stock purchases after that date. diff --git a/content/articles/2013/04/what-are-your-powershell-newbie-gotchas/index.md b/content/articles/2013/04/what-are-your-powershell-newbie-gotchas/index.md new file mode 100644 index 000000000..d60d8c209 --- /dev/null +++ b/content/articles/2013/04/what-are-your-powershell-newbie-gotchas/index.md @@ -0,0 +1,27 @@ +--- +url: /articles/2013-04-18-what-are-your-powershell-newbie-gotchas/ +title: What are Your PowerShell Newbie Gotchas? +authors: + - Don Jones +date: "2013-04-18T13:55:31+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +aliases: + - /2013/04/what-are-your-powershell-newbie-gotchas/ +--- + +I'm putting together a list of common "gotchas" for PowerShell, mainly things that affect newcomers. So far, I've got: + + * Piping the output of a Format cmdlet to nearly anything else + * Using -contains instead of -like + * Selecting a subset of object properties and then trying to sort/fiter on a now-missing property + * Wrong syntax for -filter parameters on various commands + * Commands that don't produce pipeline output (e.g., piping Export-CSV to something) + * Using ConvertTo-HTML without -Fragment and appending multiple pages in one file + * Confusion with ( [ { and the other punctuation + * Concatenating strings (hard) vs. using double quotes (easier) + * $ not being part of the variable name (esp with -ErrorVariable) + * Accumulating objects in a variable and returning it, vs. outputting to the pipeline directly + +What are your "gotchas?" diff --git a/content/articles/2013/04/windows-server-backup-4/index.md b/content/articles/2013/04/windows-server-backup-4/index.md new file mode 100644 index 000000000..e1d050652 --- /dev/null +++ b/content/articles/2013/04/windows-server-backup-4/index.md @@ -0,0 +1,29 @@ +--- +url: /articles/2013-04-11-windows-server-backup-4/ +title: Windows Server Backup +authors: + - Richard Siddaway +date: "2013-04-11T19:50:36+00:00" +aliases: + - /2013/04/windows-server-backup-4/ +--- + +Windows Server 2012 has a PowerShell enabled backup utility. When you enable the feature you get a module called WindowsServerBackup. It has the cmldets you would expect for creating and managing backups. No surprise you may say as this was avialable in Windows 2008 R2. + +The difference with Windows Server 2012 is that you can do restores from PowerShell cmdlets whcih wasn"™t available in the earlier version. + +The restore cmdlets are + +Start-WBFileRecovery + +Start-WBHyperVRecovery + +Start-WBSystemStateRecovery + +Start-WBVolumeRecovery + + + +This might not replace your currebt backup system but is very useful for backing up test environments and experimenting with things like authorative AD restores. + +[![](http://feeds.wordpress.com/1.0/comments/richardspowershellblog.wordpress.com/2828/)](http://feeds.wordpress.com/1.0/gocomments/richardspowershellblog.wordpress.com/2828/)![](http://stats.wordpress.com/b.gif?host=richardspowershellblog.wordpress.com&blog=16267735&%23038;post=2828&%23038;subd=richardspowershellblog&%23038;ref=&%23038;feed=1) diff --git a/content/articles/2013/05/_index.md b/content/articles/2013/05/_index.md new file mode 100644 index 000000000..c2d7e6144 --- /dev/null +++ b/content/articles/2013/05/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from May 2013" +description: "PowerShell.org Articles published in May 2013." +--- diff --git a/content/articles/2013/05/a-helpful-message-about-helpmessage/index.md b/content/articles/2013/05/a-helpful-message-about-helpmessage/index.md new file mode 100644 index 000000000..aee9333a7 --- /dev/null +++ b/content/articles/2013/05/a-helpful-message-about-helpmessage/index.md @@ -0,0 +1,94 @@ +--- +url: /articles/2013-05-06-a-helpful-message-about-helpmessage/ +title: A Helpful Message about HelpMessage +authors: + - June Blender +date: "2013-05-06T23:39:21+00:00" +aliases: + - /2013/05/a-helpful-message-about-helpmessage/ +--- + +The Scripting Games 2013 winners have not yet been announced, but for the 3rd year running, I'm in the lead for the "Learned Most from the Scripting Games" award. I'm making space for the prize on my bookshelf. Seriously, I play with PowerShell all the time and read lots of blogs, but nothing compares to looking at dozens of scripts and commands and seeing how people do things in the real world. +One of the practices I've noticed is use of the [HelpMessage parameter attribute][1] to document a parameter. It's a real thing, but I didn't know that anyone used it any more. +Here's my help message about HelpMessage: +**Don't use it!** Users can't see it. It does no harm, but it has no value. Danger lurks in writing a HelpMessage instead of writing help that users can see. Write help that Get-Help gets, that is, XML help or comment-based help. +Here's what I'm talking about. This code is valid. The language permits it. But it's not useful. And I saw it in several of the advanced solutions. + + +`function Get-PowerShellLog +{ + [CmdletBinding()] + Param + ( + [Parameter(Mandatory=$true, HelpMessage="Your message goes here")] + $InstanceID + ) + Get-Eventlog -LogName "Windows PowerShell" -InstanceId $InstanceID +} +`But Get-Help doesn't get the HelpMessage string. +There are two ways for the user to see this help message. Here's one way. These commands get the value of the HelpMessage property of the parameter. I don't think people run commands like these very often, but I don't get out much. + + +`#Windows PowerShell 3.0 +C:\> ((Get-Command Get-PowerShellLog).ParameterSets.Parameters | + Where-Object Name -eq InstanceId).HelpMessage +Your message goes here +#Windows PowerShell 2.0 +C:\> ((Get-Command Get-PowerShellLog).ParameterSets | + Foreach {$_.Parameters} | + Where-Object {$_.Name -eq InstanceId).HelpMessage +Your message goes here +`Here's the other way. It works only on mandatory (required) parameters. When you omit a mandatory parameter, you get a message like this one: + + +`PS C:\> Get-PowerShellLog +cmdlet Get-PowerShellLog at command pipeline position 1 +Supply values for the following parameters: +(Type !? for Help.) +InstanceID: +`And then you type "!?" to get the HelpMessage value. + + +`InstanceID: !? +Your message goes here +`You've never done that? Me neither! +To get a sense of how often HelpMessage is used, I played Nate Silver with Kim's famous test server. My dear friend, Kim Ditto, is famous for many things -- she's a fabulous person and a renowned Microsoft Certified Trainer -- but, in addition, she set up and maintains a test server on which she's installed almost all of the Windows PowerShell modules from Microsoft. I could not live without Kim's test server. +Here are the results. Out of 2468 commands with 8471 parameters, 8 have the HelpMessage attribute and none are mandatory, so the HelpMessage is _NEVER DISPLAYED_ unless you go hunting for it. + + +`# How many commands? +PS C:\> Invoke-Command -Session $s {(Get-Command).Count} +2468 +# How many parameters? +PS C:\> $a = Invoke-Command -Session $s ` + {(Get-Command).ParameterSets.Parameters.Count} +8471 +# How many parameters have HelpMessage? +PS C:\> Invoke-Command -Session $s ` + {((Get-Command).ParameterSets.Parameters | where HelpMessage).Count} +8 +# How many of the parameters with HelpMessage are mandatory? +PS C:\> Invoke-Command -Session $s ` + {((Get-Command).ParameterSets.Parameters | + where HelpMessage -and isMandatory).Count} +0 +`If you want to be helpful, the correct way to provide help for a parameter in a script or function is this: + + +`<# +.PARAMETER InstanceId + Specifies the instance IDs of events in the + event log. Get-PowerShellLog gets only logs + with the specified ID. +#> +`Or, this: + + +`[Parameter(Mandatory=$true, HelpMessage="Your message goes here")] +# Specifies the instance IDs of events in the +# event log. Get-PowerShellLog gets only logs +# with the specified ID. +$InstanceID +`Hope that's helpful. + + [1]: http://msdn.microsoft.com/en-us/library/windows/desktop/system.management.automation.parameterattribute.helpmessage(v=vs.85).aspx diff --git a/content/articles/2013/05/and-the-norweigian-judge-says/index.md b/content/articles/2013/05/and-the-norweigian-judge-says/index.md new file mode 100644 index 000000000..0aa1598e0 --- /dev/null +++ b/content/articles/2013/05/and-the-norweigian-judge-says/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2013-05-01-and-the-norweigian-judge-says/ +title: And the Norweigian judge says… +authors: + - Don Jones +date: "2013-05-01T20:22:12+00:00" +aliases: + - /2013/05/and-the-norweigian-judge-says/ +--- + +Jan Egil Ring weighs in with his thoughts on Event 1: diff --git a/content/articles/2013/05/announcing-the-powershell-summit-north-america-2014/index.md b/content/articles/2013/05/announcing-the-powershell-summit-north-america-2014/index.md new file mode 100644 index 000000000..1216e57cf --- /dev/null +++ b/content/articles/2013/05/announcing-the-powershell-summit-north-america-2014/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2013-05-14-announcing-the-powershell-summit-north-america-2014/ +title: Announcing the PowerShell Summit North America 2014 +authors: + - Don Jones +date: "2013-05-14T14:39:11+00:00" +categories: + - PowerShell Summit +aliases: + - /2013/05/announcing-the-powershell-summit-north-america-2014/ +--- + +The PowerShell Summit North America 2014 will be held April 28, 29, and 30 at the Meydenbauer Center on Northeast 6th Street in Bellevue, WA. +Your membership in the PowerShell Summit also makes you a yearlong member of PowerShell.org, the online hub for the PowerShell community. Membership includes a daily continental breakfast, daily hot lunch, and three tracks of expert-led lectures and discussions. 2014 tracks include: + + * INTERNALS: Inner secrets of PowerShell, suitable for developers and admins alike. + * DEEP DIVES: Dig into technically rich topics related to the shell itself and broad administrative tasks. + * DOMAIN SPECIFIC: Focus on managing specific server products and technologies using the shell. + +[NB: For tax reasons, you become a "member" of the organization and go to our meeting as part of that; we don't sell "tickets."] +**Pricing** will range from $750-$950. We'd originally hoped to do a flat price, but the logistics of our venue is pushing this decision. So we'll be offering discounted tickets first, and then moving up the price as we go. Get in early to get the cheap seats! +If you choose to stay at one of our official hotels, you'll enjoy a reduced room rate, complimentary in-room Internet, and a short 15-minute walk to the Meydenbauer Center. We recommend taking a shuttle from the airport (http://bit.ly/ZNWGcw $20oneway; taxis $65+) instead of a rental car; parking is NOT complimentary. +NEARBY HOTELS include: Sheraton (http://bit.ly/10mVQog), Hilton (http://bit.ly/YsQiq8), and Red Lion (http://bit.ly/10gXH8v). All are adjacent to each other and are a .6 mile walk to the Meydenbauer Center. Courtyard by Marriott (http://bit.ly/12RvG9a) is across the street from the Meydenbauer Center. We do not yet have official room availability and rates. +These hotels are also less than a 4-minute taxi ride (under $5oneway) to downtown Bellevue, full of retail, dining, bars, and nightlife. You will probably spend MORE on a rental car (around $100 best-case, plus parking fees and fuel). +We will have a small-bandwidth Internet pipe available for WiFi use at the conference center. We recommend that you NOT rely on it for mission-critical or business-sensitive tasks, as it is a shared pipe and will likely have poor performance during peak usage. +We are not currently planning to offer power outlets in rooms. You may NOT stretch power cords across walkways to plug in your laptop. We are seeking out a Power Sponsor - the cost to have enough power for everyone's laptop is about $20,000 (it's one way conference centers make their profits), so this is a significant expense. +We are planning a brief private meet-and-greet reception for PowerShell.org, Inc. shareholders. We are also planning general evening events. +MEMBERSHIP SALES WILL BEGIN IN JULY with a private announcement to our 2013 alumni and our shareholders. After that, we will offer a block of memberships to our TechLetter subscribers. These folks will have first dibs not only on the event, but also on our limited block of nearby and discounted hotel rooms. We will release subsequent blocks in 2013 and 2014 for the public. +FULL DETAILS will always be available online at http://PowerShellSummit.org (this will redirect to the appropriate page for information and news). +**UPDATE**: I know there's a bit of disappointment that we're not "on campus." First... understand that we were a little under-the-radar in 2013, in terms of outside groups doing what we did in those particular locations. We also need to grow the event a bit in order to make it financially self-sustaining. And, the real clincher, no place "on campus" could accommodate us. However, "campus" (this is why I keep putting it in quotes) spans Redmond and Bellevue - we're actually adjacent to Microsoft offices, in 2014, and we're scheduling an evening event (community/team mixer, with team Q&A stations) in MS facilities. We'll also try to wrangle a company store/museum visit (there's a company Connector Shuttle that runs to Commons, which is where the store and museum are located). Most importantly, our location will ensure team participation - which is what doing this in the Seattle metro was all about. In fact, we're planning expanded team participation, with the addition of team-led "lightning demos" that will highlight cool features and tricks, and which will be a prelude to that evening's community/team mixer (so you can ask follow-up questions in smaller groups). So... given all of the possible alternatives, we felt this was the best solution. After all, the main session content is just you sitting in a room - shouldn't matter where that room is. The big thing for us is the team engagement, and the opportunity to do _fun_ stuff on campus, and we think we've got that nailed. More to come. diff --git a/content/articles/2013/05/are-you-geting-unfair-comments-in-the-games/index.md b/content/articles/2013/05/are-you-geting-unfair-comments-in-the-games/index.md new file mode 100644 index 000000000..6a57fe2fa --- /dev/null +++ b/content/articles/2013/05/are-you-geting-unfair-comments-in-the-games/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2013-05-07-are-you-geting-unfair-comments-in-the-games/ +title: Are you getting unfair comments in the Games? +authors: + - Don Jones +date: "2013-05-07T17:33:59+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/are-you-geting-unfair-comments-in-the-games/ +--- + +I continue to be amused by folks' reactions to the Games this year. +There's been some buzz on Twitter this morning from folks who feel some of their comments - and the corresponding low scores - aren't warranted. In a couple of cases I've looked at, they're right - their entries are being downrated for reasons that are actually not best practices; by following the best practices, these entries are getting lower scores. +This reinforces a point I keep trying to make: The Games _**aren't about YOU. They're about US.**_ **** +Let me put it another way: if you're getting comments from folks whose opinions are founded in a misunderstanding or misconception, that's an opportunity to educate. Not to attack that commenter - which is why commenter names aren't shown - but to educate the community in general. The community took the time to give you comments, and although some of them might be misguided, _you_ can take the time to offer a productive counterpoint and perhaps lay some misunderstandings to rest. +That's the point of the Games: to learn. Maybe not for **you** to learn, but maybe for you to help **someone else** learn. Or to put it another way, I haven't received Microsoft's MVP Award for ten years straight because I got a good "score" on something. I got it because I look for teachable moments and try to offer explanations. Being able to teach something shows that you _really_ know it. +Think of your Games entries as a honeypot. If you can attract some folks who don't quite get what you're doing, then through the comments you'll spot broad areas of educational opportunity, or what I call "teachable moments." Seize on those and help bring the community as a whole to a higher level. +Does that mean the educational opportunity has to come at the cost of you getting a lower score? Yup. Will that score in any other way impact your life? Nope. It's not going on your permanent record. Human Resources will never know. It won't affect your salary, or your ability to choose which movie you will see this weekend (Iron Man 3, BTW). Thicken up that skin a little - every vote isn't a personal attack on you. Every "unqualified" comment is not a stain upon your honor. +I really wish I could use some of the cooler interjections from _Spartacus_ here, but none of that stuff is suitable for a professional environment :(. +In short: Cool yer jets. Take the opportunity to educate. Not on Twitter. Man, you guys with the tweets. You don't have a blog, drop me an e-mail and I'll give you authoring permissions right here on PowerShell.org. Help us, as a community, educate each other. +And hey, remember not ALL of your comments are non-constructive. Learn from the ones you can, tune out the rest. Like watching CNN. Ever notice how, on a slow news day, the talk about Atlanta's traffic? Exactly. diff --git a/content/articles/2013/05/as-event-3-gets-underway-here-are-some-event-2-stats/index.md b/content/articles/2013/05/as-event-3-gets-underway-here-are-some-event-2-stats/index.md new file mode 100644 index 000000000..0b579aac7 --- /dev/null +++ b/content/articles/2013/05/as-event-3-gets-underway-here-are-some-event-2-stats/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-05-09-as-event-3-gets-underway-here-are-some-event-2-stats/ +title: As Event 3 gets underway, here are some Event 2 stats… +authors: + - Don Jones +date: "2013-05-09T23:50:57+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/as-event-3-gets-underway-here-are-some-event-2-stats/ +--- + +Event 3 will be open for entries in about ten minutes, but I thought I'd share some Event 2 information. Keep in mind that Event 2 is open for voting until the 14th, GMT. +Our Beginner Track had 120 entries this time, while the Advanced had 124. That contrasts with 165 and 159 from Event 1 - a perfectly normal falloff that's occurred during every edition of past Games. Folks get busy, maybe get discouraged, but we're keeping right on the trendline. +Voting is down... that happens, too, as the thrill of event 1 falls off. We had 3,966 Beginner votes and 2,775 Advanced votes in Event 1; so far we've gotten 1,446 Beginner and 1,131 Advanced in Event 2. Of course, we still have almost a week of voting left to go in Event 2, and in Event 1 we took a lot of votes up to the last minute. +The good news is that Event 2's votes have, so far, included a much higher percentage of comments. Event 1 Beginner has about 55% comments, while Advanced had 58%. In Event 2, Beginner is tracking to 63%, while Advanced is at 59%. Good job, guys - those comments are a big help. As you know, we've also put up some general guidelines to help keep everyone on the same page with what the score levels mean, so hopefully that's helping, too. +Something's sure helping. The average score in Event 1 Beginner was 2.5585, and Advanced 2.3870. Event 2 is up a notch, at 2.6957 and 2.6631. That's a 5% jump in Beginner scores and over 11% jump in Advanced scores. I know, people are tough on the scoring. And in some cases, I'm seeing comments that indicate the comment author had some misunderstandings. That's okay - it's an opportunity for us all to learn together, especially after the Games complete and we can start diving into this mess of data. +I hope you're already to start on Event 3! Our fastest entry so far is just over 51 minutes, and I might be saving some special prizes for the overall fastest entry (don't worry - I'm going to look at it to make sure it's decent). +May the Games be Ever in Your Fav... ugh, sorry. Don't know where that came from. Good luck! diff --git a/content/articles/2013/05/beginner-event-tips/index.md b/content/articles/2013/05/beginner-event-tips/index.md new file mode 100644 index 000000000..c75ae1994 --- /dev/null +++ b/content/articles/2013/05/beginner-event-tips/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2013-05-03-beginner-event-tips/ +title: Beginner Event Tips +authors: + - Don Jones +date: "2013-05-03T15:57:10+00:00" +aliases: + - /2013/05/beginner-event-tips/ +--- + +Folks, as we dive into Event 2, I want to offer some advice based on the _comments_ I saw for Event 1. + + * Don't overthink the Beginner event. We're not looking for a script or function - a one-liner, if possible. Don't overdeliver. + * Avoid aliases and positional parameters - this is a practice outlined in the Competitor Guide. + * TEST YOUR CODE. You can't modify it. Also, judges can't see any comment you might leave when "voting" on your own entry, so you can't use comments to mitigate an error. TEST. Submitting an entry is like pushing a script into production. + * If there's a straightforward, native way to do something - do it. People seemed to down-vote a lot of entries in Event 1 for using Robocopy. Not that it's wrong... but the general community opinion seems to be, "use native commands when they exist and can solve the problem." + +Remember, these aren't my guidelines - this is what I'm seeing in the comments that I'm reviewing, and wanted to pass them along as a sense of what the community seems to favor and disfavor. diff --git a/content/articles/2013/05/changes-in-scripting-games-displays/index.md b/content/articles/2013/05/changes-in-scripting-games-displays/index.md new file mode 100644 index 000000000..901f84a98 --- /dev/null +++ b/content/articles/2013/05/changes-in-scripting-games-displays/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-05-10-changes-in-scripting-games-displays/ +title: Changes in Scripting Games Displays +authors: + - Don Jones +date: "2013-05-10T23:52:49+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/changes-in-scripting-games-displays/ +--- + +I want to point out some changes that are being made to the Games: +Effective immediately, entry author names and current scores will not be shown for events that are still open for new votes. This is intended to help ensure everyone submitting a score isn't influenced by other people. I've seen a bit of ganging-up that I'd rather not see. +Archived events - those completely closed and for which prizes have been awarded - will display full information, including user names of comment authors. +The new event viewer, which is currently under development, will display comment author names. These will be visible to an entry's author immediately, and to the public once the event is no longer open for voting. +Entry authors: This means you won't be able to see your score while it's still open for voting, unless you use the new beta viewer (which I'll be wrapping up this weekend). diff --git a/content/articles/2013/05/do-you-really-support-should-process/index.md b/content/articles/2013/05/do-you-really-support-should-process/index.md new file mode 100644 index 000000000..b8182153f --- /dev/null +++ b/content/articles/2013/05/do-you-really-support-should-process/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2013-05-01-do-you-really-support-should-process/ +title: Do you really Support Should Process…? +authors: + - Bartek Bielawski +date: "2013-05-01T22:02:38+00:00" +aliases: + - /2013/05/do-you-really-support-should-process/ +--- + +While working on my notes for first event of Scripting Games I was looking around what others wrote, and was surprised that people really think that enabling SupportsShouldProcess is good enough. In my opinion - it is not. And because this is relatively big topic I decided to write separate blog post just about that. You can find it [here](http://becomelotr.wordpress.com/2013/05/01/supports-should-process-oh-really/). I hope it will highlight the difference between **enabling** this feature and actually **implementing** it. And remember: **do not** kill the messenger. 😉 More from me (mainly on other topics related to first event) tomorrow. diff --git a/content/articles/2013/05/dons-event-2-notes/index.md b/content/articles/2013/05/dons-event-2-notes/index.md new file mode 100644 index 000000000..e950df4af --- /dev/null +++ b/content/articles/2013/05/dons-event-2-notes/index.md @@ -0,0 +1,95 @@ +--- +url: /articles/2013-05-07-dons-event-2-notes/ +title: "Don's Event 2 Notes" +authors: + - Don Jones +date: "2013-05-07T23:02:02+00:00" +aliases: + - /2013/05/dons-event-2-notes/ +--- + +I thought I'd mentioned this last time (tap tap, this thing on?), but maybe not: don't format the output of your functions. The minute a function includes Format-\*, you've trapped me into on-screen display, a text file or piece of paper modeled after the on-screen display, or not a lot of other choices. If I want formatting, I'll pipe your function to my own Format-\* command of choice. But if I want CSV, or HTML, or XML, I'd like that option. Thanks. +This is not a favorite technique of mine: + + +`$ServerInfo = "" | Select-Object Name, SerialNumber, OS, Model, CPU, CPUCount, Memory, GBMemory +$ServerInfo.Name = $Server.ToUpper() +$ServerInfo.SerialNumber =(Get-WmiObject -Class Win32_BIOS -ComputerName $Server -Credential $Credential).SerialNumber +`That said, it's not "wrong" so I only knock of like 1/10th of a point. For me, this technique is a bit of a hack, and it doesn't parse well visually. You're relying on Select-Object accepting non-existent property names and turning them into blank properties for you. It's... well, it's weird, and frankly this behavior - while convenient in this instance - causes more harm than good. Ever typo a property name on Select, and get a blank column as a result? Yeah, that. I wish Select didn't work this way, and so as a result I'm not a fan of this technique. +\--- + + +`if ($ServerInfo.CPU -is [array]) { + $ServerInfo.CPU = $ServerInfo.CPU[0] +} +`Nice thinking, muchacho. You don't know if you've got more than one object, so you check. I'll note, however, that this could have been done more concisely when you got the property: + + +`$ServerInfo.CPU = (Get-WmiObject -Class Win32_Processor -ComputerName $Server -Credential $Credential).Name +`Add a **Select -First 1** to the end of that and you'd be guaranteed of only having one. +\--- + + +`$ServerInfo.SerialNumber =(Get-WmiObject -Class Win32_BIOS -ComputerName $Server -Credential $Credential).SerialNumber +$ServerInfo.OS = (Get-WmiObject -Class Win32_OperatingSystem -ComputerName $Server -Credential $Credential).Caption +$ServerInfo.Model = (Get-WmiObject -Class Win32_ComputerSystem -ComputerName $Server -Credential $Credential).Model +$ServerInfo.CPU = (Get-WmiObject -Class Win32_Processor -ComputerName $Server -Credential $Credential).Name +$ServerInfo.CPUCount = (Get-WmiObject -Class Win32_Processor -ComputerName $Server -Credential $Credential).count +$ServerInfo.Memory = (Get-WmiObject -Class Win32_ComputerSystem -ComputerName $Server -Credential $Credential).TotalPhysicalMemory +`Saw a lotta this. I'm kinda picking examples from one script, but this happened a lot. You're executing 6 queries. You needed 3. Double the effort, double the time. Bad call. Query it once, save it in a variable, extract what you need from that. +\--- + + +`param( + [Parameter( + Position=0, + Mandatory=$true, + ValueFromPipeline=$true, + ValueFromPipelineByPropertyName=$true + )] + [string[]]$computers +) +`This hurts a little. Look at every native PowerShell command that accepts computer names, and it does so on a -ComputerName parameter. So why pick -computers for your function and be all nonstandard? Stay consistent. +\--- + + +`$s = New-Object System.Object +$os = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $computer +$s | Add-Member -Type NoteProperty -Name "Server Name" -Value $os.CSName +$s | Add-Member -Type NoteProperty -Name "OS Version" -Value $os.Caption +$cs = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $computer +$mem = [string]([Math]::Round(($cs.TotalPhysicalMemory / 1MB),2)) + " MB" +$s | Add-Member -Type NoteProperty -Name "PhysicalMem" -Value $mem +$s | Add-Member -Type NoteProperty -Name "# CPUs" -Value $cs.NumberOfProcessors +$cpu = Get-WmiObject -Class Win32_Processor -ComputerName $computer +`Ahh, that's better. One query per class, then extract what you want from a variable. You can be a bit more concise using a hashtable, but I'm jiggy with this technique. +I said "jiggy." +\--- +I want to point out that Dr. Scripto was optional about the "number of cores in each socket" thing. He said, "if you can do it." You can't. Not readily; XP doesn't expose that information (having existed before the advent of cores, um, time to upgrade okaythanksbuhbye) so you couldn't get it consistently for all of the operating systems you were asked for. Sometimes, the test is about seeing when you know to quit, not seeing if you can piledrive your way into a half-answer. +\--- +You know you totally get downvoted if you don't include comment-based help with functions, right? Advanced track only. Just saying.\--- + + +`"Server name: " + $Info.Caption +"OS: " + $Info2.Caption + $Info2.CSDVersion +"Processor sockets: " + $Info.NumberOfProcessors +"Processor cores: " + $Info.NumberOfLogicalProcessors +"Physical memory: " + [Math]::Round(($Info.TotalPhysicalMemory/1GB),2) + "GB" +`Yeah. Outputting formatted text instead of objects. I know. I cried for the dead puppies, and then drank. I drank _vodka._ I hate vodka, but the puppies. There is seriously a better way to output - outputting text prevents PowerShell from doing ANYTHING USEFUL with your output. [See how this guy did it][1]? Do that. I'm not a huge ordered hashtable fan, but that's just me. I don't hate them as much as vodka. Or text output. +\--- +[This one is trending well][2]. I get it. It's beautiful. I think I wrote a book about this. My ONLY SINGLE NITPICK is that it's maybe a wee bit overwrought. I think it's because of the whole try CIM, then try DCOM, thing. He probably had to do it this way. I wish the new CIM cmdlets didn't require an explicit session to do DCOM. I think that's a big fail, because it forces you to write functions like this. Meh. I should write a proxy function for this. Anyway. +\--- + + +`Write-Verbose -Message 'Creating runspace pool' +$rp = [System.Management.Automation.Runspaces.RunspaceFactory]::CreateRunspacePool(1, $ThrottleLimit, $iss, $Host) +$rp.Open() +`I have no idea what to do with this. [Here's the whole thing][3]. This person is likely a LOT smarter than me. Certainly WAY more patient. I'm not sure Dr. Scripto anticipated a 317-line solution. I think he's rolled his own multithreading here. Just... wow. It's definitely overkill, by an order of magnitude, but props, man. +Someone can explain it to me sometime after the vodka wears off, yeah? +\--- +People are [hating on this one][4]. They're wrong. It's a good entry. Let me tell you something, stop giving a score of "2" because someone did something _extra_ like add logging. If it works, they went above and beyond. Do you not reward people for going above and beyond in your organization? No? Well, you should. + + [1]: http://scriptinggames.org/entrylist.php?entryid=519 + [2]: http://scriptinggames.org/entrylist.php?entryid=552 + [3]: http://scriptinggames.org/entrylist.php?entryid=482 + [4]: http://scriptinggames.org/entrylist.php?entryid=513 diff --git a/content/articles/2013/05/event-1-moving-old-files/index.md b/content/articles/2013/05/event-1-moving-old-files/index.md new file mode 100644 index 000000000..ef508e332 --- /dev/null +++ b/content/articles/2013/05/event-1-moving-old-files/index.md @@ -0,0 +1,228 @@ +--- +url: /articles/2013-05-02-event-1-moving-old-files/ +title: "Event #1: Moving Old Files" +authors: + - June Blender +date: "2013-05-02T21:31:40+00:00" +aliases: + - /2013/05/event-1-moving-old-files/ +--- + +As a celebrity judge, I'm not required to blog "“ I'm just here for my good looks :> -- but I'm having a great time reading the blogs posted by the Expert Judges about the [Event #1][1] candidate solutions.  Much of the judging is subjective, but I'll add the criteria that I use to distinguish a working solution from a great solution. +Before I do, though, I want to congratulate everyone who submitted an entry. Most of the entries work and you probably learned just from playing with the challenge. Keep it up and come back year after year. +One hint to everyone: **TEST!** Most of the entries work, but many fail if the directory for the application (e.g. App1 in \\NASServer\Archives\App1) does not already exist. And, a few fail with regular expression errors on the Replace operator (more in the blog). There are lots of great test strategies, but you can just run your code on file in your own directories or step through the code in the Windows PowerShell ISE debugger. + +## Get-Help: An Archival Atrocity + +Let's start with a quick review of the event challenge. You can read the beginner challenge [here][1]. +Basically, the task is to move log files older than 90 days old from their current locations in application-specific subdirectories of C:\Application\Log  (such as C:\Application\Log\\.log) to an archive share, \\NASServer\Archives. +The files have GUID filenames (read: you can't predict them). You need to maintain the subdirectory structure, so if a log file starts in the App582 subdirectory of C:\Application\Log, after the move, it should be in the App852 subdirectory of NASServer\Archives. +The final instruction/hint is that the applications generate the files and never touch them again. I'm not an expert, but I interpreted this to mean that the CreationTime property and the LastWriteTime property of these log files will be the same and you can use either in your solution. (Is that right?) +The advanced challenge involves the same task, but generalized into a reusable tool, so you want to create a script with parameters for the log path and archive paths. This is one of those advanced challenges that many beginners should be able to do. For giggles, try it on your beginner solution. +To recap, here are the elements of this challenge and solutions, all of which I think are acceptable in a beginner challenge. + + * Find the log files + * Get only the ones that are at least 90 days old (CreationTime or LastWriteTime) + * Move them to the same subdirectory in the archive directory + +Finding the log files is pretty easy: + + +`Get-ChildItem C:\Application\Log\*.log "“Recurse +Get-ChildItem C:\Application\Log -Include *.log "“Recurse +Get-ChildItem C:\Application\Log -Filter *.log "“Recurse +Get-ChildItem C:\Application\Log\ *\*.log +`Calculating 90 days is only a bit harder: + + +`(Get-Date).AddDays(-90) #Yes, a negative number! +(Get-Date).Subtract(New-TimeSpan -Days 90) +((Get-Date) - $file.LastWriteTime).Days -gt 90 +`Because the only really tricky part in this challenge is moving the file and maintaining the directory structure, I'm concentrating on that part. + + * First,  you need to get the current subdirectory and make sure the file goes in that same subdirectory in the new location. + * Second, if you try to copy or move an item to a directory that doesn't exist, the command fails "“ and the Force parameter will not build the path for you. + +## Get-MyVote + +Here are the elements that I look for in a solution. + + * **Preserve the path**:  I look for solutions that preserve or build the new path correctly. This is required by the challenge, but it's also a place for some creativity. + * **Test-Path/New-Item**: I look for solutions that test to see if the path exists in the new location (Test-Path) and creates the directories in the path if they don't already exist, typically by using Mkdir (md) or New-Item "“Type Directory. + * **New-Item | Out-Null**:  When you create a new path, New-Item and Mkdir return a directory object. This can be confusing to users who run your script, so I give extra points for suppressing the output. I typically do this by piping the output to Out-Null. Here's a possible solution, but I'm open to creative variation. + +`New-Item -Type Directory -Path C:\Application\Log\$p | Out-Null +`* **Help** (of course). More below + * **Test.** Don't share a solution that you haven't tested. There are many ways to test, but running the solution on datasets with different elements is a great way. I always run my code in the Windows PowerShell ISE debugger before using it or sharing it. **** + +## Get-Help + +All shared functions and scripts should have help. Help helps the end user and makes the script maintainable. Unless you plan a use a command once and toss it, you need help. +Comment-based help for a simple script like this is easy to write: +<# + + +`.SYNOPSIS + Move-Oldfiles.ps1 + By juneb 4/25/2013 +.DESCRIPTION + Moves files that are at least 90 days old from a + subdirectory of C:\Application\Log to the same + subdirectory in NASServer\Archives. +.EXAMPLE + Move-OldFiles.ps1 +`#> +Additional comments are great, especially if you're doing something clever. For example, if you use the $Path.Directory.Name to get the path (thanks to [Bartek Bielawski][2] for this hint), a comment that it gets only the immediate parent directory would be very helpful to someone reading the script. +I actually deduct points for "help" that Get-Help can't get, such as this sort of stuff: + + +`# This script moves files that are older than 90 days +# old from a subdirectory of C:\Application\Log to the +# same subdirectory in NASServer\Archives. I wrote it +# for Scripting Games 2013, Event 1 +`It's so easy to do it right that doing it wrong is pretty silly. + +## Efficiency: Calculating 90 Days + +I've seen a lot of this approach in solutions, usually in one-liners. + + +`Get-ChildItem C:\Application\Log\*\*.log | + Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-90)} | + Move-Item -Destination ... +`This approach recalculates the archive date FOR EVERY FILE. That would make sense only if the script took more than a day to run. Computers are pretty fast these days, but there's no reason to be purposefully inefficient. It's much better to calculate the archive date once, save it, and reuse it. + + +`$ArchiveDate = (Get-Date).AddDays(-90) +Get-ChildItem C:\Application\Log\*\*.log | + Where-Object {$_.LastWriteTime -lt $ArchiveDate} | + Move-Item -Destination ... +`## Get-ChildItem: -File, -Directory -Hidden -ReadOnly, -Attributes + +The FileSystem provider in Windows PowerShell 3.0 adds awesome new parameters to the Get-ChildItem cmdlet. For help, Get-Help [Get-ChildItem for FileSystem][3]. I give extra points to people who use them correctly and deduct points for the more old-fashioned PSISContainer. +The following code works: + + +`Get-ChildItem C:\Application\Log -Recurse | Where-Object {$_.PSIsContainer} +`But the preferred version uses the new features and it is really much easier to interpret: + + +`Get-ChildItem C:\Application\Log -Directory -Recurse +`On the same note, I noticed the following: + + +`Get-ChildItem -Attributes D ... +`Like a lot of solutions, this works -- it gets only directories in the path -- but it's more confusing than the simpler equivalent: + + +`Get-ChildItem -Directory +`The Attributes parameter is designed for attribute combinations and for attributes that cannot be expressed with the simpler parameters, like this expression, which gets files that are compressed and not hidden. + + +`Get-ChildItem -File -Attributes Compressed+!Hidden +`## Regular Expressions in Replace Statements + +One of the tricky parts of this challenge was preserving the original path in the new archive directory. There were many clever ways to do this. But several (presumably untested) solutions will fail with a regular expression error. +For example: + + +`foreach ($file in $files) +{ + $newName = $file.fullname -replace 'C:\Application\Log','\\NASServer\Archives' + move-item -Destination $newName +} +`Generates this error: + + +`Regular expression pattern is not valid: C:\Application\Log. +At C:\ps-test\ScriptingGames2013\Move-TestEsc.ps1:5 char:5 ++     $newName = $file.fullname -replace 'C:\Application\Log','\\NASServer\Archive ... ++     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++ CategoryInfo          : InvalidOperation: (C:\Application\Log:String) [], RuntimeException ++ FullyQualifiedErrorId : InvalidRegularExpression +`The problem here is that you didn't intend to supply a regular expression as input, but the Replace operator interprets the text that it is replacing (the first operand) as a regular expression. In this case, it interprets the backslashes as escape characters.  To resolve the error, escape the backslashes by doubling them, that is, preceding each backslash with another backslash. +For example: + + +`-replace 'C:\\Application\\Log' ... +`Here is the corrected code: + + +`foreach ($file in $files) +{ + $newName = $file.fullname -replace 'C:\\Application\\Log','\\NASServer\Archives' + move-item -Destination $newName +} +`You don't need to escape the backslash in the replacement text (second operand), because the Replace operator doesn't interpret that text as a regular expression. It just pastes it. +NOTE: The [Replace method of strings][4] does not use regular expressions, so you don't need to worry about those backslashes. + + +`$newName = ($file.fullname).Replace('C:\ps-test','\\NASServer\Archives') +`## Simplify Booleans + +Here's a very frequent pattern: + + +`if ($a -eq $true) {} elseif ($a -eq $false) {} +`But notice that: + + +`$a -eq $true +`Is equivalent to: + + +`$a +`Similarly: + + +`$a -eq $false +`Is equivalent to: + + +`!$a +`And, if $a is not true, the only alternative, is that it's false. So you can simplify that original code to: + + +`if ($a) {} else {} +`So, when you see yourself typing: + + +`Where {$_.PSIsContainer -eq $true} +`You can react immediately and change it to: + + +`Where {$_.PSIsContainer } +`Or change: + + +`$_.PsISContainer -ne $True +`To: + + +`!$_.PsISContainer +`A side note: In some languages, $a is true if it contains a true statement or any numeric value other than zero. In Windows PowerShell $a is true if it contains a true statement or a value of 1; otherwise, it is false. + +## Enumerating the paths + +Many of the solutions included enumerated paths, like this: + + +`Get-Childitem -Path "C:\Application\Log\App1", ` + "C:\Application\Log\OtherApp", ` + "C:\Application\Log\OtherApp" -Recurse ... +`I feel badly, but I think these folks misinterpreted examples to be absolute paths. It's really important for us to write the challenges clearly and unambiguously, especially because we have a truly international audience, but participants need to read carefully, too. + +## Don't use aliases + +Aliases are terrific for interactive commands and commands that you don't share with others. But for anything else, including the Scritping Games, avoid them. Can you imagine a beginner trying to intepret a solution in which "?" is used instead of Where-Object? How would the person search for that "?"?  Because understanding is the goal, I have no trouble with eliminating the "Object" in Where-Object, Sort-Object, Select-Object, but it's better to leave it in. +In general, you should also include the names of positional parameters, although I don't mind omitting the most frequently used ones. Other people might be pickier, but I don't use "Where-Object -Property" or "Get-ChildItem -Path" in my own code and I don't require it from others. + +## One-Liners + +A final note: one-liners are very useful, but I don't count lines of code or characters in a command when evaluating solutions. Solutions that use fancy regular expression statements are impressive but they can be difficult to interpret and maintain. If you can get your code onto one line, that's terrific, but it's not necessary and I don't give it any extra points. +Now, we can get ready for Event #2. Good luck, everyone! + + [1]: http://blogs.technet.com/b/heyscriptingguy/archive/2013/04/25/2013-scripting-games-beginner-event-1.aspx + [2]: http://becomelotr.wordpress.com/2013/04/30/event-1-my-way/ + [3]: http://technet.microsoft.com/en-us/library/hh847897.aspx + [4]: http://msdn.microsoft.com/en-us/library/fk49wtc1.aspx diff --git a/content/articles/2013/05/event-2-is-final/index.md b/content/articles/2013/05/event-2-is-final/index.md new file mode 100644 index 000000000..804d281cf --- /dev/null +++ b/content/articles/2013/05/event-2-is-final/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-05-06-event-2-is-final/ +title: Event 2 is final! +authors: + - Don Jones +date: "2013-05-07T00:23:43+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/event-2-is-final/ +--- + +Event 2 has closed for submissions and will open for voting later this evening. Good luck! And voters: remember that quality comments will vastly increase your chances of winning a prize! diff --git a/content/articles/2013/05/event-2-my-notes/index.md b/content/articles/2013/05/event-2-my-notes/index.md new file mode 100644 index 000000000..46a93af2c --- /dev/null +++ b/content/articles/2013/05/event-2-my-notes/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2013-05-09-event-2-my-notes/ +title: "Event 2: My notes…" +authors: + - Bartek Bielawski +date: "2013-05-09T21:50:28+00:00" +aliases: + - /2013/05/event-2-my-notes/ +--- + +Today I finally had some time to look at all entries in both categories. What I liked, and what I did not like about them? You can find answers, as previously, either in [Polish](http://powershellpl.net/2013/05/09/scripting-games-moje-notatki-2/), or in [English](http://becomelotr.wordpress.com/2013/05/09/event-2-my-notes/). I focused mainly on things I did not like, but I would anyway say that scripts are really good (overall) this year. Still: few poppies died. If you are responsible for it - remember: at the end of the day, it is you who is tossing away strength that PowerShell offers: Object Oriented Pipeline. 1* note is nothing in comparison with report, that will exists only as long as your **host**, very same that you want to **write** on so much... 😉 diff --git a/content/articles/2013/05/event-2-my-way/index.md b/content/articles/2013/05/event-2-my-way/index.md new file mode 100644 index 000000000..669fd5c7f --- /dev/null +++ b/content/articles/2013/05/event-2-my-way/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2013-05-06-event-2-my-way/ +title: "Event 2: My way…" +authors: + - Bartek Bielawski +date: "2013-05-07T04:26:03+00:00" +aliases: + - /2013/05/event-2-my-way/ +--- + +I haven't received any negative feedback on idea to blog about "_how would I do it_" (what you think about my approach is different topic) so I decided to continue. Again: because I don't want to be influenced by your ideas and make my task as close to your work as possible I post it early, before I see any of cool techniques I haven't thought of and you did, so that I can regret it later. [You can find whole article on my blog](http://becomelotr.wordpress.com/2013/05/07/event-2-my-way/). Enjoy, and please - if you see something silly, let me know. I really **do** appreciate negative feedback! diff --git a/content/articles/2013/05/event-2-opens-event-1-winding-down/index.md b/content/articles/2013/05/event-2-opens-event-1-winding-down/index.md new file mode 100644 index 000000000..c7d787494 --- /dev/null +++ b/content/articles/2013/05/event-2-opens-event-1-winding-down/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2013-05-02-event-2-opens-event-1-winding-down/ +title: Event 2 Opens / Event 1 Winding Down +authors: + - Don Jones +date: "2013-05-02T14:25:12+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/event-2-opens-event-1-winding-down/ +--- + +Event 2 is scheduled to open this evening in The Scripting Games - _remember, all times on the [Scripting Games Web site][1] are GMT._ You will need to adjust for your local time zone. +Voting on Event 1 is scheduled to end on May 7th, so you still have 5 days to earn pointlets and leave comments for your colleagues. As of right now, we have over 330 entries, and an astounding 4,900 votes - an average ratio of more than 14 votes per entry. Folks, that's _seven times more_ than we've been able to provide in the past by just having "expert judges" voting. +Those experts are now being put to better use, providing the learning experience we so much want to deliver. They're posting in their own blogs ([list][2]) as well as [here on PowerShell.org][3], and there's a lot to read. I'm delighted that we've been able to provide so much commentary before Event 2 starts, since that'll doubtlessly help everyone do better. +The average CrowdScore is 2.551 per entry - obviously there's everything from 1-point entries to 5-point entries. Folks are being pretty critical, and identifying things they don't like, as well as things they do. With more than 1800 comments (that's an average of more than 5 per entry), hopefully competitors are starting to get some take-aways from the community as well. +On Mighty Panel of Celebrity Judges will start awarding first, second, and third place in Event 1 very soon, and that process will take a few days. Keep in mind that their decisions are in no way connected to the community-based CrowdScore. Instead, they're exploring entries on their own, stating with the ones "favorited" by our expert commentary judges. +Also, I've heard some concern about people trying to "cheat" the system by simply dropping in random votes in order to rack up pointlets and win prizes. We're watching for that - we log IP addresses, vote times, and a lot of other data. We'll be filtering the votes before awarding prizes, so there's just no value in cheating. _You won't see that filtering -_ we're doing it on an offline copy of the data so that there's no chance of accidentally deleting anything valuable - but you'll also be happy to know that, right now, there's very little in the way of anything suspicious, and nothing that's been confirmed. +I want to re-emphasize that the CrowdScore activity doesn't become a true learning experience until _after the Games are over,_ which is when we can start mining that data and divining some crowdsourced best practices and patterns - creating our own community sense of "right and wrong" in PowerShell. I also want to point out that, after the Games, we'll be posting all entries, and their comments, into easier-to-download archives (I know the Web site doesn't make copy n paste super-easy; that's largely an artifact of what we need to do to display things properly; we're not offering downloads at this time mainly to control server load). +Enjoy Event 2! + + [1]: http://scriptinggames.org/ + [2]: https://powershell.org/the-scripting-games/scripting-games-judges-notes/ + [3]: https://powershell.org/category/announcements/scripting-games/judges-notes/ diff --git a/content/articles/2013/05/event-2-smart-aleck/index.md b/content/articles/2013/05/event-2-smart-aleck/index.md new file mode 100644 index 000000000..132a6695c --- /dev/null +++ b/content/articles/2013/05/event-2-smart-aleck/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-05-08-event-2-smart-aleck/ +title: Event 2 Smart-Aleck +authors: + - Don Jones +date: "2013-05-08T21:08:11+00:00" +aliases: + - /2013/05/event-2-smart-aleck/ +--- + +Very funny.[ + ](https://powershell.org/wp-content/uploads/2013/05/FirefoxScreenSnapz001.jpg) +[![FirefoxScreenSnapz001](https://powershell.org/wp-content/uploads/2013/05/FirefoxScreenSnapz001.jpg)](https://powershell.org/wp-content/uploads/2013/05/FirefoxScreenSnapz001.jpg) diff --git a/content/articles/2013/05/event-3-my-notes/index.md b/content/articles/2013/05/event-3-my-notes/index.md new file mode 100644 index 000000000..0cf58d08e --- /dev/null +++ b/content/articles/2013/05/event-3-my-notes/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2013-05-17-event-3-my-notes/ +title: "Event 3: My notes…" +authors: + - Bartek Bielawski +date: "2013-05-17T21:56:13+00:00" +aliases: + - /2013/05/event-3-my-notes/ +--- + +I'm almost done judging event 3, perfect time to share few thoughts about things I've seen in this event. A lot of great entries, but still few things that could have been done (in my opinion) better. If you want to know my general opinion - you can read it either in [English](http://becomelotr.wordpress.com/2013/05/17/event-3-my-notes/) or in [Polish](http://powershellpl.net/2013/05/17/scripting-games-moje-notatki-3/). Enjoy! diff --git a/content/articles/2013/05/event-3-my-way/index.md b/content/articles/2013/05/event-3-my-way/index.md new file mode 100644 index 000000000..8f814a073 --- /dev/null +++ b/content/articles/2013/05/event-3-my-way/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2013-05-13-event-3-my-way/ +title: "Event 3: My way…" +authors: + - Bartek Bielawski +date: "2013-05-14T07:09:35+00:00" +aliases: + - /2013/05/event-3-my-way/ +--- + +Third event is open for voting, but as usual - before I see any of the scripts submitted by you, I'm posting my version. Tried to sneak in few tricks I've learned here and there, hope you will enjoy reading and will tell me why I'm wrong. 😉 You can find whole post [here](http://becomelotr.wordpress.com/2013/05/14/event-3-my-way/). diff --git a/content/articles/2013/05/event-4-my-notes/index.md b/content/articles/2013/05/event-4-my-notes/index.md new file mode 100644 index 000000000..d531f1a72 --- /dev/null +++ b/content/articles/2013/05/event-4-my-notes/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2013-05-25-event-4-my-notes/ +title: "Event 4: My notes…" +authors: + - Bartek Bielawski +date: "2013-05-25T21:09:10+00:00" +aliases: + - /2013/05/event-4-my-notes/ +--- + +Active Directory is one of those things I just love to work with. That's why I was really looking forward to this event. As always, I learned few things, but still - seen some mistakes that I would like to highlight. As always - you can read about those both in [Polish](http://powershellpl.net/2013/05/25/scripting-games-moje-notatki-4/) and in [English](http://becomelotr.wordpress.com/2013/05/25/event-4-my-notes/). Enjoy! diff --git a/content/articles/2013/05/event-4-notes/index.md b/content/articles/2013/05/event-4-notes/index.md new file mode 100644 index 000000000..a2fef896c --- /dev/null +++ b/content/articles/2013/05/event-4-notes/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-05-23-event-4-notes/ +title: Event 4 Notes +authors: + - Don Jones +date: "2013-05-23T15:10:15+00:00" +aliases: + - /2013/05/event-4-notes/ +--- + +Loved seeing **[OutputType([PSObject])]** in an entry this morning... that helps the help system document what your script produces. It's a shame it doesn't work well with custom type names (since those are a bit of a fake-out on the object), but it's an attention to detail I appreciate. +I **am** seeing a little bit of misunderstandings. Keep in mind that the lastLogonTimestamp attribute in AD is the one that replicates, although there is a long possible delay in that replication. There are other "last logged on" attributes that _don't_ replicate so you can't rely on them unless you're querying every DC (pretty inefficient). +Hey, one thing to think about: sometimes simpler is better. For example, instead of adding a dozen lines to check and see if a module exists and can be loaded, just add a #requires comment for that module. Let the shell do that work and spew an error if the module isn't present. It'll even force-load the module into memory. Saves lots of steps. +Hey, don't declare functions as **global:Do-This**. It's a neat trick, but you're polluting the shell's global scope. Plan to write in-scope functions and make them a script module, so they can be loaded and unloaded. From the Games perspective, "whatever," but in the real world... don't pollute the global scope. +A comment I saw: "You should check to make sure the module isn't loaded before loading it again." Disagree. The shell does this for you when you use Import-Module. But, doc your module dependency in a #requires, and you won't have to worry about the module. In fact, the whole theme of "checking to see if the AD module is loaded" appears to be a major point of commenting. I'm a fan of "easier" and a 1-line **#requires -module ActiveDirectory** is far easier to write and maintain than, say, and entire function designed specifically to load the ActiveDirectory module. diff --git a/content/articles/2013/05/few-notes-written-after-event-1/index.md b/content/articles/2013/05/few-notes-written-after-event-1/index.md new file mode 100644 index 000000000..f9bea172b --- /dev/null +++ b/content/articles/2013/05/few-notes-written-after-event-1/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-05-01-few-notes-written-after-event-1/ +title: Few notes written after event 1. +authors: + - Bartek Bielawski +date: "2013-05-02T06:48:11+00:00" +aliases: + - /2013/05/few-notes-written-after-event-1/ +--- + +As promised, today more general thoughts on scripts I've seen in both categories in the first event. I'm Polish, so I decided to blog notes both in my own language, and in English, "just in case". Also, my Polish is much better than my English (I hope!), so for people from Poland: they can read Polish version, without the pain of translating my-English to English-English. Enjoy! +[English version](http://becomelotr.wordpress.com/2013/05/02/event-1-my-notes/) +[Polish version](http://powershellpl.net/2013/05/02/scripting-games-moje-notatki-1/) diff --git a/content/articles/2013/05/free-powershell-workshop-video-from-techmentor-and-me/index.md b/content/articles/2013/05/free-powershell-workshop-video-from-techmentor-and-me/index.md new file mode 100644 index 000000000..51909d4a6 --- /dev/null +++ b/content/articles/2013/05/free-powershell-workshop-video-from-techmentor-and-me/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2013-05-31-free-powershell-workshop-video-from-techmentor-and-me/ +title: Free PowerShell Workshop Video from TechMentor and Me +authors: + - Don Jones +date: "2013-05-31T12:16:42+00:00" +categories: + - Training +aliases: + - /2013/05/free-powershell-workshop-video-from-techmentor-and-me/ +--- + +At the last [TechMentor][1] (in Orlando), I did a Windows PowerShell pre-conference workshop. The conference was kind enough to let me record it - I basically just used Camtasia, so this isn't a professional video by any stretch, but it gives you an idea of what a TechMentor conference is like. Obviously, my focus was on the folks in the room, but you can see all of the demos and hear me pretty clearly. [You can view the video for free][2], although note that registration is required. + + [1]: http://techmentorevents.com + [2]: http://techmentorevents.com/forms/don-jones-video.aspx diff --git a/content/articles/2013/05/jan-egils-event-3-learning-points/index.md b/content/articles/2013/05/jan-egils-event-3-learning-points/index.md new file mode 100644 index 000000000..1d547e1e7 --- /dev/null +++ b/content/articles/2013/05/jan-egils-event-3-learning-points/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2013-05-16-jan-egils-event-3-learning-points/ +title: "Jan Egil's Event 3 Learning Points" +authors: + - Don Jones +date: "2013-05-16T21:54:14+00:00" +aliases: + - /2013/05/jan-egils-event-3-learning-points/ +--- + +Another judge steps up with some tips! diff --git a/content/articles/2013/05/jan-egils-event-4-notes/index.md b/content/articles/2013/05/jan-egils-event-4-notes/index.md new file mode 100644 index 000000000..9895972c6 --- /dev/null +++ b/content/articles/2013/05/jan-egils-event-4-notes/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2013-05-22-jan-egils-event-4-notes/ +title: "Jan Egil's Event 4 Notes" +authors: + - Don Jones +date: "2013-05-22T15:47:46+00:00" +aliases: + - /2013/05/jan-egils-event-4-notes/ +--- + +Jan offers some perspective on Event 4 at  diff --git a/content/articles/2013/05/judge-notes-for-event-1/index.md b/content/articles/2013/05/judge-notes-for-event-1/index.md new file mode 100644 index 000000000..79e74c4ec --- /dev/null +++ b/content/articles/2013/05/judge-notes-for-event-1/index.md @@ -0,0 +1,29 @@ +--- +url: /articles/2013-05-02-judge-notes-for-event-1/ +title: Judge Notes for Event 1 +authors: + - Art Beane +date: "2013-05-02T17:24:49+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/05/judge-notes-for-event-1/ +--- + + A lot of you have been working too hard at solving the problem (both beginner and advanced). Some of this is clearly related to trying to offer a very complete solution but some look like attempts to write extra clever or elegant code. In the "real world", there"™s probably not enough time or interest in putting lots of effort into these extras. The minimum it takes to achieve the goal is most often good enough. Here are a couple of examples to illustrate this (with the intent of providing a learning opportunity). +Working with the destination folder address. +A common error here was missing the subdirectory. Most folks got this correct by using some version of _$_.FullName.Replace("˜C:\Application\Log"™,"™\\NASServer\Archives"™)_ or _Join-Path "˜\\NASServer\Archives"™ $_.Directory.Name_, but there were a number who just used the root destination folder name without looking for the subfolder. And some others had solutions that (although I thought were innovative), took too much effort. Among them are: + + +`Join-Path "˜\\NASServer\Archives"™ ($_.Directory.Split("˜\"™)[-1]) +$_.FullName "“Replace [regex]::Escape("˜C:\Application\Log"™,"™\\NASServer\Archives"™) +`Once computing the destination, most solutions checked to see if the folder existed and created it if it was missing. But some just tried to create it anyway (too much effort) and others who did not (too little effort). +I"™m not going to comment on the use of Copy-Object vs. Move-Object other than to say that (related to the destination folder) it looks like some people thought the cmdlets would create the path structure but never tested to see that they don"™t. Don't forget to test your solution to verify that it works: working code is far more important that "pretty" or "elegant" code. +**Using Try-Catch-Finally.** +Try-Catch-Finally is an awesomely potent construct but you really need to understand how it works. Here's why I think it is serious overkill for this problem. Compare these: + + +`If (-not (Test-Path $DestinationFolder)) {New-Item "“ItemType Directory "“Path $DestinationFolder}`Try {Test-Path $DestinationFolder "“ErrorAction Stop} Catch {New-Item "“ItemType Directory "“Path $DestinationFolder} +`Look the same, right? But they have very different results, not to mention different typing efforts. If the destination folder does not exist, then with IF, the folder gets created, but with Try-Catch it will not. This is because Test-Path will return $false, but NO error, so the catch clause will never execute. +Most folks understand that a terminating error has to occur in the Try script block in order for the Catch block to execute. But, instead of using the "“ErrorAction Stop parameter in the cmdlet, some of the solutions set $ErrorActionPreference to Stop and then reset it to Continue in a Finally block. There are two problems with this. First, it forces every command in the Try block to generate terminating errors, when there"™s normally only one that you care about. Second, $ErrorActionPreference might not have been originally set to Continue. Shouldn"™t the previous value be saved and then restored in Finally? +So, going forward, think about how hard you"™re working to get to an answer. Don"™t use a more complex method than you need to in order to solve a problem. Make good use of Get-Help to verify the parameters and outputs of the cmdlets that you use. And test your objects with Format-List and Get-Member to make sure that the properties really are what you think they are. diff --git a/content/articles/2013/05/judge-notes-for-event-3/index.md b/content/articles/2013/05/judge-notes-for-event-3/index.md new file mode 100644 index 000000000..8a5da3d60 --- /dev/null +++ b/content/articles/2013/05/judge-notes-for-event-3/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-05-16-judge-notes-for-event-3/ +title: Judge notes for event 3 +authors: + - Art Beane +date: "2013-05-16T15:33:16+00:00" +aliases: + - /2013/05/judge-notes-for-event-3/ +--- + +This event's entries are impressive. Scoring appears to be higher than in the earlier events, so this one must have been easier to solve. So this time, instead of talking about good and bad scripts, I'm going to comment on some of the techniques I saw. +There was some "conversation" over whether Win32_Volume or Win32_LogicalDisk was the better approach to take. Fact is, either will return the requested data. So it really doesn't matter which one you use. The controversy seemed to include misreading or misunderstanding the requirement of reporting on "local hard drives", which implies that you need to use _-Filter "DriveType=3"_ (or equivalent) with either to eliminate network or CD/DVD drives. +When passing a Path parameter into a function, it's a good practice to include _[ValidateScript ({Test-Path -PathType Container})]_ in the definition to avoid having a file name passed in error. Doing the existence test for the path and creating it if necessary in the Begin section of the function would save some time over the various techniques used in the Process section. +One thing to remember when using a CIMSession is to close it when you've finished using it. A couple other points to pay attention to include accounting for the DCOM/WSMAN options when looking at remote computers and including _#requires -version 3_ in scripts that might be run by other people on computers that might not have PowerShell 3 installed. +Using a REGEX to validate a string parameter, such as a computer name, isn't a bad idea, but it's important to understand exactly what the match string means. As an example, some of the match strings included a pattern like this: _"[a-zA-Z0-9.-]"_. This means all lower and upper case letters, any numeric digit, any character, or a minus sign. The any character (".") defeats the whole purpose of the match. It really should have been escaped to "\." to mean a period. This error would probably never appear due to the unlikelihood of a badly formatted computer name being fed into the function. +Lastly, a caution when including an optional credentials parameter. It's probably not a good idea to default it to an empty credential object _($Credential = [System.Management.Automation.PSCredential]::Empty)_. If you do a _if ($Credential) {}_ call later in the script, it will always be $true and you may end up calling for the user to enter credentials far too many times. A better solution would be to check PSBoundParameters to see if a credential object was passed in. +Hope these ideas help. Good luck in Event 4. diff --git a/content/articles/2013/05/judge-notes-for-event-4/index.md b/content/articles/2013/05/judge-notes-for-event-4/index.md new file mode 100644 index 000000000..0066679d9 --- /dev/null +++ b/content/articles/2013/05/judge-notes-for-event-4/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2013-05-23-judge-notes-for-event-4/ +title: Judge notes for Event 4 +authors: + - Art Beane +date: "2013-05-23T14:56:59+00:00" +aliases: + - /2013/05/judge-notes-for-event-4/ +--- + + Wow! That's the only word I can think of to describe the submissions this time. I'm really impressed with the approaches taken to solve this problem. The only thing that could have been better is quitting when the ActiveDirectory module or the Quest snapin weren't found. I chalked that up to not having experience with an actual audit where no answer is not acceptable, so I didn't count against it when evaluating the scripts. But, on this point kudos to the one script that tested for the AD module, then the Quest snapin, and fell back to the ADSI accelerator if neither were found. +**Beginner entries** +For me, the best entries were those that had the shortest pipelines. Those of you who used _Get-Random -Count 20 -InputObject (Get-ADUser...) | Select ... | ConvertTo-Html | Out-File_ had the shortest. And those who used _Get-ADUser | Get-Random -Count 20_ were a close second. +A couple of entries had something that at first I thought was silly. But, instead, it offers a learning opportunity. Here's the code fragment: _Get-ADUser -Filter {ObjectClass -eq 'User'}_. Paying attention to what the cmdlet does saves a lot of typing, not only here where the filter is redundant, but also when entering other parameters. For example, a similar extra effort occurs when default properties are explicitly listed in a -Properties parameter. +**Advanced entries** +As mentioned, the best entries were those that fell back to the [ADSI] accelerator when the AD module or the Quest snapin weren't found. Making this kind of check and fallback is pretty important when responding to audit requests. This reminds me of a case where I actually had to respond to an audit request with the actual last logon date in a domain with mixed W2K3, W2K8, and W2K8R2 domain controllers. The default choice was to use the AD module, but since we had to check each domain controller (there were 72 of them), it turned out to be a real pain determining which method to use on each of them. In the end, we decided to install the Quest tools on the audit server and just avoid the issue. +There were several different methods used to verify the presence of the AD module before trying to load it. Most of them were actually more work that really necessary. The reason for this is that the Import-Module cmdlet does not return an error if the module has already been loaded. Thus, the easiest test would be: + + +`Try { Import-Module ActiveDirectory -ErrorAction Stop $Users = Get-ADUser ... } Catch { Write-Error "AD Module not available" # Fall back to ADSI to get User data } +`The same is true for Add-PSSnapin for PowerShell 3, but in V2, it generates an error with "because it is already added" in $Error[0].Exception.Message. So, you can use something similar to check for that. +To close out this set of comments, here's something to think about. The topic is embedded, or local, functions in a master function. Question 1: should you even go through the trouble of writing a local function if it's only going used one time? Question 2: since the local function will execute in a controlled environment, does it need to be an advanced function with comments and parameter validation, or would a simple function make more sense? +Until next time: keep up the great work!! diff --git a/content/articles/2013/05/meet-the-scripting-games-judges-bartek-bielawski/index.md b/content/articles/2013/05/meet-the-scripting-games-judges-bartek-bielawski/index.md new file mode 100644 index 000000000..a929a68b7 --- /dev/null +++ b/content/articles/2013/05/meet-the-scripting-games-judges-bartek-bielawski/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-05-15-meet-the-scripting-games-judges-bartek-bielawski/ +title: "Meet the Scripting Games Judges: Bartek Bielawski" +authors: + - Don Jones +date: "2013-05-15T21:18:14+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/meet-the-scripting-games-judges-bartek-bielawski/ +--- + +Bartosz (Bartek) Bielawski is a busy IT Administrator with an international company, PAREXEL. He loves PowerShell and automation. That love earned him the honor of Microsoft MVP. He shares his knowledge mainly on his blogs: in English (http://becomelotr.wordpress.com) and Polish (http://powershellpl.net) and through articles published in the Polish IT Professional (http://it-professional.pl) magazine. He is co-author of PowerShell Deep Dives book (http://www.manning.com/hicks/). He loves good code that takes advantage of PowerShell pipeline and advanced functions grouped in modules. diff --git a/content/articles/2013/05/meet-the-scripting-games-judges-jan-egil-ring/index.md b/content/articles/2013/05/meet-the-scripting-games-judges-jan-egil-ring/index.md new file mode 100644 index 000000000..1ff8bc62c --- /dev/null +++ b/content/articles/2013/05/meet-the-scripting-games-judges-jan-egil-ring/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-05-09-meet-the-scripting-games-judges-jan-egil-ring/ +title: "Meet the Scripting Games Judges: Jan Egil Ring" +authors: + - Don Jones +date: "2013-05-09T13:37:33+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/meet-the-scripting-games-judges-jan-egil-ring/ +--- + +[Jan Egil Ring][1] is a multiple-year recipient of the Microsoft Most Valuable Professional Award for his contributions in the Windows PowerShell technical community. +He has a strong passion for Windows PowerShell, and regularly writes articles on his [blog][2]. He occasionally also writes articles for others, such as the [PowerShell Magazine.][3] +As a judge in the Scripting Games, he will be writing articles on his blog reviewing both good and bad observations in the reviewed scripts. Clean formatting and avoidance of using aliases in scripts is among the things he will be paying attention to. + + [1]: http://twitter.com/janegilring + [2]: http://blog.powershell.no + [3]: http://www.powershellmagazine.com diff --git a/content/articles/2013/05/meet-the-scripting-games-judges-olver-lipkau/index.md b/content/articles/2013/05/meet-the-scripting-games-judges-olver-lipkau/index.md new file mode 100644 index 000000000..7816e43a4 --- /dev/null +++ b/content/articles/2013/05/meet-the-scripting-games-judges-olver-lipkau/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2013-05-18-meet-the-scripting-games-judges-olver-lipkau/ +title: "Meet the Scripting Games Judges: Olver Lipkau" +authors: + - Don Jones +date: "2013-05-18T13:36:13+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/05/meet-the-scripting-games-judges-olver-lipkau/ +--- + +I have been working for AtoS, formaly Siemens IT Solutions and Services, for 6 years as a IT Consultant. +I was 15 when I started scripting. First only batch scripts to automate simple things. With time the scriptt grew in complexity and languages. VBS, AutoIt, AHK and finally PowerShell, which superseeded all others. PowerShell became a passion and became more and more a daily thing. +I was invited to be a judge for the Scripting Games in 2011, 2012 and now 2013. +You are welcome to visit my Blog at http://oliver.lipkau.net/blog and check out what I have been up to. diff --git a/content/articles/2013/05/meet-the-scripting-games-judges/index.md b/content/articles/2013/05/meet-the-scripting-games-judges/index.md new file mode 100644 index 000000000..438c53677 --- /dev/null +++ b/content/articles/2013/05/meet-the-scripting-games-judges/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2013-05-31-meet-the-scripting-games-judges/ +title: Meet the Scripting Games Judges +authors: + - Glenn Sizemore +date: "2013-05-31T20:42:17+00:00" +categories: + - Announcements +aliases: + - /2013/05/meet-the-scripting-games-judges/ +--- + +I can honestly say that the interactions that I"™ve had with the PowerShell community over the past five years have been some of the most fulfilling. There is something to watching someone learn to script. Some plateau artificially mainly because they don"™t want to leave the GUI. Often they"™re forced into learning PowerShell and stubbornly go into trying to learn as little as possible. If you competed this year you do not fall into that category. You fall into the category that I love working with Talented Specialist that we watch graduate from good to great. I"™m happy to invite this year"™s class into "the club". +For everyone else I have an invitation. If you would like to know what makes a good script great and will be in New Orleans next week for TechEd 2012 NA, then please join the judges of the Scripting Games as we do a public Code review. Simply put we"™ll take a script and as a group discuss what makes it good and bad. We"™re calling it best practices for the real word, but you"™ll see it listed in the directory under [BOF-ITP23][1]. + + [1]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/BOF-ITP23#fbid=LcGTktzJqbc "BOF-ITP23" diff --git a/content/articles/2013/05/more-judges-notes-on-event-2/index.md b/content/articles/2013/05/more-judges-notes-on-event-2/index.md new file mode 100644 index 000000000..3a9425ea5 --- /dev/null +++ b/content/articles/2013/05/more-judges-notes-on-event-2/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-05-08-more-judges-notes-on-event-2/ +title: "More Judges' Notes on Event 2" +authors: + - Don Jones +date: "2013-05-08T19:42:02+00:00" +aliases: + - /2013/05/more-judges-notes-on-event-2/ +--- + +Tobias Weltner: +Jan Egil Ring: +Voting for Event 2 is going strong, and you've got several more days in which to vote and (most importantly) add comments. Hopefully, you're also considering the judges' notes and adjusting your approach for each event. diff --git a/content/articles/2013/05/more-updates-to-the-scripting-games/index.md b/content/articles/2013/05/more-updates-to-the-scripting-games/index.md new file mode 100644 index 000000000..46c78a609 --- /dev/null +++ b/content/articles/2013/05/more-updates-to-the-scripting-games/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-05-16-more-updates-to-the-scripting-games/ +title: More Updates to the Scripting Games +authors: + - Don Jones +date: "2013-05-16T20:50:09+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/more-updates-to-the-scripting-games/ +--- + +I've been making some more programming changes to the Scripting Games, based on folks' feedback. **If you run into problems, please notify me via the Feedback Forums link at the bottom of every page on the site.** Use the email address provided. Don't post a comment here, because I might not see it quickly. + + * **Multiple comments per reviewer -** you can now leave multiple comments on an entry. Combined with the ability to mark your comment as pertaining to a line or range of lines, this should allow for more granular commenting. + * **Comment without voting -** you are now free to offer comments without offering a score. + * **Delete comments** - you can now delete the comments you have written. + +I'm still plugging away at some IE9/10-related errors, which are causing the code reviewer/voter/commenter to not display on some entries. In the meantime, Safari, Chrome, and Firefox seem to be working fine. diff --git a/content/articles/2013/05/notes-for-event-5/index.md b/content/articles/2013/05/notes-for-event-5/index.md new file mode 100644 index 000000000..95dba8b17 --- /dev/null +++ b/content/articles/2013/05/notes-for-event-5/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2013-05-29-notes-for-event-5/ +title: Notes for Event 5 +authors: + - Don Jones +date: "2013-05-29T12:27:33+00:00" +aliases: + - /2013/05/notes-for-event-5/ +--- + +Jan Egil, or Norwegian expert commentator/judge, has posted his learning notes for Event 5:  diff --git a/content/articles/2013/05/notes-on-beginner-event-2/index.md b/content/articles/2013/05/notes-on-beginner-event-2/index.md new file mode 100644 index 000000000..d56de3459 --- /dev/null +++ b/content/articles/2013/05/notes-on-beginner-event-2/index.md @@ -0,0 +1,31 @@ +--- +url: /articles/2013-05-08-notes-on-beginner-event-2/ +title: Notes on Beginner Event 2 +authors: + - Art Beane +date: "2013-05-08T15:29:51+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/05/notes-on-beginner-event-2/ +--- + + First of all, congratulations! It looks to me like a lot of learning is going on; the 2nd event entries look really good to me. I especially liked the way a number of you built up a one-liner by starting with a_ Get-WmiObject Win32_ComputerSystem -ComputerName (Get-Content file.txt)_ and piping it into _Select-Object_ to generate the data. However, there were a couple of areas within the Select block that make me think that some more discussion of what $_ means in a pipeline would be helpful. +Within the Select block, it is necessary to make a call to _Get-WmiObject Win32_OperatingSystem_ to get come additional information. It looks like everybody got the format correct: _@{Name='OS';Expression={Get-WmiObject}}_ where folks got into trouble was in specifying the ComputerName property. Some didn't even include it, meaning that the OS value would be taken from the local computer and not the remote one. But, more often than not, the code contained a plain $_ : _@{Name='OS';Expression={(Get-WmiObject Win32_OperatingSystem -ComputerName $_).Caption}}_. So, what's wrong with this? The problem is the value of $_ at this point in the pipeline. +Let's try an experiment to show what I mean. Try this: + + +`Get-WmiObject Win32_ComputerSystem | Select-Object @{Name='OS';Expression={Get-WmiObject Win32_OperatingSystem -ComputerName $_}} +`What does it return? Only the label "OS" with no data and no error message. Why? To find out, lets change the code a little and see. + + +`Get-WmiObject Win32_ComputerSystem | foreach {Get-WmiObject Win32_OperatingSystem -ComputerName $_} +`This time, we do get an error message: + + +`Get-WmiObject : Invalid parameter At line:1 char:47 + Get-WmiObject Win32_ComputerSystem | foreach {Get-WmiObject Win32_OperatingSyste ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Get-WmiObject], ManagementException + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand +` "Invalid Parameter" means that $_ isn't a computer name. What is it? It's actually the entire Win32_ComputerSystem object. What you need to do is to select one of the object properties that contains the system's name ($_.__SERVER, $_.Name, or $_.PSComputerName). +Hopefully, this wasn't too long or complex a description. The point is be careful in your pipelines that you know exactly what $_ means at each step. + +> +> diff --git a/content/articles/2013/05/notes-on-event-5/index.md b/content/articles/2013/05/notes-on-event-5/index.md new file mode 100644 index 000000000..579daedfa --- /dev/null +++ b/content/articles/2013/05/notes-on-event-5/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-05-30-notes-on-event-5/ +title: Notes on Event 5 +authors: + - Art Beane +date: "2013-05-30T13:54:17+00:00" +aliases: + - /2013/05/notes-on-event-5/ +--- + +Into the home stretch and the entries just keep getting better! The only advice I'd like to offer this time is to be careful to read the instructions carefully. They included the specific folder where the files were located and I noticed several misinterpretations in the scripts. Some included a mandatory Path parameter and others had a default Path that was not the specified folder. Including an optional Path with the correct default would certainly be acceptable, but not those variations. +The instructions also included some ambiguity about what the log file actually contains. Was the client IP address in the first column (as specified in the instructions) or in a different column (as presented in the example logs)? There were a number of entries that just searched the logs for IP addresses and returned all of them. This approach would not be able to distinguished between the client and server addresses, which would give a wrong answer. Another approach searched for the "c-ip" column, but this would only work if the log files were as in the samples. Another method, select the second IP address in a line would also only work on the sample log style. There weren't many entries that supported both file types, but one of them did it in a very concise manner, checking the first and ninth columns for an IP address and selecting the correct one. +Most of the entries used _Sort-Object -Unique_ or _Select-Object -Unique_ to eliminate duplicates, which was the first approach that I thought of. There were several entries, however, that used alternate methods that I thought were quite clever applications of PowerShell technology: hash tables with the IP address as the key, and _Group-Object_ on the IP address. Both options provided a fairly simple way to also report the instance count for each address. +Returning an instance count sounds like an interesting option, but after thinking about it some more, I'm not so sure. Counts of the number of sessions and the hits per session would be much more interesting than the raw hits count. But that's way, way beyond the scope of this event. +Anyway, just one more event to go. I'm expecting a spectacular finish! diff --git a/content/articles/2013/05/ok-im-impressed-scripting-games-week-1/index.md b/content/articles/2013/05/ok-im-impressed-scripting-games-week-1/index.md new file mode 100644 index 000000000..630861eef --- /dev/null +++ b/content/articles/2013/05/ok-im-impressed-scripting-games-week-1/index.md @@ -0,0 +1,65 @@ +--- +url: /articles/2013-05-03-ok-im-impressed-scripting-games-week-1/ +title: "OK i'm impressed: Scripting Games Week 1" +authors: + - Glenn Sizemore +date: "2013-05-03T14:44:21+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/ok-im-impressed-scripting-games-week-1/ +--- + +Well guys, and gals another year has passed, and the annual scripting games are upon us again.  After a week of reviewing submissions for their technique and style I must say that I am truly impressed!  As a community the average ability seems to be growing by leaps and bounds.  That"™s not to say we"™re all Samurai just yet, but we"™re getting there! +Before I go off and nit-pick I want to congratulate you all on a small mountain of really well written scripts.  Some of the things that the community was preaching 5 years ago are now just standard.  Stuff like comment your code, format for readability, and Parameters.  At this point I"™m convinced those who still aren't conforming are simply non-conformist and well that"™s a lost cause.  For the rest of us great work and keep it up! +**Where is the Help! +** +What I  +didn't + see enough of in the advanced category is help.  Honestly if you"™re going to write a 200 line script fill out the help!  It"™s not that hard and it is THE difference between a good script and a great solution! It"™s also one of the fundamental differences between hacking and tool building, both are focused around automating a given problem set.  The hacker just gets it to work, the tool builder makes it usable by the masses.  If you haven"™t figured it out yet the real money is in tool building, I"™m just sayin! + +**Trust but Validate. +** +I was pleasantly surprised by the amount of error handling in this first round of submissions, however I was disappointed by the lack of parameter validation.  When done correctly parameter validation can remove most of the potential errors a script can run into, and the best part is you find out that it"™s not going to work before the script does anything!  For example in this week"™s scenario every single script was asked to supply a source and destination path.  The following would have removed all but an access denied error. + + +`Param ( + [Parameter(Mandatory=$true, ValuefrompipelineByPropertyName=$true)] + [ValidateScript({Test-Path $_ -PathType Container})] + [Alias("FullName")] + [string]$Source +, + [Parameter(Mandatory=$true, ValuefrompipelineByPropertyName=$true)] + [ValidateScript({Test-Path $_ -PathType Container})] + [Alias("FullName")] + [string]$Destination +) +`This is the equivalent of filter to the left, and  +I've + talked to endless developers who are a little jealous of our ability to use an arbitrary scriptblock for parameter validation. For more static values the ValidateSet attribute will perform the same function, but with the added benefit of Intelli-sense and tab completion.* Guys use this* I"™m telling you it"™s one of the most powerful features in PowerShell and I just don"™t see it use often enough, but then again[ I"™ve been tilting at this windmill for years now.](http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/15/simplify-your-powershell-script-with-parameter-validation.aspx) + +**Parameter names +** +This one is a little more nitpicky than the average, but honestly there simply isn"™t an excuse for a script with three parameters to all start with the same letter.  Meaning the following is just disrespectful to yourself and your users. + + +`Param( + [String]$ArchiveSource, + [String]$ArchiveDestination, + [String]$ArchiveAge +) +`I mean that"™s a no-brainer right?  I don"™t assume malice here just a lack of focus.  Anyone who stops and thinks about it immediately sees the problem, and solution. So I guess what I"™m asking is that we collectively take a second to think about usability.  For those of you that haven"™t had your coffee yet. The solution is that since three parameters all contain Archive we need to move that bit from the beginning of each parameter name.   In this case since there is no real need to differentiate I would suggest removing it all together. + + +`Param( + [String]$Source, + [String]$Destination, + [String]$Age +) +`Here we"™re focusing on what"™s really important which makes the parameters easier to comprehend, but also lets us get to TAB faster which is a huge part of usability! +**Bring it in +** +In summary all in all I would say we had a fantastic showing for our industry this initial week.  I really like the new site and voting has been very productive which is nice.  As we head into week two I look forward to what"™s to come as we collectively build upon what we"™ve learned this week. + + +~Glenn diff --git a/content/articles/2013/05/people-who-are-blogging-about-the-2013-scripting-games/index.md b/content/articles/2013/05/people-who-are-blogging-about-the-2013-scripting-games/index.md new file mode 100644 index 000000000..ded43b9da --- /dev/null +++ b/content/articles/2013/05/people-who-are-blogging-about-the-2013-scripting-games/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-05-11-people-who-are-blogging-about-the-2013-scripting-games/ +title: People Who are Blogging About the 2013 Scripting Games +authors: + - Mike F Robbins +date: "2013-05-11T23:13:49+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/people-who-are-blogging-about-the-2013-scripting-games/ +--- + +I'm sure that most people can easily find any of the blogs of the official judges from the 2013 Scripting Games. I recommend reading those blogs whether you're competing in the scripting games or not since there's a wealth of great information contained in them. The best place to find those blogs if you don't know already is the [Judges Notes section](https://powershell.org/category/announcements/scripting-games/judges-notes/) under the [Scripting Games area](https://powershell.org/category/announcements/scripting-games/) on [PowerShell.org](https://powershell.org/) so there's no reason to duplicate them here. +There are also a number of people who are competing in the Scripting Games that are writing blog articles of their own blog sites. A couple of the ones that I'm aware of are listed below and while they're my competition in the advanced class and have links promoting their Scripting Games entries in their blogs (I do the same thing),  I don't mind promoting their blog articles because there's some great information to be found in them. I'm actually glad they provided links to their entries because both of these guys are excellent PowerShell scripters and you could learn a lot from viewing their Scripting Games entries. Ultimately the scripting games is all about the community learning more about using PowerShell best practices in a friendly competition that's just for fun. [Click here](http://mikefrobbins.com/2013/05/11/people-who-are-blogging-about-the-2013-scripting-games/) to be redirected to the original post of this article on the author's blog site where you can read the remainder of the article. +µ diff --git a/content/articles/2013/05/phillyposh-05022013-meeting-summary-and-presentation-materials/index.md b/content/articles/2013/05/phillyposh-05022013-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..a19b15930 --- /dev/null +++ b/content/articles/2013/05/phillyposh-05022013-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,42 @@ +--- +url: /articles/2013-05-07-phillyposh-05022013-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 05/02/2013 meeting summary and presentation materials +authors: + - John Mello +date: "2013-05-08T02:56:14+00:00" +aliases: + - /2013/05/phillyposh-05022013-meeting-summary-and-presentation-materials/ +--- + +- + [Jeff Wouters](http://jeffwouters.nl/) gave an excellent [presentation ](https://powershell.org/wp-content/uploads/2013/05/PhillyPosh_2013-05-02_Presentation_JeffWouters.zip)via Lync on: + + + Avoiding the pipeline + + + - + Improving your learning curve + + + - + Improving your teaching curve + + + + + + + - + [John Mello](http://technet.microsoft.com/en-us/library/hh529924%28v=exchg.141%29.aspx#BKMK_MultiValueCustom) gave a [presentation and demo of script ](https://powershell.org/wp-content/uploads/2013/05/PhillyPosh_2013-05-02_ScriptClub.zip)that uses [Exchange multi-valued custom attributes](http://technet.microsoft.com/en-us/library/hh529924%28v=exchg.141%29.aspx#BKMK_MultiValueCustom) to store information on when to remove users from a security group after a specified amount of days. + + + - + Standalone meeting material links + + + [PhillyPosh_2013-05-02_ScriptClub](https://powershell.org/wp-content/uploads/2013/05/PhillyPosh_2013-05-02_ScriptClub.zip) + + + - + [PhillyPosh_2013-05-02_Presentation_JeffWouters](https://powershell.org/wp-content/uploads/2013/05/PhillyPosh_2013-05-02_Presentation_JeffWouters.zip) diff --git a/content/articles/2013/05/placing-comment-based-help/index.md b/content/articles/2013/05/placing-comment-based-help/index.md new file mode 100644 index 000000000..0f05b4734 --- /dev/null +++ b/content/articles/2013/05/placing-comment-based-help/index.md @@ -0,0 +1,68 @@ +--- +url: /articles/2013-05-03-placing-comment-based-help/ +title: Placing Comment-Based Help +authors: + - June Blender +date: "2013-05-03T19:03:39+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/05/placing-comment-based-help/ +--- + +What an amazing event. I'm now reading through each of the Advanced entries in a vain attempt to whittle the entries down to a short list. It's an incredibly difficult task, which is testament to your skill and diligence. We are so lucky to have so many competent scripters in the community. +As I read through the comments on each script, I've noticed several that say: +"Help should be nested under the function to work properly." +Au contraire! This is not true and I want to make sure that people who see this comment are not misled. The Windows PowerShell team designed comment-based help to be really flexible. +As I explained in [about_Comment_Based_Help][1], you can put comment-based help for a function in one of three positions: + + * At the beginning of the function body + * At the end of the function body + * On the line before the Function keyword + +So, all of these work. + + +`function Move-OldFiles +{ +<# +.Synopsis + Moves old log files to an archive directory. +#> + Param + ( + [parameter(Mandatory=$true)] + [String] + $InputDirectory + ) +}`function Move-OldFiles +{ + Param + ( + [parameter(Mandatory=$true)] + [String] + $InputDirectory + ) + #Script logic goes here +<# +.Synopsis + Moves old log files to an archive directory. +#> +}`<# +.Synopsis + Moves old log files to an archive directory. +#> +function Move-OldFiles +{ + Param + ( + [parameter(Mandatory=$true)] + [String] + $InputDirectory + ) + #Script logic goes here +} +`If you place the comment-based help on the line before the Function keyword, make sure that there is, at most, one blank line between the end of the comment-based help and the line with the function keyword. To avoid this problem, I always make sure that there are no blank lines between the end of the comment-based help and the Function keyword. +When reading the comments about your solutions, please remember that we are all volunteers. Everyone who takes the time to comment on your solution is trying to help, and should be appreciated, but not every comment is correct. Trust, but verify! + + [1]: http://go.microsoft.com/fwlink/?LinkID=144309 diff --git a/content/articles/2013/05/powershell-summit-videos/index.md b/content/articles/2013/05/powershell-summit-videos/index.md new file mode 100644 index 000000000..e362112be --- /dev/null +++ b/content/articles/2013/05/powershell-summit-videos/index.md @@ -0,0 +1,34 @@ +--- +url: /articles/2013-05-07-powershell-summit-videos/ +title: PowerShell Summit Videos +authors: + - Don Jones +date: "2013-05-07T15:52:59+00:00" +categories: + - PowerShell Summit +aliases: + - /2013/05/powershell-summit-videos/ +--- + +Aaron Hoover, one of our Summit attendees, was kind enough to record via webcam the sessions he attended - and he's posted about 13 hours of video on YouTube for your viewing pleasure. +What I'd like to know from you, if you don't mind dropping a comment below, is what you think of these. If we offered this KIND of recording in the future, would it be helpful? This is something we can do easily and is affordable from a technical perspective; there's obviously a production quality compromise. We can do more... but it costs more, and someone's going to have to pay for it. So... where do you sit on this kind of recording? + + * http://youtu.be/0NeEU3FHp8I Device Management With PowerShell - Ricardo Mendes - PowerShell Summit 2013 + * http://youtu.be/XsnE_OQGvdo Creating a Complex and Reusable HTML Reporting Structure - Alan Renouf - PowerShell Summit 2013 + * http://youtu.be/iV6cYsQDL0Y How Secure Can You Be - Jeff Hicks PowerShell Summit 2013 + * http://youtu.be/qSE06GkQWV4 Standards Based Hardware Management - Steve Lee - PowerShell Summit 2013 + * http://youtu.be/7C53pawPw3Y Workshop - Automating for DevOps - Kenneth Hansen and Hemant Mahawar - PowerShell Summit 2013 + * http://youtu.be/KFA-zSojxqw CIM Sessions - Richard Siddaway - PowerShell Summit 2013 + * http://youtu.be/EloMKpvfES8 PowerShell Web Access - Richard Siddaway - PowerShell Summit 2013 + * http://youtu.be/3deY6e6Npzo Sapien PowerShell Products - David Corrales - PowerShell Summit 2013 + * http://youtu.be/xZtapxf1ytI What I learned Judging 5000 Scripts - Ed Wilson - PowerShell Summit 2013 + * http://youtu.be/Ahvs1rGPk1s PowerShell Events - Richard Siddaway - PowerShell Summit 2013 + * http://youtu.be/U_niW85TtJE Write Modules, Not Scripts - Ed Wilson - PowerShell Summit 2013 + * http://youtu.be/Y8IbadEHoPg PoshMon - PowerShell Does Performance Counters - Ed Wilson - PowerShell Summit 2013 + * http://youtu.be/1XuB71tLNvg Configuring Your PowerShell Workflow Environment - Aleksandar Nikolic - PowerShell Summit 2013 + * http://youtu.be/msHGx-mxWJA Practical PowerShell Integration from Bare Metal to the Cloud - Alan Renouf - PowerShell Summit 2013 + * http://youtu.be/eAZ-agh182g Source Control for IT Pros - Andy Schneider - PowerShell Summit 2013 + * http://youtu.be/pL_Ry5LzX3w Creating HTML Reports with Style - Jeff Hicks - PowerShell Summit 2013 + * http://youtu.be/-ERyfmOmyoI Remoting Configuration Deep Dive - Don Jones - PowerShell Summit 2013 + * http://youtu.be/jMVBN5V0G4Y Advanced Network Scripting with PowerShell - Lee Holmes - PowerShell Summit 2013 + * http://youtu.be/GXkLtEOM-DM Build Your Demo Environment with Windows PowerShell - Aleksandar Nikolic - PowerShell Summit 2013 diff --git a/content/articles/2013/05/scheduled-powershell-org-maintenance-may-17-18/index.md b/content/articles/2013/05/scheduled-powershell-org-maintenance-may-17-18/index.md new file mode 100644 index 000000000..bad35df10 --- /dev/null +++ b/content/articles/2013/05/scheduled-powershell-org-maintenance-may-17-18/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-05-16-scheduled-powershell-org-maintenance-may-17-18/ +title: Scheduled PowerShell.org Maintenance May 17-18 +authors: + - Don Jones +date: "2013-05-17T00:04:59+00:00" +categories: + - Announcements +aliases: + - /2013/05/scheduled-powershell-org-maintenance-may-17-18/ +--- + +We'll be doing some maintenance on the site Friday and Saturday, and it may be down for periods during the maintenance. Don't panic. This will not affect access to The Scripting Games Web site at all. diff --git a/content/articles/2013/05/scripting-games-2013-event-1-favorite-and-not-so-favorite-submissions/index.md b/content/articles/2013/05/scripting-games-2013-event-1-favorite-and-not-so-favorite-submissions/index.md new file mode 100644 index 000000000..81bde8744 --- /dev/null +++ b/content/articles/2013/05/scripting-games-2013-event-1-favorite-and-not-so-favorite-submissions/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-05-02-scripting-games-2013-event-1-favorite-and-not-so-favorite-submissions/ +title: "Scripting Games 2013: Event 1 \"˜Favorite' and \"˜Not So Favorite' Submissions" +authors: + - Boe Prox +date: "2013-05-03T03:07:27+00:00" +aliases: + - /2013/05/scripting-games-2013-event-1-favorite-and-not-so-favorite-submissions/ +--- + +As a follow-up to my [previous blog](http://learn-powershell.net/2013/05/01/scripting-games-2013-thoughts-after-event-1/) post, I plan to pick out a submission or two or three which stood out as my personal favorite and least favorite and tell you why I think this by pointing pieces of code that was either put together nicely or could have been improved in one way or another. Depending on my time, I will do at least 1 Advanced and 1 Beginner submission for both "˜Favorite"™ and "˜Not so Favorite. I'll start out by listing the code and then discussing it bullet point style to highlight my thoughts. So with that, lets begin this journey through the Event 1 submissions by [following this link to my blog!][1] + + [1]: http://learn-powershell.net/2013/05/02/scripting-games-2013-event-1-favorite-and-not-so-favorite-submissions/ diff --git a/content/articles/2013/05/scripting-games-2013-event-2-favorite-and-not-so-favorite/index.md b/content/articles/2013/05/scripting-games-2013-event-2-favorite-and-not-so-favorite/index.md new file mode 100644 index 000000000..d34b47167 --- /dev/null +++ b/content/articles/2013/05/scripting-games-2013-event-2-favorite-and-not-so-favorite/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2013-05-08-scripting-games-2013-event-2-favorite-and-not-so-favorite/ +title: "Scripting Games 2013: Event 2 \"˜Favorite\"™ and \"˜Not So Favorite\"™" +authors: + - Boe Prox +date: "2013-05-09T03:27:44+00:00" +aliases: + - /2013/05/scripting-games-2013-event-2-favorite-and-not-so-favorite/ +--- + +Event 2 is in the books and with that, it is time to take a look at all of the scripts submitted and make the difficult decisions as to which ones I liked and which ones I didn't quite like.  Just because a script landed on my "˜Not so Favorite"™ list doesn't mean it was terrible. It was just that I felt that there were some things here and there that could have been looked at a little differently. In fact, the amount of submissions that were great really made my decisions much for difficult. Everyone has really shown just how much knowledge is out there and how there are many different approaches to a single problem! +Check out my picks [here][1]. + + [1]: http://learn-powershell.net/2013/05/08/scripting-games-2013-event-2-favorite-and-not-so-favorite/ diff --git a/content/articles/2013/05/scripting-games-2013-event-2-notes/index.md b/content/articles/2013/05/scripting-games-2013-event-2-notes/index.md new file mode 100644 index 000000000..286d4a392 --- /dev/null +++ b/content/articles/2013/05/scripting-games-2013-event-2-notes/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-05-12-scripting-games-2013-event-2-notes/ +title: "Scripting Games 2013: Event 2 Notes" +authors: + - Boe Prox +date: "2013-05-13T02:32:40+00:00" +aliases: + - /2013/05/scripting-games-2013-event-2-notes/ +--- + +I spent some time last week and this weekend to compile a list of notes of what I have seen with the Event 2 submissions that could show improvement. I touched up on some items with my [previous article](http://learn-powershell.net/2013/05/08/scripting-games-2013-event-2-favorite-and-not-so-favorite/) where I picked out some submissions that I liked and didn't quite like but wanted to touch on a few more things. Some of this feels like a repeat of last week and even last years games, but that is Ok. This is all about learning and as long as everyone takes what all of the judges have been writing about, then there will be nothing but great improvements during the course of the games. [Click here][1] to go to continue reading this article. + + [1]: http://learn-powershell.net/2013/05/12/scripting-games-2013-event-2-notes/ diff --git a/content/articles/2013/05/scripting-games-2013-event-3-notes/index.md b/content/articles/2013/05/scripting-games-2013-event-3-notes/index.md new file mode 100644 index 000000000..724d848c1 --- /dev/null +++ b/content/articles/2013/05/scripting-games-2013-event-3-notes/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-05-15-scripting-games-2013-event-3-notes/ +title: "Scripting Games 2013: Event 3 Notes" +authors: + - Boe Prox +date: "2013-05-16T03:03:08+00:00" +aliases: + - /2013/05/scripting-games-2013-event-3-notes/ +--- + +Wow, it is hard to believe that we are now halfway through the Scripting Games! As the events have progressed, I have seen a lot of improvement with the techniques as well as seeing new techniques that continue to impress me. On the flip side, I have seen some mistakes or assumptions when coding that cause a potential 5 star script to be a 2 or 3 star script. The best part about all of this is that we are all (yes, even the judges) learning new things that can only help to improve everyone"™s scripting knowledge. Check out the rest of the [article here][1]. + + [1]: http://learn-powershell.net/2013/05/15/scripting-games-2013-event-3-notes/ diff --git a/content/articles/2013/05/scripting-games-2013-event-4-notes/index.md b/content/articles/2013/05/scripting-games-2013-event-4-notes/index.md new file mode 100644 index 000000000..bfd456315 --- /dev/null +++ b/content/articles/2013/05/scripting-games-2013-event-4-notes/index.md @@ -0,0 +1,12 @@ +--- +url: /articles/2013-05-23-scripting-games-2013-event-4-notes/ +title: "Scripting Games 2013: Event 4 Notes" +authors: + - Boe Prox +date: "2013-05-24T01:21:11+00:00" +aliases: + - /2013/05/scripting-games-2013-event-4-notes/ +--- + +It is all downhill from here folks! Event 4 is in the books and we only have 2 more to go! Everyone has been doing an outstanding job with their submissions and it is becoming clear that people are learning new things and showing some great techniques with their code. +Of course, this doesn't mean that there isn't room for improvement with some submissions to make them even better or just some simple mistakes that can be cleaned up to make average submissions into amazing submissions. With that, its time to dive into my notes"¦ You can check out the rest of this article [here](http://learn-powershell.net/2013/05/23/scripting-games-2013-event-4-notes/). diff --git a/content/articles/2013/05/scripting-games-2013-thoughts-after-event-1/index.md b/content/articles/2013/05/scripting-games-2013-thoughts-after-event-1/index.md new file mode 100644 index 000000000..ca8e4d6b2 --- /dev/null +++ b/content/articles/2013/05/scripting-games-2013-thoughts-after-event-1/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-05-01-scripting-games-2013-thoughts-after-event-1/ +title: "Scripting Games 2013: Thoughts After Event 1" +authors: + - Boe Prox +date: "2013-05-02T02:21:16+00:00" +aliases: + - /2013/05/scripting-games-2013-thoughts-after-event-1/ +--- + +With Event 1 in the books for the 2013 Scripting Games, we are now in the voting period where the community gets the chance to play judge on all of the scripts submitted by voting and commenting on the submissions. I aim to take a look at the common items that pose problems and recommendations on what to do to fix this. The full article is available [here][1]. + + [1]: http://learn-powershell.net/2013/05/01/scripting-games-2013-thoughts-after-event-1/ diff --git a/content/articles/2013/05/scripting-games-beta-entry-viewer/index.md b/content/articles/2013/05/scripting-games-beta-entry-viewer/index.md new file mode 100644 index 000000000..93c541ab3 --- /dev/null +++ b/content/articles/2013/05/scripting-games-beta-entry-viewer/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2013-05-10-scripting-games-beta-entry-viewer/ +title: Scripting Games beta entry viewer +authors: + - Don Jones +date: "2013-05-10T19:43:04+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/scripting-games-beta-entry-viewer/ +--- + +If you'd like a quick peek at something, log into the [Scripting Games Web site][1], and go look at the entries in Event 1. Your URL should look like this: +**http://scriptinggames.org/entrylist.php?eventid=11** +Change it to this: +**http://scriptinggames.org/entrylist_.php?eventid=11** +This is the new viewer I'm building. It isn't rigged up to accept votes or comments, yet, but I'm working on that. It's being developed for Firefox; I'll test the other major browsers once it's a bit more complete. This is under development, so it may be offline or unreliable. Don't _tell_ me about it - I'm _already working on it_ . +You can probably use this on Event 2 as well. The voting and commenting should be working. Note that you must vote before you can comment, and right now it'll only accept one comment per person. That will probably remain the case for the current iteration of the Games based on some back-end dependencies. However, you CAN tie a comment to a particular line number or range of lines, and when viewing the comment it'll highlight those lines. It's pretty neat, I think. +Oh, and I know the coloring on block comments is wonky. I need to dive into the color-er's regexes and see if I can tweak that. Any regex wizards who want to volunteer to help with that, drop me a line. Right now the PowerShell syntax in the color-er is a little primitive. Actually, there are probably several regexes we could add to this to spruce up the listings. +And yes, I know the comments now show the author's user name. That's been a big back-and-forth. I'm not a huge fan of anonymous commenting, and right now it's just your username anyway. Hopefully nobody said anything truly offensive simply because they thought they were anonymous :). +Back to work. + + [1]: http://scriptinggames.org/ diff --git a/content/articles/2013/05/scripting-games-event-1-winners-1/index.md b/content/articles/2013/05/scripting-games-event-1-winners-1/index.md new file mode 100644 index 000000000..3fc9acf41 --- /dev/null +++ b/content/articles/2013/05/scripting-games-event-1-winners-1/index.md @@ -0,0 +1,42 @@ +--- +url: /articles/2013-05-14-scripting-games-event-1-winners-1/ +title: Scripting Games Event 2 Winners +authors: + - Don Jones +date: "2013-05-14T15:22:41+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/scripting-games-event-1-winners-1/ +--- + +We're pleased to announce the winners for Event 2 of The Scripting Games 2013! +Winners: You can log into [The Scripting Games Web site][1] and go to your Profile page to see your prize. You will be given a prize redemption code and either a URL where you can redeem it, or an e-mail address of the prize provider (they will need the redemption code). All prizes must be claimed by the end of July 2013. I will list winners by username; if you used your e-mail address as your username, then a portion of that will be truncated for your privacy. Anyone can log in and check their Profile page to see if they've won a prize. + + * Event 2 Beginner First Place: kurtdg (free ebook from Manning) + * Event 2 Beginner Second Place: JayJay (6 months video training from Interface) + * Event 2 Beginner Third Place: wesleyhaut (1 year of Phoneominal from Start-Automating) + + * Event 2 Advanced First Place: _Emin_ (free ebook from Manning) + * Event 2 Advanced Second Place: mikefrobbins (6 months video training from Interface) + * Event 2 Advanced Third Place: SimonW (1 year of Phonenominal from Start-Automating) + + * Event 2 Beginner Top CrowdScore: taygibb (free ebook from Manning) + * Event 2 Advanced Top CrowdScore: mikefrobbins (free ebook from Manning) + +These are now listed on our [consolidated list of winners][2], which includes links to the winning entries. +Our CrowdScore winners get a selection of free ebooks from Manning, 1 month of video training from Interface, and $50 gift cards from SAPIEN; 1 prize per winner. + + * CrowdScore Voter: SimonW + * CrowdScore Voter: khopcroft + * CrowdScore Voter: markashley1961 + * CrowdScore Voter: kbrucej + * CrowdScore Voter: kraanr + * CrowdScore Voter: takenow350@_.com + +Congratulations to all of our winners! Note that our top three prizes in each category were awarded by our Mighty Panel of Celebrity Judges. Each judge nominated a first, second, and third place winner from the entries that our expert commentators identified as "best." Those nominations were compiled, and in the event of a tie the earliest entry was deemed winner. + + + + [1]: http://scriptinggames.org/ + [2]: http://scriptinggames.org/winners.php diff --git a/content/articles/2013/05/scripting-games-event-1-winners/index.md b/content/articles/2013/05/scripting-games-event-1-winners/index.md new file mode 100644 index 000000000..8951f1365 --- /dev/null +++ b/content/articles/2013/05/scripting-games-event-1-winners/index.md @@ -0,0 +1,37 @@ +--- +url: /articles/2013-05-07-scripting-games-event-1-winners/ +title: Scripting Games Event 1 Winners +authors: + - Don Jones +date: "2013-05-07T16:11:57+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/scripting-games-event-1-winners/ +--- + +We're pleased to announce the winners for Event 1 of The Scripting Games 2013! +Winners: You can log into [The Scripting Games Web site][1] and go to your Profile page to see your prize. You will be given a prize redemption code and either a URL where you can redeem it, or an e-mail address of the prize provider (they will need the redemption code). All prizes must be claimed by the end of July 2013. I will list winners by username; if you used your e-mail address as your username, then a portion of that will be truncated for your privacy. Anyone can log in and check their Profile page to see if they've won a prize. + + * Event 1 Beginner First Place (free ebook from Manning): taygibb + * Event 1 Beginner Second Place (free video training from Interface Technical Training): alvaroBT + * Event 1 Beginner Third Place (free year of Phoneominal service from Start-Automating): Novice + + * Event 1 Advanced First Place (free ebook from Manning): mikefrobbins + * Event 1 Advanced Second Place (free video training from Interface Technical Training): Toni + * Event 1 Advanced Third Place (free year of Phoneominal service from Start-Automating): lido + + * Event 1 Beginner Top CrowdScore (free ebook from Manning): taygibb + * Event 1 Advanced Top CrowdScore (free ebook from Manning): mikefrobbins + + * CrowdScore Voter (free month of video training from Interface Technical Training): kirkaldrin + * CrowdScore Voter (free month of video training from Interface Technical Training): KmTatar + * CrowdScore Voter (free ebook from Manning): Klaus_Schulte + * CrowdScore Voter (free ebook from Manning): Daniel + * CrowdScore Voter ($50 Gift Certificate from SAPIEN Technologies): theotherkidd@__.com + +Congratulations to all of our winners! Note that our top three prizes in each category were awarded by our Mighty Panel of Celebrity Judges. Each judge nominated a first, second, and third place winner from the entries that our expert commentators identified as "best." Those nominations were compiled, and in the event of a tie the earliest entry was deemed winner (that didn't happen, actually). I'm mildly surprised that our community voting identified the same top scripters in each track - the 1st, 2nd, and 3rd-place award process didn't factor in the CrowdScore at all. + + + + [1]: http://scriptinggames.org/ diff --git a/content/articles/2013/05/scripting-games-event-3-winners/index.md b/content/articles/2013/05/scripting-games-event-3-winners/index.md new file mode 100644 index 000000000..cb4c7cbc4 --- /dev/null +++ b/content/articles/2013/05/scripting-games-event-3-winners/index.md @@ -0,0 +1,36 @@ +--- +url: /articles/2013-05-21-scripting-games-event-3-winners/ +title: Scripting Games Event 3 Winners +authors: + - Don Jones +date: "2013-05-21T14:41:53+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/scripting-games-event-3-winners/ +--- + +We're pleased to announce the winners for Event 3 of The Scripting Games 2013! +Winners: You can log into [The Scripting Games Web site][1] and go to your Profile page to see your prize. You will be given a prize redemption code and either a URL where you can redeem it, or an e-mail address of the prize provider (they will need the redemption code). All prizes must be claimed by the end of July 2013. I will list winners by username; if you used your e-mail address as your username, then a portion of that will be truncated for your privacy. Anyone can log in and check their Profile page to see if they've won a prize. +**Note:** Our hosting company is doing some maintenance on their admin site, so it may be a day or two before redemption codes appear in your Scripting Games profile. Appreciate your patience. +And seriously, you're killing me with the usernames. Heh. + + * Event 3 Beginner First Place: TechieSponge (free ebook from Manning) + * Event 3 Beginner Second Place: LittleBunnyFooFoo (6 months video training from Interface) + * Event 3 Beginner Third Place: chadmcauley (1 year of Phoneominal from Start-Automating) + + * Event 3 Advanced First Place: glenn.faustino (free ebook from Manning) + * Event 3 Advanced Second Place: mikefrobbins (6 months video training from Interface) + * Event 3 Advanced Third Place: CarloM (1 year of Phonenominal from Start-Automating) + + * Event 3 Beginner Top CrowdScore: LittleBunnyFooFoo (free ebook from Manning) + * Event 3 Advanced Top CrowdScore: mikefrobbins (free ebook from Manning) + +These will be listed on our [consolidated list of winners][2], which includes links to the winning entries. +Our CrowdScore winners get a selection of free ebooks from Manning, 1 month of video training from Interface, and $50 gift cards from SAPIEN; 1 prize per winner. Check your profile to see if you've won! +Congratulations to all of our winners! Note that our top three prizes in each category were awarded by our Mighty Panel of Celebrity Judges. Each judge nominated a first, second, and third place winner from the entries that our expert commentators identified as "best." Those nominations were compiled, and in the event of a tie the earliest entry was deemed winner. + + + + [1]: http://scriptinggames.org/ + [2]: http://scriptinggames.org/winners.php diff --git a/content/articles/2013/05/scripting-games-event-4-winners/index.md b/content/articles/2013/05/scripting-games-event-4-winners/index.md new file mode 100644 index 000000000..0d5435a0c --- /dev/null +++ b/content/articles/2013/05/scripting-games-event-4-winners/index.md @@ -0,0 +1,35 @@ +--- +url: /articles/2013-05-28-scripting-games-event-4-winners/ +title: Scripting Games Event 4 Winners +authors: + - Don Jones +date: "2013-05-28T13:32:27+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/scripting-games-event-4-winners/ +--- + +We're pleased to announce the winners for Event 4 of The Scripting Games 2013! +Remember that Event 5 is now open for community voting, and that Event 6 opens up near the end of this week. That'll be your last chance to contribute, and shortly after TechEd we'll announce the overall winners. Good luck! +Winners: You can log into [The Scripting Games Web site][1] and go to your Profile page to see your prize. You will be given a prize redemption code and either a URL where you can redeem it, or an e-mail address of the prize provider (they will need the redemption code). All prizes must be claimed by the end of July 2013. I will list winners by username; if you used your e-mail address as your username, then a portion of that will be truncated for your privacy. Anyone can log in and check their Profile page to see if they've won a prize. + + * Event 4 Beginner First Place: amello (free ebook from Manning) + * Event 4 Beginner Second Place: jwoods@__.com (6 months video training from Interface) + * Event 4 Beginner Third Place: Poshsg0606 (1 year of Phoneominal from Start-Automating) + + * Event 4 Advanced First Place: DawnVillejoin (free ebook from Manning) + * Event 4 Advanced Second Place: adweigert (6 months video training from Interface) + * Event 4 Advanced Third Place: JustinK70 (1 year of Phonenominal from Start-Automating) + + * Event 4 Beginner Top CrowdScore: taygibb (free ebook from Manning) + * Event 4 Advanced Top CrowdScore: mikefrobbins (free ebook from Manning) + +These will be listed on our [consolidated list of winners][2], which includes links to the winning entries. +Our CrowdScore winners get a selection of free ebooks from Manning, 1 month of video training from Interface, and $50 gift cards from SAPIEN; 1 prize per winner. Check your profile to see if you've won! +Congratulations to all of our winners! Note that our top three prizes in each category were awarded by our Mighty Panel of Celebrity Judges. Each judge nominated a first, second, and third place winner from the entries that our expert commentators identified as "best." Those nominations were compiled, and in the event of a tie the earliest entry was deemed winner. + + + + [1]: http://scriptinggames.org/ + [2]: http://scriptinggames.org/winners.php diff --git a/content/articles/2013/05/scripting-games-week-2-formatting-edition/index.md b/content/articles/2013/05/scripting-games-week-2-formatting-edition/index.md new file mode 100644 index 000000000..130ce37b7 --- /dev/null +++ b/content/articles/2013/05/scripting-games-week-2-formatting-edition/index.md @@ -0,0 +1,88 @@ +--- +url: /articles/2013-05-10-scripting-games-week-2-formatting-edition/ +title: "Scripting Games Week 2: Formatting edition" +authors: + - Glenn Sizemore +date: "2013-05-10T12:40:16+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/scripting-games-week-2-formatting-edition/ +--- + +This time of the year always feels like someone is holding down the fast forward button.  I blinked and here we are Friday morning another week of scripts in the rear view.  I spent most of my week in the beginner class this week, and was greeted by a combination of beginners and scripters who weren"™t quite ready to step up to advanced.  More of the latter if I"™m to be honest.  This was a pleasant surprise as it"™s another sign of the continuing growth of our community.  Now on to the scripts I knew when I signed up to do this, that at least one of these weeks I"™d talk about formatting.  It"™s one of those best practices that you don"™t appreciate until you"™re asked to review someone else"™s code. +**Don"™t Crunch the Code, and for the love of all things, Hit Enter!** +I did not deduct any points for readability, but you didn"™t make my good list either.  Personally I find it disrespectful to share an ungodly one-liner, but it"™s downright wrong if that single line has semicolons!  We"™re not printing these scripts the crunch gets us nothing. I"™m not going to call out the litany of scripts that were manually formatting the data directly which is even worse, but consider the following. + + +`Get-Content C:\IpList.txt | Foreach-Object { $Processor = Get-WmiObject -ComputerName $_ -NameSpace "Root\CIMV2" -Class "Win32_Processor"; $OpSystem = Get-WmiObject -ComputerName $_ -Namespace "Root\CIMV2" -Class "Win32_OperatingSystem"; New-Object -TypeName PSObject -Property @{ Name = $Processor.SystemName; Cores = $Processor.NumberOfCores; OS = $OpSystem.Caption; Version = $OpSystem.Version; Memory = $OpSystem.TotalVisibleMemorySize } } +`This is an almost perfect solution and it"™s utilizing my next tip for this week already, but the formatting made it unnecessarily hard to read. Let just clean this up a bit by inserting a proper CR in place of all those semi-colons. + + +`Get-Content C:\IpList.txt | Foreach-Object { + $Processor = Get-WmiObject -ComputerName $_ -Class "Win32_Processor" + $OpSystem = Get-WmiObject -ComputerName $_ -Class "Win32_OperatingSystem" + New-Object -TypeName PSObject -Property @{ + "Name" = $Processor.SystemName + "Cores" = $Processor.NumberOfCores + "OS" = $OpSystem.Caption + "Version" = $OpSystem.Version + "Memory" = $OpSystem.TotalVisibleMemorySize + } +} +`Does anyone honestly not think the latter is better? The whitespace cost nothing at execution, and makes it an order of magnitude easier for a human being to read, process, and comprehend! I don"™t care what you do in your own scripts but when another human being is going to be asked to read it take a moment and format it. By the way for those in audience in love with the all-powerful one-liner both those examples are one-liners. +**That"™s Sooooo 2006!** +Seriously, it"™s okay to use the latest features of the language! Heck how about we just agree to use the features from the last version! What am I talking about? object creation! Again I didn"™t take any points off for this, and you may have made my good list, but I didn"™t like it. Select-Object and Add-Member NoteProperty were how we built custom object in 2006 with PowerShell v1. PowerShell V2 added an extremely powerful "“Property parameter to New-Object that completely removed the need for Add-Member, and PowerShell V3 introduced the [PSCustomObject] type accelerator that removed them all! Consider the following look back at the past six years of PowerShell Object Creation. + + +`# 2006 +Get-Content .\IpList.txt | Foreach-Object { + $Processor = Get-WmiObject -ComputerName $_ -Class "Win32_Processor" + $OpSystem = Get-WmiObject -ComputerName $_ -Class "Win32_OperatingSystem" + New-Object -TypeName PSObject | + Add-Member -MemberType Noteproperty -Name "Name" -value $Processor.SystemName -PassThru | + Add-Member -MemberType Noteproperty -Name "Cores" -value $Processor.NumberOfCores -PassThru | + Add-Member -MemberType Noteproperty -Name "OS" -value $OpSystem.Caption -PassThru | + Add-Member -MemberType Noteproperty -Name "Version" -value $OpSystem.Version -PassThru | + Add-Member -MemberType Noteproperty -Name "Memory" -value $OpSystem.TotalVisibleMemorySize -PassThru +} +# 2007 This worked in 2006, but it took a little while to catch on. +Get-Content .\IpList.txt | Foreach-Object { + $OpSystem = Get-WmiObject -ComputerName $_ -Class "Win32_OperatingSystem" + Get-WmiObject -ComputerName $_ -Class "Win32_Processor"| + Select-Object -Property SystemName, NumberOfCores, + @{'Name'="OS";"Expression"={$OpSystem.Caption}}, + @{'Name'="Version";"Expression"={$OpSystem.Version}}, + @{'Name'="Memory";"Expression"={$OpSystem.TotalVisibleMemorySize}} +} +# 2009 +Get-Content .\IpList.txt | Foreach-Object { + $Processor = Get-WmiObject -ComputerName $_ -Class "Win32_Processor" + $OpSystem = Get-WmiObject -ComputerName $_ -Class "Win32_OperatingSystem" + New-Object -TypeName PSObject -Property @{ + "Name" = $Processor.SystemName + "Cores" = $Processor.NumberOfCores + "OS" = $OpSystem.Caption + "Version"= $OpSystem.Version + "Memory" = $OpSystem.TotalVisibleMemorySize + } +} +# 2012 +Get-Content .\IpList.txt | Foreach-Object { + $Processor = Get-WmiObject -ComputerName $_ -Class "Win32_Processor" + $OpSystem = Get-WmiObject -ComputerName $_ -Class "Win32_OperatingSystem" + [PSCustomObject]@{ + "Name" = $Processor.SystemName + "Cores" = $Processor.NumberOfCores + "OS" = $OpSystem.Caption + "Version"= $OpSystem.Version + "Memory" = $OpSystem.TotalVisibleMemorySize + } +} +`They are all more or less the same. When properly formatted they are all equally readable. Most of them use a hash table of some sort. Therefor there are some language hurdles that need to be cleared, so why bother, why does it matter?... simple performance, with every release the PowerShell team have refined Object creation and the new way is always just a little bit faster. I used measure-command to measure the execution times for the above examples and well as you can see while minute every subsequent technique is slightly faster. +New-Object/Add-Member = 1128 Milliseconds +Select-Object                    = 1114 Milliseconds +New-Object "“property      = 1107 Milliseconds +PSCustomObject             = 1100 Milliseconds +Again not a huge deal but given a large enough dataset every tick counts. There were a litany of other things that I saw this week that made my list. The good news is this is all nitpicky stuff which is awesome!   Keep it up, and for the rest of you voters out there lets ease up with the ones and twos these are awesome scripts.  They may not use the technique you'd prefer but for the most part they're getting the job done. +~Glenn diff --git a/content/articles/2013/05/scripting-games-week-4/index.md b/content/articles/2013/05/scripting-games-week-4/index.md new file mode 100644 index 000000000..401c4073e --- /dev/null +++ b/content/articles/2013/05/scripting-games-week-4/index.md @@ -0,0 +1,43 @@ +--- +url: /articles/2013-05-24-scripting-games-week-4/ +title: Scripting Games Week 4 +authors: + - Glenn Sizemore +date: "2013-05-24T21:37:18+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/scripting-games-week-4/ +--- + +Again if you"™re participating in the games this year you"™ve already won!  If you"™re not and you"™re reading this post what are you doing!  I"™ve watched authors step there game up over the past month, and I can tell you from personal experience the games will make you better at your real job.  It"™s like sharpening an axe, an axe made of super juice that can automate the world 🙂 +**Well that's clever! +** I came across this script this morning. + + +`$prop = Write-Output Name,Title,Department,LastLogonDate,PasswordLastSet,LockedOut,Enabled +Get-ADUser -Filter * -Properties $prop | + Get-Random -Count 20 | Select-Object $prop | + ConvertTo-Html -Title "Active Directory Audit" -PostContent " +--- +$(Get-Date)" | Out-File C:\adresult.html +`Well formatted, simple concise, all around a very clean approach to the problem.  However the use of write-output threw me for a second.  I actually had to run it to see what was happening there, for a second I thought maybe there was yet another way to create a custom object in PowerShell.  Alas no, our intrepid author has simply deduced a way to avoid having to put quotes around the text.  Consider the following Prop1, and Prop2 are identical, but it"™s one less character using write-output. + + +`$prop1 = Write-Output Name,Title,Department,LastLogonDate,PasswordLastSet,LockedOut,Enabled +$prop2 = 'Name','Title','Department','LastLogonDate','PasswordLastSet','LockedOut','Enabled' +`I"™m not saying we should start using write-output instead of quotation if for nothing other than syntax highlighting it"™s incorrect. However, this one time it"™s forgiven, and I"™m tipping my hat to you sir, well done. +**Don"™t put spaces or dashes in your property names. +** I"™ve seen this on and off throughout the games and I"™ll admit this one isn"™t a slam dunk, but that said don"™t do it. You"™re writing a script, camel case is the established standard for spaces. Yes the spaces do make it slightly easier to read, but at the cost of eliminate the reuse of the code. +**Oh the Humanity. +** Seriously read the damn help already. I could just fill this post with examples of simple mistakes that could have been avoided. Using the wrong cmdlet is one thing but take the following. + + +`Get-Process | Sort-Object {Get-Random} | select -First 5 +`What"™s wrong with that picture? Well nothing except it"™s horribly inefficient since the Get-Random cmdlet has a count parameter! + + +`Get-Process | Get-Random -Count 5 +`To the author You know who you are, everyone else read the help people! +Light week this week, but I will say I am super excited about next weeks offerings it"™s a problem that tickles my kind of fancy, and I hope you all have as much fun solving it as I did. +~Glenn diff --git a/content/articles/2013/05/scripting-games-week-5/index.md b/content/articles/2013/05/scripting-games-week-5/index.md new file mode 100644 index 000000000..267c90228 --- /dev/null +++ b/content/articles/2013/05/scripting-games-week-5/index.md @@ -0,0 +1,39 @@ +--- +url: /articles/2013-05-31-scripting-games-week-5/ +title: Scripting Games Week 5 +authors: + - Glenn Sizemore +date: "2013-05-31T15:02:17+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/scripting-games-week-5/ +--- + +I loved this week"™s challenge as it had the right wiggle room to bring out the best in our participants.  Of course, this is also the point in the games when we start to get everyone"™s "A" game.  At this point even our new competitors are all warmed up and in the zone, and let me tell you the entries this week show it!   I want to start with the beginners as I actually ran almost every entry this week.  Honestly everyone fell into one of three buckets Select-string, Import-CSV or ,Foreach.  Let me explain there where three primary means to solve this problem.  Use Select-String and some basic text parsing to get the ip addresses, and then using Select-Object to filter.  Converting the logs to objects with Import-CSV and using Where-Object to filter.  Or using Foreach and a combination of if and where. +They are all three correct, so how does one judge one from another?  As this is a competition I used speed as the determining gauge.  For a long time I was convinced that the following was about perfect.  Quick simple and accurate. + + +`Select-String -Path C:\Reporting\LogFiles\*\*.log -Pattern "(\b\d{1,3}\.){3}.\d{1,3}\b" -AllMatches | +Select-Object -Unique @{Label="IP";Expression={$_.matches[1]}} +`I was particularly drawn to this approach because it only used two cmdlets if that"™s not PowerShell I don"™t know what is. At first I was convinced converting the logs to objects was a waste.  Let me explain.  Over the course of this past month you"™ve heard us rant and rave about objects, and how PowerShell is not text, but rich .Net objects.  For the most part that is an iron law, but it"™s a law with an exception.  There is one place where text is just text, log files!  That"™s why I loved this event.  This is the exception where all the old tricks still apply and where we found out which of you really know your regular expressions.  However in this one instant since we had a well formed log converting to a CSV was actually faster.   I wasn"™t expecting that, but consider my gold standard example takes about 10 Seconds on my PC.   The Following finishes in 3! + + +`$LogFilePath = 'C:\Reporting\LogFiles' +$header = 'date','time','s-ip','cs-method','cs-uri-stem','cs-uri-query','s-port','cs-username','c-ip','cs(User-Agent)','sc-status','sc-substatus','sc-win32-status','time-taken' +Import-Csv -Path $(Get-ChildItem -Path $LogFilePath -File -Recurse).FullName -Header $header -Delimiter ' ' | +# if the contents of 'c-ip' can be converted to an IP address then it is a valid IP +Select-Object @{n='ClientIP';e={if ([IPAddress]$_.'c-ip'){ $_.'c-ip' }}} | +Sort-Object -Property 'ClientIP' -Unique +`Now I"™m not crazy about that entry it"™s hard to follow, and will always return a blank string, but if you really look what makes it work is the author is offloading the IP filtering to the [IPAddress] type accelerator.  That is brilliant, and is x5 faster than a regular expression, which really adds up when you"™re performing over 6k comparisons.   I know the general consensus is to leave the .Net stuff alone, but I have no religion when it comes to this stuff. If it"™s better it"™s better and in this instance it was better. +But that"™s not the end of the story. While sorting through the entries I found the following solution. + + +`Get-ChildItem -File C:\Reporting\LogFiles -Recurse | Get-Content | + # Selecting "GET /" gives us only the lines we want from the files. + Select-String -Pattern "GET /" | + # Split the remaining lines into an array and write element 8, the IP, to a file. + ForEach-Object {$_.Line.Split("")[8] } | Select-Object -Unique @{Name="Source Address"; Expression={$_}} +`Now that"™s an old school PowerShell solution if I"™ve ever seen one, and you know what it"™s fast as hell!  There"™s no validation of any kind. It will only work with provided source files, and it"™s absolutely perfect!  You see the goal is to get the job done.  We don"™t always have to author a tool that can be used by the world.  There is nothing wrong with leveraging your brain and cheating a little! +As for the advanced entries I think they"™ve been adequately covered by my fellow judges.  In general my feedback would be to start a slow clap for the group.  There not perfect, but as a group you"™ve learned from the feedback over this past month and man does it show! Heading into the final stretch I encourage you all to treat this last entry as your victory lap as you"™ve all already one. +~Glenn diff --git a/content/articles/2013/05/scripting-games-what-should-we-do-with-comments/index.md b/content/articles/2013/05/scripting-games-what-should-we-do-with-comments/index.md new file mode 100644 index 000000000..eac23b072 --- /dev/null +++ b/content/articles/2013/05/scripting-games-what-should-we-do-with-comments/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2013-05-03-scripting-games-what-should-we-do-with-comments/ +title: "Scripting Games: What Should We Do With Comments?" +authors: + - Don Jones +date: "2013-05-03T19:02:08+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/scripting-games-what-should-we-do-with-comments/ +--- + +Right now, I've got the Scripting Games Web site built to only make comments visible to a entry's author. Some of the comments have been a little snarky, and I don't want to create an online argument forum. +I'm curious what folks think we should do as a next step. +I could, for example, make comments visible to everyone once voting has ended for an event (I don't want to make comments visible while we're still accepting comments, because it'll run a big risk of creating a discussion, which isn't the intent). +We do have a plan to dump all the entries into static files for long-term reference; I could insert entries' comments at the end of each entry, in a PowerShell comment block. +Or, we could just leave comments visible to the entry's author. That provides a learning experience for the author, although not for the public, and only until we purge the database for the next event. +Thoughts? diff --git a/content/articles/2013/05/some-event-3-notes/index.md b/content/articles/2013/05/some-event-3-notes/index.md new file mode 100644 index 000000000..47aad73fc --- /dev/null +++ b/content/articles/2013/05/some-event-3-notes/index.md @@ -0,0 +1,37 @@ +--- +url: /articles/2013-05-18-some-event-3-notes/ +title: Some Event 3 Notes +authors: + - Don Jones +date: "2013-05-18T14:23:25+00:00" +aliases: + - /2013/05/some-event-3-notes/ +--- + +I didn't see anyone (although I'll admit I haven't checked every entry) using my EnhancedHTML module from _Creating HTML Reports in PowerShell._ I am ensaddened. +But man, Event 3 shows that you can really do well by learning a wee bit of HTML. Knowing an H2 and HR tag makes for much pretty results. Take it as career advice. +As a nitpick, don't use Convert as a function verb unless all the function is going to do is convert something. It shouldn't "Get" as well. That said, because this event wants a single function that both gets and converts... which is something I'd ordinarily avoid packing into one function... no big. It's interesting to see the function names folks picked out. +Folks, **test your scripts.** Seriously. +I kinda giggled when I saw this comment in an entry: + + +`# I'd like to Splat this but I don't know how / ran out of time +`Heh. In general, this is like a cooking show. If you know your food doesn't taste good, don't bring it to the judges. And if you do bring it to them, don't tell them all the cool toppings you were going to add. Just give them what you made. +Note to self: Don't write scenarios that require HTML. It messes up the Scripting Games Web site. Duh. +You know, overall, I'm seeing good stuff. I ran through some of the low-scoring entries and didn't see anything that didn't deserve a lowered score. If you constructed your own HTML instead of using ConvertTo-HTML, you pretty much got universally dinged, and I can understand and support that philosophy. +Oh, and ConvertTo-HTML doesn't output to stdout, whoever wrote that. It writes to the pipeline. Big difference. +Folks, when using Get-WmiObject, _use the -Filter parameter._ Don't get _everything_ and pipe it to Where-Object. Get the filtering done early - this is a huge performance concept. +This was interesting: + + +`[Parameter(Mandatory=$True,ValueFromPipeline=$True)] + [ValidateScript({Test-Connection -ComputerName $_ -Quiet -Count 2})] + [STRING[]]$ComputerName, +`I'm entirely unsure how I feel about this. I like the idea. I keep telling people than a Ping doesn't really tell you anything when you're about to use WMI, though. If the computer responds, WMI might still fail; if the computer doesn't respond, WMI might still succeed. A ping is not useful diagnostic information for WMI connections. I understand the desire to try and eliminate the WMI timeout, but you're not doing so. What if I block ICMP traffic but not WMI traffic - a very common thing at a lot of my clients? Just bear that in mind. +We're done with Hungarian notation ($objDisk, $strComputer). Time to move on. +Commenters: Dudes, you need to read. For example, this: + +> When localhost, an IP address, or an alias is provided, the actual computer name is not displayed on the web page and the file name is also incorrect. Consider using one of the properties from the WMI class that has the computer name instead of what the user provided on input. + +Was next to a 1-star vote. Totally inappropriate. 1 star, as the voting page clearly indicates, is when the script is totally non-functional. "Bad entry - does not function at all" is what it says under 1 star. This comment was on a working script. Maybe it didn't fulfill every requirement, but seriously, you'd _fire a guy_ whose script simply put an IP address instead of a computer name? No. This was a 3-star script according to the guidelines. +Anyway... things are looking great. On to Event 4, which opens for voting real soon! diff --git a/content/articles/2013/05/some-notes-on-event-2-advanced/index.md b/content/articles/2013/05/some-notes-on-event-2-advanced/index.md new file mode 100644 index 000000000..b6054d2c8 --- /dev/null +++ b/content/articles/2013/05/some-notes-on-event-2-advanced/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2013-05-10-some-notes-on-event-2-advanced/ +title: Some notes on Event 2 Advanced +authors: + - Art Beane +date: "2013-05-10T16:17:32+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/05/some-notes-on-event-2-advanced/ +--- + +I hate to seem negative, but I've noticed a few things about a number of the advanced entries that seem like folks didn't read the instructions, or just weren't careful about details. +There were a surprising number of entries that had [string]$ComputerName instead of [string[]]$ComputerName in the params section and then went on to treat the parameter as if it were an array. + + * Somewhat related to the array issue, the problem statement indicated that there could be several files that had computer identification for piping into the solution. Several scripts went beyond the minimum by accepting a filename property to process those files directly. I don't think that extension is out-of-bounds, but  scripts that accepted only filenames and excluded ComputerName input didn't get my vote. + * The instructions asked for a "full help display", but many of the entries had fairly limited documentation. One thing I especially missed was a .PARAMETER description. + * My last negative comment is about parameter names. Although there's nothing in PowerShell to prevent it, best practices in parameter names should be followed. The parameter ought to be $ComputerName, not $Name, $Server, $Computer, etc. I know it's easier with verbs and nouns because of the Get-Verb and Get-Noun cmdlets, but please pay attention to how you name your parameters. + +On the whole, though I really liked the effort everyone put into their scripts. Those that exactly met the requirements were short, sweet, and to the point. There were several extensions that I also liked. + + * Working with optional credentials. It was reasonable to assume that the script would be run using appropriate credentials, some of the scripts accepted alternate credentials for making the CIM or WMI queries. I consider it a best practice to log in and execute tasks at low permissions levels (standard user) and to use elevated credentials only on the specific commands that need them. Kudos also to those of you who accepted either a credentials object or a user name and found the credentials. + * Using parallel execution to speed up the process. PowerShell provides runspaces, workspaces, and jobs to allow multiple commands to execute concurrently. Nothing in the event hinted at using parallelism, so I put these on my "clever" list. + * Using PowerShell 3's CIM cmdlets. Using the new features of the latest version of PowerShell is quite good, especially when making use of the backwards compatibility features. I would have done this a bit differently than most, though. Instead of always using the Dcom session option, I would have opened a SimSession using a _try {WSMAN} Catch {DCOM}_ and running the queries against the session. + +So, good work, everybody. Let's see what more we can learn in event 3. diff --git a/content/articles/2013/05/super-secret-snover-session-at-teched/index.md b/content/articles/2013/05/super-secret-snover-session-at-teched/index.md new file mode 100644 index 000000000..ddb58d3dd --- /dev/null +++ b/content/articles/2013/05/super-secret-snover-session-at-teched/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-05-29-super-secret-snover-session-at-teched/ +title: "\"Super Secret\" Snover Session at TechEd" +authors: + - Don Jones +date: "2013-05-29T12:39:09+00:00" +categories: + - Announcements + - News +aliases: + - /2013/05/super-secret-snover-session-at-teched/ +--- + +So what's with the ["super secret" PowerShell session][1] being given by Jeffrey Snover at TechEd 2013? +First, if you'll be in New Orleans, plan to attend this. The deal is pretty simple: Microsoft has got a lot of information pertaining to v.Next under embargo, which means people can't talk about it yet, or even tell you the title of the session. But trust me, if you're interested in the world of DevOps (and if you use PowerShell, you are), you'll want to be at this session. PowerShell MVPs were given a sneak peek at what Snover will be discussing, and it'll frankly blow your mind. It will, over the long haul, put PowerShell in a completely new place - and you'll want to get in on the ground floor. +Like most sessions at TechEd, it appears as if they'll be recording this, so even if you can't attend in person be sure to check back once the recording is live. That usually takes a day or two after the talk itself. +And spread the word a bit. There's a bit of a worry that, because even the _title_ of the session won't be announced until TechEd formally commences, folks won't have much time to realize the session exists and it'll go empty. We don't want that to happen - as with any new developments in PowerShell, it's crucial to get folks thinking about it early, to get their feedback early, and to start planning for it early. + + [1]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/MDC-B302#fbid=nMfDOO99OjI diff --git a/content/articles/2013/05/the-new-powershell-class-is-coming-to-a-cpls-near-you/index.md b/content/articles/2013/05/the-new-powershell-class-is-coming-to-a-cpls-near-you/index.md new file mode 100644 index 000000000..1cc8b0395 --- /dev/null +++ b/content/articles/2013/05/the-new-powershell-class-is-coming-to-a-cpls-near-you/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2013-05-24-the-new-powershell-class-is-coming-to-a-cpls-near-you/ +title: The new PowerShell Class is Coming to a CPLS Near You! +authors: + - Don Jones +date: "2013-05-24T21:00:09+00:00" +categories: + - News + - Training +aliases: + - /2013/05/the-new-powershell-class-is-coming-to-a-cpls-near-you/ +--- + +Looking for a great getting-started PowerShell class? Or perhaps you'd like to send a colleague or peer to some PowerShell "zero to hero" training? +We've just finished the official beta-teach of Microsoft's 10961, Automating Administration with Windows PowerShell, and it went _great. _The sequencing of the class was spot-on, and we had an absolutely incredible group of students. Many were n00bs, which was perfect; a couple had "some" shell experience but wanted to learn "the right way." And they did. +Through a series of 12 modules, you're led through the basics all the way up to writing your own script. The grand semi-finale has you creating a script that provisions a brand-new, freshly-installed Server Core instance - all without logging on to that instance at all. The high moment for me was when one student, after struggling a bit to get started on the provisioning lab, concluded with a "well, that did it." Everything came together for him: command discovery, help, scripting, variables, remoting, _all_ of it. He _did_ the task, from scratch, with practically no help. He's _there. _ +10961 replaces MS course 10325, and it will soon be supplemented by a Microsoft Courseware Marketplace title that goes further into scripting, error handling, debugging, and more... what I've taken to calling _toolmaking. _We'll hopefully continue to refresh both courses as PowerShell evolves. +So call your local Microsoft Certified Partner - Learning Systems ("training center") and see when they're offering 10961. A bit of caution: this is a class where, unfortunately, an inexperienced MCT will be really challenged. While the course book is a full, almost-500-page book (you're welcome), it's tightly timed and you'll definitely want to check the credentials and experience of whatever trainer is running the class. You can't just "read the slides" to stay a module ahead of the students on this one. +This class is _strongly_ based upon _Learn Windows PowerShell 3.0 in a Month of Lunches, _in terms of how the material is presented, although the sequence and narrative was altered a bit to better accommodate Microsoft requirements and classroom logistics. I'm _really_ proud of how the course turned out - so if you've got folks who need some PowerShell training, tell 'em to look it up. Many CPLS centers offer remote training, too, meaning you can attend from the comfort of your own home or office. +If you take the class, I'd love to hear what you think. diff --git a/content/articles/2013/05/tips-on-implementing-pipeline-support/index.md b/content/articles/2013/05/tips-on-implementing-pipeline-support/index.md new file mode 100644 index 000000000..7897baf90 --- /dev/null +++ b/content/articles/2013/05/tips-on-implementing-pipeline-support/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-05-07-tips-on-implementing-pipeline-support/ +title: Tips on Implementing Pipeline Support +authors: + - Boe Prox +date: "2013-05-08T03:16:27+00:00" +aliases: + - /2013/05/tips-on-implementing-pipeline-support/ +--- + +While reviewing Event 1 (and now Event 2) I've seen some scripts that don't quite have the correct pipeline support and others that do a great job with it. Whether it is an unneeded Begin or End statement, or throwing everything into a Process block and not quite getting the expected output or even having a Process block when ValueFromPipeline/ValueFromPipelineByPropertyName is not even enabled. Before I start working through my notes for Event 2, I wanted to get this post out of the way. I hope that what I put together here will help those out who are working to implement pipeline support in their code as well as providing a method of troubleshooting the parameter binding using Trace-Command. The blog post is available [here to view][1]. + + [1]: http://learn-powershell.net/2013/05/07/tips-on-implementing-pipeline-support/ diff --git a/content/articles/2013/05/tobias-event-5-notes/index.md b/content/articles/2013/05/tobias-event-5-notes/index.md new file mode 100644 index 000000000..265e12a4e --- /dev/null +++ b/content/articles/2013/05/tobias-event-5-notes/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2013-05-31-tobias-event-5-notes/ +title: "Tobias' Event 5 Notes" +authors: + - Don Jones +date: "2013-05-31T12:12:45+00:00" +aliases: + - /2013/05/tobias-event-5-notes/ +--- + +Find 'em at diff --git a/content/articles/2013/05/tobias-judge-notes/index.md b/content/articles/2013/05/tobias-judge-notes/index.md new file mode 100644 index 000000000..b95c42f68 --- /dev/null +++ b/content/articles/2013/05/tobias-judge-notes/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2013-05-01-tobias-judge-notes/ +title: "Tobias' Judge Notes" +authors: + - Don Jones +date: "2013-05-01T13:33:45+00:00" +aliases: + - /2013/05/tobias-judge-notes/ +--- + +Tobias Weltner offers some "don'ts" from his review of Event 1 entries: diff --git a/content/articles/2013/05/tobias-notes-for-event-3/index.md b/content/articles/2013/05/tobias-notes-for-event-3/index.md new file mode 100644 index 000000000..297f0c2cb --- /dev/null +++ b/content/articles/2013/05/tobias-notes-for-event-3/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2013-05-16-tobias-notes-for-event-3/ +title: "Tobias' Notes for Event 3" +authors: + - Don Jones +date: "2013-05-16T19:18:04+00:00" +aliases: + - /2013/05/tobias-notes-for-event-3/ +--- + +Tobias has some notes for Event 3 for you: diff --git a/content/articles/2013/05/validatescript-for-beginners/index.md b/content/articles/2013/05/validatescript-for-beginners/index.md new file mode 100644 index 000000000..907aa47ed --- /dev/null +++ b/content/articles/2013/05/validatescript-for-beginners/index.md @@ -0,0 +1,138 @@ +--- +url: /articles/2013-05-21-validatescript-for-beginners/ +title: ValidateScript for Beginners +authors: + - June Blender +date: "2013-05-21T18:03:27+00:00" +aliases: + - /2013/05/validatescript-for-beginners/ +--- + +There"™s been a lot of chatter about in Scripting Games 2013 blog posts about the ValidateScript attribute. The chatter is, appropriately, confined to the advanced events "“ this sort of thing is not expected in a one-liner. But I thought I"™d take a minute and demystify it "“ and discuss an issue that it raises about when input should be rejected. +Let"™s start with a quick description of ValidateScript and its siblings. For help, see [about_functions_advanced_parameters][1]. + +## What is ValidateScript? + +ValidateScript and its siblings are _parameter validation attributes_. These attributes are statements that are added to the parameter definition. They tell Windows PowerShell to examine the parameter values that are used when the function is called and determine whether the parameter values meet some specified conditions. In particular, ValidateScript lets you write a script block to test the conditions that the values must satisfy. Windows PowerShell runs the validation script on the parameter values and, if the script returns $False, it throws a terminating error. +Before we get to the details, let"™s talk about why you"™d want to use something like this. The answer is simplicity. "What!!?!," you say, incredulously? The syntax of this thing looks like a sampler of Windows PowerShell enclosures. There"™s a square bracket "[" or two "]", a pair of parentheses "( )" and even some curly braces "{  }". So it doesn"™t look simple. +But once you get over the syntax, you realize that putting the parameter value validation into the parameter definition means that you don"™t need to test the parameter value in your script. Instead, the Windows PowerShell engine tests the parameter value and you can use the script to do scripty things. + +# Using ValidateScript + +Here"™s what I mean. Here"™s a silly function that will serve as our example. + + +`function Get-EventDate +{ + Param($EventDate) + if ($EventDate -is [DateTime] -and $EventDate -gt (Get-Date)) + {"The event is happening on $EventDate."} + else + {Write-Error "Event date must be a DateTime object ` + that represents a date in the future."} +} +`The Get-EventDate function has a $EventDate parameter. If the value of the $EventDate parameter is a DateTime object and it"™s later than now, the function writes a nice sentence with the date to the console or host program. But, if the value of $EventDate is not a DateTime object, or it"™s not a future date, the function generates an error. (To be complete, this info would be in the Help for the function.) +But much of this little function is wrapped around validating the value of the $EventDate parameter. So let"™s see if we can get Windows PowerShell to validate it for us. +In this version, we add a parameter value type enclosed in square brackets ([DateTime]) on the line before the parameter name ($EventDate). +But that"™s enough to allow us to delete the "if $EventDate "“is [DateTime]" from the If statement and from the error message. + + +`function Get-EventDate +{ + Param( + [DateTime] + $EventDate + ) + if ($EventDate -gt (Get-Date)) + {"The event is happening on $EventDate."} + else + { Write-Error "Event date must represents a future date."} +} +`Let"™s make sure it works. I"™ll send it a process object instead of a date. And, sure enough, Windows PowerShell generates an error explaining that it can"™t convert ("process argument transformation" "“ oy!) a process object to a DateTime object. + + +`PS C:\> Get-EventDate -EventDate (Get-Process PowerShell) +Get-EventDate : Cannot process argument transformation on parameter +'EventDate'. Cannot convert the "System.Diagnostics.Process (powershell)" +value of type "System.Diagnostics.Process" to type "System.DateTime". +At line:15 char:26 ++ Get-EventDate -EventDate (Get-Process PowerShell) ++                          ~~~~~~~~~~~~~~~~~~~~~~~~ ++ CategoryInfo          : InvalidData: (:) [Get -EventDate], +ParameterBindingArgumentTransformationException ++ FullyQualifiedErrorId : ParameterArgumentTransformationError,Get-EventDate +`Now, let"™s get Windows PowerShell to test the other date condition for us. Here"™s where ValidateScript comes in. +The syntax is a bit wonky. ValidateScript is enclosed in square brackets: [ValidateScript]. Its parameter is enclosed in parentheses: [ValidateScript( )] and the parameter value is a script block, complete with curly braces: [ValidateScript({ Your-script-goes-here })]. I can never remember this, so I use an ISE snippet or copy it from [about_functions_advanced_parameters][1]. +But aside from the syntax, ValidateScript is easy to use. I just moved the (-gt (Get-Date)) from the script into the ValidateScript script block. Now, I can eliminate the error message, too. +In the script block, "$_" represents the parameter value. If a parameter takes a collection (more than one) of objects, "$_" represents each value in the collection, which is tested one at a time "“ no need for a Foreach-Object command. + + +`function Get-EventDate +{ + Param( + [ValidateScript({$_ -gt (Get-Date)})] + [DateTime] + $EventDate + ) + "The event is happening on $EventDate." +} +`When a parameter value fails a test, ValidateScript generates a terminating error. If the parameter value takes a collection, like a list of dates, and any one of the dates fails the test, ValidateScript throws an error that stops the script, even if all other dates pass the test. +Let"™s test by sending it a date in the past. (Today"™s date would generate the same error.) The error message explains (in more words that I could use) that the date failed the validation test. +It"™s not a great error message, but it"™s the best we could do, because Windows PowerShell just executes the validation script in the script block. It can"™t guess your intent. + + +`PS C:\> Get-EventDate -EventDate (Get-Date -Month 9 -Day 21 -Year 2007) +Get-EventDate : Cannot validate argument on parameter 'EventDate'. +The "$_ -gt (Get-Date)" validation script for the argument with value +"9/21/2007 5:36:36 PM" did not return true. Determine why the validation +script failed and then try the command again. +At line:1 char:26 ++ Get-EventDate -EventDate (Get-Date -Month 9 -Day 21 -Year 2007) ++                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++ CategoryInfo          : InvalidData: (:) [Get-EventDate], ParameterBindingValidationException ++ FullyQualifiedErrorId : ParameterArgumentValidationError,Get-EventDate +`And, just for kicks, let"™s pass it a date in the future. This one works. + + +`PS C:\ > Get-EventDate -EventDate (Get-Date -Month 9 -Day 21 -Year 2013) +The event is happening on 09/21/2013 18:00:50. +`## ValidateScript in Advanced Functions + +This is the sort of clever thing that the advanced folks are doing. For example, here"™s the parameter section from Toni"™s totally terrific Archival Atrocity solution. + + +`[CmdletBinding()] +param( +[ValidateScript({ Test-Path $_ -PathType Container })] +[string]$LogPath="C:\Application\Log", +[Parameter(Mandatory=$true)] +[ValidateScript({ Test-Path "$LogPath\*" -Include $_ -PathType Container })] +[string[]]$ApplicationLogFolder, +[Parameter(Mandatory=$true)] +[ValidateScript({ Test-Path $_ -PathType Container })] +[string]$DestinationPath, +[int]$Period=90 +) +`We"™re not even in the function statements yet, but we already know for sure that the values of the $LogPath, $ApplicationLog, and DestinationPath parameters are folders (not files), and the full path to these folders already exists in the file system. Not bad! Excellent, really. Clever enough to win second prize in the Nobel Prizes of PowerShell scripting. (Congratulations, Toni!) +In fact, almost all of the advanced scripts used validation parameters. Take a peek. Keep a copy of [about_functions_advanced_parameters][1] nearby. + +## Should we use ValidateScript? + +This is very clever scripting, but is it a good idea? It"™s easier for the author and easier to maintain, because the conditions are in a predictable place. +But, is this the right thing to do for users? I don"™t know the answer, but I think that we, as a community, need to consider the question. +Jeffrey Snover, the Windows PowerShell grand architect, wisely proclaims that Windows PowerShell differs from other languages in that scripts should "just work." Windows PowerShell scripts should make the user successful. +The language goes to all ends in its pursuit of this principle. When you send the wrong type of parameter value to a cmdlet, Windows PowerShell tries to convert the value to the right type. It returns an error only when its attempts to convert fail. +In Windows PowerShell 3.0, if you send it a collection of object and ask for a property that the collection doesn"™t have, Windows PowerShell checks to see if the objects in the collection have that property and, if they do, it returns the property value. (Try: (Get-Process).Name ). +If you ask Windows PowerShell 3.0 how many items are in an empty object, it tells you 0, even though empty objects don"™t have a Count or Length property. + + +`PS C:\> $zoo = $null +PS C:\> $zoo.Count +0 +`Many scripts, including those we"™ve seen in these esteemed Games, have elaborate try-catch syntax to capture errors and create a pleasant user experience. +So, given that background, should we encourage scripting techniques that throw errors to users, instead of making them successful? And, in particular, errors that cannot provide very helpful error messages? +Personally, I prefer scripts that optimize the user experience, instead of the authoring experience. In the Get-EventDate example, where I planned to write an error anyway, ValidateScript is probably a cleaner alternative. But in the Archival Atrocity script, it would have been a much better user experience to create a directory if it didn"™t already exist. +On the other hand, if I were writing a script only for myself, I would keep it strict. I would prefer the error message to the risk that I just created a directory structure for a typo. +What do you think? Should we create community guidance for using validation attributes? + + [1]: http://go.microsoft.com/fwlink/?LinkID=135173 diff --git a/content/articles/2013/05/want-a-premier-powershell-class-in-your-area-next-year-help-me-make-it-happen/index.md b/content/articles/2013/05/want-a-premier-powershell-class-in-your-area-next-year-help-me-make-it-happen/index.md new file mode 100644 index 000000000..cbbea314f --- /dev/null +++ b/content/articles/2013/05/want-a-premier-powershell-class-in-your-area-next-year-help-me-make-it-happen/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-05-23-want-a-premier-powershell-class-in-your-area-next-year-help-me-make-it-happen/ +title: Want a premier PowerShell class in your area next year? Help me make it happen. +authors: + - Don Jones +date: "2013-05-23T14:18:50+00:00" +categories: + - Announcements +aliases: + - /2013/05/want-a-premier-powershell-class-in-your-area-next-year-help-me-make-it-happen/ +--- + +We're putting together our schedule for 2014 (yes, already), and we're looking to hold premier-level PowerShell master classes throughout the world. But... we need your help. +If you've got a really top-notch training center in your area that might be interested in working with us, [contact me][1]. We'll need the name of someone there - the training manager, the marketing manager, someone like that. We co-market our classes, but rely on a local center to market to their existing customer base as well. These _are_ premium classes, and they do go for a premium price, so the center has to be comfortable marketing that kind of class. We're not the run-of-the-mill "official curriculum;" my Master Class packs in around eleven days of "normal" training, covering toolmaking, scripting, and advanced topics as well as the introductory-level stuff. _ +_ +International contacts are fine, and in fact it's something I'm excited to get going, as international classes also help me set up future PowerShell Forum and PowerShell Saturday events in a country or region. +So think about your area and see if we might be a fit, and if you've got a really top-notch training center you can put us in touch with! + + [1]: https://powershell.org/contact-us/ diff --git a/content/articles/2013/05/why-doesnt-my-validatescript-work-correctly/index.md b/content/articles/2013/05/why-doesnt-my-validatescript-work-correctly/index.md new file mode 100644 index 000000000..88d3a88c8 --- /dev/null +++ b/content/articles/2013/05/why-doesnt-my-validatescript-work-correctly/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2013-05-01-why-doesnt-my-validatescript-work-correctly/ +title: "Why Doesn't My ValidateScript() work correctly?" +authors: + - Don Jones +date: "2013-05-01T13:52:06+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +aliases: + - /2013/05/why-doesnt-my-validatescript-work-correctly/ +--- + +I've received a few comments from folks after my observations on the Scripting Games Event 1. In those observations, I noted how much I loved: +**[ValidateScript({Test-Path $_})][string]$path** +As a way of testing to make sure your -Path parameter got a valid value, I love this. I'd never thought of it, and I plan to use it in classes. I may write a book about it someday, or maybe even an ode. Seriously good logic. But... I also bemoaned some scripts that provided an additional Test-Path, in the script's main body of code. Why have a redundant check? +So, first, thanks for the e-mails you all sent. Second... please understand that I can't respond to you all. I've got this full-time job thing, and I've _got_ to do it or the grocery store will stop taking our checks. You're _welcome_ to drop comments here, and I _really appreciate_ when you say stuff like, "can you explain ___ in a future post?" because it gives me ideas to write about. I just can't get into private e-mail based education for a dozen folks. Teaching is kinda what I do for my job, so most of my time has to go to that. +But - there's a great teaching point here. Let's take this example: +[![valid-default-path](https://powershell.org/wp-content/uploads/2013/05/valid-default-path.png)](https://powershell.org/wp-content/uploads/2013/05/valid-default-path.png) +This works as you would hopefully expect. When given a valid path, it's fine. When allowed to use a valid default, it's fine. When given an invalid path, it barfs in the ValidateScript. Now look at the next example - which more closely approximates what people have been seeing in their Scripting Games scripts: +[![invalid-default-path](https://powershell.org/wp-content/uploads/2013/05/invalid-default-path.png)](https://powershell.org/wp-content/uploads/2013/05/invalid-default-path.png) +In the Games, you were given a default path that _wasn't valid on your computer._ So folks allowed their script to run with that default, and got errors, and were annoyed that ValidateScript() didn't catch the problem. +It never will. +When you run a command, PowerShell goes through a process called parameter binding, wherein it attaches values to parameters and runs any declarative validation - like ValidateScript(). That validation will _always_ catch invalid incoming data that's been manually specified or sent in via the pipeline (for parameters that accept pipeline input). Because my -Path parameter wasn't declared as mandatory, the validation routine will let me run the script and not specify -path. +_Then_ the shell actually _runs_ my code - and _that's_ when it assigns the default value to $path if one wasn't specified on -path. Validation is over by this point, so an invalid default value will sneak by. The assumption by the shell is that _you're_ providing the default value, so _you're_ smart enough to provide a valid one. If you don't, it's your problem. +So do you just add a second, in-code check for the parameter? I'd still say no. I really dislike redundancy. If you know, because of your situation, that you can't rely on ValidateScript(), then don't use it at all - one check should suffice, and if it needs to be in-code instead of declarative, that's fine. What'd be nice is if there was a declarative way of specifying a default, like **[Default('whatever')]** that ran before the validation checks, but such a thing doesn't exist. Frankly, you could probably argue that if you can't guarantee the validity of a default, then you shouldn't provide one - and I'd probably buy into that argument, and subscribe to your newsletter. +In this case, the problem is entirely artificial. The default path value given to you in the Games scenario _is_ valid _in the context of the Games;_ it's just when you test it on _your_ system, _outside_ that context, that a problem crops up. +Hopefully this helps explain how the ValidateXXX() attributes work, and how they interact with other features, like a default value. +_Now_ explain why this will never assign C:\ as a default value: +**[Parameter(Mandatory=$True)][string]$path = 'c:\'** diff --git a/content/articles/2013/05/your-weekend-games-report/index.md b/content/articles/2013/05/your-weekend-games-report/index.md new file mode 100644 index 000000000..2d2e9735f --- /dev/null +++ b/content/articles/2013/05/your-weekend-games-report/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-05-18-your-weekend-games-report/ +title: Your Weekend Games Report +authors: + - Don Jones +date: "2013-05-18T14:05:18+00:00" +categories: + - Scripting Games +aliases: + - /2013/05/your-weekend-games-report/ +--- + +It's been a crazy-busy week for me, so I'm just getting caught up here. I'm off observing the beta-teach of the new 10961A PowerShell 3 class in Phoenix next week, but I'll be keeping an eye on the Games. +So let's run some numbers. +The Games have 2092 users at present, along with 10960 scores and 5412 comments. There are 849 total entries. +Regarding Event 3, we have 109 Advanced entries and 122 Beginner entries. The average beginner score is 2.8416, and the advanced score is 2.8512. Darn close. +Site traffic is up to 25,000 visits from 18,200 unique visitors, for a total of 56,000 page views and a poo-load of bandwidth. I should have Event 3 winners posted on Tuesday sometime. diff --git a/content/articles/2013/06/_index.md b/content/articles/2013/06/_index.md new file mode 100644 index 000000000..52991195f --- /dev/null +++ b/content/articles/2013/06/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from June 2013" +description: "PowerShell.org Articles published in June 2013." +--- diff --git a/content/articles/2013/06/as-the-scripting-games-wrap-up/index.md b/content/articles/2013/06/as-the-scripting-games-wrap-up/index.md new file mode 100644 index 000000000..8621ac9eb --- /dev/null +++ b/content/articles/2013/06/as-the-scripting-games-wrap-up/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2013-06-01-as-the-scripting-games-wrap-up/ +title: As The Scripting Games Wrap Up… +authors: + - Don Jones +date: "2013-06-01T18:39:15+00:00" +categories: + - Scripting Games +aliases: + - /2013/06/as-the-scripting-games-wrap-up/ +--- + +We've still got, oh, about 48 hours or so for Event 6 submissions, and then of course voting and judging. **But** I wanted to take a second and let you know what this year's Games looked like: +We've logged over 1,100 entries. Almost 13,000 votes. More than 6,700 comments. That's a lot - and it'll all be [archived][1] once the final votes are tallied and prizes awarded. There will be ZIP files of entries for each track and event, and I encourage you to download them over the Summer - we won't necessarily archive them permanently. +We've seen an enormous range of techniques and approaches, and generated hundreds of learning notes across more than a dozen active expert commentators. We've awarded - with some yet to be handed out - thousands of dollars worth of prizes. +This is also a good time to start collecting general feedback on the Games, so feel free to drop into our [official post-mortem thread and offer your feedback][2]. **Read the introductory post in that thread** before you post, please. I'm asking for a specific feedback format at this time, although you're always welcome to open your own thread if you have something specific or off-format you want to offer. I ask only that you keep things _constructive_ and _professional._ +Thanks to everyone who participated in the Games. We're formulating our next event, so stay tuned. + + [1]: http://scriptinggames.org/entries + [2]: https://powershell.org/forums/topic/post-mortem-likedislike/ diff --git a/content/articles/2013/06/call-for-debates/index.md b/content/articles/2013/06/call-for-debates/index.md new file mode 100644 index 000000000..068cb3575 --- /dev/null +++ b/content/articles/2013/06/call-for-debates/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-06-10-call-for-debates/ +title: Call for Debates! +authors: + - Don Jones +date: "2013-06-10T14:20:00+00:00" +categories: + - Announcements + - Scripting Games +aliases: + - /2013/06/call-for-debates/ +--- + +As the Scripting Games begin to wind down, I know that we've come across a number of divergent opinions, especially in the comments. "You shouldn't use .NET classes!" says one comment, "you should have done this with a .NET class" says another comment _in the same entry. _Fun. It's great to see those differences - but it'd be better to _discuss_ them. +So I'm asking everyone in the Games: Go through your comments on all of your entries. Find comments that you disagree with - but that you could possibly see someone making an argument for (and that you'd perhaps argue against). Post those here as a comment, or email me (there's a contact form on the Site Info tab). I want to collect these, and start a series of discussions where we can, jointly, start to hammer out some patterns and practices that we, as a community, feel work well. Some of those may have exceptions (rules always do) - "never use a .NET class _when there's a cmdlet that can do the same thing, _but otherwise go nuts" is one example. +Fire away. For now, you don't need to put your argument for or against - I'm just collecting the topics that we've seen disagreement or differing opinions on. Discussion will follow! +The result of this will be a community-guided Best Practices ebook, which I'll assemble and we'll give away for free. I might even build that, initially, as a wiki, so that folks could contribute to it over time. Will see - that's a bit of extra software. diff --git a/content/articles/2013/06/caution-dont-run-update-help-right-now/index.md b/content/articles/2013/06/caution-dont-run-update-help-right-now/index.md new file mode 100644 index 000000000..e4b0f5dc7 --- /dev/null +++ b/content/articles/2013/06/caution-dont-run-update-help-right-now/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2013-06-28-caution-dont-run-update-help-right-now/ +title: "[UPDATE: It's Safe] CAUTION: Don't Run Update-Help Right Now" +authors: + - Don Jones +date: "2013-06-28T15:19:22+00:00" +categories: + - Announcements + - PowerShell for Admins +aliases: + - /2013/06/caution-dont-run-update-help-right-now/ +--- + +**UPDATE 2 JULY 2013: Microsoft is informing MVPs that the fix is in, and new help files should be downloadable by (at latest) the morning of 3 July 2013. So get your Update-Help ready to run. [More info][1].** +If you haven't recently run Update-Help... don't. There's a problem with the help files that have been produced recently so that instead of: +**-computername ** +You're getting: +**-computername** +This affects all parameters - no value types will be shown. This has been reported to Microsoft, and they've acknowledged receipt of that report and are investigating. Personally, I believe the problem may be related to internal-use-only tools that are used to create the syntax section of the help files, so hopefully it'll be an easy fix. +The -full and -detail help still shows the correct information, so if you've downloaded the borked help files, you're not totally out of luck. +As far as I can determine, this only currently affects core PowerShell cmdlets, not add-in modules from product teams like Exchange, etc. I believe that's because the core cmdlets were just updated and re-published, something the PowerShell team tends to do a bit more frequently than some of the other product groups. +I'll keep you posted as I learn anything new. + + [1]: http://wp.me/p3priC-25s diff --git a/content/articles/2013/06/charlotte-user-group-july-meeting/index.md b/content/articles/2013/06/charlotte-user-group-july-meeting/index.md new file mode 100644 index 000000000..0c14ed8fa --- /dev/null +++ b/content/articles/2013/06/charlotte-user-group-july-meeting/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2013-06-12-charlotte-user-group-july-meeting/ +title: Charlotte User Group July Meeting +authors: + - ScriptingWife +date: "2013-06-13T02:24:30+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/06/charlotte-user-group-july-meeting/ +--- + +Please join us on a special date in July. This month our meeting will be on July 11, 2013 instead of our normal first Thursday of the month due to the holiday. +Microsoft Scripting Guy Ed Wilson will make a presentation on DSC Desired State Configuration for PowerShell V4. +Sign up at the following link in Meetup so we know how many will be there and we can have adequate food for all. + diff --git a/content/articles/2013/06/event-6-judges-notes-from-jan-egil-ring/index.md b/content/articles/2013/06/event-6-judges-notes-from-jan-egil-ring/index.md new file mode 100644 index 000000000..722064a65 --- /dev/null +++ b/content/articles/2013/06/event-6-judges-notes-from-jan-egil-ring/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2013-06-08-event-6-judges-notes-from-jan-egil-ring/ +title: "Event 6 Judge's Notes from Jan Egil Ring" +authors: + - Don Jones +date: "2013-06-09T01:25:00+00:00" +aliases: + - /2013/06/event-6-judges-notes-from-jan-egil-ring/ +--- + + has Jan Egil's thoughts on the final event. diff --git a/content/articles/2013/06/last-events-my-notes-and-scripts/index.md b/content/articles/2013/06/last-events-my-notes-and-scripts/index.md new file mode 100644 index 000000000..6b33eaeff --- /dev/null +++ b/content/articles/2013/06/last-events-my-notes-and-scripts/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-06-08-last-events-my-notes-and-scripts/ +title: "Last events: my notes and scripts." +authors: + - Bartek Bielawski +date: "2013-06-08T20:46:30+00:00" +aliases: + - /2013/06/last-events-my-notes-and-scripts/ +--- + +Oops! Looks like I totally forgot about posting what I did over here. Sorry! +In order of appearance: +[Event 5 - script](http://becomelotr.wordpress.com/2013/05/28/event-5-my-way/) +[Event 5 - notes](http://becomelotr.wordpress.com/2013/06/02/event-5-my-notes/) +[Event 6 - script](http://becomelotr.wordpress.com/2013/06/05/event-6-my-way/) +[Event 6 - notes](http://becomelotr.wordpress.com/2013/06/08/event-6-my-notes/) +This is last event, and I would like to thank everybody who took part in this games. Thank you guys for great ideas, inspiration, feedback... It was really educational experience for me (as it was in the past), and I hope it was educational for you too. And - congratulations for all the winners. 🙂 diff --git a/content/articles/2013/06/microsoft-announces-powershell-v4-dsc/index.md b/content/articles/2013/06/microsoft-announces-powershell-v4-dsc/index.md new file mode 100644 index 000000000..0d87be4d5 --- /dev/null +++ b/content/articles/2013/06/microsoft-announces-powershell-v4-dsc/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2013-06-04-microsoft-announces-powershell-v4-dsc/ +title: Microsoft announces PowerShell v4, DSC +authors: + - Don Jones +date: "2013-06-04T14:00:15+00:00" +categories: + - Announcements +aliases: + - /2013/06/microsoft-announces-powershell-v4-dsc/ +--- + +Yesterday at TechEd North America, Jeffrey Snover and Kenneth Hansen began describing features to be delivered with PowerShell v4 in Windows Server 2012 R2 (the company has not yet announced availability dates for either). +In particular, a new feature called Desired State Configuration promises to become the foundation for some pretty serious expansion. Essentially, DSC lets administrators write a declarative "script" that describes what a computer should look like. PowerShell takes that, matches the declarative components with underlying modules, and ensures that the computer does, in fact, look like that. Nearly anything can be checked and controlled: roles, features, files, registry keys - anything, in fact, that a PowerShell module can do. +The architecture includes the notion of centrally stored declarative scripts, and the ability to dynamically deploy supporting modules on an as-needed basis to computers that are checking themselves. A System Center Virtual Machine Manager demonstration utilized the feature to dynamically spin up brand-new VM instances and have them immediately reconfigure to their desired state. +At first glance, it's easy to see "more Microsoft stuff" in this feature. After all, the company has previous given us Dynamic Systems Management (DSM), various universal "configuration languages," and even System Center Configuration Manager's somewhat primitive configuration auditing feature. But keep in mind that DSC will **be a core part of the OS.** That means product teams and ISVs can rely on it being there, with no other dependencies to worry about. DSC is also built around DMTF standards - like the MOF format - making it natively suitable for cross-platform management. A demo from Opscode using their Chef product showed clever use of the new DSC feature. +Hansen also mentioned that PowerShell modules will be deployable through DSC as ZIP files, helping make them more self-contained (not entirely unlike PECL packages in the Unix world). +There has been no announcement as yet on how far back PowerShell v4 will be made available, nor whether or not DSC is a PowerShell feature or a Windows Server 2012 R2 feature. If it is indeed a PowerShell feature (which I suspect it is), then it'll be available on any system with v4 installed. That will hopefully include at least Windows 7, Windows Server 2008 R2, and later. diff --git a/content/articles/2013/06/more-powershell-v4-and-dsc-details/index.md b/content/articles/2013/06/more-powershell-v4-and-dsc-details/index.md new file mode 100644 index 000000000..1e2d5b4d0 --- /dev/null +++ b/content/articles/2013/06/more-powershell-v4-and-dsc-details/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2013-06-05-more-powershell-v4-and-dsc-details/ +title: More PowerShell v4 and DSC Details +authors: + - Don Jones +date: "2013-06-05T14:22:01+00:00" +categories: + - Announcements +aliases: + - /2013/06/more-powershell-v4-and-dsc-details/ +--- + +Here's what I know, much [based on a TechEd talk this week:][1] +We can expect PowerShell v4 to ship in the Windows Management Framework, as with previous versions. It will be preinstalled on Windows Server 2012 R2 and what they're calling Windows 8.1; the default execution policy will be RemoteSigned, and on the server OS Remoting will be enabled by default. Microsoft's past policy has been "current version and two back," and if they follow that then we'll get WMF 4.0 on Windows 7, Windows Server 2008 R2, and later. That would leave out Server 2008, if in fact they follow that same policy. +DSC itself starts with a PowerShell script that's mainly declarative code: Make sure x is installed, make sure y isn't installed, etc. PowerShell compiles that into a MOF, which can be transmitted to managed endpoints (computers). The built-in mechanisms for deployment aren't as complex or flexible as GPO or SCCM targeting, but you could use either GPO or SCCM to deploy those MOFs. That's the "push" model - you push MOFs out to managed nodes. A "pull" model requires you to configure managed nodes to have a URI and UDDI, and they check that URI for their MOFs. +DSC runs every 15 minutes or every 30 minutes by default, depending on whether you're using push or pull, and you can configure that time. Right now there's no feedback or reporting - it's a bit like GPO, where you push out the setting and it enforces it, but that's it. +When DSC runs, it takes your "desired state" MOFs and starts running "DSC resources." These resources are special modules that implement a predefined set of functions - a Get, a Test, and a Set function, to be specific. I expect MS product groups to provide these - the Exchange team will likely someday provide resources that can check/set Exchange settings, for example. You can also write your own modules. DSC calls the "test" to see if your setting is or isn't configured at that time; it calls the "set" to add/remove/whatever the setting. So the real work is done by these special modules - and those modules can do whatever they want. Write to the registry, run commands, call .NET classes, _anything._ +So there's two scripts: The "desired state" script that gets compiled to a MOF (so you shouldn't ever have to mess directly with MOFs yourself), and the "implementing module" that has the three special functions which actually do all the work. +In the "pull" model, those special modules can be dynamically downloaded by a managed node. "Hey, I grabbed this desired state MOF, and it seems to require 12 modules, so I'll go to the same URI and look for those 12 modules." You provide those modules as ZIPs, and PowerShell can grab the ZIP, expand it into the proper location, and then run the modules as needed. +Personal analysis (meaning this is my opinion, not something MS has said): I can see this DSC feature integrating super-well with some future version of SCCM. DSC writes out some local file with configuration details, and the SCCM client grabs it and feeds it up to the database. Those MOFs could potentially be pulled from a Distribution Point by the client, handed off to PowerShell, and run on a scheduled basis. I can also see DSC starting to supplant GPO in a lot of ways. After all, _most_ GPO stuff is just reg hacks in a special section of the registry; there's no reason DSC couldn't do that - and it does it on a more frequent basis, making it more reliable. Right now, the targeting of a MOF isn't as flexible as GPO targeting... but that could obviously evolve. Until more of the architectural details emerge, we won't know for sure... and this is of course a v1 feature that will doubtless be expanded on and invested in as the team moves forward. We do know that the first release of DSC will not have a lot of those underlying "resource modules," which means you won't actually be able to configure much. This is a feature the team needs to put in place so that folks can start building those things... so this is going to take a cycle or two to start being really useful. +There's obviously still a lot under wraps here, and this is all subject to change and tweaking as the team moves toward release. We're told there will be some kind of public preview - but they haven't announced a date on that. Personally, with the Build conference coming up, we can imagine that Microsoft will try and have a preview release ready for that show. There's also no announcement of ship date. It's still too early to tell, and I want to emphasize that the company hasn't announced _any_ dates. We can but try to make educated guesses at this stage. + + [1]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/MDC-B400#fbid=8yK1U1eJ0GQ diff --git a/content/articles/2013/06/notes-for-event-6/index.md b/content/articles/2013/06/notes-for-event-6/index.md new file mode 100644 index 000000000..c803bd373 --- /dev/null +++ b/content/articles/2013/06/notes-for-event-6/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-06-07-notes-for-event-6/ +title: Notes for Event 6 +authors: + - Art Beane +date: "2013-06-07T13:26:41+00:00" +aliases: + - /2013/06/notes-for-event-6/ +--- + +When I read the instructions for event 6, I thought that here's a tough one. A lot of competitors won't have access to a test environment with Windows Server 2012 and Virtual Machines that they can actually work with. So, I expected that many of the entries wouldn't get tested and intended to forgive minor errors that would have shown up in testing. +Well, there was one thing that really surprised me. The instructions were quite clear about minimizing "Are You Sure" queries to the user, but you can count on one hand the number of entries that included _-Confirm:$false_. This is just an example of why it's so important to read the problem statement very carefully and extract the solution requirements. Then, after creating the solution, go back and verify that the requirements have all been met. Many of the entries called out this requirement in the comments, but then didn't account for it in the script. +I had mentioned in a previous blog entry that, particularly in the advanced entries, the author was working too hard. Sometimes this means putting more emphasis on "completeness" than in solving the problem. Here's an example of a wasted effort. A few entries used the _[ValidateNotNullOrEmpty()]_ test for a possible alternate to the default value for "Server".  Because there is a default value for the parameter, it won't be null or empty making this test unnecessary. Here, give this a try: + + +`function Test-NullOrEmpty { [CmdletBinding()] Param ( [ValidateNotNullOrEmpty()] $Name = "Server" ) "Got $Name" } Test-NullOrEmpty +`Note that calling the function without a named parameter just assigns the default value. In order to make it fail you have to deliberately call the function with an empty value (_Test-NullOrEmpty -Name_), which is not going to happen in the real world. +I know that these are just nit-picking -- and if these are examples of the nits in the Event 6 entries, then CONGRATULATIONS!! y'all did a mighty fine job of solving the problem. Calling out these issues is just intended as a learning opportunity. There are lots and lots of correct ways to write PowerShell solutions, it's just that some are more efficient or take less typing than others. And learning about them is one of the important results of participating in the games. +Thanks to all of you for your efforts! diff --git a/content/articles/2013/06/overall-winners-of-the-scripting-games/index.md b/content/articles/2013/06/overall-winners-of-the-scripting-games/index.md new file mode 100644 index 000000000..87897829e --- /dev/null +++ b/content/articles/2013/06/overall-winners-of-the-scripting-games/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-06-11-overall-winners-of-the-scripting-games/ +title: Overall Winners of the Scripting Games +authors: + - Don Jones +date: "2013-06-11T14:24:22+00:00" +categories: + - Scripting Games +aliases: + - /2013/06/overall-winners-of-the-scripting-games/ +--- + +**Congratulations to our top winners, **determined by our expert judges (and in this case we also considered their CrowdScores), **mikefrobbins** and **taygibb**, who have just won a free pass to Microsoft TechEd Europe or Microsoft TechEd North America 2014. Instructions are in your profile for claiming your prize. It is transferrable, but must be claimed/transferred by the end of July. +**Congratulations to our top voters/commenters**, Klaus_Schulte and Poshsg0606. They were chosen randomly for this award, although I did review their comments and scores to ensure they were all meaningful and consistent. They've won free passes to the PowerShell Summit North America 2014; these are transferrable and must be claimed/transferred by the end of July. +Thanks to everyone who participated in The Scripting Games this year. We've received a lot of feedback from you, and very much appreciate the time and spirit you spent to offer it. We're taking it all into consideration for our next event. diff --git a/content/articles/2013/06/pipeline-or-script-that-is-the-question/index.md b/content/articles/2013/06/pipeline-or-script-that-is-the-question/index.md new file mode 100644 index 000000000..d1796f6f8 --- /dev/null +++ b/content/articles/2013/06/pipeline-or-script-that-is-the-question/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2013-06-21-pipeline-or-script-that-is-the-question/ +title: Pipeline or Script? That is the Question +authors: + - Don Jones +date: "2013-06-21T17:52:14+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/06/pipeline-or-script-that-is-the-question/ +--- + +When I teach PowerShell classes, I often start by assuring students that, with the shell, you can _accomplish a great deal without ever writing a script. _And it's true - you can. Unlike predecessor technologies like VBScript, PowerShell lets you pack a lot of goodness into a one-liner - or even into several lines run manually in the console. +What I never say is _you can accomplish  +anything + without ever writing a script. _That isn't true. I see folks struggle all the time to squeeze something into a one-liner pipeline, when life would be so much easier if they switched a script-style, procedural approach. +So what's the tipping point? +Actually, it's really easy to spot. You should be writing a script if: + + * +You need to take different actions based on some condition, like send an e-mail if there's data to send, but send nothing if there's no data. + + * You need to do more than one discrete task. Yeah, you can sometimes jam multiple actions into a one-liner using things like passthrough, but it's not consistently available, and the command becomes dreadfully difficult to read and debug. + * You need to run a command repeatedly over time, and each time some of its values will change (scripts offer declarative parameters). + +Many smart folks _start_ in the console to test a command, and then paste it into a script they're working on (I do that, too). And there are other reasons to switch from "running a command in the console" to "banging out a script in the ISE [or editor of choice]." What tips would you offer to a PowerShell newbie to help them get the most from the command-line... but know when it's time to move into a script-based approach? diff --git a/content/articles/2013/06/powershell-great-debate-capturing-errors/index.md b/content/articles/2013/06/powershell-great-debate-capturing-errors/index.md new file mode 100644 index 000000000..c8c57bf38 --- /dev/null +++ b/content/articles/2013/06/powershell-great-debate-capturing-errors/index.md @@ -0,0 +1,52 @@ +--- +url: /articles/2013-06-17-powershell-great-debate-capturing-errors/ +title: "PowerShell Great Debate: Capturing Errors" +authors: + - Don Jones +date: "2013-06-17T14:30:30+00:00" +aliases: + - /2013/06/powershell-great-debate-capturing-errors/ +--- + +Hot on the heels of [our last Great Debate][1], let's take the discussion to the next logical step and talk about how you like to capture errors when they occur. +The first technique is to use -ErrorVariable: + + +`Try { + Get-WmiObject Win32_BIOS -comp nothing -ea stop -ev mine +} Catch { + # use $mine for error +} +`Another is to use the $Error collection: + + +`Try { + Get-WmiObject Win32_BIOS -comp badname -ea stop +} Catch { + # use $error[0] +} +`And a third is to use $_: + + +`Try { + Get-WmiObject Win32_BIOS -comp snoopy -ea stop +} Catch { + # use $_ +} +`Personally, I've always disliked the last approach, because people don't realize that in some situations $_ can get "hijacked." For example: + + +`Get-Content names.txt | +ForEach-Object { + Try { + Get-WmiObject Win32_BIOS -Comp $_ -EA Stop + } Catch { + # is $_ an error or a computer name? + } +} +`Now, I'm a big not-fan of using pipelines like this in a script, but that's another debate (it's on my list). The point is really that I can't universally, 100% rely on $_... and when someone uses $_ without realizing what's happening, they back themselves into a tricky corner that's difficult to diagnose. Since my big focus is on learning and teaching, I tend to want to teach techniques that are universal and always work the same way. +That said, $error[0] and the -ErrorVariable (-EV) technique return slightly different objects, meaning you have to work with them somewhat differently. +So what's your preference? Why? Which of these don't you like so much... and why? +[boilerplate greatdebate] + + [1]: https://powershell.org/2013/06/11/powershell-great-debate-error-trapping/ "PowerShell Great Debate: Error Trapping" diff --git a/content/articles/2013/06/powershell-great-debate-error-trapping/index.md b/content/articles/2013/06/powershell-great-debate-error-trapping/index.md new file mode 100644 index 000000000..7458150c0 --- /dev/null +++ b/content/articles/2013/06/powershell-great-debate-error-trapping/index.md @@ -0,0 +1,33 @@ +--- +url: /articles/2013-06-11-powershell-great-debate-error-trapping/ +title: "PowerShell Great Debate: Error Trapping" +authors: + - Don Jones +date: "2013-06-11T21:17:36+00:00" +aliases: + - /2013/06/powershell-great-debate-error-trapping/ +--- + +In the aftermath of The Scripting Games, it's clear we need to have several community discussions - thus, I present to you, The Great Debates. These will be a series of posts wherein I'll outline the basic situation, and you're encouraged to debate and discuss in the comments section. +The general gist is that, during the Games, we saw different people voting "up" and "down" for the exact same techniques. So... which one is right? Neither! But all approaches have pros and cons... so that's what we'll discuss and debate. In the end, I'll take the discussion into a community-owned (free) ebook on patterns and practices for PowerShell. + +## Today's Debate: Error Trapping + +There are a few different approaches folks take to trapping an error (I'm not discussing _capturing_ the error, just knowing that one occurred). +Hopefully the Trap construct is familiar to everyone; I've always believed it's awkward and outdated. The product team has said as much; it was just the best they could do in v1 given time constraints. Its use of scope makes it especially tricky sometimes. +Try...Catch...Finally seems to be what a lot of people prefer. It's procedural and structured, and it works against any terminating exception. You do have to remember to make errors into terminating exceptions (**-EA Stop** on a cmdlet, for example), but it's a very programmatic approach. +I see folks sometimes use $?: + + +`Do-Something +If ($?) { + # deal with it +} +`A "con" of this approach is that $? doesn't indicate an error. It indicates whether or not _the previous command  +thinks + it completed successfully. _It's reliable with _most_ cmdlets - but I've seen it fail for a lot of external utilities. Given that it isn't 100% reliable as an indicator, I tend to shy away from it. I'd rather learn one way that always works, and that's been Try/Catch for me. +Try/Catch also makes it easy to catch different exceptions differently. I don't always need to do so... but again, I'd rather learn _one_ way to do things that _always_ works and provides more flexibility. I don't want to use $? sometimes, and then use something else other times, because that's more to remember, teach, learn, etc. +Some folks will do an **$error.clear()**, clearing the error collection, and then run a command. They'll then check **$error.count** to see if it's nonzero. I don't like that as much because it looks messy to me, and again - it doesn't let me easily handle different exceptions as easily as Try/Catch. +Ok... your thoughts? + +[boilerplate greatdebate] diff --git a/content/articles/2013/06/powershell-great-debate-to-accelerate-or-not/index.md b/content/articles/2013/06/powershell-great-debate-to-accelerate-or-not/index.md new file mode 100644 index 000000000..451aef2b1 --- /dev/null +++ b/content/articles/2013/06/powershell-great-debate-to-accelerate-or-not/index.md @@ -0,0 +1,49 @@ +--- +url: /articles/2013-06-25-powershell-great-debate-to-accelerate-or-not/ +title: "PowerShell Great Debate: To Accelerate, or Not?" +authors: + - Don Jones +date: "2013-06-25T14:38:57+00:00" +aliases: + - /2013/06/powershell-great-debate-to-accelerate-or-not/ +--- + +At his [Birds of a feather session at TechEd 2013][1], Glenn Sizemore and I briefly debated something that I'd like to make the topic of today's Great Debate. It has to do with how you create new, custom objects. For example, one approach - which I used to favor, but now think is too long-form: + + +`$obj = New-Object -Type PSObject +$obj | Add-Member NoteProperty Foo $bar +$obj | Add-Member NoteProperty This $that +`We saw some variants in The Scripting Games, including this one: + + +`$obj = New-Object PSObject +Add-Member -InputObject $obj -Name Foo -MemberType NoteProperty -Value $bar +`I generally don't like any syntax that explicitly uses -InputObject like that; the parameter is designed to catch pipeline input, and using it explicitly strikes me as overly wordy, and doesn't really leverage the shell. +Glenn and I both felt that, these days, a hashtable was the preferred approach: + + +`$props = @{This=$that; + Foo=$bar; + These=$those} +`The semicolons are optional when you type the construct that way, but I tend to use them out of habits that come from other languages. The point of our debate was that Glenn would use the hashtable like this: + + +`$obj = [pscustomobject]$props +`Because he feels it's more concise, and because he puts a high value on quick readability. I personally prefer (and teach) a somewhat longer version: + + +`$obj = New-Object -Type PSObject -Prop $props +`Because, I argued, type accelerators like [pscustomobject] aren't documented or discoverable. Someone running across your script can't use the shell's help system to figure out WTF is going on; with New-Object, on the other hand, they've got a help file and examples to rely on. +(BTW, I never worry about ordered hashtables; if I need the output in a specific order, I'll use a custom view, a Format cmdlet, or Select-Object. A developer once explained to me that unordered hashtables are more memory-efficient for .NET, so I go with them). +But the big question on the table here is "to use type accelerators, or no?" You see this in many instances: + + +`[null]Do-Something +# vs. +Do-Something | Out-Null +`Same end effect of course, but I've always argued that the latter is more discoverable, while Glenn (and many others) prefer the brevity of the former. +So we'll make today's Great Debate two-pronged. What approach do you favor for creating custom objects? And, do you tend to prefer type accelerators, or no? +[boilerplate greatdebate] + + [1]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/BOF-ITP23 diff --git a/content/articles/2013/06/scripting-games-2013-event-5-notes/index.md b/content/articles/2013/06/scripting-games-2013-event-5-notes/index.md new file mode 100644 index 000000000..498220ca8 --- /dev/null +++ b/content/articles/2013/06/scripting-games-2013-event-5-notes/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-06-03-scripting-games-2013-event-5-notes/ +title: "Scripting Games 2013: Event 5 Notes" +authors: + - Boe Prox +date: "2013-06-04T03:36:46+00:00" +aliases: + - /2013/06/scripting-games-2013-event-5-notes/ +--- + +With week 5 in the books, I can see that everyone just continues to grow and show some great submissions. Of course, nothing is perfect and can always show areas of improvement, but trust me, you are all doing an excellent job! +I was hoping to have this article completed prior to now, but between a flight to Tech Ed and forgetting my power cord for the laptop, I am just now getting this accomplished. Better late than never :). +With that, head over to my blog to check out my notes on Event 5 [here](http://learn-powershell.net/2013/06/03/scripting-games-2013-event-5-notes/). diff --git a/content/articles/2013/06/scripting-games-2013-event-6-notes/index.md b/content/articles/2013/06/scripting-games-2013-event-6-notes/index.md new file mode 100644 index 000000000..5444a93a9 --- /dev/null +++ b/content/articles/2013/06/scripting-games-2013-event-6-notes/index.md @@ -0,0 +1,12 @@ +--- +url: /articles/2013-06-09-scripting-games-2013-event-6-notes/ +title: "Scripting Games 2013: Event 6 Notes" +authors: + - Boe Prox +date: "2013-06-10T02:43:58+00:00" +aliases: + - /2013/06/scripting-games-2013-event-6-notes/ +--- + +We have finally hit the final event of the 2013 Scripting Games! The past 6 weeks have given us many amazing scripts and some that were in need of extra work. Regardless, for those of you who have finished all 6 scripts in your respective, I say Congratulations! You have hit the finish line sprinting hard to the end! Now you can sit back and know that you made it and have learned (hopefully) some great things along the way. Remember, not only have you learned some new techniques, but also the techniques that you have used have taught others how to write better scripts! +Check out the rest of my notes on my [blog here](http://learn-powershell.net/2013/06/09/scripting-games-2013-event-6-notes/)! diff --git a/content/articles/2013/06/scripting-games-event-5-winners-1/index.md b/content/articles/2013/06/scripting-games-event-5-winners-1/index.md new file mode 100644 index 000000000..9bbb170e2 --- /dev/null +++ b/content/articles/2013/06/scripting-games-event-5-winners-1/index.md @@ -0,0 +1,34 @@ +--- +url: /articles/2013-06-11-scripting-games-event-5-winners-1/ +title: Scripting Games Event 6 Winners +authors: + - Don Jones +date: "2013-06-11T14:17:31+00:00" +categories: + - Scripting Games +aliases: + - /2013/06/scripting-games-event-5-winners-1/ +--- + +We're pleased to announce the winners for Event 6 of The Scripting Games 2013! +Winners: You can log into [The Scripting Games Web site][1] and go to your Profile page to see your prize. You will be given a prize redemption code and either a URL where you can redeem it, or an e-mail address of the prize provider (they will need the redemption code). All prizes must be claimed by the end of July 2013. I will list winners by username; if you used your e-mail address as your username, then a portion of that will be truncated for your privacy. Anyone can log in and check their Profile page to see if they've won a prize. + + * Event 6 Beginner First Place: chanced (free ebook from Manning **and a copy of SAPIEN Software Suite!**) + * Event 6 Beginner Second Place: marches (6 months video training from Interface **and a copy of SAPIEN PrimalScript!**) + * Event 6 Beginner Third Place: jb.lewis (1 year of Phoneominal from Start-Automating) + + * Event 6 Advanced First Place: mikefrobbins (free ebook from Manning **and a copy of SAPIEN Software Suite!**) + * Event 6 Advanced Second Place: DaveGarnar (6 months video training from Interface **and a copy of SAPIEN PrimalScript!**) + * Event 6 Advanced Third Place: Alexy (1 year of Phonenominal from Start-Automating) + + * Event 6 Beginner Top CrowdScore: taygibb (free ebook from Manning) + * Event 6 Advanced Top CrowdScore: CarloM (free ebook from Manning) + +These will be listed on our [consolidated list of winners][2], which includes links to the winning entries. +Our CrowdScore winners get a selection of free ebooks from Manning, 1 month of video training from Interface, and $50 gift cards from SAPIEN; 1 prize per winner. Check your profile to see if you've won! +Congratulations to all of our winners! Note that our top three prizes in each category were awarded by our Mighty Panel of Celebrity Judges. Each judge nominated a first, second, and third place winner from the entries that our expert commentators identified as "best." Those nominations were compiled, and in the event of a tie the earliest entry was deemed winner. + + + + [1]: http://scriptinggames.org/ + [2]: http://scriptinggames.org/winners.php diff --git a/content/articles/2013/06/scripting-games-event-5-winners/index.md b/content/articles/2013/06/scripting-games-event-5-winners/index.md new file mode 100644 index 000000000..55294536c --- /dev/null +++ b/content/articles/2013/06/scripting-games-event-5-winners/index.md @@ -0,0 +1,35 @@ +--- +url: /articles/2013-06-04-scripting-games-event-5-winners/ +title: Scripting Games Event 5 Winners +authors: + - Don Jones +date: "2013-06-04T14:08:44+00:00" +categories: + - Scripting Games +aliases: + - /2013/06/scripting-games-event-5-winners/ +--- + +We're pleased to announce the winners for Event 5 of The Scripting Games 2013! +Remember that Event 6 is now open for community voting, and that Event 6 opens up near the end of this week. That'll be your last chance to contribute, and shortly after TechEd we'll announce the overall winners. Good luck! +Winners: You can log into [The Scripting Games Web site][1] and go to your Profile page to see your prize. You will be given a prize redemption code and either a URL where you can redeem it, or an e-mail address of the prize provider (they will need the redemption code). All prizes must be claimed by the end of July 2013. I will list winners by username; if you used your e-mail address as your username, then a portion of that will be truncated for your privacy. Anyone can log in and check their Profile page to see if they've won a prize. + + * Event 5 Beginner First Place: KmTatar (free ebook from Manning **and a copy of SAPIEN PowerShell Studio!**) + * Event 5 Beginner Second Place: skyrabin_yuri@__.ru (6 months video training from Interface) + * Event 5 Beginner Third Place: PShellMan (1 year of Phoneominal from Start-Automating) + + * Event 5 Advanced First Place: mjolinor (free ebook from Manning **and a copy of SAPIEN PowerShell Studio!**) + * Event 5 Advanced Second Place: mikefrobbins (6 months video training from Interface) + * Event 5 Advanced Third Place: dchristian3188@__.com (1 year of Phonenominal from Start-Automating) + + * Event 5 Beginner Top CrowdScore: KmTatar (free ebook from Manning) + * Event 5 Advanced Top CrowdScore: _Emin_ (free ebook from Manning) + +These will be listed on our [consolidated list of winners][2], which includes links to the winning entries. +Our CrowdScore winners get a selection of free ebooks from Manning, 1 month of video training from Interface, and $50 gift cards from SAPIEN; 1 prize per winner. Check your profile to see if you've won! +Congratulations to all of our winners! Note that our top three prizes in each category were awarded by our Mighty Panel of Celebrity Judges. Each judge nominated a first, second, and third place winner from the entries that our expert commentators identified as "best." Those nominations were compiled, and in the event of a tie the earliest entry was deemed winner. + + + + [1]: http://scriptinggames.org/ + [2]: http://scriptinggames.org/winners.php diff --git a/content/articles/2013/07/_index.md b/content/articles/2013/07/_index.md new file mode 100644 index 000000000..f2d6aaf6c --- /dev/null +++ b/content/articles/2013/07/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from July 2013" +description: "PowerShell.org Articles published in July 2013." +--- diff --git a/content/articles/2013/07/calling-all-powershell-teacherstrainers/index.md b/content/articles/2013/07/calling-all-powershell-teacherstrainers/index.md new file mode 100644 index 000000000..1fa57dc54 --- /dev/null +++ b/content/articles/2013/07/calling-all-powershell-teacherstrainers/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-07-29-calling-all-powershell-teacherstrainers/ +title: Calling all PowerShell Teachers/Trainers +authors: + - Don Jones +date: "2013-07-29T15:02:56+00:00" +categories: + - Training +aliases: + - /2013/07/calling-all-powershell-teacherstrainers/ +--- + +I'm in the process of building a referral list for teachers and trainers who work with Windows PowerShell. My goal is to build a "find a trainer" page here on PowerShell.org, with the ability for prospective clients to send an inquiry via email. This would be for customers seeking private classes, not for individual students seeking a class. +If you'd like to be on the list, please send me an email, or use the "Contact" page under the "Site Info" menu here on PowerShell.org. Please provide an email address that referrals can be sent to; you'd receive the potential client's contact information directly and would work with them directly - I'm not looking to act s middleman or agent, and there are no referral fees. We won't be providing pricing information or anything other than a means of connecting clients and trainers. +You can also provide a link to your Web site, if you have one, preferably a page that describes your PowerShell training offering(s). diff --git a/content/articles/2013/07/come-to-powershell-summer-school/index.md b/content/articles/2013/07/come-to-powershell-summer-school/index.md new file mode 100644 index 000000000..73890194d --- /dev/null +++ b/content/articles/2013/07/come-to-powershell-summer-school/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2013-07-01-come-to-powershell-summer-school/ +title: Come to PowerShell Summer School! +authors: + - Don Jones +date: "2013-07-01T22:11:31+00:00" +categories: + - Announcements + - PowerShell for Admins + - Training +aliases: + - /2013/07/come-to-powershell-summer-school/ +--- + +Through my company Concentrated Tech, I've decided to run a set of three [PowerShell Summer School][1] classes (click that link for descriptions). These will be a combo of self-study and weekly online sessions, designed to teach Toolmaking, Practical applications of PowerShell, or how to teach PowerShell in a lunch 'n' learn style format. Registration is open from now until August 1st, and you'll also get a discount on some great SAPIEN products to use during class, if you like. +The Toolmaking class will also prepare you for PowerShell VERIFIED EFFECTIVEâ„¢ certification, if you've been considering that. +Two of the classes will incorporate group code reviews of student assignments, to help improve your style; the third will include mock delivery sessions to help polish your delivery skills. All will include a private Q&A forum where you can ask questions both of me and of your fellow students while you're in the self-stufy phase. Classes will meet online, on Wednesdays, for six weeks through August and September. +Planning a vacation in the middle of summer school? It's fine - we can schedule a make-up online session when you get home. I'm also willing to try and make other accommodations to help make this an effective learning experience for everyone. +All of these classes assume a basic level of PowerShell knowledge, although you'll get plenty of review material to help you catch up, or dredge up old memories from when you _last_ tried to learn the shell. +Tell a friend, tell a colleague - I don't do these kinds of offerings all that often; my travel schedule usually precludes it. But a fortuitous schedule has made it possible, so consider taking advantage! + + [1]: http://itpro.concentratedtech.com/training/summerschool.php diff --git a/content/articles/2013/07/how-cloud-first-design-affects-you/index.md b/content/articles/2013/07/how-cloud-first-design-affects-you/index.md new file mode 100644 index 000000000..a8d4ae6ad --- /dev/null +++ b/content/articles/2013/07/how-cloud-first-design-affects-you/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2013-07-03-how-cloud-first-design-affects-you/ +title: How Cloud-First Design Affects You +authors: + - Don Jones +date: "2013-07-03T17:29:36+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/07/how-cloud-first-design-affects-you/ +--- + +Today, Brad Anderson (Corporate VP in the Windows Server/System Center unit) posted [the first in what should be a series of "What's New in 2012 R2" articles][1]. In it, Anderson focuses on how Microsoft squeezed so many features into the 2012R2 release in such a short period of time. The short answer, which has been stated by Jeffrey Snover before, is "we build for the cloud first." That means features we're getting in 2012R2 have, for the most part, already been developed, deployed, and in use in some of Microsoft's own cloud services. This is a huge deal. It means their cloud services (think Azure, O365, and the like) get stuff first, where _Microsoft_ can make sure it's stable. They then package those and hand them off to us. +It means we get better stability, but it also means we get better manageability. Look, you don't get excited when you have to deploy a new server, right? You want to automate that stuff. Well, Azure gets _really_ ticked off if they can't automate it, because they do it _thousands times more than you._ So forcing themselves to run a ginormous datacenter also forces the company to make better management tools - which they then hand down to us in an OS release. +If, that is, you're managing your datacenter as if it was your own little... dare I say it, _private cloud._ In other words, if you think of your datacenter as a wee little cloud, and you manage it like one, then you'll get the tech you need, because Microsoft has to develop that tech for themselves. If you want to keep managing it the old-fashioned way... well, you'll get less love. +This whole approach, for me, is the ultimate expression of the Microsoft phrase, "eat the dogfood." Meaning, _use our own products just as our customers would._ You just have to make sure you're eating the same flavor dogfood. Not that MS expects everyone to have their own in-house Azure. No, that's not the point. The point is that they're developing for a world where admins do nothing but create units of automation, and business processes (perhaps outside IT) initiate those processes. You're going to see more and more tools and technologies (um, PowerShell) to facilitate that model of IT operations; you'll see less and less tech that facilitates the old way (meaning, fewer and less robust GUI tools, I'm guessing). +Desired State Configuration (DSC) is probably an ideal example of this new approach. In the past, when you wanted to configure a few hundred machines to look and behave a certain way, you went clicky-click a few hundred times in a GUI. That's _imperative_ configuration; you tell each machine _what to do._ That doesn't scale to cloud-sized proportions, and so now we're getting DSC. DSC is _declarative_ configuration, meaning you tell a group of machines _what to be._ The OS itself figures out how to achieve that state of being. So admins have to shift from thinking "what do I make the machine do" and "how do I tell it what to be." It's not unlike Group Policy, actually, which is also declarative, except that DSC will eventually dwarf Group Policy in terms of reach and capability. +Point being, if you're in the old world of, "I just run through the Wizard and set the machine up," you're not aligned with the new world order. Expect fewer wizards, as product teams shift their investment to building things like DSC resources instead. With 12-18 month product cycles, time is in short supply for each new release. One-at-a-time approaches don't scale to the cloud, so those are likely to get less of that limited amount of time. +Anderson's post is worth a read. It's a little high-level - the man _is_ a Corporate VP, after all - but it shows where Microsoft is pointing their collective brain. It uses the word "delight." It describes in great detail how Microsoft is trying harder to put the customer in the front of every conversation - but, more subtly, it also shows how Microsoft is moving the conversation past "what do customers tell us they want" and more toward "here's what we see customers _needing._" Henry Ford would be proud. + + [1]: http://blogs.technet.com/b/in_the_cloud/archive/2013/07/03/what-s-new-in-2012-r2-beginning-and-ending-with-customer-specific-scenarios.aspx diff --git a/content/articles/2013/07/its-safe-to-run-update-help-and-you-should/index.md b/content/articles/2013/07/its-safe-to-run-update-help-and-you-should/index.md new file mode 100644 index 000000000..f2730e8f5 --- /dev/null +++ b/content/articles/2013/07/its-safe-to-run-update-help-and-you-should/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-07-02-its-safe-to-run-update-help-and-you-should/ +title: "It's Safe to Run Update-Help – and you should!" +authors: + - Don Jones +date: "2013-07-02T17:23:30+00:00" +categories: + - Announcements +aliases: + - /2013/07/its-safe-to-run-update-help-and-you-should/ +--- + +I'm informed that sometime today Microsoft will be posting fixed core cmdlet help files for your downloading pleasure - so it's safe to run Update-Help again, and you should definitely do so. There are likely a lot of fixes and improvements to the help text, and you won't be "losing" the parameter value type information from the SYNTAX section. +Maybe schedule an Update-Help for tomorrow morning? +BTW - kudos to the team at Microsoft for getting this issue fixed so quickly. It's a shame this one snuck past them, but once notified of the problem they really did jump on it. The fact that the problem was (from the public perspective) just with the downloadable help files means it's an easy fix that doesn't involve pushing code out through Windows Update (thank goodness). diff --git a/content/articles/2013/07/new-blog-posting-on-desired-state-configuration/index.md b/content/articles/2013/07/new-blog-posting-on-desired-state-configuration/index.md new file mode 100644 index 000000000..814e0a314 --- /dev/null +++ b/content/articles/2013/07/new-blog-posting-on-desired-state-configuration/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2013-07-09-new-blog-posting-on-desired-state-configuration/ +title: New Blog Posting on Desired State Configuration +authors: + - Darren Mar-Elia +date: "2013-07-09T14:29:29+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/07/new-blog-posting-on-desired-state-configuration/ +--- + +Just an FYI that I posted a walkthrough on my blog, of DSC, including my experiences as it relates to Group Policy: +http://bit.ly/1868BYS diff --git a/content/articles/2013/07/phillyposh-07112013-meeting-summary-and-presentation-materials/index.md b/content/articles/2013/07/phillyposh-07112013-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..afaaee64c --- /dev/null +++ b/content/articles/2013/07/phillyposh-07112013-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,48 @@ +--- +url: /articles/2013-07-15-phillyposh-07112013-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 07/11/2013 meeting summary and presentation materials +authors: + - John Mello +date: "2013-07-16T02:00:04+00:00" +aliases: + - /2013/07/phillyposh-07112013-meeting-summary-and-presentation-materials/ +--- + +1. Active Directory SDK team member and former Senior Programing writer for the Windows PowerShell team, [Jun Blender][1] gave a presentation on The Hidden Charms of Windows PowerShell 3.0 via Lync. You can get a copy of [her presentation here][2] and see a [recording of the Lync meeting][3] on our [YouTube channel][4] + 2. Microsoft Technology Evangelist [Yung Chou][5] gave demonstration on how to use the [PowerShell Azure cmdlets][6] to automate data center deployments + 1. You can try doing the same and test server 2012 R2 out with a free [1-month trial of Windows Azure][7] + 3. General Announcements + 1. [The Microsoft Virtual Academy][8] is hosting 2 separate day long PowerShell learning sessions that will be taught by the lead Architect of PowerShell [Jeffery Snover][9] and [PowerShell.org][10] board member [Jason Helmick.][11] Link to the sessions are as follows: + 1. [Getting Started with PowerShell 3.0 : 7/18/2013 9AM-5PM PDT][12] + 2. [Advanced Tools & Scripting with PowerShell 3.0: 8/1/2013 9AM-5PM PDT][13] + 2. The [PowerScript Podcast][14] is looking for show ideas + 3. In the wake of the 2013 scripting games there are many entries in the ["Great Debates"][15] series, in which the + community discusses the differing techniques that the community used during the games + 1. Speaking of the scripting games, the winners were on the [PowerScritping Podcast][16] this week + 2. [Mike Robbins][17], the winner of the advanced category, will be presenting for us in September! + 1. Mike also runs the virtual [Mississippi PowerShell User Group][18] and makes his meetings available to everyone. + 4. Last month"™s speaker, [Rohn Edwards][19], has recently [blogged][20] about how to use some of the functions included in his [PowerShellAccessControl Module][21] + 5. Check out [Chocolatey][22] which is a Machine Package Manager, somewhat like apt-get, but built with Windows and PowerShell in mind. + + [1]: https://twitter.com/juneb_get_help + [2]: https://powershell.org/wp-content/uploads/2013/07/PhillyPosh_2013-07-11_June_Blender.pptx + [3]: https://www.youtube.com/watch?v=rY-kkuTwWUs + [4]: https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg + [5]: http://blogs.technet.com/b/yungchou/ + [6]: http://msdn.microsoft.com/en-us/library/windowsazure/jj152841.aspx + [7]: http://aka.ms/200 + [8]: http://www.microsoftvirtualacademy.com + [9]: https://powershell.org/wp-admin/@jsnover + [10]: https://powershell.org/wp-admin/PowerShell.org + [11]: https://powershell.org/wp-admin/@theJasonHelmick + [12]: http://www.microsoftvirtualacademy.com/liveevents/PowerShell-JumpStart + [13]: http://www.microsoftvirtualacademy.com/liveevents/Adv-PowerShell-Jump-Start + [14]: http://powerscripting.wordpress.com/2013/07/08/we-want-your-powershell-show-ideas/ + [15]: https://powershell.org/category/great-debates/ + [16]: http://powerscripting.wordpress.com/2013/07/10/up-next-winners-from-the-2013-scripting-games/ + [17]: http://mikefrobbins.com/ + [18]: http://mspsug.com/ + [19]: http://rohnspowershellblog.wordpress.com/ + [20]: http://rohnspowershellblog.wordpress.com/tag/powershellaccesscontrol/ + [21]: http://gallery.technet.microsoft.com/scriptcenter/PowerShellAccessControl-d3be7b83 + [22]: http://chocolatey.org/ diff --git a/content/articles/2013/07/powershell-great-debate-backticks/index.md b/content/articles/2013/07/powershell-great-debate-backticks/index.md new file mode 100644 index 000000000..d594b6591 --- /dev/null +++ b/content/articles/2013/07/powershell-great-debate-backticks/index.md @@ -0,0 +1,52 @@ +--- +url: /articles/2013-07-10-powershell-great-debate-backticks/ +title: "PowerShell Great Debate: Backticks" +authors: + - Don Jones +date: "2013-07-10T21:26:50+00:00" +aliases: + - /2013/07/powershell-great-debate-backticks/ +--- + +Here's an age-old debate that we can finally, perhaps, put an end to: The backtick character for line continuation. +The basic concept looks like this: + + +`Get-WmiObject -Class Win32_BIOS ` + -ComputerName whatever ` + -Filter "something='else'" +`This trick relies on the fact that the backtick (grave accent) is PowerShell's escape character. In this case, it's escaping the carriage return, turning it from a logical end-of-line marker into a literal carriage return. It makes commands with a lot of parameters easier to read, since you can line up the parameters as I've done. +My personal beefs with this: + + * +The character is visually hard to distinguish. On-screen, it's just a couple of pixels; in a book, it looks like stray ink or toner. + + * If you put any whitespace after the backtick, it escapes _that_ character instead of the carriage return, and everything breaks. + * On some non-US keyboards, it's a difficult character to get to. + +In  many cases, you can achieve nice formatting without the back tick. + + +`Do-Something -Parameter this | + Get-Something -Parameter those -Parm these | + Something-Else -This that -Foo bar +`This is because a carriage return after a pipe, semicolon, or comma is always interpreted as a visual thing, and not as a logical end of line. Of course, some argue that you can make that command prettier by using the back tick: + + +`Do-Something -Param this ` +| Something-Else -this that -foo bar ` +| Invoke-Those -these those +`Here, the pipes line up on the front, making the command into a kind of visual block - but you have to rely on the backticks. You could then argue that a combination of splatting and careful formatting could be nicer, without the backticks: + + +`$do_something = @{parameter = $this; + foo = $bar} +$invoke_something = @{param = $these; + param = $those} +Do-Something @do_something | +Invoke-Something @invoke_something | +Something-Else +`Visually blocked-out, but no back ticks. +And the debate rages on. Your thoughts? Pros? Cons? _Why?_ + +[boilerplate greatdebate] diff --git a/content/articles/2013/07/powershell-great-debate-credentials/index.md b/content/articles/2013/07/powershell-great-debate-credentials/index.md new file mode 100644 index 000000000..3c1906a18 --- /dev/null +++ b/content/articles/2013/07/powershell-great-debate-credentials/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-07-23-powershell-great-debate-credentials/ +title: "PowerShell Great Debate: Credentials" +authors: + - Don Jones +date: "2013-07-23T17:47:45+00:00" +aliases: + - /2013/07/powershell-great-debate-credentials/ +--- + +Credentials suck. +You obviously don't want to hardcode domain credentials into a script - and PowerShell actually makes it a bit difficult to do so, for good reason. On the other hand, you sometimes _need_ a script to do something using alternate credentials, and you don't necessarily want the runner of the script to know those credentials. +So how do you deal with it? +Let's be clear: This is _not_ a wish list. Comments like, "I wish PowerShell could do ____" aren't valid. What _do you do using the technology as it exists today_? Do you prompt for a credential and assume the script user will have it? Do you try to hardcode it? Do you set up a constrained endpoint? What? +[boilerplate greatdebate] diff --git a/content/articles/2013/07/powershell-great-debate-formatting-constructs/index.md b/content/articles/2013/07/powershell-great-debate-formatting-constructs/index.md new file mode 100644 index 000000000..0650af451 --- /dev/null +++ b/content/articles/2013/07/powershell-great-debate-formatting-constructs/index.md @@ -0,0 +1,33 @@ +--- +url: /articles/2013-07-02-powershell-great-debate-formatting-constructs/ +title: "PowerShell Great Debate: Formatting Constructs" +authors: + - Don Jones +date: "2013-07-02T15:23:43+00:00" +aliases: + - /2013/07/powershell-great-debate-formatting-constructs/ +--- + +Here's an easy, low-stakes debate: How do you like to format your scripting constructs? And, more importantly, _why_ do you like your method? +For example, I tend to do this: + + +`If ($this -eq $that) { + # do this +} else { + # do this +} +`I do so out of long habit with C-like syntax, and because when I'm teaching this helps me keep more information on the screen. However, some folks prefer this: + + +`if ($this -eq $that) +{ + # do this +} +else +{ + # do this +} +`Because of my own long habits, I find that hard to read, but it does make it easier to see if your squigglies are lining up properly. It takes up a ton of room, though, and I personally don't follow this as easily as the previous example. +But what's your preference? _Why? _ +[boilerplate greatdebate] diff --git a/content/articles/2013/07/powershell-great-debate-piping-in-a-script/index.md b/content/articles/2013/07/powershell-great-debate-piping-in-a-script/index.md new file mode 100644 index 000000000..3ec225877 --- /dev/null +++ b/content/articles/2013/07/powershell-great-debate-piping-in-a-script/index.md @@ -0,0 +1,39 @@ +--- +url: /articles/2013-07-16-powershell-great-debate-piping-in-a-script/ +title: "PowerShell Great Debate: Piping in a Script" +authors: + - Don Jones +date: "2013-07-16T17:40:09+00:00" +aliases: + - /2013/07/powershell-great-debate-piping-in-a-script/ +--- + +Take a look at this: + + +`# version 1 +Get-Content computers.txt | +ForEach-Object { + $os = Get-WmiObject Win32_OperatingSystem -comp $_ + $bios = Get-WmiObject Win32_BIOS -comp $_ + $props = @{computername=$_; + osversion=$os.version; + biosserial=$bios.serialnumber} + New-Object PSObject -Prop $props +} +# version 2 +$computers = Get-Content computers.txt +foreach ($computer in $computers) { + $os = Get-WmiObject Win32_OperatingSystem -comp $computer + $bios = Get-WmiObject Win32_BIOS -comp $computer + $props = @{computername=$computer; + osversion=$os.version; + biosserial=$bios.serialnumber} + New-Object PSObject -Prop $props +} +`These two snippets do the same thing. The first uses a more "pipeline" style approach, and I've personally never felt the urge to do that in a script. Probably habit - I come from the VBScript world, so a construct like foreach($x in $y) is natural for me. I've seen folks get into that "pipeline" approach inside a script and get into trouble, and if I'm scripting I often prefer to use the more formal, structured approach of the version 2 snippet. +What're your thoughts? For me, version 1 has some downsides - forcing yourself into that pipeline structure can be limiting, and I find the approach in version 2 to be more readable and a bit easier to follow. Frankly, I'm never a fan of having to mentally track what's in $_. +(Which brings up a sidebar: I tend to evaluate a script's goodness based on how well I can understand what it does _without running it_. That's a common criteria, in fact, and one I personally think helps aid in debugging as well as maintaining scripts.)_ +_ +Anyway... discuss! +[boilerplate greatdebate] diff --git a/content/articles/2013/07/powershell-great-debate-the-purity-laws/index.md b/content/articles/2013/07/powershell-great-debate-the-purity-laws/index.md new file mode 100644 index 000000000..52319878d --- /dev/null +++ b/content/articles/2013/07/powershell-great-debate-the-purity-laws/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2013-07-30-powershell-great-debate-the-purity-laws/ +title: "PowerShell Great Debate: The Purity Laws" +authors: + - Don Jones +date: "2013-07-30T17:50:21+00:00" +aliases: + - /2013/07/powershell-great-debate-the-purity-laws/ +--- + +This should be interesting. +During The Scripting Games, I observed (and in some cases made) a great many comments that I'm lumping under the name "Purity Laws." + + * +You shouldn't use a command-line utility like Robocopy in a PowerShell script. + + * You shouldn't use .NET classes in a PowerShell script. + * You should map a drive using New-PSDrive, not **net use**. + +And so on. You see where I'm going: there are folks out there who feel as if the only thing that goes into a PowerShell script is Pure PowerShell. Which is odd, because it isn't an approach the product team actually gave much value. They spent _extra time_ making sure the shell could use .NET, and could run external utilities - why not use them, if they work and get the job done? +A counterargument involves maintenance and readability. External commands, for example, are harder to read, may not be well-documented, and don't work consistently with the rest of PowerShell. .NET classes are hard to discover, and force you into a very "programmer-y" approach. Some environments might not want the extra overhead - even if it means giving up functionality. +So where do you come down on this debate? I'd really love some _detailed recommendations. _What's right for _your_ environment, and most importantly _why? _Are there any facts or situations that would sway you to the other side of the argument? +Go. +[boilerplate greatdebate] diff --git a/content/articles/2013/07/powershell-summit-city-selection-criteria/index.md b/content/articles/2013/07/powershell-summit-city-selection-criteria/index.md new file mode 100644 index 000000000..a88426956 --- /dev/null +++ b/content/articles/2013/07/powershell-summit-city-selection-criteria/index.md @@ -0,0 +1,38 @@ +--- +url: /articles/2013-07-16-powershell-summit-city-selection-criteria/ +title: PowerShell Summit City Selection Criteria +authors: + - Don Jones +date: "2013-07-16T17:40:13+00:00" +categories: + - PowerShell Summit +aliases: + - /2013/07/powershell-summit-city-selection-criteria/ +--- + +As you may know, we're in the process of putting together a PowerShell Summit Europe for Fall 2014. It's a big task, with a lot of financial risks, so we try to get it right. Folks have been helpful on Twitter in offering city selection ideas... but there's a bit more involved than just tossing out a city name. With that, here is the selection criteria! +Given the information below... AND the fact that Germany/UK/Netherlands (in that order) have been getting the overwhelming majority of "in what cities would you attend the Summit" votes... what cities would YOU recommend we consider? +(BTW, this is TOTALLY a chance to "sell" your suggestion - so do so! The criteria below are what's really important to us, so help us understand how a given city helps meet all of that criteria! And, if you're willing to help be our local 'person on the scene' to help organize, mention that also!) +\--- +City Selection Criteria for PowerShell Summits +This guide is intended to provide a framework for selecting an appropriate city and venue for a PowerShell Summit. +Understand that a PowerShell Summit is meant to be a continent-level event, meaning the attendance of international speakers and attendees is a given. A PowerShell Summit is conducted primarily, if not entirely, in English, that being the "de facto" language of the technology industry, and the most-common language spoken by expert presenters in the field. A PowerShell Summit is open to everyone, and is not intended to fill the need for regional, culture- or language-specific events of any size. PowerShell.org recognizes the need for, and value of, those more-regional events, but the PowerShell Summit does not seek to full that need or provide that exact same value. +Throughout this guide, note that "venue" does not refer to a city. While in casual discussions we may refer to a city name or metropolitan area name - like London or Munich - our venue may not in fact be within the legal limits of such a city or area. "Venue" refers to a specific facility, which may be a hotel or a conference center or other specific location. +Our expectation is that most attendees will arrive at the event via common carrier - typically, train or airplane. Some may drive, but our focus is on providing good access for those who do not have their own personal transportation during the event. +Criterion 1: Airport Access +The first criterion is easy access to a major international airport. This is intended to accommodate the wide variety of attendees expected. In general, the venue should be either within a 15-20 minute drive from an airport by private car (including taxis and shuttle busses), or within a 30-minute ride via mass transit rail (specifically excluding public bus service, but including all levels of rail access). +Exception: The airport service area may be widened in instances where a venue offers significant other advantages in other criteria, or where the venue offers specialized access to expert presenters - e.g., using Bellevue for its convenient access to the PowerShell team, despite the fact that it is a ~30 minute ride by private car from SEA-TAC airport and lacks public rail access to the airport. +Criterion 2: Local Transit +The venue must be well-connected to the local area by mass transit rail (tram, train, metro, etc.). Alternately, the area must offer a variety of amenities within walking distance. Our goal is to minimize the need for rental cars to travel to the event venue from local hotels, restaurants, and other amenities. A 15-minute walking radius is a good "maximum" guideline. Due to this criterion, local parking fees are explicitly not considered during venue selection, although the organization recognizes than some local attendees may be impacted by parking fees. +Criterion 3: Evening Amenities +The selected venue must be accessible (via local rail transit or short walks) to evening amenities, including hotels, restaurants, and so forth. While the PowerShell Summit will often include evening events, attendees must have independent access to these kinds of amenities. +Criterion 4: Price, Quantity, and Quality of Lodging +The selected venue must be accessible (via local rail transit or short walks) to hotels of at least 3-star quality (as listed on travel Web sites such as Expedia or Orbitz), with as reasonable a price as possible given the choices of venues under consideration. When possible, the organization will reserve a room block for at least 1/3 of the expected attendance number (with the understanding that room blocks carry significant financial risk, and the organization has a primary goal of mitigating such risk). Additional hotel capacity meeting this criterion must be available, but may not necessarily be reserved, for the event. +Criterion 5: Language +The selected venue must be in an area where English is commonly spoken, at least by hospitality workers. English need not be the dominant language in the area, but as it is the "common language" of PowerShell, English must at least be commonly understood as a "lingua franca" in order for a maximum number of attendees to be able to navigate the area. Venues that do not meet this criterion may still be viable locations for a regional, cultural-specific event, but might not be qualified for a PowerShell Summit. +Criterion 6: Centrality +Given all of the other criteria previously listed, it is desirable to have a venue that provides equitable travel access from the majority of the target area. However, the organization recognizes that central location is often the most difficult to achieve in combination with the other criteria listed. +Criterion 7: Accessibility +The venue must conform with a general international standard of access for disabled persons, and must provide at least basic ability to meet common dietary restrictions, such as vegetarianism. The organization accepts that extremely specific dietary needs, such as cultural or religious needs or allergy concerns, might incur extra costs that would be passed along to the concerned attendee(s). +Criterion 8: Appropriateness +The venue must provide appropriate meeting facilities. This means the venue must be able to accommodate the expected number of attendees in a comfortable and safe surrounding, and attendees must be able to access the venue without undue overhead (e.g., extensive security checks in an office building, etc.). In multi-track events, meeting rooms should be able to accommodate a 15-20% offset (e.g., in a 300-person event with 300 attendees, each room must be able to handle 120 attendees, to deal with the fact that some sessions will be more popular than others). diff --git a/content/articles/2013/07/powershell-summit-europe/index.md b/content/articles/2013/07/powershell-summit-europe/index.md new file mode 100644 index 000000000..8496cdda3 --- /dev/null +++ b/content/articles/2013/07/powershell-summit-europe/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-07-11-powershell-summit-europe/ +title: PowerShell Summit… EUROPE?!?!? +authors: + - Don Jones +date: "2013-07-11T18:47:05+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2013/07/powershell-summit-europe/ +--- + +I have received a lot of interest in a PowerShell Summit Europe, and we are starting to look at doing one in 2014. I know that's a long way off, but it takes time to put these together when everyone's volunteering that time! +I have put together a very short survey to see if there is any consensus on where such an event might be held. The survey is [online now and ready for your opinions][1]. Please forward this to your colleagues and co-workers, as well - we would really like a variety of opinions. If you want to tweet about it, Facebook it, or anything else to help us get a broad perspective, it would be much appreciated. +I must note that this event will be in English, as it is meant to be a pan-European event that involves as many different folks as possible. We are not attempting to hold a more regional, culture-specific event - some of those already exist (I'm aware of one in Germany, for example), and they do a better job serving their local market (which can be quite large) than we could ever do. We are trying to fill a different need, which is more along the lines of a very miniature TechEd Europe, which brings as many different folks together as possible. Hopefully we will achieve that goal. +Thank you for your time and input! + + [1]: http://67004.polldaddy.com/s/powershell-summit-europe diff --git a/content/articles/2013/07/seeking-editor-for-powershell-org-techletter/index.md b/content/articles/2013/07/seeking-editor-for-powershell-org-techletter/index.md new file mode 100644 index 000000000..f354cb4be --- /dev/null +++ b/content/articles/2013/07/seeking-editor-for-powershell-org-techletter/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2013-07-01-seeking-editor-for-powershell-org-techletter/ +title: Seeking Editor for PowerShell.org TechLetter +authors: + - Don Jones +date: "2013-07-01T18:30:37+00:00" +categories: + - Announcements +aliases: + - /2013/07/seeking-editor-for-powershell-org-techletter/ +--- + +The PowerShell.org TechLetter goes out once a month, and we're looking for an editor to take over the task of building each monthly issue. +You'll need some basic HTML knowledge, and ideally will have a decent HTML editor. Not FrontPage. You'll be given articles in both HTML and Word format, and will need to insert those into a master HTML document and (especially in the case of Word), fix the formatting. You'll have plenty of examples from past issues to work with. Eventually, you'll also schedule the mid-month mailing. +It all takes a few hours once you have the monthly materials in hand, and you'll usually have at least a week to do assembly and mailing. You'll be helping us deliver technical content to a growing audience of more than 3,500 IT professionals and PowerShell enthusiasts! +If you're interested, [contact me][1]. Your pay will be _double_ what I'm currently paid to do this. Which is, sadly, nothing. + + [1]: https://powershell.org/contact-us/ "Contact Us" diff --git a/content/articles/2013/07/techsessions-free-powershell-webinars/index.md b/content/articles/2013/07/techsessions-free-powershell-webinars/index.md new file mode 100644 index 000000000..9cddb325b --- /dev/null +++ b/content/articles/2013/07/techsessions-free-powershell-webinars/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-07-23-techsessions-free-powershell-webinars/ +title: "TechSessions: Free PowerShell Webinars" +authors: + - Don Jones +date: "2013-07-23T16:05:08+00:00" +categories: + - Announcements +aliases: + - /2013/07/techsessions-free-powershell-webinars/ +--- + +PowerShell.org is going to be launching TechSessions this Fall. These will be ~1 hour online webinars, which you're welcome to attend live. We'll also record them and make the recordings available. +In most cases you will need to _register_ for each one, so that we can send the appropriate invite information. Our sponsors are working with us on these, so each one might be in a different webinar platform (Lync, Webex, etc) depending on who is providing the infrastructure that month. +In all cases, we'll announce the TechSession in our TechLetter Newsletter, via banners on this site, and in a blog post. You'll notice a new "TechSessions" post category for those announcements. +I'll be soliciting presenters, and the goal is just to provide you with varied technical content around PowerShell. If you'd like to BE a presenter, hit the Contact link in the Site Info menu (above) and let me know! Attending live will obviously give you a Q&A opportunity as well. +Be on the lookout! I'm hoping to kick off in September or October. If there are specific topics you'd like to see, drop a comment below and let me know. I'm sure potential presenters would love some suggestions, and I know I would. \ No newline at end of file diff --git a/content/articles/2013/07/working-with-the-wsus-api-and-the-susdb-database-using-powershell/index.md b/content/articles/2013/07/working-with-the-wsus-api-and-the-susdb-database-using-powershell/index.md new file mode 100644 index 000000000..1a016286f --- /dev/null +++ b/content/articles/2013/07/working-with-the-wsus-api-and-the-susdb-database-using-powershell/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2013-07-11-working-with-the-wsus-api-and-the-susdb-database-using-powershell/ +title: Working with the WSUS API and the SUSDB Database using PowerShell +authors: + - Boe Prox +date: "2013-07-12T02:38:43+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/07/working-with-the-wsus-api-and-the-susdb-database-using-powershell/ +--- + +Tthe WSUS API can be used to perform a multitude of WSUS tasks from approving patches, removing clients to creating automatic approval rules to many other things. By diving deeper into the API reveals that we can also find out the name of the SQL server (if using a remote SQL database server) that the SUSDB database is residing on. Beyond that, we can actually perform queries to the database (using TSQL) or perform tasks against the database itself. +I've written a couple of articles hat focus on making the database connection via the WSUS API and preform a simple query and then following up on that by performing some database maintenance by re-indexing and updating the statistics on the database tables. +[Use the WSUS API and PowerShell to query the SUSDB Database](http://learn-powershell.net/2013/07/07/use-the-wsus-api-and-powershell-to-query-the-susdb-database/) +[Using the WSUS API and PowerShell to Perform Maintenance on the SUSDB Database](http://learn-powershell.net/2013/07/07/using-the-wsus-api-and-powershell-to-perform-maintenance-on-the-susdb-database/) diff --git a/content/articles/2013/07/would-you-contribute-enterprise-software-reviews-offtopic/index.md b/content/articles/2013/07/would-you-contribute-enterprise-software-reviews-offtopic/index.md new file mode 100644 index 000000000..7d327c6c6 --- /dev/null +++ b/content/articles/2013/07/would-you-contribute-enterprise-software-reviews-offtopic/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-07-09-would-you-contribute-enterprise-software-reviews-offtopic/ +title: "Would you contribute enterprise software reviews? [OFFTOPIC]" +authors: + - Don Jones +date: "2013-07-09T18:03:55+00:00" +categories: + - News +aliases: + - /2013/07/would-you-contribute-enterprise-software-reviews-offtopic/ +--- + +I've been working with a couple of folks lately who've been trying to review and pilot Active Directory auditing solutions. Both bemoaned the fact that, unlike consumer products of nearly any kind, IT products (specifically, enterprise software in this instance), don't really get reviews from the admins who use those products. +So, I'm curious. If you could (a) anonymously, and (b) without giving your organization's name, would you (c) leave reviews of enterprise software for other admins? You'd need to leave some obvious details, like the approximate size of your organization (number of users), what you expected the software to do, what it really did, what you liked, what you didn't like, and so on. +Such a site would be a lot better (I think) than magazine or "professional" reviews, since you'd be reading the experiences of people who actually use the stuff every day. Yeah, as with any publicly-contributed content, review quality will vary - but you already know how to read between the lines, right? 😉 +Drop a comment, or even send a tweet to [@concentrateddon][1] with "Reviews: YES!" or "Reviews: NO!" comment. Or if you prefer Facebook, leave that comment [on my FB page][2]. It sure seems like we IT professionals could use something like this - it'd be a good place to start researching solutions to particular problems, and a good place to share some real-world intel on how different solutions really work. Even if you don't like _writing_ reviews, would you use such a site as part of your research process? + + [1]: http://twitter.com/concentrateddon + [2]: http://facebook.com/concentrateddon diff --git a/content/articles/2013/08/_index.md b/content/articles/2013/08/_index.md new file mode 100644 index 000000000..4f6c022f0 --- /dev/null +++ b/content/articles/2013/08/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from August 2013" +description: "PowerShell.org Articles published in August 2013." +--- diff --git a/content/articles/2013/08/a-quick-powershell-pshsummit-update-europe-na/index.md b/content/articles/2013/08/a-quick-powershell-pshsummit-update-europe-na/index.md new file mode 100644 index 000000000..8509d7616 --- /dev/null +++ b/content/articles/2013/08/a-quick-powershell-pshsummit-update-europe-na/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2013-08-08-a-quick-powershell-pshsummit-update-europe-na/ +title: "A Quick #PowerShell #PSHSummit Update (Europe & NA)" +authors: + - Don Jones +date: "2013-08-08T20:44:11+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2013/08/a-quick-powershell-pshsummit-update-europe-na/ +--- + +**PowerShell Summit North America 2014**, April 28-30 (special precon on April 27) is open for registration to our 2013 alumni, shareholders, and to TechLetter subscribers. The alumni block will be released on August 15, and the subscriber block on September 15th; shortly after, sales will be open to the public. If you're a shareholder, alumni, or subscriber, and you didn't get your registration in e-mail, drop me a line (use the Contact link in the Site Info menu). Please only contact me if you're anxious to register right now, so I don't get swamped. +North America will be in Bellevue, WA, adjacent to Microsoft offices up there; we will +investigate + a move East for the 2015 show, just to perhaps spread the love a bit. We know SEA isn't the cheapest travel destination. +North America's **call for topics** should start fairly soon, and that information will be posted here, along with information on how to submit prospective sessions. I won't be taking the lead on that process, but some of my fellow Board members will be, so watch for their posts. +**PowerShell Summit Europe 2014** is being tentatively scheduled for September or October 2014. Our city shortlist includes Munich, Milan, and Amsterdam; we're too far out at this point to make inquiries with prospective venues (they usually work only 8-12 months out), but we've assembled a list to contact over the next couple of months. Venue pricing and availability (and suitability) will be a significant set of factors in the final city selection, and we'll post details right here. +You'll notice a "PowerShell Summit" post category here on PowerShell.org; that's your one and official source for news and info, with our Summit Page being your one and official source for more static information on both events. You can follow [@PSHSummit][1] on Twitter, which will be a good way to receive notifications of new posts here, but which will not contain any information not available on this site. We also try to hashtag #PSHSummit on Twitter, if you'd like to watch out for that. + + [1]: http://twitter.com/pshsummit diff --git a/content/articles/2013/08/coming-soon-55039-powershell-scripting-and-toolmaking-course/index.md b/content/articles/2013/08/coming-soon-55039-powershell-scripting-and-toolmaking-course/index.md new file mode 100644 index 000000000..52a346da3 --- /dev/null +++ b/content/articles/2013/08/coming-soon-55039-powershell-scripting-and-toolmaking-course/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2013-08-12-coming-soon-55039-powershell-scripting-and-toolmaking-course/ +title: "Coming Soon: 55039 \"PowerShell Scripting and Toolmaking\" Course" +authors: + - Don Jones +date: "2013-08-12T15:23:53+00:00" +categories: + - Training +aliases: + - /2013/08/coming-soon-55039-powershell-scripting-and-toolmaking-course/ +--- + +Later this month, Jason Helmick will be offering a revised "PowerShell Scripting and Toolmaking" course at [Interface Technical Training][1] in Phoenix. This new course carries the Microsoft Courseware Marketplace number 55039 - that's right, this is an official, unofficial course that will be available to all Microsoft training partners! +(Courseware Marketplace offerings are not written or endorsed by Microsoft, but they are equivalent to Official Curriculum in many ways, including being eligible for Software Assurance voucher programs. Marketplace offerings supplement Official offerings by providing courses that Microsoft doesn't have the time or resources to generate themselves.) +This course is based _directly_ on _Learn PowerShell Toolmaking in a Month of Lunches_, and incorporates much of that book's actual text (in fact, a portion of the course's sale price goes to the book publisher, with a portion of _that_ going to the book authors as royalties). That's combined with a full slide deck, some awesome brand-new labs, lab answer key, "starting points" (for lab students who fall behind), and a complete inventory of demo scripts for the instructor to use. It walks through a quick PowerShell review, and moves all the way through creating modules, advanced functions, custom views, and much more. It's a pretty handy course, and even dives into creating "controller" scripts, such as scripts that automate processes or generate HTML reports. We provide a complete 3-VM build guide, and a simple ISO image containing all of the instructor and student files. Students are even welcome to download that ISO themselves for later reference! That URL will be provided in the student manual. +I'm especially proud of the labs, and thankful to Mike Robbins and Jason Helmick for debugging them for me. Through the main part of the course, students have _three_ lab tracks (A, B, and C) to choose from - and overachievers can work on more than one track. Through each module, the labs gradually build from a basic command to a complete, fleshed-out "script cmdlet" packaged in a module, with a custom view and more. It's extremely realistic, and it means much of the classroom time is spent on hands-on labs, where students will get the most value for their money. +This course is designed to complement Microsoft's official 10961 course, which covers substantially the same material as _Learn Windows PowerShell in a Month of Lunches_, meaning 55039 is kind of a "sequel" course. Training centers are welcome to offer a 5-day accelerated class that combines both courses; that's pretty much the class I teach myself. I don't personally categorize 55039 as "advanced;" rather, it's more of a specific application of PowerShell - building reusable tools. I do offer an [advanced course of my own][2], and there's a chance for that to become a packaged course in the future. +After the beta is complete, the course will be orderable in the Marketplace with a suggested price of $150 per student. It's a full 5-day course, with _multiple_ lab tracks per module, so I felt that was a pretty fair price, especially since students basically get the _Toolmaking_ book "included" in their manual! +If any other trainers would like to know more about the course, they're welcome to [contact me][3]. We will be selling it directly as well, for trainers who can't access the Marketplace. +Download the table of contents: [55039-TOC][4] + + [1]: http://interfacett.com + [2]: http://itpro.concentratedtech.com/training + [3]: http://concentratedtech.com/contact + [4]: https://powershell.org/wp-content/uploads/2013/08/55039-TOC.pdf diff --git a/content/articles/2013/08/is-this-list-everything-in-powershell/index.md b/content/articles/2013/08/is-this-list-everything-in-powershell/index.md new file mode 100644 index 000000000..ad657f1e7 --- /dev/null +++ b/content/articles/2013/08/is-this-list-everything-in-powershell/index.md @@ -0,0 +1,148 @@ +--- +url: /articles/2013-08-06-is-this-list-everything-in-powershell/ +title: "Is this list \"Everything\" in PowerShell?" +authors: + - Don Jones +date: "2013-08-06T20:11:04+00:00" +categories: + - Training +aliases: + - /2013/08/is-this-list-everything-in-powershell/ +--- + +Soooo.... it's time for me to start looking at updating my various training materials (books, videos, courses, whatnot) for v4. +I'm going to, with at least some of these, take an all-versions approach. I'll teach what's in v2, then cover what v3 added, then cover v4, etc. It'll be easier to maintain over the upcoming years. +For right now, I'm trying to assemble an organized topic list of "everything" the shell does. Now, I need to wrap that in an important caveat: I'm aiming at _admins_. Not developers. I'm not saying devs aren't a great audience, but for this project I need to constrain my scope to just the admin audience. I'm also focused mainly on what the shell does _natively, _with only a few diversions into external or underlying technologies. Those are fixed caveats for this project - no exceptions. +Right now I"m kind of chunking the list into what I feel can be taught (by me) in 20-30 minutes, or a book chapter, or something like that. This isn't necessarily how the material will be presented - this is just me organizing my thoughts so as to not miss important stuff. +So, given the list below, what do you feel is missing? +(Numbers are major topics; letters are basically my mental notes about what the topic might include that I might otherwise forget; like I said, this isn't meant to be a real book outline - it's just a topic list) +PowerShell Core +1. Series Introduction and Lab Setup +2. Windows PowerShell Introduction and Requirements +3. Finding and Discovering Commands +a. Importing modules and snapins +4. Interpreting Command Help +5. Running Commands +6. Running External Commands: Tips and Tricks +a. $Lastexitcode +7. Working with PSProviders and PSDrives +8. Variables, Strings, Hashtables, and Core Operators +a. Double quote tricks, subexpressions +b. Here-strings +c. Escapes +d. Variable types +e. Arrays +f. Math operators +9. Regular Expression Basics +a. Basic regex language +b. "“Match +c. Select-String +10. Learning the Pipeline: Exporting and Converting Data +11. Understanding Objects in PowerShell +12. Core Commands: Selecting, Sorting, Meauring, and More +13. How the PowerShell Pipeline Works +14. Formatting Command Output +15. Comparison Operators and Filtering +16. Advanced Operators +17. Setting Default Values for Command Parameters +18. Enumerating Objects in the Pipeline +a. Working with object methods +19. Advanced Date and String Manipulation +20. Soup to Nuts: Completing a New Task +PowerShell Remoting +21. PowerShell Remoting Basics +22. Persistent Remoting: PSSessions +23. Implicit Remoting: Using Commands on Another Computer +24. Advanced Remoting: Passing Data and Working with Output +25. Advanced Remoting: Crossing Domain Boundaries +26. Advanced Remoting: Custom Session Configurations +27. Web Remoting: PowerShell Web Access +WMI and CIM +28. WMI and CIM: WMI, Docs, and the Repository +29. WMI and CIM: Using WMI to Commands Query Data +30. WMI and CIM: Using CIM Commands to Query Data +31. WMI and CIM: Filtering and WMI Query Language +32. WMI and CIM: Associations +33. WMI and CIM: Working with CIM Sessions +34. WMI and CIM: Executing Instance Methods +Jobs +35. Background Job Basics: Local, WMI, and Remoting Jobs +36. Scheduled Background Jobs +Scripting in PowerShell +37. PowerShell Script Security +38. Prompting for Input, Producing Output +39. Creating Basic Parameterized Scripts +40. PowerShell Scripting: Logical Constructs +41. PowerShell Scripting: Looping Constructs +a. Break and Continue +42. PowerShell Scripting: Basic Functions, Filters, and Pipeline Functions +43. PowerShell Scripting: Best Practices +a. Line breaking +b. Splatting +c. Formatting +d. Source Control +e. Etc. +44. PowerShell Scripting: From Command to Script to Function to Module +45. PowerShell Scripting: Scope +46. PowerShell Scripting: Combining Data from Multiple Sources +a. Ordered hashtables +Advanced Functions ("Script Cmdlets") +47. Advanced Functions: Adding Help +48. Advanced Functions: Parameter Attributes +49. Advanced Functions: Pipeline Input +50. Advanced Functions: Parameter Sets +Advanced Scripting Techniques +51. Creating Private Utility Functions and Preference Variables +52. Adding Error Capturing and Handling to a Function +53. Advanced Error Handling +a. Variety of error capturing options +b. Catching multiple exceptions +c. Etc. +54. Error Handling the Old Way: Trap +55. Debugging Techniques +56. Creating Custom Formatting Views +57. Creating Custom Type Extensions +58. Working with SQL Server (and other) Databases +59. Working with XML Data Files +60. Supporting "“WhatIf and "“Confirm in Functions +61. Troubleshooting and Tracing the Pipeline +62. Using Object Hierarchies for Complex Output +63. Creating a Proxy Function +PowerShell in the Field +64. From the Field: Enhanced HTML Reporting +65. From the Field: Trend Analysis Reporting +66. From the Field: Scraping HTML Pages +PowerShell Workflow +67. Introduction to PowerShell Workflow +Desired State Configuration +68. Desired State Configuration: The Basics +69. Desired State Configuration: Configuration Scripts +70. Desired State Configuration: Writing Resources +71. Globalizing a Function or Script +72. Discovering and Using COM Objects +73. Discovering and Using .NET Classes and Instances +Writing Scripts for Other People +74. Controller Scripts: Automating Business Processes +75. Controller Scripts: A Menu of Tools +76. Creating a GUI Tool: The GUI +77. Creating a GUI Tool: The Code +78. Creating a GUI Tool: The Output +79. Creating a GUI Tool: Using Data Tables +Advanced Core Techniques, Tricks, and Tips +80. Using Type Accelerators +a. [ADSI] +b. [XML] +c. [VOID] +d. where they"™re documented +81. The Big Gotchas in PowerShell +a. (from the ebook list) +82. Fun with Profiles +a. Profiles and hosts +b. Prompt +c. Colors +d. Get a credential +83. Random Tips and Tricks +a. Redirection changing pipelines +b. $$ +c. $? +d. Dot sourcing diff --git a/content/articles/2013/08/my-powershell-workflow-series-on-technet-magazine/index.md b/content/articles/2013/08/my-powershell-workflow-series-on-technet-magazine/index.md new file mode 100644 index 000000000..fd8a91282 --- /dev/null +++ b/content/articles/2013/08/my-powershell-workflow-series-on-technet-magazine/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-08-12-my-powershell-workflow-series-on-technet-magazine/ +title: My PowerShell Workflow Series on TechNet Magazine +authors: + - Don Jones +date: "2013-08-12T13:51:33+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/08/my-powershell-workflow-series-on-technet-magazine/ +--- + +As most folks are aware, I've been writing the [_Windows PowerShell_ column][1] for Microsoft's _TechNet Magazine _for... wow, going on 7 years now. For 2013, I was doing a serialized column on PowerShell Workflow, introducing a bit of the technology at a time in each month's article. Eagle-eyed observers will note that the series has "paused," with no new articles in July or August. +First, I'm sorry for the interruption. Unfortunately, right now Microsoft is re-evaluating and re-positioning TechNet Magazine (perhaps in line with a larger re-considering of the TechNet brand, where they recently discontinued the subscription product), and for the time being the company is sticking with internally generated content for TechNet Magazine. I'm hopeful the company will come to a decision soon, and I'll try and keep you posted here. +My past columns (all 77 of them) are still online and accessible, along with hundreds of other articles stretching back almost 8 years. + + [1]: http://technet.microsoft.com/en-us/magazine/ff628337.aspx?sdmr=windowspowershell&sdmi=columns diff --git a/content/articles/2013/08/need-desired-state-configuration-modules/index.md b/content/articles/2013/08/need-desired-state-configuration-modules/index.md new file mode 100644 index 000000000..82ed2d50f --- /dev/null +++ b/content/articles/2013/08/need-desired-state-configuration-modules/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2013-08-12-need-desired-state-configuration-modules/ +title: Need Desired State Configuration Modules? +authors: + - Steven Murawski +date: "2013-08-12T23:59:59+00:00" +categories: + - Announcements + - News +aliases: + - /2013/08/need-desired-state-configuration-modules/ +--- + +You've probably been hearing about Desired State Configuration from a number of sources ([Runas Radio](http://runasradio.com/default.aspx?showNum=328), the [PowerScripting Podcast](http://powerscripting.wordpress.com/2013/07/30/episode-236-powerscripting-podcast-mvp-don-jones-on-powershell-desired-state-configuration/), or the [Channel 9 TechEd video](http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/MDC-B302#fbid=FsVi_S7Re5G) for example).  If you haven't go check out those previously mentioned resources, I'll wait... +Ok, now that you have a basic understanding of what Desired State Configuration (DSC) is, I have an announcement. + +### PowerShell.Org is building a [repository of DSC modules ](http://bit.ly/13fDxns)for the community to use and contribute to. + +As I've started working with Desired State Configuration, I began building up a repository of modules I would use in configuring my systems.  I started to round them out with some basic documentation and decent logging messages and began pushing them to GitHub. +I've also seen several others starting to post some DSC modules on Github and elsewhere.  Since we are very early in the Desired State Configuration lifecycle (it's still not RTM yet), I would like our community to come together on a central location for our community contributions.  I reached out to Don and the PowerShell.Org team and they graciously offered to host the contributions on the PowerShell.Org GitHub repository.  What that means is that this effort is no longer under the control of one person (me), but owned by the community, by PowerShell.Org. +There's not much in the repository yet, so if you've been experimenting with DSC and would like to share your efforts with the community, feel free to send a pull request (if you're into the whole GitHub thing) or file an issue on the GitHub site and we'll figure something out. +There is some basic ["Getting Started With Developing DSC Modules" information at the GitHub repository][1] as well. + + [1]: https://github.com/PowerShellOrg/DSC#powershell-community-dsc-modules diff --git a/content/articles/2013/08/new-powershell-org-visual-design-draft-pt-2/index.md b/content/articles/2013/08/new-powershell-org-visual-design-draft-pt-2/index.md new file mode 100644 index 000000000..23bb06565 --- /dev/null +++ b/content/articles/2013/08/new-powershell-org-visual-design-draft-pt-2/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-08-15-new-powershell-org-visual-design-draft-pt-2/ +title: New PowerShell.org Visual Design Draft, Pt 2 +authors: + - Don Jones +date: "2013-08-15T17:09:36+00:00" +aliases: + - /2013/08/new-powershell-org-visual-design-draft-pt-2/ +--- + +Spoke too soon in the morning's updates; my designer buddies worked last night and took their first stab at the forums pages. They also changed their mind about the big black boxes, which I appreciate ;). The forums material is denser now, meaning more info per page, which should please some folks. +Samples below - and comments welcome. Just keep in mind these folks aren't being paid, so be nice ;). +[![new-forum-list](https://powershell.org/wp-content/uploads/2013/08/new-forum-list-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/new-forum-list.png) [![new-single-topic](https://powershell.org/wp-content/uploads/2013/08/new-single-topic-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/new-single-topic.png) [![new-topic-list](https://powershell.org/wp-content/uploads/2013/08/new-topic-list-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/new-topic-list.png) [![new-article](https://powershell.org/wp-content/uploads/2013/08/new-article-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/new-article.png) [![new-article-comments](https://powershell.org/wp-content/uploads/2013/08/new-article-comments-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/new-article-comments.png) [![new-front](https://powershell.org/wp-content/uploads/2013/08/new-front-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/new-front.png) + +Whatcha think? They said they're tweaking the smaller-screen version still, but I'll update this post and add those examples once they're ready. I know getting the forums working on a smartphone is something people have kvetched about, but it's fairly tricky. They said they might just end up _not_ making a smartphone version, but instead focus on dropping unnecessary elements and letting the phone scale the page. The text input box is apparently giving them a lot of grief when it's sized too small. Anyway... diff --git a/content/articles/2013/08/phillyposh-08012013-meeting-summary-and-presentation-materials/index.md b/content/articles/2013/08/phillyposh-08012013-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..4db34713c --- /dev/null +++ b/content/articles/2013/08/phillyposh-08012013-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2013-08-12-phillyposh-08012013-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 08/01/2013 meeting summary and presentation materials +authors: + - John Mello +date: "2013-08-13T04:11:24+00:00" +aliases: + - /2013/08/phillyposh-08012013-meeting-summary-and-presentation-materials/ +--- + +1. [John Mello][1] gave a presentation on Tips and Tricks learned from the 2013 Scripting Games, a copy of his presentation and scripts can be obtained [here][2] + 2. Various group members contributed to a Script and Tell, scripts and participant names are forthcoming. + 3. A [recording of the meeting is available][3] on our [YouTube channel][4], please note that the recording ends about 5 minutes before our meeting was done. + + [1]: http://mellositmusings.com/ + [2]: https://powershell.org/wp-content/uploads/2013/08/PhillyPosh_2013-08-01_ScriptingGamesTipsandTricksLearned.zip + [3]: http://www.youtube.com/watch?v=mRS2275zUMk&feature=youtu.be + [4]: https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2013/08/powershell-great-debate-can-you-have-too-much-help/index.md b/content/articles/2013/08/powershell-great-debate-can-you-have-too-much-help/index.md new file mode 100644 index 000000000..c812a79e5 --- /dev/null +++ b/content/articles/2013/08/powershell-great-debate-can-you-have-too-much-help/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2013-08-13-powershell-great-debate-can-you-have-too-much-help/ +title: "PowerShell Great Debate: Can You Have Too Much Help?" +authors: + - Don Jones +date: "2013-08-13T14:44:06+00:00" +aliases: + - /2013/08/powershell-great-debate-can-you-have-too-much-help/ +--- + +In The Scripting Games this year, more than a few folks took the time to write detailed comment-based help. Awesome. No debating it - comment-based help _is a good thing. _ +But some folks felt that others took it too far. There were definitely scripts where the authors used, for example, the .NOTES section to explain their thinking and approach. Some commenters felt it was excessive, while others have pointed out, "wow, what if every programmer gave us some idea what the heck he/she was thinking at the time?" Some felt these extensive comments were just at attempt to get a better score by "convincing" the reviewer of an approach or tactic; others felt, "so what?" +So let's leave the Games out of this debate - in a _production_ environment, where do you come down on extensive notes in a script? When is it not enough, and when is it going too far? Where's the value, and where's the annoyance? +[boilerplate greatdebate] diff --git a/content/articles/2013/08/powershell-great-debate-fixing-output/index.md b/content/articles/2013/08/powershell-great-debate-fixing-output/index.md new file mode 100644 index 000000000..72416d76b --- /dev/null +++ b/content/articles/2013/08/powershell-great-debate-fixing-output/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2013-08-27-powershell-great-debate-fixing-output/ +title: "PowerShell Great Debate: \"Fixing\" Output" +authors: + - Don Jones +date: "2013-08-27T14:11:31+00:00" +aliases: + - /2013/08/powershell-great-debate-fixing-output/ +--- + +When should a script (or more likely, function) output raw data, and when should it "massage" its output? +The classic example is something like disk space. You're querying WMI, and it's giving you disk space in bytes. Nobody cares about bytes. Should your function output bytes anyway, or output megabytes or gigabytes? +If you output raw data, how would you expect a user to get a more-useful version? Would you expect someone running your command to use Select-Object on their own to do the math, or would you perhaps provide a default formatting view (a la what Get-Process does) that manages the math? +The "Microsoft Way" is to use a default view - again, it's what Get-Process does. But views are separate files, and they're only really practical (many say) when they're part of a module that can auto-load them. +What do you think? +[boilerplate greatdebate] diff --git a/content/articles/2013/08/powershell-great-debate-powershell-versions/index.md b/content/articles/2013/08/powershell-great-debate-powershell-versions/index.md new file mode 100644 index 000000000..594a953af --- /dev/null +++ b/content/articles/2013/08/powershell-great-debate-powershell-versions/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2013-08-01-powershell-great-debate-powershell-versions/ +title: "PowerShell Great Debate: PowerShell Versions?" +authors: + - Don Jones +date: "2013-08-01T14:32:38+00:00" +aliases: + - /2013/08/powershell-great-debate-powershell-versions/ +--- + +_Today's Great Debate is a bonus, offered from former team member June Blender. Take it away, June!_ +Like several of the excellent debates in our Great Debate series, this debate issue arose during in Scripting Games 2013 when different judges used different selection criteria to evaluate entries. +Some judges, like me, wanted to see evidence that the scripter had studied all features of the newest version of the Windows PowerShell language and selected the best approach for their solution. Other judges wanted the solutions to work on as many computers as possible. +Outside of the Scripting Games, this issue is very practical and very important. If you"™re writing a script to work on particular computers in your enterprise, you know which versions of Windows PowerShell are installed and which features you can use. But when you write a shared script or functions for a module, your scripts/functions can run in any environment. +What"™s the version best practice? +I think we can all agree that a #Requires statement should appear in any shared script. + + +`#Requires -Version [.] +`In fact, maybe we need a version property of commands that can be queried by using Get-Command, like the PowerShellVersion property of modules? +But, beyond that, should you restrict yourself to features in the oldest supported version of Windows PowerShell, or the most common version, or can you use features in the newest version, even if your scripts don"™t run on all computers in all enterprises? +Sometimes, the answers are trivial. The simplified syntax in Windows PowerShell 3.0 that omits curly braces {} and "$_." is just syntactic sugar for the original syntax. We might decide that it"™s best to avoid it unless you"™re sure that all computers are running at least 3.0. +At the other extreme are features that don"™t have any equivalent in a previous version. What if your module would benefit from using scheduled jobs, CIM commands, or workflows? Must you avoid them? +In the middle are cases where you can use a somewhat equivalent feature. Can you use Get-CimInstance, or are we forever tied to Get-WmiObject? Can you use PSCustomObject or are you committed to Add-Member? Do you need to write Types.ps1xml files when dynamic type data would suffice? diff --git a/content/articles/2013/08/powershell-great-debate-script-or-function/index.md b/content/articles/2013/08/powershell-great-debate-script-or-function/index.md new file mode 100644 index 000000000..2c2260ff7 --- /dev/null +++ b/content/articles/2013/08/powershell-great-debate-script-or-function/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2013-08-06-powershell-great-debate-script-or-function/ +title: "PowerShell Great Debate: Script or Function?" +authors: + - Don Jones +date: "2013-08-06T14:31:41+00:00" +aliases: + - /2013/08/powershell-great-debate-script-or-function/ +--- + +One of the most frequent comments in The Scripting Games this year was along the lines of, "you should have submitted this as a function, not a script." Of course, the second-most frequent comment was something like, "you shouldn't have submitted this as a function." +Let's be clear: if an assignment explicitly asks for a function, you should write one. What we're debating are the pros and cons of a _single tool_ being written one way or another. Read that again: _a single tool. _If you're writing a library of tools, it's obvious that writing them as functions for inclusion in a single file (like a script module) is beneficial. +Some argue that any tool is potentially going to be included in a function... so why not write it that way to begin with? Others argue that functions are a smidge harder to test, so why not just write a script? +This is a debate I don't personally have a strong stake in. I mean, we're literally talking about a _single keyword. _Take _any_ script, add the **function** keyword, a function name, and a couple of curly brackets, and you've got a function. This really shouldn't be a criteria when you're looking at a contest entry... or even when you're looking at something a colleague offered to you. +Or should it? +[boilerplate greatdebate] diff --git a/content/articles/2013/08/powershell-great-debate-whats-write-verbose-for/index.md b/content/articles/2013/08/powershell-great-debate-whats-write-verbose-for/index.md new file mode 100644 index 000000000..2351bae41 --- /dev/null +++ b/content/articles/2013/08/powershell-great-debate-whats-write-verbose-for/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2013-08-20-powershell-great-debate-whats-write-verbose-for/ +title: "PowerShell Great Debate: What's Write-Verbose For?" +authors: + - Don Jones +date: "2013-08-20T18:07:32+00:00" +aliases: + - /2013/08/powershell-great-debate-whats-write-verbose-for/ +--- + +This was a fascinating thing to see throughout The Scripting Games this year: _When exactly should you use Write-Verbose, and why? _The same question applies to Write-Debug. + + * +"I use Write-Debug to provide developer-level comments in my scripts, since I can turn it on with -Debug to see variable contents." + + * "I use Write-Verbose to provide developer-level comments in my scripts, since I can turn it on with -Debug to see variable contents." + +See what I mean? Some folks will suggest that Verbose is for "user-friendly status messages;" others eschew Debug entirely and prefer PSBreakpoints for that functionality. +What guidance would _you_ offer for using Write-Verbose and Write-Debug in a script? +[boilerplate greatdebate] diff --git a/content/articles/2013/08/powershell-orgs-azure-journey-part-1/index.md b/content/articles/2013/08/powershell-orgs-azure-journey-part-1/index.md new file mode 100644 index 000000000..76753c39b --- /dev/null +++ b/content/articles/2013/08/powershell-orgs-azure-journey-part-1/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2013-08-19-powershell-orgs-azure-journey-part-1/ +title: "PowerShell.org's Azure Journey, Part 1" +authors: + - Don Jones +date: "2013-08-19T16:19:50+00:00" +aliases: + - /2013/08/powershell-orgs-azure-journey-part-1/ +--- + +When we started PowerShell.org, my company (Concentrated Tech) donated shared hosting space to get the site up and running. We knew it wouldn't be a permanent solution, but it let us start out for free. We're coming to the point where a move to dedicated hosting will be desirable, and we're looking at the options. Azure and Amazon Web Services are priced roughly the same for what we need, so as a Microsoft-centric community Azure's obviously the way to go. +Azure Technical Fellow Mark Russinovich is having someone on his team connect with me to discuss some of the models in which we could use Azure. What makes the discussion interesting is that PowerShell.org runs on a LAMP (Linux, Apache, MySQL, and PHP) stack. We're not looking to change that; WordPress requires PHP, and the Windows builds of PHP typically lack some of the key PHP extensions we use. I'm not interested in compiling my own PHP build, either - I want off-the-shelf. WordPress more or less requires MySQL; while there's a SQL Server adapter available, it can't handle plugins that don't use WordPress' database abstraction layer, and I just don't want to take the chance of needing such a plugin at some point and not being able to use it. +What's neat about Azure is that it doesn't care. I adore Microsoft for selling a service and not caring what I do with it. Azure runs Linux _just fine. _Huzzah! +So, we've got two basic models that could work for us. Model 1 is to just buy virtual machines in Azure. We're planning one for the database and another for the Web site itself, so that we can scale-out the Web end if we want to in the future. We're not going to do an availability set; that means we risk some short downtime if Azure experiences hardware problems and needs to move our VM, but we're fine with that because right now we can't afford better availability. We'd probably build CentOS machines using Azure's provided base image (again, _adore_ Microsoft for making this easy for Linux hosting and not just Windows). We know we tend to top out at 250GB of bandwidth a month, and that we need about 1GB of disk space for the Web site. 500MB of space for the database will last us a long time, but we'd probably get 1GB for that, too. It's only like $3 a month. We could probably start with Small VM instances and upgrade later if needed. All-in, we're probably looking at about $125/mo, less any prepay discounts. +Model 2 is to just run a _Website. _We still get to pick the kind of instance that hosts our site, so if we went with Small and a single instance, we'd be at about $110 including bandwidth and storage. That doesn't include MySQL, though. Interestingly, Microsoft doesn't host MySQL themselves as they do with SQL Azure. Instead, they outsource to ClearDB.com, which provides an Azure-like service for hosted MySQL. Unfortunately, the Azure price calculator doesn't cover the resold ClearDB service. Looking at ClearDB's own pricing, it'd probably push us to about $120-$125 a month - or about the same as having our own virtual machines. The difference is that, with Model 2, Microsoft can float our Web site to whatever virtual hosts they need to at the time to balance performance; with Model 1, they can potentially move our entire VM - although they're unlikely to do so routinely, since it'd involve taking us offline for a brief period. A super-neat part of this model is its integration with Git: I can run a local test version of the site, and as I make changes and commit them to our GitHub repository, Azure can execute a pull and get the latest version of the site code right from Git. Awesome and automated. I love automated. +An appeal of Model 1 is that I can build out the proposed CentOS environment on my own Hyper-V server, hit it with some test traffic loads, and size the machine appropriately. I can then deploy the VHDs right to Azure, knowing that the instance size I picked will be suitable for the traffic we need to handle. It also give me an opportunity to validate the fact that a dedicated VM will be faster than our current shared hosting system, and to play around with the more advanced caching and optimization options available on a dedicated VM. I can get everything dialed in perfectly, and then deploy. +Azure has other usage models, but these are the two applicable to us. I think it's great that we get these options, and that the pricing is more or less the same regardless. And again, I think it's pure genius that Azure's in the business of _making money_ for Microsoft, and that they're happy to do so running whatever OS I want them to. +I'll continue this series of posts as we move through the process, just for the benefit of anyone who's interested in seeing Azure-ification from start to finish. Let me know if you have any questions or feedback! diff --git a/content/articles/2013/08/powershell-orgs-azure-journey-part-2/index.md b/content/articles/2013/08/powershell-orgs-azure-journey-part-2/index.md new file mode 100644 index 000000000..5ec8c6e8b --- /dev/null +++ b/content/articles/2013/08/powershell-orgs-azure-journey-part-2/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2013-08-19-powershell-orgs-azure-journey-part-2/ +title: "PowerShell.org's Azure Journey: Part 2" +authors: + - Don Jones +date: "2013-08-20T01:10:01+00:00" +aliases: + - /2013/08/powershell-orgs-azure-journey-part-2/ +--- + +I had no idea Azure gives MSDN subscribers a huge free monthly credit - $200 for the first month, and then on the Ultimate subscription level (which is what I get as an MVP) you get  $175 per month thereafter. That starts to really justify the MSDN pricing. You want a lab in the cloud? Free Azure! +Given the free-ness of it, I decided to set up a PowerShell.org in the sky to see how it went. Configuring dual CentOS VMs was a bit of an all-day affair; I have less experience with RHEL (which is what CentOS is based on) and it took me a while to figure out that the built-in firewall was causing all my grief. Fixed now. +Microsoft publishes some pretty good guides for getting a LAMP stack running on CentOS in Azure. Not great guides, but good. They lack a decent guide on getting Passive FTP working - and it's a PITA because Azure only lets you configure incoming ports on a one-at-a-time basis (not ranges), and you can only have 25. So that's kind of a pain. But I got it working, got MySQL installed and working, and I'm presently waiting on VaultPress to smush up our latest site backup and spew it onto the Azure server. Remember: you don't pay for bandwidth going _into_ Azure, so I can load the backup in as many times as I want without incurring bandwidth. +This VaultPress thing is neat, if it works. It continually pulls changes from our WordPress installation and backs them up, timestamped, a la Apple Time Machine. Allegedly, if you give them the FTP info on you new server, and you have a base WordPress install working on the new server, they can "push" your whole site down to the new server. Given my fits and starts with FTP on CentOS today, we'll see how well it works, but I'm optimistic. Dunno. It's been saying "Testing Connection" for a long time now. Sigh. +Anyway, I'm starting both VMs in extra-small instances. Part of what I want to play with is whether or not I can upgrade those to bigger instances without breaking the universe. Depends on how CentOS behaves when it suddenly finds itself running on "new hardware." We shall see! If it works, then it'll truly be killer in terms of scaling. I also want to see if we get more "juice" running two load-balanced extra-small instances vs. a small instance (which is technically twice as big as an extra-small). Common logic suggests that more, smaller servers is better - a la every web farm, ever. But it'll be fun to test. +**Question:** anyone have any Web site load-testing software they're fond of? Mac or Windows is fine, or even both. I'll enlist some folks to help with that, since I know my DSL line's upstream side will chokepoint long before the Azure server does. Ooo, maybe we can have a PowerShell.org botnet that I could control... bwaa haa haa! +Meantime, Eric Courville, our new volunteer Webmaster, is setting up a similar Azure-based VM set with his own MSDN subscription. In addition to documenting the setup process, we're going to try and do some load-testing and see what kind of instances we need to run in to get solid performance out of the site. PowerShell.org currently peaks at fewer than 50-60 concurrent connections (and even that day was a rare peak), so we'll load test to that number. +Stay tuned! diff --git a/content/articles/2013/08/powershell-orgs-azure-journey-part-3-load-testing/index.md b/content/articles/2013/08/powershell-orgs-azure-journey-part-3-load-testing/index.md new file mode 100644 index 000000000..e65132e70 --- /dev/null +++ b/content/articles/2013/08/powershell-orgs-azure-journey-part-3-load-testing/index.md @@ -0,0 +1,38 @@ +--- +url: /articles/2013-08-21-powershell-orgs-azure-journey-part-3-load-testing/ +title: "PowerShell.org's Azure Journey, Part 3: Load Testing [UPDATED]" +authors: + - Don Jones +date: "2013-08-21T17:43:58+00:00" +aliases: + - /2013/08/powershell-orgs-azure-journey-part-3-load-testing/ +--- + +So, I've gotten a two-VM version of PowerShell.org running in Azure. Yay, me! My *nix skills are unaccountably rusty (go fig), but it didn't take too long. Restoring the WordPress installation was the toughest, as a number of settings had to be tweaked since the site is no longer under the same URL (the  test site that is). + +## Baseline + +I ran a load test against the existing production site yesterday; you can view the results at . This simulated a 50-person concurrent load from three US locations and on UK location, which approximates our real-world traffic. The results are what they are; we're looking for the delta between these and the Azure-based system. In this test, the green line is the number of concurrent connections, and the blue is the time it took each page to load. The test ran for 10 minutes total, with each simulated user hitting three different pages on the site (home page, a forums topic, and a blog post). +A key fact is that the site currently runs under a shared hosting plan; I don't have any details on how much RAM, how much CPU, or what kind of bandwidth exists for the site. It's also important to note that the production Web site uses a Content Delivery Network, or CDN, which offloads a good amount of traffic from the site proper. Because that costs, we didn't implement a CDN for the test site. I'd therefore expect it to be somewhat slower. + +## Azure 1: XS+XS + +The first Azure test is at . This uses an extra-small instance for both the Web server and the database server (separate VMs; that reflects the fact that the current site runs the DB on a separate shared server). As you can see, the results weren't promising. By around 40 users, page load times exceeded 3 minutes, at which point they started timing out. So the test clearly overwhelmed the instance. That wasn't unexpected; an XS instance runs on a shared core with 768MB of RAM. That ain't much. I think it's also powered by a 9-volt battery. But I wanted a baseline; XS instances are super-cheap. +(As an aside, scaling out the Web tier of PowerShell.org isn't trivial, due mainly to the presence of user uploads. We'd need to make some tweaks to have all uploads sent to, and downloaded from, a single server; if we just scale-out by load-balancing in a second Web server, user-uploaded content won't work correctly. Also, doubling the instance size - e.g., from XS to S - costs the same as adding a second XS instance. Scale-out isn't off the table, but since it's more complicated to set up, I'm not testing it right now.) + +## Azure 2: S+XS + +The third test moved the Web server to a Small instance, which offers a dedicated core and 1.75GB of RAM. The DB server remained at an XS instance size. It was super-cool that you can upsize the instances whenever you want. You pay by the minute based on instance size, and the Azure Price Calculator rolls that up into a monthly estimate based on 24x7 usage. One thing I've learned is that when the Azure Web console says it's done with something, like starting a VM, you really still need to wait a few minutes before all the bits and bobs are in place to make the Web site work. Another PITA is that, when you shut down a VM, you lose both your public IP (no problem, since they handle DNS for you) and private IP (a bit of a pain since there's no DNS for it, so I had to re-point the Web server at the database server's new private IP). +(As another aside, Azure also offers the option of just moving the Web site and the database into the cloud, using PaaS rather than IaaS. We get to select the kind of instance our site runs on, but it's potentially shared with other sites. MySQL gets outsourced to ClearDB. There's some more complexity in that model from the perspective of getting the site working, and having our own VMs gives us some additional performance-improving abilities, like in-memory opcode caching. Either model costs about the same, so we're playing with the VM model at present.) +Anyway, the third test results are at . I'll mention that the S instance size allows a lot more room for opcode caching, which can help tremendously, as well as having more RAM and CPU for handling the concurrent requests. Because the simulated users are all asking for the same pages, the caching should go a long way toward helping. For this test, response times held pretty well under 20s for the majority of the test, excluding some spikes (likely due to cached items expiring and being re-generated). Things started to get dicey at 40 concurrent users, but still held about the same average performance that the current production site offers. Using the test site interactively while this load test was underway was slow, but not utterly painful. +(Real-world note: We disable a number of caching mechanisms for logged-in site users, because we don't want to serve a cached page form a logged-in user to an anonymous user. So logged-in users will get somewhat different results. For the purposes of this test, we're comparing apples to apples with anonymous simulated users.) + +## Azure 3: S+S + +Now the database server has also been upgraded to a small instance, featuring a dedicated CPU core and 1.75GB of RAM. Having to update the database server's private IP address each time it restarts is a PITA. I need to find out if there's any way to use a DNS name for that instead - something Azure updates for me when it reassigns the IP. I don't want to use the public IP/DNS, because I'd pay for bandwidth - with the internal IP, the traffic stays inside the Azure datacenter, so I don't pay for it. +Anyway, this test result is at . Can I tell you how much I love LoadImpact for doing these tests? Set up the test once, run it over and over against different configurations. Awesome. +As you're comparing the charts, pay close attention to the scale on the sides. They're not necessarily the same - you actually have to look at the numbers, not just the height of the blue line.  This time, although the blue line climbed high, it was actually under 1m for the entire test. That's a marked improvement over the XS+XS test! In addition, a S+S configuration is pretty affordable. It's about $180/mo in VMs, plus about $35 for storage and estimated bandwidth. That's less than two dedicated rackmount servers would cost, for sure. + +## Conclusion + +I need to do a bit of analysis - LoadImpact lets me download CSVs, which will let me make some direct-comparison charts - but Azure's looking like a good option for us, especially in the S+S option. I may also run a Medium+Small test (I have one credit left with LoadImpact for the month, so why not) just to see the difference. **UPDATE: **I did. The M+S test is at . diff --git a/content/articles/2013/08/powershell-orgs-azure-journey-part-4-incoming-advice-and-fun-facts/index.md b/content/articles/2013/08/powershell-orgs-azure-journey-part-4-incoming-advice-and-fun-facts/index.md new file mode 100644 index 000000000..2421f8fc9 --- /dev/null +++ b/content/articles/2013/08/powershell-orgs-azure-journey-part-4-incoming-advice-and-fun-facts/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-08-23-powershell-orgs-azure-journey-part-4-incoming-advice-and-fun-facts/ +title: "PowerShell.org's Azure Journey, Part 4: Incoming Advice and Fun Facts" +authors: + - Don Jones +date: "2013-08-23T14:40:43+00:00" +aliases: + - /2013/08/powershell-orgs-azure-journey-part-4-incoming-advice-and-fun-facts/ +--- + +Had an opportunity to speak with some folks on the Azure team yesterday - Mark Russinovich was kind enough to make a contact for me. +First of all, fun fact: Azure only charges you for _used pages_ in VHDs. That is, if you create a 100GB VHD and load 1GB of data on it, you're paying for 1GB of data. Very clever. So it's charging you as if it was a dynamically expanding VHD, but of course it's a fixed VHD with all of the related performance improvements. Nice. +Second, they basically confirmed something I'd suspected. Azure's "website model" tends to appeal more to smaller businesses or personal Web sites; most "serious" players (my word) are using the IaaS model, meaning they're hosting VMs in the cloud, not just hosting a Web site. Having a full VM under your control obviously has advantages in terms of management, along with the ability to run things like in-memory caching software, load additional Web extensions, and so on. IaaS is absolutely the right model for PowerShell.org for many of those reasons. +That said, they also confirmed that the Web site model and the IaaS model cost about the same, at least as you get started. So it's really - for a smaller Web site - a matter of what you want to do. Again, there are specifics about the IaaS model that work well for us, so that's what we're looking to do. +Azure also costs about the same, in an apples-to-apples comparison, as Amazon Web Services. That's probably somewhat deliberate on Microsoft's part, but Azure has advantages. For one, their virtualization layer has been approved by the various Microsoft product teams, so if you're running SharePoint or SQL Server in an Azure VM, the team will support you. Not the case with AWS. Also, I frankly found Azure's presentation of the costs easier to grok. +Fifth (I love numbered lists, sorry), I confirmed that the IaaS option charges you for (a) the VM's you're running, by the minute; (b) the storage used by all VM VHDs' used pages, and (c) outbound bandwidth. This can potentially make IaaS more expensive than the "website" model because Azure won't spin down an IaaS VM, so you run 24x7 unless you're manually deallocating. With a website, Azure only spins up worker processes when they're needed, so your site isn't "running" 24x7, so you might pay less if it's not being "hit" 24x7. Again, though, the website model offers us less control and flexibility. +Just thought you'd enjoy some of those details! diff --git a/content/articles/2013/08/regular-expressions-are-a-replaces-best-friend/index.md b/content/articles/2013/08/regular-expressions-are-a-replaces-best-friend/index.md new file mode 100644 index 000000000..f1852eb54 --- /dev/null +++ b/content/articles/2013/08/regular-expressions-are-a-replaces-best-friend/index.md @@ -0,0 +1,29 @@ +--- +url: /articles/2013-08-29-regular-expressions-are-a-replaces-best-friend/ +title: "Regular Expressions are a -replace's best friend" +authors: + - Don Jones +date: "2013-08-29T17:31:13+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +aliases: + - /2013/08/regular-expressions-are-a-replaces-best-friend/ +--- + +Are you familiar with PowerShell's -replace operator? + + +`"John Jones" -replace "Jones","Smith" +`Most folks are aware of it, and rely on it for straightforward string replacements like this one. But not very many people know that -replace also does some amazing stuff using regular expressions. + + +`"192.168.15.12,192.168.22.8" -replace "\.\d{2}\.","10" +`That'd change the input string to "192.168.10.12,192.168.10.8," replacing all occurrences of two digits, between periods, to 10. The 12 would be skipped because it isn't followed by a period, as specified in the pattern. Note that _all_ occurrences are replaced, in keeping with the usual operation of -replace. +The operator can also do capturing expressions, and this is where it gets really neat-o. + + +`"Don Jones" -replace "([a-z]+)\s([a-z]+)",'$2, $1' +`Here, I've specified two capturing expressions in parentheses, with a space character between them. PowerShell will capture the first to $1, and the second to $2. Those aren't actually variables, which is important. In my replacement string, I put $2 first, followed by a comma, a space, and $1. The resulting string will be "Jones, Don". It's important that my replacement string be in single quotes. In double quotes, the shell will try and treat $1 and $2 as variables, instead of using them as captured regex placeholders. I kinda wish they'd used something other than a $ for the captured placeholders, so that they didn't look like variables, but the syntax is in keeping with regex standards. +I think it's cool to see all the places a regex can be put to use. The -split operator also supports regex syntax as a way of specifying the separator that will be used to break a string into components, so you're not limited to splitting just on a single character like a comma. +Apart from the well-known -match operator and the Select-String command, where else have you used a regex in PowerShell? diff --git a/content/articles/2013/08/site-maintenance-this-weekend-aug-17-18-2013/index.md b/content/articles/2013/08/site-maintenance-this-weekend-aug-17-18-2013/index.md new file mode 100644 index 000000000..5b8d341b9 --- /dev/null +++ b/content/articles/2013/08/site-maintenance-this-weekend-aug-17-18-2013/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2013-08-16-site-maintenance-this-weekend-aug-17-18-2013/ +title: Site Maintenance this Weekend (Aug 17-18 2013) +authors: + - Don Jones +date: "2013-08-16T14:54:19+00:00" +categories: + - Announcements +aliases: + - /2013/08/site-maintenance-this-weekend-aug-17-18-2013/ +--- + +This weekend, we'll be conducting maintenance on PowerShell.org. We have several goals: +**New visual theme. **We'll be installing a new visual theme. While we hope to catch everything, you may run across something goofy-looking. Please use the Community Discussion forum to report that, so we can ask the designers to take a look. +**Performance. **We're going to continue to work on performance, with a goal of getting specified pages to have an "A" on the Page Test and YSlow tests. That's not the entirety of performance, but it's what we can address now without moving to a different hosting environment (which is planned). During this phase of our maintenance, the site may not function correctly, or certain features may come and go as we test different configurations. +**Cleanup****. **We'll be condensing certain features of the site, rearranging menus, and so on, to provide a better visual experience across a wider variety of devices. +We appreciate your patience! diff --git a/content/articles/2013/08/so-your-company-doesnt-want-to-enable-powershell-remoting/index.md b/content/articles/2013/08/so-your-company-doesnt-want-to-enable-powershell-remoting/index.md new file mode 100644 index 000000000..dc82a4bb7 --- /dev/null +++ b/content/articles/2013/08/so-your-company-doesnt-want-to-enable-powershell-remoting/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-08-20-so-your-company-doesnt-want-to-enable-powershell-remoting/ +title: "So your company doesn't want to enable PowerShell Remoting?" +authors: + - Don Jones +date: "2013-08-21T00:37:04+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/08/so-your-company-doesnt-want-to-enable-powershell-remoting/ +--- + +But I bet they're okay with Remote Desktop Protocol, right? And all those Remote Procedure Calls? +And I bet they never even thought about why _every *nix_ _system, ever, _has SSH enabled by default? But practically nothing else (by default)? +Hmm. diff --git a/content/articles/2013/08/state-of-the-org-website-games-summit-and-more/index.md b/content/articles/2013/08/state-of-the-org-website-games-summit-and-more/index.md new file mode 100644 index 000000000..9fa52df3a --- /dev/null +++ b/content/articles/2013/08/state-of-the-org-website-games-summit-and-more/index.md @@ -0,0 +1,29 @@ +--- +url: /articles/2013-08-15-state-of-the-org-website-games-summit-and-more/ +title: "State of the Org: Website, Games, Summit, and More" +authors: + - Don Jones +date: "2013-08-15T14:39:23+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2013/08/state-of-the-org-website-games-summit-and-more/ +--- + +I wanted to share a quick update on PowerShell.org, Inc. +First, a couple of Web designer friends of mine have volunteered to do a visual re-theme of the site. Below is some of their early work, and you're welcome to comment; I'll just remind you that they're _volunteers_ and doing this _as a favor. _So be nice! You'll notice that one of these reflects the layout a smartphone would use, which trims much of the "chrome" in favor of the content. They haven't tackled the forums yet - that's harder, and will probably come last. +[![3-001](https://powershell.org/wp-content/uploads/2013/08/3-001-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/3-001.png) [![3-002](https://powershell.org/wp-content/uploads/2013/08/3-002-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/3-002.png) [![3-003](https://powershell.org/wp-content/uploads/2013/08/3-003-150x150.png)](https://powershell.org/wp-content/uploads/2013/08/3-003.png) + +Second, in the last quarter of the year we're planning a move from our current shared hosting plan (my company is actually hosting the site for free) to a more dedicated plan - likely in Azure, since that offers us redundancy without the need to actually pay for two servers. We'll set up a 2-server system with one server dedicated to the database, and the other the Web site, which reflects what we have now under the shared plan. We'll remain on the current LAMP stack, just running inside Azure. That takes a lot of work to set up and test, and the schedule will depend largely on our volunteers' time, but it's in the works. The move should help a bit with some of the performance. It's crazy expensive compared to "free" (around $3600/year max, although obviously it's based on usage so that's kind of a worst-case guess), but we're growing to the point where we need it and it isn't any more expensive than a dedicated server. I love that the Azure folks are smart enough to offer a LAMP stack. Own the back end, who cares what people do with it! +Third, we've disabled a few site features that were really eating up page load times. Most you won't notice, but the "badges" functionality is presently turned off. We haven't deleted any data, so we can bring that back, but for right now it's unavailable. +Fourth... and off of the Web site... the PowerShell Summit North America 2014 is about 12% sold out. As of today, our 2013 alumni and shareholders no longer have a reserved block; our TechLetter subscribers still have a reserved block through September 15th, at which point everything goes on sale to the public. The velocity of sales has been good, and we should be able to hit our next scheduled payment to the event venue. We _are_ still holding back about 50 slots for 2014Q1, for those of you who _can't_ register until next year. But I wouldn't hold out for those if you don't have to. It does _not_ look, at present, like we'll have many (if any) additional discounted memberships - in order to hit our numbers, it's likely everything will hold to full price. If we do offer any discounts, it'll be absolutely last-minute. Also, our team is getting going on content, and you should see a Call for Topics real soon, now. +Fifth, the PowerShell Summit Europe 2014 is coming along, but not really going anywhere. Ha! By that, I mean we're simply too far out (more than a year) for venues to be able to talk to us. So we're holding tight until September and October this year, when we can start checking pricing and availability. Madrid snuck on to our short-list of cities, along with Munich, Milan, and Amsterdam, due to the presence of a large MS conference facility there. If anyone lives in Europe and speaks Spanish, and wants to be our liaison to communicate with MS Madrid, please contact me (via the Site Info menu above). It'd be nice to have someone local who can contact the office and see what we can do there, or at least put us in touch with an evangelist over there who could work on our behalf. +Sixth, don't forget that Mark Schill has announced [PowerShell Saturday 005][1] for Atlanta. Mark's also been tasked to help one or two other organizations put on their own PowerShell Saturday, so if you think you'd be interested, please contact him. Having done this four times already, he's got a good grip on how to go about it. +Seventh, we've got some great new guys acting as editors for the TechLetter, and the September issue will be their first go at it. Wish them luck and give them your support! We're also looking to launch free online TechSession webinars next month; I'll probably run the first one, and there will be a required (and free) registration process, and it may be bumpy. But we're going to try and do those monthly. They'll supplement the new MVA offerings from MS, and get back to the days with TechNet did a whole series of different free webinars. Once we start, please help spread the word - if we're not getting good attendance or recording views, we won't keep doing it. +Eighth, I'm unsure if we'll be doing a Winter Games event or not. We had someone volunteer to coordinate it, but I haven't heard any details from them, and I'm kinda getting overbooked on my end, which will make it tough to do up whatever Web site they might need. We're going to play this one by ear. +Ninth... and before I make it to a full strike... I want to express my deep gratitude for everyone that's helping make this community work. The Forums are obviously a big piece, and it's been fantastic to see so many of you jumping in and volunteering your time to help answer questions. Truly, I feel that this whole thing is finally taking off and that it's a real _community. _Along those lines, in Q4 this year, we're going to announce (so start thinking about it) a PowerShell Heroes award. This will be for folks who have _not_ already received some kind of recognition (like MVP) for helping out in the community, so that we can formally offer them a thank-you. Awards will be by nomination, and will carry no benefits whatsoever (grin). But start thinking of who you'd like to thank, and why. +OK - that's probably enough for the morning. Thanks for coming along for the ride, and have a great rest of the week! +Don + + [1]: http://powershellsaturday.com diff --git a/content/articles/2013/08/two-powershell-books-50-off-today-only/index.md b/content/articles/2013/08/two-powershell-books-50-off-today-only/index.md new file mode 100644 index 000000000..f44d912e0 --- /dev/null +++ b/content/articles/2013/08/two-powershell-books-50-off-today-only/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-08-16-two-powershell-books-50-off-today-only/ +title: Two PowerShell Books 50% off TODAY ONLY +authors: + - Don Jones +date: "2013-08-16T17:59:11+00:00" +categories: + - Books +aliases: + - /2013/08/two-powershell-books-50-off-today-only/ +--- + +_PowerShell in Depth_ and _Learn Windows PowerShell 3 in a Month of Lunches_ are on half-price August 25th, 2013. +Use code dotd0825au at [www.manning.com/jones2/][1] +or +Use code dotd0825au at [www.manning.com/jones3/](http://www.manning.com/jones3/) +Tell a friend who needs to start learning PowerShell - two great books at 50% off. All print books come with a voucher for free ebook versions (MOBI, EPUB, PDF), and the ebook-only version is also 50% off. + + [1]: http://www.manning.com/jones2/ diff --git a/content/articles/2013/09/_index.md b/content/articles/2013/09/_index.md new file mode 100644 index 000000000..e0b52d593 --- /dev/null +++ b/content/articles/2013/09/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from September 2013" +description: "PowerShell.org Articles published in September 2013." +--- diff --git a/content/articles/2013/09/great-debate-the-conclusion/index.md b/content/articles/2013/09/great-debate-the-conclusion/index.md new file mode 100644 index 000000000..6f45ea608 --- /dev/null +++ b/content/articles/2013/09/great-debate-the-conclusion/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2013-09-10-great-debate-the-conclusion/ +title: "Great Debate: The Conclusion" +authors: + - Don Jones +date: "2013-09-10T20:23:57+00:00" +categories: + - Books +aliases: + - /2013/09/great-debate-the-conclusion/ +--- + +All this Summer, we've been encouraging your feedback in a [series of Great Debate posts][1]. Most of the topics came from the 2013 Scripting Games, where we definitely saw people coming down on both sides of these topics. My goal was to pull everyone's thoughts together into a kind of community consensus, and to offer a living book of community-accepted practices for PowerShell. This'll be a neverending story, likely adapting and growing to include more topics as the years wind on. +But here's the start: [DRAFT-2013Sep_Practices][2] is the first draft, officially a Request For Comments, based on the comments you've all contributed to the Great Debate posts over these past few weeks. I tried to capture consensus where I saw it, and to outline both sides of the great back-and-forth we've seen. +**NOTE:** The cover image in this draft is just a placeholder; this book is NOT dedicated to error handling. Its working title is correctly shown on the page following the cover image. +I'm going to leave _this_ post in place until October 1st. Please drop any comments you'd like to offer to the final first edition of this ebook, and let me know if there are any topics you'd like to see debated in the future. After October 1st, I'll publish the final edition of this Practices guide as one of PowerShell.org's free ebooks. The final first edition will also become part of the next iteration of The Scripting Games, as its official "best practices" guide. In fact, you'll notice in this draft that there are a couple of Games-specific comments, since the Games sometimes have different drivers than a production environment. +Thanks again to everyone who participated! + + [1]: https://powershell.org/category/great-debates/ + [2]: https://powershell.org/wp-content/uploads/2013/08/DRAFT-2013Sep_Practices.pdf diff --git a/content/articles/2013/09/my-new-powershell-video-series-covering-v2v3v4-launches/index.md b/content/articles/2013/09/my-new-powershell-video-series-covering-v2v3v4-launches/index.md new file mode 100644 index 000000000..10591ffa2 --- /dev/null +++ b/content/articles/2013/09/my-new-powershell-video-series-covering-v2v3v4-launches/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2013-09-11-my-new-powershell-video-series-covering-v2v3v4-launches/ +title: My New PowerShell Video Series, Covering v2/v3/v4, Launches +authors: + - Don Jones +date: "2013-09-11T17:35:25+00:00" +categories: + - Training +aliases: + - /2013/09/my-new-powershell-video-series-covering-v2v3v4-launches/ +--- + +It's finally starting to be published - my [Ultimate PowerShell Video Training Series][1], covering versions 2 and onward. +This series will initially consist of 90 chunks of roughly 20 minutes each, adding up to more than 30 hours total. I'm building each individual video to CLEARLY differentiate between PowerShell v2, v3, and v4; for the most part, I switch to Windows 7, Windows 8, and Windows 8.1 to demonstrate specifics in each version. That means you can clearly tell what features and techniques go with each version. It also means the series can be extended as new versions are released in the future. +This is going to cover _everything_ - think of it as a "PowerShell In Depth" done in video. And, whatever I forget, if there is anything, can be easily added to the series. In other words, this will be my new, permanent video training for PowerShell. It'll cover every version from v2, be extended to cover new version techniques and features, and be expanded to cover new topics as they become of interest. +It's being built with hands-on labs, too. I describe a lab environment you can set up (super-simple), and provide written lab documents for you to work through. Each is then covered in a standalone video, so that you can see sample solutions. +Best of all, you can watch the whole thing for under $100. CBT Nuggets' program gives you monthly access to their entire library for that price, including my entire PowerShell series, their hundreds of titles related to certification and technology, _everything. _Or pay $1000 for an entire year - which also gets you access to practice certification exams from Transcender. +I'll be publishing 5-10 videos per week in this series, until it's done - and we'll then be tackling domain-specific PowerShell management, including Exchange, AD, SQL Server, System Center, _all_ of it. It'll take some time to build out all of that, but I'm committed to building the most comprehensive PowerShell video training offering in the universe! +If you get a chance to check out the new series, let me know what you think. + + [1]: http://cbtnuggets.com/it-training-videos/course/cbtn_pwrshl_master diff --git a/content/articles/2013/09/nominate-your-powershell-hero/index.md b/content/articles/2013/09/nominate-your-powershell-hero/index.md new file mode 100644 index 000000000..8e10e9de8 --- /dev/null +++ b/content/articles/2013/09/nominate-your-powershell-hero/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2013-09-20-nominate-your-powershell-hero/ +title: Nominate Your PowerShell Hero +authors: + - Don Jones +date: "2013-09-20T17:02:18+00:00" +categories: + - Announcements +aliases: + - /2013/09/nominate-your-powershell-hero/ +--- + +PowerShell.org is proud to announce a new community recognition program: **PowerShell Heroes**. We're looking for your Hero nominations! +A **PowerShell Hero** is someone who you feel does an outstanding job helping the community, perhaps by answering questions in forums (here or elsewhere), writing useful blog posts, offering education, and more. A **PowerShell Hero** is someone who  +has not already received formal recognition elsewhere +, meaning past and present MVPs are not eligible. _ +_ +We are accepting nominations until December 15th, 2013. At that point, the Board of PowerShell.org will review the nominations, and in early 2014 we will announce those we're honoring with this recognition. In subsequent years, past honorees will decide who gets recognized in the following years. +**Who can I nominate?** Anyone you want, except current or past MVPs, Microsoft employees, Microsoft Regional Directors, or others who have been formally recognized for their community contributions. +**How do I nominate them? **Send us an e-mail (admin@; our domain is powershell.org). We need the person's name or online handle, and some links to their contributions. Also describe in 100-500 words why they're your PowerShell Hero. Please put "PowerShell Hero" in the subject line of your email. +**How many people will be recognized?** We don't have a fixed number. +**What will honorees receive? **Online recognition; we'll be publishing an online directory of Heroes. We're looking into making plaques, but it depends a bit on the finances. There are no other benefits to the honoree. +**Must someone re-qualify every year? **This isn't like the MVP program - it's a recognition with no benefits. So there's nothing to "qualify" for. In future years, the previous year's honorees will select the next year's honorees, so you're prohibited from being recognized in sequential years. +**How can I think of who to nominate? **Think about who has helped _you_ with PowerShell problems. Did someone help you solve something through a discussion forum? Did someone's blog post give you that "aha!" moment? Did someone spend a massive amount of time putting together a PowerShell event that really helped you? Those are the heroes we want to recognize. Again, past and present MVP award recipients are not eligible - they've already been recognized. +We look forward to your nominations! diff --git a/content/articles/2013/09/phillyposh-09052013-meeting-summary/index.md b/content/articles/2013/09/phillyposh-09052013-meeting-summary/index.md new file mode 100644 index 000000000..d6d93655a --- /dev/null +++ b/content/articles/2013/09/phillyposh-09052013-meeting-summary/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2013-09-08-phillyposh-09052013-meeting-summary/ +title: PhillyPoSH 09/05/2013 meeting summary +authors: + - John Mello +date: "2013-09-09T03:05:10+00:00" +aliases: + - /2013/09/phillyposh-09052013-meeting-summary/ +--- + +* [Author][1], [Scripting Games 2013 winner][2], and founder of the [Mississippi PowerShell User Group][3], [Mike Robbins][4], gave a presentation entitled "Using CIM Cmdlets and CIM Sessions" via Lync. + * Afterwards various group members participated in script and tell. + * A [recording of the meeting is available][5] on our [YouTube channel][6], please note that half way through our script club we had an issue with a duplicate audio track. + + [1]: http://www.manning.com/hicks/ + [2]: http://scriptinggames.org/ + [3]: http://mspsug.com/ + [4]: http://mikefrobbins.com + [5]: https://www.youtube.com/edit?video_id=KUw10Dc_igs&video_referrer=watch&ns=1 + [6]: https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2013/09/seeking-curators-for-powershell-ebooks/index.md b/content/articles/2013/09/seeking-curators-for-powershell-ebooks/index.md new file mode 100644 index 000000000..21c55ac9f --- /dev/null +++ b/content/articles/2013/09/seeking-curators-for-powershell-ebooks/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2013-09-23-seeking-curators-for-powershell-ebooks/ +title: Seeking Curators for PowerShell eBooks +authors: + - Don Jones +date: "2013-09-23T19:15:22+00:00" +categories: + - Announcements + - Books +aliases: + - /2013/09/seeking-curators-for-powershell-ebooks/ +--- + +[UPDATE: I think I've finally gotten all the books under curation - but if you've an idea for a PowerShell-related ebook, and would like to co-author or even be a principal author (I'll help out with logistics), still hit me up.] +As you may know, PowerShell.org hosts a number of free ebooks that have, to date, been written mainly by me. But I've recently been delighted to welcome some co-contributors - Forums regular Dave Wyatt has contributed new content to "Secrets of PowerShell Remoting," for example, and Matt Penny has volunteered to organize the forthcoming "Community Book of PowerShell Practices." +I'd like to try and sign up "curators" for some of our other free ebooks, including the forthcoming "Big Book of PowerShell Error Handling" and the "Creating Trend and Analysis Reports in PowerShell" titles, as well as - and this is one I'm really interested in getting someone for - the "Big Book of PowerShell Gotchas." +What's a curator do? +Mainly, incorporate community feedback (typos, etc) into future editions, as well as integrating new content. That content might be written by the curator, or contributed by someone else. We use a very simple Word template, and you'd use Calibre to produce PDF and EPUB from that. I provide cover art images and whatnot - this is mainly an "assemble, organize, and deal with the errata" process at a minimum. If you are passionate about the topic, you can of course become a co-author with me and add your own content (and I'm happy to help you do so). That's especially true for the "Gotchas" title, which is mainly a series of short articles that cover some of the shell's biggest speed bumps. +A copy of Word, Calibre (free) and a GitHub client (free) are needed, plus a few free hours every few months and the willingness to take on the job. You'll truly be helping: I often can produce extra content now and again, but actually spell-checking it, putting it into the book, making the EPUB version, and so on - believe it or not, that stuff takes me more time and is one reason the ebooks don't get updated more often. Sigh. +[Hit me up if you're interested][1] in helping out! + + [1]: http://concentratedtech.com/contact diff --git a/content/articles/2013/09/the-new-look-of-the-scripting-games/index.md b/content/articles/2013/09/the-new-look-of-the-scripting-games/index.md new file mode 100644 index 000000000..db3a5ef90 --- /dev/null +++ b/content/articles/2013/09/the-new-look-of-the-scripting-games/index.md @@ -0,0 +1,34 @@ +--- +url: /articles/2013-09-24-the-new-look-of-the-scripting-games/ +title: The New Look of the Scripting Games +authors: + - Don Jones +date: "2013-09-24T16:25:35+00:00" +categories: + - Announcements + - Scripting Games +aliases: + - /2013/09/the-new-look-of-the-scripting-games/ +--- + +I've been busily working on a new interface for the Scripting Games - we're still planning a Winter Games event - and wanted to share progress. You can click this thumbnail to see the full image. + + + [![The new Scripting Games features movable, resizable panels](https://powershell.org/wp-content/uploads/2013/09/games-150x150.png)](https://powershell.org/wp-content/uploads/2013/09/games.png) + + + + The new Scripting Games features movable, resizable panes + + + + +The new layout features movable, resizable panels, allowing you to position them however works best on your screen. No, they're not especially mobile-friendly. +As you can see (at least in implication), entries can consist of multiple files, as in a complex script module. There's a team-level discussion as well as (as shown) discussion threads for each file. Any player on the team can add new files, delete files, or modify existing files by uploading a replacement. This view shows that I joined the team "Aliens" after the current event had started, which is why I'm unable to contribute new files. +Your team won't be restricted to using the Scripting Games Web site. In fact, you can collaborate and communicate however you like. Use Git or PoshCode for your scripts, and e-mail or a discussion list for communications. It's your choice. +We'll be recruiting a team of Coaches, who will browse whatever you've added to the Scripting Games Web site in advance of the event deadline, offering their own comments - you can see that Coach comments are highlighted for easy recognition. It'll pay to drop code into the Web site every day so our coaches have something to comment upon, and to check in daily for any coach comments that may have been left. +The upcoming Games events will be more complicated - you've got a team to work with, so we figure you can handle an extra challenge. Event scenarios will be authored by a team of community all-star volunteers, including The Scripting Guys and various MVPs and enthusiasts. That should give each scenario a slightly different flavor, exposing you to a wider variety of real-world challenges. +Judging of team entries will involve a more complex scoring rubric than our past 1-to-5-stars technique - giving you a more detailed scorecard. Keep in mind that each team will be able to submit only one combined entry, which will give our judges fewer to look at - and more time to look at each one. The new rubric will still allow judges to express some personal tastes and opinions, so you shouldn't expect to be able to please everyone every time! +Team assembly will allow you to form your own team, or be automatically assigned to a team that needs players (teams MUST have 2 players to participate). We've rigged the system to ask for your time zone, and to display the average time zone offset of potential teams. That way, you can look for a team whose players are geographically close to you, helping to facilitate any real-time collaboration you might set up (via YouTube, Google+, or whatever). If you choose auto-assignment, the system looks for a team whose players are geographically close to you, relatively speaking. +Local user groups are encouraged to form their own team, and to have their own members join - that way, the Scripting Games can be the topic of a monthly meeting or two. +Things are still evolving and under development, but wanted to share this early look! diff --git a/content/articles/2013/09/winter-scripting-games-more-feedback-needed/index.md b/content/articles/2013/09/winter-scripting-games-more-feedback-needed/index.md new file mode 100644 index 000000000..3185134fb --- /dev/null +++ b/content/articles/2013/09/winter-scripting-games-more-feedback-needed/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2013-09-12-winter-scripting-games-more-feedback-needed/ +title: "Winter Scripting Games: More Feedback Needed" +authors: + - Don Jones +date: "2013-09-13T00:33:29+00:00" +categories: + - Scripting Games +aliases: + - /2013/09/winter-scripting-games-more-feedback-needed/ +--- + +So I'm continuing to work through some logistics regarding the Winter Scripting Games (and no, there's no dates set). +The intent of these Games, as I've written before, is to offer a _collaborative_ experience. You'll work in teams of (proposed) 2-6. You have two ways to join a team: Pick an existing one that needs players (you'll be shown the average time zone offset, in minutes, of the existing players, so that you can choose a team near you) or create a new team from scratch - which others can then join. You'd be welcome to "recruit" for your team using social media. +NB: _Collaborate_ does not mean _live online collaboration. _Your team could do a Google Hangout or whatever optionally, but we're only providing asynchronous collaboration. +You will be able to leave your team up to a point. That is, you could always LEAVE your team, but each event within the Games will have a deadline for joining - meaning if you're not on a team when the event starts, you'll have to wait for the next event to re-join a team. +My question right now revolves around the collaborative process. The idea is that the team has a single, shared code repository, meaning everyone on the team can see it. I want you to visualize this in your head, and then describe to me how you think it should work. +The overall idea is that your team works on the assignment together, and then forwards (by the deadline) a final team entry for judging. +Would you start by allowing one team member to upload an entry, and everyone would collaborate on it? Or would every member have the ability to upload a potential entry, and you'd all discuss which one you wanted to use as the team's starting point? If there can be multiple parallel entries, how will the team decide, and then indicate to the system, which one is the "final" one? Remember, the team only sends ONE entry up for judging. +NB: We will provide private team discussion threads within the system. You will not necessarily be able to comment on a given script file _per se, _but we'll provide a means to reference lines of code within the team discussion threads. That keeps the discussion in one place, but allows you to refer to specific wodges of code. +How will the code portion of the collaboration work? That is, when someone wants to provide a revision to the team entry, would they upload/paste an entirely new entry? Or would we provide a text editor so that you could edit the code that already exists? I'll note that we're _NOT NOT NOT_ providing an ISE experience - so a Web-based text editor might well leave room for unintentional errors. We won't help you with those. +If we use a paste-in text editor, we'd enable you to paste in an all-new entry, or to simply make quick changes to an existing entry, right in the Web page. That might be convenient. +The new system will recognize the concept of a given entry consisting of multiple files - e.g., a script module that includes a .psm1, .psd1, and .ps1xml file, all working as a unit. +Do we version-control this? That is, if everyone's uploading revisions, do we just keep 'em all, and indicate which one was most recent? That way you could always access older versions? Again, if each team gets a single entry, and each member can paste in new code or edit the existing code, this seems workable. We'd keep old versions so you could "roll back" if needed. +If we did that, would you NEED a version-to-version comparison tool? If so, the complexity of that may mean we don't run the Games this Winter. So think real hard about WANT vs. NEED. We COULD provide a way to download, in a ZIPped folder hierarchy, all versions of the entry, meaning you could then use local comparison tools on your computer to compare revisions. +Your thoughts? What do you think is the best workflow for this kind of Games? diff --git a/content/articles/2013/09/winter-scripting-games-tentatively-scheduled/index.md b/content/articles/2013/09/winter-scripting-games-tentatively-scheduled/index.md new file mode 100644 index 000000000..ef8464cb3 --- /dev/null +++ b/content/articles/2013/09/winter-scripting-games-tentatively-scheduled/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2013-09-29-winter-scripting-games-tentatively-scheduled/ +title: Winter Scripting Games Tentatively Scheduled +authors: + - Don Jones +date: "2013-09-29T16:34:46+00:00" +categories: + - Scripting Games +aliases: + - /2013/09/winter-scripting-games-tentatively-scheduled/ +--- + +We're tentatively scheduling the 2014 Winter Scripting Games for 4-6 weeks beginning January 6, 2014. Right now, we're running functional tests on the platform (which will be all-new and much-improved), and soliciting scenarios from MVPs and PowerShell celebrities. +As previously announced, players will work in teams of 2-6 in this edition of the Games, and it's never too early to start finding friends to form a team with you. Because you'll be working in teams, and because you'll have a full week to complete each scenario, expect more complex scenarios! You'll have to practice breaking down tasks and assigning them to team members. +You'll also need to think about how you want to collaborate as a team. We'll be providing a very basic private in-Game discussion thread for each team, but you're welcome to use Git, PoshCode, e-mail, MailChimp lists, or _whatever_ for your collaboration. You'll be able to submit your entries' files whenever you like, and revise them to your heart's content right up to the entry submission deadline. + +> As a tip, I'll _strongly_ suggest setting up a free repository on GitHub. It's very easy to use (free GUI tools are available), it's _great_ for version-controlled collaboration (that's the point of it), and we're going to try and set up a way where the Scripting Games system can automatically retrieve your latest files right from Git. That means, if you're using Git, you wouldn't have to manually copy-and-paste your entries into the Games! Git also offers the ability to create issues (bugs), maintain a project wiki, and more. It's a great system to learn to use. + +Even if you're collaborating outside the Games system (which we expect many will do), we encourage you to drop your current files into the Games system every day or so. We'll be recruiting expert Coaches to drop in, see what you're doing, and offer commentary using the in-Games discussion thread for your team. +Scoring will be provided by a panel of expert judges, who will be using multi-item scoring rubrics (which you'll be given as part of your scenario). That means you won't have a 1-to-5-star score, but rather a complete "scorecard" with multiple items, as well as comments from each judge. +Once scoring is complete, you'll be able to see all other teams' entries and scores, judge comments, and so on. +More details are still forthcoming, but we hope you're getting amped up about this next edition of the Scripting Games! diff --git a/content/articles/2013/09/writing-courseware-10961-powershell-class/index.md b/content/articles/2013/09/writing-courseware-10961-powershell-class/index.md new file mode 100644 index 000000000..1de3f9a98 --- /dev/null +++ b/content/articles/2013/09/writing-courseware-10961-powershell-class/index.md @@ -0,0 +1,57 @@ +--- +url: /articles/2013-09-05-writing-courseware-10961-powershell-class/ +title: "Writing Courseware: 10961 PowerShell Class" +authors: + - Don Jones +date: "2013-09-05T15:36:56+00:00" +categories: + - Training +aliases: + - /2013/09/writing-courseware-10961-powershell-class/ +--- + +We're in the process of working on a 10961C revision to the Microsoft PowerShell course, and I've been reviewing the anonymous comments submitted by MCTs and students on 10961A (the "B" rev, which is what was produced after our beta teach, is just now orderable so we don't have comments yet). +**By the way - if you're a student or MCT who has taken/delivered 10961A, you're welcome to [contact me directly][1] if you want to share any info on typos you found. Would like to fix those. **Microsoft unfortunately didn't bill 10961A as "pre-beta," which it was, and I think that may have not properly set some expectations. +Anyway, if you've ever taken a course and thought anything bad about the _courseware_ (not necessarily the instructor), take a look at these comment excerpts from this one course: + + + By day 3 (5 day class) most students felt over-whelmed. I had to move some of the chapters around to give them time to acclimate to the product before continuing onto more advanced topics. Students agreed that this shifting around of material was essential, allowing them to absorb what was covered in the first 2 days. + + + There was not nearly enough material to fill a 5 day class. Students ended up leaving very early on the last two days. + + + The class had too much repetition of some concepts. + + + Students were not given enough time or repetition on core fundamentals. + + +Right. Same class. No idea what to do with that, as a courseware designer. +(and by the way, this is after parsing through _hundreds_ of comments from students who took the class remotely and were extremely dissatisfied with the experience. Believe me, you want to take training live and in-person.) +There's also a question of, "what the heck were you expecting?" + + + was looking for more examples and understanding of using exchange and AD comandlet. + + + Missed basic knowledge of Workflows and Web Access. + + + Should include Flowchart among new features released in Version 3 [as soon as I figure out what feature 'flowchart' is, I'll get right on it] + + + There was nothing geared toward using PowerShell with SQL Server. + + + Some material and labs not as relevant for me specifically without a networking/server background. I will likely use exclusively for SharePoint. + + + The book should have covered creating functions that utilize pipeline content coming in, and Filtering commandlets. Discussion about creating Gui components or a reference to it in the book would be helpful. + + +Astonishing, because _none of these things are mentioned in the course description. _Can you imagine writing a generic PowerShell course that included examples specific to [__insert technology here__]? Everyone else in the room would be bored and hate it. Look, you've got one comment from a SharePoint admin with no networking/server experience. Goodness. A few folks suggested more AD examples - which I'd used in 10325, the predecessor course, and gotten tons of comments along the lines of, "I don't do AD in my organization so all of the examples were useless to me." O-kay! Can't win 'em all, I guess. +I think a lot of _instructors_ miss the point on teaching PowerShell, which is to focus on teaching the shell and its discoverability mechanisms. I think setting expectations with students is key, too - let them know you're _not_ covering Exchange or SQL or SharePoint or Lync or whatever, but instead focusing on the core shell. And not even _everything the shell does_ - 5 days isn't enough time. In fact, that's why 55039 is being offered - to provide the functions/programming side of the class. +Anywho - love your feedback if you've taught or taken the class! We have a few weeks in which to decide what we're doing with 10961C. + + [1]: http://concentratedtech.com/contact diff --git a/content/articles/2013/10/_index.md b/content/articles/2013/10/_index.md new file mode 100644 index 000000000..cc306cbfe --- /dev/null +++ b/content/articles/2013/10/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from October 2013" +description: "PowerShell.org Articles published in October 2013." +--- diff --git a/content/articles/2013/10/building-a-desired-state-configuration-configuration-part-2/index.md b/content/articles/2013/10/building-a-desired-state-configuration-configuration-part-2/index.md new file mode 100644 index 000000000..e38e5e2f2 --- /dev/null +++ b/content/articles/2013/10/building-a-desired-state-configuration-configuration-part-2/index.md @@ -0,0 +1,142 @@ +--- +url: /articles/2013-10-14-building-a-desired-state-configuration-configuration-part-2/ +title: Building a Desired State Configuration Configuration – Part 2 +authors: + - Steven Murawski +date: "2013-10-14T18:19:03+00:00" +categories: + - PowerShell for Admins + - Tutorials +aliases: + - /2013/10/building-a-desired-state-configuration-configuration-part-2/ +--- + +Ok, let's get back to creating a DSC configuration.  [If you haven't read the last post in this series, go back and do that now](https://powershell.org/2013/10/08/building-a-desired-state-configuration-configuration/), I'll wait.  Now with that out of the way, let's get back to it... + +## The High Points + + * [Overview](https://powershell.org/2013/10/02/building-a-desired-state-configuration-infrastructure/) + * [Configuring the Pull Server (REST version)](https://powershell.org/2013/10/03/building-a-desired-state-configuration-pull-server/) + * Creating Configurations ([one of two](https://powershell.org/2013/10/08/building-a-desired-state-configuration-configuration/), two of two - this post) + * [Configuring Clients](https://powershell.org/2013/11/06/configuring-a-desired-state-configuration-client/) + * [Building Custom Resources](https://powershell.org/2014/03/13/building-desired-state-configuration-custom-resources/) + * Packaging Custom Resources + * Advanced Client Targeting + +### Picking Back UP + +Now that we have some of the basics down, we can start to look deeper at how composable these configurations are. A DSC configuration defined in PowerShell offers several advantages, not the least of which is that a configuration can be parameterized. + +#### Parameterization + + +`configuration MyFirstServerConfig +{ + param ([string[]]$NodeName) + node $NodeName + { + WindowsFeature snmp + { + Name = 'SNMP-Service' + } + } +} +`With this simple tweak, I've taken a configuration that was hard-coded to one server name to one that can take an array of server names. The PowerShell savvy are probably going, "Big deal.. functions could do that since Monad". If you remember back in the last post, I showed how ConfigurationData could be used to pass data into a configuration. Then my main configuration did some stuff based on metadata about the node. My configuration was starting to look a bit complicated. The ability to parameterize configurations really helps us when we are ready for the next step, nesting configurations. + +#### Nesting Configurations + +Let's start with an example... + + +`$ConfigurationData = @{ + AllNodes = @( + @{NodeName = 'Server1';Role='Web'}, + @{NodeName = 'Server2';Role='FileShare'} + @{NodeName = 'Server3';Role=@('FileShare','Web')} + ) +} +configuration RoleConfiguration +{ + param ($Roles) + switch ($Roles) + { + 'FileShare' { + WindowsFeature FileSharing + { + Name = 'FS-FileServer' + } + } + 'Web' { + WindowsFeature Web + { + Name = 'web-Server' + } + } + } +} +configuration MyFirstServerConfig +{ + node $allnodes.NodeName + { + WindowsFeature snmp + { + Name = 'SNMP-Service' + } + RoleConfiguration MyServerRoles + { + Roles = $Node.Role + } + } +} +`So, what did we just see? I defined a parameterized configuration and then used it like a DSC Resource in my main configuration. Parameters are passed to the nested configuration in the exact same way as to a DSC Resource. This syntax also means that we can use DependsOn to create dependency chains between groups of functionality more easily. + + +`configuration MyFirstServerConfig +{ + node $allnodes.NodeName + { + WindowsFeature snmp + { + Name = 'SNMP-Service' + } + RoleConfiguration MyServerRoles + { + Roles = $Node.Role + DependsOn = '[WindowsFeature]snmp' + } + } +} +`We can leverage this technique of creating nested configurations to simplify our configuration scripts, minimize dependency chains, and provide an easy way to reuse configuration sections for multiple configurations, all using the same semantics of any DSC resource. + +#### Applying Configurations + +Once we have our configurations generated, we have a couple of ways to distribute and apply the configurations. We'll start assuming that we have generated our configurations for the servers we would like to target. + +##### Start-DscConfiguration + +Our first option is Start-DscConfiguration. We can point Start-DscConfiguration to the configuration files that we've generated (just point to the directory with the configuration files in them). + + +`Start-DscConfiguration -Path ./MyFirstServerConfig +`Doing this will attempt to run the configurations generated against any nodes specified. You can target specific servers by using the -computername or -cimsession parameters. +One downside to using Start-DscConfiguration is that any custom resources (not nested configurations) need to be present on the remote node BEFORE applying the configuration. +You CANNOT create a configuration that uses the file resource (or any other resource) to create the resource on disk during the DSC run. While this would be a cool trick, the resources contain a schema.mof file that defines the interface that DSC can use and the DSC engine will error if it cannot find the resource interface when the configuration is validated before it applies. One option is having two-phased configurations, one to distribute resources and the second to apply it. + +##### Pulling a Configuration + +The next alternative is to distribute configurations and resources using a pull Server. In box, DSC supports two types of pull server, an REST based pull server ([like described in my previous post][1]) and an SMB based pull server ([described here][2]). The pull server requires nodes to be labeled with a GUID (the configuration ID, which we'll talk about in an upcoming post), instead of server name. The pull server also requires that each config be accompanied by a checksum file with the file hash of the configuration file (example 72ed4117-fc49-4f81-822c-5bc59db64dd3.mof and 72ed4117-fc49-4f81-822c-5bc59db64dd3.mof.checksum).  One word off caution.. there can be no extra whitespace after the hash in the checksum file or the hash check will fail on the client node.  This means you cannot use + + +`Get-FileHash 72ed4117-fc49-4f81-822c-5bc59db64dd3.mof | out-file 72ed4117-fc49-4f81-822c-5bc59db64dd3.mof.checksum +`or + + +`Get-FileHash 72ed4117-fc49-4f81-822c-5bc59db64dd3.mof | set-content 72ed4117-fc49-4f81-822c-5bc59db64dd3.mof.checksum +`as those leave extra whitespace at the end of the file. I've been using + + +`[System.IO.File]::AppendAllText('72ed4117-fc49-4f81-822c-5bc59db64dd3.mof.checksum', (Get-FileHash 72ed4117-fc49-4f81-822c-5bc59db64dd3.mof).Hash) +`In my next post, I'll be talking about we can configure our clients to talk to a pull server, then we can see stuff really start to happen. + + [1]: https://powershell.org/2013/10/03/building-a-desired-state-configuration-pull-server/ + [2]: http://blog.cosmoskey.com/powershell/desired-state-configuration-in-pull-mode-over-smb/ diff --git a/content/articles/2013/10/building-a-desired-state-configuration-configuration/index.md b/content/articles/2013/10/building-a-desired-state-configuration-configuration/index.md new file mode 100644 index 000000000..623a3512a --- /dev/null +++ b/content/articles/2013/10/building-a-desired-state-configuration-configuration/index.md @@ -0,0 +1,316 @@ +--- +url: /articles/2013-10-08-building-a-desired-state-configuration-configuration/ +title: Building a Desired State Configuration Configuration +authors: + - Steven Murawski +date: "2013-10-08T16:36:33+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/10/building-a-desired-state-configuration-configuration/ +--- + +Now that's a title!  We've worked through my reasoning as to why I want Desired State Configuration (DSC) and how to build a pull server.  Today and in the next post we are going to look at how to create configurations which describe how our target systems are supposed to work. + +## The High Points + + * [Overview](https://powershell.org/2013/10/02/building-a-desired-state-configuration-infrastructure/) + * [Configuring the Pull Server (REST version)](https://powershell.org/2013/10/03/building-a-desired-state-configuration-pull-server/) + * Creating Configurations (one of two - this post, [two of two][1]) + * [Configuring Clients](https://powershell.org/2013/11/06/configuring-a-desired-state-configuration-client/) + * [Building Custom Resources](https://powershell.org/2014/03/13/building-desired-state-configuration-custom-resources/) + * Packaging Custom Resources + * Advanced Client Targeting + +## Building Configurations + +Configurations are the driving force for DSC.  A configuration is a [Managed Object Format](http://msdn.microsoft.com/en-us/library/aa823192(v=vs.85).aspx) (MOF) document that describes the how a specified server (or servers) should look. + +### What You See + +A basic configuration may look like + + +`/* +@TargetNode='8c7bfb10-8540-4a89-904c-5e6759de6d80' +@GeneratedBy=svc_build +@GenerationDate=10/07/2013 19:43:24 +@GenerationHost=OR-WEB01 +*/ +instance of Pagefile as $Pagefile1ref +{ +ResourceID = "[Pagefile]Default::[BaseServer]JustTheBasics::[VirtualServer]VMWare"; + InitialSize = 4294967296; + SourceInfo = "C:\\windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\SELocalConfiguration\\StackExchangeConfiguration\\StackExchangeConfiguration.psm1::14::5::Pagefile"; + ModuleName = "Pagefile"; + MaximumSize = 4294967296; + ModuleVersion = "1.0"; +}; +instance of PowerPlan as $PowerPlan1ref +{ +ResourceID = "[PowerPlan]Default::[BaseServer]JustTheBasics::[VirtualServer]VMWare"; + SourceInfo = "C:\\windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\SELocalConfiguration\\StackExchangeConfiguration\\StackExchangeConfiguration.psm1::20::5::PowerPlan"; + Name = "High performance"; + ModuleName = "PowerPlan"; + ModuleVersion = "1.0"; +}; +instance of MSFT_RoleResource as $MSFT_RoleResource1ref +{ +ResourceID = "[WindowsFeature]snmp::[BaseServer]JustTheBasics::[VirtualServer]VMWare"; + SourceInfo = "C:\\windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\SELocalConfiguration\\StackExchangeConfiguration\\StackExchangeConfiguration.psm1::25::5::WindowsFeature"; + Name = "SNMP-Service"; + ModuleName = "MSFT_RoleResource"; + ModuleVersion = "1.0"; +}; +instance of OMI_ConfigurationDocument +{ + Version="1.0.0"; + Author="build_service"; + GenerationDate="10/07/2013 19:43:24"; + GenerationHost="OR-WEB01"; +}; +`Each instance of a MOF class (except for the OMI_ConfigurationDocument) refer to a DSC Resource and provides the parameters that resource will be called with when the configuration engine runs.  There are a couple of properties that are not passed to the resource module.  The ResourceID is a unique identifier that indicates the resource and the configuration inheritance tree where it is defined (we'll dig deeper into that shortly).  The ModuleVersion is the version number of the PowerShell module (from the psd1) of the DSC Resource. + +### Getting From Here To There + +We don't want to write straight MOF files to define configuration, mainly because they are kind of verbose, with a some boilerplate  stuff for each resource.  Fortunately, we've got a Domain Specific Language (DSL) in PowerShell v4 to generate them. + +##### The Configuration Keyword + +PowerShell v4 contains the keyword "configuration", which allows us to provide a name for the configuration (like a function name). + + +`configuration MyFirstServerConfig +{ +} +`It looks just like how you would define a function or workflow. Now let's put something useful inside of it. + + +`configuration MyFirstServerConfig +{ + WindowsFeature snmp + { + Name = 'SNMP-Service' + } +} +`In this most simple of examples, we've defined a particular feature to be installed on a Windows Server. When we run this snippet, a wrapper function will be generated (kind of like how a workflow wrapper is generated). At this point, no MOF file has been created or applied, this simply creates a function that can generate a configuration based on the resources specified within. If we execute this configuration + + +`PS> MyFirstServerConfig +`we'll get a file named localhost.mof in a folder at $pwd/MyFirstServerConfig. + +##### Configuration Default Parameters - OutputPath + +If we want to specify the server the configuration applies to, we can wrap the resources in a Node block. + + +`configuration MyFirstServerConfig +{ + Node Server1 + { + WindowsFeature snmp + { + Name = 'SNMP-Service' + } + } +} +`This will create a configuration named Server1. Node names will be important as we move on to talking about targeting via Start-DscConfiguration and using the pull server. +We do have some options as to how the configuration gets generated. We can use the OutputPath to control where the configuration files are deposited. + + +`PS> MyFirstServerConfig -OutputPath c:\Configurations +`##### Configuration Default Parameters - ConfigurationData + +Our other major parameter is ConfigurationData. ConfigurationData is a way to separate out your environmental concerns from the configuration documents. We'll come back to this one after we explore a few more concepts. ConfigurationData is a hashtable that expects a certain structure. The hashtable should contain an key named AllNodes, which is an array of hashtables that describe the nodes whose data you want to inject. For example + + +`$ConfigurationData = @{ + AllNodes = @( + @{NodeName = 'Server1';Role='Web'}, + @{NodeName = 'Server2';Role='FileShare'} + ) +} +`NodeName is a common convention for specifying the node name.  We don't want to use Node, as there are some automatic variables populated in a configuration, one of which is $Node.  All the other keys in the hashtable representing a node are completely up to you. +_Just a quick aside.. the node name does not necessarily equate to the server name.  When we get in to targeting (a bit in this post and more in an upcoming one), we'll see how this is true._ +After we have some data in our ConfigurationData hashtable (and the variable doesn't need to be called ConfigurationData, I just did for convenience sake), we can use that to help drive our configuration. We'll tweak our configuration function a bit, so that it can take advantage of the extra data being supplied. + + +`configuration MyFirstServerConfig +{ + node $allnodes.NodeName + { + WindowsFeature snmp + { + Name = 'SNMP-Service' + } + switch ($Node.Role) + { + 'FileShare' { + WindowsFeature FileSharing + { + Name = 'FS-FileServer' + } + } + 'Web' { + WindowsFeature Web + { + Name = 'web-Server' + } + } + } + } +} +`Since this is a PowerShell DSL, I can use PowerShell functions, operators, and flow control to manipulate the configuration details. In this case, I'm using a switch statement to add roles to my server based on role definitions I'm supplying in my ConfigurationData. + + +`PS> MyFirstServerConfig -ConfigurationData $ConfigurationData + Directory: C:\scripts\MyFirstServerConfig +Mode LastWriteTime Length Name +---- ------------- ------ ---- +-a--- 10/8/2013 4:03 PM 1494 Server1.mof +-a--- 10/8/2013 4:03 PM 1516 Server2.mof +`If we look at the MOF files generated by this, we'll see that Server1 does not have the FS-FileServer role, but does have the Web-Server role. + + +`/* +@TargetNode='Server1' +@GeneratedBy=smurawski +@GenerationDate=10/08/2013 16:03:51 +@GenerationHost=OR-UTIL02 +*/ +instance of MSFT_RoleResource as $MSFT_RoleResource1ref +{ +ResourceID = "[WindowsFeature]snmp"; + SourceInfo = "::12::9::WindowsFeature"; + Name = "SNMP-Service"; + ModuleName = "MSFT_RoleResource"; + ModuleVersion = "1.0"; +}; +instance of MSFT_RoleResource as $MSFT_RoleResource2ref +{ +ResourceID = "[WindowsFeature]Web"; + SourceInfo = "::25::29::WindowsFeature"; + Name = "web-Server"; + ModuleName = "MSFT_RoleResource"; + ModuleVersion = "1.0"; +}; +instance of OMI_ConfigurationDocument +{ + Version="1.0.0"; + Author="smurawski"; + GenerationDate="10/08/2013 16:03:51"; + GenerationHost="OR-UTIL02"; +}; +`And Server2 has the reverse. + + +`/* +@TargetNode='Server2' +@GeneratedBy=smurawski +@GenerationDate=10/08/2013 16:06:31 +@GenerationHost=OR-UTIL02 +*/ +instance of MSFT_RoleResource as $MSFT_RoleResource1ref +{ +ResourceID = "[WindowsFeature]snmp"; + SourceInfo = "::13::9::WindowsFeature"; + Name = "SNMP-Service"; + ModuleName = "MSFT_RoleResource"; + ModuleVersion = "1.0"; +}; +instance of MSFT_RoleResource as $MSFT_RoleResource2ref +{ +ResourceID = "[WindowsFeature]FileSharing"; + SourceInfo = "::20::29::WindowsFeature"; + Name = "FS-FileServer"; + ModuleName = "MSFT_RoleResource"; + ModuleVersion = "1.0"; +}; +instance of OMI_ConfigurationDocument +{ + Version="1.0.0"; + Author="smurawski"; + GenerationDate="10/08/2013 16:06:31"; + GenerationHost="OR-UTIL02"; +}; +`To highlight a neat trick since we are using a switch statement and [switch can process collections](http://technet.microsoft.com/en-us/library/ff730937.aspx), we can specify more than one role in our hashtable and our configuration should be able to add all the required resources. + + +`$ConfigurationData = @{ + AllNodes = @( + @{NodeName = 'Server1';Role='Web'}, + @{NodeName = 'Server2';Role='FileShare'} + @{NodeName = 'Server3';Role=@('FileShare','Web')} + ) +} +configuration MyFirstServerConfig +{ + node $allnodes.NodeName + { + WindowsFeature snmp + { + Name = 'SNMP-Service' + } + switch ($Node.Role) + { + 'FileShare' { + WindowsFeature FileSharing + { + Name = 'FS-FileServer' + } + } + 'Web' { + WindowsFeature Web + { + Name = 'web-Server' + } + } + } + } +} +MyFirstServerConfig -ConfigurationData $ConfigurationData +`If we look at the configuration generated for Server3, we'll find both Web-Server and FS-FileServer roles described. + + +`/* +@TargetNode='Server3' +@GeneratedBy=smurawski +@GenerationDate=10/08/2013 16:06:31 +@GenerationHost=OR-UTIL02 +*/ +instance of MSFT_RoleResource as $MSFT_RoleResource1ref +{ +ResourceID = "[WindowsFeature]snmp"; + SourceInfo = "::13::9::WindowsFeature"; + Name = "SNMP-Service"; + ModuleName = "MSFT_RoleResource"; + ModuleVersion = "1.0"; +}; +instance of MSFT_RoleResource as $MSFT_RoleResource2ref +{ +ResourceID = "[WindowsFeature]FileSharing"; + SourceInfo = "::20::29::WindowsFeature"; + Name = "FS-FileServer"; + ModuleName = "MSFT_RoleResource"; + ModuleVersion = "1.0"; +}; +instance of MSFT_RoleResource as $MSFT_RoleResource3ref +{ +ResourceID = "[WindowsFeature]Web"; + SourceInfo = "::26::29::WindowsFeature"; + Name = "web-Server"; + ModuleName = "MSFT_RoleResource"; + ModuleVersion = "1.0"; +}; +instance of OMI_ConfigurationDocument +{ + Version="1.0.0"; + Author="smurawski"; + GenerationDate="10/08/2013 16:06:31"; + GenerationHost="OR-UTIL02"; +}; +`#### Next Up + +In the next post, we'll continue this topic and look at other ways we can parameterize configurations as well as nesting configurations.  We'll also touch on how to apply these configurations from Start-DscConfiguration and via a Pull Server.  Stay tuned! + + [1]: https://powershell.org/2013/10/14/building-a-desired-state-configuration-configuration-part-2/ diff --git a/content/articles/2013/10/building-a-desired-state-configuration-infrastructure/index.md b/content/articles/2013/10/building-a-desired-state-configuration-infrastructure/index.md new file mode 100644 index 000000000..50ad891ab --- /dev/null +++ b/content/articles/2013/10/building-a-desired-state-configuration-infrastructure/index.md @@ -0,0 +1,94 @@ +--- +url: /articles/2013-10-02-building-a-desired-state-configuration-infrastructure/ +title: Building a Desired State Configuration Infrastructure +authors: + - Steven Murawski +date: "2013-10-02T19:35:41+00:00" +categories: + - Tutorials +aliases: + - /2013/10/building-a-desired-state-configuration-infrastructure/ +--- + +This is a the kickoff in a series of posts about building a [Desired State Configuration (DSC)](http://technet.microsoft.com/en-us/library/dn249912.aspx) infrastructure. I'll be leveraging concepts I've been working on as I've been building out our DSC deployment at [Stack Exchange](http://stackexchange.com). + +## The High Points + + * Overview (this post) + * [Configuring the Pull Server (REST version)](https://powershell.org/2013/10/03/building-a-desired-state-configuration-pull-server/) + * Creating Configurations ([one of two](https://powershell.org/2013/10/08/building-a-desired-state-configuration-configuration/), [two of two](https://powershell.org/2013/10/14/building-a-desired-state-configuration-configuration-part-2/)) + * [Configuring Clients](https://powershell.org/2013/11/06/configuring-a-desired-state-configuration-client/) + * [Building Custom Resources](https://powershell.org/2014/03/13/building-desired-state-configuration-custom-resources/) + * Packaging Custom Resources + + + + * Advanced Client Targeting + +I'm starting today with the general overview of what I'm trying to accomplish and why I'm trying to accomplish this. The **what** and **why** are critical in determining the **how** + +## The Overview + +### Goal: + +All systems have basic and general purpose roles configured and monitored for drift via Desired State Configuration. + +### Reason: + +System configuration is the one of the silent killers for sysadmin (yes, I prefer sysadmin to IT Pro - deal with it). In the case where deployments are not automated, each system is unique, a snowflake that results from the our fallibility as humans. +The more steps involved that require human intervention allow for more potential failure points. Yes, if I make a mistake in my automation, then that mistake can be replicated out. But as Deming teaches with the Wheel of Continuous Improvement ([Plan, Do, Check, Act](http://totalqualitymanagement.wordpress.com/2009/02/25/deming-cycle-the-wheel-of-continuous-improvement/)),  we can't correct a process problem until we have a stable process. + + + [![](http://totalqualitymanagement.files.wordpress.com/2009/02/deming-wheel4.png?w=459&h=306)](http://totalqualitymanagement.wordpress.com/2009/02/25/deming-cycle-the-wheel-of-continuous-improvement/) + + + + Deming Cycle + + + + +Every intervention by a human adds instability to the equation, so first we need to make the process consistent. We do that by standardizing the location(s) of human intervention.  Those touch points become the areas that we can tweak to further optimize the system.  I'm getting a bit ahead of myself though. +Let's continue to look at how organizations tend to deploy systems.  Organizations tend to have several levels of flexibility in their organizations about how systems are built and provided for use.  The three main categories I see are: + + * Automated provisioning from a purpose built image + * Install and configure from checklist + * Install and configure on demand + +Usually, the size of the organization tends to indicate to what level they've automated deployments, but that is less true today.  Larger organizations tend to have more customized and automated deployments.  It's mainly been a matter of scale.  With virtualization and (please forgive me) cloud infrastructures, even smaller organizations can have ever increasing numbers of servers to manage, with admin to server ratios of 1 to hundreds being common and where the number of servers starts to overtake the client OS count. +If we aren't in a fully automated deployment environment, each server has the potential to be subtly (or not so subtly) unique.  Checklists and scripts can help with how varied our initial configurations can start out, but each server is like a unique piece of art ([or a snowflake](http://martinfowler.com/bliki/SnowflakeServer.html)). + + + [![](http://upload.wikimedia.org/wikipedia/commons/7/7d/Poseidon_sculpture_Copenhagen_2005.jpg)](http://upload.wikimedia.org/wikipedia/commons/7/7d/Poseidon_sculpture_Copenhagen_2005.jpg) + + + + Try to make more than one of me... + + + + +That's kind of appealing to sysadmins who like to think of themselves as crafters of solutions.  However, in terms of maintainability, it is a nightmare.  Every possible deviation in settings can cause problems or irregularities in operations that can be difficult to track down.  It's also much more work overall. +What we want our servers to be is like components fresh off the assembly line. + + + [![](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSJmOiGPPMI-4_RYvO-um41VjgVBE6i04TQWKUF83Gc_RhVbE8r7FyJcYCt)](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSJmOiGPPMI-4_RYvO-um41VjgVBE6i04TQWKUF83Gc_RhVbE8r7FyJcYCt) + + + + Keeping it consistent + + + + +Each server should be consistently stamped out, with minimal deviations, so that troubleshooting across like servers is more consistent.  Or, even more exciting, if you are experiencing some local problems, refreshing the OS and configuration to a known good state becomes trivial.  Building the assembly line and work centers can be time consuming up front, but pays off in the long haul. + +#### My Situation: + +At Stack Exchange, we are a mix of these categories.  All of our OS deployments are driven by PXE boot deployments.  For our Linux systems, we fall into the first group.  We can deploy an OS and make the addition to our [Puppet](https://puppetlabs.com/puppet/puppet-open-source) system, which will configure the box for the designated purpose.  For our Windows systems, we operate out of the second and third groups.  We have a basic checklist (about 30-some items) that details the standards our systems should be configured with, but once we get to configuring the server for a specific role, it's been a bit more chaotic.  As we've migrated to Server 2012 for a web farm and SQL servers, we've began to script out our installations for those roles, so they were kind of automated, but in a very one-time run way. +Given where we stood with our Windows deployments and the experience we had with Puppet, we looked at using Puppet with our Windows systems (like [Paul Stack](https://twitter.com/stack72) - [podcast](http://herdingcode.com/herding-code-174-paul-stack-on-automating-windows-configuration-management-with-puppet-and-powershell/), [video](https://vimeo.com/68226718)) and decided not to go that route (why is probably worthy of another post at another time).  That was around the time that DSC was starting to peek it's head out from under the covers of the Server 2012 R2 preview.  Long story made short, we decided to use DSC to standardize our Windows deployments and bring us parity with our Linux infrastructure in terms of configuration management. + +#### Proposed Solution: Desired State Configuration + +DSC offers us a pattern for building idempotent scripts (contained in DSC resources) and offers an engine for marshaling parameters from an external source (in my case a DSC Pull Server, but could be a tool like Chef or some other configuration management product) to be executed on the local machine, as well as coordinating the availability of extra functionality (custom resources).  I'm building an environment where a deployed server can request it's configuration from the pull server and reduce the number of touch points to improve consistency and velocity in server deployments. +**Next up, I'm going to talk about how I've configured my pull server, including step by step instructions to set one up on Server 2012 R2.** diff --git a/content/articles/2013/10/building-a-desired-state-configuration-pull-server/index.md b/content/articles/2013/10/building-a-desired-state-configuration-pull-server/index.md new file mode 100644 index 000000000..d5a068ec2 --- /dev/null +++ b/content/articles/2013/10/building-a-desired-state-configuration-pull-server/index.md @@ -0,0 +1,57 @@ +--- +url: /articles/2013-10-03-building-a-desired-state-configuration-pull-server/ +title: Building a Desired State Configuration Pull Server +authors: + - Steven Murawski +date: "2013-10-03T19:40:59+00:00" +categories: + - PowerShell for Admins + - Tutorials +aliases: + - /2013/10/building-a-desired-state-configuration-pull-server/ +--- + +Quick recap, I'm working through a series of posts about the [Desired State Configuration](http://technet.microsoft.com/en-us/library/dn249912.aspx) infrastructure that I'm building at [Stack Exchange](http://stackexchange.com), including some how-to's. + +## The High Points + + * [Overview](https://powershell.org/2013/10/02/building-a-desired-state-configuration-infrastructure/) + * Configuring the Pull Server (REST version) (this post) + * Creating Configurations ([one of two](https://powershell.org/2013/10/08/building-a-desired-state-configuration-configuration/), [two of two](https://powershell.org/2013/10/14/building-a-desired-state-configuration-configuration-part-2/)) + * [Configuring Clients](https://powershell.org/2013/11/06/configuring-a-desired-state-configuration-client/) + * [Building Custom Resources](https://powershell.org/2014/03/13/building-desired-state-configuration-custom-resources/) + * Packaging Custom Resources + * Advanced Client Targeting + +I started with an overview of **what** and **why**.  Today, I'm going to start the **how**. + +### Building a Pull Server + +I'm going to describe how to do this with Server 2012 R2 RTM (NOTE: this is not the General Availability  release, so there may be changes at GA), since that's the environment I'm working most in.  If there is enough demand, I may follow up with how to do this using the Windows Management Framework on downlevel operating systems after the GA version of WMF 4 is released. +The first step is adding the required roles and features, including the DSC Service. + + +`Add-WindowsFeature Dsc-Service +`Fortunately, the Dsc-Service feature has the right dependencies configured so IIS, the correct modules, and the Management OData Extension are all enabled. +Next we need to set up the IIS web site: + + * Create an directory to serve the web application from (I'll use c:\inetpub\wwwroot\PSDSCPullServer) + * Copy several files from $pshome/modules/psdesiredstateconfiguration/pullserver (Global.asax, PSDSCPullServer.mof, PSDSCPullServer.svc, PSDSCPullServer.xml) to this directory. + * Copy PSDSCPullServer.config and rename it to web.config + * Create a subdirectory named "bin". + * Copy one file from $pshome/modules/psdesiredstateconfiguration/pullserver (Microsoft.Powershell.DesiredStateConfiguration.Service.dll) to the "bin" directory. + * In IIS, create an application pool that runs under the "Local System" account. + * In, IIS, create a new site (or application in an existing site or just use the existing default site) + * Point the site or application root to the directory you designated as the root of the site. + * Unlock the sections of the web config as below + + +`$appcmd = "$env:windir\system32\inetsrv\appcmd.exe" +& $appCmd unlock config -section:access +& $appCmd unlock config -section:anonymousAuthentication +& $appCmd unlock config -section:basicAuthentication +& $appCmd unlock config -section:windowsAuthentication +`Now we need to set up the location where the pull server content will be served from.  Installing the DSC Service feature creates a default location ( $env:programfiles\WindowsPowerShell\DscService ).  There'll you find sub-directories for configuration and modules.  We can use these folders or we can create another location.  I'm going to stick with the defaults for now.  We've got a few steps left. +First, we need to copy the Devices.mdb from $pshome/modules/psdesiredstateconfiguration/pullserver to the root of our pull server data location (in this case, $env:programfiles\WindowsPowerShell\DscService ) +Update the web.config app settings with the following settings:`After that your pull server should be up and running.  You should see something like this if you navigate to http://yourpullserver/psdscpullserver.svc +[![PullServerDefaultUrl](https://powershell.org/wp-content/uploads/2013/10/PullServerDefaultUrl-300x83.png)](https://powershell.org/wp-content/uploads/2013/10/PullServerDefaultUrl.png) diff --git a/content/articles/2013/10/congrats/index.md b/content/articles/2013/10/congrats/index.md new file mode 100644 index 000000000..0627daa25 --- /dev/null +++ b/content/articles/2013/10/congrats/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-10-01-congrats/ +title: Congrats! +authors: + - Don Jones +date: "2013-10-01T15:10:03+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/10/congrats/ +--- + +Congrats to our CFO, Jason Helmick, on receiving his first MVP Award! diff --git a/content/articles/2013/10/desired-state-configuration-general-availability-changes/index.md b/content/articles/2013/10/desired-state-configuration-general-availability-changes/index.md new file mode 100644 index 000000000..09a0ef5f7 --- /dev/null +++ b/content/articles/2013/10/desired-state-configuration-general-availability-changes/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2013-10-18-desired-state-configuration-general-availability-changes/ +title: Desired State Configuration – General Availability Changes +authors: + - Steven Murawski +date: "2013-10-18T13:19:21+00:00" +categories: + - Tips and Tricks +aliases: + - /2013/10/desired-state-configuration-general-availability-changes/ +--- + +PowerShell DSC, along with Windows Server 2012 R2 has reached General Availability!  Yay! +However, there is (at least one so far) _**breaking change**_** **in Desired State Configuration (DSC). +Fortunately, the change is in an area I haven't blogged about yet.. creating custom resources.  Unfortunately, it does mean I'll have to update the [GitHub repository](https://github.com/PowerShellOrg/DSC) and all my internal content (should be done by early next week). +The short version is that DSC resources are now resources inside modules, rather than each resource being independent modules.  The benefit of this is that now DSC resources won't pollute the module scope, each resource won't need its own psd1 file (the source module will require one though), and it provides an easier way to group resources, which wasn't really possible before. +So, with GA, resources should go under the module root in a folder DSCResources.  You can have one or more resources in one PowerShell module.  The PowerShell module version is what will be used for the resource version number, so if you have several resources, a version number bump affects all the resources in the module. +I'll be picking back up with the DSC series next week with how to configure DSC clients, so stay tuned. diff --git a/content/articles/2013/10/did-you-attend-the-2013-powershell-summit/index.md b/content/articles/2013/10/did-you-attend-the-2013-powershell-summit/index.md new file mode 100644 index 000000000..320061eab --- /dev/null +++ b/content/articles/2013/10/did-you-attend-the-2013-powershell-summit/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2013-10-17-did-you-attend-the-2013-powershell-summit/ +title: Did you attend the 2013 PowerShell Summit? +authors: + - Don Jones +date: "2013-10-17T15:45:10+00:00" +categories: + - PowerShell Summit +aliases: + - /2013/10/did-you-attend-the-2013-powershell-summit/ +--- + +I'm looking to hear from folks who attended the PowerShell Summit North America 2013. Specifically, I'd love to hear what you thought of it. What value did you get? If someone were considering attending in 2014, what advice would you offer them? How should they approach the boss? What did you, personally, "take home" from the Summit in the way of new information or skills? +Drop a comment below. Some comments might be re-published as standalone posts as we try to help people understand what the Summit is all about, and why they might want to attend. Thanks! diff --git a/content/articles/2013/10/help-me-design-the-advanced-powershell-class/index.md b/content/articles/2013/10/help-me-design-the-advanced-powershell-class/index.md new file mode 100644 index 000000000..c223023f8 --- /dev/null +++ b/content/articles/2013/10/help-me-design-the-advanced-powershell-class/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2013-10-12-help-me-design-the-advanced-powershell-class/ +title: Help me Design the Advanced PowerShell Class! +authors: + - Don Jones +date: "2013-10-12T16:06:39+00:00" +categories: + - Training +aliases: + - /2013/10/help-me-design-the-advanced-powershell-class/ +--- + +I've been asked to work on an "advanced" PowerShell class. Now, I don't like the "advanced" word very much, because it means something different to everyone, depending on their experience. So I'm trying to make the class focus on "powerful, practical things you can do with PowerShell that definitely drift into programming and scripting." +You can tell me what you think by [taking an online survey about the proposed outline][1], which will be online through October 18th, 2013. + + [1]: http://674004.polldaddy.com/s/advanced-powershell-class-design diff --git a/content/articles/2013/10/leak-powershell-summit-na-2014-speakers/index.md b/content/articles/2013/10/leak-powershell-summit-na-2014-speakers/index.md new file mode 100644 index 000000000..12107c483 --- /dev/null +++ b/content/articles/2013/10/leak-powershell-summit-na-2014-speakers/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2013-10-10-leak-powershell-summit-na-2014-speakers/ +title: "LEAK: PowerShell Summit NA 2014 Speakers" +authors: + - Don Jones +date: "2013-10-10T19:21:05+00:00" +categories: + - PowerShell Summit +aliases: + - /2013/10/leak-powershell-summit-na-2014-speakers/ +--- + +I got a glance at the "short list" of speakers for the PowerShell Summit North America 2014. While none of these names are guaranteed - these guys haven't even been contacted to confirm - they'll _definitely_ receive an invite in the next few days. +First up, Mike Pfeiffer. This excites me because Mike's a former MVP, and now a Premier Field Engineer (PFE) with Microsoft. He _literally _wrote the book on managing Exchange Server with PowerShell, and should be a great addition to our new Domain-Specific track. +Next, Steven Murawski. I'm betting he'll be asked to deliver talks on Desired State Configuration (DSC), something he's been playing with intensely at his job. Yeah, _production use of DSC_. +Ed Wilson's going to be invited. What's a Summit without the Scripting Guy?!?!? +Ashley McGlone, too - another PFE, which gives us some awesome from-the-field experience, especially from large-scale environments where PFEs tend to work. Should be awesome stuff. +I imagine I'll be invited to speak , along with my often-co-author Jeffery Hicks and _PowerShell In Depth_ co-author Richard Siddaway. Richard's a WMI master, and his talks in 2013 were very well-received. Jeff, of course, is Jeff - it'll be a fun talk or two, whatever they're about. +I saw Adam Driscoll's name on the list (uber-developer with a ton of PowerShell experience), Jason Helmick (I'm hoping he'll do a deeply in-depth talk on PowerShell Web Access, since he's pretty much mastered all the not-documented intricacies of setting it up), and a few more. +Early November should see the schedule finalized. Stay tuned. diff --git a/content/articles/2013/10/more-congrats/index.md b/content/articles/2013/10/more-congrats/index.md new file mode 100644 index 000000000..4c0846788 --- /dev/null +++ b/content/articles/2013/10/more-congrats/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-10-01-more-congrats/ +title: More Congrats! +authors: + - Don Jones +date: "2013-10-01T19:29:51+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/10/more-congrats/ +--- + +Another kudos to Jon Walz, host of the long running PowerScripting Podcast, for his first and well-deserved MVP Award! diff --git a/content/articles/2013/10/more-summit-speaker-names-leaked/index.md b/content/articles/2013/10/more-summit-speaker-names-leaked/index.md new file mode 100644 index 000000000..c94695a1d --- /dev/null +++ b/content/articles/2013/10/more-summit-speaker-names-leaked/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2013-10-18-more-summit-speaker-names-leaked/ +title: More Summit Speaker Names Leaked +authors: + - Don Jones +date: "2013-10-18T16:36:24+00:00" +categories: + - PowerShell Summit +aliases: + - /2013/10/more-summit-speaker-names-leaked/ +--- + +So, I got hold of one of the Summit planning spreadsheets and have the list of speaker names. Now, these folks haven't yet confirmed, so there are obviously possible changes, but here's who'll be invited based on their proposals: + + * Augh, they caught me! The **complete** session list isn't yet finalized, and there are a few on the "final cut list" that may not actually physically fit, so stay tuned... + +Lotta Jasons in there. Hmm, maybe I shouldn't put Helmick in charge of this again. He appears to be partial. There's also several slots for PowerShell product team members that haven't yet been sorted; they may come in a bit closer to the show, once the team has a better grip on their short-term work schedule. +That's about **63 sessions total**. Wow. We're planning to run continuous sessions from 9am to noon, and then from 1pm to 5pm every day, spread across three tracks. There'll also be welcome address at 8:15am Monday morning. +Please - tell a colleague. Help us get the word out, because this is going to be _amazing. _ diff --git a/content/articles/2013/10/phillyposh-10032013-meeting-summary/index.md b/content/articles/2013/10/phillyposh-10032013-meeting-summary/index.md new file mode 100644 index 000000000..75afc9f42 --- /dev/null +++ b/content/articles/2013/10/phillyposh-10032013-meeting-summary/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2013-10-13-phillyposh-10032013-meeting-summary/ +title: PhillyPoSH 10/03/2013 meeting summary and presentation materials +authors: + - John Mello +date: "2013-10-14T00:40:19+00:00" +aliases: + - /2013/10/phillyposh-10032013-meeting-summary/ +--- + +* [John Mello][1] gave a presentation on creating HTML reports in PowerShell, [a copy of his presentation and scripts can be found here][2] + * [TJ Turner][3] gave a presentation on Community Defined Best Practices, [a copy of his presentation can be found here][4] + * We had user error audio issues with Lync throughout the meeting so a recording will not be posted to our [YouTube channel][5], + * We celebrated our 1st anniversary! + +[![PhillyPosh_cake_10_03_2013](https://powershell.org/wp-content/uploads/2013/10/PhillyPosh_cake_10_03_2013-300x168.jpg)](https://powershell.org/wp-content/uploads/2013/10/PhillyPosh_cake_10_03_2013.jpg) + + [1]: http://mellositmusings.com/ + [2]: https://powershell.org/wp-content/uploads/2013/10/PhillyPosh_10_03_2013.zip + [3]: https://twitter.com/techguytj + [4]: https://powershell.org/wp-content/uploads/2013/10/PhillyPosh_10_03_03_Community_Best_Practices.zip + [5]: https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2013/10/powershell-scripting-and-toolmaking-classroom-training-course-now-available-to-microsoft-training-centers/index.md b/content/articles/2013/10/powershell-scripting-and-toolmaking-classroom-training-course-now-available-to-microsoft-training-centers/index.md new file mode 100644 index 000000000..bd1d431e5 --- /dev/null +++ b/content/articles/2013/10/powershell-scripting-and-toolmaking-classroom-training-course-now-available-to-microsoft-training-centers/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2013-10-28-powershell-scripting-and-toolmaking-classroom-training-course-now-available-to-microsoft-training-centers/ +title: "PowerShell \"Scripting and Toolmaking\" Classroom Training Course Now Available to Microsoft Training Centers" +authors: + - Don Jones +date: "2013-10-28T17:11:03+00:00" +categories: + - Training +aliases: + - /2013/10/powershell-scripting-and-toolmaking-classroom-training-course-now-available-to-microsoft-training-centers/ +--- + +Attention Microsoft training centers! Microsoft's Courseware Marketplace now offers course 55039AC, "Windows PowerShell Scripting and Toolmaking." Designed as a 5-day course, it's a spiritual "Part 2" to Microsoft Official Curriculum course 10961. +With 10961, the goal was to provide a founding in PowerShell basics, in a somewhat product-neutral way. That is, the course doesn't cover Exchange, or SharePoint, or AD; it focuses on pure PowerShell. Unlike its predecessor, 10325, the 10961 course kind of "stops short" of actual scripting. It shows you how to build a parameterized script, but doesn't dig into advanced functions, debugging, error handling, and the like. There was a feeling - which has been largely upheld through customer feedback - that a sizable audience needed to get the shell basics under their belt, and weren't necessarily comfortable leaping into coding. 10325 kind of breezed through scripting at a somewhat high level, and didn't have time to offer much in the way of practices and other guidance, and it didn't really set you up for building reusable units of automation. +That's where 55039AC comes in. It is a scripting class, pure and simple, and it focuses on building reusable units of automation according to best practices and patterns. More time is devoted to design, structure, procedural error handling, and so on. There's also deeper coverage of module building, including building custom formatting views, and there's even an introduction to Workflow. Although designed for v3, the course is pretty version-agnostic, meaning it's suitable for someone who wants to use PowerShell v2, v3, or beyond. And, because it's a Courseware Marketplace offering, it's compatible with Software Assurance (SA) training vouchers. +Training centers are welcome to combine 10961 and 55039 to create an "accelerated" class that includes heavier scripting coverage than 10961 alone. I do that myself, actually, although it's a pretty hardcore week. If you're interested in doing that, [contact me][1] and I can provide some of the accelerated-delivery outlines that I use. +55039's modules are all standalone - with a twist. Students are encouraged to use and evolve a single code project throughout several modules. However, if you're not teaching all of the modules, or if a student falls behind, each lab comes with a complete "starting point" that keeps everyone on the same page. +55039 has already been beta-taught, and of course I [welcome feedback][1] if you've taught the course or taken it as a student. +My company also offers licensing for this course outside the Courseware Marketplace, mainly geared to training centers who want an unlimited perpetual license to reproduce the course materials on their own. We know courseware costs are a significant concern, so we're trying to offer something reasonable there. +Both 10961 and 55039 (or at least a subset of 55039; we're still working on exactly what) will be considered pre-requisites for the upcoming 3-day 10962 course, which will focus on advanced PowerShell techniques for us in production environments, including database connectivity, report generation, and so on. + + [1]: http://concentratedtech.com/contact diff --git a/content/articles/2013/10/questions-about-an-advanced-powershell-class-design/index.md b/content/articles/2013/10/questions-about-an-advanced-powershell-class-design/index.md new file mode 100644 index 000000000..7a733238b --- /dev/null +++ b/content/articles/2013/10/questions-about-an-advanced-powershell-class-design/index.md @@ -0,0 +1,37 @@ +--- +url: /articles/2013-10-15-questions-about-an-advanced-powershell-class-design/ +title: Questions about an Advanced PowerShell Class Design +authors: + - Don Jones +date: "2013-10-15T19:45:18+00:00" +categories: + - Training +aliases: + - /2013/10/questions-about-an-advanced-powershell-class-design/ +--- + +As we continue collecting responses to an outline survey about an Advanced PowerShell class, I've come up with a couple of questions and would appreciate any feedback you'd care to leave here. +Keep in mind that we're a bit bound by this course being Microsoft Official Curriculum. I gotta make sure, in other words, that the average MCT can teach it. Ahem. I also have to face facts that people don't read or obey course pre-requisite suggestions, and that a lot of people taking the course will have zero programming background. + + +## Question 1: GUI + +First, we desperately want to include some module on "building friendly GUI tools for techs and end-users." It's a massively demanded topic. That said, hand-coding a GUI in either WinForms or WPF is physically painful and time-consuming, and nobody would do it. Asking the class to use SAPIEN PowerShell Studio is probably not on the table; Microsoft has rules, these days, about third-party applications in classes, even if they're free (which Studio isn't). Using Visual Studio to generate WPF XAML is probably also out of the question - it adds a lot of build effort for just a single module. +So I'm down to a couple of options. Option A would be to provide students with a basic module that used PowerShell commands to construct a WinForms GUI. They would have after-class access to the module, too. After all, the big thing to teach here is less about how to physically build a GUI (if you were serious about it, you'd get PowerShell Studio), and more about the process of hooking up code to the GUI. By providing a module that shortcuts the hand-coding effort, we'd get to the important bit. +But there's also a valid perspective that creating little distributable GUI tools is dumb, and that you should be building Web-based ones instead. We could certainly build a module around a simple ASPX page - which is much easier to hand-code with a few examples in front of you - that hosts the PowerShell engine to execute PowerShell commands. They're centralized, great self-service tools, and easy to crank out once you've got a pattern to work from (which we'd provide in the class). +Thoughts? + + +## Question 2: Workflow + +We'd originally proposed a workflow overview module, with a basic example. Folks have quite rightly commented that workflow isn't all it was hyped to be. It's slow, in many cases. It's hard. It isn't really PowerShell. There aren't a ton of killer examples that you can cover in the scope of a class. +But it offers parallelization, which is a great feature. So we're considering replacing workflow with a module on parallelizing PowerShell. My thought is to do that mainly with jobs. Jobs work very consistently inside the shell, and are easy to use. They have some straightforward caveats, like the fact that they return serialized objects. +There's an argument to be made for runspace pools, too. But those get very programmer-y. You have to start worrying about concurrency, thread safety, thread and pool management, and a lot more. I'm not sure, in the context of a PowerShell class, we can sufficiently cover all those extras so that someone could be safely effective with runspace pools. I get that they're more flexible and low-level, but they're a big topic, and nothing else in the course "leads up" to that level of .NET programming. +Thoughts? + + +## Anything Else? + +Any other suggestions aside from these two questions would be better served in the [original survey][1]. I'm not the only one evaluating those responses, and that survey is the only place we can guarantee the entire team will see everything. + + [1]: http://t.co/Pv7lmFsUWu diff --git a/content/articles/2013/10/seeking-coaches-and-judges-for-the-winter-scripting-games/index.md b/content/articles/2013/10/seeking-coaches-and-judges-for-the-winter-scripting-games/index.md new file mode 100644 index 000000000..35e092b1e --- /dev/null +++ b/content/articles/2013/10/seeking-coaches-and-judges-for-the-winter-scripting-games/index.md @@ -0,0 +1,43 @@ +--- +url: /articles/2013-10-02-seeking-coaches-and-judges-for-the-winter-scripting-games/ +title: Seeking Coaches and Judges for the Winter Scripting Games +authors: + - Don Jones +date: "2013-10-02T17:58:14+00:00" +categories: + - Announcements + - Scripting Games +aliases: + - /2013/10/seeking-coaches-and-judges-for-the-winter-scripting-games/ +--- + +We're now seeking volunteer Coaches and Judges for the Winter Scripting Games! +The Games are tentatively scheduled to run for 4-6 weeks starting January 6th, 2014. There will be 4-6 events, each lasting one week. + + +## Coaches + +Coaches have access to all teams' entries and private discussion threads for the week while entries are being developed and accepted. Coaches are meant to log in _throughout_ that one-week period, evaluate what teams have submitted so far, and offer comments and advice in the in-Game discussion thread. +![6-002](https://powershell.org/wp-content/uploads/2013/09/6-002.png) +Coaches' comments receive a special flag, helping teams focus on them quickly. Note that teams are not required to use the in-Game discussion thread - they can discuss via email or elsewhere. Teams are also not required to continually submit entry files for coach review, so for some teams, coaches will have nothing to offer. +Team discussions are private to the team members and coaches; discussions will not be made public. +We'll accept as many coaches as want to participate. Note that you **cannot** be both a coach and a judge, and coaches are not permitted to participate on a team as a player. + + +## Judges + +We will accept a small panel of judges. After the event concludes, you'll have several days to review _all_ team entries. You'll complete a scorecard as shown, and offer any comments that justify your scoring. +[![6-001](https://powershell.org/wp-content/uploads/2013/09/6-001.png)](https://powershell.org/wp-content/uploads/2013/09/6-001.png) +Scorecards may have anything from just a few scoring items to more than a dozen; each scoring item corresponds to a requirement in the event scenario. Keep in mind that teams contain from 2-6 players, and there's only one event per team, so there will be fewer overall entries than in past years. Entries may, however, consist of multiple files. Some scenarios may ask teams to run their scripts, capture a transcript, and include the transcript in the entry - in those cases, judges will be able to see entries' output without running the scripts themselves. +We will provide judges the ability to download _all_ event entries for _all_ teams via a single ZIP file. That will enable offline review, if desired; you can then log in to submit your scorecards for each team. +Judge scores and comments, along with the judges' names, will be made public after scoring concludes. +Judges **cannot** participate as either players or coaches. + + +## Want to Volunteer? + +If you'd like to volunteer, [sign up for the appropriate (coach or judge) mailing list][1]. Note that we will only be accepting a limited number of judges, so not everyone who volunteers may be selected. However, **please do not sign up for both lists. **You need to pick one. If you volunteer to be a judge but aren't selected, you can go back later and sign up for the coach list. +Signing up at this stage **is not a commitment ** - you're just expressing an interest. We'll provide more information closer-in, and you can always opt-out prior to the start of the Games. + + + [1]: http://powershell.hosted.phplist.com/lists/?p=subscribe&id=6 diff --git a/content/articles/2013/10/the-shell-vs-the-host/index.md b/content/articles/2013/10/the-shell-vs-the-host/index.md new file mode 100644 index 000000000..960d03794 --- /dev/null +++ b/content/articles/2013/10/the-shell-vs-the-host/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2013-10-19-the-shell-vs-the-host/ +title: The Shell vs. The Host +authors: + - Don Jones +date: "2013-10-19T18:03:11+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/10/the-shell-vs-the-host/ +--- + +One thing that's often _very_ confusing about PowerShell is the difference between the shell itself - what I'll call _the engine_ in this article - and the application that hosts the engine. +You see, you as a human being can't really interact directly with PowerShell's engine. Instead, you need a _host application_ that lets you do so. The standard console - PowerShell.exe - is one such host; the Integrated Script Environment (ISE) is another. Those hosts "spin up" a _runspace, _which is essentially an instance of the PowerShell engine. When you type a command and hit enter, the host creates a pipeline, jams your command into it, and then deals with the output. +A number of standardized PowerShell commands actually require the host to implement some kind of command support. For example, most of the core Write- cmdlets actually depend upon the host to do something. Write-Verbose is a great example: The command causes the engine to spew text into the Verbose pipeline; the host is responsible for doing something with it. In the case of the console host, the Verbose text is displayed as yellow text (by default) preceded by the word "VERBOSE:". +When you develop a script using the ISE or the console (which behave pretty similarly for most of the core commands), you get used to your script behaving in a certain way. If you then move that script over to another host - perhaps a runbook automation system that runs PowerShell scripts by hosting the engine, rather than by launching PowerShell.exe - you may get entirely different behavior. +Here's a perfect example: most of the "built-in" variables you're used to working with in the ISE or the console aren't actually built into the _engine, _they're built into those _hosts. _For example, since the host is responsible for presenting verbose output, the _host_ is what creates and uses the $VerbosePreference variable. When your script is running in a different host, $VerbosePreference may not exist, and indeed verbose output may simply be ignored. An off-the-shelf PowerShell runspace doesn't actually come with very much "built-in" at all, so scripts can behave _very_ differently. +It's pretty important to understand these potential differences. When a developer sets out to create their own host application - like most of the commercial script editors do - it can be very confusing and frustrating, because they essentially have to reverse-engineer much of what the PowerShell.exe console application is doing, so that they can provide an equivalent experience. But you should never _assume_ that a script's behavior under one host will be consistent in all other hosts; test and verify. diff --git a/content/articles/2013/10/why-get-content-aint-yer-friend/index.md b/content/articles/2013/10/why-get-content-aint-yer-friend/index.md new file mode 100644 index 000000000..cc299e227 --- /dev/null +++ b/content/articles/2013/10/why-get-content-aint-yer-friend/index.md @@ -0,0 +1,52 @@ +--- +url: /articles/2013-10-21-why-get-content-aint-yer-friend/ +title: "Why Get-Content Ain't Yer Friend" +authors: + - Don Jones +date: "2013-10-21T20:18:41+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +aliases: + - /2013/10/why-get-content-aint-yer-friend/ +--- + +Well, it isn't your _enemy_, of course, but it's definitely a tricky little beast. +Get-Content is quickly becoming my nemesis, because it's sucking a lot of PowerShell newcomers into its insidious little trap. Actually, the real problem is that most newcomers don't really understand that PowerShell is an object-oriented, rather than a text-oriented shell; they're trying to treat Get-Content like the old Type command (and why not? **type** is an alias to Get-Content in PowerShell, isn't it?), and failing. +Worse, PowerShell has just enough under-the-hood smarts to make _some_ things work, but not _everything. _ +For example, this works to replace all instances of "t" with "x" in the file test.txt, outputting the result to new.txt: + + +`$x = Get-Content test.txt +$x -replace "t","x" | Out-File new.txt +`Sadly, this reinforces - for newcomers - the notion that Get-Content is just reading in the text file as a big chunk o' text. +Nope. +You see, in reality, Get-Content reads _each line of the file individually,_and returns _collection of System.String objects. _It "loses" the carriage returns from the file at the same time. But you'd never know that, because when PowerShell _displays_ a collection of strings, it displays them _one object per line and inserts carriage returns._So if you do this, it'll look like you're dealing with a big hunk o' text: + + +`$x = Get-Content test.txt +$x +`But you're not. $x, in that example, is a _collection of objects,_ not a single string. +Never fear - you can make sense of this. First, if you use the **-Raw** parameter of Get-Content (available in v3+), it does in fact read the entire file as a big ol' string, preserving carriage returns instead of using them to separate the file into single-line string objects. In v2, you can achieve something similar by using Out-String: + + +`$x = Get-Content test.txt | Out-String +`So if you just _need_ to work with a big ol' string, you can. Alternately, you might find that some operations are quicker when you actually do work line-by-line. For example, asking PowerShell to do a regex replace on a huge string can consume a ton of memory; working with one line at a time is often quicker. Just use a foreach: + + +`ForEach ($line in (Get-Content test.txt)) { + $line -replace "\d","x" | Out-File new.txt -Append +} +`Of course, don't _assume_ it'll be quicker - Measure-Command lets you test different approaches, so you can see which one is _actually_ quicker. +You should also consider _not_ using Get-Content, especially with very large files. That's because it wants to read the _entire_ file into memory at once, at that can take a lot of memory - not to mention a bit more processor power, swap file space, or whatever else. +Instead, read your file from disk one line at a time, work with each line, and then (if that's your intent) write each line back out to disk. Instead of caching the entire file in RAM, you're reading it off disk one line at a time. + + +`$file = New-Object System.IO.StreamReader -Arg "test.txt" +while ($line = $file.ReadLine()) { + # $line has your line +} +$file.close() +`Or at least something like that. Yeah, welcome to .NET Framework. Other options available to the Framework include reading a text file in chunks - again, to help conserve memory and improve processing speed, but not necessarily making you read line-by-line. +Whatever approach you choose, just remember that, by default, Get-Content isn't just reading a stream of text all at once. You'll be getting, and need to be prepared to deal with, a _collection_ of objects. Those will often require that you enumerate them (line by line, in other words) using a foreach construct, and with large files the act of reading the entire file might negatively impact performance and system resources. +Knowing is half the battle! diff --git a/content/articles/2013/10/why-the-heck-do-you-want-to-be-taught-net-in-a-powershell-class/index.md b/content/articles/2013/10/why-the-heck-do-you-want-to-be-taught-net-in-a-powershell-class/index.md new file mode 100644 index 000000000..93d5a8ee9 --- /dev/null +++ b/content/articles/2013/10/why-the-heck-do-you-want-to-be-taught-net-in-a-powershell-class/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2013-10-15-why-the-heck-do-you-want-to-be-taught-net-in-a-powershell-class/ +title: Why the HECK Do You Want to be Taught .NET in a PowerShell Class?!?!?! +authors: + - Don Jones +date: "2013-10-15T20:01:23+00:00" +categories: + - Training +aliases: + - /2013/10/why-the-heck-do-you-want-to-be-taught-net-in-a-powershell-class/ +--- + +Ok, that post title is deliberately provocative. Twitter and all that. +So look, we're designed this advanced PowerShell class. One of the top five constant suggestions I get whenever I say "advanced" and "PowerShell" is ".NET Framework." +And I get it. When there's no cmdlet, .NET has a ton of goodies that can solve a lot of problems. Maybe you don't like turning to it, but you'll do it if you have to. +My problem is, what's that look like _in a class?_ +I mean, for me, using .NET basically works like this: + + 1. Spend hours on Google finding the .NET class that will do whatever I need done. + 2. Look up class documentation on MSDN. + 3. Fiddle around in PowerShell with properties and methods until I get what I want. + +I can totally see a class making #2 and #3 a little easier. That's just some basic experience, which is what a class helps build. The problem is, I can teach someone those steps in 30 minutes or less. The hard part is #1, and I truly don't know any way to "teach" that. You're either good at Google, or you aren't. I certainly can't provide some kind of mega-directory to the whole Framework - that's what bloody Google or MSDN Search is for. +#3 can also be a hard part, because it requires you to know a bit about the underlying technology. It's easy to use .NET to resolve DNS names to IP addresses - IF you know how DNS works. If you don't, .NET is hard to use for that task. I can't turn a PowerShell class into a "here's how ____ works, so that I can show you how to do it in .NET." +So everytime I try to teach .NET in a PowerShell class, I end up showing people how to read the MSDN documentation, execute methods in PowerShell, and look at properties in PowerShell. Kinda boring. I mean, they're just freakin' objects, right? Once you've grasped "objects," isn't .NET easy, assuming you've done #1 and found the class you need? +So if you were taking your dream class in "advanced PowerShell," and you were all excited that it had a module on "Using .NET Framework,"  +***exactly what would that module look***** like** +? What would you want to be TAUGHT? +Leave a comment. Tell me. +(By the way, if your answer to the question is, "I want to learn how to find what's in the .NET Framework," there's no need to leave a comment - we all want that, I've just no clue how to teach it other than teaching you to be better at Google!) diff --git a/content/articles/2013/11/_index.md b/content/articles/2013/11/_index.md new file mode 100644 index 000000000..18279bf6a --- /dev/null +++ b/content/articles/2013/11/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from November 2013" +description: "PowerShell.org Articles published in November 2013." +--- diff --git a/content/articles/2013/11/community-book-of-powershell-practices/index.md b/content/articles/2013/11/community-book-of-powershell-practices/index.md new file mode 100644 index 000000000..06d8a3889 --- /dev/null +++ b/content/articles/2013/11/community-book-of-powershell-practices/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-11-14-community-book-of-powershell-practices/ +title: Community Book of PowerShell Practices +authors: + - Don Jones +date: "2013-11-14T18:36:30+00:00" +categories: + - Books +aliases: + - /2013/11/community-book-of-powershell-practices/ +--- + +Released in our new Git repo: _The Community Book of PowerShell Practices, _an ongoing book started from this past Summer's "Great Debates" blog post series. Grab it from https://github.com/PowerShellOrg/ebooks/blob/master/Practices/2013Sep_Practices/2013Sep_Practices.doc and enjoy! diff --git a/content/articles/2013/11/configuring-a-desired-state-configuration-client/index.md b/content/articles/2013/11/configuring-a-desired-state-configuration-client/index.md new file mode 100644 index 000000000..e0972d6b8 --- /dev/null +++ b/content/articles/2013/11/configuring-a-desired-state-configuration-client/index.md @@ -0,0 +1,122 @@ +--- +url: /articles/2013-11-06-configuring-a-desired-state-configuration-client/ +title: Configuring a Desired State Configuration Client +authors: + - Steven Murawski +date: "2013-11-06T23:47:22+00:00" +categories: + - PowerShell for Admins + - Tutorials +aliases: + - /2013/11/configuring-a-desired-state-configuration-client/ +--- + +Once we have our pull server in place and we're starting to create configurations, we need to set up our client nodes to be able to connect to the pull server and how we want the node to behave. + +## The High Points + + * [Overview](https://powershell.org/2013/10/02/building-a-desired-state-configuration-infrastructure/) + * [Configuring the Pull Server (REST version)](https://powershell.org/2013/10/03/building-a-desired-state-configuration-pull-server/) + * Creating Configurations ([one of two](https://powershell.org/2013/10/08/building-a-desired-state-configuration-configuration/), [two of two](https://powershell.org/2013/10/14/building-a-desired-state-configuration-configuration-part-2/)) + * Configuring Clients (this post) + * [Building Custom Resources](https://powershell.org/2014/03/13/building-desired-state-configuration-custom-resources/) + * Packaging Custom Resources + * Advanced Client Targeting + +### Examining the Local Configuration Manager + +The Desired State Configuration agent included in Windows Management Framework 4 (or natively on Server 2012 R2 / Windows 8.1) is exposed through the Local Configuration Manager. + + +`PS> Get-DscLocalConfigurationManager +AllowModuleOverwrite : False +CertificateID : +ConfigurationID : +ConfigurationMode : ApplyAndMonitor +ConfigurationModeFrequencyMins : 30 +Credential : +DownloadManagerCustomData : +DownloadManagerName : +RebootNodeIfNeeded : False +RefreshFrequencyMins : 15 +RefreshMode : PUSH +PSComputerName : +`This is where we can configure the behavior of DSC for a particular node.  So, how do we configure it?  With DSC of course! +There is a configuration option LocalConfigurationManager that allows us to set values for the Local Configuration Manager.  A sample configuration looks something like this: + + +`configuration LetsGetConfiguring +{ + param ($NodeId, $PullServer) + LocalConfigurationManager + { + AllowModuleOverwrite = 'True' + ConfigurationID = $NodeId + ConfigurationModeFrequencyMins = 60 + ConfigurationMode = 'ApplyAndAutoCorrect' + RebootNodeIfNeeded = 'True' + RefreshMode = 'PULL' + DownloadManagerName = 'WebDownloadManager' + DownloadManagerCustomData = (@{ServerUrl = "https://$PullServer/psdscpullserver.svc"}) + } +} +`While this configuration looks similar to other configurations we might create, we need to apply it with a different command - Set-DscLocalConfigurationManager. + + +`LetsGetConfiguring -NodeId 71defb7f-232b-4213-b289-08c3d424e162 -PullServer pullserver.somedomain.com +Set-DscLocalConfigurationManager -path LetsGetConfiguring +`The Local Configuration Manager offers a number of options, which we'll examine. + +#### AllowModuleOverwrite + +This one is pretty straight-forward and only impacts configurations where you are using a pull server.  If you allow module overwrite, newer versions of modules can replace existing modules.  If you don't enable this, you'll have to manually remove modules if you want a new copy to pull down. + +#### CertificateID + +CertficateID is a thumbprint of a certificate in the machine certificate store that will be used to decrypt any secrets present in the configuration.  DSC allows PSCredential objects to be marshaled through a MOF file, but requires them (without explicit authorization) to be encrypted. (There is another option as well, if you use the ConfigurationData feature, you can also supply the path to a certificate file to use - I'll be blogging that scenario later when I cover some more advanced scenarios.) + +#### ConfigurationID + +The ConfigurationID is a GUID which uniquely identifies what configuration a node should retrieve from a pull server.  If you haven't had to generate GUIDs before, a really easy way to do so is: + + +`PS> [guid]::NewGuid().Guid +`#### ConfigurationMode + +ConfigurationMode defines how the DSC client operates.  There are three valid values: + + * Apply + * ApplyAndMonitor + * ApplyAndAutoCorrect + +(NOTE:  These descriptions of functionality are based on limited testing - the TechNet documentation is not up to date yet, but should be in the near future.) +Apply will apply the configuration once and after a successful run is logged, it will stop attempting to apply configuration or checking the configuration.  ApplyAndMonitor will apply a configuration as in Apply, but will continue to validate that a node is configured as described.  No corrective action will take place if there is configuration drift.  Finally, ApplyAndAutoCorrect is what most of us think of when looking at DSC as a configuration management tool.  This setting applies a configuration and checks it regularly.  If configuration drift is detected, the configuration manager will attempt to return the machine to the _desired state_ (see how I worked the product name in there..). + +#### ConfigurationModeFrequencyMins + +This setting determines how frequently the configured method (the RefreshMode) will be run.  In the case of a pull server, this is how frequently the pull server will be checked for updated configurations.  The minimum value for this is 30.  This value needs to be a multiple of the RefreshFrequencyMins.  If it is not, the engine will treat it as if it was a multiple (rounded up). + +#### Credential + +The Credential supplied can be used for accessing remote resources. + +#### DownloadManagerCustomData + +DownloadManagerCustomData is a hashtable of values that is passed to the specified download manager.  In the case of a a pull server, the two possible keys are ServerUrl and AllowUnsecureConnection. + +#### DownloadManagerName + +Here is where we specify which download manager to use.  DSC ships with two options, the WebDownloadManager (for the web-based pull server) and the DSCFileDownloadManager (for using an SMB share). + +#### RebootNodeIfNeeded + +Here's another pretty self-explanatory setting.  DSC offers a method for resources to request a reboot.  If this setting is $true, then DSC will reboot the node when it is requested.  If it is set to $false, DSC will notify (via the verbose stream and the DSC log) that a reboot is required, but not actually reboot the node. + +#### RefreshFrequencyMins + +The RefreshFrequencyMins setting determines how often DSC runs an integrity check against the cached configuration value (or if the check falls on the ConfigurationModeFrequencyMins interval against the pull server if one is configured).  The minimum value for this setting is 15 minutes. + +#### RefreshMode + +RefreshMode is either PUSH or PULL.  If you set the RefreshMode to PULL, you'll need to configure a download manager (via DownloadManagerName). +Next up, we'll look at how we can build custom resources. diff --git a/content/articles/2013/11/last-chance-for-feedback-on-powershell-course-10961ab/index.md b/content/articles/2013/11/last-chance-for-feedback-on-powershell-course-10961ab/index.md new file mode 100644 index 000000000..b33414210 --- /dev/null +++ b/content/articles/2013/11/last-chance-for-feedback-on-powershell-course-10961ab/index.md @@ -0,0 +1,101 @@ +--- +url: /articles/2013-11-14-last-chance-for-feedback-on-powershell-course-10961ab/ +title: Last chance for feedback on PowerShell course 10961A/B +authors: + - Don Jones +date: "2013-11-14T17:45:34+00:00" +categories: + - Training +aliases: + - /2013/11/last-chance-for-feedback-on-powershell-course-10961ab/ +--- + +I'm in the midst of working on 10961C, the Windows Server 2012 R2 / Windows 8.1 / PowerShell 4.0 update of Microsoft's 10961A/B course, "Automating Administration with Windows PowerShell." I anticipate this being closed out by the end of November, 2013, so if you've taken or taught this course and have any feedback - even a typo - now's the time to tell me. Drop a comment below, or e-mail me (if you have my address). Please, no Twitter replies on this one. +The course will not be substantially changed from the B rev; because PowerShell v4 doesn't _change_ much, especially at the entry-level covered by 10961, there wasn't much to alter. But I'm trying to sweep up as many lingering bugs and typos as possible. Kudos to MCT Jason Yoder for firing over a list of fixes! + + + +Some fun comments from the "A" rev feedback: + +> + +> + +> + +> + +> By day 3 (5 day class) most students felt over-whelmed. + +> +> + +> + +> + +> + +> There is not enough material. +> + +> + +> + +> + +> + +> + +> + +> + + + + + + + + + + + + + + + + + Probably won't be reconciling those two . Fact is, it's really tough to write the perfect course for *everyone*, which is why having a live instructor who knows the material is so important to a great class. + + + > + +> + +> + +> + +> No mention of filtering functions. +> + +> + +> + +> + + + + + + + + + + + + Because they're largely "leftovers" that were succeeded by pipeline functions. That said, 10961 isn't a programming course; that's where 55039 picks up. If you've got folks who want programming taking 10961, they were placed into the wrong class. diff --git a/content/articles/2013/11/login-now-required-for-comments/index.md b/content/articles/2013/11/login-now-required-for-comments/index.md new file mode 100644 index 000000000..7e43741e2 --- /dev/null +++ b/content/articles/2013/11/login-now-required-for-comments/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2013-11-11-login-now-required-for-comments/ +title: Login now required for comments +authors: + - Don Jones +date: "2013-11-11T14:49:05+00:00" +categories: + - Announcements +aliases: + - /2013/11/login-now-required-for-comments/ +--- + +A quick note and an apology: I've had to modify the site configuration to require users to be registered and logged in before they can comment. We've been taking a _ridiculous_ amount of comment spam, and it's consuming more and more time to weed through it. +You can register using any major social media account, so you don't have to remember yet another username and password with us, so hopefully that'll mitigate the inconvenience. +Have a great week! diff --git a/content/articles/2013/11/monitoring-sql-server-backups/index.md b/content/articles/2013/11/monitoring-sql-server-backups/index.md new file mode 100644 index 000000000..eeb598165 --- /dev/null +++ b/content/articles/2013/11/monitoring-sql-server-backups/index.md @@ -0,0 +1,2449 @@ +--- +url: /articles/2013-11-06-monitoring-sql-server-backups/ +title: Monitoring SQL Server Backups +authors: + - Enrique Puig +date: "2013-11-07T07:30:31+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/11/monitoring-sql-server-backups/ +--- + +One of the most important tasks for the** **DBAs is to ensure that there is a maintenance plan to recover data from a given disaster. +  +As a DBA we need to design a maintenance plan according to our scenario and business requirements. Do we want to be able to recover data at any point of time? How much data loss can we accept? All these questions and many more must be answered before designing the plan. In this post we will assume a basic daily full backup to keep our data safe, we will assume that there is a job performing full backups to our databases every day at midnight. + + + +The next step after we have defined and implemented the maintenance plan is to monitor that all backups are being executed. In order to reach our goal it will be necessary to know whether a backup has been done or not and that could be possible by monitoring the backup job or querying the msdb database metadata among many other options. For this post we will use the second option, we will query msdb to check databases backup information. The main reason why we choose this option is because of the variability of backup maintenance plan definitions. The backup job is defined by every DBA and we cannot assume that all databases are included in the maintenance plan, on the other hand by querying msdb we will know for sure the databases which have been backed up and those that have not been backed up. + + +# +Querying msdb database + + + +As it has been explained before querying msdb database will give us the truth about database backups. Running the following query we will know how many days have happened since the last full backup of every database: + + + + + +Use + + msdb +; + + + + + + + + +  + + + + + + + +with + + backup_info + + + + + + + +as + + + + + + + +( + + + + + + + + +    + +select + + + + + + + + + +        +bck +. +database_name +, + + + + + + + + + +        +bck +. +database_guid +, + + + + + + + + + +        +bck +. +backup_start_date +, + + + + + + + + + +        +bck +. +backup_finish_date +, + + + + + + + + + +        +bckmf +. +physical_device_name +as + BackupFile_Path +, + + + + + + + + + +        +BackupType += + + + + + + + + + +        + +case + + + + + + + + + +            + +when + bck +. +[type] += + +'I' + +then + +'Differential' + + + + + + + + + +            + +when + +type + += + +'D' + +then + +'Full' + + + + + + + + + +            + +when + +type + += + +'L' + +then + +'Log' + + + + + + + + + +            + +else + +'Unknown' + + + + + + + + + +        + +end + + + + + + + + + +    + +from + backupset +as + bck + + + + + + + + +    + +inner + +join + backupmediafamily +as + bckmf + + + + + + + + +        + +on + bck +. +media_set_id += +bckmf +. +media_set_id + + + + + + + +), + + Last_Backups + + + + + + + +as + + + + + + + +( + + + + + + + + +      + +select + +* + + + + + + + + + +      + +from + + + + + + + + + +      + + +( + + + + + + + + +            + +select + + + + + + + + + +                  + +ROW_NUMBER + +() + +over + +( + +PARTITION + +BY + V +. +database_guid, V.BackupType  +order + +by + V +. +backup_start_date +desc + +) + +as + r +, + + + + + + + + + +                  + +* + + + + + + + + + +            + +from + backup_info +as + V + + + + + + + + +      + +) + +as + VV + + + + + + + + +      + +where + VV +. +r += +1 +and + VV +. +BackupType += + +'FULL' + + + + + + + + +), + +dbs + + + + + + + +as + + + + + + + +( + + + + + + + + +      + +select + + + + + + + + + +    +name +, +database_guid +, +state_desc + + + + + + + + +      + +from + +sys + +. + +databases + +as + dbs + + + + + + + + +      + +inner + +join + +sys + +. + +database_recovery_status + +as + dbrs + + + + + + + + +            + +on + dbrs +. +database_id += +dbs +. +database_id + + + + + + + +) + + + + + + + +select + + + + + + + + +    +name +, + + + + + + + + + +    + +case + +when + V +. +database_name +is + +null + +then + 365 +else + +DATEDIFF + +( + +day + +, +backup_start_date +, + +GETDATE + +()) + +end + +as + DaysSinceLastBackup + + + + + + + +from + + dbs + + + + + + + +left + + +join + Last_Backups +as + V + + + + + + + + +    + +on + V +. +database_guid += +dbs +. +database_guid + + + + + + + +where + + dbs +. +state_desc += + +'ONLINE' + +and + name +<> + +'TempDB' + + + + + + + + +order + + +by + 2 +desc + +; + + + + + + +  + + + +Notice that databases that never have been backed up will return 365 days as the number of days since the last full backup. + + + +This query returns the desired information like follows: + + + [![image](https://powershell.org/wp-content/uploads/2013/11/image_thumb.png)](https://powershell.org/wp-content/uploads/2013/11/image.png) + + + +In this case we can see a basic example with system databases with 0 days since last full backup, which means that all databases are up to date with full backups. Another possible result could be: + + + [![image](https://powershell.org/wp-content/uploads/2013/11/image_thumb1.png)](https://powershell.org/wp-content/uploads/2013/11/image1.png) + + + +In this case databases last full backup was four days ago. This second example could be a reason to be alarmed because in case of a disaster we only can recover data until four days ago, all changes made during the last four days would be lost. + + + +Notice that databases that never have been backed up will return 365 days as the number of days since the last full backup. + + + +As it was shown before, the query could help us to monitor backups in a single instance but what happen when the DBA has to monitor and manage more than one instance? And what if those instances are from different SQL Server Versions? Things start to get complicated and doing it one by one manually is not an option! I"™m currently facing that situation; I"™m managing more than 80 SQL Server instances from different versions. Here is when PowerShell comes to help the DBA. + + +# +PowerShell Solution + + + +With PowerShell we will be able to query all msdb databases from all the desired SQL Server instances. The solution will have two files: + + + +              1. Xml file with Server information + + + + +a. +       + + +SQL Server instance, user name, password"¦ + + + +              2. PowerShell script + + + +The idea is to run the query to msdb for every server registered in the xml file. For instance the XML file structure could like follows: + + + [![image](https://powershell.org/wp-content/uploads/2013/11/image_thumb5.png)](https://powershell.org/wp-content/uploads/2013/11/image5.png) + + + +For this demonstration we only need to provide the instance name, the SQL Server user name and the password to connect. The reason why I"™m using SQL Server authentication is because not all my SQL Server instances are in the same domain so I need to be able to connect to all of them from a single point (where the script is running). Anyway the script can always be modified to connect with integrated authentication easily. + + + +With the xml file ready the only thing missing is the script file which will read the xml file and execute the query for every server. The script looks like follows: + + + + + +Param + +( + + + + + + + + +  +[ + +int + +] + +$DaysSinceLastBackup + +=- + +1, + + + + + + + + +  +[ + +string + +] + +$serversPath + += + +"C:\tmp\Servers.xml" + + + + + + + + +  +) + + + + + + + + +  + + +Function + +Get-SQLServer-DataTable + + ([ + +string + +] + +$conn + + , [ + +string + +] + +$query + +) + + + + + + + + +  +{ + + + + + + + + +     + + +$SqlConnection + += + +New-Object + +System.Data.SqlClient.SqlConnection + +; + + + + + + + + +     + + +$SqlConnection + +. + +ConnectionString + += + +$conn + + + + + + + + +     + + +$SqlCmd + += + +New-Object + +System.Data.SqlClient.SqlCommand + +; + + + + + + + + +     + + +$SqlCmd + +. + +CommandText + += + +$query + +; + + + + + + + + +     + + +$SqlCmd + +. + +Connection + += + +$SqlConnection + +; + + + + + + + + +     + + +$SqlAdapter + += + +New-Object + +System.Data.SqlClient.SqlDataAdapter + +; + + + + + + + + +     + + +$SqlAdapter + +. + +SelectCommand + += + +$SqlCmd + +; + + + + + + + + +     + + +$DataTable + += + +New-Object + +System.Data.DataTable + +; + + + + + + + + +     + + +$SqlAdapter + +. + +Fill + +( + +$DataTable + +) + +| + +out + +- + +Null; + + + + + + + + +     + + +$SqlConnection + +. + +Close + +() + +; + + + + + + + + +     + + + + + + + + + +     + + +return + +$DataTable + +; + + + + + + + +} + + + + + + + +  + + + + + + + +Function + +Get-SQLDatabaseBackupsInfo + + ([ + +string + +] + +$conn + +) + + + + + + + +{ + + + + + + + + +      + + +$query + += + +" + + + + + + + + +            + + +Use + +msdb; + + + + + + + + +            + + + + + + + + + +            + + +with + +backup_info + + + + + + + + +            + + +as + + + + + + + + +            +( + + + + + + + + +                  + + +select + + + + + + + + +                        + + +bck.database_name + +, + + + + + + + + +                        + + +bck.database_guid + +, + + + + + + + + +                        + + +bck.backup_start_date + +, + + + + + + + + +                        + + +bck.backup_finish_date + +, + + + + + + + + +                        + + +bckmf.physical_device_name + +as + +BackupFile_Path + +, + + + + + + + + +                        + + +BackupType + += + + + + + + + + +                        + + +case + + + + + + + + +                             + + +when + +bck + +.[ + +type + +] + += + +'I' + +then + +'Differential' + + + + + + + + +                             + + +when + +type + += + +'D' + +then + +'Full' + + + + + + + + +                             + + +when + +type + += + +'L' + +then + +'Log' + + + + + + + + +                             + + +else + +'Unknown' + + + + + + + + +                        + + +end + + + + + + + + +                  + + +from + +backupset + +as + +bck + + + + + + + + +                  + + +inner + +join + +backupmediafamily + +as + +bckmf + + + + + + + + +                        + + +on + +bck.media_set_id + += + +bckmf.media_set_id + + + + + + + + +            +), + +Last_Backups + + + + + + + + +            + + +as + + + + + + + + +            +( + + + + + + + + +                  + + +select + +* + + + + + + + + +                  + + +from + + + + + + + + +                  +( + + + + + + + + +                        + + +select + + + + + + + + +                             + + +ROW_NUMBER + +() + +over + + ( + +PARTITION  + +BY  + +V.database_guid, V.BackupType  + +order  + +by  + +V.backup_start_date  + +desc + +) + +as + +r + +, + + + + + + + + +                             + + +* + + + + + + + + +                        + + +from  + +backup_info  + +as  + +V + + + + + + + + +                  +) + +as  + +VV + + + + + + + + +                  + + +where  + +VV.r + += + +1 + +and  + +VV.BackupType + += + +'FULL' + + + + + + + + +            +), + +dbs + + + + + + + + +            + + +as + + + + + + + + +            +( + + + + + + + + +                  + + +select + + + + + + + + +                  + + +name + +, + +database_guid + +, + +state_desc + + + + + + + + +                  + + +from  + +sys.databases  + +as  + +dbs + + + + + + + + +                  + + +inner  + +join  + +sys.database_recovery_status  + +as  + +dbrs + + + + + + + + +                        + + +on  + +dbrs.database_id + += + +dbs.database_id + + + + + + + + +            + + +) + + + + + + + + +            + + +select + + + + + + + + +                  + + +@@ + +SERVERNAME  + +as  + +ServerName + +, + + + + + + + + +                  + + +name + +as + +DbName + +, + + + + + + + + +                  + + +case  + +when  + +V.database_name  + +is  + +null  + +then + + 365 + +else  + +DATEDIFF + +( + +day + +, + +backup_start_date + +, + +GETDATE + +()) + +end  + +as  + +DaysSinceLastBackup + + + + + + + + +            + + +from  + +dbs + + + + + + + + +            + + +left  + +join  + +Last_Backups  + +as  + +V + + + + + + + + +                  + + +on  + +V.database_guid + += + +dbs.database_guid + + + + + + + + +            + + +where  + +dbs.state_desc + += + +'ONLINE'  + +and  + +name + + <> + +'TempDB' + + + + + + + + +            + + +order  + +by + + 2 + +desc; + + + + + + + + +                  +" + +; + + + + + + + + +      + + +return  + +Get + +- + +SQLServer + +- + +DataTable  + +$conn  + +$query + +; + + + + + + + +} + + + + + + + +  + + +    + + + + + + + + + +  +[ + +xml + +] + +$xml + += + +Get-Content  + +$serversPath + + + + + + + + +  + + +$xml + +. + +Servers + +. + +server + +| + +foreach + +- + +object + +{ + + + + + + + + +    + + +$it + += + +$_ + +; + + + + + + + + +    + + +$instance + += + +$it + +. + +InstanceName + +; + + + + + + + + +    + + +$user + += + +$it + +. + +username + +; + + + + + + + + +    + + +$pass + += + +$it + +. + +password + +; + + + + + + + + +    + + + + + + + + + +    + + +$conn + += + +"Server = $instance; Database = master; User=$user;Password=$pass;" + +; + + + + + + + + +      + + + + + + + + + +      + + +Get-SQLDatabaseBackupsInfo  + +$conn +| + +where-object + + { + +$_ + +. + +DaysSinceLastBackup  + +-gt  + +$DaysSinceLastBackup + +} + + +  + +| + +  + +select + +ServerName + +, + +DbName + +, + +DaysSinceLastBackup + +; + + + + + + + + +  + + + + + + + + + +  + + +} + + + + + +The script has two parameters: + + + + + +  +         + + +** +DaysSinceLastBackup +** + : A threshold to filter result. The result will show all databases which latest full backups are older than the parameter value. The value by default is -1, a negative value that will make to show all results. + + + + + +  +          + + +** +ServersPath +** +: The path where the XML file with all servers is allocated. + + + +So we can execute the script like follows: + + + [![image](https://powershell.org/wp-content/uploads/2013/11/image_thumb6.png)](https://powershell.org/wp-content/uploads/2013/11/image6.png) + + + +The example shown before executes the script passing the two parameters, the first one is the xml file and the second one is the Threshold. In this case we have used the value 2, which means that the script will return all databases which latest full backups are older than 2 days. In this case only the database **test** matches the condition, the result shows 365 days since the last full backup which means that this database has never been backed up. + + + +On the other hand, if we execute the script without parameters we will see the information of all databases, this is what it will look like : + + + [![image](https://powershell.org/wp-content/uploads/2013/11/image_thumb7.png)](https://powershell.org/wp-content/uploads/2013/11/image7.png) + + +# +Conclusion + + + +As it has been shown during this post, is very easy to monitor SQL Server Backups over different servers in a very fast and efficient way by using PowerShell. Once we have this script we can implement a scheduled task and use it to generate HTML reports or alarms to notify the DBAs and System administrators about the databases backup status. Once again PowerShell comes up to save the day and make our working life easier. diff --git a/content/articles/2013/11/phillyposh-11072013-meeting-summary-and-presentation-materials/index.md b/content/articles/2013/11/phillyposh-11072013-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..f895e840b --- /dev/null +++ b/content/articles/2013/11/phillyposh-11072013-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,55 @@ +--- +url: /articles/2013-11-12-phillyposh-11072013-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 11/07/2013 meeting summary and presentation materials +authors: + - John Mello +date: "2013-11-13T02:07:36+00:00" +aliases: + - /2013/11/phillyposh-11072013-meeting-summary-and-presentation-materials/ +--- + +1. [John Mello][1] gave a presentation on a script that searches a mailbox for an email by subject and downloads any attachments it may contain. A copy of his scripts can be obtained [here.][2] + 2. [Jason Helmick][3], Senior Technologist at [Concentrated Tech][4] and [Windows PowerShell MVP][5], gave a presentation on "Understanding the Pipeline "“ Getting your one-liners to work!" A copy of his script can be found [here][6]. + 1. [A recording of Jason Helmick"™s presentation][7] can be found on our [YouTube channel][8]. Due to audio issues, John Mello"™s portion is not included in the recording. + 3. Announcements + 1. Tickets are still available for the [2014 PowerShell Summit North America][9], if you"™re going then make sure to say hi to [Lido Paglia][10]! + 2. We are still trying to arrange for a PowerShell Saturday sometime in 2014, if you are interested in presenting please let us know! + 4. We are assigning homework this week! Hopefully this will be a fun task that we can discuss during our next meeting, so try your hand at the following problem: + + + **Title**: On This Day in Pictures + + + **Description:** You have folder of photos on your computer that you take with your Smartphone or digital camera. From time to time you want to be reminded of the cool and interesting things you snapped photos of years before on this day. Being a PowerShell scripter you imagine that PowerShell would be a quick and easy tool for exploring your photo"™s meta-data to re-discover some fun memories you had by emailing yourself some pictures you took on this same day last year or any year before. You decide to format the email as HTML including the pictures and some data about them. Finally, using the task scheduler to set your script to run every morning so you can take a trip down memory lane with your photos on "this day in history". As a PowerShell scripter you roll up your sleeves and get to work. + + + **Requirements:** + + + - + Your script should look into a directory that may contain sub folders for image files (you may want to support .jpg, .jpeg, .png, etc.). + + + - + The script should then determine the date a photo was taken. Examining the [EXIF](http://en.wikipedia.org/wiki/Exchangeable_image_file_format) meta-data might be handy. + + + - + Get the date the script runs and find all the photos taken on the same day other than the current year. + + + - +  Finally send an email containing the photos taken on this day in history* + + + + [1]: http://mellositmusings.com/ + [2]: http://mellositmusings.com/2013/10/29/powershell-script-to-download-attachments-from-an-email/ + [3]: http://www.jasonhelmick.com/ + [4]: http://concentratedtech.com/ + [5]: http://mvp.microsoft.com/en-us/mvp/Jason%20Helmick-5000354 + [6]: https://powershell.org/wp-content/uploads/2013/11/PhillyPosh_11_07_2013_Jason_Helmick.zip + [7]: https://www.youtube.com/watch?v=uVsMbxj6188 + [8]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg + [9]: https://powershell.org/community-events/summit/powershell-summit-north-america/ + [10]: http://paglia.org/ diff --git a/content/articles/2013/12/_index.md b/content/articles/2013/12/_index.md new file mode 100644 index 000000000..dcf610519 --- /dev/null +++ b/content/articles/2013/12/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from December 2013" +description: "PowerShell.org Articles published in December 2013." +--- diff --git a/content/articles/2013/12/charlotte-powershell-user-group-holiday-themed-scripting-games/index.md b/content/articles/2013/12/charlotte-powershell-user-group-holiday-themed-scripting-games/index.md new file mode 100644 index 000000000..3fedf2f39 --- /dev/null +++ b/content/articles/2013/12/charlotte-powershell-user-group-holiday-themed-scripting-games/index.md @@ -0,0 +1,34 @@ +--- +url: /articles/2013-12-10-charlotte-powershell-user-group-holiday-themed-scripting-games/ +title: Charlotte Powershell User Group Holiday-themed Scripting Games +authors: + - Terri Donahue +date: "2013-12-10T22:16:10+00:00" +aliases: + - /2013/12/charlotte-powershell-user-group-holiday-themed-scripting-games/ +--- + +The Charlotte Powershell Users Group meeting was held on Dec 5th. Jim put together a nifty challenge related to image manipulation. We started off with this nifty image. Pretty huh? +[![stegan1](https://powershell.org/wp-content/uploads/2013/12/stegan1.png)](https://powershell.org/wp-content/uploads/2013/12/stegan1.png) +The challenge was to manipulate the image using PowerShell to find the hidden message. After some discussion, the code was cracked and the image was displayed. As is normal with Powershell, there were multiple ways to achieve the end goal. Feel free to stop reading here and grab the image if you want to give this a go yourself. Spoilers are below. + + + + +Here is one way to find the hidden message: +add-type -AssemblyName system.drawing +$height = $img.Height - 1 +$width = $img.Width - 1 +$img = [System.Drawing.Image]::FromFile("c:\temp\stegan1.png") +0..$height | %{ +$y=$_; +0..$width | %{ +$x=$_; +$p = $img.GetPixel($x,$y); +if ($p.r -ne 0) { +$img.setpixel($x,$y,[System.Drawing.Color]::Green) +} +} +} +$img.save('c:\temp\update.png') +Merry Christmas and Happy Holidays from your Charlotte Powershell Users Group. diff --git a/content/articles/2013/12/coaches-and-judges-selected-for-winter-scripting-games/index.md b/content/articles/2013/12/coaches-and-judges-selected-for-winter-scripting-games/index.md new file mode 100644 index 000000000..c4245585b --- /dev/null +++ b/content/articles/2013/12/coaches-and-judges-selected-for-winter-scripting-games/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2013-12-19-coaches-and-judges-selected-for-winter-scripting-games/ +title: Coaches and Judges Selected for Winter Scripting Games +authors: + - Don Jones +date: "2013-12-19T17:32:44+00:00" +categories: + - Scripting Games +aliases: + - /2013/12/coaches-and-judges-selected-for-winter-scripting-games/ +--- + +We've had an outpouring of support for the upcoming games, with more volunteers than we know what to do with! +At this point, we have our judging panel completely full; we're operating with a fairly small group of celebrity judges this time around. Games Master Richard Siddaway will introduce our judges in a few days. +We've also filled our roster of Coaches, and Head Coach Mike Robbins will provide that lineup soon also. +If you've volunteered but not heard from Richard or Mike, then you should definitely start recruiting a team for when registration and team formation opens in a couple of weeks! diff --git a/content/articles/2013/12/how-quick-and-dirty-becomes-permanent-and-annoying/index.md b/content/articles/2013/12/how-quick-and-dirty-becomes-permanent-and-annoying/index.md new file mode 100644 index 000000000..86afc2e85 --- /dev/null +++ b/content/articles/2013/12/how-quick-and-dirty-becomes-permanent-and-annoying/index.md @@ -0,0 +1,40 @@ +--- +url: /articles/2013-12-10-how-quick-and-dirty-becomes-permanent-and-annoying/ +title: "How \"Quick and Dirty\" Becomes \"Permanent and Annoying.\"" +authors: + - Don Jones +date: "2013-12-10T22:23:37+00:00" +categories: + - PowerShell for Admins +aliases: + - /2013/12/how-quick-and-dirty-becomes-permanent-and-annoying/ +--- + +Consider the following: + + +`$computers = Get-ADComputer -filter * -searchBase "ou=test,dc=company,dc=pri" +foreach ($computer in $computers) { + write-host "computer $computer" + $result = Do-Something -computername $computer + Write-Host "$($result.property) and $($result.value)" +} +`Would you ever consider that acceptable? Some folks might well say, "sure! if I was just testing this, throwing in those Write-Hosts is no big deal. Heck, even if I was the only one who was going to use this, Write-Host isn't bad." +And the point I'm going to make doesn't just apply to Write-Host. It applies to _anytime_ when you're doing something that you _know_ breaks "best practices," but you justify it because it's "just for you" or because "it's just for testing." +To wit: if you need your script to output some status or tracking information, as in the above, use Write-Verbose. Yes, Write-Verbose requires a script or function to have this at the top: + + +`[CmdletBinding()] +Param() +`Small price to pay for all the functionality it adds, but why not just use Write-Host and be done with it? +**Begin as you mean to proceed.** That means, from the outset, assume everything is going to be a production-class tool and that it needs to be done right. You don't create output using Write-Host*, or output formatted text instead of objects, or any of a dozen other things because _eventually_ that thing you made "just for you" will end up copied and pasted into something that everyone in the organization depends upon. +And weren't you the one complaining you never have time to do stuff? So where are you going to find the time to go back and _re-do something the right way_? You won't. Your quick-and-dirty "just for me" will end up becoming an ugly pimple for the rest of time. +It is _rarely_ _harder to do something the right way_ in PowerShell. Yes, the right way might not be what habitually flies off of your fingertips - but that's not extra time, that's just you changing a habit. And again, Write-Host is just a convenient and easy example. I once was helping someone on a script, and in twelve different places, they had copied-and-pasted a short little logical construct to test connectivity to a computer on a specific protocol. It was maybe four lines of code. Most instances were commented out, indicating they'd just been for testing. +"Why," I asked, "didn't you put that into a function, and build a toggle into the function?" +"Oh, it was just for testing." +"Yes, but this script is running a critical process now. It isn't just for testing. And it's fugly." +"I didn't have time to go back and..." +Just stop. Ugh. I know. Well, you had time to copy and paste in a dozen places, which took longer than just making the damn function would have taken in the first place. +So the point: bad practices are always bad. Good practices are always good. And you should stay on the right side of the Force all the time, even when it's "just for you," because someday that code is going to wind up being not "just for you" anymore. Begin coding as you mean to proceed: write as if everything's for posterity. + +*unless you're specifically drawing an on-screen menu or something. Maybe then. diff --git a/content/articles/2013/12/introducing-the-coaches-of-the-2014-winter-scripting-games/index.md b/content/articles/2013/12/introducing-the-coaches-of-the-2014-winter-scripting-games/index.md new file mode 100644 index 000000000..47ea0b07c --- /dev/null +++ b/content/articles/2013/12/introducing-the-coaches-of-the-2014-winter-scripting-games/index.md @@ -0,0 +1,161 @@ +--- +url: /articles/2013-12-23-introducing-the-coaches-of-the-2014-winter-scripting-games/ +title: Introducing the Coaches of the 2014 Winter Scripting Games +authors: + - Mike F Robbins +date: "2013-12-23T17:21:37+00:00" +categories: + - Scripting Games +aliases: + - /2013/12/introducing-the-coaches-of-the-2014-winter-scripting-games/ +--- + +A few weeks ago, just before the announcement to start recruiting your team for the 2014 Winter Scripting Games, I was contacted by Don Jones and Richard Siddaway about an opportunity to become the Head Coach for the Winter Scripting Games. I was honored to have been contacted and I'm a firm believer of taking advantage of opportunities when they emerge, especially when they're PowerShell related, so I graciously accepted. +One of my first responsibilities was to recruit a small team of coaches. I immediately went to work before potential coaches committed themselves to participating on teams. We had a huge number of people in the PowerShell community who had volunteered to be a coach and while we would have liked to have selected everyone who volunteered, we only had a specific number of positions to fill. Without further ado, here is the list of the coaches for the 2014 Winter Scripting Games: + + + + + **Name** + + + + **Twitter** + + + + + + [Boe Prox](http://learn-powershell.net/) + + + + [@proxb](http://twitter.com/proxb) + + + + + + [Carlo Mancini](http://www.happysysadm.com/) + + + + [@sysadm2010](http://twitter.com/sysadm2010) + + + + + + [Claus Nielsen](http://xipher.dk/) + + + + [@claustn](http://twitter.com/claustn) + + + + + + [Emin Atac](http://p0w3rsh3ll.wordpress.com/) + + + + [@p0w3rsh3ll](http://twitter.com/p0w3rsh3ll) + + + + + + [Jan Egil Ring](http://blog.powershell.no/) + + + + [@JanEgilRing](http://twitter.com/JanEgilRing) + + + + + + [Jeff Wouters](http://jeffwouters.nl/) + + + + [@JeffWouters](http://twitter.com/JeffWouters) + + + + + + [Jonathan Medd](http://www.jonathanmedd.net/) + + + + [@jonathanmedd](http://twitter.com/jonathanmedd/) + + + + + + [Lido Paglia](http://paglia.org/) + + + + [@nicemarmot](http://twitter.com/nicemarmot) + + + + + + [Matt Hitchcock](http://sgitpro.com/) + + + + [@hitchysg](http://twitter.com/hitchysg) + + + + + + [Rob Campbell](http://mjolinor.wordpress.com/) + + + + [@mjolinor](http://twitter.com/mjolinor) + + + + + + [Rohn Edwards](http://rohnspowershellblog.wordpress.com/) + + + + [@magicrohn](http://twitter.com/magicrohn) + + + + + + [Sahal Omer](http://www.get-exchange.info/) + + + + [@GetExchange](http://twitter.com/GetExchange) + + + + + + [Steve Murawski](http://stevenmurawski.com/) + + + + [@StevenMurawski](http://twitter.com/StevenMurawski) + + + + +[Click here](http://mikefrobbins.com/2013/12/23/introducing-the-coaches-of-the-2014-winter-scripting-games/) + to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. + +µ diff --git a/content/articles/2013/12/introducing-the-judges-for-winter-2014-scripting-games/index.md b/content/articles/2013/12/introducing-the-judges-for-winter-2014-scripting-games/index.md new file mode 100644 index 000000000..59d132c75 --- /dev/null +++ b/content/articles/2013/12/introducing-the-judges-for-winter-2014-scripting-games/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2013-12-28-introducing-the-judges-for-winter-2014-scripting-games/ +title: Introducing the Judges for Winter 2014 Scripting Games +authors: + - Richard Siddaway +date: "2013-12-28T15:50:47+00:00" +categories: + - Scripting Games +aliases: + - /2013/12/introducing-the-judges-for-winter-2014-scripting-games/ +--- + +In the last few years there has been a long list of people judging the Scripting Games. Those people were expected to view as many entries as possible, preferably all, and score the entries as well as providing feedback on the individual entries. That is a ton of work especially when you consider that the judges were all volunteers. +This time round we're attempting to spread the load somewhat. Mike Robbins has done a superb job recruiting coaches for the [](https://powershell.org/2013/12/23/introducing-the-coaches-of-the-2014-winter-scripting-games/) Its their job to look at the entries and make suggestions and hints to the teams - if the teams wish to take advantage of this option. Looking at the list of coaches - I know I would take advantage of their assistance if I was competing. +That leaves judging. This time we're using a small group of judges. We have prepared scoring criteria for the events with some additional style points available to the judges. This will make MOST of the scoring objective but we've a bit of subjectivity available for individual judges to pick out, and hopefully comment on, things they like or don't like. +The judges are all very experienced PowerShell practitioners with more books written, talks given, blog posts created and classes taught between them than anyone would want to count. In alphabetical order your judges for the Winter 2014 Scripting Games are: +Don Jones - founder and CEO of powershell.org. Author of several PowerShell books including the highly recommended Learn PowerShell v3 in a Month of Lunches and co-author of PowerShell in Depth. Don is a PowerShell MVP, PowerShell educator, columnist and course creator. +Jason Helmick - Board member of powershell.org. A PowerShell MVP and author of Learn IIS in a Month of Lunches which includes lots of PowerShell. Jason also delivered the recent two-part Introducing PowerShell MVA sessions with Jeffrey Snover. PowerShell educator, columnist and speaker. +Jeffery Hicks - Board member of powershell.org. PowerShell MVP. Co-author of PowerShell in Depth, lead editor of PowerShell Deep Dives and author of other PowerShell books. Jeffrey is also a PowerShell columnist and educator +Ed Wilson - The Scripting Guy. Ed runs the Hey! Scripting Guy [](http://blogs.technet.com/b/heyscriptingguy/) Author of several PowerShell books including Windows PowerShell Best Practices and Windows PowerShell Scripting Guide. Ed also delivers PowerShell classes and is a much in demand speaker. +The list of judges is completed by +Richard Siddaway - Board member of powershell.org. PowerShell MVP. Co-author of PowerShell in Depth and author of PowerShell in Practice and PowerShell and WMI. Frequent blogger on PowerShell related topics. +Between them the judges have accumulated over 30 years of PowerShell experience that is focussed on judging the Games. They are all looking forward to the Games and hope to see your entries. diff --git a/content/articles/2013/12/january-charlotte-powershell-user-group-meeting/index.md b/content/articles/2013/12/january-charlotte-powershell-user-group-meeting/index.md new file mode 100644 index 000000000..05d3cfdbf --- /dev/null +++ b/content/articles/2013/12/january-charlotte-powershell-user-group-meeting/index.md @@ -0,0 +1,29 @@ +--- +url: /articles/2013-12-27-january-charlotte-powershell-user-group-meeting/ +title: January Charlotte PowerShell User Group Meeting +authors: + - Terri Donahue +date: "2013-12-27T14:15:39+00:00" +aliases: + - /2013/12/january-charlotte-powershell-user-group-meeting/ +--- + +Our monthly meeting will be held on January 2nd, 2014. This years Scripting Games is a team based event. What better place to find/join a team than a User Group meeting? We look forward to seeing you there. + +Here is some additional information about the Winter Scripting Games: + +##### Teams can consist of between 2 to 6 Scripters and official registration opens on Jan 2nd. + +There will be a total of 4 official events for the Winter Scripting Games: + +_January 19th, January 26th, February 2nd, & February 9th_ + +Check out the [schedule][1] for all the details. In addition, be sure to follow the [#pshgames][2] hashtag on twitter. There is also [a list of Coaches][3] who are blogging and [tweeting][4] helpful info and tips including this [excellent preparation guide][5]. Lastly, before you head over to the [scripting games website][6] be sure to read this [Important Scripting Games Login and Operational Information][7] post. + + [1]: https://powershell.org/2013/12/16/2014-winter-scripting-games-schedule/ + [2]: https://twitter.com/search?q=%23pshgames&src=hash + [3]: http://mikefrobbins.com/2013/12/23/introducing-the-coaches-of-the-2014-winter-scripting-games/ + [4]: https://twitter.com/mikefrobbins/lists/pshcoaches + [5]: http://p0w3rsh3ll.wordpress.com/2013/12/26/be-prepared-for-the-winter-scripting-games-3-2-1-go/ + [6]: http://scriptinggames.org/ + [7]: https://powershell.org/2013/12/21/important-scripting-games-login-and-operational-information/ diff --git a/content/articles/2013/12/my-outline-for-accelerated-powershell-training/index.md b/content/articles/2013/12/my-outline-for-accelerated-powershell-training/index.md new file mode 100644 index 000000000..a5d968fcd --- /dev/null +++ b/content/articles/2013/12/my-outline-for-accelerated-powershell-training/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2013-12-20-my-outline-for-accelerated-powershell-training/ +title: My outline for accelerated PowerShell training +authors: + - Don Jones +date: "2013-12-20T22:40:00+00:00" +categories: + - Training +aliases: + - /2013/12/my-outline-for-accelerated-powershell-training/ +--- + +When I teach PowerShell, either at a private client or in a public class, I tend to use my own outlines. I'm comfortable with them, and they work really well. They formed the basis for the Microsoft 10961 and 55039 courses, although I had to make some changes to accommodate Microsoft standards and varying MCT delivery styles. But I'm often asked if there's a "MOC-equivalent" outline that combines the entry-level 10961 with the scripting-focused 55039. +Yup. +First, do understand that I naturally teach at a very concise and accelerated pace. I don't spend much time on slides; I tend to skip right to demos, and use those to explain what I'm explaining. If you follow a more common delivery style of around 5min per slide, plus taking your time on demos, my approach might not work well for you. I also tend to not tell a lot of ancillary stories, I tend to make students take break during lab time (rather than individually scheduling breaks), and I tend to be as concise as possible in my lectures. +Also, when accelerating these courses together, you don't do _all_ of the labs. For labs with multiple components (find these 20 command), I'll do about 1/3 of them. For the 55039 main-sequence labs, I'll tell students to pick the "A," "B," or "C" version rather than doing all three; sometimes I'll just have them do the "D" version (which gives them a pre-done starting point for each module, rather than making them build on their own work from a previous module). +For Day 1, I'll cover modules 1-5, and maybe module 6, from 10961. Day 2 will be modules 7, 9, 11, and 12 (covering 6 first, if I didn't get it done on Day 1). That's the "core" PowerShell stuff. It's a fast delivery; it's possible to spread those out over three days if you prefer, but I explicitly skip modules 6, 8, and 10 at this stage. +When my students all have strong shell or scripting skills, 2 days often gets me through that. If they're newer, I'll go slower on modules 1-5, do more of the labs, and take 3 days to cover that 10961 material. +The remainder of the course comes from 55039. That'll be 2 or 3 days, depending on how long it took you to do the 10961 material. Regardless, I'll cover modules 2-5. I'll usually skip module 6, and try to end the day with module 7 on debugging. I'll cover module 8, 9, and 10. That's usually 2 days, so it's the last thing I do if I took 3 days to cover the 10961 stuff. +If I got through 10961 in 2 days, I'll finish the 55039 material, covering modules 11, 13, and 16. If students insist on workflows, I'll throw that module in there - I have mixed feelings and results when it comes to workflow, so it's not part of my standard accelerated delivery. If you have extra time, my priority then goes to modules 15, 13, and 14, in that order. 14 gets you some GUI-building experience, so if the class is pushing for that I'll include that module instead of workflow. +If all that seems a little informal - well, it is. I'm very good at reading my students, and making sure folks are actually keeping up, so I don't press too hard. This is a _lot_ of conceptual and practical material to cover in a week. +Price-wise, in the US, I see this kind of accelerated class going for around $3500, although a lot of training centers offer significant discounts. This accelerated outline is absolutely worth it: you're literally taking someone from zero and teaching them how to build their own script modules and tools in PowerShell. It's a _lot_ to cover; not every class will be up to it. +The labs in both courses are solid, and I'm especially happy with the ones in 55039 in terms of what they cover, and in how challenging they are. I'll warn you that the 55039 labs don't do a lot of hand-holding. Students are expected to _learn_ the material and then execute the labs; the "answer keys" are outright sample solutions, not hints. But if you teach the material as provided, everything students _need_ is in there - if they're willing to work hard and retain what you've shared. diff --git a/content/articles/2013/12/phillyposh-12052013-meeting-summary-and-presentation-materials/index.md b/content/articles/2013/12/phillyposh-12052013-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..88acc8989 --- /dev/null +++ b/content/articles/2013/12/phillyposh-12052013-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,46 @@ +--- +url: /articles/2013-12-09-phillyposh-12052013-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 12/05/2013 meeting summary and presentation materials +authors: + - John Mello +date: "2013-12-10T03:51:19+00:00" +aliases: + - /2013/12/phillyposh-12052013-meeting-summary-and-presentation-materials/ +--- + +1.  [Sunny Chakraborty][1] gave an in-depth presentation on WMI Eventing using PowerShell. A copy of his presentation and scripts can be found [here][2], and a [recording][3] of his presentation can be found on our [YouTube channel][4]. If you want to learn even more about WMI, Sunny recommends checking out [Alain Lissoir's][5] webpage and downloading he WSH and VBS scripts hosted on his site for the two books he was written: "[How to exploit the power of Microsoft's WMI to create mission-critical computing infrastructures][6]" and "[Leveraging Windows Management Instrumentation (WMI) Scripting][7]" + 2. Announcements: + + + + - + January's meeting will be on the 2nd Thursday (***01/09/2014***) of January as opposed to the       1st + + + - + Since we didn't get to last months homework assignment we are pushing it to January's meeting. Here it is again and hopefully this will be a fun task that we can discuss during our next meeting: + + + + + + + + > **Title**: On This Day in Pictures + > **Description:** You have folder of photos on your computer that you take with your Smartphone or digital camera. From time to time you want to be reminded of the cool and interesting things you snapped photos of years before on this day. Being a PowerShell scripter you imagine that PowerShell would be a quick and easy tool for exploring your photo's meta-data to re-discover some fun memories you had by emailing yourself some pictures you took on this same day last year or any year before. You decide to format the email as HTML including the pictures and some data about them. Finally, using the task scheduler to set your script to run every morning so you can take a trip down memory lane with your photos on this day in history. As a PowerShell scripter you roll up your sleeves and get to work. + > **Requirements:** + > + > 1. Your script should look into a directory that may contain sub folders for image files (you may want to support .jpg, .jpeg, .png, etc.). + > 2. The script should then determine the date a photo was taken. Examining the [EXIF][8] meta-data might be handy. + > 3. Get the date the script runs and find all the photos taken on the same day other than the current year. + > 4.  Finally send an email containing the photos taken on this day in history* + + + [1]: https://twitter.com/sunnyc7 + [2]: https://powershell.org/wp-content/uploads/2013/12/PhillyPosh_12_05_2014-Sunny.zip + [3]: http://www.youtube.com/watch?v=h3V6K8ov1Ao + [4]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg + [5]: http://www.lissware.net/ + [6]: http://www.amazon.com/exec/obidos/tg/detail/-/1555582664/qid=1048198398/sr=8-1/ref=sr_8_1/102-5879685-5285706?v=glance&s=books&n=507846 + [7]: http://www.amazon.com/exec/obidos/tg/detail/-/1555582990/qid=1048198398/sr=8-2/ref=sr_8_2/102-5879685-5285706?v=glance&s=books&n=507846 + [8]: http://en.wikipedia.org/wiki/Exchangeable_image_file_format diff --git a/content/articles/2013/12/scheduled-site-downtime/index.md b/content/articles/2013/12/scheduled-site-downtime/index.md new file mode 100644 index 000000000..a3cf7d7be --- /dev/null +++ b/content/articles/2013/12/scheduled-site-downtime/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2013-12-02-scheduled-site-downtime/ +title: Scheduled site downtime +authors: + - Don Jones +date: "2013-12-02T22:13:41+00:00" +categories: + - Announcements +aliases: + - /2013/12/scheduled-site-downtime/ +--- + +Windows Azure has advised us of scheduled downtime on Friday, December 6, from approximately 15:00 hours (US Pacific) until approximately midnight Pacific time. diff --git a/content/articles/2013/12/state-of-the-org-ending-2013/index.md b/content/articles/2013/12/state-of-the-org-ending-2013/index.md new file mode 100644 index 000000000..129fedfbb --- /dev/null +++ b/content/articles/2013/12/state-of-the-org-ending-2013/index.md @@ -0,0 +1,43 @@ +--- +url: /articles/2013-12-30-state-of-the-org-ending-2013/ +title: State of the Org, ending 2013 +authors: + - Don Jones +date: "2013-12-30T19:24:37+00:00" +categories: + - Announcements +aliases: + - /2013/12/state-of-the-org-ending-2013/ +--- + +I wanted to take a moment and wish everyone a very happy new year, and to do a sort of wrap-up of 2013 from PowerShell.org's perspective. +We started 2013 with a bang, including our first-ever PowerShell Summit North America, held on-campus at Microsoft in Redmond. We'll be returning to the Seattle area in April 2014 for [PowerShell Summit North America 2014][1], and are planning the first [PowerShell Summit Europe 2014][1] in Amsterdam in September. For the N.A. show, we need about 50 more Summit attendees to break even, and can accommodate about 100 more than we've currently got registered. +We ran a very successful Scripting Games that kicked off just as the Summit was ending. Thousands participated, tens of thousands of dollars in prizes were handed out, and most importantly the Games made the transition from being a much-loved child of the Microsoft Scripting Guys to being a community-owned event that can hopefully continue forever. We've got the first Winter Scripting Games in a loooong time starting in just a few days, in fact. +In the wake of The Scripting Games, we ran a summer-long series of [Great Debates][2], and your comments on those informed the first-ever [Community Book of PowerShell Practices][3], now offered as a free ebook. +PowerShell.org, Inc. closed its first fiscal year at the end of June 2013, and financially we lost just a bit of money. Don't worry - that was always more or less the intent; we're not running the corporation to make a buck, but rather to more-or-less break even. At the moment, we have $29,988.25 in our checking account, most of which is earmarked for Summit 2014 expenses. +We're now providing hosting services for about 17 [local and regional user groups][4], giving them a spot to post upcoming meeting dates, post-meeting file attachments, and other details. We're hoping this helps raise awareness of the efforts they're all making to have a strong local PowerShell support system in place. +2013 also saw the [PowerScripting Podcast][5] become a welcome part of PowerShell.org. Host Jon Walz also got his first MVP Award, a long-awaited and well-deserved honor that he now shares with co-host Hal Rottenberg. Everyone appreciates the hard work they do, and we at PowerShell.org wanted to make sure they had the resources to keep doing it (equipment ain't free), so we offered to help out when they needed, and they graciously accepted. We're delighted to be working with them. +PowerShell.org played an important role in developing Microsoft's official entry-level PowerShell training, course 10961, by giving the authors (e.g., me) a place to survey folks about topic, level of coverage, and more, and to solicit feedback on the "A" and "B" revs while updating the course for PowerShell v4. This site (and all of you) also played an important role in selecting topics for the advanced-level training, course 10962, which will be developed in 2014. Finally, you all helped provide feedback for Microsoft Courseware Marketplace course 55039, which covers PowerShell scripting and toolmaking. When you see a survey posted here, jump in - it makes a very real difference in some very important projects! +2013 was also the year we Moved to Azure, spinning up an Azure-hosted CentOS VM that's now running the site. It's gotten faster, is a bit easier to maintain, and is a heck of a lot more highly available thanks to Microsoft's cloud hosting. +I'm extremely proud to have had so many folks jump in and help out this year. Dave Wyatt, Matt Penny, Matt Johnson, Mike Shepard, and Nicholas Getchell have all taken on curator roles for the free ebooks we offer on PowerShell.org. They're doing a wonderful job in making sure those titles stay updated - so much so, that [we're now just linking to the books' GitHub repository][3], where you can download the DOC files directly. Dave Wyatt has also been [posting some incredibly detailed and informative blog posts][6] that I hope you're reading - I really appreciate his contributions here. I also want to thank Matt Tilford, Chris Hunt, and Mark Keisling, who have taken on editorial duties for the [TechLetter newsletter][3]. Our aim is to put out a solid, informative, technically deep monthly offering and these guys are absolutely on the job. I hope you're subscribed, because if you aren't, you're missing out. Finally, MVP [Steven Murawski][7] has made PowerShell.org his home for Desired State Configuration (DSC) blogs and code, and he's been prolific. His employer, StackExchange, has been an early adopter of the DSC technology, and Steven's been sharing pretty much everything he's learned. +We've had some transitions in 2013. Board member and co-founder Kirk Munro has had to step away from day-to-day duties with PowerShell.org, although he remains a member of the board. Board member Jason Helmick has stepped into a second-in-command position, and is more or less running the North America Summit from an operational perspective. Jason earned his first MVP Award this year, giving us an all-MVP Board that also includes myself, Jeffery Hicks, and Richard Siddaway. +I'm extremely proud of everything we've accomplished. I'm delighted that so many folks are jumping into the [forums][8] and offering answers to questions - it's a massive relief on my own workload, and there are some damn smart folks offering their help to the community for free. In fact, we plan to recognize some of them in our first-ever PowerShell Heroes award, scheduled for January 2014. We're also going to make good on a promise I made when we started this site: our above-and-beyond contributors are going to become part-owners of this community with an award of stock in PowerShell.org, Inc. That'll give them some concrete control over the community they're helping to build. Look for that mid-2014, when we near the end of our fiscal year. +For 2014, I'd like to thank our returning sponsors, [SAPIEN Technologies][9] and [Interface Technical Training][10]. These folks give a lot, financially, to help make this site work. Please show them your appreciation in every way you can. In 2014, my company, [Concentrated Tech][11], is also coming aboard as a sponsor, and I'll be offering my first-ever public PowerShell training. +I think 2014 should be a great year, both for PowerShell.org and for the broader PowerShell community that we're trying to serve. If you're new here, or you've just been lurking, please jump in and help. Write an article about something you learned, answer a question in the forums, or volunteer to help out. We're all in this together, and the stronger a community we all make _together, _the more we'll be able to support each other when needs arise. +I look forward to serving you in 2014! +Don Jones +President and CEO + + + + [1]: https://powershell.org/community-events/summit/ + [2]: https://powershell.org/category/great-debates/ + [3]: https://powershell.org/newsletter/ + [4]: https://powershell.org/user-groups/ + [5]: https://powershell.org/powerscripting-podcast/ + [6]: https://powershell.org/author/dlwyatt/ + [7]: https://powershell.org/author/stevenmurawski/ + [8]: https://powershell.org/forums/ + [9]: http://www.sapien.com + [10]: http://interfacett.com + [11]: http://concentratedtech.com diff --git a/content/articles/2013/_index.md b/content/articles/2013/_index.md new file mode 100644 index 000000000..594646dd4 --- /dev/null +++ b/content/articles/2013/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from 2013" +description: "PowerShell.org Articles published in 2013." +--- diff --git a/content/articles/2014-01-01-using-install-windowsfeature-with-offline-source.md b/content/articles/2014-01-01-using-install-windowsfeature-with-offline-source.md deleted file mode 100644 index cd9b431f3..000000000 --- a/content/articles/2014-01-01-using-install-windowsfeature-with-offline-source.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Using Install-WindowsFeature with Offline Source -authors: - - Don Jones -date: "2014-01-01T17:04:06+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/01/using-install-windowsfeature-with-offline-source/ ---- - -As you probably know, the Install-WindowsFeature (used to be Add-WindowsFeature; that's now an alias to Install-) can add Windows roles and features from PowerShell. If your server doesn't have the installer source on the local disk, then the cmdlet will default to grabbing it from Windows Update - a pain for disconnected servers. Install-WindowsFeature does offer a means of using an alternate local source (like a DVD or file server location), but using it can be a bit hinky. -The cmdlet help indicates that you should point to a Windows image (WIM) file. That'll work, but you can't just provide the path of the WIM. You also need to put a **wim:/** prefix on the front of the path, and a suffix that tells the thing which edition of Windows you're working with, so that it grabs the right bits. For example, **wim:/d:/sources/install.wim:4**. That "4" is the suffix for Datacenter Edition, telling the installer to look at index 4 within the WIM for the necessary feature. - - * 1 is Standard Edition Server Core - * 2 is Standard Edition - * 3 is Datacenter Edition Server Core - * 4 is Datacenter Edition - -Wanted to post this, as there isn't a good example in the docs. -**UPDATE:** I've [bugged this in Connect][1] if you'd like to vote it up, so that the team gains sight of it and can have an opportunity to expand the docs. - - [1]: https://connect.microsoft.com/PowerShell/feedback/details/812950/install-windowsfeature-docs-incomplete diff --git a/content/articles/2014-01-02-winter-scripting-games-team-formation-in-full-swing.md b/content/articles/2014-01-02-winter-scripting-games-team-formation-in-full-swing.md deleted file mode 100644 index bfce91028..000000000 --- a/content/articles/2014-01-02-winter-scripting-games-team-formation-in-full-swing.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Winter Scripting Games Team Formation in Full Swing -authors: - - Don Jones -date: "2014-01-02T21:40:34+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/winter-scripting-games-team-formation-in-full-swing/ ---- - -It looks like Team Formation is in full swing, with more than a dozen teams already registered for The Scripting Games: Winter 2014. -Some team tips: - - * If you create a new team, we're assigning it a default team name. You can immediately change that. - * Teams start as public, but we're allowing you to make them private. This removed the team from the "join up" list, and gives you an invite code. You can distribute that invite to anyone you wish to join your team, and they can use it to sign up. - * The public team list shows a time zone offset. This is kind of the average number of minutes between you and the other people on the team. So basically, lower numbers means you're all closer to the same time zone. You don't necessarily NEED to be close; it depends on how you all plan to collaborate. - -Right now, we have about a half-dozen public teams that you can join if you'd like to participate in the Games. Remember, a team must have at least 2 players in order to participate. -I'm loving some of the team names, like **Excessive Use of -Force** and **Troll Bait**. I know several local user groups are forming teams as well, and encouraging their members to join. You're welcome to use email, Twitter, Facebook, LinkedIn, or even standing outside and screaming as ways of recruiting members to your team. -The practice event starts Jan 6. **Please pay attention to PowerShell.org's home page** for late-breaking announcements - if we have a problem, we'll post there to let you know. -Good luck! diff --git a/content/articles/2014-01-03-powershell-tip-1-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games.md b/content/articles/2014-01-03-powershell-tip-1-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games.md deleted file mode 100644 index 77eef0136..000000000 --- a/content/articles/2014-01-03-powershell-tip-1-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "PowerShell Tip #1 from the Winner of the Advanced Category in the 2013 Scripting Games" -authors: - - Mike F Robbins -date: "2014-01-03T17:16:16+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/powershell-tip-1-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/ ---- - -In case you haven't heard, the 2014 Winter Scripting Games are just now getting started. Regardless of your skill level with PowerShell, it couldn't be a better time to participate since this is the first time in the history of the scripting games that you'll be able to work as part of a team and receive proactive feedback (before your code is judged) from a team of expert coaches who use PowerShell in the real world on a daily basis. Ultimately, the scripting games make learning PowerShell more interesting and challenging while giving you the opportunity to network with other enthusiasts in the industry. -Now it's time to talk about a PowerShell tip that I wanted to share. -**Tip #1 - Read the Help!** -While this may not be the most popular tip, believe it or not, it's one of the most important and it's something that's so simple it's often times overlooked. In my opinion, you'll never truly be effective with PowerShell and be able to figure things out for yourself until you learn to read the help. -[Click here](http://mikefrobbins.com/2014/01/03/powershell-tip-1-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. -µ diff --git a/content/articles/2014-01-03-scripting-games-winter-2014-notice.md b/content/articles/2014-01-03-scripting-games-winter-2014-notice.md deleted file mode 100644 index 3683bac2b..000000000 --- a/content/articles/2014-01-03-scripting-games-winter-2014-notice.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Scripting Games Winter 2014 Notice -authors: - - Don Jones -date: "2014-01-04T00:05:28+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/scripting-games-winter-2014-notice/ ---- - -Due to some vagaries in the system, we have some users who "belong" to multiple teams. -I think I've corrected the problem so it won't crop up again. -A couple of players' team memberships were manually reduced to 1. If it was you, and you're suddenly on the wrong team, post in the forum and I'll fix it for you. -For everyone else, when you go to the event list you may be redirected to a "You're on multiple teams" page, and asked to click the team you wish to remain on. Your "join date" will not change, so you'll still be able to participate in the events. You'll simply be de-listed from the other teams. -As always, post in the forums if you need help. diff --git a/content/articles/2014-01-03-scripting-games-winter-2014-practice-event-rules.md b/content/articles/2014-01-03-scripting-games-winter-2014-practice-event-rules.md deleted file mode 100644 index e52d1453e..000000000 --- a/content/articles/2014-01-03-scripting-games-winter-2014-practice-event-rules.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Scripting Games Winter 2014 – Practice Event Rules -authors: - - Don Jones -date: "2014-01-03T19:40:29+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/scripting-games-winter-2014-practice-event-rules/ ---- - -On Monday, our practice event should be open at http://ScriptingGames.org. -**If you formed a team but only have one player on Monday morning, you will not be able to submit entries. **I've noticed several folks who have only a single player but who have set their team membership to "private," meaning nobody can join you unless you provide them with your invitation code. -**Your team must have 2-6 players to participate in the Games. ** -You may consider leaving your team (it'll be deleted if you're the last player in it) and joining one of the public teams. Once you join a new team, you will not be able to fully participate until the current, in-progress event is over and the next event begins. - - -Please keep this in mind. In order to participate in the participate in the Practice Event, **you must have at least 2 players on-team by the time the event starts. **Late joiners will NOT be able to participate. So settle up your team memberships this weekend! diff --git a/content/articles/2014-01-05-script-for-setting-up-and-demoing-a-dsc-pull-server.md b/content/articles/2014-01-05-script-for-setting-up-and-demoing-a-dsc-pull-server.md deleted file mode 100644 index 56b9bbeef..000000000 --- a/content/articles/2014-01-05-script-for-setting-up-and-demoing-a-dsc-pull-server.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Script for Setting Up and Demoing a DSC Pull Server -authors: - - Don Jones -date: "2014-01-05T18:59:47+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/01/script-for-setting-up-and-demoing-a-dsc-pull-server/ ---- - -[DSC Setup and Demo Scripts][1] -I recently set up a virtual machine to use for Desired State Configuration (DSC) demos. I wanted to make the demo-ing fairly brainless, as DSC requires a number of setup steps to get a pull server running. So I took some demo scripts Microsoft offered from TechEd 2013, updated them to work with Windows Server 2012 R2 RTM, and thought I'd offer them to you. -**SetupDSC.ps1** is the main script. Now, because I didn't want to use good ol' Start-Demo, there's a who crapload of kinda ugly Write-Debug statements. That way I can get an "about to do ____" message and then have the script pause before doing it. Lets me explain to the class what's about to happen. You can remove all that crud if you like. -**InstallPullServerConfig.ps1** and **PSWSIISEndpoint.psm1** are the updated Microsoft scripts. SetupDSC.ps1 calls these. They're intended to run locally; you'll need to be _on _the machine you want to make into a pull server, and it needs to be Windows Server 2012 R2 (the DSC pull server role is part of the OS, not part of Windows Management Framework v4). Setup takes a few minutes, and will install IIS. This sets up an HTTP pull server. -**SampleConfig.ps1** is a sample DSC configuration, targeted to a computer named MEMBER2. It just specifies that the Windows Server Backup feature be installed. SetupDSC.ps1 actually runs this, which produces a MOF. SetupDSC.ps1 also copies the MOF to the DSC pull server configuration directory. -**SampleSetPullMode.ps1** also gets run by SetupDSC.ps1. This contains a DSC Local Configuration Manager configuration, targeted to MEMBER2, that turns on pull mode and directs MEMBER2 to pull the previously-created configuration. I think I have it refreshing every 5 minutes, which is totally unrealistic for production. Again, this was made for class demos, but you can adjust the time or leave it off to default to 30min. Running this script creates the MOF and pushes it to MEMBER2. That, in turn, causes MEMBER2 to start pulling the sample config, which causes Windows Server Backup to be installed. -SetupDSC.ps1 has some additional code to show that Windows Server Backup isn't installed, and then is installed (after you give the pull time to occur). -Anyway, might need some tweaking to use in production, but hopefully it'll give you a snapshot of the whole DSC process. Much thanks to [James Dawson's article on DSC][2], which gave me a couple of the tweaks I needed to get all this working on RTM code. -Enjoy. - - [1]: https://powershell.org/wp-content/uploads/2014/01/dsc.zip - [2]: http://readsource.co.uk/blog/2013/10/1/configuring-powershell-dsc-pull-mode diff --git a/content/articles/2014-01-05-scripting-games-winter-2014-teams-in-danger.md b/content/articles/2014-01-05-scripting-games-winter-2014-teams-in-danger.md deleted file mode 100644 index 5d646f48a..000000000 --- a/content/articles/2014-01-05-scripting-games-winter-2014-teams-in-danger.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Scripting Games Winter 2014 – Teams in Danger -authors: - - Don Jones -date: "2014-01-05T22:37:11+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/scripting-games-winter-2014-teams-in-danger/ ---- - -Note that as of the time of this post (about 2pm Pacific on Jan 5th), the following teams do not have enough players to participate in the upcoming Practice Event: - - * Lake County Hoosiers - * A - * Annihilators - * AZPOSH - * Avengers - * PeopleTecIsAwesome - * Time Travel is Dangerous - * Kotagiris - * wow. much power. very shell. - * Blasters - * CCC - * Anteaters - * Barracudas - * Hypothermia - * Bearcats - * #PSexec - * Avalanche - * Bull Gators - * Alligators - -To reiterate: **You must have 2-6 players signed into the Web site and joined to your team, or you will be unable to post entries. **Anyone joining after midnight UTC on Jan 6th **will not count** toward your team total for the Practice Event. -Many of the above teams are "private," which means nobody can join them without the team invite code. -If you are on one of the following teams, especially if it's public, _consider quitting NOW and joining another public team that needs players. _Otherwise, you may miss out on the practice event, which starts in just a couple of hours. diff --git a/content/articles/2014-01-06-scripting-games-winter-2014-team-discussion-tips.md b/content/articles/2014-01-06-scripting-games-winter-2014-team-discussion-tips.md deleted file mode 100644 index 842b8aae7..000000000 --- a/content/articles/2014-01-06-scripting-games-winter-2014-team-discussion-tips.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Scripting Games Winter 2014 – Team Discussion Tips -authors: - - Don Jones -date: "2014-01-06T15:42:52+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/scripting-games-winter-2014-team-discussion-tips/ ---- - -When you're logged into the Games, you'll notice that clicking on your team pulls up a "team discussion" box. That's a shared discussion area for you and your team. -![figure_15-001](https://powershell.org/wp-content/uploads/2014/01/figure_15-001.png) -However, if you click on one of the files you've uploaded, you'll see the discussion turn into a "File Discussion." We retain a separate thread for each file you upload, so that you and your team can discuss that file specifically. -![figure_15-002](https://powershell.org/wp-content/uploads/2014/01/figure_15-002.png) - -Deleting a file also deletes its conversation thread. However, **replace**ing a file retains the thread. -Note that coaches may add commentary to any of these, so it's worth your while to quickly click on each file and see if there are comments available. -And of course, your team doesn't HAVE to use these discussion threads. You're also welcome to use email, Skype, smoke signals, or telepathy. Your choice. Keep in mind that our coaches _will_ use these to offer comments on any files you've added. -Speaking of that: Coaches _are not notified_ when you upload files. That means our coaches are just wondering around looking for files to comment upon. So it's in your interests, if you want their feedback, to get something in the system! diff --git a/content/articles/2014-01-07-powershell-summit-north-america-2014-some-more-reasons-to-register.md b/content/articles/2014-01-07-powershell-summit-north-america-2014-some-more-reasons-to-register.md deleted file mode 100644 index ffba9560f..000000000 --- a/content/articles/2014-01-07-powershell-summit-north-america-2014-some-more-reasons-to-register.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: PowerShell Summit North America 2014 – Some More Reasons to Register! -authors: - - Don Jones -date: "2014-01-07T19:17:37+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2014/01/powershell-summit-north-america-2014-some-more-reasons-to-register/ ---- - -PowerShell Summit North America Registration is in full swing, and we've got about 50 more spots to reach our break-even goal. Hopefully, those of you that have been holding off for budgetary reasons are now "weapons free" and can plan to join us in April 2014! - -## Confirmed PowerShell Product Team Presenters - -We've confirmed a great set of speakers from the team itself, including Jason Shirk, Lee Holmes, Kenneth Hanson, and Hemant Manhawar. Of course, Shell Father Jeffrey Snover will also be presenting a couple of sessions! -This helps really round out our [agenda][1], along with several special events that we've got planned. You'll participate in a large-scale Iron Scripter event, mix and mingle with team members in Microsoft's "top of the world" cafe in downtown Bellevue, and rub elbows with PowerShell experts from all over the world during our pre-event mixer. - -## Become VERIFIED EFFECTIVE™ - -We're going to provide a **free voucher for a VERIFIED EFFECTIVE PowerShell Toolmaker** exam to everyone who's already registered, and to everyone who registers **before the end of January**. This is a $250 value, and you'll be able to take your exam after the Summit is over. VERIFIED EFFECTIVE recognition will be valid for one year. Vouchers will be distributed at the Summit itself, and must be used by the end of June, 2014. - -## Join AWPP for 10% Off - -Effective July 2014, we will be launching the Association for PowerShell Professionals (AWPP). Future Summit events will be open _only_ to AWPP members (your member fee includes Summit attendance, along with other benefits). Anyone who has registered for the 2014 Summit already, or **who registers before the end of January 2014**, will receive 10% off their first-year AWPP membership, which will also guarantee you admission to the 2015 Summit. That discount will be valid throughout 2014, so you can join at any time during the year. Vouchers will be distributed at the Summit. Your AWPP membership also includes a VERIFIED EFFECTIVE exam, which you can use anytime in your membership year. That means you could easily get verified for two years in a row, at a massive savings. - -## Save Some Cash on the Summit - -It's sad, but credit card merchant fees pile up. For the Summit, they can be a lot. So if you'd like to pay by company check, we're happy to help. Just contact treasurer@ this domain, and we'll be happy to send you an invoice and accept your payment via check. That'll save you a few bucks. -Don't forget that we've also negotiated killer $109/night room rates at two hotels that are just a short walk from the Summit venue. We've also worked out a discounted rate on an airport shuttle from Sea-Tac, so you won't need a rental car. We're doing as much as we can to help minimize your costs. - -## Please, Tell a Friend - -If you can't attend the Summit, or if you plan to attend, or even if you've already registered - please help us get the word out. We really do need 50 more folks in order to break even, and we need them to help us use up our hotel room block as well, or the organization will be on the hook for those costs. It's crucial that we break even on this event if we're to have more in the future. We don't have a marketing budget, so the more you can do to help folks realize that the Summit exists, the better our chances for succeeding. Thank you in advance! - - - - [1]: https://powershell.org/community-events/summit/powershell-summit-north-america/summit-agenda/ diff --git a/content/articles/2014-01-09-powershell-tip-2-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games.md b/content/articles/2014-01-09-powershell-tip-2-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games.md deleted file mode 100644 index d7d29bab7..000000000 --- a/content/articles/2014-01-09-powershell-tip-2-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "PowerShell Tip #2 from the Winner of the Advanced Category in the 2013 Scripting Games" -authors: - - Mike F Robbins -date: "2014-01-09T14:10:35+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/powershell-tip-2-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/ ---- - -**Tip #2 - Comment (Document) your code!** -This is another one of those tips that probably isn't very popular, but regardless of how good you are at writing PowerShell scripts and functions, they're useless if no one else can figure out how to use them. You might be thinking that you're the only one who uses the PowerShell code that you write, but I'm sure that you like to go on vacation just like the rest of us and none of us are going to live forever. -In [my tip #1 blog](https://powershell.org/2014/01/03/powershell-tip-1-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/) you learned that you need to "Read the Help!". This tip builds on the first one because it allows others to "Read the Help!" for the PowerShell code that you write. -The type of help that you want to provide for your PowerShell functions and scripts is "Comment Based Help". [Click here](http://mikefrobbins.com/2014/01/09/powershell-tip-2-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. -µ diff --git a/content/articles/2014-01-10-scripting-games-winter-2014-we-has-prizes.md b/content/articles/2014-01-10-scripting-games-winter-2014-we-has-prizes.md deleted file mode 100644 index 86c623137..000000000 --- a/content/articles/2014-01-10-scripting-games-winter-2014-we-has-prizes.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Scripting Games Winter 2014 – WE HAS PRIZES!! -authors: - - Don Jones -date: "2014-01-10T19:43:49+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/scripting-games-winter-2014-we-has-prizes/ ---- - -**Many thanks to SAPIEN Technologies** for providing - completely without us asking - first-place and overall-best prizes for The Scripting Games! -We'll have copies of PowerShell Studio (x2), PrimalScript (x2), and the entire SAPIEN Software Suite (x1) for our overall top-scoring team at the end of the Games. Team members can decide how to divvy up the loo themselves. -Remember that Event 1 is coming up soon: - - * Instructions available 2014-01-18 00:00:00 UTC - * Entries accepted starting 2014-01-19 00:00:00 UTC - * All entries due by 2014-01-26 00:00:00 UTC - -**You must be registered and on a team -before - we begin accepting entries, or you will not be able to participate. **Any latecomers will not be allowed to chat or upload files, even if they join a team. diff --git a/content/articles/2014-01-13-tampa-bay-powershell-user-group-jan-meeting.md b/content/articles/2014-01-13-tampa-bay-powershell-user-group-jan-meeting.md deleted file mode 100644 index 9eb4a999a..000000000 --- a/content/articles/2014-01-13-tampa-bay-powershell-user-group-jan-meeting.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Tampa Bay Powershell User Group – Jan Meeting -authors: - - ScriptWarrior -date: "2014-01-13T13:37:14+00:00" -categories: - - Events -aliases: - - /2014/01/tampa-bay-powershell-user-group-jan-meeting/ ---- - -Next meeting: -Topic: Winter Scripting Games Kickoff and Team formation -Jan 16th 2014 6 – 8 PM back at Tek System Tampa Office -FOOD PROVDED![:)](http://cdn.powershell.org/wp/wp-includes/images/smilies/icon_smile.gif) -RSVP via – http://www.eventbrite.com/e/tampa-powershell-user-group-tickets-1634714475 -4301 West Boy Scout Boulevard -Suite 590 -Tampa, FL 33607 diff --git a/content/articles/2014-01-14-winter-scripting-games-2014.md b/content/articles/2014-01-14-winter-scripting-games-2014.md deleted file mode 100644 index 25f83de49..000000000 --- a/content/articles/2014-01-14-winter-scripting-games-2014.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Winter Scripting Games 2014 -authors: - - Jonathan Medd -date: "2014-01-14T10:00:48+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/winter-scripting-games-2014/ ---- - -[![PowerShell-Scripting-Games-Logo](https://powershell.org/wp-content/uploads/2014/01/PowerShell-Scripting-Games-Logo.png)](https://powershell.org/wp-content/uploads/2014/01/PowerShell-Scripting-Games-Logo.png) -If you’re looking to learn or improve on existing skills as part of a new year goal and one of those in PowerShell, then you may find it useful to check out the [Winter Scripting Games 2014][1]. When you are looking to improve your scripting skills it can sometimes be tricky if you don’t have a practical problem to solve. By taking part in these games you will have a number of opportunities to apply your skills to _real _problems. -[Click here](http://www.jonathanmedd.net/2014/01/winter-scripting-games-2014.html) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. - - [1]: https://powershell.org/category/announcements/scripting-games/page/2/ diff --git a/content/articles/2014-01-16-powershell-tip-3-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games.md b/content/articles/2014-01-16-powershell-tip-3-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games.md deleted file mode 100644 index ff27879d2..000000000 --- a/content/articles/2014-01-16-powershell-tip-3-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "PowerShell Tip #3 from the Winner of the Advanced Category in the 2013 Scripting Games" -authors: - - Mike F Robbins -date: "2014-01-16T14:18:54+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/powershell-tip-3-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/ ---- - -In my previous blog article ([PowerShell Tip #2](https://powershell.org/2014/01/09/powershell-tip-2-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/)), I left off with the subject of inline help and stated there was a better way. I’m fast-forwarding through lots of concepts and jumping right into “Advanced Functions and Scripts” with this tip because they are where you’ll find the answer to a “better way” to add inline help. -[Click here](http://mikefrobbins.com/2014/01/16/powershell-tip-3-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. -µ diff --git a/content/articles/2014-01-16-winter-scripting-games-2014-tip-1-avoid-the-aliases.md b/content/articles/2014-01-16-winter-scripting-games-2014-tip-1-avoid-the-aliases.md deleted file mode 100644 index e7251ffc7..000000000 --- a/content/articles/2014-01-16-winter-scripting-games-2014-tip-1-avoid-the-aliases.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "Winter Scripting Games 2014 Tip #1: Avoid the aliases" -authors: - - Boe Prox -date: "2014-01-17T03:57:53+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/winter-scripting-games-2014-tip-1-avoid-the-aliases/ ---- - -Having been a judge for the previous 2 Scripting Game competitions as well as competing in the 2 before that, I have seen my share of scripts submitted that didn't quite meet the cut of what I felt were the best scripts. It doesn't mean that they wouldn't work out in the real world in a production environment (Ok, some wouldn't :)), but some were just really hard to read or others were doing things that I wouldn't consider to be a good practice. The first of several articles that I will be doing will start out with the use of aliases in scripts and why this is not necessarily a good idea. -[Click here](http://learn-powershell.net/2014/01/16/winter-scripting-games-2014-tip-1-avoid-the-aliases/) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. diff --git a/content/articles/2014-01-18-scripting-games-2014-event-submission-tip.md b/content/articles/2014-01-18-scripting-games-2014-event-submission-tip.md deleted file mode 100644 index 8a69d22de..000000000 --- a/content/articles/2014-01-18-scripting-games-2014-event-submission-tip.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Scripting Games 2014 – event submission tip -authors: - - Richard Siddaway -date: "2014-01-18T12:21:45+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/scripting-games-2014-event-submission-tip/ ---- - -I've testing out the judging system using the practice event and one thing jumped out at me. -It was a lot easier to understand the entries for those teams that included a transcript of their entry. -I would very strongly recommend that you include a transcript of your entry running. As a minimum I would recommend that you include: -- the solution running - show each type of input required by the scenario (pipeline, single values, file etc) -- if parameter validation is asked for - show that in action -- show error handling in action if you can -- show the partial contents of any output file -Transcripts make for happy judges. You want your judges to be happy don't you... diff --git a/content/articles/2014-01-20-winter-scripting-games-2014-tip-2-use-requires-to-let-powershell-do-the-work-for-you.md b/content/articles/2014-01-20-winter-scripting-games-2014-tip-2-use-requires-to-let-powershell-do-the-work-for-you.md deleted file mode 100644 index c483a62bf..000000000 --- a/content/articles/2014-01-20-winter-scripting-games-2014-tip-2-use-requires-to-let-powershell-do-the-work-for-you.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Winter Scripting Games 2014 Tip #2: Use #Requires to let PowerShell do the work for you" -authors: - - Boe Prox -date: "2014-01-21T03:51:34+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/winter-scripting-games-2014-tip-2-use-requires-to-let-powershell-do-the-work-for-you/ ---- - -In Version 2 of PowerShell, you had the ability to use #Requires –Version 2.0 to ensure that your scripts/functions would only run at a specified PowerShell version to prevent folks running an older version from wondering why things weren't working that well. -In this article, I will show you a couple of new additions to the #Requires statement that will make your life easier when writing functions that require specific pre-requisites rather than coding your own methods -[Click here](http://learn-powershell.net/2014/01/20/winter-scripting-games-2014-tip-2-use-requires-to-let-powershell-do-the-work-for-you/) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article.. diff --git a/content/articles/2014-01-21-adding-and-removing-items-from-a-powershell-array.md b/content/articles/2014-01-21-adding-and-removing-items-from-a-powershell-array.md deleted file mode 100644 index 503eb3e41..000000000 --- a/content/articles/2014-01-21-adding-and-removing-items-from-a-powershell-array.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Adding and Removing Items from a PowerShell Array -authors: - - Jonathan Medd -date: "2014-01-21T11:46:35+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/adding-and-removing-items-from-a-powershell-array/ ---- - -Adding and removing Items from a PowerShell array is a topic which can lead to some confusion, so here are a few tips for you. -Create an array and we will note the type [System.Array](http://msdn.microsoft.com/en-us/library/system.array(v=vs.110).aspx): -[Click here](http://www.jonathanmedd.net/2014/01/adding-and-removing-items-from-a-powershell-array.html) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. diff --git a/content/articles/2014-01-21-phillyposh-01092014-meeting-summary-and-presentation-materials.md b/content/articles/2014-01-21-phillyposh-01092014-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 1607925f9..000000000 --- a/content/articles/2014-01-21-phillyposh-01092014-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: PhillyPoSH 01/09/2014 meeting summary and presentation materials -authors: - - John Mello -date: "2014-01-21T22:53:52+00:00" -aliases: - - /2014/01/phillyposh-01092014-meeting-summary-and-presentation-materials/ ---- - -1. [Lido Paglia][1] gave a presentation entitled “A PowerShell beginner’s guide to using GitHub”. During his talk Lido went over the history of GitHub and how you can use it to manage your scripts and to collaboratively code (e.g. The Winter Scripting games!). A [copy of his presentation materials][2] are available on our [GitHub Repository][3]. - 2. [Lido Paglia][1] and [John Mello][4] both went over their approach to the homework problem they presented during the [11/07/2013][5] meeting. You can find a copy of [Lido's][6] and [John's][7] script in our [GitHub Repository][3]. - 3. A [recording of this meeting][8] has been posted to our [YouTube channel][9]; please note that there are some audio issues near the end of the recording. - - [1]: https://twitter.com/nicemarmot - [2]: https://github.com/PhillyPoSH/2014-01 - [3]: https://github.com/PhillyPoSH - [4]: http://mellositmusings.com/ - [5]: https://powershell.org/2013/11/12/phillyposh-11072013-meeting-summary-and-presentation-materials/ - [6]: https://github.com/PhillyPoSH/2014-01/blob/master/PhotoFlashback.ps1 - [7]: https://github.com/PhillyPoSH/2014-01/blob/master/PhotoFlashback_JohnMello.ps1 - [8]: http://www.youtube.com/watch?v=culZp4EwmdU - [9]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014-01-21-testing-for-admin-privileges-in-powershell.md b/content/articles/2014-01-21-testing-for-admin-privileges-in-powershell.md deleted file mode 100644 index c47d56736..000000000 --- a/content/articles/2014-01-21-testing-for-admin-privileges-in-powershell.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Testing for Admin Privileges in PowerShell -authors: - - Jonathan Medd -date: "2014-01-21T10:27:53+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/testing-for-admin-privileges-in-powershell/ ---- - -Sometimes when running a PowerShell script you may need to test at the beginning whether the process it was called from had Windows admin privileges in order to be able to achieve what it needs to do. Prior to PowerShell v4 I had used something along the lines of the following to test for this condition – not the most obvious piece of code ever to be fair: -[Click here](http://www.jonathanmedd.net/2014/01/testing-for-admin-privileges-in-powershell.html) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. diff --git a/content/articles/2014-01-23-powershell-saturday-007-style.md b/content/articles/2014-01-23-powershell-saturday-007-style.md deleted file mode 100644 index 27665e6a4..000000000 --- a/content/articles/2014-01-23-powershell-saturday-007-style.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: PowerShell Saturday 007 style -authors: - - Terri Donahue -date: "2014-01-23T17:46:49+00:00" -aliases: - - /2014/01/powershell-saturday-007-style/ ---- - -Last year was the first annual PowerShell Saturday in Charlotte, NC. We were 002. This year, we are back and will be blowing minds in 007 style. We have some great speakers and sessions lined up and there are still [tickets available](https://www.eventbrite.com/e/powershell-saturday-007-charlotte-nc-tickets-9019263861?ref=ecount). - -The popular Iron Scripter! competition will also be back. - -All of the information you could want to know about this event is located on the [PowerShell Saturday](http://powershellsaturday.com/007/) site. Jump on over, take a look around, and don’t forget to register. diff --git a/content/articles/2014-01-23-powershell-tip-from-the-head-coach-of-the-2014-winter-scripting-games-design-for-performance-and-efficiency.md b/content/articles/2014-01-23-powershell-tip-from-the-head-coach-of-the-2014-winter-scripting-games-design-for-performance-and-efficiency.md deleted file mode 100644 index 81f13c1b2..000000000 --- a/content/articles/2014-01-23-powershell-tip-from-the-head-coach-of-the-2014-winter-scripting-games-design-for-performance-and-efficiency.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "PowerShell Tip from the Head Coach of the 2014 Winter Scripting Games: Design for Performance and Efficiency!" -authors: - - Mike F Robbins -date: "2014-01-23T14:28:33+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/powershell-tip-from-the-head-coach-of-the-2014-winter-scripting-games-design-for-performance-and-efficiency/ ---- - -There are several concepts that come to mind when discussing the topic of designing your PowerShell commands for performance and efficiency, but in my opinion one of the items at the top of the list is "Filtering Left" which is what I'll be covering in this blog article. -First, let's start out by taking a look at an example of a simple one-liner command that's poorly written from a performance and efficiency standpoint: -[Click here](http://mikefrobbins.com/2014/01/23/powershell-tip-from-the-head-coach-of-the-2014-winter-scripting-games-design-for-performance-and-efficiency/) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. -µ diff --git a/content/articles/2014-01-27-episode-255-powerscripting-podcast-steve-roberts-from-amazon-on-aws-and-powershell.md b/content/articles/2014-01-27-episode-255-powerscripting-podcast-steve-roberts-from-amazon-on-aws-and-powershell.md deleted file mode 100644 index 996bc5deb..000000000 --- a/content/articles/2014-01-27-episode-255-powerscripting-podcast-steve-roberts-from-amazon-on-aws-and-powershell.md +++ /dev/null @@ -1,305 +0,0 @@ ---- -title: Episode 255 – PowerScripting Podcast – Steve Roberts from Amazon on AWS and PowerShell -authors: - - Jonathan Walz -date: "2014-01-28T00:07:40+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/01/episode-255-powerscripting-podcast-steve-roberts-from-amazon-on-aws-and-powershell/ ---- - -**A Podcast about Windows PowerShell.** - Listen: - - - **[![](http://powerscripting.libsyn.com/img/podcastIcon.gif)](http://traffic.libsyn.com/powerscripting/PSPodcast-255.mp3)** - - - -## - In This Episode - - - - - - Tonight on the PowerScripting Podcast, we talk to Steve Roberts from Amazon on Amazon Web Services and PowerShell. - - - - -## - News - - - - - - - - - - [The Scripting Games](https://powershell.org/category/announcements/scripting-games/) are going on now! - - - - - - - - - - [PowerShell Saturday #007](http://powershellsaturday.com/007/) is on February 8th - - - - - - - - - - [PowerShell Saturday #008](http://powershellsaturday.com/008/) is on February 15th - - - - - - - - -## - Interview - - - - - - Guest - Steve Roberts - - - - -#### - Links - - - - - - - - - - [Amazon Web Services](http://aws.amazon.com/) - - - - - - - - - - [AWS Tools for PowerShell](http://aws.amazon.com/powershell/) - - - - - - - - - - AWS .Net / PowerShell team - - - - - - - - - [Windows & .Net Developer Center](http://aws.amazon.com/net/) - - - - - - - - - - [Blog](http://aws.amazon.com/net/) - - - - - - - - - - Twitter: [@awsfornet](https://twitter.com/awsfornet) - - - - - - - - - - - - - [Handling credentials with PowerShell tools](http://blogs.aws.amazon.com/net/post/Tx36NATIEAMER5V/Handling-Credentials-with-AWS-Tools-for-Windows-PowerShell) - - - - - - - - - - - - - - - - Chatroom Highlights: - - - - - - [21:55:58] [http://amzn.com/1430264519](http://amzn.com/1430264519) - - - - - - [21:56:13] Pro PowerShell for Amazon Web Services - - - - - - [21:56:33] Steve (speaking) was a big help with the book - - - - - - [21:56:43] his team was great - - - - - - [https://powershell.org/community-events/summit/](https://powershell.org/community-events/summit/) - - - - - - [http://www.panasonic.com/business/toughpad/us/7-inch-tablet-fz-m1.asp](http://www.panasonic.com/business/toughpad/us/7-inch-tablet-fz-m1.asp) - - - - - - [http://aws.amazon.com/powershell/](http://aws.amazon.com/powershell/) - - - - - - [http://docs.aws.amazon.com/powershell/latest/reference/Index.html](http://docs.aws.amazon.com/powershell/latest/reference/Index.html) - - - - - - [http://aws.amazon.com/](http://aws.amazon.com/) - - - - - - [http://amzn.com/1430264519](http://amzn.com/1430264519) - - - - - - [http://docs.aws.amazon.com/powershell/latest/reference/Index.html](http://docs.aws.amazon.com/powershell/latest/reference/Index.html) - - - - - - [http://aws.amazon.com/net/](http://aws.amazon.com/net/) - - - - - - [http://blogs.aws.amazon.com/net](http://blogs.aws.amazon.com/net) - - - - - - [http://www.musicradar.com/us/news/guitars/trent-reznor-talks-johnny-cash-168199](http://www.musicradar.com/us/news/guitars/trent-reznor-talks-johnny-cash-168199) - - - - - - [https://scontent-a-iad.xx.fbcdn.net/hphotos-ash3/1607005_10202465193703988_1046463679_n.jpg](https://scontent-a-iad.xx.fbcdn.net/hphotos-ash3/1607005_10202465193703988_1046463679_n.jpg) - - - - - - ## what does AWS stand for again? - - - - - - DexterPOSh, please add ## before your questions so they are easier for us to pick out - - - - - - @JonWalz ...got it ## - - - - - - ## can you give a quick/small example of the differences between AWS and Azure? - - - - - - ## Can I extend my local Lab to include machines from AWS ? - - - - - - ## does he have a blog - - - - -#### - The Question - Hero/Power - - - - - - - - - - Thor diff --git a/content/articles/2014-01-29-the-scripting-games-winter-2014-update-on-event-1-scores.md b/content/articles/2014-01-29-the-scripting-games-winter-2014-update-on-event-1-scores.md deleted file mode 100644 index 9b6fd782f..000000000 --- a/content/articles/2014-01-29-the-scripting-games-winter-2014-update-on-event-1-scores.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: The Scripting Games Winter 2014 – Update on Event 1 Scores -authors: - - Don Jones -date: "2014-01-29T18:16:58+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/the-scripting-games-winter-2014-update-on-event-1-scores/ ---- - -Note that scorecards for the first event will not be accurate immediately on Sunday when judging closes; we have the scores in the database, but they're not tagged in a way the system can find them. The bug has been fixed, but I need to go through and manually re-tag the first day's scorecards, and it's going to take a couple of days. This also affect the leaderboard display. I hope to have it fixed over the weekend. Thanks for your patience! diff --git a/content/articles/2014-01-31-reporting-on-installed-windows-programs-via-the-registry.md b/content/articles/2014-01-31-reporting-on-installed-windows-programs-via-the-registry.md deleted file mode 100644 index 02e21066d..000000000 --- a/content/articles/2014-01-31-reporting-on-installed-windows-programs-via-the-registry.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Reporting On Installed Windows Programs Via The Registry -authors: - - Jonathan Medd -date: "2014-01-31T14:37:18+00:00" -categories: - - Scripting Games -aliases: - - /2014/01/reporting-on-installed-windows-programs-via-the-registry/ ---- - -Quite a common request for working with Windows machines is to report the software installed on them. If you don’t have a centralised system for reporting on client software (many places don’t) then you may turn to some form of scripted method to obtain this information. -Most people tend to head to **Add / Remove Programs** when thinking about what software is installed in Windows. However, not all applications will always populate information in there, depending on how they have been installed. Additionally, to query that information you would typically query the WMI class Win32_Product, however this [can lead to performance issues](http://support.microsoft.com/kb/974524). -[Click here](http://www.jonathanmedd.net/2014/01/reporting-on-installed-windows-programs-via-the-registry.html) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. diff --git a/content/articles/2014-02-03-my-2014-public-powerclass-is-now-open-for-registration.md b/content/articles/2014-02-03-my-2014-public-powerclass-is-now-open-for-registration.md deleted file mode 100644 index b7135a718..000000000 --- a/content/articles/2014-02-03-my-2014-public-powerclass-is-now-open-for-registration.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: MY 2014 Public POWERCLASS is Now Open for Registration -authors: - - Don Jones -date: "2014-02-03T18:44:02+00:00" -categories: - - Training -aliases: - - /2014/02/my-2014-public-powerclass-is-now-open-for-registration/ ---- - -I'm going to be running a 3-day POWERCLASS April 2, 3, and 4 near Raleigh-Durham, NC! You can get [full details on my company's website][1], including pricing and class descriptions. -Don't leave near Raleigh-Durham? Well, it's a fun place, and not that expensive to visit. More importantly, I'm _not_ going to be doing a huge road-show and visiting a bunch of cities. Right now, my schedule is almost full through _September, _so this may well be the only public class I do in 2014. It might therefore be worth your while to take a short trip! -The class will be VERY limited in size - just 16 students, max, and I'll be happy with a bunch fewer. This is a _hardcore_ class. We're going to assume you've conquered the basics of Windows PowerShell and that you're looking to implement best practices, start using PowerShell for real production tasks, and learn more about PowerShell performance and troubleshooting. It's a "bring your own laptop" hands-on class, too, so you'll get tons of hands-on time with an instructor who really cares about what you learn. -This is all-new material, and you won't find it anyplace else. It's applicable to v2 through v4, although some things - we WILL be covering DSC, for example - only apply to specific versions (and you'll learn which is which as we go). -It's the best PowerShell class I could come up with - I hope you'll join me. - - [1]: http://events.concentratedtech.com diff --git a/content/articles/2014-02-03-scripting-games-event-1-close.md b/content/articles/2014-02-03-scripting-games-event-1-close.md deleted file mode 100644 index 6696c6979..000000000 --- a/content/articles/2014-02-03-scripting-games-event-1-close.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Scripting Games event 1 close -authors: - - Richard Siddaway -date: "2014-02-03T11:57:25+00:00" -categories: - - Scripting Games -aliases: - - /2014/02/scripting-games-event-1-close/ ---- - -Event 1 is over and the judging is complete. -First off congratulations to every team that posted an entry - the events in these games are different and we've tried to up the challenge level to account for it being a team based. -The high scorers for event 1 are: -1.Troll Bait with 22 points -2.Kitton Mittons with 22 points -3.Aliens with 20 points -4.PhillyPosh with 20 points -5.Thanks4TheInvite with 17 points -6.TecHaH with 17 points -7.Bengals with 17 points -8.TPUG THUGS with 16 points -9.DuPSOGD2 with 16 points -10.Hogans Heroes with 16 points -Congratulations to them. -Good luck to everyone with the remaining events diff --git a/content/articles/2014-02-04-using-powershell-parameter-validation-to-make-your-day-easier.md b/content/articles/2014-02-04-using-powershell-parameter-validation-to-make-your-day-easier.md deleted file mode 100644 index f418aa2a6..000000000 --- a/content/articles/2014-02-04-using-powershell-parameter-validation-to-make-your-day-easier.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Using PowerShell Parameter Validation to Make Your Day Easier -authors: - - Boe Prox -date: "2014-02-05T03:59:24+00:00" -categories: - - Scripting Games -aliases: - - /2014/02/using-powershell-parameter-validation-to-make-your-day-easier/ ---- - -A number of entries in the Winter Scripting Games use parameter validation, but some that I have seen may not be using it correctly or to its full potential. -Writing functions or scripts require a variety of parameters which have different requirements based on a number of items. It could require a collection, objects of a certain type or even a certain range of items that it should only accept. -The idea of parameter validation is that you can specify specific checks on a parameter that is being used on a function or script. If the value or collection that is passed to the parameter doesn’t meet the specified requirements, a terminating error is thrown and the execution of the code halts and gives you an error stating (usually readable) the reason for the halt. This is very powerful and allows you to have much tighter control over the input that is going into the function. You don’t want to have your script go crazy halfway into the code execution because the values sent to the parameter were completely off of the wall. -[Click here](http://learn-powershell.net/2014/02/04/using-powershell-parameter-validation-to-make-your-day-easier/) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. diff --git a/content/articles/2014-02-09-phillyposh-02062014-meeting-summary-and-presentation-materials.md b/content/articles/2014-02-09-phillyposh-02062014-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 61a81b817..000000000 --- a/content/articles/2014-02-09-phillyposh-02062014-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: PhillyPoSH 02/06/2014 meeting summary and presentation materials -authors: - - John Mello -date: "2014-02-10T01:26:38+00:00" -aliases: - - /2014/02/phillyposh-02062014-meeting-summary-and-presentation-materials/ ---- - -Art Beane gave a presentation using PowerShell to automate applications using [COM][1] . A [copy of his presentation materials][2] are available on our [GitHub Repository][3]. Due to recording issues, we do not [We do have a recording][4] of this meeting on our [YouTube channel.][5] - - [1]: http://www.microsoft.com/com/default.mspx - [2]: https://github.com/PhillyPoSH/2014-02 - [3]: https://github.com/PhillyPoSH - [4]: http://youtu.be/Q0wFY2JPSMg - [5]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014-02-09-problems-with-windows-live-logins.md b/content/articles/2014-02-09-problems-with-windows-live-logins.md deleted file mode 100644 index dc555f640..000000000 --- a/content/articles/2014-02-09-problems-with-windows-live-logins.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Problems with Windows Live Logins -authors: - - Don Jones -date: "2014-02-09T20:39:47+00:00" -categories: - - Announcements -aliases: - - /2014/02/problems-with-windows-live-logins/ ---- - -I know we're currently seeing folks having a problem logging into the site by means of Windows Live accounts. Unfortunately, the problem is on Microsoft's end - we've submitted a ticket. -In the meantime, I want to point out a neat feature that can help: You can log in using a different social account, and if it or you provides the same e-mail address that you use with your Live account, our site will link the two. From then on you can log into the same profile on our site using either social account. Makes a nice backup. -For this linking to work, you (a) need to know the e-mail address that you use to log into Windows Live. You then need to (b1) log in using a social account that has the same e-mail address for you, or (b2) log in using a social account that doesn't provide an e-mail to us. In the case of (b2), we'll then prompt you for an e-mail address, and you provide the same one you use to log into Windows Live. That's how we link your profile to the new social account. -Social accounts that fall into the (b2) category include BlogSpot.com, Twitter, and LiveJournal. -We very much want to get Windows Live working again. We're working on it, and you can contact our admin@ email alias if you think you have any clues for helping. diff --git a/content/articles/2014-02-10-testing-for-the-presence-of-a-registry-key-and-value.md b/content/articles/2014-02-10-testing-for-the-presence-of-a-registry-key-and-value.md deleted file mode 100644 index 40b45b192..000000000 --- a/content/articles/2014-02-10-testing-for-the-presence-of-a-registry-key-and-value.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Testing for the Presence of a Registry Key and Value -authors: - - Jonathan Medd -date: "2014-02-10T17:41:19+00:00" -categories: - - Scripting Games -aliases: - - /2014/02/testing-for-the-presence-of-a-registry-key-and-value/ ---- - -There are a number of different ways to test for the presence of a registry key and value in PowerShell. Here’s how I like to go about it. We’ll use an example key **HKLM:\SOFTWARE\TestSoftware** with a single value **Version**: -[Click here](http://www.jonathanmedd.net/2014/02/testing-for-the-presence-of-a-registry-key-and-value.html) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. diff --git a/content/articles/2014-02-13-powershell-saturday-007-in-review.md b/content/articles/2014-02-13-powershell-saturday-007-in-review.md deleted file mode 100644 index 6ed3dd13d..000000000 --- a/content/articles/2014-02-13-powershell-saturday-007-in-review.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: PowerShell Saturday 007 in review -authors: - - Terri Donahue -date: "2014-02-13T16:55:44+00:00" -aliases: - - /2014/02/powershell-saturday-007-in-review/ ---- - -PowerShell Saturday was a huge success. Thank you to all of the speakers, event organizers, and most of all attendees for making it a great day. A new Iron Scripter was crowned and received this awesome trophy. - -![Embedded image permalink](https://pbs.twimg.com/media/Bf9xA3zCAAARsYk.jpg) - -Congrats to Stephen Owen aka @SRed13! - -There were many great sessions for both beginners and advanced scripters. Some of the speakers even posted slides, videos, and scripts of their presentations. Check out Brian Wilhite’s, @bwhilhite1979, ‘CIM’narios [downloads](http://t.co/SZdsUBcOdV) from the event. Ashley McGlone, @GoateePFE, posted his beginner sessions including slides, video, and the coveted scripts [here](http://t.co/y5VaRNA3i5). - -If you attended and haven’t requested your free ebook from O’Reilly (the flyer was in the goody bag), you might be surprised by the list that is available. - -Until next time, Happy Scripting! diff --git a/content/articles/2014-02-17-closing-the-games.md b/content/articles/2014-02-17-closing-the-games.md deleted file mode 100644 index b0cd45a8a..000000000 --- a/content/articles/2014-02-17-closing-the-games.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Closing the Games -authors: - - Richard Siddaway -date: "2014-02-17T22:10:30+00:00" -categories: - - Scripting Games -aliases: - - /2014/02/closing-the-games/ ---- - -The judging is complete for the fourth and final event in the 2014 Winter Scripting Games. -This Games was something very different in that we presented 4 we complex scenarios that were designed to be as close as possible to the type of tasks you may have to perform at work. The solutions required multi-file answers - there's no way you could solve these with a one liner! -All of the teams that submitted entries rose to meet the hardest challenge I've seen in a Scripting Games - and I've taken part of judged all but the first Games. -All entries were scored by 2 judges with the judges being rotated to ensure that all judges scored each team in at least one event. -I'd like to thank the judges for their hard work and also thank the coaching team put together by Mike Robbins - most of all I'd like to thank all of the teams that entered for taking part. -In any Games we have winners and the winning teams from these Games are: -1.Kitton Mittons with 19.375 points (8 of 8 scores received) -2.TecHaH with 18.75 points (8 of 8 scores received) -3.Schnipersons with 18.5 points (8 of 8 scores received) -Congratulations to Kitton Mittons for winning the 2014 Winter Scripting Games - if a representative from the winning team could please contact Don Jones or myself we'll see about getting your prizes to you . -The Games are closed. . -Until the next time. diff --git a/content/articles/2014-02-17-what-should-the-scripting-games-look-like-next-time.md b/content/articles/2014-02-17-what-should-the-scripting-games-look-like-next-time.md deleted file mode 100644 index 4c8ac1479..000000000 --- a/content/articles/2014-02-17-what-should-the-scripting-games-look-like-next-time.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: What Should The Scripting Games Look Like Next Time? -authors: - - Don Jones -date: "2014-02-17T18:17:14+00:00" -categories: - - Scripting Games -aliases: - - /2014/02/what-should-the-scripting-games-look-like-next-time/ ---- - -If you've been following along with The Scripting Games over the past couple of iterations, you know that we've been trying some different, new things. This Winter Games, we did a team-based series of events that threw some _really_ complex scenarios at you. However, we know some folks would like to see the next Summer Games include a less-complex track that perhaps includes a focus on one-liners. -(Not that one-liners are an essential part of a work environment, but they're fun and a good competitive thing - this is _games_, after all.) -So we're looking for your ideas. Drop a comment, and tell us how you think the next Games should be structured. -**However, before you comment, **understand that judging by official, expert judges gets _extremely_ difficult. Multiple 10 events across 250 entries and you've got a _metric butt __tonne_ of work for our volunteers to do. Quite frankly, it's unlikely we'll be able to provide a score-per-entry with that kind of volume. The folks who do judging just can't take that much time off work. Seriously, even if a judge only had to look at an entry for 2 minutes, that can easily be more than 80 hours of work to look at every entry. It just isn't do-able. -So, in your comment, include some thoughts on what you'd like to see for the judging/scoring side as well, keeping in mind the desire of judges to also have family lives and jobs. What's your real goal in participating in the Games? To get _community_ feedback (comments) on what you've done? We can arrange that. Is it perhaps educational to have judges pick out "noteworthy" (both good and bad) entries and comment on them, as a learning guide? Or are you solely after having a "known" expert offer commentary on your entry - which isn't something we can guarantee if there are a large number of entries? -Help us understand what you're in it for, and give us some ideas for creating a Summer event that's _fun, _as well as educational. diff --git a/content/articles/2014-02-19-free-ebook-from-microsofts-scripting-guy-windows-powershell-networking-guide.md b/content/articles/2014-02-19-free-ebook-from-microsofts-scripting-guy-windows-powershell-networking-guide.md deleted file mode 100644 index 4d1b12626..000000000 --- a/content/articles/2014-02-19-free-ebook-from-microsofts-scripting-guy-windows-powershell-networking-guide.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Free eBook from Microsoft's Scripting Guy: Windows PowerShell Networking Guide" -authors: - - Don Jones -date: "2014-02-19T14:55:00+00:00" -categories: - - Books - - PowerShell for Admins -aliases: - - /2014/02/free-ebook-from-microsofts-scripting-guy-windows-powershell-networking-guide/ ---- - -Ed Wilson, Microsoft's Scripting Guy, has created a free ebook, _Windows PowerShell Networking Guide. _It's designed to provide a super-quick PowerShell crash course, and then show you how to  manage various networking scenarios by using the shell. -And it's free! Just click the link to get your copy - and please, tell a friend! -[PoshNetworking.pdf][1] - - [1]: https://powershell.org/wp-content/uploads/2014/02/PoshNetworking.pdf.zip diff --git a/content/articles/2014-02-19-julies-comments-the-scripting-games-winter-2014.md b/content/articles/2014-02-19-julies-comments-the-scripting-games-winter-2014.md deleted file mode 100644 index ddc2c8aeb..000000000 --- a/content/articles/2014-02-19-julies-comments-the-scripting-games-winter-2014.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Julie's Comments: The Scripting Games – Winter 2014" -authors: - - Don Jones -date: "2014-02-19T22:00:00+00:00" -categories: - - Scripting Games -aliases: - - /2014/02/julies-comments-the-scripting-games-winter-2014/ ---- - -_This post comes to us from Julie Andreacola, one of the members of team Kitton Mittons, who won The Scripting Games - Winter 2014. You're welcome to submit your thoughts about the Games as well!___ -The 2014 Scripting Games are over and once again, it was a terrific experience. This was my third scripting games and I was blown away with all that I learned. -The team approach was very appealing to me as I have been the PowerShell expert at my workplace so I was hoping to find a team where someone knew more than I did as I’m only intermediate in PowerShell skills. I struggled to put a team together from our local PowerShell user group for the practice event, but it just didn’t work out due to the timing and workload of potential team members. I took to Twitter to find a team that had an open spot and found the Kitton_Mittons. -The team was just what I needed. We had no expectations to win and we acknowledged that some weeks, people would not be able to participate. All of the team, but myself was located in Northern Virginia, so we arranged for a Google Hangout each evening around 7 p.m. We also had a shared repository on GitHub. Both of these tools were new for us, but were invaluable for our team collaboration. I think we only had one night with everyone in attendance. The sessions varied from discussion of elements of the script, screen sharing (nice Google Hangout feature), and general geek conversation. Two of the team traveled to Charlotte NC to join me in PowerShell Saturday 007 where we met and gained another team member for the final few events. -The learning benefits happened immediately. The first week I learned more about parameters and using them to validate inputs. I immediately began implementing them in my scripts at work, making them more robust and easier to hand off to others as I was transitioning to a new job. A couple days later, our team made our first module. I knew it was easy, but had never done it and now my script at work had a module. One of our team members made an install script that put the files and modules in the correct places. I realized the advantage of this especially when turning scripts over to users unfamiliar with PowerShell. I was able to take the same installer script and quickly customize for use in my workplace. The following weeks included getting more experience with efficiencies of script blocks and better error checking. Although many of my evenings were being taken up with PowerShell, I found the nightly sessions invaluable as our team leader, Jason Morgan, took the time to teach and explain the more complex aspects of the scripts. -The 2014 Scripting Games exceeded my expectations and truly advanced my skills. I also have a new network of System Center IT Pros. I’m starting a new job this week and I know what I learned and gained over the last 4 weeks will help me to excel in this new position. A big thank you to my team mates, coaches, judges, and the PowerShell community. Learning can be fun! diff --git a/content/articles/2014-02-25-up-next-nick-howell-from-netapp-talking-about-software-defined-datacenter.md b/content/articles/2014-02-25-up-next-nick-howell-from-netapp-talking-about-software-defined-datacenter.md deleted file mode 100644 index 4865b7db3..000000000 --- a/content/articles/2014-02-25-up-next-nick-howell-from-netapp-talking-about-software-defined-datacenter.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Up Next: Nick Howell from NetApp talking about software defined datacenter" -authors: - - ScriptingWife -date: "2014-02-25T16:22:28+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/02/up-next-nick-howell-from-netapp-talking-about-software-defined-datacenter/ ---- - -This Thursday, Feb 27, 2014 join us with guest, Nick Howell, (@that1guynick) from NetApp as the discussion will be software defined datacenter. See you at 9:30PM EST diff --git a/content/articles/2014-03-03-charlotte-powershell-user-group-meeting-cancelled-this-week-3614.md b/content/articles/2014-03-03-charlotte-powershell-user-group-meeting-cancelled-this-week-3614.md deleted file mode 100644 index c154ac102..000000000 --- a/content/articles/2014-03-03-charlotte-powershell-user-group-meeting-cancelled-this-week-3614.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Charlotte PowerShell User Group Meeting cancelled this week 3/6/14 -authors: - - ScriptingWife -date: "2014-03-04T04:00:28+00:00" -aliases: - - /2014/03/charlotte-powershell-user-group-meeting-cancelled-this-week-3614/ ---- - -Sorry but we have to cancel the User group meeting this month in Charlotte on 3/6/14 we will meet again on April 3, 2014. diff --git a/content/articles/2014-03-04-the-dsc-opportunity-for-isvs.md b/content/articles/2014-03-04-the-dsc-opportunity-for-isvs.md deleted file mode 100644 index 6a2c29bec..000000000 --- a/content/articles/2014-03-04-the-dsc-opportunity-for-isvs.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: The DSC Opportunity for ISVs -authors: - - Don Jones -date: "2014-03-04T23:45:02+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/03/the-dsc-opportunity-for-isvs/ ---- - -Desired State Configuration offers a number of immediate opportunities for independent software vendors (ISVs) who are smart enough to jump on board _now. _DSC currently suffers from a marked lack of tooling. That's partially deliberate; MS obviously needs to deliver the functionality, and they may well rely on third parties or the System Center team to build tools on top of that functionality. But let's explore some of the immediate opportunities. -**Change Control and Versioning**. This should be pretty easy. We basically need a way to "check in" a new DSC configuration, possibly have it go through an approvals workflow, and then deploy it. In more detail, I'd want to be able to submit a configuration script to this tool. It would run the config, generate a MOF, and deploy it to a "lab" pull server location. I could then verify its functionality, and "approve" it to deploy the MOF to a production pull server. Deployment would include creating the necessary checksum file. Obviously, rollback capability to a previous version would be nice.** -** -**Configuration Consolidation. **Natively, DSC requires me to specify the nodes I want to push a configuration too. I'd like to see a tool that lets me create server lists somewhat graphically, organizing things so that a single server might appear in a "domain controllers" list, a "New York servers" list, and a "Win2012R2" list.  I could target configurations at each list, and the tool would combine those configurations to create the appropriate one for each node based on its "folder memberships." That might be done through composite resources. This makes DSC work a bit like GPO, with this tool doing the work of combining configurations into a single one per node. -**DSC Studio. **Using the underlying DSC Resource Kit and Resource Designer for functionality, give me an IDE that lets me graphically design a resource (specify properties) and then spit out the schema MOF and skeleton PSM1 file. This could probably be a very simple PowerShell ISE add-on, in fact. -**Node management. **In a pull server environment, give me a tool that lets me group servers. The tool should modify the LCM on each group, so that each member of the group has the same DSC configuration ID. That way, they're all pulling the correct MOF from the pull server. Otherwise, managing GUIDs gets out of hand pretty quickly - I can see a lot of Excel spreadsheets. -**Resources**. There are obviously a ton of resources to be written. This might be a bit of a bad call for an ISV, as you never know what MS is going to release resources for. Now that MS has built so many PowerShell cmdlets, building resources on top of them gets pretty straightforward. They've pumped out two waves of resources pretty fast already. -In short, I think there's a big opportunity for a smart company. It's a matter of seeing the "holes" in the technology, which currently focus mainly on management, and filling them in. diff --git a/content/articles/2014-03-05-jobs-powershell-scripter-wanted.md b/content/articles/2014-03-05-jobs-powershell-scripter-wanted.md deleted file mode 100644 index 8c3faa8a4..000000000 --- a/content/articles/2014-03-05-jobs-powershell-scripter-wanted.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: "Jobs: PowerShell Scripter Wanted" -authors: - - Don Jones -date: "2014-03-05T14:47:19+00:00" -categories: - - Announcements -aliases: - - /2014/03/jobs-powershell-scripter-wanted/ ---- - -Told you this would eventually start happening ;). Matt Sullivan of Strategic Staffing contacted me with the following job posting; if you're interested, reply to him directly at 781-347-5220. -... -My name is Matt Sullivan and I am a member of the Strategic Staffing Division at NTT DATA Inc., the sixth largest global IT integrator. We have more than 75,000 employees worldwide, offices in 40 different countires, and we are owned by Nippon Telegraph and Telephone, the largest telecommunications company in the world. -I am currently seeking a Scripting Engineer - PowerShell to join our team in Burlington, VT. The job description can be found below for your review. Please note that your resume will not be submitted to the client until we have discussed your background. -Title: PowerShell Scripter -Location: Burlington, VT -Duration: 1 year -Our Client has a number of projects in flight that require scripting (PowerShell) as part of their automation solution in our Windows environment. This position would require that the contractor meet with other project members, to gather requirements, build, test and document the scripts. He/she will then hand this work off to another vendor to be implemented on the scheduling platform (BMC's Control-M, a SaaS hosted by Client). -As a second priority, the contractor will work with various departments, to examine an existing body of scripts/jobs which also in our Windows environment. These jobs, having been prioritized by the client, will be converted, if necessary, to PowerShell, tested and documented before being turned over to Client. This body of work is not expected to be completed in the time allotted as it is very large. Our goal is to address as many as possible working from the highest priority down. -PowerShell is the scripting language of choice. A few years at a minimum is required including experience with .NET remoting. -Expert level in Powershell -3+ years experience -Powershell V2 and/or V3 -Solid understanding of Powershell Remoting -Business Analyst skills -Experience in requirements gathering -Testing methodologies, test plan development -Strong documentation skills -We are dedicated to working with a wide range of IT consultants, as an example corp to corp and W-2 hourly contractors; and we offer competitive benefits for candidates applying as W-2 contractors. -Benefits available for W-2 contractors only: -Medical -Dental -Vision -Caremark Prescription -401(k) -W-2 Employee Assistance Program -Accident Insurance- Workers’ Compensation Insurance and Business Travel Insurance -COBRA -Healthcare Reimbursement Account Programs -Credit Union -Corporate Mortgage Program diff --git a/content/articles/2014-03-05-the-dsc-conversation-continues.md b/content/articles/2014-03-05-the-dsc-conversation-continues.md deleted file mode 100644 index 7f7903b59..000000000 --- a/content/articles/2014-03-05-the-dsc-conversation-continues.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: The DSC Conversation Continues -authors: - - Don Jones -date: "2014-03-05T18:58:37+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/03/the-dsc-conversation-continues/ ---- - -Some [lovely conversation on DSC over on Reddit...][1] with some I wanted to perhaps offer an opinion on. From what I've seen, these are very common sentiments, and they definitely deserve... not argument or disagreement, but perhaps an alternate viewpoint. I'm not suggesting the commenters are wrong - but that maybe they're not considering the entire picture. - -> Certainly if you work with a superset of MS OSs (i.e. you do Linux also), then Puppet or something like it seems like a no brainer. In fact, that is what we're doing now. Puppet has powershell modules you can install for instance. Personally, I still feel like Powershell is overrated except for small snippets of that's how something is exposed. Puppet can run powershell commands. AutoIT can run powershell commands... I just don't see value in Powershell today. - -The point is that, until PowerShell, there were no PowerShell commands. Microsoft was incredibly inconsistent about providing automation-friendly commands of any kind. They could have gone down the path of building command-line tools for Cmd.exe; they didn't. The point of PowerShell is that Microsoft forced themselves to build commands. Now, if you run those from AutoIt, or Puppet, or whatever else - that's cool. PowerShell is an API, not a tool. Whatever tool you use to access that API is just dandy. Without the API, the tools are useless. - -> As to DSC - I'm really confused. Why is this separate from Group Policy again? Why is it better? Or is MS giving up on Group Policy as needing a total re-write? - -The advantage of Group Policy over DSC, today, is that GP has richer ability to target computers based on OU membership, WMI criteria, etc. Today, DSC targeting isn't that flexible. On the other hand, GP is extremely difficult to extend, since client extensions are native code. GP was built to manage the registry, although it's been extended to do more. DSC is built to do whatever PowerShell (and, via CIM, native code) can touch. My opinion? Yeah, DSC will obviate GP over time. Not instantly. - -> Specifically, as I've been rolling out Puppet across Windows and Linux, I see that in some ways, it brings the computer GPO aspect to Linux, and duplicates it a bit on Windows. -> Anyway, I won't be surprised to see someone start writing DSC modules in Puppet, because you'll want your config management to work across your platforms. And MS is kind of late to the game here - many many people have lots of knowledge already in Puppet, Chef etc... - -The guys on the PowerShell team love Chef and Puppet. I think you're confusing "api" and "tool." There are two pieces to DSC: Piece one is the ability of PowerShell to read a configuration script and produce a MOF. Piece two is the ability of a Windows computer to receive that MOF and reconfigure itself accordingly. Any tool can do piece one. Use Puppet to produce the MOF. Use Puppet to control which MOFs get sent where. That's the _intent. _But Microsoft takes a big burden off the Puppet developers by having Windows _know what to do with the MOF. _Yeah, MS is late to the game. No question. But they're _joining_ the game, not reinventing it. What they're doing works with what everyone else is already doing. - -> I would personally carry the sentiment even further and say that investing the bulk of your effort in DSC over something like Puppet would be needlessly tying your own hands. Why focus on something that's platform specific when there is a good cross-platform alternative. Don't put all your eggs in one basket as it were. - -Wrong. It isn't an either-or thing. DSC's introduction at TechEd 2013 included a demo of Puppet (or was it Chef?) being used to send configurations to Windows - much more easily, because with DSC, Windows natively knew what to do with them. If you've _got_ tooling like Puppet, _use it. _DSC is just making Windows work better with it. The whole _point_ of DSC is that it plays the cross-platform game _everyone else has already been playing. _ -Purely on the Windows side, the need to focus on DSC is more about developing the DSC _resources_ you need, so that you can send a MOF (from Puppet, say) to a Windows computer, and that Windows computer will know how to configure everything _you_ need configured. Microsoft will continue to produce resources for core OS and server application stuff; any LOB stuff is what you'd be focusing on. -Heck, even in a pure-Windows environment, with cross-platform off the table, Puppet provides _tooling__ _that DSC does not. You're going to need those tools, whether it's Puppet, some future System Center thing, or whatever. DSC is a mid-level API, not a tool. - -> Configuration managment does seem to be the future -- I just don't agree completely with the author's point of a view that it will have to be DSC. - -On Windows, DSC will be the underlying API that your configuration management tool talks to. DSC isn't a configuration management tool. DSC bridges the gap between a text-based MOF and the bajillion proprietary protocols MS uses internally in their products. Remember, on Linux, it's easier - everything already lives in a text file of some kind, right (oversimplifying, I know, but still)? In Windows, config information lives _everyplace_; DSC's main job is to bridge the gap. DSC doesn't provide _management_ of what configuration goes where; it just provides the implementation mechanism. In PowerShell, there's a primitive ability to write configurations, because MS has to give you something, but yeah... I think most organizations would benefit from good tooling atop that. -I think this entire discussion is why more people need to start **learning** (not necessarily using) DSC if you have Windows in your environment. Find out what it is, what it isn't, and how it'll play into the other efforts you've got underway. There's a ton of misconception about what it is and where it's meant to fit in. When I say, "if you're not learning DSC, you're screwed," I don't mean, "if you're not _using_ DSC." I mean _learning. _Because if you're not _learning _it, you're going to be subject to the same misconceptions about it. You end up spending a lot of time reinventing what it's willing to do - and what it's willing to do _in conjunction with_ your existing tools. - - - - [1]: http://www.reddit.com/r/sysadmin/comments/1ziudp/desired_state_configuration_dsc_musthave_or_just/ diff --git a/content/articles/2014-03-13-building-desired-state-configuration-custom-resources.md b/content/articles/2014-03-13-building-desired-state-configuration-custom-resources.md deleted file mode 100644 index eed9c2d7d..000000000 --- a/content/articles/2014-03-13-building-desired-state-configuration-custom-resources.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Building Desired State Configuration Custom Resources -authors: - - Steven Murawski -date: "2014-03-14T03:07:14+00:00" -categories: - - PowerShell for Admins - - Tutorials -aliases: - - /2014/03/building-desired-state-configuration-custom-resources/ ---- - -Now that we've suitably rested, let's get back to working with Desired State Configuration.  Now, there are some basic features to work with that ship by default and the [PowerShell team has been blogging some additional resources](http://blogs.msdn.com/b/powershell/archive/2013/12/26/holiday-gift-desired-state-configuration-dsc-resource-kit-wave-1.aspx), but in order to do some really interesting thing with DSC, we'll need to create our own resources. - -## The High Points - - * [Overview ](https://powershell.org/2013/10/02/building-a-desired-state-configuration-infrastructure/) - * [Configuring the Pull Server (REST version)](https://powershell.org/2013/10/03/building-a-desired-state-configuration-pull-server/) - * Creating Configurations ([one of two](https://powershell.org/2013/10/08/building-a-desired-state-configuration-configuration/), [two of two](https://powershell.org/2013/10/14/building-a-desired-state-configuration-configuration-part-2/)) - * [Configuring Clients](https://powershell.org/2013/11/06/configuring-a-desired-state-configuration-client/) - * Building Custom Resources (this post) - * Packaging Custom Resources - * Advanced Client Targeting - -## The DSC Resource Structure - -DSC resources are (at their most basic) a PowerShell module.  These modules are augmented by a schema.mof file (we'll get into that more in a minute or two).  These modules expose three main functions, Get-TargetResource, Set-TargetResource, and Test-TargetResource.  All three functions should share the same set of parameters. - -### Test-TargetResource - -Test-TargetResource validates whether your resource is currently in the desired state based on the parameters provided.  This function returns a boolean, $true if the resource is in the state described or $false if not. - -### Set-TargetResource - -Set-TargetResource is the workhorse in this module.  This is what will get things into the correct state.  The convention is to support one parameter called Ensure that can take two values, "Present" or "Absent" to describe whether or not a resource should be applied or removed as described. -(Here's a little trick.. if you write break your Test-TargetResource into discrete functions, you can use those functions to only run the portions of Set-TargetResource that you need to!) - -### Get-TargetResource - -This is currently the least useful of the commands, but if experience has taught me anything, it'll likely have an a growing use case over time. -Get-TargetResource returns the current state of the of the resource, returning a hash table of properties matching the parameters supplied to the command. - -### Exporting Commands - -This module should explicitly export these commands via either Export-ModuleMember or a module manifest.  If you don't, Import-DscResource will have trouble loading the resources when you try to generate a configuration (it's not a problem for running a configuration, just the generation part). - -### The Managed Object Framework (MOF) Schema - -The last piece of the DSC Resource is a schema file that maps the parameters for the command to a CIM class that can be registered in WMI.  This allows us to serialize the configuration parameters to a standards-based format and allows the Local Configuration Manager to marshal the parameters back to call the PowerShell functions for the phase that the LCM is in.  This file is named modulename.schema.mof. -There is no real reason to write a schema.mof file by hand, both the [DSC Resource Designer](https://github.com/PowerShellOrg/DSC/tree/master/Tooling/cDscResourceDesigner) and my [New-MofFile](https://github.com/PowerShellOrg/DSC/blob/master/Tooling/DscDevelopment/New-MofFile.ps1) function can help generate that function.  The one key thing to be aware of in the schema.mof is that there is an attribute at the top of each of the MOF classes that denotes a friendly name, which is the identifier you will use in a configuration to specify a resource. - - -`[ClassVersion("1.0.0"), FriendlyName("Pagefile")] -`## How To Structure a Module With Resources - -To get a good idea of the resource structure, we can look at [the StackExchangeResources module in the PowerShell.Org GitHub repository](https://github.com/PowerShellOrg/DSC/tree/master/Resources/StackExchangeResources).  There is a base module - StackExchangeResources, which has a module metadata file (required, you'll see why in a minute).  In that module, we need a folder DSCResources.  Our custom resource will be placed under that folder. -The reason we need a module metadata file for the base module, is when resources from that module are used in a configuration, the generated configuration MOF files will reference the version of the base module (and that specific version is required on the node where the resource will be applied). -Next up, we'll talk about how we package our resources to be distributed by a pull server. diff --git a/content/articles/2014-03-13-phillyposh-03062014-meeting-summary-and-presentation-materials.md b/content/articles/2014-03-13-phillyposh-03062014-meeting-summary-and-presentation-materials.md deleted file mode 100644 index a525a3db3..000000000 --- a/content/articles/2014-03-13-phillyposh-03062014-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: PhillyPoSH 03/06/2014 meeting summary and presentation materials -authors: - - John Mello -date: "2014-03-14T01:57:16+00:00" -aliases: - - /2014/03/phillyposh-03062014-meeting-summary-and-presentation-materials/ ---- - -* [Bartek Bielawski][1] gave a presentation entitled "OMI : PowerShell Everywhere". During his talk Bartek discussed and gave examples of how to CIM cmdlets and CDXML commands to manage everything in your datacenter. A [copy of his presentation materials][2] are available on our [GitHub Repository][3]. - * We then had a script club where various members presented scripts they were working on - * A [recording of this meeting][4] has been posted to our [YouTube channel][5]; please note that there are some audio issues near the end of the recording. - - [1]: https://twitter.com/bielawb - [2]: https://github.com/PhillyPoSH/2014-03 - [3]: https://github.com/PhillyPoSH - [4]: https://www.youtube.com/watch?v=Aw-rnpOk94Q - [5]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014-03-17-my-dsc-demo-class-setup-routine.md b/content/articles/2014-03-17-my-dsc-demo-class-setup-routine.md deleted file mode 100644 index 6ccca1df7..000000000 --- a/content/articles/2014-03-17-my-dsc-demo-class-setup-routine.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: My DSC Demo-Class Setup Routine -authors: - - Don Jones -date: "2014-03-17T22:52:26+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/03/my-dsc-demo-class-setup-routine/ ---- - -I think I've gotten my DSC classroom and demo setup ready. Understand that this isn't meant to be production-friendly - it doesn't automate some stuff because I **want** to cover that stuff in class by walking through it. But, I thought I'd share. -I've basically made an ISO that I can carry into class, attach to a Win2012R2 VM and a Win81 VM, and run students through. The server VM is a DC in "company.pri" domain, and the client VM belongs to that domain. -In the root of the ISO are these scripts: [ISO_Root][1] (unzip that). Students basically just open PowerShell, set the execution policy to RemoteSigned or Unrestricted, and then run **SetupLab -DVD D:**, replacing "D:" with the drive letter of the VM's optical drive. The script isn't super-intelligent since I demo it at the same time; it needs the colon after the drive letter. -In a folder called DSC_Modules, I add the following DSC modules (unzipped): xActiveDirectory, xComputerManagement, xDscDiagnostics, xDscResourceDesigner, xNetworking, xPSDesiredStateConfiguration_1.1, xSmbShare, xSqlPs, xWebAdministration. -In a folder called DSC_Pull_Examples, I include these scripts: [DSC_Pull_Examples][2] (unzip that). -In a folder called eBooks, I include these files: [eBooks][3] (unzip that). Those get used in a lot of the demos I do, so I have the lab setup scripts copy over some script modules. -In a folder called Help, I have a file called Help.zip. This contains everything downloaded by the Save-Help command in PowerShell. The Setup script unzips this into the VM and then runs Update-Help against it, so the VM doesn't need to be Internet-connected. -In a folder called Hotfix, I have the Windows8.1-KB2883200-x64.msu hot fix installer. I include the 32-bit version also, just in case, but my script doesn't use it. -In a folder called Installers, I have installers for PrimalScript, PowerShell Studio, and SQL Server Express with Advanced Services. Again, those get used a lot in my classes, but the setup script doesn't rely on them. -Finally, in a folder called sxs, I have the contents of the Windows 8.1 installation media's \Sources\sxs folder. Some of the things my setup script does - like adding .NET Framework 3.5 so SQL Server 2012 will work - rely on features that aren't in a Win8.1 VM, normally. Because I don't want to rely on the Internet, I include this source so I can install new features from it. -This is all pretty specific to the way I run classes, but if there's any use you can make of it, feel free. - - [1]: https://powershell.org/wp-content/uploads/2014/03/ISO_Root.zip - [2]: https://powershell.org/wp-content/uploads/2014/03/DSC_Pull_Examples.zip - [3]: http://files.concentratedtech.com/ebooks.zip diff --git a/content/articles/2014-03-19-going-deeper-on-dsc-resources.md b/content/articles/2014-03-19-going-deeper-on-dsc-resources.md deleted file mode 100644 index fc46c6c9c..000000000 --- a/content/articles/2014-03-19-going-deeper-on-dsc-resources.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Going Deeper on DSC Resources -authors: - - Steven Murawski -date: "2014-03-19T14:43:37+00:00" -categories: - - Tips and Tricks -aliases: - - /2014/03/going-deeper-on-dsc-resources/ ---- - -Desired State Configuration is a very new technology and declarative configuration management is a very young space yet.  We (Microsoft and the community) are still figuring out the best structure for resources, composite configurations, and other structures. -That said, there are certain viewpoints that I've come to, either from hands on experience or in watching how other communities (like the Puppet community or Chef community) handle similar problems. - -# How Granular Should I Get? - -There is no absolute answer. - -## Very, Very Granular - -Resources should be very granular in the abstract, but in practice, you may need to make concessions to improve the user experience. -For example, when I configure an IP address for a network interface, I can supply a default gateway. A default gateway is a route, which is separate from the interface and IP address, but in practice they tend to be configured together. In this case, it might make sense to offer a resource that can configure both the IP address and the default gateway. -I tend to think resources should be very granular. We can use composite resources to offer higher level views of the configuration. If I were implementing a resource to configure a network adapter's IP and gateway, I would have a route resource, an IP address resource, and probably a DNS server setting resource. I would then also have a composite resource to deal with the default use case of configuring a network adapter's IP address, gateway, and DNS servers together. -The benefit of doing it this way is that I still have very discrete, flexible primitives (the IP address resource, the route resource, and the DNS server resource). I can then leverage the route resource to create static routes, or use them directly to more discretely configure the individual elements. - -## Unless... - -You have some flow control that you need to happen based on the state of the client or the environment.  Since your configuration is statically generated and is declarative, there are no flow control statements in the configuration MOF document.  That means that any logic that needs to occur at application time -Unfortunately, this leads to the need to re-implement common functionality.  For example, if I have a service that I need to be able to update the binary (not via an MSI), I need to basically re-implement parts of the file and service resource.  This use case requires a custom resource because I need to stop the service before I can replace the binary, but I don't want to stop the service with every consistency check if I don't need to replace the file. -This scenario begs for a better way to leverage existing resources in a cross resource scenario (kind of like RequiredModules in module metadata), but there isn't a clean way to do this **that I've found** (but I'm still looking!). - -## My Recommendation - -So for most cases, I would try to use existing resources or build very granular custom resources.  If I need to offer a higher level of abstraction, I'd escalate to putting a composite resource on top of those granular resources.  Finally, if I need some flow control or logic for a multistep process, I'd implement a more comprehensive resource. - -# What Should I Validate? - -Now that we are seeing some more resources in the community repository (especially thanks to the waves of resources from the Powershell Team!), we are seeing a variety of levels of validation being performed. -I think that the Test-TargetResource function should validate all the values and states that Set-TargetResource can set. -An example of where this isn't happening currently is in the [cNetworking resource for PSHOrg_cIPAddress](https://github.com/PowerShellOrg/DSC/blob/master/Resources/cNetworking/DSCResources/PSHOrg_cIPAddress/PSHOrg_cIPAddress.psm1).  I'm going to pick on this resource a bit, since it was the catalyst for this discussion. -The resource offers a way to set a default gateway as well as the IP address.  So what happens if after setting the IP and default gateway, someone changes the default gateway to point to another router? -In this case, the validation is only checking that the IP address is correct.  DSC will never re-correct the gateway and our DSC configuration document (the MOF file) is no longer an accurate representation of the system state, despite the fact that the Local Configuration Manager (LCM) will report that everything matches. -**This is BAD!!**  If a resource offers an option to configure a setting, that setting should be validated by Test-TargetResource, otherwise that setting should be removed from the resource.  The intent of DSC is to control configuration, including changes over time and return a system to the desired state.  If we ignore certain settings, we weaken our trust in the underlying infrastructure of DSC. - -# What should I return? - -The last element I'm going to tackle today is what should be returned from Get-TargetResource.  I've been on the fence about this one.  Like with Test-TargetResource, there are a number of implementation examples that vary in how they come up with the return values. -Currently, I don't see a ton of use for Get-TargetResource and it doesn't impact the Test and Set phases of the LCM, so it's been easy to ignore.  This is bad practice (shame on me). -Here's my thoughts around Get-TargetResource.  It should return the currently configured state of the machine.  Directly returning parameters passed in is misleading. -Going back to the PSHOrg_cIPAddress from the earlier example, it directly returns the default gateway from the parameter, regardless of the configured gateway.  This wouldn't be so bad if the resource actually checked the gateway during processing and could correct it if it drifted.  But it does not check the gateway, so Get-TargetResource could be lying to you.  T -he most consistent result of Get-TargetResource would be retrieving the currently configured settings. - -# What's left? - -What other burning questions do you have around DSC?  Let's keep talking them through either in the [forums](https://powershell.org/forums/forum/windows-powershell-qa/) or in the comments here. diff --git a/content/articles/2014-03-20-we-want-your-dsc-resource-wish-list.md b/content/articles/2014-03-20-we-want-your-dsc-resource-wish-list.md deleted file mode 100644 index 5f9e52947..000000000 --- a/content/articles/2014-03-20-we-want-your-dsc-resource-wish-list.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: We Want Your DSC Resource Wish List! -authors: - - Don Jones -date: "2014-03-20T16:08:03+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/03/we-want-your-dsc-resource-wish-list/ ---- - -What sorts of things would you want to configure via DSC that don't already have a resource? -NB: Focusing on the core Windows OS and its components only; Exchange, SharePoint, SQL Server, and other products are off the table for this discussion. -For example, I want a "log file rotator" resource, that lets me specify a log file folder, an archive folder, and a pair of dates. Files older than one date are moved from the log folder to the archive folder; archived files older than the second date are deleted. -I'd also like a File Permissions resource. Specify a folder or file, optional recursion, and a set of access control entries (in plain English terms), and it'll make sure the permissions stay that way. -Maybe also a User Home Folder resource, which would (a) ensure a folder exists for a given set of user accounts, and (b) ensures a set of "template" permissions, so that each individual user has the rights to their folder, plus rights given to global users like admins. -What resources would YOU like to have to ease configuration and maintenance in YOUR environment? Drop a comment! diff --git a/content/articles/2014-03-26-code-from-this-weeks-oslo-class.md b/content/articles/2014-03-26-code-from-this-weeks-oslo-class.md deleted file mode 100644 index 14847749a..000000000 --- a/content/articles/2014-03-26-code-from-this-weeks-oslo-class.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Code from this week's Oslo class" -authors: - - Don Jones -date: "2014-03-26T12:04:42+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/03/code-from-this-weeks-oslo-class/ ---- - -[OSTools][1] - download for my class in Oslo this week. -Here's some more: [share][2] - - [1]: https://powershell.org/wp-content/uploads/2014/03/OSTools.zip - [2]: https://powershell.org/wp-content/uploads/2014/03/share.zip diff --git a/content/articles/2014-03-29-april-3-2014-virtual-powershell-user-group-meeting.md b/content/articles/2014-03-29-april-3-2014-virtual-powershell-user-group-meeting.md deleted file mode 100644 index f26e10058..000000000 --- a/content/articles/2014-03-29-april-3-2014-virtual-powershell-user-group-meeting.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: April 3, 2014 Virtual PowerShell User Group meeting -authors: - - ScriptingWife -date: "2014-03-29T21:11:12+00:00" -categories: - - Events -aliases: - - /2014/03/april-3-2014-virtual-powershell-user-group-meeting/ ---- - -PowerShell MVP Joel Bennett will present about authoring PowerShell modules, including tips, tricks and best practices for writing modules and functions that work well together (and behave properly in the pipeline) ... and... -NOTE: if you have QUESTIONS about PowerShell modules which you would like addressed, you can start adding them to the Q&A bar (and voting to rank them) already. Just click the "Q&A" icon overlay on the video placeholder: -[https://plus.google.com/hangouts/onair/watch?hid=hoaevent%2Fcval1ku1pro5uijqk4fnmfk45lo&hl=en&t=0](https://plus.google.com/hangouts/onair/watch?hid=hoaevent%2Fcval1ku1pro5uijqk4fnmfk45lo&hl=en&t=0) - - - * * diff --git a/content/articles/2014-04-02-charlotte-432014-meeting-using-powershell-in-websites.md b/content/articles/2014-04-02-charlotte-432014-meeting-using-powershell-in-websites.md deleted file mode 100644 index 7fe8429a1..000000000 --- a/content/articles/2014-04-02-charlotte-432014-meeting-using-powershell-in-websites.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Charlotte 4/3/2014 Meeting – Using PowerShell in Websites -authors: - - Terri Donahue -date: "2014-04-02T18:32:43+00:00" -aliases: - - /2014/04/charlotte-432014-meeting-using-powershell-in-websites/ ---- - -The monthly Charlotte PowerShell Users Group meeting will be held tomorrow, April 3rd at 6PM EDT. The meeting is held at the Microsoft Charlotte Office (8055 Microsoft Way, Charlotte, NC). - -This looks to be an awesome meeting with guest speaker Jason Walker. Jason will demonstrate running PowerShell scripts in a cool and novel way – from a website. If you would like to attend, please jump on over to the [MeetUp](http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/172416592/) page and let us know you are coming. diff --git a/content/articles/2014-04-06-phillyposh-03042014-meeting-summary-and-presentation-materials.md b/content/articles/2014-04-06-phillyposh-03042014-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 8cff07b75..000000000 --- a/content/articles/2014-04-06-phillyposh-03042014-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: PhillyPoSH 04/04/2014 meeting summary and presentation materials -authors: - - John Mello -date: "2014-04-07T03:37:36+00:00" -aliases: - - /2014/04/phillyposh-03042014-meeting-summary-and-presentation-materials/ ---- - -* [Ashley McGlone][1] gave a presentation entitled “Demystifying The PowerShell Scripting Process”. During his talked Ashley broke down the script creation process by starting with a task and working through the cmdlet discovery process to build a repeatable task into a script. A copy of his [presentation materials][2] are available on his [blog][3] - * We then had a group discussion around: - * DSC and how various group members are using/testing it - * WMF 5.0's OneGet - * [ConEmu ][4]a windows console emulator - * A [recording of this meeting][5] has been posted to our [YouTube channel][6] - - [1]: https://twitter.com/goateepfe - [2]: http://blogs.technet.com/b/ashleymcglone/archive/2014/02/08/powershell-saturday-007-charlotte-from-cmdlets-to-scripts-to-powershell-hero.aspx - [3]: http://blogs.technet.com/b/ashleymcglone/ - [4]: http://code.google.com/p/conemu-maximus5/ - [5]: https://www.youtube.com/watch?v=Aw-rnpOk94Q - [6]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014-04-07-massive-update-to-all-seven-free-ebooks-at-powershell-org.md b/content/articles/2014-04-07-massive-update-to-all-seven-free-ebooks-at-powershell-org.md deleted file mode 100644 index 2747447ef..000000000 --- a/content/articles/2014-04-07-massive-update-to-all-seven-free-ebooks-at-powershell-org.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Massive Update to All Seven Free eBooks at PowerShell.org -authors: - - Don Jones -date: "2014-04-08T00:13:10+00:00" -categories: - - Books -aliases: - - /2014/04/massive-update-to-all-seven-free-ebooks-at-powershell-org/ ---- - -We've just finished a massive re-do of all 7 PowerShell.org free ebooks. -First, they're now hosted in a [public OneDrive folder][1]. This means you can quickly and easily view them online, download a DOCX, or download a PDF. Anytime, anywhere. -Second, we've had folks go through and make the formatting more consistent, using a more modern font and somewhat "airier" spacing. Hopefully that translates to "nicer to read." All the original code is also accessible, and available for one-click downloading. Note that .PS1 files may open for viewing; you need to checkmark the file to download it. -Uploads are now proceeding, so depending on when you read this, some files might still be in progress. The GitHub versions (which were problematic for some folks to download) will be removed shortly. Please update your links; https://powershell.org/ebooks has already been updated. -Enjoy! - - [1]: http://1drv.ms/1eaLKiu diff --git a/content/articles/2014-04-13-summit-session-change.md b/content/articles/2014-04-13-summit-session-change.md deleted file mode 100644 index e4fe6352c..000000000 --- a/content/articles/2014-04-13-summit-session-change.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Summit Session Change -authors: - - Don Jones -date: "2014-04-13T23:21:08+00:00" -categories: - - PowerShell Summit -aliases: - - /2014/04/summit-session-change/ ---- - -Paul Higinbotham's session on threading in PowerShell has been changed, because his content would have overlapped with other sessions. Instead, Paul will be presenting: -**PowerShell Debugging Enhancements** -A number of script debugging enhancements were added to PowerShell 4.0 and the WMF 5.0 preview release. In this talk I will discuss these new debugging features and demonstrate how they work. This will include the new support for remote debugging, debugging workflow scripts, debugging PowerShell jobs, ISE enhancements for remote debugging, and the new "Break All" command. -We'll update the schedule grid and abstract document. diff --git a/content/articles/2014-04-14-powershell-summit-na-2014-shirts-available.md b/content/articles/2014-04-14-powershell-summit-na-2014-shirts-available.md deleted file mode 100644 index 1c2a490d4..000000000 --- a/content/articles/2014-04-14-powershell-summit-na-2014-shirts-available.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: PowerShell Summit NA 2014 Shirts Available -authors: - - Don Jones -date: "2014-04-14T16:50:18+00:00" -categories: - - PowerShell Summit -aliases: - - /2014/04/powershell-summit-na-2014-shirts-available/ ---- - -If you're attending PowerShell Summit NA 2014 (or wish you were), we have some new logo items for purchase! Buy 'em now and wear 'em to the Summit, including a baseball jersey and a polo shirt. [Visit our Zazzle store][1] to buy (or the [Canadian store][2], to save a bit on shipping if you live up there). -Note that the items may take about 24 hours to become visible, so check on April 15th in the afternoon if you don't see them immediately. -See you at the Summit! - - [1]: http://zazzle.com/powershellorg* - [2]: http://zazzle.ca/powershellorg* diff --git a/content/articles/2014-04-15-powershell-summit-n-a-2014-budget.md b/content/articles/2014-04-15-powershell-summit-n-a-2014-budget.md deleted file mode 100644 index 53988de6f..000000000 --- a/content/articles/2014-04-15-powershell-summit-n-a-2014-budget.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: PowerShell Summit N.A. 2014 – Budget -authors: - - Don Jones -date: "2014-04-15T15:56:49+00:00" -categories: - - PowerShell Summit -aliases: - - /2014/04/powershell-summit-n-a-2014-budget/ ---- - -As part of our commitment to being a transparent, community-owned organization, I wanted to share the basic budget for the upcoming Summit. Now that registration is cut off, we have most of our final numbers. Keep in mind that, at live events, things "on the ground" can change quickly - so these are, at present, only our expectations "going in." - - * $113,833.51 in net registration fees. This is after paying credit card transaction fees. - * -$398.00 for event insurance (already paid) - * -$76,466.04 for the venue, which includes A/V, F&B, room rental, etc. (already paid) - * -$9,335.01 for speaker lodging (hotel) - * -$3,000 for professional event management (including travel for the event manager) - * -$1,490 for our registration web site (already paid) - * -$1,710.51 for deposit on the European Summit - * -$7,500 for speaker reimbursement - -That last number is presently the big question; we have some speakers who paid for their registration, and we need to reimburse them. That's probably about $4,000. We have another $2,500  in promised travel offset fees to speakers doing 3 sessions. We're trying to reimburse additional travel expenses for other speakers so they're not totally out of pocket; the final number may be more than $7,500. -Right now, that puts us at an event profit of roughly $13,933.95. Again, some of that may end up going to additional speaker reimbursement; the rest will help fund PowerShell.org ongoing activities (like Azure hosting and so forth; I'll share a full annual operating budget in June, but it's about $17,000 per year). We have about $20k in payments coming up for the European Summit. -We have approximately $92,000 on-hand; much of that will go to the expenses above that are still pending. We should end April with around $65,000 on-hand - a lot of that comes from earning back a $40,000 pre-payment for the N.A. Summit that we made in fiscal 2013-2014. We'll use some of that $65k to cover the remaining $20k fees on the European Summit; the rest of our cash-on-hand will help provide deposits for the 2015 N.A. Summit, and to fund ongoing operations for 2014-2015. We're in good financial shape - we're making a _bit_ more than we need, but not very much - which is right where we want to be. -The good news is that, between the Summits and our generous corporate sponsors, we're on track to actually find the $17k wish-list budget we've put together (which we're still researching and tweaking; as stated, I'll share the full thing in June). That means we'll be able to start spinning up services like the VERIFIED EFFECTIVE program, monthly TechSession webinars, and so on. diff --git a/content/articles/2014-04-15-review-sapien-versionrecall.md b/content/articles/2014-04-15-review-sapien-versionrecall.md deleted file mode 100644 index e6e197236..000000000 --- a/content/articles/2014-04-15-review-sapien-versionrecall.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: "[UPDATED] Review: SAPIEN VersionRecall" -authors: - - Don Jones -date: "2014-04-15T19:44:42+00:00" -categories: - - Tools -aliases: - - /2014/04/review-sapien-versionrecall/ ---- - -I recently played around with [SAPIEN's VersionRecall][1], and thought I'd share a bit about the experience. As a note, SAPIEN provided me with a license key to use. VersionRecall is advertised as a simple, single-user version control system "for the rest of us." There are no servers, no databases, and nothing complex, according to the marketing copy. -Setup is quick - a 3-screen wizard and you're done. Installation took under a minute. When you first launch the product, it attempts to find all the places on your computer where you might store scripts, so that it can connect those to a version-control repository. You can skip that bit, but it only took a few moments on my virtual machine. It found my DSC scripts, my PowerShell modules, and several other places I'd dropped scripts. You then indicate where you'd like your version-control repository - this is where old versions of files will be saved. You can also pick a certificate, to have the software automatically sign scripts each time you make a new version. That's a subtle and very cool feature - and it's a way to make AllSigned a more convenient execution policy. -I selected an option to have my version control repository updated every day at 4:30pm. That seems to let the software capture a snapshot of any changed files at that time every day; it was clear that you could also manually submit an update to the repository using VersionRecall or Windows' own File Explorer. -From there, you're in an Explorer-like view. It includes a tab for each folder where you store scripts. I find that I like that approach a lot - I tend to organize my scripts that way. I've got my modules in one spot, some sample scripts in another, stuff I'm playing with in a third, and so on - so the tabbed approach fits my organizational style. You can open files for editing right there. I don't have PrimalScript installed on this test machine, but files opened in the ISE just fine. Ribbon buttons let you open the shell, the ISE, or SAPIEN's PrimalScript or PowerShell Studio products. -[![fig1](https://powershell.org/wp-content/uploads/2014/04/fig1.png)](https://powershell.org/wp-content/uploads/2014/04/fig1.png) - -Here's how this works: You have to manually submit changed files to the version-control repository, or wait for the daily check-in (remember, I set mine to 4:30pm). This doesn't magically capture changes throughout the day. But, you can always manually submit an update if you've been making significant edits. That's how most "big boy" source control systems work - only they don't usually have an automatic daily-check in as a backup plan. VersionRecall does. -You can always compare the current version against a repository version - and it's a very slick comparison view. -[![fig2](https://powershell.org/wp-content/uploads/2014/04/fig2.png)](https://powershell.org/wp-content/uploads/2014/04/fig2.png) - -Once you've checked in a few versions, you can easily see the complete list, quickly see what each file contains, and either restore a previous version or copy it to a different location. You can also compare two versions to see what's different. -[![fig3](https://powershell.org/wp-content/uploads/2014/04/fig3.png)](https://powershell.org/wp-content/uploads/2014/04/fig3.png) - -Notably, VersionRecall doesn't stick your files into a database or some proprietary storage. Your check-in files _stay_ files, in their original formats. That means, if you ever need to do so, you can simply go to the folder where VersionRecall's repository is, and grab the files yourself. It should also allow files to be indexed by Windows (for filetypes where it does that), found by Windows search, and so on. -Unfortunately, PowerShell Studio doesn't seem to recognize VersionRecall as a source control provider (at least, it didn't show up when I tried to configure source control in PowerShell Studio). That means you can't use the integrated check-in/out controls in PowerShell Studio. Instead, you almost want to open files by using VersionRecall's Explorer, save them in PowerShell Studio, and then submit them to the repository back in VersionRecall. That's a shame; the automatic check-in/out in PowerShell Studio would make it all a bit simpler. -VersionControl uses a "Modern" user interface scheme for the most part. Its ribbon is pretty clean and well-organized, and the icons were meaningful. As with most recent SAPIEN products, you can change the theme to one of almost a dozen different styles, so you should be able to find something you like. Icons remain the same either way; all you're changing is the "chrome" of the UI. -Not much else to say. For a product that bills itself as simple and easy, VersionControl certainly delivers. It does one thing, and it does it pretty well. It's definitely easy - and there's less excuse than ever for not using some kind of version control for your scripts. [A FAQ on SAPIEN's blog][2] answers questions like why VersionRecall doesn't check-in files automagically each time they change, how it compares to something like Git, and more. -[**Update**: I've removed the section on the license key and activation; SAPIEN's Alex Riedel pointed out that I had some factual errors, because my observations were based on my use of a "real" license key that was issued for my particular use, not a "trial" key. I admit that I find software licensing uninteresting, and none of it has any impact on the usefulness of the software, which is what the article was meant to cover.] -VersionRecall sells for $179 as a standalone product, which includes a year of updates. I think that price might be a bit high, given what the product does. I expect, however, that most people are getting VersionRecall as part of a SAPIEN software bundle. For $789, for example, you get everything they make. For me, the perfect combo is PowerShell Studio and VersionRecall, which retails for $568. - - - [1]: http://www.sapien.com/software/versionrecall - [2]: http://www.sapien.com/blog/2014/04/09/versionrecall-2014-faq/ diff --git a/content/articles/2014-04-21-sapiens-new-wmi-explorer-released.md b/content/articles/2014-04-21-sapiens-new-wmi-explorer-released.md deleted file mode 100644 index 25bec7ad1..000000000 --- a/content/articles/2014-04-21-sapiens-new-wmi-explorer-released.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "SAPIEN's new WMI Explorer Released" -authors: - - Don Jones -date: "2014-04-21T22:59:41+00:00" -categories: - - Tools -aliases: - - /2014/04/sapiens-new-wmi-explorer-released/ ---- - -We all know that working with WMI/CIM can be frustrating. So little of it is documented, and it can be tough to find the class that has the exact info you need. -A long time ago, SAPIEN released a very nice WMI Explorer tool that, recently, was taken offline. The reason is that the company was producing an all-new, from-scratch replacement - [and it's now available][1]. -Their new approach is pretty interesting. Rather than just live-browsing the local WMI repository or a remote computer's repository, the tool can now go through the repo and actually create a local cache. That cache is optimized for searching, making it a ton easier to search not only for class names, but also for property names and more. Even property values! So if you know (for example) that "Windows 8.1" is part of _some_ property of _some_ class, this tool can help you find where it is. It also provides in-product links to what online WMI documentation exists, making it quicker to get to that stuff. -Although the old tool was a freebie, this new one will set you back $40, and I imagine it's included with the $789 kitchen-sink bundle the company sells. While I miss the free tool, this new one is significant enough that I'd pay for it. After all, money is what keeps the programmers at SAPIEN employed, so we can't expect great tools for zero money. Frankly, this new WMI Explorer is one of the very, very, very, very few tools that's going to earn a place in my base VM images that I use in classes - simply because it's so useful. The ability to search for _property values_ gives me a whole new approach to finding the exact WMI class I need. -It's a well thought-out tool. Now, it's not "zero footprint" like the old one - but the old one didn't do nearly as much, like creating a local, searchable cache of the repo. Also, this isn't something I'd install on all my servers. There's no need - you install it on _your_ computer, and let it reach out to key servers to discover their repositories. So it's "zero footprint" on the server, which is all I care about. That cache means I can even browse a remote machine's repo when I'm completely offline, like on an airplane working on a book. That's a huge deal for me. -SAPIEN's blog article on the software release includes another interesting fact: They plan to release a new line of smaller tools like WMI Explorer, and either sell them separately or as a community package. Cool! But what's even cooler is this: _"The proceeds from these tools will go towards supporting user groups and non-profit organizations." _Well, damn. So that $40 isn't even funding the development of the tool per se, it's funding (in part) your local user group. That's awesome, and makes it well worth the standalone purchase if you don't own the whole Software Suite already. -As usual, SAPIEN offers a free trial. Give it a whirl. - - [1]: http://www.sapien.com/blog/2014/04/17/wmi-explorer-2014-released/ diff --git a/content/articles/2014-04-23-charlotte-512014-meeting-update.md b/content/articles/2014-04-23-charlotte-512014-meeting-update.md deleted file mode 100644 index 1c1585b0e..000000000 --- a/content/articles/2014-04-23-charlotte-512014-meeting-update.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Charlotte 5/1/2014 Meeting update -authors: - - Terri Donahue -date: "2014-04-23T15:59:00+00:00" -aliases: - - /2014/04/charlotte-512014-meeting-update/ ---- - -The regularly scheduled meeting for the group will not be held due to overlap with the PowerShell Summit and travel related to it for some of our members. If there is interest in scheduling a side meeting, we can do that to accommodate those of us that are not attending the Summit. - -If not, we will be back on track and ready for [YASG!](http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/178572422/) (Yet Another Scripting Game) on 6/5/2014. Looks like it is going to be a good one. diff --git a/content/articles/2014-04-28-help-us-record-the-powershell-summit-sessions.md b/content/articles/2014-04-28-help-us-record-the-powershell-summit-sessions.md deleted file mode 100644 index 962b554a2..000000000 --- a/content/articles/2014-04-28-help-us-record-the-powershell-summit-sessions.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Help us Record the PowerShell Summit Sessions -authors: - - Don Jones -date: "2014-04-28T17:27:23+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2014/04/help-us-record-the-powershell-summit-sessions/ ---- - -We're often asked if the PowerShell Summit sessions will be recorded or live-streamed. The answer, so far, has been "no," because the equipment needed to do so gets expensive. -But we're willing to give it a go - with crowd funding. Check out our [IndieGoGo campaign][1], where you can contribute to making session recordings a reality - forever. We've got about 30 days to reach our goal. So if recorded sessions are important to you - now's the time to put your money where you mouth is!! -Fingers crossed! - - [1]: https://www.indiegogo.com/projects/powershell-summit-session-recording/x/7291807#home diff --git a/content/articles/2014-04-29-fundraising-powershell-people-kick-butt-take-names.md b/content/articles/2014-04-29-fundraising-powershell-people-kick-butt-take-names.md deleted file mode 100644 index c43ae5294..000000000 --- a/content/articles/2014-04-29-fundraising-powershell-people-kick-butt-take-names.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "Fundraising: PowerShell People Kick Butt, Take Names" -authors: - - Don Jones -date: "2014-04-29T15:21:06+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2014/04/fundraising-powershell-people-kick-butt-take-names/ ---- - -Our [IndieGoGo Campaign][1] is off to an amazing start, raising over $6,300 (including some offline donations) toward our ultimate $9,000 goal. So far, we've raised enough to ensure we can record two tracks of Summit content - enabling us to record speakers' laptops and voice, and to post the videos on YouTube, for free. Meeting our full $9,000 goal will enable three tracks of recordings, which is what the North American show currently produces. -The equipment we're investing in will also support, should we choose to add it, an analog camera input and automatic picture-in-picture, meaning we can later add-on to include video of the speaker(s) as well as what's on their laptop. -This [equipment][2] also meets an important set of goals for us: It requires no software on speaker laptops (often problematic), and it's operated - literally - by a single big, red, lighted button. Meaning, it's easy to use and shouldn't interfere with the live audience's experience. -I'm personally humbled by the generosity of our community. While larger donations are being considered "share purchases" in PowerShell.org, Inc., these contributors are essentially getting nothing in return for their money - but they're making something possible that will benefit _everyone. _Making this content permanently available, for free, will become a treasure trove of valuable information _forever. _I can't express my gratitude enough. -Tell a colleague, tell a friend: Every donation helps, no matter how small. And thank you, thank you, thank you. - - [1]: https://www.indiegogo.com/projects/powershell-summit-session-recording/x/7291807 - [2]: http://www.epiphan.com/ diff --git a/content/articles/2014-04-30-powershell-summit-europe-2014-call-for-topics.md b/content/articles/2014-04-30-powershell-summit-europe-2014-call-for-topics.md deleted file mode 100644 index ae4e9c655..000000000 --- a/content/articles/2014-04-30-powershell-summit-europe-2014-call-for-topics.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: PowerShell Summit Europe 2014 – Call for Topics -authors: - - Richard Siddaway -date: "2014-04-30T18:31:01+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2014/04/powershell-summit-europe-2014-call-for-topics/ ---- - -The PowerShell Summit is the number one place where PowerShell enthusiasts gather and learn from each other in fast-paced, knowledge packed presentations. Experts from all over the world including MVP’s, Guru’s, and PowerShell team members, join together for a few days to discuss and learn how to maximize using PowerShell in the workplace. -And now the PowerShell Summit is coming to Europe. PowerShell Summit Europe 2014 will be held September 29, 30, and October 1 at the Hotel Park in Amsterdam, Holland. https://powershell.org/community-events/summit/powershell-summit-europe/ -If you want to share your PowerShell expertise, then this is your official call to submit presentations for selection! -**Topic Areas – What we are looking for -** We are looking for 45-minute presentations covering a wide aspect of PowerShell expertise. We have three main topic areas that may assist you in building an abstract. -• PowerShell Internals – A deep look into the inside workings of PowerShell and practical solutions that are built from them. These presentations are more focused on the PowerShell development community that is building extensions and solutions relating to PowerShell. -• PowerShell in Production – These presentations are focused on domain specific PowerShell solutions for IT Pro’s such as managing Exchange, System Center, IIS, SharePoint, VMware and more. -• PowerShell Features Deep Dive – These presentations are a deep look into configuring and working with PowerShell features and capabilities such as PowerShell Remoting, PowerShell Web Access, Reporting and more. -We are open to presentations across the entire ecosystem that has been built around PowerShell; so don’t hesitate to send an abstract for your particular area of expertise. And don’t think, “oh, I can’t do a presentation!” We aren’t looking for Toastmasters winners – we’re looking for folks to be a part of the community! Take the leap and present! Each session is only 35 minutes, with 10 minutes for Q&A! -**Presentation submissions – What you should send to us** -Presentations will be 45-minutes in length (planning for 30-40 minutes of material and 5-15 minutes of Q&A) and the submission should include the following: -• Presentation Title -• Presentation abstract – a description of the presentation and the topics covered. 100 words or less and suitable for marketing. -• 50 word biography -You can submit multiple presentations in the same topic area or for different ones. -**What you get if you present** -The European Summit is working to a very tight budget as this is the first time we are running it. Compensation for speakers will be free admission (not free Association for Windows PowerShell Professionals membership, https://powershell.org/association-for-windows-powershell-professionals, just free admission, which includes food). We will not reimburse hotel, expenses, or travel. It’s important that speakers not register for the conference, because we will not be refunding you if you do that. -The financial situation may change to a certain degree if the event sells out but we can’t cover all of your expenses as a speaker and we can’t make any guarantees at this stage. -We also ask that you help publicize the event. -**Presentation submission deadline – When you should send it by** -Start sending your presentation submissions immediately! The selection committee will start selecting presentations as soon as they arrive so you don’t want to miss out. The last day we will accept presentation submissions will be May 23, 2014. -Send your proposals to cft2014eu@powershell.org. Please either put multiple proposals in a Word doc, or send just one proposal in the body of an email, so that we can track these more easily. -**When you will know you’ve been selected** -The selection committee will start reviewing submissions immediately and begin the selection process. You will be informed if one or more of your presentations have been selected and sent a contract on or before June 14, 2014. You will need to return the signed contract by June 21, 2014. -The final agenda will be announced early July and posted on PowerShell.Org. -We look forward to your submissions and your help in making PowerShell Summit Europe 2014 your most valuable IT/Dev conference of the year! diff --git a/content/articles/2014-05-10-phillyposh-05012014-meeting-summary-and-presentation-materials.md b/content/articles/2014-05-10-phillyposh-05012014-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 9f5319793..000000000 --- a/content/articles/2014-05-10-phillyposh-05012014-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: PhillyPoSH 05/01/2014 meeting summary and presentation materials -authors: - - John Mello -date: "2014-05-10T22:21:17+00:00" -aliases: - - /2014/05/phillyposh-05012014-meeting-summary-and-presentation-materials/ ---- - -* [Boe Prox][1] gave a presentation entitled “Managing WSUS with Windows PowerShell”. During his talked Boe went over the various ways you can orchestrate [WSUS][2] using PowerShell. A copy of his [presentation materials are available here][3]. - * We then had a group discussion around: - * [Lido Paglia][4] and [John Mello][5] discussed their experiences and what they learned at the [2014 PowerShell Summit][6],, - * The differences between how Active Directory Users and Computers displays groups when compared to [Get-Aduser][7] in regards to primary group membership. In PowerShell the primary group is only returned in the _PrimaryGroup_ property and all other groups are returned in the _MemberOf_ property, while ADUC will show every group the user is a member of. - - * A [recording of this meeting][8] has been posted to our [YouTube channel][9] - - [1]: http://learn-powershell.net/author/boeprox/ - [2]: http://technet.microsoft.com/en-us/windowsserver/bb332157.aspx - [3]: https://powershell.org/wp-content/uploads/2014/05/PhillyPosh-2014_05_01-BoeProx_WSUS.zip - [4]: http://paglia.org/ - [5]: http://mellositmusings.com/ - [6]: https://powershell.org/community-events/summit/powershell-summit-north-america/ - [7]: http://technet.microsoft.com/en-us/library/ee617241.aspx - [8]: http://youtu.be/k4geOLcrQec - [9]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014-05-11-my-teched-2014-patterns-and-practices-example-scripts.md b/content/articles/2014-05-11-my-teched-2014-patterns-and-practices-example-scripts.md deleted file mode 100644 index af9904009..000000000 --- a/content/articles/2014-05-11-my-teched-2014-patterns-and-practices-example-scripts.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "My TechEd 2014 \"Patterns and Practices\" Example Scripts" -authors: - - Don Jones -date: "2014-05-11T14:23:26+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/05/my-teched-2014-patterns-and-practices-example-scripts/ ---- - -I'll be using these examples in my TechEd 2014 session on PowerShell patterns and practices. They won't make much sense, perhaps, until you see the session (live, or in the recordings - and I believe this session is one of the "Taste of TechEd" ones that will be live-streamed), but here are the scripts. -[TechEd-NA-2014-Patterns-Examples][1] - - [1]: https://powershell.org/wp-content/uploads/2014/05/TechEd-NA-2014-Patterns-Examples.zip diff --git a/content/articles/2014-05-14-why-puppet-vs-dsc-isnt-even-a-thing.md b/content/articles/2014-05-14-why-puppet-vs-dsc-isnt-even-a-thing.md deleted file mode 100644 index abca205ce..000000000 --- a/content/articles/2014-05-14-why-puppet-vs-dsc-isnt-even-a-thing.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: "Why Puppet vs. DSC Isn't Even a Thing" -authors: - - Don Jones -date: "2014-05-14T13:06:15+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/05/why-puppet-vs-dsc-isnt-even-a-thing/ ---- - -After all the DSC-related excitement this week, there have been a few online and Twitter-based discussions including Chef, Puppet, and similar solutions. Many of these discussions start off with a tone I suppose I should be used to: fanboy dissing. "Puppet already does this and is cross-platform! Why should I bother with DSC?" Those people, sadly, miss the point about as entirely as it's possible to do. - -## Point 1: Coolness - -First, what Microsoft has accomplished with DSC is **cool.** Star Wars Episode V was also cool. These facts do not prevent previous things - Puppet/Chef/etc and Episode IV - from being cool as well. Something new being cool does not make other things less cool. This shouldn't be a discussion of, "Puppet did this first, so nothing else can possibly be interesting at the same time." As _IT professionals,_ we should be looking at _everything_ with an eye toward what it does, and what new ideas it might offer than can be applied to existing approaches. - -## Point 2: Switching - -Have you seen the magazine ads suggesting you ditch Puppet and start using DSC? No, you have not - and you will not. If Puppet/Chef/etc is meeting your needs, keep using it. The fact that Microsoft has introduced a technology that accomplishes similar things (make no mistake, they're not the same and aren't intended to be), doesn't mean Microsoft is trying to convince you to change. -I know where people get confused on this, because in the past that's exactly what Microsoft intended to do. They're not, this time. And I'll explain why in a minute. - -## Point 3: DSC on Linux - -Snover demonstrated a DSC Local Configuration Manager running on Linux, consuming a standard DSC MOF file, being used to set up an Apache website on the server. The underlying DSC resources were native Linux code. -This is not an attempt to convince Linux people to switch to Windows, nor is it an attempt to convince them to use DSC. Saying so is like saying, "Microsoft made PowerShell accept forward slashes as path separators in an attempt to convert Linux people.... _but we're too smart for that, hahahahah!"_ It's idiotic. Microsoft knows you're not going to suddenly break down and switch operating systems. They may be a giant corporation that sometimes makes silly moves, but they're not _dumb._ -No, DSC on Linux is for _Windows admins_ who choose to use DSC, and who want to extend that skill set to other platforms they have to manage. People who aren't, in other words, faced with a "switch" decision. - -## Point 4: Puppet/Chef/etc Should Use DSC - -Linux is, in many many ways, a more simplistic OS than Windows. And I mean that in a very good way, not as a dig. Most config information comes form text files, and text files are ridiculously easy to edit. Getting a solution like Puppet to work on Linux is, form a purely technical perspective, pretty straightforward. Windows, on the other hand, is built around an enormous set of disparate APIs, meaning getting something like Chef/DSC/whatever working on Windows is not only harder, it's essentially a never-ending task. -Microsoft is pouring time and money into creating DSC resources that can, through a very simple and consistent interface, configure tons of the OS. The coverage provided by DSC resources will continue to grow - exponentially, I suspect. That means Microsoft is doing a lot of work that you don't have to. -Even if you're using Puppet/Chef/etc instead of DSC, you can still piggyback on all the _completely open and human-readable code_ that actually makes DSC work. Your recipes and modules can simply call those DSC resources directly. You're not "using" DSC, but you're snarfing its code, so that you don't have to re-invent that wheel yourself. This should make Puppet/Chef people super-happy, because their lives got easier. Yes, you'll doubtless have to write some custom stuff still, but "save me -some - work" should always be a good thing. - -## Point 5: Tool vs. Platform - -Another thing that sidetracks these discussions is folks not understanding that Puppet/Chef/etc each provide a complete solution stack. They are a management console, they are a domain-specific language, and they are a platform-level implementation. When you adopt Puppet, you adopt it from top to bottom. -DSC isn't like that. -DSC only provides the platform-level implementation. It doesn't come with the management tools you actually need in a large environment, or even in many medium-sized environments. I completely expect tools like System Center Configuration Manager, or something, to provide the management-level tooling on top of DSC at some point - but we aren't discussing System Center. -So arguing "Puppet vs. DSC" is a lot like arguing "Toyota vs. 6-cylinder engine." The argument doesn't make sense. Yes, at the end of the day, Puppet/Chef/etc and DSC are meant to accomplish every similar things, but DSC is only a piece of the picture, which leads to the most important point. - -## Point 6: Microsoft Did Something Neat - -You can't take your Puppet scripts and push them to a Chef agent, nor can you do the reverse. Puppet/Chef/etc are, as I mentioned, fully integrated stacks - and they're proprietary stacks. "Proprietary" is not the same as "close-sourced;" and I realize that the languages used by these products aren't specifically proprietary. But the Puppet agent only knows how to handle Puppet scripts, and the Chef agent only knows how to read Chef scripts. That's -not - a dig at those products - being an integrated, proprietary stack isn't a bad thing at all. -But it's interesting that Microsoft took a different approach. Interesting in part because _they're_ usually the ones making fully-integrated stacks, where you can only use their technology if you fully embrace their entire product line. This time, _Microsoft bucked the trend_ and didn't go fully-integrated, proprietary stack. Microsoft did this, and the simple fact that they did is important, even if you don't want to use _any_ of their products. -From the top-down, that is from the management side down, Microsoft isn't forcing you to use PowerShell. They're not forcing you to use Microsoft technology at all, in fact. The configuration file that goes to a managed node is a static MOF file. That's a plain-text file, as in "Management Object Format," as in developed by the Distributed Management Task Force (DMTF). A vendor-neutral standard, in other words. -See, Microsoft _isn't_ pushing DSC as a fully integrated stack. DSC is just the bottom layer that accepts a configuration and implements it. Puppet Labs could absolutely design their product to turn Puppet scripts into the MOF file that DSC needs. You'd be able to completely leverage _the OS-native, built-in configuration agent_ and all its resources, right from Puppet. -Frankly, de-coupling the administrative tooling from the underlying API should make people _happy._ If we're having a really professional, non-fanboy discussion about declarative configuration, I think you have to admit that Microsoft has kinda done the right thing. In a perfect world, the Puppet/Chef/etc administrative tools would let you write your configuration scripts in their domain-specific language, and then compile those to a MOF. Everyone's agents would accept the same kind of MOF, and execute the MOF using local, native resources. That approach means _any_ OS could be managed by _any_ tool. _That's_ cross-platform. You'd be free to switch tools anytime you wanted, because the underlying agents would all accept the same incoming language - MOF. -I'm not saying Puppet/Chef/etc _should_ do that. But if you're going to make an argument about cross-platform and vendor-agnostic tooling, Microsoft's _approach_ is the right one. They've implemented a service that accepts _vendor-neutral configurations_ (MOF), and implements them using local, native resources. You can swap out the tooling layer anytime you want to. You don't need to write PowerShell; you just need to produce a MOF. - -## At the End of the Day - -I think the folks behind Puppet/Chef/etc totally "get" all this. I think you're probably going to see them taking steps to better leverage the work MS is doing on DSC, simply because it saves _them,_ and their users, work. And I don't think you're going to see Microsoft suggesting you ditch Puppet in favor of DSC. That's a complete non-argument, and nobody at Microsoft even understands why people thing the company wants that. -I fully recognize that there's a lot of "Microsoft vs. Linux" animosity in the world - the so-called "OS religions." I've never understood that, and I certainly am not trying to convince anyone of the relative worth of one OS over another. PowerShell.org - a community dedicated to a Microsoft product - runs on a CentOS virtual machine, which should tell you something about my total lack of loyalty when it comes to choosing the right tool for a job. If you're similarly "non-religious" about operating systems, I think DSC is worth taking a look at _just to take a look at it._ What's it do differently? How can you leverage that in your existing world? Are there any approaches that might be worth considering? -Part of my frustration about the whole "Puppet vs DSC" meme is that it smacks of, "my toys are shinier than your toys," which is just... well, literally childish. And it worries me that people are missing some of the above, very important, points - mainly, that Microsoft is trying really damn hard to play nicely with the other kids in the sandbox for a change. _Encourage_ that attitude, because it benefits everyone. - -## Once More... - -And again, I don't think Microsoft is trying to convince you to use DSC, or any other MS product, here. I'm certainly not trying to do so. I think DSC presents an opportunity for folks who already have a declarative configuration management system, strictly in terms of saving you some work in custom module authoring. And I think for folks that _don't_ have a declarative configuration management solution, and who already have an investment in Microsoft's platform, DSC is going to be an exceptionally critical technology to master. That doesn't in any way diminish the accomplishment of the folks behind Puppet/Chef/etc. In fact, if nothing else, it further validates those products' goals. And I think it's massively interesting that Microsoft took an approach that is open to be used by those other products, rather than trying to make their own top-to-bottom stack. It's a shift in Microsoft's strategic thinking, if nothing else, and an explicit acknowledgement that the world is bigger than Redmond. -Let's at least "cheers" for that shift in attitude. diff --git a/content/articles/2014-05-15-teched-n-a-2014-session-recordings.md b/content/articles/2014-05-15-teched-n-a-2014-session-recordings.md deleted file mode 100644 index f7cd521f8..000000000 --- a/content/articles/2014-05-15-teched-n-a-2014-session-recordings.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: TechEd N.A. 2014 Session Recordings -authors: - - Don Jones -date: "2014-05-15T20:50:50+00:00" -categories: - - PowerShell for Admins - - Training -aliases: - - /2014/05/teched-n-a-2014-session-recordings/ ---- - -There's some great PowerShell content now online for your viewing pleasure. -Jeffrey Snover and I had a blast doing "[Windows PowerShell Unplugged][1]," and I reviewed some best PowerShell practices (and hopefully provided a little inspiration for your career) in "[Windows PowerShell Best Patterns and Practices: Time to Get Serious.][2]" And the #2 overall session of TechEd? "[DSC: A Practical Overview][2]," including a surprise demo (and announcement) from Snover showing DSC running on Linux. -Enjoy! - - [1]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2014/DCIM-B318#fbid= - [2]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2014/DCIM-B417#fbid= diff --git a/content/articles/2014-05-16-powershell-summit-n-a-2014-session-videos.md b/content/articles/2014-05-16-powershell-summit-n-a-2014-session-videos.md deleted file mode 100644 index b6ccc81cd..000000000 --- a/content/articles/2014-05-16-powershell-summit-n-a-2014-session-videos.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: PowerShell Summit N.A. 2014 Session Videos! -authors: - - Don Jones -date: "2014-05-16T21:20:43+00:00" -categories: - - PowerShell Summit -aliases: - - /2014/05/powershell-summit-n-a-2014-session-videos/ ---- - -Aaron Hoover was kind enough to webcam the Summit sessions he attended, and he's posted the videos on YouTube. URLs, from Aaron's channel, are below. -Just Enough Admin - Security in a Post-Snowden World - Jeffrey Snover - PowerShell Summit 2014 - -Windows System Internals with PowerShell - Adam Driscoll - PowerShell Summit 2014 - -PowerCLI: How to Automate Your VMWare Environment Reports - Matt Griffin - PowerShell Summit 2014 - -Parallel Execution with PowerShell - Tome Tanasovski - PowerShell Summit 2014 - -PowerShell for Security Incident Response - Lee Holmes and Joe Bialek - PowerShell Summit 2014 - -Leverage Multi-Threading for Speeding Up Your Scripts - Jason Walker - PowerShell Summit 2014 - -Advanced PowerShell Eventing Scripting Techniques - Matt Graeber - PowerShell Summit 2014 - -Using PowerShell as a Reverse Engineering Tool - Matt Graeber - PowerShell Summit 2014 - -On the Job: Putting PowerShell Scheduled Jobs to Work - Jeff Hicks - PowerShell Summit 2014 - -The Seven Secrets of CIM - Brian Wilhite - PowerShell Summit 2014 - -WSMan Cmdlets - Richard Siddaway - PowerShell Summit 2014 - -Networking Administration with PowerShell - Richard Siddaway - PowerShell Summit 2014 - -Kerberos Delegation, CredSSP, and Windows PowerShell - Aleksandar Nikolic - PowerShell Summit 2014 - -The Joy of Intellisense: Tab Expansion - James O'Neill - PowerShell Summit 2014 - -Trending and Reporting - Don Jones - PowerShell Summit 2014 - -Leveraging Web Services with PowerShell - Trond Hindenes - PowerShell Summit 2014 - -Monitoring Using PowerShell - Josh Swenson - PowerShell Summit 2014 - -Cmdlet-ize the Registry - Richard Siddaway - PowerShell Summit 2014 - -PowerShell Module Design Rules (and When to Bend Them) - Kirk Freiheit - PowerShell Summit 2014 diff --git a/content/articles/2014-05-17-beta-powershell-lab-guide-for-classes.md b/content/articles/2014-05-17-beta-powershell-lab-guide-for-classes.md deleted file mode 100644 index 41404c2c1..000000000 --- a/content/articles/2014-05-17-beta-powershell-lab-guide-for-classes.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: BETA PowerShell Lab Guide for Classes -authors: - - Don Jones -date: "2014-05-17T18:59:49+00:00" -categories: - - Training -aliases: - - /2014/05/beta-powershell-lab-guide-for-classes/ ---- - -I've been working on a new lab guide for my classes, and thought I'd share an early version. Note that this may become unavailable at any point; the final version will go on MoreLunches.com, as the lab guide corresponds largely with _Learn Windows PowerShell in a Month of Lunches_ and _Learn PowerShell Toolmaking in a Month of Lunches_, as well as with several of the free ebooks here on PowerShell.org. -Also note that there is no slide deck. I hate slides and don't use them in class, so I haven't produced any slides. I do use a few diagrams in class (I load them into an iPad app called AirSketch, which "broadcasts" to my computer's web browser, allowing me to show those images on the screen, and to whiteboard on them as needed), and those diagrams are replicated in the lab guide for students' convenience. -This new guide is designed to be more standalone than the ones I've used in the past. Each lab includes background and syntax reminders, designed so that students don't have to take notes while the instructor is demonstrating things. That way, everyone can focus on the demos. I basically review each lab myself before I start a unit, and then just teach and demo what's covered in the lab. Students then get the lab itself as a reminder, and exercises to cement what they're learning. In many of my classes, this guide is the only thing students have in front of them, and it works well with my teaching style. -At 119 pages, it's a pretty substantial guide - and I have about nine more units to write, plus an additional four I plan to develop in the future. -You can [download the guide in PDF form][1]. Again, this link may go dead at some point when I'm done with the guide, and officially post it on MoreLunches.com. Right now, I'm very interested in what you think. It's designed to present very concise summaries of what I teach, not completely replace me, but in some places it's still pretty extensive. - - [1]: http://1drv.ms/1lwCYtr diff --git a/content/articles/2014-05-19-attend-a-beta-advanced-powershell-class-live-or-remote.md b/content/articles/2014-05-19-attend-a-beta-advanced-powershell-class-live-or-remote.md deleted file mode 100644 index 8ae374071..000000000 --- a/content/articles/2014-05-19-attend-a-beta-advanced-powershell-class-live-or-remote.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Attend a Beta \"Advanced PowerShell\" Class Live or Remote" -authors: - - Don Jones -date: "2014-05-19T16:29:55+00:00" -categories: - - Training -aliases: - - /2014/05/attend-a-beta-advanced-powershell-class-live-or-remote/ ---- - -As you may know, I helped developing the forthcoming Microsoft Official Courseware 10962A class, "Advanced Windows PowerShell." It's a 3-day class that includes an overview of DSC, a full day of scripting and toolmaking, a Workflow overview, error handling and debugging, and more. It's meant as a direct follow-on to the 5-day 10961 course. We're scheduling a beta teach through a Microsoft training center in mid-August 2014. It'll be taught by MCT Jason Yoder, who's an excellent trainer (and who attended PowerShell Summit North America 2014 a few weeks ago, so you know he's jiggy with PowerShell). -There will likely be a fee to attend live or remote, as you'll get the complete "A" rev of the course. If you think you might be interested, go to http://powershell.hosted.phplist.com/lists/?p=subscribe&id=7 and sign up. Once the full class info is online, we'll e-mail you and let you know where to go find it - we won't share your info with anyone else, including the training center. -Do this quickly - the class will likely fill up. diff --git a/content/articles/2014-05-21-installing-powershell-v5-be-a-little-careful-ok.md b/content/articles/2014-05-21-installing-powershell-v5-be-a-little-careful-ok.md deleted file mode 100644 index 5de38778a..000000000 --- a/content/articles/2014-05-21-installing-powershell-v5-be-a-little-careful-ok.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Installing PowerShell v5? Be a Little Careful, OK? -authors: - - Don Jones -date: "2014-05-21T17:37:46+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -aliases: - - /2014/05/installing-powershell-v5-be-a-little-careful-ok/ ---- - -I'm getting a lot of questions from folks, via Twitter and other venues, regarding Windows Management Framework 5.0 - which is where PowerShell v5 comes from. It's awesome that people are installing v5 and kicking the tires - however, please help spread the word: - - * v5 **is a preview.** It isn't done, and it isn't guaranteed bug-free. It shouldn't be installed on production computers until it's officially released. - * v5 doesn't install 'side by side' with v3 or v4. You can't run it with "-version 3" to "downgrade." Now, v5 shouldn't _break_ anything - something that runs in v3 or v4 should still work fine - but there are no guarantees **as it's a preview and not released code** at this stage. - * Server software (Exchange, SharePoint, etc) often has a hard dependency on a specific version of PowerShell. You need to look into that before you install v5. - * After installing v5, you might not be able to cleanly uninstall and revert to a prior version. - -Generally speaking, v5 should be installed in a test virtual machine at the very least, not on a production computer. It's great to play with it, and you should absolutely log bugs and suggestions to http://connect.microsoft.com. -This situation will be true for **any** pre-release preview of PowerShell or WMF going forward. "Preview" is the new Microsoft-speak for "beta," and you should treat it as such. Play with it, yes - that's the whole point, and it's how we get a stable, clean release in the end. But play with caution, and never on production computers. diff --git a/content/articles/2014-05-21-life-and-times-of-a-dsc-resource.md b/content/articles/2014-05-21-life-and-times-of-a-dsc-resource.md deleted file mode 100644 index fcd2d317b..000000000 --- a/content/articles/2014-05-21-life-and-times-of-a-dsc-resource.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Life and Times of a DSC Resource -authors: - - Steven Murawski -date: "2014-05-22T01:21:50+00:00" -categories: - - Tips and Tricks -aliases: - - /2014/05/life-and-times-of-a-dsc-resource/ ---- - -My Life and Times of a DSC Resource talk from the PowerShell Summit is now online. -Enjoy! diff --git a/content/articles/2014-05-22-building-scalable-configurations-with-dsc.md b/content/articles/2014-05-22-building-scalable-configurations-with-dsc.md deleted file mode 100644 index 6e2272fc3..000000000 --- a/content/articles/2014-05-22-building-scalable-configurations-with-dsc.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Building Scalable Configurations With DSC -authors: - - Steven Murawski -date: "2014-05-22T18:30:00+00:00" -categories: - - Tips and Tricks -aliases: - - /2014/05/building-scalable-configurations-with-dsc/ ---- - -My Building Scalable Configurations with DSC talk from the PowerShell Summit is now online. -Enjoy! diff --git a/content/articles/2014-05-23-patterns-for-implementing-a-dsc-pull-server-environment.md b/content/articles/2014-05-23-patterns-for-implementing-a-dsc-pull-server-environment.md deleted file mode 100644 index 6ad9fbdc7..000000000 --- a/content/articles/2014-05-23-patterns-for-implementing-a-dsc-pull-server-environment.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Patterns for Implementing a DSC Pull Server Environment -authors: - - Steven Murawski -date: "2014-05-23T13:00:25+00:00" -categories: - - Tips and Tricks -aliases: - - /2014/05/patterns-for-implementing-a-dsc-pull-server-environment/ ---- - -My Patterns for Implementing a DSC Pull Server Environment talk from the PowerShell Summit is now online. -Enjoy! diff --git a/content/articles/2014-05-24-verified-effective-exams-will-begin-soon-looking-for-early-registrants.md b/content/articles/2014-05-24-verified-effective-exams-will-begin-soon-looking-for-early-registrants.md deleted file mode 100644 index ad8ce3ed7..000000000 --- a/content/articles/2014-05-24-verified-effective-exams-will-begin-soon-looking-for-early-registrants.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "[UPDATED] Verified Effective Exams will Begin Soon" -authors: - - Don Jones -date: "2014-05-24T23:21:00+00:00" -categories: - - Announcements -aliases: - - /2014/05/verified-effective-exams-will-begin-soon-looking-for-early-registrants/ ---- - -Check it out... -[![getcertificate](https://powershell.org/wp-content/uploads/2014/05/getcertificate.png)](https://powershell.org/wp-content/uploads/2014/05/getcertificate.png) - -## Wave 1 - -We'll be going live with the PowerShell Toolmaker program very soon. Wave 1 will permit our PowerShell Summit N.A. 2014 alumni who registered early and were given a free exam. If you're one of those folks, **and if you would like to be an early registrant, please contact exams at PowerShell.org**. You will need to have your Summit confirmation code (it was e-mailed to you when you registered, and was printed on your badge; we cannot provide it to you if you've lost it). **We're looking for a small handful of early registrants to take the exam and help us test the grading systems**. If you pass, it's "real," and you'll get an e-certificate like the one shown here! -How do you know if you got a free exam? There was a slip included with your badge at the Summit. If you weren't paying attention, we'll allow you to try entering your Summit confirmation code as an exam voucher to see if it works. If you can't find your confirmation code, you're out of luck. -Wave 1 is designed to let us test the system and make sure everything is working well, in a small enough scale to manage any problems that arise. - - -## Next Steps - -If you'd like to know more about the program, and understand when it may be open to you, please review the [VERIFIED EFFECTIVE information page][1]. - - - [1]: https://powershell.org/?p=15671 diff --git a/content/articles/2014-05-30-yasg-yet-another-scripting-game.md b/content/articles/2014-05-30-yasg-yet-another-scripting-game.md deleted file mode 100644 index 250498355..000000000 --- a/content/articles/2014-05-30-yasg-yet-another-scripting-game.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: YASG! (Yet Another Scripting Game) -authors: - - Terri Donahue -date: "2014-05-30T16:02:23+00:00" -aliases: - - /2014/05/yasg-yet-another-scripting-game/ ---- - -The monthly Charlotte PowerShell Users Group meeting is coming up quickly. Mark Thursday, June 5th on your calendars. All of our MIA leaders should be at this one. Hopefully we will be able to personally congratulate the Teresa, aka ScriptingWife, on her recent MVP Award. Jump on over to the [MeetUp](http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/178572422/) page and let us know if we will see you there. diff --git a/content/articles/2014-05-31-analyzing-the-black-magic-powershell-exploit-and-appropriate-actions.md b/content/articles/2014-05-31-analyzing-the-black-magic-powershell-exploit-and-appropriate-actions.md deleted file mode 100644 index 73129ce02..000000000 --- a/content/articles/2014-05-31-analyzing-the-black-magic-powershell-exploit-and-appropriate-actions.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: "Analyzing the \"Black Magic\" PowerShell \"Exploit\" and Appropriate Actions" -authors: - - Don Jones -date: "2014-05-31T14:39:14+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/05/analyzing-the-black-magic-powershell-exploit-and-appropriate-actions/ ---- - -Trend Micro released a report on a new [PowerShell-vectored exploit named Black Magic][1]. I had a lovely Twitter conversation about what this means in terms of PowerShell's vulnerability to attack, and what admins should do. Unfortunately Twitter sucks for carrying on that kind of conversation, so I wanted to post this to clarify a few things. -First, I'm going to write this article as if "you" were hit by this exploit. Don't take it personally, it's just an easier style of language for me - it's not actually addressing _you._ -Second, when it comes to security, the goal is to _stop attacks from happening._ That means you have to consider all the ways something could nail you, and try to block as many of them as is practical. That's called "defense in depth," giving you multiple layers of defense. The corollary to that is that your environment must still be functional. I mean, from a secure standpoint, if I unplugged all the WiFi access points and Ethernet switches you have, you'd be pretty secure. And non-functional. -Third... and I don't know how to be delicate about this, but a lot of admins out there aren't very sophisticated about security. There's sometimes a tendency to fix what they can get their hands on, whether or not that makes any impact on security or not. So let's be very clear about what you do when it comes to security: _You do as little as possible, and impinge as little functionality as possible, while achieving your security goals._ That helps maintain a "functional" environment, and keeps the security aspect of it "maintainable." Sometimes, "as little as possible" is quite a lot indeed - but you look for that balance. Finally, you almost _never do anything to "improve" security if it is in fact a null improvement._ That is, you don't lock the doors if the windows can't be closed. There's no point. -Now, let's look at how Black Magic operates. - - -## Step 1: Social Engineering - -The exploit comes in the form of an .LNK e-mail attachment. That's a Windows shortcut file. Users are meant to double-click it, and the shortcut launches a PowerShell session with the execution policy essentially turned off. - -> **Problem 1:** You let users get .LNK e-mail attachments from external users. This is stupid. Users shouldn't be able to receive executable file types. Note that a .PS1 file isn't an executable file type, which is why the exploit had to take this action. If you'd blocked .LNK attachments at the firewall, the exploit would be useless. -> **Problem 2:** Your users are opening file attachments from people they don't know. _There is no technical way to protect an environment where users aren't doing the right thing._ No way. Just give up. This is why I keep going on about building a "[culture of security][2]." If your users' job descriptions, or your company employee manual, doesn't say something to the effect of, "employees must be able to safely operate company computers in accordance with company policies and standards," then you're just doomed. If it _does_ say that, and a user does open an attachment like this, you write them up and eventually fire them. -If you think you can stop stupid users from bypassing every security measure you put in place, you are dumber than they are -. You have to fix the social engineering element. There is almost no point in trying anything else, because users will get around it. - -I know. A lot of you are shrugging and saying, "well, you can't fix users, so I'll just lock down PowerShell." It won't work. -I once, and rather famously, refused to help a law firm client get their NTFS file permissions under control, because they let users print sensitive documents and leave them lying around the office. _Don't bother locking the door if the windows are open._ - - -## Step 2: The Download - -One of the elements of the Twitter discussion was, "maybe standard users shouldn't have PowerShell able to run, because it's so powerful and can be exploited so easily." -Um, no. -First: PowerShell's execution policy _is not a measure against malware._ It was never designed to be, so don't be disappointed when it isn't. If you thought it was, you were wrong, and that's your fault for not educating yourself, not Microsoft's fault for failing to do something they never set out to do in the first place. -Second: PowerShell _only lets you do what you have permission to do._ The Black Magic exploit used PowerShell _simply to download a file from the Internet._ That's it. It didn't wipe out Active Directory, it didn't erase a file server, and it didn't start grabbing messages out of Exchange, _because normal users can't do those things._ -Would locking down PowerShell, so that normal users couldn't run it, have stopped this exploit? No, because normal users have an _abundance_ of ways to download files, and the exploit would simply have used a different one. PowerShell was convenient here, not necessary. If you're going to posit locking down PowerShell, _you must also lock down every other possible means of downloading a file from the Internet,_ or you've done nothing to impact security. Nothing. -**PowerShell is not powerful.** Erase that from your mind. Everything PowerShell is and does comes from the .NET Framework installed on every one of your computers, which your users have full access to. PowerShell is **nothing more** than a human-friendly way of getting to the Framework without needing Visual Studio on-hand. You could _erase_ PowerShell and 100% of its functionality would still be present and absolutely usable by an exploit. Get your brain wrapped around that, because it's an important concept. - -> **Problem 3**: You let your users download files from trashy websites. Your firewall should have been blocking access, and if it had integrated malware tools and realtime block lists, it probably would have caught this access. -> **Problem 4:** You're not using a local to block -outgoing - access by applications. For standard users, there's little reason to access the Internet by means other than a web browser or known applications. This is a well-known technology and approach that's been around for a decade. - -## Step 3: Run a File - -Black Magic's last step is to run the downloaded payload, _which it does under normal user permissions._ - -> **Problem 5:** You're allowing users to run arbitrary applications. AppLocker has been around since Windows Vista, and provides a way of "whitelisting" applications that may run. This payload would never have been allowed to execute if you'd been using a built-in tool that's been around since 2008. AppLocker even offers the ability to build that whitelist for you. -> **Problem 6:** You're not running updated anti-malware software that would have detected the payload and blocked it - and alerted someone. Most would have blocked access to the URL where the payload came from, too. - -## Conclusions - -So you've had six opportunities to stop this exploit, all of which involve well-known, years-old technologies and techniques. You probably haven't _done most of them,_ and so you want to blame PowerShell. -OK... I'll step out of the "you" attack-y mode :). -The point is that, once you have arbitrary code running on users' systems, you're owned. Nothing you can do to PowerShell will stop that. This attack could easily have been a .LNK file that ran Cmd.exe and the Telnet or FTP client - it could have achieved the same thing. It could easily have been an .EXE ("no, we block EXE file attachments;" "why the hell don't you also block .LNK then, dummy?"). -I don't want to come across as defending PowerShell per se; I'm trying to help folks understand where the real security problems lie. PowerShell is a red herring in all this; it was a convenient way of getting innocuous code to execute. There were six other places where _this attack would have been stopped in its tracks,_ and any six of those would also have stopped every other similar kind of attack that didn't rely specifically on PowerShell. That's what makes those six _effective_ - they're global, not targeted at one specific piece of code. All of those six act to stop malware. -Before you take actions in security, you need to make sure you're doing so from a holistic, professional security perspective. The first time a fire broke out in a crowded theater, officials didn't say, "well, we should put sprinklers and alarms in that theater." They put them in _every_ theater, and started demanding flame-retardant fabrics and other measures. You address security _across the board,_ not on a piecemeal basis. - - -## A Tangent Argument - -"Ah," the argument goes, "but we should reduce moving parts. Users don't have a legit need to run PowerShell, so we should lock them out of it." -Valid. Except that PowerShell.exe _isn't PowerShell._ PowerShell is a .NET Framework-based engine; PowerShell.exe is just a console application that lets you feed typed commands to that engine. You _can't_ remove PowerShell, and you _can't_ "block" users' access to it, because it's part of the Framework. It's an integral part of the operating system. Things you don't even realize are using it, are using it. -But yes, you could block users' access to the console application, PowerShell.exe. I might even buy that argument, especially in a highly secure environment where you simply don't want users having access to _anything_ they don't explicitly need to do their jobs. In fact, I _would_ buy that argument, _if and only if_ you block users' access to _everything_ they don't explicitly need. Notepad. Windows Paint. Solitaire. Etc. Because based on the theory you're working from, _all code is bad code_ (a valid security perspective) and you block everything not explicitly needed. Remember, PowerShell doesn't give users any special capabilities. Anything a normal user can do in PowerShell _can be done in at least 2 other ways using other native tools._ This is why AppLocker is a better approach: the list of apps a user _needs_ is smaller than the list of apps they don't, and so a whitelist is more maintainable, no matter how huge it is. - - -## Anyway... - -There you go. Now, you're welcome to make comments on this, and offer your perspective. However, I have a couple of guidelines. - - 1. Keep the conversation civil and professional. I'll delete anything obnoxious. - 2. Keep the conversation focused on _security._ And remember that security isn't about locking down the doors when the windows are open; it's about holistically achieving specific goals. You don't take security measures that simply move the target elsewhere. "Defense in depth" doesn't mean 80 security restrictions and 20 ways around them. If something is super-easy to bypass, you don't bother. - - - - - [1]: http://blog.trendmicro.com/trendlabs-security-intelligence/black-magic-windows-powershell-used-again-in-new-attack/ - [2]: http://redmondmag.com/Blogs/IT-Decision-Maker/2014/04/Creating-a-Culture-of-Security.aspx diff --git a/content/articles/2014-06-01-powershell-org-annual-operating-budget.md b/content/articles/2014-06-01-powershell-org-annual-operating-budget.md deleted file mode 100644 index 1ecf0927c..000000000 --- a/content/articles/2014-06-01-powershell-org-annual-operating-budget.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: PowerShell.org Annual Operating Budget -authors: - - Don Jones -date: "2014-06-01T14:30:30+00:00" -categories: - - Announcements -aliases: - - /2014/06/powershell-org-annual-operating-budget/ ---- - -As we approach our annual shareholder meeting for PowerShell.org, Inc., I wanted to take a moment and share some details about our 2014-2015 operating budget. -First, you can always [review the budget spreadsheet in our OneDrive account][1]. This is updated as our plans change, prices rise, and so on; you're welcome to check back whenever you like. -Now, let's talk about some of our organizational goals, and what some of the items in the spreadsheet mean. As you know, we've been fortunate to have the support of several corporate sponsors since our invention. MVP Systems, Interface Technical Training, CBT Nuggets, and SAPIEN Technologies have been amongst those helping us out; Interface and SAPIEN both signed on for a generous three-year commitment right when we launched, and we couldn't have gotten to this point without them. However, we know that companies' goals and positions change over time, so we've been trying to drive to a point where we didn't need to rely on corporate sponsorship. We now believe that the PowerShell Summit is stable enough that, with a conservative budget, we can meet our operational needs out of the profits from the North America and Europe events. -As a note, PowerShell.org isn't classified as a _nonprofit; _we're a _not-for-profit. _We're legally allowed to make a profit; it just isn't a goal. The corporation pays Federal income tax on any profits, although most of our income is spent on expenses, which end up being deductions. -As you'll notice in the spreadsheet, we believe we can meet our annual operating budget by applying a $175 overhead charge to each attendee of the Summit, assuming we get 100 attendees between the two events annually. That's _conservative; _the N.A. show has done 100 and 150, in its two years. So in reality the number can probably be much smaller. -Our $750 annual AWPP fee includes Summit admission, VERIFIED EFFECTIVE exams, and other benefits; our operating budget reflects the costs for these items (including virtual machine hosting for the examination program). So $175 of that $750 is earmarked for PowerShell.org; that leaves $575 to cover actual Summit expenses. Due to the exchange rate, Europe is our worst-case show for expenses, with a $330/person overhead for food and beverage. The remaining $245 goes to cover speaker overhead: speaker food and beverage (we admit them to the event for free, but they still eat), and some speaker travel reimbursement. With 50 paid attendees, that's $12,250 in overhead income. Subtract $3300 for 10 speakers' F&B, and we have about $9000 left to cover other expenses, including some speaker travel reimbursement. The US shows do somewhat better; in reality; we probably will take less than the $175 per person from the Europe show, to allow for more speaker travel expenses, and take a bit more from the US show where our expenses are lower and attendance is known to be higher. -Most of the budget line items should be fairly self-explanatory. In some cases, we're receiving some of the services for free at present; we've budgeted to pays for them should our free ride ever end. You're welcome to ask about anything that seems unclear, too. But you'll notice that there's no budget for salaries: nobody associated with PowerShell.org, Inc. is paid for their efforts. We're run by volunteers. -So what happens when we get 200 global Summit attendees instead of the 100 we budget for? That'll give us an operational pad. In most cases, it means we'll be able to be a bit more elaborate with the Summit itself, buying some food for an evening event, for example. As I mentioned, it'll also allow us to better reimburse speakers for their out-of-pocket travel expenses, which is definitely a goal. In fact, one reason we've tried to pay the operational budget from just half our expected attendance is specifically so we'll have extra funds so that speakers don't have to be entirely out-of-pocket to present at the Summits. -I hope this is helpful. As always, feel free to post your questions. - - [1]: http://1drv.ms/1eKECnJ diff --git a/content/articles/2014-06-04-quick-tip-wmi-vs-cim-syntax.md b/content/articles/2014-06-04-quick-tip-wmi-vs-cim-syntax.md deleted file mode 100644 index 31ded256c..000000000 --- a/content/articles/2014-06-04-quick-tip-wmi-vs-cim-syntax.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: "Quick Tip: WMI vs. CIM Syntax" -authors: - - Don Jones -date: "2014-06-04T12:31:32+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/06/quick-tip-wmi-vs-cim-syntax/ ---- - -`# List all classes in a namespace -Get-CimClass -Namespace root\CIMv2 -Get-WmiObject -Namespace root\CIMv2 -List -`\# list all classes containing "service" in their name -Get-CimClass -Namespace root\CIMv2 | Where CimClassName -like '\*service\*' | Sort CimClassName -(or) -Get-CimClass -Namespace root\CIMv2 -Classname \*service\* -Get-WmiObject -Namespace root\CIMv2 -List | Where Name -like '\*service\*' | Sort Name -\# get all class instances -Get-CimInstance -Namespace root\CIMv2 -ClassName Win32_OperatingSystem -Get-WmiObject -Namespace root\CIMv2 -Class Win32_OperatingSystem -\# filter class instances -Get-CimInstance -Namespace root\CIMv2 -ClassName Win32_LogicalDisk -Filter "DriveType=3" -Get-WmiObject -Namespace root\CIMv2 -Class Win32_LogicalDisk -Filter "DriveType=3" -\# show all properties -Get-CimInstance -Namespace root\CIMv2 -ClassName Win32_OperatingSystem | Get-Member -Get-WmiObject -Namespace root\CIMv2 -Class Win32_OperatingSystem | Get-Member -\# show all properties and values -Get-CimInstance -Namespace root\CIMv2 -ClassName Win32_OperatingSystem | fl * -Get-WmiObject -Namespace root\CIMv2 -Class Win32_OperatingSystem | fl * -\# remote computer -Get-CimInstance -Namespace root\CIMv2 -ClassName Win32_BIOS -ComputerName dc,win81 -Get-WmiObject -Namespace root\CIMv2 -Class Win32_BIOS -ComputerName dc,win81 -\# use CIM command to talk to non-CIM computer -Get-CimInstance -Namespace root\CIMv2 -ClassName win32_BIOS -CimSession ( -New-CimSession -ComputerName OLD-XP-PC -SessionOption ( -New-CimSessionOption -Protocol Dcom -) -) diff --git a/content/articles/2014-06-05-omaha-powershell-user-group-is-open.md b/content/articles/2014-06-05-omaha-powershell-user-group-is-open.md deleted file mode 100644 index ef28d7489..000000000 --- a/content/articles/2014-06-05-omaha-powershell-user-group-is-open.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Omaha PowerShell User Group is Open! -authors: - - Jacob Benson -date: "2014-06-05T18:51:10+00:00" -aliases: - - /2014/06/omaha-powershell-user-group-is-open/ ---- - -The Omaha PowerShell User Group is now open for business!  If you are in the Omaha-Council Bluffs-Lincoln area and are interested in being a part of it, either let myself, Jacob Benson (@vhusker) or Boe Prox (@proxb) know. -We are currently looking for a meeting place and are shooting for having our first meeting the last week in July.  In addition to finding out who might be interested in attending, we would also like to know what days/times work best for you and the kinds of things you would like to get out of the meetings. -You can follow us on Twitter at @OmahaPSUG.  If you wish to contact us through email you can reach us at omahapsug@gmail.com . diff --git a/content/articles/2014-06-09-phillyposh-06052014-meeting-summary-and-presentation-materials.md b/content/articles/2014-06-09-phillyposh-06052014-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 1db6043d6..000000000 --- a/content/articles/2014-06-09-phillyposh-06052014-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: PhillyPoSH 06/05/2014 meeting summary and presentation materials -authors: - - John Mello -date: "2014-06-10T03:19:05+00:00" -aliases: - - /2014/06/phillyposh-06052014-meeting-summary-and-presentation-materials/ ---- - -* [Jeff Hicks][1] gave a presentation entitled “Getting Started with Desired State Configuration (DSC)”. During his talked Jeff gave an overview of [DSC][2] and walked through an example of a push mode configuration. A copy of his [ -presentation materials are available here -.][3] - * A [ -recording of this meeting -][4] has been posted to our [ -YouTube channel -][5] - - - - [1]: http://jdhitsolutions.com/blog/ - [2]: http://technet.microsoft.com/en-us/library/dn249912.aspx - [3]: https://github.com/PhillyPoSH/2014-06-Jeff-Hicks-DSC - [4]: https://www.youtube.com/watch?v=J5ru8h73F0g&feature=youtu.be - [5]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014-06-09-wish-list-better-code-formatting-in-the-forums-can-you-help.md b/content/articles/2014-06-09-wish-list-better-code-formatting-in-the-forums-can-you-help.md deleted file mode 100644 index e228d2f4a..000000000 --- a/content/articles/2014-06-09-wish-list-better-code-formatting-in-the-forums-can-you-help.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "Wish List: Better Code Formatting in the Forums (Can You Help?)" -authors: - - Don Jones -date: "2014-06-09T18:06:36+00:00" -aliases: - - /2014/06/wish-list-better-code-formatting-in-the-forums-can-you-help/ ---- - -I know it's been a "wish" of many folks for our forums to have better code formatting. Well, if you know some PHP and a little about WordPress, you can make it happen. -What we need is a WordPress plugin that hooks the action for post displays. The plugin needs to take the post body, and look for anything contained within HTML "code" tags or "pre" tags. -Within that content, the plugin needs to strip any further code/pre tags (WordPress has a bit of a glitch where it'll sometimes nest them). It should then HTML-encode the remaining content to turn any backticks into an HTML entity. Finally, it should color-code the content, or whatever, and hand it back to WordPress for display. -If you think you might be interested, let me know. -There ARE existing code formatters. But they have some weaknesses: - - * Many require you to use a custom shortcode, which our forums users won't pick up on. Getting folks to use the standard CODE tag, which is even on the toolbar, is hard enough. - * Most require additional directives to specify the language and whatnot that will be formatted - that's a hurdle people, in the past, weren't able to grasp. - * Some use extensive client-side JavaScript, which is heavy, performs poorly, and doesn't interact well with some of the other JavaScript on the site. - * Many don't accommodate WordPress' treatment of backticks. WP wants them to be code delimiters, but obviously in PowerShell the backtick is important for other reasons. - -What we need isn't giant, and it isn't complicated, it'll just require some time. -**UPDATE:** I'm working on it. -**UPDATE:** I think I got it. I'm using the GeSHi parser Joel uses on PoshCode.org, although I've applied different CSS style to it. If anyone would like to tackle improving that parser, or the CSS, you can hit me up and I'll give you the code as it stands. But as-is, we get line-numbered, colorized syntax in a scrollable window when you use`to enclose your code blocks. WordPress backticks aren't allowed for code, and inline code isn't supported. Older HTML-style CODE and PRE tags will be converted automatically. I think. diff --git a/content/articles/2014-06-13-free-online-access-to-techletter-back-issues.md b/content/articles/2014-06-13-free-online-access-to-techletter-back-issues.md deleted file mode 100644 index 10046b4f9..000000000 --- a/content/articles/2014-06-13-free-online-access-to-techletter-back-issues.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Free Online Access to TechLetter Back Issues -authors: - - Don Jones -date: "2014-06-13T18:38:08+00:00" -categories: - - Announcements -aliases: - - /2014/06/free-online-access-to-techletter-back-issues/ ---- - -Did you know that PowerShell.org has, for more than a year now, offered a mostly-monthly TechLetter e-mail newsletter? It's stuffed with community news, announcements (like our free [webinar][1] schedule), feature articles on PowerShell, and much more. It's a great way to learn a little bit at a time, and it's truly awesome content. -And we keep back issues for your perusal! -[You can find the back issues online][2]. We post all but the most recent 2-3 issues, but of course you can [subscribe and have them delivered right to your inbox][3] around the middle of most months. -We're always on the lookout for new content, too - and if you're thinking, "oh, I have nothing really to share," you're wrong! It can be as simple as an article about something you figured out. With more than 5,000 subscribers, someone's sure to appreciate your perspective! Contact our Editors at PowerShell.org via e-mail to submit your article, or to suggest an article idea. -And please - tell a friend! - - [1]: https://powershell.org/techsession-webinars/ "TechSession Webinars" - [2]: https://powershell.org/techletter/ - [3]: https://powershell.org/newsletter/ "Newsletter" diff --git a/content/articles/2014-06-16-charlotte-powershell-user-group-no-meeting-in-july-enjoy-your-holiday.md b/content/articles/2014-06-16-charlotte-powershell-user-group-no-meeting-in-july-enjoy-your-holiday.md deleted file mode 100644 index 807de22fa..000000000 --- a/content/articles/2014-06-16-charlotte-powershell-user-group-no-meeting-in-july-enjoy-your-holiday.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Charlotte PowerShell User Group No meeting in July, enjoy your holiday! -authors: - - ScriptingWife -date: "2014-06-16T22:00:59+00:00" -aliases: - - /2014/06/charlotte-powershell-user-group-no-meeting-in-july-enjoy-your-holiday/ ---- - -There will not be a meeting in July in Charlotte, please enjoy the 4th of July holiday. We will be back on schedule in August. diff --git a/content/articles/2014-06-19-european-powershell-summit.md b/content/articles/2014-06-19-european-powershell-summit.md deleted file mode 100644 index 25d060bd5..000000000 --- a/content/articles/2014-06-19-european-powershell-summit.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: European PowerShell Summit -authors: - - Richard Siddaway -date: "2014-06-20T07:35:51+00:00" -categories: - - PowerShell Summit -aliases: - - /2014/06/european-powershell-summit/ ---- - -There seems to have been a bit of confusion regarding the European PowerShell Summit as the site will tell you that registration is currently unavailable. -There isn't a problem and the Summit **HAS NOT** sold out at this time. WE just haven't opened registration yet. -**Registration will open on 15 July 2014** -. diff --git a/content/articles/2014-06-19-omaha-powershell-user-group-is-filling-up-fast.md b/content/articles/2014-06-19-omaha-powershell-user-group-is-filling-up-fast.md deleted file mode 100644 index 075730044..000000000 --- a/content/articles/2014-06-19-omaha-powershell-user-group-is-filling-up-fast.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Omaha PowerShell User Group is Filling Up Fast! -authors: - - Jacob Benson -date: "2014-06-19T18:55:25+00:00" -aliases: - - /2014/06/omaha-powershell-user-group-is-filling-up-fast/ ---- - -The first meeting of the Omaha PowerShell User Group is filling up fast!  There are only 16 available seats so make sure you get your spot! -Meeting details and sign up information can be found at omahapsug.eventbrite.com diff --git a/content/articles/2014-07-05-phillyposh-07032014-meeting-summary-and-presentation-materials.md b/content/articles/2014-07-05-phillyposh-07032014-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 815fffd4b..000000000 --- a/content/articles/2014-07-05-phillyposh-07032014-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: PhillyPoSH 07/03/2014 meeting summary and presentation materials -authors: - - John Mello -date: "2014-07-05T18:46:17+00:00" -aliases: - - /2014/07/phillyposh-07032014-meeting-summary-and-presentation-materials/ ---- - -* [Ferdinand G. Rios][1] gave a presentation entitled “Building PowerShell GUI Tool Solutions" During his talked Ferdinand demonstrated how to use [Sapien PowerShell Studio 2014][2] to easily build GUI applications on top of PowerShell, - * A [ -recording of this meeting -][3] has been posted to our [ -YouTube channel -][4] - - [1]: http://www.ferdinandrios.com/ - [2]: http://www.sapien.com/software/powershell_studio - [3]: https://www.youtube.com/watch?v=1daOFL4lp5E&feature=youtu.be - [4]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014-07-15-registration-for-european-summit-2014-is-open.md b/content/articles/2014-07-15-registration-for-european-summit-2014-is-open.md deleted file mode 100644 index c12c4d338..000000000 --- a/content/articles/2014-07-15-registration-for-european-summit-2014-is-open.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Registration for European Summit 2014 is open -authors: - - Richard Siddaway -date: "2014-07-15T08:15:52+00:00" -categories: - - PowerShell Summit -aliases: - - /2014/07/registration-for-european-summit-2014-is-open/ ---- - -Registration for the PowerShell Summit Europe 2014 is now open. Follow the links under Events diff --git a/content/articles/2014-07-30-omaha-powershell-user-group-meeting-notesvideo.md b/content/articles/2014-07-30-omaha-powershell-user-group-meeting-notesvideo.md deleted file mode 100644 index 7085b8434..000000000 --- a/content/articles/2014-07-30-omaha-powershell-user-group-meeting-notesvideo.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Omaha PowerShell User Group Meeting Notes/Video -authors: - - Jacob Benson -date: "2014-07-30T14:31:57+00:00" -aliases: - - /2014/07/omaha-powershell-user-group-meeting-notesvideo/ ---- - -The first Omaha PowerShell User Group Meeting is in the books!  We had a great turnout with 26 people showing up last night. -The video Don Jones made for us is available on YouTube [here][1]. -Our next meeting will take place on August 26th with PowerShell MVP Bartek Bielawski doing the presentation on either Pre-Param Scriptology or PowerShell and OMI.  We will also have a short Scripting Game/Contest of some kind.  Stay tuned for the event sign up which should be going out soon. -If you would like to speak about PowerShell here is a list of some topics people have expressed interest in learning more about: -PowerShell Security/InfoSec -Desired State Configuration -OMI Interface w/PowerShell -Workflows/SMA -PowerCLI/VMWare -.NET Methods/Classes/Underneath/Exploration -OneGet/Chocolaty/Nuget -TFS/PowerShell Integration -PowerShell Formatting/Export Options -PowerShell Basics/PowerShell 101/Why PowerShell -Finally, if you have any ideas for things we could do for the Scripting Games/Contest please send them to omahapsug@gmail.com - - [1]: https://www.youtube.com/watch?v=NtAcl64oHH4&feature=youtu.be diff --git a/content/articles/2014-08-18-omaha-powershell-user-group-meeting-826.md b/content/articles/2014-08-18-omaha-powershell-user-group-meeting-826.md deleted file mode 100644 index f60a81104..000000000 --- a/content/articles/2014-08-18-omaha-powershell-user-group-meeting-826.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Omaha PowerShell User Group Meeting – 8/26 -authors: - - Jacob Benson -date: "2014-08-18T12:36:09+00:00" -aliases: - - /2014/08/omaha-powershell-user-group-meeting-826/ ---- - -The next (and second ever) meeting of the Omaha PowerShell Users Group is taking place next Tuesday, August 26th.  MVP Bartek Bielawski will be talking about OMI on Windows and Linux. -I am having some issues with Lync in our Office 365 account so as soon as that gets straightened out I will be creating the invite for you to sign up, so watch for that! diff --git a/content/articles/2014-08-19-registration-for-august-omaha-powershell-user-group-meeting-is-live.md b/content/articles/2014-08-19-registration-for-august-omaha-powershell-user-group-meeting-is-live.md deleted file mode 100644 index b1189e70f..000000000 --- a/content/articles/2014-08-19-registration-for-august-omaha-powershell-user-group-meeting-is-live.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Registration for August Omaha PowerShell User Group Meeting is Live! -authors: - - Jacob Benson -date: "2014-08-19T13:22:47+00:00" -aliases: - - /2014/08/registration-for-august-omaha-powershell-user-group-meeting-is-live/ ---- - -https://www.eventbrite.com/e/omaha-powershell-users-group-august-meeting-tickets-12703856577 - - - In the second ever meeting of the Omaha PowerShell User Group we will have PowerShell MVP Bartek Bielawski talking about OMI: PowerShell Everywhere: - - - - - CIM cmdlets and CDXML commands are advertised as technology that will enable PowerShell users to manage anything in datacenter. It wouldn’t be possible though without something that we can talk to on the remote end, and that’s were OMI kicks in. In this presentation I will show you how you can manage processes on Linux using OMI and CIM, and how easy it is to create CDXML based commands on top of it. - - - - This meeting (and all future meetings) are for anyone who uses or is interested in PowerShell. - - - This meeting is not limited to people who reside in Omaha.  If you are in the area and want to come, you are more than welcome! diff --git a/content/articles/2014-08-20-philadelphia-meeting-september-4th-2014.md b/content/articles/2014-08-20-philadelphia-meeting-september-4th-2014.md deleted file mode 100644 index e0c12c41a..000000000 --- a/content/articles/2014-08-20-philadelphia-meeting-september-4th-2014.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Philadelphia Meeting – September 4th 2014 -authors: - - John Mello -date: "2014-08-21T03:59:22+00:00" -aliases: - - /2014/08/philadelphia-meeting-september-4th-2014/ ---- - -Join us Thursday, September 4th where [Jan Egil RIng][1] will be presenting a talk on **Get Started with Windows PowerShell Desired State Configuration** -Jan will explain how to use Windows PowerShell Desired State Configuration (DSC), which was introduced in Windows PowerShell 4.0, to configure your environment. The purpose of DSC is to provide Deployment, Configuration and Compliance capabilities for Windows resources such as a files, services, roles and features, users, groups and anything that can be managed from PowerShell by using custom resources such as a script. During his talk you will - - * Learn how to use the configuration keyword to define configurations for different resources. - * Learn the two different configuration modes - Pull and Push - and how to configure them. - * See several demos on how DSC can be leveraged in the real world - -**More about Jan:** -Jan Egil Ring works as a Lead Architect on the Infrastructure Team at Crayon, Norway. He mainly works with Microsoft server-products, and has a strong passion for Windows PowerShell. In addition to being a consultant, he is a Microsoft Certified Trainer. He has obtained several certifications such as MCSE: Server Infrastructure and MCSE: Private Cloud. He has a strong passion for Windows PowerShell, and regularly writes articles for PowerShell Magazine, the Crayon Services blog and the Norwegian TechNet blog. He is also a multiple-year recipient of the Microsoft Most Valuable Professional Award for his contributions in the Windows PowerShell technical community. -You can follow Jan on [Twitter][2], [LinkedIn][3], or subscribe to his [blog][1]. -Please [register](http://phillyposh.eventbrite.com/) if you plan to attend in person or online. The meeting URL to join us remotely will be included in your Eventbrite registration confirmation. -[![Eventbrite - PhillyPoSH September 4th 2014](https://www.eventbrite.com/custombutton?eid=12733862325)](http://www.eventbrite.com/e/phillyposh-september-4th-2014-tickets-12733862325?ref=ebtnebregn) - - [1]: http://blog.powershell.no/ - [2]: http://twitter.com/janegilring - [3]: http://www.linkedin.com/pub/8/290/a26 diff --git a/content/articles/2014-08-26-denverpsug-keith-hill-presenting.md b/content/articles/2014-08-26-denverpsug-keith-hill-presenting.md deleted file mode 100644 index 537ed71a1..000000000 --- a/content/articles/2014-08-26-denverpsug-keith-hill-presenting.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: DenverPSUG – Keith Hill Presenting -authors: - - JasonMorgan -date: "2014-08-26T15:32:29+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/08/denverpsug-keith-hill-presenting/ ---- - -Hello everyone, -The Denver PowerShell User Group will be meeting again on September 4th and we will have [Keith Hill][1] presenting. Keith has published an ebook, is a repeat Microsoft MVP, and has been heavily involved in writing and maintaining the PowerShell Community Extensions. -You can find more information on the event as well as RSVP here: - - - - - -### - Keith Hill - Effective PowerShell - - - - - - Thursday, Sep 4, 2014, 7:00 PM - - - - - - -899 Logan st - - -Suite 210 Denver, CO - - - - - - - -8 PowerShell People Went - - - - - - - - - ![](https://secure.meetupstatic.com/photos/member/6/8/3/2/thumb_269906674.jpeg) - - - - - - ![](https://secure.meetupstatic.com/photos/member/b/a/4/d/thumb_11027693.jpeg) - - - - - - ![](https://secure.meetupstatic.com/photos/member/c/0/9/6/thumb_219409302.jpeg) - - - - - - ![](https://secure.meetupstatic.com/photos/member/3/6/3/0/thumb_71293872.jpeg) - - - - - - ![](https://secure.meetupstatic.com/photos/member/6/6/b/e/thumb_206426302.jpeg) - - - - - - ![](https://secure.meetupstatic.com/photos/member/b/c/3/6/thumb_222648182.jpeg) - - - - - - ![](https://secure.meetupstatic.com/photos/member/6/f/4/thumb_8401780.jpeg) - - - - - - - - - PowerShell MVP Keith Hill, http://rkeithhill.wordpress.com/, will be giving a talk on effective PowerShell.  It's an excellent session for anyone but it should work really well for those just getting started with PowerShell.  Also a great talk for more intermediate and advanced users. - - - - - - - - - [**Check out this Meetup →**](https://www.meetup.com/Denver-PowerShell-User-Group/events/199909982/) - - - - - - [1]: http://rkeithhill.wordpress.com/ diff --git a/content/articles/2014-08-28-european-summit-deadline-approaching.md b/content/articles/2014-08-28-european-summit-deadline-approaching.md deleted file mode 100644 index 916de3321..000000000 --- a/content/articles/2014-08-28-european-summit-deadline-approaching.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: European Summit deadline approaching -authors: - - Richard Siddaway -date: "2014-08-28T17:23:53+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2014/08/european-summit-deadline-approaching/ ---- - -There are just over two weeks left for you to register for the European PowerShell Summit. At the moment we are still short of the number that would enable us to repeat a European Summit in 2015. We had a lot of comments from people stating they wanted a Summit in Europe. Now is the time to step up and support that idea. -Hope to see you there diff --git a/content/articles/2014-09-02-powershell-summit-europe-2014-prepare-for-the-dsc-hackathon.md b/content/articles/2014-09-02-powershell-summit-europe-2014-prepare-for-the-dsc-hackathon.md deleted file mode 100644 index e10a455f6..000000000 --- a/content/articles/2014-09-02-powershell-summit-europe-2014-prepare-for-the-dsc-hackathon.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "PowerShell Summit Europe 2014: Prepare for the DSC Hackathon" -authors: - - Don Jones -date: "2014-09-02T22:54:16+00:00" -categories: - - PowerShell Summit -aliases: - - /2014/09/powershell-summit-europe-2014-prepare-for-the-dsc-hackathon/ ---- - -We're hoping that everyone attending the PowerShell Summit Europe 2014 will join our Monday evening **DSC Hackathon, **where we'll become "product team members for a night" and try to code up some DSC Resources from the team's own internal wish list! -We'll provide a cash bar as well as finger food for our on-site attendees... but you're welcome to participate remotely, too! Sometime on September 29th, watch PowerShell.org for a posting that includes the challenges. Choose your challenge, and follow the blog post instructions to submit them. We'll also include details for participating live via IRC and other chat mechanisms, and we may be able to do a live room-cast via Lync or something. -There are no winners and no losers - only the _entire community _wins, because completed entries will be added to the PowerShell.org GitHub repo and made available to the world, for free. But, coders who complete a resource _will_ receive public recognition, both here on PowerShell.org and in some other very visible venues! -Here's what you'll need to participate: - - * A laptop with a charged battery and PowerShell 4.0 installed. We won't be able to provide power, so make sure you can run 1-2 hours unplugged. - * Ideally, a virtual machine running Win2012R2 that is configured as a domain controller. If your laptop has limited resources, install the full server GUI on that and code right on it - it's the domain controller functionality you'll want. - * Whatever editing tools you like apart from the ISE. - * Beforehand, familiarize yourself with "The DSC Book." - * Have the [full DSC Resource Kit installed][1]. In many cases, you'll want to refer to existing resources to see how they do things. At a minimum, the xActiveDirectory module is a good one to have. - -Apart from that - stay tuned! - - [1]: http://gallery.technet.microsoft.com/scriptcenter/DSC-Resource-Kit-All-c449312d diff --git a/content/articles/2014-09-06-last-call-for-the-european-powershell-summit-2014.md b/content/articles/2014-09-06-last-call-for-the-european-powershell-summit-2014.md deleted file mode 100644 index 6e9e470c4..000000000 --- a/content/articles/2014-09-06-last-call-for-the-european-powershell-summit-2014.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: LAST CALL for the European PowerShell Summit 2014 -authors: - - Richard Siddaway -date: "2014-09-06T08:50:32+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2014/09/last-call-for-the-european-powershell-summit-2014/ ---- - -This is the **last call** for attendee registration for the European PowerShell Summit 2014. -The Summit is in Amsterdam - 29 September to 1 October 2014. Details from the events page https://powershell.org/community-events/summit/. -Due to a change in circumstances beyond our control **we have to close public registration on 10 September 2014**. -If you contact us by 10 September and ask to be able to perform a funds transfer rather than paying on line you have until 15 September 2014 to complete that transaction. No monies or registrations will be accepted after 15 September. We will not accept any new request for paying by money transfer after 10 September. -Apologies for the change in dates (the web site states registration is open until 15 September) but our hands have been forced on this. -There are still a number of places available so please register quickly if you want to attend. The more attendees we have the better chance we have of staging a European PowerShell Summit in 2015. diff --git a/content/articles/2014-09-07-phillyposh-09042014-meeting-summary-and-presentation-materials.md b/content/articles/2014-09-07-phillyposh-09042014-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 0505c44cb..000000000 --- a/content/articles/2014-09-07-phillyposh-09042014-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: PhillyPoSH 09/04/2014 meeting summary and presentation materials -authors: - - John Mello -date: "2014-09-08T02:39:58+00:00" -aliases: - - /2014/09/phillyposh-09042014-meeting-summary-and-presentation-materials/ ---- - -* [ -Jan Egil Ring -][1] gave a presentation entitled “Get Started with Windows PowerShell Desired State Configuration”. During his talked Jan went over a series of demos explaining how to use the configuration keyword to define configurations for different resources along with the different configuration modes. A copy of his demo scripts and presentation are available [here][2]. - * A [ -recording of this meeting - ][3]has been posted to our [ -YouTube channel -][4] - - [1]: http://blog.powershell.no/ - [2]: https://onedrive.live.com/?cid=4e672563938ed1e2&id=4E672563938ED1E2%2132074&ithint=folder,&authkey=!AAKDqB2auYF3L9w - [3]: https://www.youtube.com/watch?v=BeStZxknsCM&feature=youtu.be - [4]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014-09-08-powershell-v5-class-support.md b/content/articles/2014-09-08-powershell-v5-class-support.md deleted file mode 100644 index d040c02d2..000000000 --- a/content/articles/2014-09-08-powershell-v5-class-support.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "PowerShell v5: Class Support" -authors: - - Don Jones -date: "2014-09-08T14:14:38+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -aliases: - - /2014/09/powershell-v5-class-support/ ---- - -_This post is based on the September 2014 preview release of WMF 5.0. This is pre-release software, so this information may change._ -One of the banner new features in PowerShell v5 is support for real live .NET Framework class creation in Windows PowerShell. The WMF 5.0 download's release notes has some good examples of what classes look  like, but I wanted to briefly set some expectations for the feature, based on my own early experiences. -The primary use case for classes, at this point, is for DSC resources. Rather than creating a special PowerShell module that has specially named functions, live in a specially named folder, and work in a special way - that's a lot of special, which means a lot of room for error - classes provide a more declarative way of creating DSC resources. -But we're a bit ahead of ourselves. What's a _class_? -In object-oriented programming, a _class_ is a hunk of code that provides a specific interface. Everything in the .NET Framework is a class. When you run Get-Process in PowerShell, for example, you are returning objects of the type System.Diagnostics.Process - or, in other languages, objects _of the class_ System.Diagnostics.Process. Each process is an _instance_ of the class. The class describes all the standardized things that a process can show you (like its name or ID), or that it can do (like terminate). Programmers build the functionality into the class itself. -Classes can have _static_ properties and methods - these are hunks of code that don't require an actual instance of a process. For example, you can start a process without having a process in the first place. The System.Math class in .NET has lots of static members - the static property Pi, for example, contains the numeric value of pi to a certain number of decimal places. The static Abs() method returns the absolute value of a number. -PowerShell classes are designed to provide similar functionality. The trick with PowerShell classes, at least at this stage of their development, is that they don't add their type name to any kind of global namespace. That is, let's say you write a class named My.Cool.Thing, and you save it into a script module named MyCoolThing.psm1. You can't just go into the shell and run **New-Object -TypeName My.Cool.Thing** to create an instance of the class, because there's nothing in PowerShell (yet) that knows to go look for your script module to find the class. That'll likely change in a future release, but for right now it means classes are kind of limited. -The basic rule is that you can only use a class _within the same module that contains the class. _That is, the class can only be "seen" from within the module. So, your MyCoolThing.psm1 module might define a class, and then might also define several commands (functions) that use the class - that's legal, and it will work. You still can't use New-Object; instead, you'd instantiate your class by using something like **ClassName::new()**, calling the static New() method of the class to instantiate it. I expect New-Object will get "hooked up" at some point, but it might not be until some future version of PowerShell. -Anyway, back to DSC. -DSC is a bit unique, because normally _you_ don't load resource modules; the Local Configuration Manager loads them. When you build a DSC resource class, you're forced to provide three methods: Get(), Set(), and Test(). The LCM loads your module, instantiates the class, and then calls the three methods as needed. DSC resources built in this fashion can live in a plain old module .PSM1 file - there's no need to create a DSCResources subfolder, no need to have an empty "root" module, or any of that. So it's a more elegant solution all around. Aside from some structural differences, you code them the same as you always have. v5 still supports the old-style resources, for backward compatibility, but class-based resources are the "way forward." I expect Microsoft will eventually refactor the DSC Resource Kit to be class-based resources, as soon as they get a minute and as soon as v5 is widely adopted. -So most of the "wiring" behind classes has, to this point, been designed to support that DSC use case. In other words, of all the things a PowerShell class will need to do, the team has _so far_ focused mainly on those things that impact DSC. The rest will come later - the release notes use the phrase, "...in this release" a lot, meaning the team understands where the current weaknesses are. "This release" in some cases may simply mean _this current preview release, _meaning they're targeting more features for v5's final release; in other cases, more features will have to wait for v6 (or whatever) or a later version of PowerShell. -So there's a little rambling on classes and what's presently in PowerShell v5. If you haven't already downloaded the preview and started playing with it, you should; _not in production, though. _Keep it in a test VM for the time being. diff --git a/content/articles/2014-09-09-omaha-powershell-user-group-august-meeting-materials.md b/content/articles/2014-09-09-omaha-powershell-user-group-august-meeting-materials.md deleted file mode 100644 index e82ef6e8f..000000000 --- a/content/articles/2014-09-09-omaha-powershell-user-group-august-meeting-materials.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Omaha PowerShell User Group August Meeting Materials -authors: - - Jacob Benson -date: "2014-09-09T19:25:33+00:00" -aliases: - - /2014/09/omaha-powershell-user-group-august-meeting-materials/ ---- - -In August Bartek Bielawski presented on OMI, PowerShell, Linux using PowerShell and the power of Sparkle Ponies.  His presentation notes and code can be found here:  https://onedrive.live.com/?cid=4BFE4A6675A48C91&id=4BFE4A6675A48C91%21115 diff --git a/content/articles/2014-09-09-powershell-v5-whats-new-in-dsc.md b/content/articles/2014-09-09-powershell-v5-whats-new-in-dsc.md deleted file mode 100644 index 08de1a44d..000000000 --- a/content/articles/2014-09-09-powershell-v5-whats-new-in-dsc.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "PowerShell v5: What's New in DSC" -authors: - - Don Jones -date: "2014-09-09T17:11:57+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/09/powershell-v5-whats-new-in-dsc/ ---- - -When Desired State Configuration (DSC) came out - gosh, just about a year ago - I kept telling people that there was more to come. And a lot of it is now just around the corner in PowerShell v5. -_This article is written to the September 2014 preview release - things may change for the final release._ -A major set of changes in DSC is a much more detailed and granular configuration of the Local Configuration Manager (LCM), the local "agent" that makes DSC work on the target node. This new level of configuration really shows you where Microsoft's thinking is. -For example, a single target node can be configured _to pull configurations from multiple pull servers. _That doesn't necessarily mean separate _machines, _as a single IIS instance can host multiple websites, but it means you're no longer limited to one MOF per computer. -Yes, I said that. The LCM can now _pull_ (but not have pushed to it) _partial configurations. _Each partial configuration is a MOF, but the understanding is that there can be more than one. There's still no dynamic evaluation of _which_ MOFs will be pulled; you have to specify them all in the LCM configuration, but now you can break a machine's total configuration into multiple bits. Each partial configuration is given a _source_, which is a pull server. -Each partial configuration can be given exclusivity over certain resources. This helps avoid overlap. For example, you might decided that Partial Config A has exclusive control over all xIPAddress settings, meaning those settings from _any other_ partial config wouldn't work. Partial configurations can also depend on each other, so that (for example), Partial Config B won't even run until Partial Config A is complete. -The LCM can also have a separate server configured for web- or file-based resource repositories, meaning those can be separated from the pull server endpoint. -What used to be called the "compliance server" is now simply the _reporting server_ - we mentioned in "The DSC Book" that the name of this would likely change. It's now a distinct configuration item, meaning _even a node in Push mode can report its status to the reporting server!_ -New global synchronization capabilities also exist. A node's configuration can be made dependent on _a configuration item from another node. _Meaning, Node "A" won't try to configure until Node "B" completes certain items first. Communications is all via WS-MAN and CIM. -A new **Get-DscConfigurationStatus** returns a high-level status for a node - similar to what the reporting server would collect - and an amazing new **Compare-DscConfiguration** can now accept a configuration and tell you _where a given node differs. _This is a big deal, and something a lot of folks wanted in PowerShell v4. There's also an **Update-DscConfiguration, **which forces a node to evaluate its DSC stuff right away. -DSC is quickly coming of age. In less than a year, we've seen (so far) 6 releases of additional resources, and now with PowerShell v5 we're seeing a number of important enhancements and evolutions in the core technology. Many of the things that frustrated folks initially are now taken care of. diff --git a/content/articles/2014-09-09-september-omaha-powershell-user-group-registration-is-live.md b/content/articles/2014-09-09-september-omaha-powershell-user-group-registration-is-live.md deleted file mode 100644 index 6d2ac045c..000000000 --- a/content/articles/2014-09-09-september-omaha-powershell-user-group-registration-is-live.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: September Omaha PowerShell User Group Registration is Live! -authors: - - Jacob Benson -date: "2014-09-09T19:52:57+00:00" -aliases: - - /2014/09/september-omaha-powershell-user-group-registration-is-live/ ---- - -This month PowerShell MVP Trevor Sullivan will be presenting on using Windows Azure with PowerShell. Additionally you will want to bring your laptops (or favorite device to use PowerShell on) as we will have a little scripting challenge involving PowerShell, Credentials and Security. Also, my girlfriend has promised to make cookies for everyone! - - - Trevor Sullivan is an IT professional and a Microsoft Windows PowerShell MVP who has been in the field since early 2004. His focus has been on using various enterprise tools within the Microsoft platform to provide business value through positive end user impact. - - - [You can register here](https://www.eventbrite.com/e/omaha-powershell-user-group-september-meeting-tickets-13033167555) diff --git a/content/articles/2014-09-10-powershell-v5-misc-goodness-including-auditing.md b/content/articles/2014-09-10-powershell-v5-misc-goodness-including-auditing.md deleted file mode 100644 index 468fe07a5..000000000 --- a/content/articles/2014-09-10-powershell-v5-misc-goodness-including-auditing.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "PowerShell v5: Misc Goodness (including Auditing)" -authors: - - Don Jones -date: "2014-09-10T14:49:04+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/09/powershell-v5-misc-goodness-including-auditing/ ---- - -Aside from classes and new DSC features, which I've already written about, there are a number of less-headline, but still-very-awesome, new capabilities. -_This article is based on the September 2014 preview release of WMF 5.0. Information is highly subject to change._ -First up is the **ability to automatically create PowerShell cmdlets from an OData endpoint. **Huh? OData is a kind of web service (basically); PowerShell gains the ability to look at the endpoint and construct a set of proxy cmdlets that let you interact with the endpoint more naturally. This is spiritually similar to what PowerShell can already do for a SOAP web service endpoint. -Next are some 7-years-overdue cmdlets for **managing ZIP files**: Compress-Archive and Expand-Archive. Finally. These use underlying .NET Framework ZIP functionality (I think), which has had _some_ compatibility problems in the past, so we'll see how these hold up. But they should be the missing link to letting you do everything DSC-related right in PowerShell, since you can now ZIP up your custom resources for deployment via pull server. -**Auditing gets a huge win**, and this is really more of a headline feature than people think. For one, the ISE now supports transcript creation. Yay! You can also "nest" transcripts, meaning you can have one running, and then start a second one to cover only a portion of time. Closing the second one lets the first remain running. You can also specify a central transcript directory, which is useful when you want to collect these things into a central folder for reporting. For example, you should now be able to set up Remoting endpoints that automatically kick off a transcript when someone connects, and saves them to that central location. -**More auditing** comes in the form of Group Policy settings. You've always been able to log the fact that certain commands were run (did you know that?), but now you can enable detailed script tracing that logs a crapload of detail to the PowerShell operational log (which can, like any other event log, be forwarded to another server). You get the complete details of every script block executed, even if it creates another script block. Again, this is set up in Group Policy - check out the WMF 5.0 release notes for the location. -**Ed Snowden gets a face slap** with new Cryptographic Message Syntax (CMS) cmdlets, including Get-CmsMessage, Protect-CmsMessage, and Unprotect-CmsMessage. These use PKI to encrypt data. By the way, **if your organization doesn't already have an internal PKI, WTF are you waiting for, you're ten years behind the curve, man. **PKI becomes more important to Windows environments every single day, and you need to get with the program. -There's also a new **fun feature for extracting content from strings. **This system uses some Microsoft Research functionality called FlashExtract. Essentially, you give it examples of what your data looks like, and then point it to a big string (like a text file) full of data. It can extract all the data pieces based on your example. It's early days for this technology, but it's kind of _awesome_ to see the PowerShell team giving us an easy way to play with it. -Because WMF 5.0 **introduces PowerShellGet**,** **it now includes commands to add PowerShellGet repositories. That means you can stand up your own repo, host your modules there, and install modules by simply running Install-Module (or find them using Find-Module). Tres awesome! We don't yet have technical details on what the heck a PowerShellGet repository actually looks like, but I'm sure that'll crop up. -ARE YOU PLAYING WITH WMF 5.0 ON A NON-PRODUCTION VM YET? YOU SHOULD BE. Times are changing and you gotta keep up! diff --git a/content/articles/2014-09-14-philadelphia-meeting-october-2nd-2014.md b/content/articles/2014-09-14-philadelphia-meeting-october-2nd-2014.md deleted file mode 100644 index f2fab76a3..000000000 --- a/content/articles/2014-09-14-philadelphia-meeting-october-2nd-2014.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Philadelphia Meeting – October 2nd 2014 -authors: - - John Mello -date: "2014-09-15T00:59:08+00:00" -aliases: - - /2014/09/philadelphia-meeting-october-2nd-2014/ ---- - -Join us Thursday, October 2nd where -[ - -John Mello - -](http://mellositmusings.com/) -will be presenting a talk on  - -The different custom object creation methods and their performance tradeoffs. - -Followed by -[ - -TJ Turner - -](http://techguytj.com/bio/) -will give a talk entitled - -Intro to basic run space pools - -.  - - - -Please [ -register -][1] if you plan to attend in person or online. The meeting URL to join us remotely will be included in your Eventbrite registration confirmation. -[![Eventbrite - PhillyPoSH October 2th 2014](https://www.eventbrite.com/custombutton?eid=13119002289)](http://www.eventbrite.com/e/phillyposh-october-2th-2014-tickets-13119002289?ref=ebtnebregn) -We are also giving [Meetup][2] a try for the next 6th month so feel free to register there as well. - - - [1]: http://phillyposh.eventbrite.com/ "phillyposh on eventbrite" - [2]: http://meetu.ps/2xTtT0 diff --git a/content/articles/2014-09-23-instructions-for-powershell-summit-north-america-2015-registration.md b/content/articles/2014-09-23-instructions-for-powershell-summit-north-america-2015-registration.md deleted file mode 100644 index e6ffcc5e7..000000000 --- a/content/articles/2014-09-23-instructions-for-powershell-summit-north-america-2015-registration.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Instructions for PowerShell Summit North America 2015 Registration -authors: - - Don Jones -date: "2014-09-23T19:28:11+00:00" -categories: - - PowerShell Summit -aliases: - - /2014/09/instructions-for-powershell-summit-north-america-2015-registration/ ---- - -If you're planning to attend PowerShell Summit North America 2015, to be held at the end of April 2015 in Charlotte, North Carolina, you should read the following important information: - - * The registration site will be open from 30 October 2014 to 30 March 2015. There is about a 30-day window from the end of registration to the event itself. There are no exceptions to this cutoff. - * You should read the **[extremely important information][1]** about registering. It also contains links to the agenda and to the registration site. - * The agenda will be available in mid-October 2014. - * We will only have about 90 seats available due to the size of the venue. You will probably need to plan to register early, because we don't have a magical way of making the building bigger to accommodate "just one more person." - * We will not be holding seats for later registrations. Everything becomes available on 30 October 2014. We've done the "phased release" before and it was a major PITA. - * Yes, we will be recording all sessions and posting them on the PowerShell.org YouTube channel. We will not be live-streaming because the facilities don't exist to do so. Recordings will include slides/demos and a room microphone; this will not be Channel 9-quality, but it should get the job done. Or you could, you know, show up at the live event. - -**If you are planning to have someone in your organization register and pay on your behalf, it is crucial that they do so  -using your e-mail address -, not theirs.** Otherwise, we may not be able to admit you to the event. ** -This is a big deal. - **Please don't mess it up. -** -Please help us get the word out. -** This is entirely a community event, run entirely by volunteers who are paying their own way to the event also. We have zero marketing and advertising budget, because we try to keep the overall costs as low as humanly possible. Set reminders to tweet, Facebook, etc. once a month and help us let the world know about the event. - - [1]: https://powershell.org/community-events/summit/ diff --git a/content/articles/2014-09-23-powershell-summit-europe-2014-final-agenda.md b/content/articles/2014-09-23-powershell-summit-europe-2014-final-agenda.md deleted file mode 100644 index 44bfc7fd9..000000000 --- a/content/articles/2014-09-23-powershell-summit-europe-2014-final-agenda.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: PowerShell Summit Europe 2014 – final agenda -authors: - - Richard Siddaway -date: "2014-09-23T20:12:43+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2014/09/powershell-summit-europe-2014-final-agenda/ ---- - -The final agenda for the PowerShell Summit is available at http://eventmgr.azurewebsites.net/event/home/PSEU14 -Circumstances beyond the control of PowerShell.org have meant we’ve had to make a few changes to the agenda from that previously published. -Look forward to seeing you all in Amsterdam. diff --git a/content/articles/2014-09-28-join-the-dsc-hackathon-at-powershell-summit-2014-europe.md b/content/articles/2014-09-28-join-the-dsc-hackathon-at-powershell-summit-2014-europe.md deleted file mode 100644 index 615a3de89..000000000 --- a/content/articles/2014-09-28-join-the-dsc-hackathon-at-powershell-summit-2014-europe.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Join the DSC Hackathon at PowerShell Summit 2014 Europe -authors: - - Don Jones -date: "2014-09-28T14:08:36+00:00" -categories: - - PowerShell Summit -aliases: - - /2014/09/join-the-dsc-hackathon-at-powershell-summit-2014-europe/ ---- - -On Monday night (Amsterdam time, September 29th), we'll be holding the first DSC Hackathon at PowerShell Summit Europe 2014. Attached are the scenarios we'll be asking participants to select from. We'll ask everyone to work in small groups, pick one scenario, and try to produce a custom DSC resource that solves the problem. -Many of these are from Microsoft's own internal "wish list" of resources that they don't yet have anyone assigned to. -You're welcome to participate, even if you're not present at the Summit. You _will _need to operate in Amsterdam time; we're only accepting submissions during that time (from about 6pm local time). If you'd like to participate, you'll need a Twitter account to begin with. When the Hackathon starts, drop a tweet that includes the hash tag #DSCHackathon, as well as the scenario you'd like to work on. We'll respond and connect you with a group that's working on that scenario. From there, the group will let you know how they'd like to communicate - possibly a Skype chat window, possibly an IRC chat, it'll be up to them. -In the event that Internet connectivity sucks, we'll simply do our best, and may direct remote users to work on their own. But, if you monitor the #DSCHackathon tag, you may be able to find other remote users to team up with. -There are no prizes - we're doing this for the good of the community. However, every team who hands in a working resource will get public recognition in the PowerShell team blog, on PowerShell.org, and wherever else we can manage to mention you :). -As a reminder, you should plan to have Windows PowerShell v4 or later on your laptop in order to participate. We don't anticipate going longer than 2-3 hours, and if you're on-site plan to use battery power for the entire period. Ideally, you'll want a server VM or two so that you can test the scenarios... which are attached herewith. And it's fine to get an early start on these, if you like. -Download: [DSC Hackathon][1] Scenarios - - [1]: https://powershell.org/wp-content/uploads/2014/09/DSC-Hackathon.docx diff --git a/content/articles/2014-09-30-when-will-there-be-a-powershell-summit-in-____.md b/content/articles/2014-09-30-when-will-there-be-a-powershell-summit-in-____.md deleted file mode 100644 index 62bb9b1ec..000000000 --- a/content/articles/2014-09-30-when-will-there-be-a-powershell-summit-in-____.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: When Will There be a PowerShell Summit in ____? -authors: - - Don Jones -date: "2014-09-30T11:18:11+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2014/09/when-will-there-be-a-powershell-summit-in-____/ ---- - -As we move into the middle of PowerShell Summit Europe 2014, we have a lot of folks asking, "when will you hold a Summit in ____" (insert the name of your favorite country). -Right now, PowerShell.org is committed to organizing both North American and European events, one per year, while there is audience demand for them. Both events will shift locations from year to year, and the location choice is driven by a number of criteria - mainly financial ones. -But we're all volunteers here. Each event requires upwards of 240 man-hours to put together, and an up-front financial commitment of up to $25,000. We're getting to the point where the organization can front that money, but it's been on personal credit cards to this point, paid back only once the event is complete. So... it's a big deal. Strictly from a time perspective, we just don't have enough to organize more events elsewhere in the world. -However, we continue to encourage folks to organize their own events. We've even come up with a brand name to get you started: PowerShell Forum. The idea is for those to be smaller 2-3 day, regional-level events that we help promote. We'll provide all the advice we can to help get you going, too. We'll put you in touch with the right folks so that if product team participation is an option, you can find out. We hope that a PowerShell Forum "grows up" to one day host a PowerShell Summit - because the organizers and volunteers are in place to let us hold a full Summit without taking on the entire time commitment ourselves. -In any community, if you want something good to come your way, the best way is to do it yourself - rather than asking someone else to bring the good to you. We feel that's particularly true with live events, because _you_ know the local market, the venues, the audience, the customs, the laws, and so on. -So, "when will there be a PowerShell Summit in _____?" The answer is, "when you make it happen." We'd love to help - but you'll have to take the first step. diff --git a/content/articles/2014-10-04-powershell-summit-europe-2014-thank-you.md b/content/articles/2014-10-04-powershell-summit-europe-2014-thank-you.md deleted file mode 100644 index 7ffdbba34..000000000 --- a/content/articles/2014-10-04-powershell-summit-europe-2014-thank-you.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: PowerShell Summit Europe 2014 – – Thank you -authors: - - Richard Siddaway -date: "2014-10-04T11:17:10+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2014/10/powershell-summit-europe-2014-thank-you/ ---- - -I would like to express a huge thank you to the speakers and attendees at our recent Summit. -The speakers delivered an excellent set of sessions that dived into PowerShell features new and old. -The attendees asked lots of questions, both during and after sessions, which is what we want. This is a Summit not a conference where a speaker rushes in, delivers a talk and rushes out. We wanted a healthy level of discussion and that's what we got. -The feed back we've had has been very positive from both the attendees and speakers. We managed to record practically all of the sessions and those videos as well as the slides and code will be available for download soon. -This year's event in Amsterdam has laid a very solid foundation for the future of the European Summit and our plans are to run a European Summit in 2015. Exact location and dates haven't been decided yet but we will communicate them as soon as we know. diff --git a/content/articles/2014-10-06-the-current-and-future-state-of-the-windows-management-framework.md b/content/articles/2014-10-06-the-current-and-future-state-of-the-windows-management-framework.md deleted file mode 100644 index 364d3bdc9..000000000 --- a/content/articles/2014-10-06-the-current-and-future-state-of-the-windows-management-framework.md +++ /dev/null @@ -1,303 +0,0 @@ ---- -title: The current and future state of the Windows Management Framework -authors: - - Bjorn Houben -date: "2014-10-06T11:04:50+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/10/the-current-and-future-state-of-the-windows-management-framework/ ---- - -At the 2nd of October, [Lee Holmes](http://www.leeholmes.com/) gave a presentation about the current and future state of the Windows Management Framework (WMF) during the [Dutch PowerShell User Group (DuPSUG)](http://www.dupsug.com/?page_id=914) at the Microsoft headquarters in The Netherlands. -The slide decks and recorded videos will be made available soon, but this is what was discussed: - -**The release cycle of the Windows Management Framework (WMF)** - -Faster incremental releases of preview versions are being released. This rapid development means that companies that need specific new functionalities to tackle current problems they're having, don't have to wait as long as they had to in the past. -Everyone should keep in mind that documentation for preview versions can be more limited, but should still read the [release notes ](http://www.microsoft.com/en-us/download/details.aspx?id=44070)carefully. They contain descriptions of some of the improvements that are discussed in this blog post, but also cover other things that aren't discussed here. Also be sure to take a look at [What's New in Windows PowerShell](http://technet.microsoft.com/en-us/library/hh857339.aspx) at TechNet. -A request from the audience was to include more helpful real-life examples until documentation is fully up-to-date. - - -**Desired State Configuration (DSC) partial/split configurations** - -With DSC partial/split configuration it is possible to combine multiple separate DSC configurations to a single desired state. This could be useful when a company has different people or departments that are responsible for a specific part of the configuration (by example Windows, database, applications). - - -**OneGet** - -OneGet is a Package Manager Manager (it manages package managers). It enables companies to find, get, install and uninstall packages from both internal and public sources. Public repositories can contain harmful files and should be treated accordingly. -Besides the OneGet module included in the Windows Management Framework Preview, updated versions are continuously being uploaded to [https://github.com/OneGet/oneget](https://github.com/OneGet/oneget) by Microsoft. These can include bug fixes and new functionality like support for more provider types. -While in the past it seemed that Nuget was required, during the [PowerShell Summit](https://powershell.org/community-events/summit/) it was demonstrated that a file share can be used as well. -From the audience a question was raised whether BITS (Background Intelligent Transfer Service) could be used. This is currently not the case and there were also no plans yet to implement it. - - -**PowerShellGet** - -PowerShellGet is a module manager which should make it easier to find the many great modules that are already available, but are not very discoverable because they're fragmented on numerous websites across the Internet. -Microsoft is currently hosting a gallery of modules. The modules that are available in there are currently being controlled by Microsoft, but this might change in the future. -It is possible to create an internal module source and the save location for modules can be specified as well. - - -**PSReadLine** - -PSReadLine is a bash inspired readline implementation for PowerShell to improve the command line editing experience in the PowerShell.exe console. It includes syntax coloring and CTRL+C and CTRL+V support, for more information about other improvements, view their [website](https://github.com/lzybkr/PSReadLine). -PSReadLine is one of the modules that can be installed using PowerShellGet: - - -Find-Module - - -PsReadLine - - -| - - -Install-Module - - - - - -**Security** - - - * Always be careful when running scripts that include Invoke-Expression or its alias iex because it might run harmful code. - * For a non harmful example, take a look at this [blog post](http://www.leeholmes.com/blog/2011/04/01/powershell-and-html5/) by Lee Holmes. - * Many people in the security community are adopting PowerShell. - * PowerShell is done in memory and is therefore volatile. To improve security the following enhancements were introduced: - * Transcript improvements - * Transcript support was added to the engine so it can used everywhere, also in the Integrated Scripting Environment (ISE). - * A transcript file name automatically includes the computer name. - * Transcript logging can be enforced to be redirected to another system. - * Transcription can be enforced by default. - * Group Policy - * An ADMX file is currently not available to configure it on all platforms, but it can be found in the technical preview versions of Windows 10 and Windows Server under: Administrative Templates -> Windows Components -> Windows PowerShell - * More advanced Scriptblock logging - * Enable ScriptBlockLogging through GPO (in later Windows versions) or by registry by setting EnableScriptBlockLogging to 1 (REG_DWORD) in: HKLM:\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging - * The additional logging will show you what code was run and can be found in event viewer under Applications and Services Logs\Microsoft\Windows\PowerShell\Operational. - * Scriptblocks can be split across multiple event log entries due to size limitations. - * Using Get-WinEvent -FilterHashTable it is possible to get related events, extract the information and combine it. - * Since attackers would want to remove these registry settings and clear event logs, consider using Windows Event Forwarding/SCOM ACS to store this information on another server. Also consider enabling cmdlet logging. - * Just Enough Admin (JEA) - * JEA enables organizations to provide operators with only the amount of access required to perform their tasks. - - - -**New and improved functionality and cmdlets** - - -**Manage .zip files using Expand-Archive and Compress-Archive** -.zip files can be managed using Compress-Archive and Expand-Archive. Other archive types like .rar are not currently supported, but this might be added in future versions. - -**New-Item** -It is now not necessary anymore to specify the item type. To create a new item, simply run - - -New-Item - - -foo.txt - - - - -**Get-ItemPropertyValue** -This makes it easier to get the value of a file or registry: - - * - - -Get-ItemPropertyValue - - -$Env:windir - - -\system32\calc.exe - - --name - - -versioninfo - - - * - - -Get-ItemPropertyValue - - --Path - - -HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\ScriptedDiagnostics - - --Name - - -ExecutionPolicy - - - -**Symbolic links support for New-Item, Remove-Item and Get-ChildItem** -Symbolic link files and directories can now be created using: - - * - - - - -New-Item - - --ItemType - -SymbolicLink - --Path - -C:\Temp\MySymLinkFile.txt - --Value - -$pshome - -\profile.ps1 - - - - - - * - - - - -New-Item - - --ItemType - -SymbolicLink - --Path - -C:\Temp\MySymLinkDir - --Value - -$pshome - - - - - -Junctions cannot currently be created, but this might also be added in a later version. - -**Debugging using Enter-PSHostProcess and Exit-PSHostProcess** -Let you debug Windows PowerShell scripts in processes separate from the current process that is running in the Windows PowerShell console (by example long running or looping code). Run Enter-PSHostProcess to enter, or attach to, a specific process ID, and then run Get-Runspace to return the active runspaces within the process. Run Exit-PSHostProcess to detach from the process when you are finished debugging the script within the process. - -**Use Psedit to edit files in a remote session directly in ISE** -Simply open a new PSSession to a remote computer and type PSEdit -. - -**Classes and other user-defined types** - - * The goal is to enable a wider range of use cases, simplify development of Windows PowerShell artifacts (such as DSC resources), and accelerate coverage of management surfaces. - * Classes are useful for structured data. Think by example about custom objects that you need to change afterwards. - * Name of the class and the constructor must be the same. - * Code is case insensitive. - * In classes, variables are lexically scoped (matching braces) instead of dynamically scoped. - * Every return must be explicit. - * Sample code: - - - - - - - -Class - - MyClass - - - -{ - - - - -MyClass - -( - -$int1 - -, - - - -$int2 - -) - - -   { - - - - -"In the constructor" - - -   } - - - - -[int] - -$Property1 - - - - -[DateTime] - -$Property2 - - - - -[int] - -MyHelper - -( - -$param1 - -) - - -   { - - - - -return - - - -42 - - -   }  - - -} diff --git a/content/articles/2014-10-07-powershell-summit-europe-2014-slides-and-code.md b/content/articles/2014-10-07-powershell-summit-europe-2014-slides-and-code.md deleted file mode 100644 index f00976964..000000000 --- a/content/articles/2014-10-07-powershell-summit-europe-2014-slides-and-code.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: PowerShell Summit Europe 2014 – – slides and code -authors: - - Richard Siddaway -date: "2014-10-07T17:49:55+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2014/10/powershell-summit-europe-2014-slides-and-code/ ---- - -All of the slides and demo code the speakers wanted to share are available for your enjoyment at http://1drv.ms/1vMWmtm -I'm currently uploading the videos which is a slow process. I'll post when hat activity is completed. diff --git a/content/articles/2014-10-08-powershell-summit-europe-2014-videos-from-day-1.md b/content/articles/2014-10-08-powershell-summit-europe-2014-videos-from-day-1.md deleted file mode 100644 index dda4dfa99..000000000 --- a/content/articles/2014-10-08-powershell-summit-europe-2014-videos-from-day-1.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: PowerShell Summit Europe 2014 – – videos from day 1 -authors: - - Richard Siddaway -date: "2014-10-09T07:23:31+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2014/10/powershell-summit-europe-2014-videos-from-day-1/ ---- - -The videos from day 1 of the Powershell Summit Europe 2014 are now available on the PowerShell.org youtube channel. The European Summit playlist can be found at - -Uploading of day 2 is in progress and I'll supply notification when complete -Enjoy. diff --git a/content/articles/2014-10-13-phillyposh-10022014-meeting-summary-and-presentation-materials.md b/content/articles/2014-10-13-phillyposh-10022014-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 53e6bac25..000000000 --- a/content/articles/2014-10-13-phillyposh-10022014-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: PhillyPoSH 10/02/2014 meeting summary and presentation materials -authors: - - John Mello -date: "2014-10-14T01:35:26+00:00" -aliases: - - /2014/10/phillyposh-10022014-meeting-summary-and-presentation-materials/ ---- - -* [John Mello][1] gave a presentation entitled "Custom Object Creation". A copy of his demo scripts and presentation are available [here][2] at our [GitHub site][3]. - * [TJ Turner][4] gave a presentation entitled "Runspace Pools". A copy of his demo scripts and presentation are available [here][5] at our [GitHub site][3]. - * A -recording of this meeting - - -has been posted to our [ -YouTube channel -][6] - - [1]: http://mellositmusings.com/about/ - [2]: https://github.com/PhillyPoSH/2014-10/tree/master/Creating%20Custom%20Objects - [3]: https://github.com/PhillyPoSH/ - [4]: http://techguytj.com/bio/ - [5]: https://github.com/PhillyPoSH/2014-10/tree/master/Run%20Space%20Pools - [6]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014-10-14-powershell-summit-europe-2014-all-videos-available.md b/content/articles/2014-10-14-powershell-summit-europe-2014-all-videos-available.md deleted file mode 100644 index 244e93046..000000000 --- a/content/articles/2014-10-14-powershell-summit-europe-2014-all-videos-available.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: PowerShell Summit Europe 2014 – All videos available -authors: - - Richard Siddaway -date: "2014-10-15T07:08:48+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2014/10/powershell-summit-europe-2014-all-videos-available/ ---- - -All of the recordings from the recent PowerShell Summit in Amsterdam are now available through the PowerShell.org channel on youtube. The playlist for the Summit is https://www.youtube.com/playlist?list=PLfeA8kIs7Coehjg9cB6foPjBojLHYQGb_ -Thank you again to the speakers, and attendees, who made for a wonderful first Summit in Europe and more thanks to the people who donated to our appeal to raise funds for the recording equipment. diff --git a/content/articles/2014-10-16-how-to-have-the-powershell-summit-come-to-you.md b/content/articles/2014-10-16-how-to-have-the-powershell-summit-come-to-you.md deleted file mode 100644 index 6bd23b2a2..000000000 --- a/content/articles/2014-10-16-how-to-have-the-powershell-summit-come-to-you.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: How to Have the PowerShell Summit Come to You -authors: - - Don Jones -date: "2014-10-16T18:24:25+00:00" -categories: - - PowerShell Summit -aliases: - - /2014/10/how-to-have-the-powershell-summit-come-to-you/ ---- - -We're **often** asked if we're planning to have a PowerShell Summit in (insert name of town/country/city). The answer is, "no," because we're usually not planning much in advance of whatever's currently on the table. Keep in mind - **we're all volunteers. **We don't have a ton of free time to plan 3 years out! As you'll see in a minute, it's a lot of work. -That said, **you** can play a big role in bringing the Summit to **your** town. How? Simply write a proposal and submit it to us. Use the "Admin" e-mail alias at PowerShell.org. Here's what to include: - - * When you're proposing for. We typically need a proposal roughly 18 months out. The North America event is in April, and the Europe event in September, so you need to plan about a year and a half ahead of those dates. - * A description of the local PowerShell audience. Helping us understand the local business environment, how many Microsoft IT pros are employes, and whether or not there's a local user group, all helps. The more you can do to help us reach out to the locals, the more confident we'll be in planning an event in your area. - * A venue. This is the tough part, because we have a number of pretty strict requirements. Many commercial venues won't talk to a smaller organization more than 6-9 months out, so in talking to a venue you'll have to ask them to estimate pricing based on their current situation; we'll nail down particulars closer-in if we select the venue. We don't need you to guarantee dates; we just need an estimate of how much the venue wants to charge us. - -Our venue requirements are **detailed** and pretty much **non-negotiable**. - - * The venue must be near an international airport - no more than a 30-minute drive. This must be accessible by a major air carrier, such that a flight from Seattle-Tacoma could make it to the venue's airport with no more than one connection. We have to be considerate of the product team's time! - * The venue must be near a sufficient number of affordable, business-class hotels. We **do not** reserve room blocks or guarantee rooms, so if you're talking to a hotel, they may not want to deal with you because of this. - * The venue must offer parking - although we are okay if there are parking fees. - * We must have 2 rooms capable of seating at least 50 people each. That seating can be "theater-style..." - * ...but we must also have a place for at least 100 people to eat lunch. Sometimes, that means a separate room. Other times, it may mean setting the session rooms "classroom style" so people can eat in the session rooms. Switching to "classroom style" still needs to afford seating for 50 people per room, minimum. - * We prefer to buy "all-day" catering packages that include unlimited coffee, a continental breakfast (pastries), buffet lunch, and an afternoon snack. Pricing cannot exceed about $110 per person per day - and that must include taxes, service fees, gratuities, and so on. - * We prefer **not** to guarantee a specific number of people until very close-in. However, most commercial venues require a commitment up front. In that case, we prefer to commit to no more than 50 people - even though we want the flexibility to have more than that. - * If we're paying top dollar for catering, we should get the venue itself for free. That's traditional at most commercial venues. If we're paying for the venue, then our per-person/per-day catering cost should be substantially under our limit. - * We prefer to minimize A/V expenses, but do require an HD projector, screen, and wireless lav mic in each of the two rooms. We'd need pricing on that equipment if it isn't included in the venue pricing. - * The venue needs to have decent Internet. That doesn't necessarily need to be included for free, but it needs to be available. We may purchase 2-4 connections for speakers to use when presenting, so knowing the pricing would be helpful. - * The venue needs to be available for at least one evening event, where we'll likely want a cash bar and some light snacks - we expect to pay extra for the evening food, but not for the venue itself. - -As you can see, it's a tough list, and it's a lot of work for us to find venues. That's one reason we tend to lean toward Microsoft facilities, when they're available, because we get the venue cheaper, the food cheaper, and so on. -You'll also see that our pricing doesn't leave a ton of room for error. At $110/person/day, each attendee costs us $330. With 50 attendees, there's another $130 per person in overhead to pay for speakers' meals. We have about another $130 per person in hard costs like insurance, equipment shipping, and logistics planning. We carve off another $150 per person to help fund PowerShell.org itself, including this website. That's $740 per person in costs - real close to the $800 we charge, which also has to cover VERIFIED EFFECTIVE exam costs and so on. We plan our numbers around a 50-person break-even point because we're incredibly risk-averse - we don't want to have to make up the difference on our personal credit cards, which has almost happened in the past. As you can see, we try to keep our numbers pretty tight - which means a lot of careful planning. -So... if you want to volunteer (it's much appreciated!) and do some local legwork, you're more than welcome to propose your favorite town. We understand that, working 18+ months out, some of the numbers will be estimates - that's fine. Knowing that something is roughly in the right price range is a big start. -We **do** have other operational criteria that can come into play, so just because you propose someplace doesn't mean we're guaranteeing we'll go there - but we'll keep it in mind, even for future years. diff --git a/content/articles/2014-10-25-our-nanowrimo-challenge-write-a-powershell-article.md b/content/articles/2014-10-25-our-nanowrimo-challenge-write-a-powershell-article.md deleted file mode 100644 index 321813fea..000000000 --- a/content/articles/2014-10-25-our-nanowrimo-challenge-write-a-powershell-article.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "Our NaNoWriMo Challenge: Write a PowerShell Article" -authors: - - Don Jones -date: "2014-10-25T16:28:27+00:00" -categories: - - News - - Training - - Tutorials -aliases: - - /2014/10/our-nanowrimo-challenge-write-a-powershell-article/ ---- - -In honor of National Novel Writing Month (NaNoWriMo), I wanted to offer a smaller, and more unique, challenge. -Send me a PowerShell article. -Seriously. My name is **Don J**ones, and this is **PowerShell.org**, so you can probably figure out how to contact me. Send me an article between 800 and 3,000 words (including code) in Microsoft Word format. Don't attach any scripts. Please keep the formatting super-simple: paste code from the PowerShell ISE, and use Word's default styles otherwise. If you must include screen shots, please embed them in the doc, but also include them as a a separate PNG in your e-mail. -You can write about _anything,_ provided it's PowerShell-related._ _What's best? Some challenge that stumped you - and that you eventually solved (and please, tell us how). Something that you think folks could benefit from, or could learn to do better. Even an article that lays out both sides of a particular question, and outlines the pros and cons of each argument. Doesn't matter. What matters is that you _write. _ -I will -personally - commit to reading every single one, and providing you with feedback on your article. When suitable, I'll make some specific suggestions for improving the article. If you then fix it up accordingly, I'll run it by a professional editor_ - and I'll have it published. _In some cases, we'll publish it right here on PowerShell.org. In other cases, I'll submit it to my friends at 1105 Media for their consideration in one of their IT magazines, like _Redmond Magazine_ or _MCPMag.com_. Still others will go into the PowerShell.org TechLetter, which would be a huge help to our editors, who are always hungry for content. -Being able to communicate well is important in all walks of life, but being _willing to share_ is even more important. Think you've got nothing to share? _Wrong. _You have unique experiences that everyone can learn from. You do _not_ need to be an expert in order to have something valuable to share. We would all benefit a lot more if _more_ people shared their experiences and successes - so now it's your turn. -The deadline is November 30th, of course, and I'll work my way through them all as quickly as possible. You're not going to be judged on your grammar or spelling (although do use Word's tools to help those as much as it can). Don't try to write fancy, or overly formal. In fact, just write like you'd talk. Read your piece back to yourself _aloud, _and if it sounds weird, fix it so it doesn't. If it _sounds_ good, it'll _read_ well. -C'mon. Take up the challenge. And tweet folks over to this article, too. Let's make it a thing. My goal is to help at least a few folks because regular bloggers, either here or elsewhere, and my dream is to find maybe a couple of folks who can pick up a full-time column with a magazine or other publication. That'd be awesome. I know you're out there - let's get the party started. diff --git a/content/articles/2014-11-03-charlotte-powershell-user-group-meeting-on-116.md b/content/articles/2014-11-03-charlotte-powershell-user-group-meeting-on-116.md deleted file mode 100644 index a2d58b69e..000000000 --- a/content/articles/2014-11-03-charlotte-powershell-user-group-meeting-on-116.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Charlotte PowerShell User Group meeting on 11/6 -authors: - - Terri Donahue -date: "2014-11-03T19:06:00+00:00" -aliases: - - /2014/11/charlotte-powershell-user-group-meeting-on-116/ ---- - -Shell and Tell is back.. bring your scripts you've been working on and show your PowerShell pride by displaying your scripting prowess.  We'll have food and drinks, so come join the fun! -Everyone is welcome. Please RSVP on the [MeetUp](http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/216116072/) event page so we can plan food accordingly. diff --git a/content/articles/2014-11-24-call-for-presentations-for-powershell-summit-europe-2015.md b/content/articles/2014-11-24-call-for-presentations-for-powershell-summit-europe-2015.md deleted file mode 100644 index b7a6e5461..000000000 --- a/content/articles/2014-11-24-call-for-presentations-for-powershell-summit-europe-2015.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Call for Presentations for PowerShell Summit Europe 2015 -authors: - - Richard Siddaway -date: "2014-11-24T20:02:17+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2014/11/call-for-presentations-for-powershell-summit-europe-2015/ ---- - -The PowerShell Summit is the number one conference where PowerShell enthusiasts gather and learn from each other in fast-paced, knowledge packed presentations. PowerShell experts from all over the world including MVP’s, Guru’s, community leaders and PowerShell team members, will once again join together for a few days in Stockholm, Sweden to discuss and learn about maximizing PowerShell in the workplace. If you want to share your PowerShell expertise or story, then this is your official call to submit presentations for selection! -PowerShell Summit Europe 2015 will be held 14-16 September 2015 in Stockholm, Sweden. - -## Topic Areas – What we are looking for - -We are looking for 45-minute presentations covering a wide aspect of PowerShell expertise. We have two main topic areas that may assist you in building an abstract. -PowerShell Internals – A deep look into the inside workings of PowerShell and practical solutions that are built from them. These presentations are typically more directed to the PowerShell development community that is building extensions and solutions relating to PowerShell. -PowerShell Features Deep Dive – These presentations are a deep look into configuring and working with PowerShell features and capabilities such as Remoting, Desired State Configuration and more. These presentations tend to be more IT Pro focused. -We are open to presentations across the entire ecosystem that has been built around PowerShell; so don’t hesitate to send an abstract for your particular area of expertise. This includes Microsoft platforms and products that have PowerShell-based management tools as well as 3rd parties such as VMware. New topics will be preferred over recycling of older topics – look to see what’s new in PowerShell 5.0 and use the questions on PowerShell.org to spot areas of confusion that could supply a good session for the Summit. - -##  What kind of sessions get selected? - -We’re looking for sessions that go beyond – often way beyond – “beginner.” If you want to see examples of the depth we’re looking for use the recordings on the PowerShell.org Youtube channel from the PowerShell Summit Europe 2014 as a guide. We look for an abstract that’s compelling and makes us salivate to see your session – so spend time writing a punchy abstract! We want sessions that offer real-world usability combined with “wow, nobody talks about THAT” awesomeness. If in doubt aim high. Remember, Summit sessions are recorded, so if you’ve previously presented a topic at a Summit, we’re less likely to choose it for another Summit. We want sessions that are challenging, and that ideally present things that simply aren’t explained or documented elsewhere. New modules, new techniques, and crazy approaches are all welcome. Discussion-format sessions are great, too, especially if you plan to turn them into a community deliverable (like a “best practices for writing DSC Resources” session that gets turned into a free e-guide later). Think community, deep dive, engaging, and amazing as keywords. We want attendees to finish each day with information leaking… just a little bit… out their eyeballs. Help us make it happen. -We do have some goals for speaker selection, too. We obviously have, and appreciate, the great involvement we get from the product team. We aim to have a certain number of sessions from well-known members of the community, simply because they’re well-known for a reason – they do a great job! But we also set aside slots for newcomers who’ve never presented before, or who’ve maybe only presented once or twice before – the audience will judge you on content not style. We want to create opportunities for more folks to become engaged and active in our community, and the Summit is a great way to do that. -We aren’t looking for soft-skills sessions, like “how to get a new user group running,” although contact us via email (summit@) if you’d like to do something like that as an extra evening thing after the main content wraps for the day. -Please note all sessions are to be delivered in English. Presenter will provide all equipment needed to deliver session(s), including a laptop or other computer. Presenter must be able to provide video by means of HDMI, DVI-D, or DisplayPort connectors – VGA is NOT supported. Presenter must be able to manually select an appropriate screen resolution for video output. Typically, 1024x768 or 1280x720 are preferred. - -## How to submit abstracts of presentations - -Presentations will be 45-minutes in length and the submission should include the following: -Presentation Title -Presentation abstract – a description of the presentation and the topics covered. 250 words or less and suitable for marketing. -Go to . This is the only valid URL for pre-registration. Provide your e-mail address, password, and full name. You’re creating a new account, even if you’ve attended past Summit events. -**Do NOT attempt to register for the Summit as an attendee at this stage – we will be opening registration in late February 2015.** -Click Abstracts -Click Submit Abstract -Provide a title and description; descriptions must be 50-250 words. Set the Status to “Ready to Review” when you are ready to send your session to us for consideration. -To return to the site at a later time, go to . Click Log In. You can then re-visit Abstracts. -Note that you must set your abstract status to **Ready for Review** or we won’t see it. If you leave it in **Pending,** it won’t be considered. -You can submit multiple presentations in the same topic area or for different ones. Be aware that even though the session length is 45 minutes we prefer to have at least 10 minutes set aside for questions. Summit presentations are intense and intimate often with plenty of audience interaction. You must expect questions and discussions. This is not a “lecture to the audience” event. Also because of the session length, generally co-presenters are unnecessary, but that is not a requirement. - -## Presentation submission deadline – When you should send it by - -Start sending your presentation submissions immediately! The selection committee will start selecting presentations as soon as they arrive so you don’t want to miss out. The last day we will accept presentation submissions will be **Sunday 11 January 2015**. This is a hard deadline. - -## When you will know you’ve been selected - -The selection committee will start reviewing submissions immediately and begin the selection process. You will be informed if one or more of your presentations have been selected and sent a contract on or before Sunday 18 January 2015. You will need to return the signed contract by Wednesday 28 January 2015 otherwise another speaker may be offered the opportunity. -Speakers, with accepted sessions, will be given free admission to the event, including attendance at all official Summit activities. However, AWPP membership is not included. Speakers may not bring guests to the day sessions or evening events. We have a limited budget, and the number of speakers selected will be partially governed by that budget. Speakers are responsible for their own travel expenses, including hotel, airfare, and ground transportation. -The final agenda will be announced and posted on PowerShell.Org on, or about, Monday 2 February 2015. -We look forward to your submissions and your help in making PowerShell Summit Europe 2015 the most valuable IT/Dev conference of the year building on and surpassing the Europe 2014 Summit! diff --git a/content/articles/2014-12-04-a-crowdsourced-powershell-proficiency-exam.md b/content/articles/2014-12-04-a-crowdsourced-powershell-proficiency-exam.md deleted file mode 100644 index e54e71181..000000000 --- a/content/articles/2014-12-04-a-crowdsourced-powershell-proficiency-exam.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: A Crowdsourced PowerShell Proficiency Exam -authors: - - Don Jones -date: "2014-12-04T16:25:34+00:00" -categories: - - Training -aliases: - - /2014/12/a-crowdsourced-powershell-proficiency-exam/ ---- - -I wanted to call your attention to Smarterer, a company recently acquired by my employer, Pluralsight. Smarterer's schtick (apart from vexing my auto-correct) is that the host crowdsourced technology assessments. In other words, the _community_ decides what questions to ask someone in the test. -The magic is that their back-end engine, over time, figures out which questions are awesome and which ones suck, and adjusts the assessment accordingly. So as more people (especially qualified ones) take the test, the better it gets at identifying skilled people. It gives it a sort of built-in immunity against bad community-contributed questions, because those eventually filter out of the assessment that's delivered to people. It's pretty engaging, actually. I've had some fun taking some web development-oriented assessments, and surprised myself in a few places. -They've [got a PowerShell assessment][1]. Why not jump in, take it, and then add some questions of your own? Next time you need to interview someone for PowerShell chops, send 'em to Smarterer. - - [1]: http://smarterer.com/tests/powershell diff --git a/content/articles/2014-12-08-job-posting-help-us-run-powershell-org.md b/content/articles/2014-12-08-job-posting-help-us-run-powershell-org.md deleted file mode 100644 index 070e8a880..000000000 --- a/content/articles/2014-12-08-job-posting-help-us-run-powershell-org.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "JOB POSTING: Help us Run PowerShell.org" -authors: - - Don Jones -date: "2014-12-08T17:00:38+00:00" -categories: - - Announcements -aliases: - - /2014/12/job-posting-help-us-run-powershell-org/ ---- - -[UPDATE: We've gotten an outpouring of responses - I'm literally a bit teary-eyed right now - so I'll work with the existing set of volunteers and post again should everyone realize what we're asking and go running for the hills!] -We're looking for a volunteer to take over regular maintenance of the PowerShell.org website. We may even have a small budget to make this a paid-contractor gig. Trick being, it's gotta be done _regularly. _ -The specifics: - - * Set up new user groups with pages (as needed) - * Approve/Delete forums posts that are held for moderation (daily - this doesn't happen often, though) - * Moderate blog comments (daily) - * Approve community-submitted calendar events (weekly) - * Assist TechLetter team with setting up Forums topics for discussing upcoming TechLetter articles (monthly) - * Identify Forums posts that have gone unanswered; raise awareness and recruit answers (often via Twitter) (at least weekly) - -We're not looking for this person to do actual WordPress maintenance at this stage. However, if you're interested and do have WordPress experience, we could potentially tack that on. It wouldn't be much more than approving WordPress and plugin updates on a scheduled basis, although we do have one PHP code hack that has to be maintained after core WordPress updates. -If you're interested, please e-mail Admin right here at PowerShell.org. We're hoping to have someone start in January. We'd obviously love a volunteer to step in and be our hero; if it goes well, we can divert some budget to making it a permanent gig. We know that sometimes the family finds it easier to have you donate your time if you're getting a bit back in return. We're planning to make a similar offer to other key positions, including our TechLetter Editors and TechSession Manager, in 2015 if we can. diff --git a/content/articles/2014-12-15-powershell-summit-n-a-2015-status-update-info.md b/content/articles/2014-12-15-powershell-summit-n-a-2015-status-update-info.md deleted file mode 100644 index b38245b55..000000000 --- a/content/articles/2014-12-15-powershell-summit-n-a-2015-status-update-info.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: PowerShell Summit N.A. 2015 Status Update & Info -authors: - - Don Jones -date: "2014-12-15T20:01:34+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2014/12/powershell-summit-n-a-2015-status-update-info/ ---- - -As of this post, PowerShell Summit North America 2015 is full, and registration has been cut off. We're taking some time to confirm our numbers and venue capacity; if we're able to open additional seats, that will happen in January 2015. We will allow any additional capacity to be registered until one month prior to the Summit, or until it sells out, whichever comes first. We do not maintain a waiting list; please check here and on the @PSHSummit Twitter feed for any announcements. -For those already registered, we _do not have any official hotel recommendations. _You're welcome to use the [Summit Forum][1] to see where others are staying, or to arrange for carpooling or other stuff. We certainly encourage all attendees to check the Forum for Q&A and other discussion - it's never too early to start getting involved. On the hotel front, just look for hotels in downtown Charlotte, or near Microsoft Charlotte, based on your preferences. The reason there's no official hotel is that there are numerous business-class hotels nearby, and after a close call last year we didn't want to take the financial risk of booking out a room block. -Our intent at this time is to book the venue to fire code capacity, which is why we may be able to open additional slots after we confirm everything. That means _both venue rooms will be full at all times. _You will not be permitted to stand or sit in the aisles, back of the room, or block the doorways. If the session you hoped to attend is full, you'll need to go to the other one. Keep in mind we're recording everything, so you won't miss out entirely. -The last sessions on all three days will only have a single session. We'll position the speaker in one of the two rooms, and we'll live-stream to the other room. This is where we plan to put Jeffrey Snover's talks, both to accommodate what has historically been high interest in his sessions, and to accommodate his total inability to do a session in only 45 minutes :). If you don't get a chair in the "live" room, you'll need to join from the "overflow" room. -The two rooms are actually in different buildings, separated from each other by a driveway/courtyard arrangement. We're suggesting that you _not_ bring your ginormous 21" laptop, since it'll just drag you down moving between sessions. Maybe stick with a Surface if you want to take notes and stuff. Although we're recording everything, so... you know. Maybe just enjoy the session. -Lunches will be taken _in the session rooms_, with buffet setups in the hallways just outside each room. -Stay tuned for further details, and please use the Summit forum to ask questions. - - [1]: https://powershell.org/forums/forum/powershell-summit/ diff --git a/content/articles/2014-12-29-nj-powershell-users-group-meeting-presenter-doug-finke-microsoft-mvp.md b/content/articles/2014-12-29-nj-powershell-users-group-meeting-presenter-doug-finke-microsoft-mvp.md deleted file mode 100644 index b14fb40cc..000000000 --- a/content/articles/2014-12-29-nj-powershell-users-group-meeting-presenter-doug-finke-microsoft-mvp.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "NJ PowerShell Users Group Meeting: Presenter Doug Finke – Microsoft MVP" -authors: - - NJPowerShell -date: "2014-12-30T04:25:33+00:00" -categories: - - PowerShell for Admins -aliases: - - /2014/12/nj-powershell-users-group-meeting-presenter-doug-finke-microsoft-mvp/ ---- - -The NJ PowerShell User Group is having a meetup on Thursday, January 8th from 6:00 - 8:00 PM. If interested, please register through the [Eventbrite website](http://www.eventbrite.com/e/nj-powershell-users-group-meeting-presenter-doug-finke-microsoft-mvp-tickets-15066672824) to track attendance for ordering pizza.  For those attending online (Webex) we will send a follow-up email with the meeting link based on Eventbrite online registrants. - **Agenda**: - 6:00 – 6:30: Pizza and socializing - 6:30 – 7:30: Presentation - 7:30 - 8:00: Q & A - - - - - Please note that the Webex meeting will start at 6:00 PM, but the actual presentation won't start until 6:30 - In-Person attendees must register, print out their EventBrite ticket, and present it at the door. Walk-ins will not be permitted. - - - - - - **Presenter**: Doug Finke - **Bio: **Doug Finke, author of “[PowerShell for Developers](http://www.amazon.com/Windows-PowerShell-Developers-Douglas-Finke/dp/1449322700/)”, a Microsoft Most Valuable Professional (MVP) for PowerShell and works at Start-Automating, a company specializing in all aspects of PowerShell development, including consulting, training and tool building. Doug has been a developer and author working with numerous technologies. You can catch up with Doug at his blog Development in a Blink at [http://dougfinke.com/blog](http://dougfinke.com/blog). - Microsoft Most Valuable Professional (MVP) Doug Finke takes us through PowerShell from a developer’s point of view. Doug shows techniques for integrating/debugging PowerShell from - and to C# code as well as using PowerShell with a Windows Presentation Foundation (WPF) application. He also addresses using reflection at the command line, object pipelining, and - PowerShell’s REPL. Plus, time permitting, Doug will highlight some of the new features in the PowerShell v5 November Preview. - **Twitter**:[@DFinke](https://twitter.com/dfinke) - [![Doug Finke](https://cdn.evbuc.com/eventlogos/111855199/dougfinkebio.png)    ![Windows PowerShell for Developers](https://cdn.evbuc.com/eventlogos/111855199/powershellfordevelopers-1.jpg)](http://dougfinke.com/blog) - -NJ PowerShell Meetup Coffee Bar and Conference room at Mathematica Policy Research - - ![Conference Room](https://cdn.evbuc.com/eventlogos/111855199/eventbriteconferenceroom.png) - - - - - - - - - - - ![Coffee Bar](https://cdn.evbuc.com/eventlogos/111855199/eventbritecoffeebar.png) diff --git a/content/articles/2014/01/_index.md b/content/articles/2014/01/_index.md new file mode 100644 index 000000000..7a6c51bb4 --- /dev/null +++ b/content/articles/2014/01/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from January 2014" +description: "PowerShell.org Articles published in January 2014." +--- diff --git a/content/articles/2014/01/adding-and-removing-items-from-a-powershell-array/index.md b/content/articles/2014/01/adding-and-removing-items-from-a-powershell-array/index.md new file mode 100644 index 000000000..6acebcf98 --- /dev/null +++ b/content/articles/2014/01/adding-and-removing-items-from-a-powershell-array/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2014-01-21-adding-and-removing-items-from-a-powershell-array/ +title: Adding and Removing Items from a PowerShell Array +authors: + - Jonathan Medd +date: "2014-01-21T11:46:35+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/adding-and-removing-items-from-a-powershell-array/ +--- + +Adding and removing Items from a PowerShell array is a topic which can lead to some confusion, so here are a few tips for you. +Create an array and we will note the type [System.Array](http://msdn.microsoft.com/en-us/library/system.array(v=vs.110).aspx): +[Click here](http://www.jonathanmedd.net/2014/01/adding-and-removing-items-from-a-powershell-array.html) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. diff --git a/content/articles/2014/01/episode-255-powerscripting-podcast-steve-roberts-from-amazon-on-aws-and-powershell/index.md b/content/articles/2014/01/episode-255-powerscripting-podcast-steve-roberts-from-amazon-on-aws-and-powershell/index.md new file mode 100644 index 000000000..3391b5dda --- /dev/null +++ b/content/articles/2014/01/episode-255-powerscripting-podcast-steve-roberts-from-amazon-on-aws-and-powershell/index.md @@ -0,0 +1,306 @@ +--- +url: /articles/2014-01-27-episode-255-powerscripting-podcast-steve-roberts-from-amazon-on-aws-and-powershell/ +title: Episode 255 – PowerScripting Podcast – Steve Roberts from Amazon on AWS and PowerShell +authors: + - Jonathan Walz +date: "2014-01-28T00:07:40+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/01/episode-255-powerscripting-podcast-steve-roberts-from-amazon-on-aws-and-powershell/ +--- + +**A Podcast about Windows PowerShell.** + Listen: + + + **[![](http://powerscripting.libsyn.com/img/podcastIcon.gif)](http://traffic.libsyn.com/powerscripting/PSPodcast-255.mp3)** + + + +## + In This Episode + + + + + + Tonight on the PowerScripting Podcast, we talk to Steve Roberts from Amazon on Amazon Web Services and PowerShell. + + + + +## + News + + + + + + - + + + [The Scripting Games](https://powershell.org/category/announcements/scripting-games/) are going on now! + + + + + + - + + + [PowerShell Saturday #007](http://powershellsaturday.com/007/) is on February 8th + + + + + + - + + + [PowerShell Saturday #008](http://powershellsaturday.com/008/) is on February 15th + + + + + + + + +## + Interview + + + + + + Guest - Steve Roberts + + + + +#### + Links + + + + + + - + + + [Amazon Web Services](http://aws.amazon.com/) + + + + + + - + + + [AWS Tools for PowerShell](http://aws.amazon.com/powershell/) + + + + + + - + + + AWS .Net / PowerShell team + + + + + + + + + [Windows & .Net Developer Center](http://aws.amazon.com/net/) + + + + + + - + + + [Blog](http://aws.amazon.com/net/) + + + + + + - + + + Twitter: [@awsfornet](https://twitter.com/awsfornet) + + + + + + + + + - + + + [Handling credentials with PowerShell tools](http://blogs.aws.amazon.com/net/post/Tx36NATIEAMER5V/Handling-Credentials-with-AWS-Tools-for-Windows-PowerShell) + + + + + + + + + + + + + + + + Chatroom Highlights: + + + + + + [21:55:58] [http://amzn.com/1430264519](http://amzn.com/1430264519) + + + + + + [21:56:13] Pro PowerShell for Amazon Web Services + + + + + + [21:56:33] Steve (speaking) was a big help with the book + + + + + + [21:56:43] his team was great + + + + + + [https://powershell.org/community-events/summit/](https://powershell.org/community-events/summit/) + + + + + + [http://www.panasonic.com/business/toughpad/us/7-inch-tablet-fz-m1.asp](http://www.panasonic.com/business/toughpad/us/7-inch-tablet-fz-m1.asp) + + + + + + [http://aws.amazon.com/powershell/](http://aws.amazon.com/powershell/) + + + + + + [http://docs.aws.amazon.com/powershell/latest/reference/Index.html](http://docs.aws.amazon.com/powershell/latest/reference/Index.html) + + + + + + [http://aws.amazon.com/](http://aws.amazon.com/) + + + + + + [http://amzn.com/1430264519](http://amzn.com/1430264519) + + + + + + [http://docs.aws.amazon.com/powershell/latest/reference/Index.html](http://docs.aws.amazon.com/powershell/latest/reference/Index.html) + + + + + + [http://aws.amazon.com/net/](http://aws.amazon.com/net/) + + + + + + [http://blogs.aws.amazon.com/net](http://blogs.aws.amazon.com/net) + + + + + + [http://www.musicradar.com/us/news/guitars/trent-reznor-talks-johnny-cash-168199](http://www.musicradar.com/us/news/guitars/trent-reznor-talks-johnny-cash-168199) + + + + + + [https://scontent-a-iad.xx.fbcdn.net/hphotos-ash3/1607005_10202465193703988_1046463679_n.jpg](https://scontent-a-iad.xx.fbcdn.net/hphotos-ash3/1607005_10202465193703988_1046463679_n.jpg) + + + + + + ## what does AWS stand for again? + + + + + + DexterPOSh, please add ## before your questions so they are easier for us to pick out + + + + + + @JonWalz ...got it ## + + + + + + ## can you give a quick/small example of the differences between AWS and Azure? + + + + + + ## Can I extend my local Lab to include machines from AWS ? + + + + + + ## does he have a blog + + + + +#### + The Question - Hero/Power + + + + + + - + + + Thor diff --git a/content/articles/2014/01/phillyposh-01092014-meeting-summary-and-presentation-materials/index.md b/content/articles/2014/01/phillyposh-01092014-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..322ff5079 --- /dev/null +++ b/content/articles/2014/01/phillyposh-01092014-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2014-01-21-phillyposh-01092014-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 01/09/2014 meeting summary and presentation materials +authors: + - John Mello +date: "2014-01-21T22:53:52+00:00" +aliases: + - /2014/01/phillyposh-01092014-meeting-summary-and-presentation-materials/ +--- + +1. [Lido Paglia][1] gave a presentation entitled “A PowerShell beginner’s guide to using GitHub”. During his talk Lido went over the history of GitHub and how you can use it to manage your scripts and to collaboratively code (e.g. The Winter Scripting games!). A [copy of his presentation materials][2] are available on our [GitHub Repository][3]. + 2. [Lido Paglia][1] and [John Mello][4] both went over their approach to the homework problem they presented during the [11/07/2013][5] meeting. You can find a copy of [Lido's][6] and [John's][7] script in our [GitHub Repository][3]. + 3. A [recording of this meeting][8] has been posted to our [YouTube channel][9]; please note that there are some audio issues near the end of the recording. + + [1]: https://twitter.com/nicemarmot + [2]: https://github.com/PhillyPoSH/2014-01 + [3]: https://github.com/PhillyPoSH + [4]: http://mellositmusings.com/ + [5]: https://powershell.org/2013/11/12/phillyposh-11072013-meeting-summary-and-presentation-materials/ + [6]: https://github.com/PhillyPoSH/2014-01/blob/master/PhotoFlashback.ps1 + [7]: https://github.com/PhillyPoSH/2014-01/blob/master/PhotoFlashback_JohnMello.ps1 + [8]: http://www.youtube.com/watch?v=culZp4EwmdU + [9]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014/01/powershell-saturday-007-style/index.md b/content/articles/2014/01/powershell-saturday-007-style/index.md new file mode 100644 index 000000000..f048a7974 --- /dev/null +++ b/content/articles/2014/01/powershell-saturday-007-style/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2014-01-23-powershell-saturday-007-style/ +title: PowerShell Saturday 007 style +authors: + - Terri Donahue +date: "2014-01-23T17:46:49+00:00" +aliases: + - /2014/01/powershell-saturday-007-style/ +--- + +Last year was the first annual PowerShell Saturday in Charlotte, NC. We were 002. This year, we are back and will be blowing minds in 007 style. We have some great speakers and sessions lined up and there are still [tickets available](https://www.eventbrite.com/e/powershell-saturday-007-charlotte-nc-tickets-9019263861?ref=ecount). + +The popular Iron Scripter! competition will also be back. + +All of the information you could want to know about this event is located on the [PowerShell Saturday](http://powershellsaturday.com/007/) site. Jump on over, take a look around, and don’t forget to register. diff --git a/content/articles/2014/01/powershell-summit-north-america-2014-some-more-reasons-to-register/index.md b/content/articles/2014/01/powershell-summit-north-america-2014-some-more-reasons-to-register/index.md new file mode 100644 index 000000000..1cb588ab9 --- /dev/null +++ b/content/articles/2014/01/powershell-summit-north-america-2014-some-more-reasons-to-register/index.md @@ -0,0 +1,40 @@ +--- +url: /articles/2014-01-07-powershell-summit-north-america-2014-some-more-reasons-to-register/ +title: PowerShell Summit North America 2014 – Some More Reasons to Register! +authors: + - Don Jones +date: "2014-01-07T19:17:37+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2014/01/powershell-summit-north-america-2014-some-more-reasons-to-register/ +--- + +PowerShell Summit North America Registration is in full swing, and we've got about 50 more spots to reach our break-even goal. Hopefully, those of you that have been holding off for budgetary reasons are now "weapons free" and can plan to join us in April 2014! + +## Confirmed PowerShell Product Team Presenters + +We've confirmed a great set of speakers from the team itself, including Jason Shirk, Lee Holmes, Kenneth Hanson, and Hemant Manhawar. Of course, Shell Father Jeffrey Snover will also be presenting a couple of sessions! +This helps really round out our [agenda][1], along with several special events that we've got planned. You'll participate in a large-scale Iron Scripter event, mix and mingle with team members in Microsoft's "top of the world" cafe in downtown Bellevue, and rub elbows with PowerShell experts from all over the world during our pre-event mixer. + +## Become VERIFIED EFFECTIVE™ + +We're going to provide a **free voucher for a VERIFIED EFFECTIVE PowerShell Toolmaker** exam to everyone who's already registered, and to everyone who registers **before the end of January**. This is a $250 value, and you'll be able to take your exam after the Summit is over. VERIFIED EFFECTIVE recognition will be valid for one year. Vouchers will be distributed at the Summit itself, and must be used by the end of June, 2014. + +## Join AWPP for 10% Off + +Effective July 2014, we will be launching the Association for PowerShell Professionals (AWPP). Future Summit events will be open _only_ to AWPP members (your member fee includes Summit attendance, along with other benefits). Anyone who has registered for the 2014 Summit already, or **who registers before the end of January 2014**, will receive 10% off their first-year AWPP membership, which will also guarantee you admission to the 2015 Summit. That discount will be valid throughout 2014, so you can join at any time during the year. Vouchers will be distributed at the Summit. Your AWPP membership also includes a VERIFIED EFFECTIVE exam, which you can use anytime in your membership year. That means you could easily get verified for two years in a row, at a massive savings. + +## Save Some Cash on the Summit + +It's sad, but credit card merchant fees pile up. For the Summit, they can be a lot. So if you'd like to pay by company check, we're happy to help. Just contact treasurer@ this domain, and we'll be happy to send you an invoice and accept your payment via check. That'll save you a few bucks. +Don't forget that we've also negotiated killer $109/night room rates at two hotels that are just a short walk from the Summit venue. We've also worked out a discounted rate on an airport shuttle from Sea-Tac, so you won't need a rental car. We're doing as much as we can to help minimize your costs. + +## Please, Tell a Friend + +If you can't attend the Summit, or if you plan to attend, or even if you've already registered - please help us get the word out. We really do need 50 more folks in order to break even, and we need them to help us use up our hotel room block as well, or the organization will be on the hook for those costs. It's crucial that we break even on this event if we're to have more in the future. We don't have a marketing budget, so the more you can do to help folks realize that the Summit exists, the better our chances for succeeding. Thank you in advance! + + + + [1]: https://powershell.org/community-events/summit/powershell-summit-north-america/summit-agenda/ diff --git a/content/articles/2014/01/powershell-tip-1-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/index.md b/content/articles/2014/01/powershell-tip-1-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/index.md new file mode 100644 index 000000000..14dc0960a --- /dev/null +++ b/content/articles/2014/01/powershell-tip-1-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2014-01-03-powershell-tip-1-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/ +title: "PowerShell Tip #1 from the Winner of the Advanced Category in the 2013 Scripting Games" +authors: + - Mike F Robbins +date: "2014-01-03T17:16:16+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/powershell-tip-1-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/ +--- + +In case you haven't heard, the 2014 Winter Scripting Games are just now getting started. Regardless of your skill level with PowerShell, it couldn't be a better time to participate since this is the first time in the history of the scripting games that you'll be able to work as part of a team and receive proactive feedback (before your code is judged) from a team of expert coaches who use PowerShell in the real world on a daily basis. Ultimately, the scripting games make learning PowerShell more interesting and challenging while giving you the opportunity to network with other enthusiasts in the industry. +Now it's time to talk about a PowerShell tip that I wanted to share. +**Tip #1 - Read the Help!** +While this may not be the most popular tip, believe it or not, it's one of the most important and it's something that's so simple it's often times overlooked. In my opinion, you'll never truly be effective with PowerShell and be able to figure things out for yourself until you learn to read the help. +[Click here](http://mikefrobbins.com/2014/01/03/powershell-tip-1-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. +µ diff --git a/content/articles/2014/01/powershell-tip-2-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/index.md b/content/articles/2014/01/powershell-tip-2-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/index.md new file mode 100644 index 000000000..d78d8ec97 --- /dev/null +++ b/content/articles/2014/01/powershell-tip-2-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2014-01-09-powershell-tip-2-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/ +title: "PowerShell Tip #2 from the Winner of the Advanced Category in the 2013 Scripting Games" +authors: + - Mike F Robbins +date: "2014-01-09T14:10:35+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/powershell-tip-2-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/ +--- + +**Tip #2 - Comment (Document) your code!** +This is another one of those tips that probably isn't very popular, but regardless of how good you are at writing PowerShell scripts and functions, they're useless if no one else can figure out how to use them. You might be thinking that you're the only one who uses the PowerShell code that you write, but I'm sure that you like to go on vacation just like the rest of us and none of us are going to live forever. +In [my tip #1 blog](https://powershell.org/2014/01/03/powershell-tip-1-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/) you learned that you need to "Read the Help!". This tip builds on the first one because it allows others to "Read the Help!" for the PowerShell code that you write. +The type of help that you want to provide for your PowerShell functions and scripts is "Comment Based Help". [Click here](http://mikefrobbins.com/2014/01/09/powershell-tip-2-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. +µ diff --git a/content/articles/2014/01/powershell-tip-3-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/index.md b/content/articles/2014/01/powershell-tip-3-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/index.md new file mode 100644 index 000000000..075f7157e --- /dev/null +++ b/content/articles/2014/01/powershell-tip-3-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2014-01-16-powershell-tip-3-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/ +title: "PowerShell Tip #3 from the Winner of the Advanced Category in the 2013 Scripting Games" +authors: + - Mike F Robbins +date: "2014-01-16T14:18:54+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/powershell-tip-3-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/ +--- + +In my previous blog article ([PowerShell Tip #2](https://powershell.org/2014/01/09/powershell-tip-2-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/)), I left off with the subject of inline help and stated there was a better way. I’m fast-forwarding through lots of concepts and jumping right into “Advanced Functions and Scripts” with this tip because they are where you’ll find the answer to a “better way” to add inline help. +[Click here](http://mikefrobbins.com/2014/01/16/powershell-tip-3-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. +µ diff --git a/content/articles/2014/01/powershell-tip-from-the-head-coach-of-the-2014-winter-scripting-games-design-for-performance-and-efficiency/index.md b/content/articles/2014/01/powershell-tip-from-the-head-coach-of-the-2014-winter-scripting-games-design-for-performance-and-efficiency/index.md new file mode 100644 index 000000000..739283cc0 --- /dev/null +++ b/content/articles/2014/01/powershell-tip-from-the-head-coach-of-the-2014-winter-scripting-games-design-for-performance-and-efficiency/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2014-01-23-powershell-tip-from-the-head-coach-of-the-2014-winter-scripting-games-design-for-performance-and-efficiency/ +title: "PowerShell Tip from the Head Coach of the 2014 Winter Scripting Games: Design for Performance and Efficiency!" +authors: + - Mike F Robbins +date: "2014-01-23T14:28:33+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/powershell-tip-from-the-head-coach-of-the-2014-winter-scripting-games-design-for-performance-and-efficiency/ +--- + +There are several concepts that come to mind when discussing the topic of designing your PowerShell commands for performance and efficiency, but in my opinion one of the items at the top of the list is "Filtering Left" which is what I'll be covering in this blog article. +First, let's start out by taking a look at an example of a simple one-liner command that's poorly written from a performance and efficiency standpoint: +[Click here](http://mikefrobbins.com/2014/01/23/powershell-tip-from-the-head-coach-of-the-2014-winter-scripting-games-design-for-performance-and-efficiency/) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. +µ diff --git a/content/articles/2014/01/reporting-on-installed-windows-programs-via-the-registry/index.md b/content/articles/2014/01/reporting-on-installed-windows-programs-via-the-registry/index.md new file mode 100644 index 000000000..1d0acb1da --- /dev/null +++ b/content/articles/2014/01/reporting-on-installed-windows-programs-via-the-registry/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2014-01-31-reporting-on-installed-windows-programs-via-the-registry/ +title: Reporting On Installed Windows Programs Via The Registry +authors: + - Jonathan Medd +date: "2014-01-31T14:37:18+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/reporting-on-installed-windows-programs-via-the-registry/ +--- + +Quite a common request for working with Windows machines is to report the software installed on them. If you don’t have a centralised system for reporting on client software (many places don’t) then you may turn to some form of scripted method to obtain this information. +Most people tend to head to **Add / Remove Programs** when thinking about what software is installed in Windows. However, not all applications will always populate information in there, depending on how they have been installed. Additionally, to query that information you would typically query the WMI class Win32_Product, however this [can lead to performance issues](http://support.microsoft.com/kb/974524). +[Click here](http://www.jonathanmedd.net/2014/01/reporting-on-installed-windows-programs-via-the-registry.html) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. diff --git a/content/articles/2014/01/script-for-setting-up-and-demoing-a-dsc-pull-server/index.md b/content/articles/2014/01/script-for-setting-up-and-demoing-a-dsc-pull-server/index.md new file mode 100644 index 000000000..fdc283f28 --- /dev/null +++ b/content/articles/2014/01/script-for-setting-up-and-demoing-a-dsc-pull-server/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2014-01-05-script-for-setting-up-and-demoing-a-dsc-pull-server/ +title: Script for Setting Up and Demoing a DSC Pull Server +authors: + - Don Jones +date: "2014-01-05T18:59:47+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/01/script-for-setting-up-and-demoing-a-dsc-pull-server/ +--- + +[DSC Setup and Demo Scripts][1] +I recently set up a virtual machine to use for Desired State Configuration (DSC) demos. I wanted to make the demo-ing fairly brainless, as DSC requires a number of setup steps to get a pull server running. So I took some demo scripts Microsoft offered from TechEd 2013, updated them to work with Windows Server 2012 R2 RTM, and thought I'd offer them to you. +**SetupDSC.ps1** is the main script. Now, because I didn't want to use good ol' Start-Demo, there's a who crapload of kinda ugly Write-Debug statements. That way I can get an "about to do ____" message and then have the script pause before doing it. Lets me explain to the class what's about to happen. You can remove all that crud if you like. +**InstallPullServerConfig.ps1** and **PSWSIISEndpoint.psm1** are the updated Microsoft scripts. SetupDSC.ps1 calls these. They're intended to run locally; you'll need to be _on _the machine you want to make into a pull server, and it needs to be Windows Server 2012 R2 (the DSC pull server role is part of the OS, not part of Windows Management Framework v4). Setup takes a few minutes, and will install IIS. This sets up an HTTP pull server. +**SampleConfig.ps1** is a sample DSC configuration, targeted to a computer named MEMBER2. It just specifies that the Windows Server Backup feature be installed. SetupDSC.ps1 actually runs this, which produces a MOF. SetupDSC.ps1 also copies the MOF to the DSC pull server configuration directory. +**SampleSetPullMode.ps1** also gets run by SetupDSC.ps1. This contains a DSC Local Configuration Manager configuration, targeted to MEMBER2, that turns on pull mode and directs MEMBER2 to pull the previously-created configuration. I think I have it refreshing every 5 minutes, which is totally unrealistic for production. Again, this was made for class demos, but you can adjust the time or leave it off to default to 30min. Running this script creates the MOF and pushes it to MEMBER2. That, in turn, causes MEMBER2 to start pulling the sample config, which causes Windows Server Backup to be installed. +SetupDSC.ps1 has some additional code to show that Windows Server Backup isn't installed, and then is installed (after you give the pull time to occur). +Anyway, might need some tweaking to use in production, but hopefully it'll give you a snapshot of the whole DSC process. Much thanks to [James Dawson's article on DSC][2], which gave me a couple of the tweaks I needed to get all this working on RTM code. +Enjoy. + + [1]: https://powershell.org/wp-content/uploads/2014/01/dsc.zip + [2]: http://readsource.co.uk/blog/2013/10/1/configuring-powershell-dsc-pull-mode diff --git a/content/articles/2014/01/scripting-games-2014-event-submission-tip/index.md b/content/articles/2014/01/scripting-games-2014-event-submission-tip/index.md new file mode 100644 index 000000000..d8f2a3c96 --- /dev/null +++ b/content/articles/2014/01/scripting-games-2014-event-submission-tip/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2014-01-18-scripting-games-2014-event-submission-tip/ +title: Scripting Games 2014 – event submission tip +authors: + - Richard Siddaway +date: "2014-01-18T12:21:45+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/scripting-games-2014-event-submission-tip/ +--- + +I've testing out the judging system using the practice event and one thing jumped out at me. +It was a lot easier to understand the entries for those teams that included a transcript of their entry. +I would very strongly recommend that you include a transcript of your entry running. As a minimum I would recommend that you include: +- the solution running - show each type of input required by the scenario (pipeline, single values, file etc) +- if parameter validation is asked for - show that in action +- show error handling in action if you can +- show the partial contents of any output file +Transcripts make for happy judges. You want your judges to be happy don't you... diff --git a/content/articles/2014/01/scripting-games-winter-2014-notice/index.md b/content/articles/2014/01/scripting-games-winter-2014-notice/index.md new file mode 100644 index 000000000..4e02e3d21 --- /dev/null +++ b/content/articles/2014/01/scripting-games-winter-2014-notice/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2014-01-03-scripting-games-winter-2014-notice/ +title: Scripting Games Winter 2014 Notice +authors: + - Don Jones +date: "2014-01-04T00:05:28+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/scripting-games-winter-2014-notice/ +--- + +Due to some vagaries in the system, we have some users who "belong" to multiple teams. +I think I've corrected the problem so it won't crop up again. +A couple of players' team memberships were manually reduced to 1. If it was you, and you're suddenly on the wrong team, post in the forum and I'll fix it for you. +For everyone else, when you go to the event list you may be redirected to a "You're on multiple teams" page, and asked to click the team you wish to remain on. Your "join date" will not change, so you'll still be able to participate in the events. You'll simply be de-listed from the other teams. +As always, post in the forums if you need help. diff --git a/content/articles/2014/01/scripting-games-winter-2014-practice-event-rules/index.md b/content/articles/2014/01/scripting-games-winter-2014-practice-event-rules/index.md new file mode 100644 index 000000000..fef916536 --- /dev/null +++ b/content/articles/2014/01/scripting-games-winter-2014-practice-event-rules/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2014-01-03-scripting-games-winter-2014-practice-event-rules/ +title: Scripting Games Winter 2014 – Practice Event Rules +authors: + - Don Jones +date: "2014-01-03T19:40:29+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/scripting-games-winter-2014-practice-event-rules/ +--- + +On Monday, our practice event should be open at http://ScriptingGames.org. +**If you formed a team but only have one player on Monday morning, you will not be able to submit entries. **I've noticed several folks who have only a single player but who have set their team membership to "private," meaning nobody can join you unless you provide them with your invitation code. +**Your team must have 2-6 players to participate in the Games. ** +You may consider leaving your team (it'll be deleted if you're the last player in it) and joining one of the public teams. Once you join a new team, you will not be able to fully participate until the current, in-progress event is over and the next event begins. + + +Please keep this in mind. In order to participate in the participate in the Practice Event, **you must have at least 2 players on-team by the time the event starts. **Late joiners will NOT be able to participate. So settle up your team memberships this weekend! diff --git a/content/articles/2014/01/scripting-games-winter-2014-team-discussion-tips/index.md b/content/articles/2014/01/scripting-games-winter-2014-team-discussion-tips/index.md new file mode 100644 index 000000000..db79d8818 --- /dev/null +++ b/content/articles/2014/01/scripting-games-winter-2014-team-discussion-tips/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2014-01-06-scripting-games-winter-2014-team-discussion-tips/ +title: Scripting Games Winter 2014 – Team Discussion Tips +authors: + - Don Jones +date: "2014-01-06T15:42:52+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/scripting-games-winter-2014-team-discussion-tips/ +--- + +When you're logged into the Games, you'll notice that clicking on your team pulls up a "team discussion" box. That's a shared discussion area for you and your team. +![figure_15-001](https://powershell.org/wp-content/uploads/2014/01/figure_15-001.png) +However, if you click on one of the files you've uploaded, you'll see the discussion turn into a "File Discussion." We retain a separate thread for each file you upload, so that you and your team can discuss that file specifically. +![figure_15-002](https://powershell.org/wp-content/uploads/2014/01/figure_15-002.png) + +Deleting a file also deletes its conversation thread. However, **replace**ing a file retains the thread. +Note that coaches may add commentary to any of these, so it's worth your while to quickly click on each file and see if there are comments available. +And of course, your team doesn't HAVE to use these discussion threads. You're also welcome to use email, Skype, smoke signals, or telepathy. Your choice. Keep in mind that our coaches _will_ use these to offer comments on any files you've added. +Speaking of that: Coaches _are not notified_ when you upload files. That means our coaches are just wondering around looking for files to comment upon. So it's in your interests, if you want their feedback, to get something in the system! diff --git a/content/articles/2014/01/scripting-games-winter-2014-teams-in-danger/index.md b/content/articles/2014/01/scripting-games-winter-2014-teams-in-danger/index.md new file mode 100644 index 000000000..29c37d4cb --- /dev/null +++ b/content/articles/2014/01/scripting-games-winter-2014-teams-in-danger/index.md @@ -0,0 +1,37 @@ +--- +url: /articles/2014-01-05-scripting-games-winter-2014-teams-in-danger/ +title: Scripting Games Winter 2014 – Teams in Danger +authors: + - Don Jones +date: "2014-01-05T22:37:11+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/scripting-games-winter-2014-teams-in-danger/ +--- + +Note that as of the time of this post (about 2pm Pacific on Jan 5th), the following teams do not have enough players to participate in the upcoming Practice Event: + + * Lake County Hoosiers + * A + * Annihilators + * AZPOSH + * Avengers + * PeopleTecIsAwesome + * Time Travel is Dangerous + * Kotagiris + * wow. much power. very shell. + * Blasters + * CCC + * Anteaters + * Barracudas + * Hypothermia + * Bearcats + * #PSexec + * Avalanche + * Bull Gators + * Alligators + +To reiterate: **You must have 2-6 players signed into the Web site and joined to your team, or you will be unable to post entries. **Anyone joining after midnight UTC on Jan 6th **will not count** toward your team total for the Practice Event. +Many of the above teams are "private," which means nobody can join them without the team invite code. +If you are on one of the following teams, especially if it's public, _consider quitting NOW and joining another public team that needs players. _Otherwise, you may miss out on the practice event, which starts in just a couple of hours. diff --git a/content/articles/2014/01/scripting-games-winter-2014-we-has-prizes/index.md b/content/articles/2014/01/scripting-games-winter-2014-we-has-prizes/index.md new file mode 100644 index 000000000..c64e94837 --- /dev/null +++ b/content/articles/2014/01/scripting-games-winter-2014-we-has-prizes/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2014-01-10-scripting-games-winter-2014-we-has-prizes/ +title: Scripting Games Winter 2014 – WE HAS PRIZES!! +authors: + - Don Jones +date: "2014-01-10T19:43:49+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/scripting-games-winter-2014-we-has-prizes/ +--- + +**Many thanks to SAPIEN Technologies** for providing - completely without us asking - first-place and overall-best prizes for The Scripting Games! +We'll have copies of PowerShell Studio (x2), PrimalScript (x2), and the entire SAPIEN Software Suite (x1) for our overall top-scoring team at the end of the Games. Team members can decide how to divvy up the loo themselves. +Remember that Event 1 is coming up soon: + + * Instructions available 2014-01-18 00:00:00 UTC + * Entries accepted starting 2014-01-19 00:00:00 UTC + * All entries due by 2014-01-26 00:00:00 UTC + +**You must be registered and on a team +before + we begin accepting entries, or you will not be able to participate. **Any latecomers will not be allowed to chat or upload files, even if they join a team. diff --git a/content/articles/2014/01/tampa-bay-powershell-user-group-jan-meeting/index.md b/content/articles/2014/01/tampa-bay-powershell-user-group-jan-meeting/index.md new file mode 100644 index 000000000..26270f979 --- /dev/null +++ b/content/articles/2014/01/tampa-bay-powershell-user-group-jan-meeting/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2014-01-13-tampa-bay-powershell-user-group-jan-meeting/ +title: Tampa Bay Powershell User Group – Jan Meeting +authors: + - ScriptWarrior +date: "2014-01-13T13:37:14+00:00" +categories: + - Events +aliases: + - /2014/01/tampa-bay-powershell-user-group-jan-meeting/ +--- + +Next meeting: +Topic: Winter Scripting Games Kickoff and Team formation +Jan 16th 2014 6 – 8 PM back at Tek System Tampa Office +FOOD PROVDED![:)](http://cdn.powershell.org/wp/wp-includes/images/smilies/icon_smile.gif) +RSVP via – http://www.eventbrite.com/e/tampa-powershell-user-group-tickets-1634714475 +4301 West Boy Scout Boulevard +Suite 590 +Tampa, FL 33607 diff --git a/content/articles/2014/01/testing-for-admin-privileges-in-powershell/index.md b/content/articles/2014/01/testing-for-admin-privileges-in-powershell/index.md new file mode 100644 index 000000000..45d940292 --- /dev/null +++ b/content/articles/2014/01/testing-for-admin-privileges-in-powershell/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2014-01-21-testing-for-admin-privileges-in-powershell/ +title: Testing for Admin Privileges in PowerShell +authors: + - Jonathan Medd +date: "2014-01-21T10:27:53+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/testing-for-admin-privileges-in-powershell/ +--- + +Sometimes when running a PowerShell script you may need to test at the beginning whether the process it was called from had Windows admin privileges in order to be able to achieve what it needs to do. Prior to PowerShell v4 I had used something along the lines of the following to test for this condition – not the most obvious piece of code ever to be fair: +[Click here](http://www.jonathanmedd.net/2014/01/testing-for-admin-privileges-in-powershell.html) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. diff --git a/content/articles/2014/01/the-scripting-games-winter-2014-update-on-event-1-scores/index.md b/content/articles/2014/01/the-scripting-games-winter-2014-update-on-event-1-scores/index.md new file mode 100644 index 000000000..82929c762 --- /dev/null +++ b/content/articles/2014/01/the-scripting-games-winter-2014-update-on-event-1-scores/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2014-01-29-the-scripting-games-winter-2014-update-on-event-1-scores/ +title: The Scripting Games Winter 2014 – Update on Event 1 Scores +authors: + - Don Jones +date: "2014-01-29T18:16:58+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/the-scripting-games-winter-2014-update-on-event-1-scores/ +--- + +Note that scorecards for the first event will not be accurate immediately on Sunday when judging closes; we have the scores in the database, but they're not tagged in a way the system can find them. The bug has been fixed, but I need to go through and manually re-tag the first day's scorecards, and it's going to take a couple of days. This also affect the leaderboard display. I hope to have it fixed over the weekend. Thanks for your patience! diff --git a/content/articles/2014/01/using-install-windowsfeature-with-offline-source/index.md b/content/articles/2014/01/using-install-windowsfeature-with-offline-source/index.md new file mode 100644 index 000000000..b49a09f73 --- /dev/null +++ b/content/articles/2014/01/using-install-windowsfeature-with-offline-source/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2014-01-01-using-install-windowsfeature-with-offline-source/ +title: Using Install-WindowsFeature with Offline Source +authors: + - Don Jones +date: "2014-01-01T17:04:06+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/01/using-install-windowsfeature-with-offline-source/ +--- + +As you probably know, the Install-WindowsFeature (used to be Add-WindowsFeature; that's now an alias to Install-) can add Windows roles and features from PowerShell. If your server doesn't have the installer source on the local disk, then the cmdlet will default to grabbing it from Windows Update - a pain for disconnected servers. Install-WindowsFeature does offer a means of using an alternate local source (like a DVD or file server location), but using it can be a bit hinky. +The cmdlet help indicates that you should point to a Windows image (WIM) file. That'll work, but you can't just provide the path of the WIM. You also need to put a **wim:/** prefix on the front of the path, and a suffix that tells the thing which edition of Windows you're working with, so that it grabs the right bits. For example, **wim:/d:/sources/install.wim:4**. That "4" is the suffix for Datacenter Edition, telling the installer to look at index 4 within the WIM for the necessary feature. + + * 1 is Standard Edition Server Core + * 2 is Standard Edition + * 3 is Datacenter Edition Server Core + * 4 is Datacenter Edition + +Wanted to post this, as there isn't a good example in the docs. +**UPDATE:** I've [bugged this in Connect][1] if you'd like to vote it up, so that the team gains sight of it and can have an opportunity to expand the docs. + + [1]: https://connect.microsoft.com/PowerShell/feedback/details/812950/install-windowsfeature-docs-incomplete diff --git a/content/articles/2014/01/winter-scripting-games-2014-tip-1-avoid-the-aliases/index.md b/content/articles/2014/01/winter-scripting-games-2014-tip-1-avoid-the-aliases/index.md new file mode 100644 index 000000000..3ad80f515 --- /dev/null +++ b/content/articles/2014/01/winter-scripting-games-2014-tip-1-avoid-the-aliases/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2014-01-16-winter-scripting-games-2014-tip-1-avoid-the-aliases/ +title: "Winter Scripting Games 2014 Tip #1: Avoid the aliases" +authors: + - Boe Prox +date: "2014-01-17T03:57:53+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/winter-scripting-games-2014-tip-1-avoid-the-aliases/ +--- + +Having been a judge for the previous 2 Scripting Game competitions as well as competing in the 2 before that, I have seen my share of scripts submitted that didn't quite meet the cut of what I felt were the best scripts. It doesn't mean that they wouldn't work out in the real world in a production environment (Ok, some wouldn't :)), but some were just really hard to read or others were doing things that I wouldn't consider to be a good practice. The first of several articles that I will be doing will start out with the use of aliases in scripts and why this is not necessarily a good idea. +[Click here](http://learn-powershell.net/2014/01/16/winter-scripting-games-2014-tip-1-avoid-the-aliases/) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. diff --git a/content/articles/2014/01/winter-scripting-games-2014-tip-2-use-requires-to-let-powershell-do-the-work-for-you/index.md b/content/articles/2014/01/winter-scripting-games-2014-tip-2-use-requires-to-let-powershell-do-the-work-for-you/index.md new file mode 100644 index 000000000..e421f074b --- /dev/null +++ b/content/articles/2014/01/winter-scripting-games-2014-tip-2-use-requires-to-let-powershell-do-the-work-for-you/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2014-01-20-winter-scripting-games-2014-tip-2-use-requires-to-let-powershell-do-the-work-for-you/ +title: "Winter Scripting Games 2014 Tip #2: Use #Requires to let PowerShell do the work for you" +authors: + - Boe Prox +date: "2014-01-21T03:51:34+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/winter-scripting-games-2014-tip-2-use-requires-to-let-powershell-do-the-work-for-you/ +--- + +In Version 2 of PowerShell, you had the ability to use #Requires –Version 2.0 to ensure that your scripts/functions would only run at a specified PowerShell version to prevent folks running an older version from wondering why things weren't working that well. +In this article, I will show you a couple of new additions to the #Requires statement that will make your life easier when writing functions that require specific pre-requisites rather than coding your own methods +[Click here](http://learn-powershell.net/2014/01/20/winter-scripting-games-2014-tip-2-use-requires-to-let-powershell-do-the-work-for-you/) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article.. diff --git a/content/articles/2014/01/winter-scripting-games-2014/index.md b/content/articles/2014/01/winter-scripting-games-2014/index.md new file mode 100644 index 000000000..a2581328d --- /dev/null +++ b/content/articles/2014/01/winter-scripting-games-2014/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2014-01-14-winter-scripting-games-2014/ +title: Winter Scripting Games 2014 +authors: + - Jonathan Medd +date: "2014-01-14T10:00:48+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/winter-scripting-games-2014/ +--- + +[![PowerShell-Scripting-Games-Logo](https://powershell.org/wp-content/uploads/2014/01/PowerShell-Scripting-Games-Logo.png)](https://powershell.org/wp-content/uploads/2014/01/PowerShell-Scripting-Games-Logo.png) +If you’re looking to learn or improve on existing skills as part of a new year goal and one of those in PowerShell, then you may find it useful to check out the [Winter Scripting Games 2014][1]. When you are looking to improve your scripting skills it can sometimes be tricky if you don’t have a practical problem to solve. By taking part in these games you will have a number of opportunities to apply your skills to _real _problems. +[Click here](http://www.jonathanmedd.net/2014/01/winter-scripting-games-2014.html) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. + + [1]: https://powershell.org/category/announcements/scripting-games/page/2/ diff --git a/content/articles/2014/01/winter-scripting-games-team-formation-in-full-swing/index.md b/content/articles/2014/01/winter-scripting-games-team-formation-in-full-swing/index.md new file mode 100644 index 000000000..3856a2f72 --- /dev/null +++ b/content/articles/2014/01/winter-scripting-games-team-formation-in-full-swing/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2014-01-02-winter-scripting-games-team-formation-in-full-swing/ +title: Winter Scripting Games Team Formation in Full Swing +authors: + - Don Jones +date: "2014-01-02T21:40:34+00:00" +categories: + - Scripting Games +aliases: + - /2014/01/winter-scripting-games-team-formation-in-full-swing/ +--- + +It looks like Team Formation is in full swing, with more than a dozen teams already registered for The Scripting Games: Winter 2014. +Some team tips: + + * If you create a new team, we're assigning it a default team name. You can immediately change that. + * Teams start as public, but we're allowing you to make them private. This removed the team from the "join up" list, and gives you an invite code. You can distribute that invite to anyone you wish to join your team, and they can use it to sign up. + * The public team list shows a time zone offset. This is kind of the average number of minutes between you and the other people on the team. So basically, lower numbers means you're all closer to the same time zone. You don't necessarily NEED to be close; it depends on how you all plan to collaborate. + +Right now, we have about a half-dozen public teams that you can join if you'd like to participate in the Games. Remember, a team must have at least 2 players in order to participate. +I'm loving some of the team names, like **Excessive Use of -Force** and **Troll Bait**. I know several local user groups are forming teams as well, and encouraging their members to join. You're welcome to use email, Twitter, Facebook, LinkedIn, or even standing outside and screaming as ways of recruiting members to your team. +The practice event starts Jan 6. **Please pay attention to PowerShell.org's home page** for late-breaking announcements - if we have a problem, we'll post there to let you know. +Good luck! diff --git a/content/articles/2014/02/_index.md b/content/articles/2014/02/_index.md new file mode 100644 index 000000000..b635c649d --- /dev/null +++ b/content/articles/2014/02/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from February 2014" +description: "PowerShell.org Articles published in February 2014." +--- diff --git a/content/articles/2014/02/closing-the-games/index.md b/content/articles/2014/02/closing-the-games/index.md new file mode 100644 index 000000000..364bebcd3 --- /dev/null +++ b/content/articles/2014/02/closing-the-games/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2014-02-17-closing-the-games/ +title: Closing the Games +authors: + - Richard Siddaway +date: "2014-02-17T22:10:30+00:00" +categories: + - Scripting Games +aliases: + - /2014/02/closing-the-games/ +--- + +The judging is complete for the fourth and final event in the 2014 Winter Scripting Games. +This Games was something very different in that we presented 4 we complex scenarios that were designed to be as close as possible to the type of tasks you may have to perform at work. The solutions required multi-file answers - there's no way you could solve these with a one liner! +All of the teams that submitted entries rose to meet the hardest challenge I've seen in a Scripting Games - and I've taken part of judged all but the first Games. +All entries were scored by 2 judges with the judges being rotated to ensure that all judges scored each team in at least one event. +I'd like to thank the judges for their hard work and also thank the coaching team put together by Mike Robbins - most of all I'd like to thank all of the teams that entered for taking part. +In any Games we have winners and the winning teams from these Games are: +1.Kitton Mittons with 19.375 points (8 of 8 scores received) +2.TecHaH with 18.75 points (8 of 8 scores received) +3.Schnipersons with 18.5 points (8 of 8 scores received) +Congratulations to Kitton Mittons for winning the 2014 Winter Scripting Games - if a representative from the winning team could please contact Don Jones or myself we'll see about getting your prizes to you . +The Games are closed. . +Until the next time. diff --git a/content/articles/2014/02/free-ebook-from-microsofts-scripting-guy-windows-powershell-networking-guide/index.md b/content/articles/2014/02/free-ebook-from-microsofts-scripting-guy-windows-powershell-networking-guide/index.md new file mode 100644 index 000000000..3f8b06448 --- /dev/null +++ b/content/articles/2014/02/free-ebook-from-microsofts-scripting-guy-windows-powershell-networking-guide/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2014-02-19-free-ebook-from-microsofts-scripting-guy-windows-powershell-networking-guide/ +title: "Free eBook from Microsoft's Scripting Guy: Windows PowerShell Networking Guide" +authors: + - Don Jones +date: "2014-02-19T14:55:00+00:00" +categories: + - Books + - PowerShell for Admins +aliases: + - /2014/02/free-ebook-from-microsofts-scripting-guy-windows-powershell-networking-guide/ +--- + +Ed Wilson, Microsoft's Scripting Guy, has created a free ebook, _Windows PowerShell Networking Guide. _It's designed to provide a super-quick PowerShell crash course, and then show you how to  manage various networking scenarios by using the shell. +And it's free! Just click the link to get your copy - and please, tell a friend! +[PoshNetworking.pdf][1] + + [1]: https://powershell.org/wp-content/uploads/2014/02/PoshNetworking.pdf.zip diff --git a/content/articles/2014/02/julies-comments-the-scripting-games-winter-2014/index.md b/content/articles/2014/02/julies-comments-the-scripting-games-winter-2014/index.md new file mode 100644 index 000000000..55fe91e68 --- /dev/null +++ b/content/articles/2014/02/julies-comments-the-scripting-games-winter-2014/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2014-02-19-julies-comments-the-scripting-games-winter-2014/ +title: "Julie's Comments: The Scripting Games – Winter 2014" +authors: + - Don Jones +date: "2014-02-19T22:00:00+00:00" +categories: + - Scripting Games +aliases: + - /2014/02/julies-comments-the-scripting-games-winter-2014/ +--- + +_This post comes to us from Julie Andreacola, one of the members of team Kitton Mittons, who won The Scripting Games - Winter 2014. You're welcome to submit your thoughts about the Games as well!___ +The 2014 Scripting Games are over and once again, it was a terrific experience. This was my third scripting games and I was blown away with all that I learned. +The team approach was very appealing to me as I have been the PowerShell expert at my workplace so I was hoping to find a team where someone knew more than I did as I’m only intermediate in PowerShell skills. I struggled to put a team together from our local PowerShell user group for the practice event, but it just didn’t work out due to the timing and workload of potential team members. I took to Twitter to find a team that had an open spot and found the Kitton_Mittons. +The team was just what I needed. We had no expectations to win and we acknowledged that some weeks, people would not be able to participate. All of the team, but myself was located in Northern Virginia, so we arranged for a Google Hangout each evening around 7 p.m. We also had a shared repository on GitHub. Both of these tools were new for us, but were invaluable for our team collaboration. I think we only had one night with everyone in attendance. The sessions varied from discussion of elements of the script, screen sharing (nice Google Hangout feature), and general geek conversation. Two of the team traveled to Charlotte NC to join me in PowerShell Saturday 007 where we met and gained another team member for the final few events. +The learning benefits happened immediately. The first week I learned more about parameters and using them to validate inputs. I immediately began implementing them in my scripts at work, making them more robust and easier to hand off to others as I was transitioning to a new job. A couple days later, our team made our first module. I knew it was easy, but had never done it and now my script at work had a module. One of our team members made an install script that put the files and modules in the correct places. I realized the advantage of this especially when turning scripts over to users unfamiliar with PowerShell. I was able to take the same installer script and quickly customize for use in my workplace. The following weeks included getting more experience with efficiencies of script blocks and better error checking. Although many of my evenings were being taken up with PowerShell, I found the nightly sessions invaluable as our team leader, Jason Morgan, took the time to teach and explain the more complex aspects of the scripts. +The 2014 Scripting Games exceeded my expectations and truly advanced my skills. I also have a new network of System Center IT Pros. I’m starting a new job this week and I know what I learned and gained over the last 4 weeks will help me to excel in this new position. A big thank you to my team mates, coaches, judges, and the PowerShell community. Learning can be fun! diff --git a/content/articles/2014/02/my-2014-public-powerclass-is-now-open-for-registration/index.md b/content/articles/2014/02/my-2014-public-powerclass-is-now-open-for-registration/index.md new file mode 100644 index 000000000..e1e73bbdb --- /dev/null +++ b/content/articles/2014/02/my-2014-public-powerclass-is-now-open-for-registration/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2014-02-03-my-2014-public-powerclass-is-now-open-for-registration/ +title: MY 2014 Public POWERCLASS is Now Open for Registration +authors: + - Don Jones +date: "2014-02-03T18:44:02+00:00" +categories: + - Training +aliases: + - /2014/02/my-2014-public-powerclass-is-now-open-for-registration/ +--- + +I'm going to be running a 3-day POWERCLASS April 2, 3, and 4 near Raleigh-Durham, NC! You can get [full details on my company's website][1], including pricing and class descriptions. +Don't leave near Raleigh-Durham? Well, it's a fun place, and not that expensive to visit. More importantly, I'm _not_ going to be doing a huge road-show and visiting a bunch of cities. Right now, my schedule is almost full through _September, _so this may well be the only public class I do in 2014. It might therefore be worth your while to take a short trip! +The class will be VERY limited in size - just 16 students, max, and I'll be happy with a bunch fewer. This is a _hardcore_ class. We're going to assume you've conquered the basics of Windows PowerShell and that you're looking to implement best practices, start using PowerShell for real production tasks, and learn more about PowerShell performance and troubleshooting. It's a "bring your own laptop" hands-on class, too, so you'll get tons of hands-on time with an instructor who really cares about what you learn. +This is all-new material, and you won't find it anyplace else. It's applicable to v2 through v4, although some things - we WILL be covering DSC, for example - only apply to specific versions (and you'll learn which is which as we go). +It's the best PowerShell class I could come up with - I hope you'll join me. + + [1]: http://events.concentratedtech.com diff --git a/content/articles/2014/02/phillyposh-02062014-meeting-summary-and-presentation-materials/index.md b/content/articles/2014/02/phillyposh-02062014-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..d91cc5a31 --- /dev/null +++ b/content/articles/2014/02/phillyposh-02062014-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2014-02-09-phillyposh-02062014-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 02/06/2014 meeting summary and presentation materials +authors: + - John Mello +date: "2014-02-10T01:26:38+00:00" +aliases: + - /2014/02/phillyposh-02062014-meeting-summary-and-presentation-materials/ +--- + +Art Beane gave a presentation using PowerShell to automate applications using [COM][1] . A [copy of his presentation materials][2] are available on our [GitHub Repository][3]. Due to recording issues, we do not [We do have a recording][4] of this meeting on our [YouTube channel.][5] + + [1]: http://www.microsoft.com/com/default.mspx + [2]: https://github.com/PhillyPoSH/2014-02 + [3]: https://github.com/PhillyPoSH + [4]: http://youtu.be/Q0wFY2JPSMg + [5]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014/02/powershell-saturday-007-in-review/index.md b/content/articles/2014/02/powershell-saturday-007-in-review/index.md new file mode 100644 index 000000000..f011f6c15 --- /dev/null +++ b/content/articles/2014/02/powershell-saturday-007-in-review/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2014-02-13-powershell-saturday-007-in-review/ +title: PowerShell Saturday 007 in review +authors: + - Terri Donahue +date: "2014-02-13T16:55:44+00:00" +aliases: + - /2014/02/powershell-saturday-007-in-review/ +--- + +PowerShell Saturday was a huge success. Thank you to all of the speakers, event organizers, and most of all attendees for making it a great day. A new Iron Scripter was crowned and received this awesome trophy. + +![Embedded image permalink](https://pbs.twimg.com/media/Bf9xA3zCAAARsYk.jpg) + +Congrats to Stephen Owen aka @SRed13! + +There were many great sessions for both beginners and advanced scripters. Some of the speakers even posted slides, videos, and scripts of their presentations. Check out Brian Wilhite’s, @bwhilhite1979, ‘CIM’narios [downloads](http://t.co/SZdsUBcOdV) from the event. Ashley McGlone, @GoateePFE, posted his beginner sessions including slides, video, and the coveted scripts [here](http://t.co/y5VaRNA3i5). + +If you attended and haven’t requested your free ebook from O’Reilly (the flyer was in the goody bag), you might be surprised by the list that is available. + +Until next time, Happy Scripting! diff --git a/content/articles/2014/02/problems-with-windows-live-logins/index.md b/content/articles/2014/02/problems-with-windows-live-logins/index.md new file mode 100644 index 000000000..29175ea8e --- /dev/null +++ b/content/articles/2014/02/problems-with-windows-live-logins/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2014-02-09-problems-with-windows-live-logins/ +title: Problems with Windows Live Logins +authors: + - Don Jones +date: "2014-02-09T20:39:47+00:00" +categories: + - Announcements +aliases: + - /2014/02/problems-with-windows-live-logins/ +--- + +I know we're currently seeing folks having a problem logging into the site by means of Windows Live accounts. Unfortunately, the problem is on Microsoft's end - we've submitted a ticket. +In the meantime, I want to point out a neat feature that can help: You can log in using a different social account, and if it or you provides the same e-mail address that you use with your Live account, our site will link the two. From then on you can log into the same profile on our site using either social account. Makes a nice backup. +For this linking to work, you (a) need to know the e-mail address that you use to log into Windows Live. You then need to (b1) log in using a social account that has the same e-mail address for you, or (b2) log in using a social account that doesn't provide an e-mail to us. In the case of (b2), we'll then prompt you for an e-mail address, and you provide the same one you use to log into Windows Live. That's how we link your profile to the new social account. +Social accounts that fall into the (b2) category include BlogSpot.com, Twitter, and LiveJournal. +We very much want to get Windows Live working again. We're working on it, and you can contact our admin@ email alias if you think you have any clues for helping. diff --git a/content/articles/2014/02/scripting-games-event-1-close/index.md b/content/articles/2014/02/scripting-games-event-1-close/index.md new file mode 100644 index 000000000..54aa579bf --- /dev/null +++ b/content/articles/2014/02/scripting-games-event-1-close/index.md @@ -0,0 +1,27 @@ +--- +url: /articles/2014-02-03-scripting-games-event-1-close/ +title: Scripting Games event 1 close +authors: + - Richard Siddaway +date: "2014-02-03T11:57:25+00:00" +categories: + - Scripting Games +aliases: + - /2014/02/scripting-games-event-1-close/ +--- + +Event 1 is over and the judging is complete. +First off congratulations to every team that posted an entry - the events in these games are different and we've tried to up the challenge level to account for it being a team based. +The high scorers for event 1 are: +1.Troll Bait with 22 points +2.Kitton Mittons with 22 points +3.Aliens with 20 points +4.PhillyPosh with 20 points +5.Thanks4TheInvite with 17 points +6.TecHaH with 17 points +7.Bengals with 17 points +8.TPUG THUGS with 16 points +9.DuPSOGD2 with 16 points +10.Hogans Heroes with 16 points +Congratulations to them. +Good luck to everyone with the remaining events diff --git a/content/articles/2014/02/testing-for-the-presence-of-a-registry-key-and-value/index.md b/content/articles/2014/02/testing-for-the-presence-of-a-registry-key-and-value/index.md new file mode 100644 index 000000000..83411986b --- /dev/null +++ b/content/articles/2014/02/testing-for-the-presence-of-a-registry-key-and-value/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2014-02-10-testing-for-the-presence-of-a-registry-key-and-value/ +title: Testing for the Presence of a Registry Key and Value +authors: + - Jonathan Medd +date: "2014-02-10T17:41:19+00:00" +categories: + - Scripting Games +aliases: + - /2014/02/testing-for-the-presence-of-a-registry-key-and-value/ +--- + +There are a number of different ways to test for the presence of a registry key and value in PowerShell. Here’s how I like to go about it. We’ll use an example key **HKLM:\SOFTWARE\TestSoftware** with a single value **Version**: +[Click here](http://www.jonathanmedd.net/2014/02/testing-for-the-presence-of-a-registry-key-and-value.html) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. diff --git a/content/articles/2014/02/up-next-nick-howell-from-netapp-talking-about-software-defined-datacenter/index.md b/content/articles/2014/02/up-next-nick-howell-from-netapp-talking-about-software-defined-datacenter/index.md new file mode 100644 index 000000000..f96f4a841 --- /dev/null +++ b/content/articles/2014/02/up-next-nick-howell-from-netapp-talking-about-software-defined-datacenter/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2014-02-25-up-next-nick-howell-from-netapp-talking-about-software-defined-datacenter/ +title: "Up Next: Nick Howell from NetApp talking about software defined datacenter" +authors: + - ScriptingWife +date: "2014-02-25T16:22:28+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/02/up-next-nick-howell-from-netapp-talking-about-software-defined-datacenter/ +--- + +This Thursday, Feb 27, 2014 join us with guest, Nick Howell, (@that1guynick) from NetApp as the discussion will be software defined datacenter. See you at 9:30PM EST diff --git a/content/articles/2014/02/using-powershell-parameter-validation-to-make-your-day-easier/index.md b/content/articles/2014/02/using-powershell-parameter-validation-to-make-your-day-easier/index.md new file mode 100644 index 000000000..67b96a1ca --- /dev/null +++ b/content/articles/2014/02/using-powershell-parameter-validation-to-make-your-day-easier/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2014-02-04-using-powershell-parameter-validation-to-make-your-day-easier/ +title: Using PowerShell Parameter Validation to Make Your Day Easier +authors: + - Boe Prox +date: "2014-02-05T03:59:24+00:00" +categories: + - Scripting Games +aliases: + - /2014/02/using-powershell-parameter-validation-to-make-your-day-easier/ +--- + +A number of entries in the Winter Scripting Games use parameter validation, but some that I have seen may not be using it correctly or to its full potential. +Writing functions or scripts require a variety of parameters which have different requirements based on a number of items. It could require a collection, objects of a certain type or even a certain range of items that it should only accept. +The idea of parameter validation is that you can specify specific checks on a parameter that is being used on a function or script. If the value or collection that is passed to the parameter doesn’t meet the specified requirements, a terminating error is thrown and the execution of the code halts and gives you an error stating (usually readable) the reason for the halt. This is very powerful and allows you to have much tighter control over the input that is going into the function. You don’t want to have your script go crazy halfway into the code execution because the values sent to the parameter were completely off of the wall. +[Click here](http://learn-powershell.net/2014/02/04/using-powershell-parameter-validation-to-make-your-day-easier/) to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. diff --git a/content/articles/2014/02/what-should-the-scripting-games-look-like-next-time/index.md b/content/articles/2014/02/what-should-the-scripting-games-look-like-next-time/index.md new file mode 100644 index 000000000..67e0db46b --- /dev/null +++ b/content/articles/2014/02/what-should-the-scripting-games-look-like-next-time/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2014-02-17-what-should-the-scripting-games-look-like-next-time/ +title: What Should The Scripting Games Look Like Next Time? +authors: + - Don Jones +date: "2014-02-17T18:17:14+00:00" +categories: + - Scripting Games +aliases: + - /2014/02/what-should-the-scripting-games-look-like-next-time/ +--- + +If you've been following along with The Scripting Games over the past couple of iterations, you know that we've been trying some different, new things. This Winter Games, we did a team-based series of events that threw some _really_ complex scenarios at you. However, we know some folks would like to see the next Summer Games include a less-complex track that perhaps includes a focus on one-liners. +(Not that one-liners are an essential part of a work environment, but they're fun and a good competitive thing - this is _games_, after all.) +So we're looking for your ideas. Drop a comment, and tell us how you think the next Games should be structured. +**However, before you comment, **understand that judging by official, expert judges gets _extremely_ difficult. Multiple 10 events across 250 entries and you've got a _metric butt __tonne_ of work for our volunteers to do. Quite frankly, it's unlikely we'll be able to provide a score-per-entry with that kind of volume. The folks who do judging just can't take that much time off work. Seriously, even if a judge only had to look at an entry for 2 minutes, that can easily be more than 80 hours of work to look at every entry. It just isn't do-able. +So, in your comment, include some thoughts on what you'd like to see for the judging/scoring side as well, keeping in mind the desire of judges to also have family lives and jobs. What's your real goal in participating in the Games? To get _community_ feedback (comments) on what you've done? We can arrange that. Is it perhaps educational to have judges pick out "noteworthy" (both good and bad) entries and comment on them, as a learning guide? Or are you solely after having a "known" expert offer commentary on your entry - which isn't something we can guarantee if there are a large number of entries? +Help us understand what you're in it for, and give us some ideas for creating a Summer event that's _fun, _as well as educational. diff --git a/content/articles/2014/03/_index.md b/content/articles/2014/03/_index.md new file mode 100644 index 000000000..dada40b3d --- /dev/null +++ b/content/articles/2014/03/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from March 2014" +description: "PowerShell.org Articles published in March 2014." +--- diff --git a/content/articles/2014/03/april-3-2014-virtual-powershell-user-group-meeting/index.md b/content/articles/2014/03/april-3-2014-virtual-powershell-user-group-meeting/index.md new file mode 100644 index 000000000..02c838ca8 --- /dev/null +++ b/content/articles/2014/03/april-3-2014-virtual-powershell-user-group-meeting/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2014-03-29-april-3-2014-virtual-powershell-user-group-meeting/ +title: April 3, 2014 Virtual PowerShell User Group meeting +authors: + - ScriptingWife +date: "2014-03-29T21:11:12+00:00" +categories: + - Events +aliases: + - /2014/03/april-3-2014-virtual-powershell-user-group-meeting/ +--- + +PowerShell MVP Joel Bennett will present about authoring PowerShell modules, including tips, tricks and best practices for writing modules and functions that work well together (and behave properly in the pipeline) ... and... +NOTE: if you have QUESTIONS about PowerShell modules which you would like addressed, you can start adding them to the Q&A bar (and voting to rank them) already. Just click the "Q&A" icon overlay on the video placeholder: +[https://plus.google.com/hangouts/onair/watch?hid=hoaevent%2Fcval1ku1pro5uijqk4fnmfk45lo&hl=en&t=0](https://plus.google.com/hangouts/onair/watch?hid=hoaevent%2Fcval1ku1pro5uijqk4fnmfk45lo&hl=en&t=0) + + + * * diff --git a/content/articles/2014/03/building-desired-state-configuration-custom-resources/index.md b/content/articles/2014/03/building-desired-state-configuration-custom-resources/index.md new file mode 100644 index 000000000..9d9d82246 --- /dev/null +++ b/content/articles/2014/03/building-desired-state-configuration-custom-resources/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2014-03-13-building-desired-state-configuration-custom-resources/ +title: Building Desired State Configuration Custom Resources +authors: + - Steven Murawski +date: "2014-03-14T03:07:14+00:00" +categories: + - PowerShell for Admins + - Tutorials +aliases: + - /2014/03/building-desired-state-configuration-custom-resources/ +--- + +Now that we've suitably rested, let's get back to working with Desired State Configuration.  Now, there are some basic features to work with that ship by default and the [PowerShell team has been blogging some additional resources](http://blogs.msdn.com/b/powershell/archive/2013/12/26/holiday-gift-desired-state-configuration-dsc-resource-kit-wave-1.aspx), but in order to do some really interesting thing with DSC, we'll need to create our own resources. + +## The High Points + + * [Overview ](https://powershell.org/2013/10/02/building-a-desired-state-configuration-infrastructure/) + * [Configuring the Pull Server (REST version)](https://powershell.org/2013/10/03/building-a-desired-state-configuration-pull-server/) + * Creating Configurations ([one of two](https://powershell.org/2013/10/08/building-a-desired-state-configuration-configuration/), [two of two](https://powershell.org/2013/10/14/building-a-desired-state-configuration-configuration-part-2/)) + * [Configuring Clients](https://powershell.org/2013/11/06/configuring-a-desired-state-configuration-client/) + * Building Custom Resources (this post) + * Packaging Custom Resources + * Advanced Client Targeting + +## The DSC Resource Structure + +DSC resources are (at their most basic) a PowerShell module.  These modules are augmented by a schema.mof file (we'll get into that more in a minute or two).  These modules expose three main functions, Get-TargetResource, Set-TargetResource, and Test-TargetResource.  All three functions should share the same set of parameters. + +### Test-TargetResource + +Test-TargetResource validates whether your resource is currently in the desired state based on the parameters provided.  This function returns a boolean, $true if the resource is in the state described or $false if not. + +### Set-TargetResource + +Set-TargetResource is the workhorse in this module.  This is what will get things into the correct state.  The convention is to support one parameter called Ensure that can take two values, "Present" or "Absent" to describe whether or not a resource should be applied or removed as described. +(Here's a little trick.. if you write break your Test-TargetResource into discrete functions, you can use those functions to only run the portions of Set-TargetResource that you need to!) + +### Get-TargetResource + +This is currently the least useful of the commands, but if experience has taught me anything, it'll likely have an a growing use case over time. +Get-TargetResource returns the current state of the of the resource, returning a hash table of properties matching the parameters supplied to the command. + +### Exporting Commands + +This module should explicitly export these commands via either Export-ModuleMember or a module manifest.  If you don't, Import-DscResource will have trouble loading the resources when you try to generate a configuration (it's not a problem for running a configuration, just the generation part). + +### The Managed Object Framework (MOF) Schema + +The last piece of the DSC Resource is a schema file that maps the parameters for the command to a CIM class that can be registered in WMI.  This allows us to serialize the configuration parameters to a standards-based format and allows the Local Configuration Manager to marshal the parameters back to call the PowerShell functions for the phase that the LCM is in.  This file is named modulename.schema.mof. +There is no real reason to write a schema.mof file by hand, both the [DSC Resource Designer](https://github.com/PowerShellOrg/DSC/tree/master/Tooling/cDscResourceDesigner) and my [New-MofFile](https://github.com/PowerShellOrg/DSC/blob/master/Tooling/DscDevelopment/New-MofFile.ps1) function can help generate that function.  The one key thing to be aware of in the schema.mof is that there is an attribute at the top of each of the MOF classes that denotes a friendly name, which is the identifier you will use in a configuration to specify a resource. + + +`[ClassVersion("1.0.0"), FriendlyName("Pagefile")] +`## How To Structure a Module With Resources + +To get a good idea of the resource structure, we can look at [the StackExchangeResources module in the PowerShell.Org GitHub repository](https://github.com/PowerShellOrg/DSC/tree/master/Resources/StackExchangeResources).  There is a base module - StackExchangeResources, which has a module metadata file (required, you'll see why in a minute).  In that module, we need a folder DSCResources.  Our custom resource will be placed under that folder. +The reason we need a module metadata file for the base module, is when resources from that module are used in a configuration, the generated configuration MOF files will reference the version of the base module (and that specific version is required on the node where the resource will be applied). +Next up, we'll talk about how we package our resources to be distributed by a pull server. diff --git a/content/articles/2014/03/charlotte-powershell-user-group-meeting-cancelled-this-week-3614/index.md b/content/articles/2014/03/charlotte-powershell-user-group-meeting-cancelled-this-week-3614/index.md new file mode 100644 index 000000000..c7ed660af --- /dev/null +++ b/content/articles/2014/03/charlotte-powershell-user-group-meeting-cancelled-this-week-3614/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2014-03-03-charlotte-powershell-user-group-meeting-cancelled-this-week-3614/ +title: Charlotte PowerShell User Group Meeting cancelled this week 3/6/14 +authors: + - ScriptingWife +date: "2014-03-04T04:00:28+00:00" +aliases: + - /2014/03/charlotte-powershell-user-group-meeting-cancelled-this-week-3614/ +--- + +Sorry but we have to cancel the User group meeting this month in Charlotte on 3/6/14 we will meet again on April 3, 2014. diff --git a/content/articles/2014/03/code-from-this-weeks-oslo-class/index.md b/content/articles/2014/03/code-from-this-weeks-oslo-class/index.md new file mode 100644 index 000000000..2e0291073 --- /dev/null +++ b/content/articles/2014/03/code-from-this-weeks-oslo-class/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2014-03-26-code-from-this-weeks-oslo-class/ +title: "Code from this week's Oslo class" +authors: + - Don Jones +date: "2014-03-26T12:04:42+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/03/code-from-this-weeks-oslo-class/ +--- + +[OSTools][1] - download for my class in Oslo this week. +Here's some more: [share][2] + + [1]: https://powershell.org/wp-content/uploads/2014/03/OSTools.zip + [2]: https://powershell.org/wp-content/uploads/2014/03/share.zip diff --git a/content/articles/2014/03/going-deeper-on-dsc-resources/index.md b/content/articles/2014/03/going-deeper-on-dsc-resources/index.md new file mode 100644 index 000000000..496c74bd5 --- /dev/null +++ b/content/articles/2014/03/going-deeper-on-dsc-resources/index.md @@ -0,0 +1,56 @@ +--- +url: /articles/2014-03-19-going-deeper-on-dsc-resources/ +title: Going Deeper on DSC Resources +authors: + - Steven Murawski +date: "2014-03-19T14:43:37+00:00" +categories: + - Tips and Tricks +aliases: + - /2014/03/going-deeper-on-dsc-resources/ +--- + +Desired State Configuration is a very new technology and declarative configuration management is a very young space yet.  We (Microsoft and the community) are still figuring out the best structure for resources, composite configurations, and other structures. +That said, there are certain viewpoints that I've come to, either from hands on experience or in watching how other communities (like the Puppet community or Chef community) handle similar problems. + +# How Granular Should I Get? + +There is no absolute answer. + +## Very, Very Granular + +Resources should be very granular in the abstract, but in practice, you may need to make concessions to improve the user experience. +For example, when I configure an IP address for a network interface, I can supply a default gateway. A default gateway is a route, which is separate from the interface and IP address, but in practice they tend to be configured together. In this case, it might make sense to offer a resource that can configure both the IP address and the default gateway. +I tend to think resources should be very granular. We can use composite resources to offer higher level views of the configuration. If I were implementing a resource to configure a network adapter's IP and gateway, I would have a route resource, an IP address resource, and probably a DNS server setting resource. I would then also have a composite resource to deal with the default use case of configuring a network adapter's IP address, gateway, and DNS servers together. +The benefit of doing it this way is that I still have very discrete, flexible primitives (the IP address resource, the route resource, and the DNS server resource). I can then leverage the route resource to create static routes, or use them directly to more discretely configure the individual elements. + +## Unless... + +You have some flow control that you need to happen based on the state of the client or the environment.  Since your configuration is statically generated and is declarative, there are no flow control statements in the configuration MOF document.  That means that any logic that needs to occur at application time +Unfortunately, this leads to the need to re-implement common functionality.  For example, if I have a service that I need to be able to update the binary (not via an MSI), I need to basically re-implement parts of the file and service resource.  This use case requires a custom resource because I need to stop the service before I can replace the binary, but I don't want to stop the service with every consistency check if I don't need to replace the file. +This scenario begs for a better way to leverage existing resources in a cross resource scenario (kind of like RequiredModules in module metadata), but there isn't a clean way to do this **that I've found** (but I'm still looking!). + +## My Recommendation + +So for most cases, I would try to use existing resources or build very granular custom resources.  If I need to offer a higher level of abstraction, I'd escalate to putting a composite resource on top of those granular resources.  Finally, if I need some flow control or logic for a multistep process, I'd implement a more comprehensive resource. + +# What Should I Validate? + +Now that we are seeing some more resources in the community repository (especially thanks to the waves of resources from the Powershell Team!), we are seeing a variety of levels of validation being performed. +I think that the Test-TargetResource function should validate all the values and states that Set-TargetResource can set. +An example of where this isn't happening currently is in the [cNetworking resource for PSHOrg_cIPAddress](https://github.com/PowerShellOrg/DSC/blob/master/Resources/cNetworking/DSCResources/PSHOrg_cIPAddress/PSHOrg_cIPAddress.psm1).  I'm going to pick on this resource a bit, since it was the catalyst for this discussion. +The resource offers a way to set a default gateway as well as the IP address.  So what happens if after setting the IP and default gateway, someone changes the default gateway to point to another router? +In this case, the validation is only checking that the IP address is correct.  DSC will never re-correct the gateway and our DSC configuration document (the MOF file) is no longer an accurate representation of the system state, despite the fact that the Local Configuration Manager (LCM) will report that everything matches. +**This is BAD!!**  If a resource offers an option to configure a setting, that setting should be validated by Test-TargetResource, otherwise that setting should be removed from the resource.  The intent of DSC is to control configuration, including changes over time and return a system to the desired state.  If we ignore certain settings, we weaken our trust in the underlying infrastructure of DSC. + +# What should I return? + +The last element I'm going to tackle today is what should be returned from Get-TargetResource.  I've been on the fence about this one.  Like with Test-TargetResource, there are a number of implementation examples that vary in how they come up with the return values. +Currently, I don't see a ton of use for Get-TargetResource and it doesn't impact the Test and Set phases of the LCM, so it's been easy to ignore.  This is bad practice (shame on me). +Here's my thoughts around Get-TargetResource.  It should return the currently configured state of the machine.  Directly returning parameters passed in is misleading. +Going back to the PSHOrg_cIPAddress from the earlier example, it directly returns the default gateway from the parameter, regardless of the configured gateway.  This wouldn't be so bad if the resource actually checked the gateway during processing and could correct it if it drifted.  But it does not check the gateway, so Get-TargetResource could be lying to you.  T +he most consistent result of Get-TargetResource would be retrieving the currently configured settings. + +# What's left? + +What other burning questions do you have around DSC?  Let's keep talking them through either in the [forums](https://powershell.org/forums/forum/windows-powershell-qa/) or in the comments here. diff --git a/content/articles/2014/03/jobs-powershell-scripter-wanted/index.md b/content/articles/2014/03/jobs-powershell-scripter-wanted/index.md new file mode 100644 index 000000000..b5067c530 --- /dev/null +++ b/content/articles/2014/03/jobs-powershell-scripter-wanted/index.md @@ -0,0 +1,43 @@ +--- +url: /articles/2014-03-05-jobs-powershell-scripter-wanted/ +title: "Jobs: PowerShell Scripter Wanted" +authors: + - Don Jones +date: "2014-03-05T14:47:19+00:00" +categories: + - Announcements +aliases: + - /2014/03/jobs-powershell-scripter-wanted/ +--- + +Told you this would eventually start happening ;). Matt Sullivan of Strategic Staffing contacted me with the following job posting; if you're interested, reply to him directly at 781-347-5220. +... +My name is Matt Sullivan and I am a member of the Strategic Staffing Division at NTT DATA Inc., the sixth largest global IT integrator. We have more than 75,000 employees worldwide, offices in 40 different countires, and we are owned by Nippon Telegraph and Telephone, the largest telecommunications company in the world. +I am currently seeking a Scripting Engineer - PowerShell to join our team in Burlington, VT. The job description can be found below for your review. Please note that your resume will not be submitted to the client until we have discussed your background. +Title: PowerShell Scripter +Location: Burlington, VT +Duration: 1 year +Our Client has a number of projects in flight that require scripting (PowerShell) as part of their automation solution in our Windows environment. This position would require that the contractor meet with other project members, to gather requirements, build, test and document the scripts. He/she will then hand this work off to another vendor to be implemented on the scheduling platform (BMC's Control-M, a SaaS hosted by Client). +As a second priority, the contractor will work with various departments, to examine an existing body of scripts/jobs which also in our Windows environment. These jobs, having been prioritized by the client, will be converted, if necessary, to PowerShell, tested and documented before being turned over to Client. This body of work is not expected to be completed in the time allotted as it is very large. Our goal is to address as many as possible working from the highest priority down. +PowerShell is the scripting language of choice. A few years at a minimum is required including experience with .NET remoting. +Expert level in Powershell +3+ years experience +Powershell V2 and/or V3 +Solid understanding of Powershell Remoting +Business Analyst skills +Experience in requirements gathering +Testing methodologies, test plan development +Strong documentation skills +We are dedicated to working with a wide range of IT consultants, as an example corp to corp and W-2 hourly contractors; and we offer competitive benefits for candidates applying as W-2 contractors. +Benefits available for W-2 contractors only: +Medical +Dental +Vision +Caremark Prescription +401(k) +W-2 Employee Assistance Program +Accident Insurance- Workers’ Compensation Insurance and Business Travel Insurance +COBRA +Healthcare Reimbursement Account Programs +Credit Union +Corporate Mortgage Program diff --git a/content/articles/2014/03/my-dsc-demo-class-setup-routine/index.md b/content/articles/2014/03/my-dsc-demo-class-setup-routine/index.md new file mode 100644 index 000000000..8d61e4870 --- /dev/null +++ b/content/articles/2014/03/my-dsc-demo-class-setup-routine/index.md @@ -0,0 +1,27 @@ +--- +url: /articles/2014-03-17-my-dsc-demo-class-setup-routine/ +title: My DSC Demo-Class Setup Routine +authors: + - Don Jones +date: "2014-03-17T22:52:26+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/03/my-dsc-demo-class-setup-routine/ +--- + +I think I've gotten my DSC classroom and demo setup ready. Understand that this isn't meant to be production-friendly - it doesn't automate some stuff because I **want** to cover that stuff in class by walking through it. But, I thought I'd share. +I've basically made an ISO that I can carry into class, attach to a Win2012R2 VM and a Win81 VM, and run students through. The server VM is a DC in "company.pri" domain, and the client VM belongs to that domain. +In the root of the ISO are these scripts: [ISO_Root][1] (unzip that). Students basically just open PowerShell, set the execution policy to RemoteSigned or Unrestricted, and then run **SetupLab -DVD D:**, replacing "D:" with the drive letter of the VM's optical drive. The script isn't super-intelligent since I demo it at the same time; it needs the colon after the drive letter. +In a folder called DSC_Modules, I add the following DSC modules (unzipped): xActiveDirectory, xComputerManagement, xDscDiagnostics, xDscResourceDesigner, xNetworking, xPSDesiredStateConfiguration_1.1, xSmbShare, xSqlPs, xWebAdministration. +In a folder called DSC_Pull_Examples, I include these scripts: [DSC_Pull_Examples][2] (unzip that). +In a folder called eBooks, I include these files: [eBooks][3] (unzip that). Those get used in a lot of the demos I do, so I have the lab setup scripts copy over some script modules. +In a folder called Help, I have a file called Help.zip. This contains everything downloaded by the Save-Help command in PowerShell. The Setup script unzips this into the VM and then runs Update-Help against it, so the VM doesn't need to be Internet-connected. +In a folder called Hotfix, I have the Windows8.1-KB2883200-x64.msu hot fix installer. I include the 32-bit version also, just in case, but my script doesn't use it. +In a folder called Installers, I have installers for PrimalScript, PowerShell Studio, and SQL Server Express with Advanced Services. Again, those get used a lot in my classes, but the setup script doesn't rely on them. +Finally, in a folder called sxs, I have the contents of the Windows 8.1 installation media's \Sources\sxs folder. Some of the things my setup script does - like adding .NET Framework 3.5 so SQL Server 2012 will work - rely on features that aren't in a Win8.1 VM, normally. Because I don't want to rely on the Internet, I include this source so I can install new features from it. +This is all pretty specific to the way I run classes, but if there's any use you can make of it, feel free. + + [1]: https://powershell.org/wp-content/uploads/2014/03/ISO_Root.zip + [2]: https://powershell.org/wp-content/uploads/2014/03/DSC_Pull_Examples.zip + [3]: http://files.concentratedtech.com/ebooks.zip diff --git a/content/articles/2014/03/phillyposh-03062014-meeting-summary-and-presentation-materials/index.md b/content/articles/2014/03/phillyposh-03062014-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..458e55187 --- /dev/null +++ b/content/articles/2014/03/phillyposh-03062014-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2014-03-13-phillyposh-03062014-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 03/06/2014 meeting summary and presentation materials +authors: + - John Mello +date: "2014-03-14T01:57:16+00:00" +aliases: + - /2014/03/phillyposh-03062014-meeting-summary-and-presentation-materials/ +--- + +* [Bartek Bielawski][1] gave a presentation entitled "OMI : PowerShell Everywhere". During his talk Bartek discussed and gave examples of how to CIM cmdlets and CDXML commands to manage everything in your datacenter. A [copy of his presentation materials][2] are available on our [GitHub Repository][3]. + * We then had a script club where various members presented scripts they were working on + * A [recording of this meeting][4] has been posted to our [YouTube channel][5]; please note that there are some audio issues near the end of the recording. + + [1]: https://twitter.com/bielawb + [2]: https://github.com/PhillyPoSH/2014-03 + [3]: https://github.com/PhillyPoSH + [4]: https://www.youtube.com/watch?v=Aw-rnpOk94Q + [5]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014/03/the-dsc-conversation-continues/index.md b/content/articles/2014/03/the-dsc-conversation-continues/index.md new file mode 100644 index 000000000..062c5d201 --- /dev/null +++ b/content/articles/2014/03/the-dsc-conversation-continues/index.md @@ -0,0 +1,41 @@ +--- +url: /articles/2014-03-05-the-dsc-conversation-continues/ +title: The DSC Conversation Continues +authors: + - Don Jones +date: "2014-03-05T18:58:37+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/03/the-dsc-conversation-continues/ +--- + +Some [lovely conversation on DSC over on Reddit...][1] with some I wanted to perhaps offer an opinion on. From what I've seen, these are very common sentiments, and they definitely deserve... not argument or disagreement, but perhaps an alternate viewpoint. I'm not suggesting the commenters are wrong - but that maybe they're not considering the entire picture. + +> Certainly if you work with a superset of MS OSs (i.e. you do Linux also), then Puppet or something like it seems like a no brainer. In fact, that is what we're doing now. Puppet has powershell modules you can install for instance. Personally, I still feel like Powershell is overrated except for small snippets of that's how something is exposed. Puppet can run powershell commands. AutoIT can run powershell commands... I just don't see value in Powershell today. + +The point is that, until PowerShell, there were no PowerShell commands. Microsoft was incredibly inconsistent about providing automation-friendly commands of any kind. They could have gone down the path of building command-line tools for Cmd.exe; they didn't. The point of PowerShell is that Microsoft forced themselves to build commands. Now, if you run those from AutoIt, or Puppet, or whatever else - that's cool. PowerShell is an API, not a tool. Whatever tool you use to access that API is just dandy. Without the API, the tools are useless. + +> As to DSC - I'm really confused. Why is this separate from Group Policy again? Why is it better? Or is MS giving up on Group Policy as needing a total re-write? + +The advantage of Group Policy over DSC, today, is that GP has richer ability to target computers based on OU membership, WMI criteria, etc. Today, DSC targeting isn't that flexible. On the other hand, GP is extremely difficult to extend, since client extensions are native code. GP was built to manage the registry, although it's been extended to do more. DSC is built to do whatever PowerShell (and, via CIM, native code) can touch. My opinion? Yeah, DSC will obviate GP over time. Not instantly. + +> Specifically, as I've been rolling out Puppet across Windows and Linux, I see that in some ways, it brings the computer GPO aspect to Linux, and duplicates it a bit on Windows. +> Anyway, I won't be surprised to see someone start writing DSC modules in Puppet, because you'll want your config management to work across your platforms. And MS is kind of late to the game here - many many people have lots of knowledge already in Puppet, Chef etc... + +The guys on the PowerShell team love Chef and Puppet. I think you're confusing "api" and "tool." There are two pieces to DSC: Piece one is the ability of PowerShell to read a configuration script and produce a MOF. Piece two is the ability of a Windows computer to receive that MOF and reconfigure itself accordingly. Any tool can do piece one. Use Puppet to produce the MOF. Use Puppet to control which MOFs get sent where. That's the _intent. _But Microsoft takes a big burden off the Puppet developers by having Windows _know what to do with the MOF. _Yeah, MS is late to the game. No question. But they're _joining_ the game, not reinventing it. What they're doing works with what everyone else is already doing. + +> I would personally carry the sentiment even further and say that investing the bulk of your effort in DSC over something like Puppet would be needlessly tying your own hands. Why focus on something that's platform specific when there is a good cross-platform alternative. Don't put all your eggs in one basket as it were. + +Wrong. It isn't an either-or thing. DSC's introduction at TechEd 2013 included a demo of Puppet (or was it Chef?) being used to send configurations to Windows - much more easily, because with DSC, Windows natively knew what to do with them. If you've _got_ tooling like Puppet, _use it. _DSC is just making Windows work better with it. The whole _point_ of DSC is that it plays the cross-platform game _everyone else has already been playing. _ +Purely on the Windows side, the need to focus on DSC is more about developing the DSC _resources_ you need, so that you can send a MOF (from Puppet, say) to a Windows computer, and that Windows computer will know how to configure everything _you_ need configured. Microsoft will continue to produce resources for core OS and server application stuff; any LOB stuff is what you'd be focusing on. +Heck, even in a pure-Windows environment, with cross-platform off the table, Puppet provides _tooling__ _that DSC does not. You're going to need those tools, whether it's Puppet, some future System Center thing, or whatever. DSC is a mid-level API, not a tool. + +> Configuration managment does seem to be the future -- I just don't agree completely with the author's point of a view that it will have to be DSC. + +On Windows, DSC will be the underlying API that your configuration management tool talks to. DSC isn't a configuration management tool. DSC bridges the gap between a text-based MOF and the bajillion proprietary protocols MS uses internally in their products. Remember, on Linux, it's easier - everything already lives in a text file of some kind, right (oversimplifying, I know, but still)? In Windows, config information lives _everyplace_; DSC's main job is to bridge the gap. DSC doesn't provide _management_ of what configuration goes where; it just provides the implementation mechanism. In PowerShell, there's a primitive ability to write configurations, because MS has to give you something, but yeah... I think most organizations would benefit from good tooling atop that. +I think this entire discussion is why more people need to start **learning** (not necessarily using) DSC if you have Windows in your environment. Find out what it is, what it isn't, and how it'll play into the other efforts you've got underway. There's a ton of misconception about what it is and where it's meant to fit in. When I say, "if you're not learning DSC, you're screwed," I don't mean, "if you're not _using_ DSC." I mean _learning. _Because if you're not _learning _it, you're going to be subject to the same misconceptions about it. You end up spending a lot of time reinventing what it's willing to do - and what it's willing to do _in conjunction with_ your existing tools. + + + + [1]: http://www.reddit.com/r/sysadmin/comments/1ziudp/desired_state_configuration_dsc_musthave_or_just/ diff --git a/content/articles/2014/03/the-dsc-opportunity-for-isvs/index.md b/content/articles/2014/03/the-dsc-opportunity-for-isvs/index.md new file mode 100644 index 000000000..6a0a8cd39 --- /dev/null +++ b/content/articles/2014/03/the-dsc-opportunity-for-isvs/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2014-03-04-the-dsc-opportunity-for-isvs/ +title: The DSC Opportunity for ISVs +authors: + - Don Jones +date: "2014-03-04T23:45:02+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/03/the-dsc-opportunity-for-isvs/ +--- + +Desired State Configuration offers a number of immediate opportunities for independent software vendors (ISVs) who are smart enough to jump on board _now. _DSC currently suffers from a marked lack of tooling. That's partially deliberate; MS obviously needs to deliver the functionality, and they may well rely on third parties or the System Center team to build tools on top of that functionality. But let's explore some of the immediate opportunities. +**Change Control and Versioning**. This should be pretty easy. We basically need a way to "check in" a new DSC configuration, possibly have it go through an approvals workflow, and then deploy it. In more detail, I'd want to be able to submit a configuration script to this tool. It would run the config, generate a MOF, and deploy it to a "lab" pull server location. I could then verify its functionality, and "approve" it to deploy the MOF to a production pull server. Deployment would include creating the necessary checksum file. Obviously, rollback capability to a previous version would be nice.** +** +**Configuration Consolidation. **Natively, DSC requires me to specify the nodes I want to push a configuration too. I'd like to see a tool that lets me create server lists somewhat graphically, organizing things so that a single server might appear in a "domain controllers" list, a "New York servers" list, and a "Win2012R2" list.  I could target configurations at each list, and the tool would combine those configurations to create the appropriate one for each node based on its "folder memberships." That might be done through composite resources. This makes DSC work a bit like GPO, with this tool doing the work of combining configurations into a single one per node. +**DSC Studio. **Using the underlying DSC Resource Kit and Resource Designer for functionality, give me an IDE that lets me graphically design a resource (specify properties) and then spit out the schema MOF and skeleton PSM1 file. This could probably be a very simple PowerShell ISE add-on, in fact. +**Node management. **In a pull server environment, give me a tool that lets me group servers. The tool should modify the LCM on each group, so that each member of the group has the same DSC configuration ID. That way, they're all pulling the correct MOF from the pull server. Otherwise, managing GUIDs gets out of hand pretty quickly - I can see a lot of Excel spreadsheets. +**Resources**. There are obviously a ton of resources to be written. This might be a bit of a bad call for an ISV, as you never know what MS is going to release resources for. Now that MS has built so many PowerShell cmdlets, building resources on top of them gets pretty straightforward. They've pumped out two waves of resources pretty fast already. +In short, I think there's a big opportunity for a smart company. It's a matter of seeing the "holes" in the technology, which currently focus mainly on management, and filling them in. diff --git a/content/articles/2014/03/we-want-your-dsc-resource-wish-list/index.md b/content/articles/2014/03/we-want-your-dsc-resource-wish-list/index.md new file mode 100644 index 000000000..942b39178 --- /dev/null +++ b/content/articles/2014/03/we-want-your-dsc-resource-wish-list/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2014-03-20-we-want-your-dsc-resource-wish-list/ +title: We Want Your DSC Resource Wish List! +authors: + - Don Jones +date: "2014-03-20T16:08:03+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/03/we-want-your-dsc-resource-wish-list/ +--- + +What sorts of things would you want to configure via DSC that don't already have a resource? +NB: Focusing on the core Windows OS and its components only; Exchange, SharePoint, SQL Server, and other products are off the table for this discussion. +For example, I want a "log file rotator" resource, that lets me specify a log file folder, an archive folder, and a pair of dates. Files older than one date are moved from the log folder to the archive folder; archived files older than the second date are deleted. +I'd also like a File Permissions resource. Specify a folder or file, optional recursion, and a set of access control entries (in plain English terms), and it'll make sure the permissions stay that way. +Maybe also a User Home Folder resource, which would (a) ensure a folder exists for a given set of user accounts, and (b) ensures a set of "template" permissions, so that each individual user has the rights to their folder, plus rights given to global users like admins. +What resources would YOU like to have to ease configuration and maintenance in YOUR environment? Drop a comment! diff --git a/content/articles/2014/04/_index.md b/content/articles/2014/04/_index.md new file mode 100644 index 000000000..c7b8fa744 --- /dev/null +++ b/content/articles/2014/04/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from April 2014" +description: "PowerShell.org Articles published in April 2014." +--- diff --git a/content/articles/2014/04/charlotte-432014-meeting-using-powershell-in-websites/index.md b/content/articles/2014/04/charlotte-432014-meeting-using-powershell-in-websites/index.md new file mode 100644 index 000000000..4bfdf930c --- /dev/null +++ b/content/articles/2014/04/charlotte-432014-meeting-using-powershell-in-websites/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2014-04-02-charlotte-432014-meeting-using-powershell-in-websites/ +title: Charlotte 4/3/2014 Meeting – Using PowerShell in Websites +authors: + - Terri Donahue +date: "2014-04-02T18:32:43+00:00" +aliases: + - /2014/04/charlotte-432014-meeting-using-powershell-in-websites/ +--- + +The monthly Charlotte PowerShell Users Group meeting will be held tomorrow, April 3rd at 6PM EDT. The meeting is held at the Microsoft Charlotte Office (8055 Microsoft Way, Charlotte, NC). + +This looks to be an awesome meeting with guest speaker Jason Walker. Jason will demonstrate running PowerShell scripts in a cool and novel way – from a website. If you would like to attend, please jump on over to the [MeetUp](http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/172416592/) page and let us know you are coming. diff --git a/content/articles/2014/04/charlotte-512014-meeting-update/index.md b/content/articles/2014/04/charlotte-512014-meeting-update/index.md new file mode 100644 index 000000000..d26bd900d --- /dev/null +++ b/content/articles/2014/04/charlotte-512014-meeting-update/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2014-04-23-charlotte-512014-meeting-update/ +title: Charlotte 5/1/2014 Meeting update +authors: + - Terri Donahue +date: "2014-04-23T15:59:00+00:00" +aliases: + - /2014/04/charlotte-512014-meeting-update/ +--- + +The regularly scheduled meeting for the group will not be held due to overlap with the PowerShell Summit and travel related to it for some of our members. If there is interest in scheduling a side meeting, we can do that to accommodate those of us that are not attending the Summit. + +If not, we will be back on track and ready for [YASG!](http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/178572422/) (Yet Another Scripting Game) on 6/5/2014. Looks like it is going to be a good one. diff --git a/content/articles/2014/04/fundraising-powershell-people-kick-butt-take-names/index.md b/content/articles/2014/04/fundraising-powershell-people-kick-butt-take-names/index.md new file mode 100644 index 000000000..397a90920 --- /dev/null +++ b/content/articles/2014/04/fundraising-powershell-people-kick-butt-take-names/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2014-04-29-fundraising-powershell-people-kick-butt-take-names/ +title: "Fundraising: PowerShell People Kick Butt, Take Names" +authors: + - Don Jones +date: "2014-04-29T15:21:06+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2014/04/fundraising-powershell-people-kick-butt-take-names/ +--- + +Our [IndieGoGo Campaign][1] is off to an amazing start, raising over $6,300 (including some offline donations) toward our ultimate $9,000 goal. So far, we've raised enough to ensure we can record two tracks of Summit content - enabling us to record speakers' laptops and voice, and to post the videos on YouTube, for free. Meeting our full $9,000 goal will enable three tracks of recordings, which is what the North American show currently produces. +The equipment we're investing in will also support, should we choose to add it, an analog camera input and automatic picture-in-picture, meaning we can later add-on to include video of the speaker(s) as well as what's on their laptop. +This [equipment][2] also meets an important set of goals for us: It requires no software on speaker laptops (often problematic), and it's operated - literally - by a single big, red, lighted button. Meaning, it's easy to use and shouldn't interfere with the live audience's experience. +I'm personally humbled by the generosity of our community. While larger donations are being considered "share purchases" in PowerShell.org, Inc., these contributors are essentially getting nothing in return for their money - but they're making something possible that will benefit _everyone. _Making this content permanently available, for free, will become a treasure trove of valuable information _forever. _I can't express my gratitude enough. +Tell a colleague, tell a friend: Every donation helps, no matter how small. And thank you, thank you, thank you. + + [1]: https://www.indiegogo.com/projects/powershell-summit-session-recording/x/7291807 + [2]: http://www.epiphan.com/ diff --git a/content/articles/2014/04/help-us-record-the-powershell-summit-sessions/index.md b/content/articles/2014/04/help-us-record-the-powershell-summit-sessions/index.md new file mode 100644 index 000000000..5f2e62d8b --- /dev/null +++ b/content/articles/2014/04/help-us-record-the-powershell-summit-sessions/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2014-04-28-help-us-record-the-powershell-summit-sessions/ +title: Help us Record the PowerShell Summit Sessions +authors: + - Don Jones +date: "2014-04-28T17:27:23+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2014/04/help-us-record-the-powershell-summit-sessions/ +--- + +We're often asked if the PowerShell Summit sessions will be recorded or live-streamed. The answer, so far, has been "no," because the equipment needed to do so gets expensive. +But we're willing to give it a go - with crowd funding. Check out our [IndieGoGo campaign][1], where you can contribute to making session recordings a reality - forever. We've got about 30 days to reach our goal. So if recorded sessions are important to you - now's the time to put your money where you mouth is!! +Fingers crossed! + + [1]: https://www.indiegogo.com/projects/powershell-summit-session-recording/x/7291807#home diff --git a/content/articles/2014/04/massive-update-to-all-seven-free-ebooks-at-powershell-org/index.md b/content/articles/2014/04/massive-update-to-all-seven-free-ebooks-at-powershell-org/index.md new file mode 100644 index 000000000..dcb194a5d --- /dev/null +++ b/content/articles/2014/04/massive-update-to-all-seven-free-ebooks-at-powershell-org/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2014-04-07-massive-update-to-all-seven-free-ebooks-at-powershell-org/ +title: Massive Update to All Seven Free eBooks at PowerShell.org +authors: + - Don Jones +date: "2014-04-08T00:13:10+00:00" +categories: + - Books +aliases: + - /2014/04/massive-update-to-all-seven-free-ebooks-at-powershell-org/ +--- + +We've just finished a massive re-do of all 7 PowerShell.org free ebooks. +First, they're now hosted in a [public OneDrive folder][1]. This means you can quickly and easily view them online, download a DOCX, or download a PDF. Anytime, anywhere. +Second, we've had folks go through and make the formatting more consistent, using a more modern font and somewhat "airier" spacing. Hopefully that translates to "nicer to read." All the original code is also accessible, and available for one-click downloading. Note that .PS1 files may open for viewing; you need to checkmark the file to download it. +Uploads are now proceeding, so depending on when you read this, some files might still be in progress. The GitHub versions (which were problematic for some folks to download) will be removed shortly. Please update your links; https://powershell.org/ebooks has already been updated. +Enjoy! + + [1]: http://1drv.ms/1eaLKiu diff --git a/content/articles/2014/04/phillyposh-03042014-meeting-summary-and-presentation-materials/index.md b/content/articles/2014/04/phillyposh-03042014-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..29249950e --- /dev/null +++ b/content/articles/2014/04/phillyposh-03042014-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2014-04-06-phillyposh-03042014-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 04/04/2014 meeting summary and presentation materials +authors: + - John Mello +date: "2014-04-07T03:37:36+00:00" +aliases: + - /2014/04/phillyposh-03042014-meeting-summary-and-presentation-materials/ +--- + +* [Ashley McGlone][1] gave a presentation entitled “Demystifying The PowerShell Scripting Process”. During his talked Ashley broke down the script creation process by starting with a task and working through the cmdlet discovery process to build a repeatable task into a script. A copy of his [presentation materials][2] are available on his [blog][3] + * We then had a group discussion around: + * DSC and how various group members are using/testing it + * WMF 5.0's OneGet + * [ConEmu ][4]a windows console emulator + * A [recording of this meeting][5] has been posted to our [YouTube channel][6] + + [1]: https://twitter.com/goateepfe + [2]: http://blogs.technet.com/b/ashleymcglone/archive/2014/02/08/powershell-saturday-007-charlotte-from-cmdlets-to-scripts-to-powershell-hero.aspx + [3]: http://blogs.technet.com/b/ashleymcglone/ + [4]: http://code.google.com/p/conemu-maximus5/ + [5]: https://www.youtube.com/watch?v=Aw-rnpOk94Q + [6]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014/04/powershell-summit-europe-2014-call-for-topics/index.md b/content/articles/2014/04/powershell-summit-europe-2014-call-for-topics/index.md new file mode 100644 index 000000000..49f2d146a --- /dev/null +++ b/content/articles/2014/04/powershell-summit-europe-2014-call-for-topics/index.md @@ -0,0 +1,39 @@ +--- +url: /articles/2014-04-30-powershell-summit-europe-2014-call-for-topics/ +title: PowerShell Summit Europe 2014 – Call for Topics +authors: + - Richard Siddaway +date: "2014-04-30T18:31:01+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2014/04/powershell-summit-europe-2014-call-for-topics/ +--- + +The PowerShell Summit is the number one place where PowerShell enthusiasts gather and learn from each other in fast-paced, knowledge packed presentations. Experts from all over the world including MVP’s, Guru’s, and PowerShell team members, join together for a few days to discuss and learn how to maximize using PowerShell in the workplace. +And now the PowerShell Summit is coming to Europe. PowerShell Summit Europe 2014 will be held September 29, 30, and October 1 at the Hotel Park in Amsterdam, Holland. https://powershell.org/community-events/summit/powershell-summit-europe/ +If you want to share your PowerShell expertise, then this is your official call to submit presentations for selection! +**Topic Areas – What we are looking for +** We are looking for 45-minute presentations covering a wide aspect of PowerShell expertise. We have three main topic areas that may assist you in building an abstract. +• PowerShell Internals – A deep look into the inside workings of PowerShell and practical solutions that are built from them. These presentations are more focused on the PowerShell development community that is building extensions and solutions relating to PowerShell. +• PowerShell in Production – These presentations are focused on domain specific PowerShell solutions for IT Pro’s such as managing Exchange, System Center, IIS, SharePoint, VMware and more. +• PowerShell Features Deep Dive – These presentations are a deep look into configuring and working with PowerShell features and capabilities such as PowerShell Remoting, PowerShell Web Access, Reporting and more. +We are open to presentations across the entire ecosystem that has been built around PowerShell; so don’t hesitate to send an abstract for your particular area of expertise. And don’t think, “oh, I can’t do a presentation!” We aren’t looking for Toastmasters winners – we’re looking for folks to be a part of the community! Take the leap and present! Each session is only 35 minutes, with 10 minutes for Q&A! +**Presentation submissions – What you should send to us** +Presentations will be 45-minutes in length (planning for 30-40 minutes of material and 5-15 minutes of Q&A) and the submission should include the following: +• Presentation Title +• Presentation abstract – a description of the presentation and the topics covered. 100 words or less and suitable for marketing. +• 50 word biography +You can submit multiple presentations in the same topic area or for different ones. +**What you get if you present** +The European Summit is working to a very tight budget as this is the first time we are running it. Compensation for speakers will be free admission (not free Association for Windows PowerShell Professionals membership, https://powershell.org/association-for-windows-powershell-professionals, just free admission, which includes food). We will not reimburse hotel, expenses, or travel. It’s important that speakers not register for the conference, because we will not be refunding you if you do that. +The financial situation may change to a certain degree if the event sells out but we can’t cover all of your expenses as a speaker and we can’t make any guarantees at this stage. +We also ask that you help publicize the event. +**Presentation submission deadline – When you should send it by** +Start sending your presentation submissions immediately! The selection committee will start selecting presentations as soon as they arrive so you don’t want to miss out. The last day we will accept presentation submissions will be May 23, 2014. +Send your proposals to cft2014eu@powershell.org. Please either put multiple proposals in a Word doc, or send just one proposal in the body of an email, so that we can track these more easily. +**When you will know you’ve been selected** +The selection committee will start reviewing submissions immediately and begin the selection process. You will be informed if one or more of your presentations have been selected and sent a contract on or before June 14, 2014. You will need to return the signed contract by June 21, 2014. +The final agenda will be announced early July and posted on PowerShell.Org. +We look forward to your submissions and your help in making PowerShell Summit Europe 2014 your most valuable IT/Dev conference of the year! diff --git a/content/articles/2014/04/powershell-summit-n-a-2014-budget/index.md b/content/articles/2014/04/powershell-summit-n-a-2014-budget/index.md new file mode 100644 index 000000000..adda4f28f --- /dev/null +++ b/content/articles/2014/04/powershell-summit-n-a-2014-budget/index.md @@ -0,0 +1,27 @@ +--- +url: /articles/2014-04-15-powershell-summit-n-a-2014-budget/ +title: PowerShell Summit N.A. 2014 – Budget +authors: + - Don Jones +date: "2014-04-15T15:56:49+00:00" +categories: + - PowerShell Summit +aliases: + - /2014/04/powershell-summit-n-a-2014-budget/ +--- + +As part of our commitment to being a transparent, community-owned organization, I wanted to share the basic budget for the upcoming Summit. Now that registration is cut off, we have most of our final numbers. Keep in mind that, at live events, things "on the ground" can change quickly - so these are, at present, only our expectations "going in." + + * $113,833.51 in net registration fees. This is after paying credit card transaction fees. + * -$398.00 for event insurance (already paid) + * -$76,466.04 for the venue, which includes A/V, F&B, room rental, etc. (already paid) + * -$9,335.01 for speaker lodging (hotel) + * -$3,000 for professional event management (including travel for the event manager) + * -$1,490 for our registration web site (already paid) + * -$1,710.51 for deposit on the European Summit + * -$7,500 for speaker reimbursement + +That last number is presently the big question; we have some speakers who paid for their registration, and we need to reimburse them. That's probably about $4,000. We have another $2,500  in promised travel offset fees to speakers doing 3 sessions. We're trying to reimburse additional travel expenses for other speakers so they're not totally out of pocket; the final number may be more than $7,500. +Right now, that puts us at an event profit of roughly $13,933.95. Again, some of that may end up going to additional speaker reimbursement; the rest will help fund PowerShell.org ongoing activities (like Azure hosting and so forth; I'll share a full annual operating budget in June, but it's about $17,000 per year). We have about $20k in payments coming up for the European Summit. +We have approximately $92,000 on-hand; much of that will go to the expenses above that are still pending. We should end April with around $65,000 on-hand - a lot of that comes from earning back a $40,000 pre-payment for the N.A. Summit that we made in fiscal 2013-2014. We'll use some of that $65k to cover the remaining $20k fees on the European Summit; the rest of our cash-on-hand will help provide deposits for the 2015 N.A. Summit, and to fund ongoing operations for 2014-2015. We're in good financial shape - we're making a _bit_ more than we need, but not very much - which is right where we want to be. +The good news is that, between the Summits and our generous corporate sponsors, we're on track to actually find the $17k wish-list budget we've put together (which we're still researching and tweaking; as stated, I'll share the full thing in June). That means we'll be able to start spinning up services like the VERIFIED EFFECTIVE program, monthly TechSession webinars, and so on. diff --git a/content/articles/2014/04/powershell-summit-na-2014-shirts-available/index.md b/content/articles/2014/04/powershell-summit-na-2014-shirts-available/index.md new file mode 100644 index 000000000..ff0a12281 --- /dev/null +++ b/content/articles/2014/04/powershell-summit-na-2014-shirts-available/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2014-04-14-powershell-summit-na-2014-shirts-available/ +title: PowerShell Summit NA 2014 Shirts Available +authors: + - Don Jones +date: "2014-04-14T16:50:18+00:00" +categories: + - PowerShell Summit +aliases: + - /2014/04/powershell-summit-na-2014-shirts-available/ +--- + +If you're attending PowerShell Summit NA 2014 (or wish you were), we have some new logo items for purchase! Buy 'em now and wear 'em to the Summit, including a baseball jersey and a polo shirt. [Visit our Zazzle store][1] to buy (or the [Canadian store][2], to save a bit on shipping if you live up there). +Note that the items may take about 24 hours to become visible, so check on April 15th in the afternoon if you don't see them immediately. +See you at the Summit! + + [1]: http://zazzle.com/powershellorg* + [2]: http://zazzle.ca/powershellorg* diff --git a/content/articles/2014/04/review-sapien-versionrecall/index.md b/content/articles/2014/04/review-sapien-versionrecall/index.md new file mode 100644 index 000000000..600b3c1b8 --- /dev/null +++ b/content/articles/2014/04/review-sapien-versionrecall/index.md @@ -0,0 +1,35 @@ +--- +url: /articles/2014-04-15-review-sapien-versionrecall/ +title: "[UPDATED] Review: SAPIEN VersionRecall" +authors: + - Don Jones +date: "2014-04-15T19:44:42+00:00" +categories: + - Tools +aliases: + - /2014/04/review-sapien-versionrecall/ +--- + +I recently played around with [SAPIEN's VersionRecall][1], and thought I'd share a bit about the experience. As a note, SAPIEN provided me with a license key to use. VersionRecall is advertised as a simple, single-user version control system "for the rest of us." There are no servers, no databases, and nothing complex, according to the marketing copy. +Setup is quick - a 3-screen wizard and you're done. Installation took under a minute. When you first launch the product, it attempts to find all the places on your computer where you might store scripts, so that it can connect those to a version-control repository. You can skip that bit, but it only took a few moments on my virtual machine. It found my DSC scripts, my PowerShell modules, and several other places I'd dropped scripts. You then indicate where you'd like your version-control repository - this is where old versions of files will be saved. You can also pick a certificate, to have the software automatically sign scripts each time you make a new version. That's a subtle and very cool feature - and it's a way to make AllSigned a more convenient execution policy. +I selected an option to have my version control repository updated every day at 4:30pm. That seems to let the software capture a snapshot of any changed files at that time every day; it was clear that you could also manually submit an update to the repository using VersionRecall or Windows' own File Explorer. +From there, you're in an Explorer-like view. It includes a tab for each folder where you store scripts. I find that I like that approach a lot - I tend to organize my scripts that way. I've got my modules in one spot, some sample scripts in another, stuff I'm playing with in a third, and so on - so the tabbed approach fits my organizational style. You can open files for editing right there. I don't have PrimalScript installed on this test machine, but files opened in the ISE just fine. Ribbon buttons let you open the shell, the ISE, or SAPIEN's PrimalScript or PowerShell Studio products. +[![fig1](https://powershell.org/wp-content/uploads/2014/04/fig1.png)](https://powershell.org/wp-content/uploads/2014/04/fig1.png) + +Here's how this works: You have to manually submit changed files to the version-control repository, or wait for the daily check-in (remember, I set mine to 4:30pm). This doesn't magically capture changes throughout the day. But, you can always manually submit an update if you've been making significant edits. That's how most "big boy" source control systems work - only they don't usually have an automatic daily-check in as a backup plan. VersionRecall does. +You can always compare the current version against a repository version - and it's a very slick comparison view. +[![fig2](https://powershell.org/wp-content/uploads/2014/04/fig2.png)](https://powershell.org/wp-content/uploads/2014/04/fig2.png) + +Once you've checked in a few versions, you can easily see the complete list, quickly see what each file contains, and either restore a previous version or copy it to a different location. You can also compare two versions to see what's different. +[![fig3](https://powershell.org/wp-content/uploads/2014/04/fig3.png)](https://powershell.org/wp-content/uploads/2014/04/fig3.png) + +Notably, VersionRecall doesn't stick your files into a database or some proprietary storage. Your check-in files _stay_ files, in their original formats. That means, if you ever need to do so, you can simply go to the folder where VersionRecall's repository is, and grab the files yourself. It should also allow files to be indexed by Windows (for filetypes where it does that), found by Windows search, and so on. +Unfortunately, PowerShell Studio doesn't seem to recognize VersionRecall as a source control provider (at least, it didn't show up when I tried to configure source control in PowerShell Studio). That means you can't use the integrated check-in/out controls in PowerShell Studio. Instead, you almost want to open files by using VersionRecall's Explorer, save them in PowerShell Studio, and then submit them to the repository back in VersionRecall. That's a shame; the automatic check-in/out in PowerShell Studio would make it all a bit simpler. +VersionControl uses a "Modern" user interface scheme for the most part. Its ribbon is pretty clean and well-organized, and the icons were meaningful. As with most recent SAPIEN products, you can change the theme to one of almost a dozen different styles, so you should be able to find something you like. Icons remain the same either way; all you're changing is the "chrome" of the UI. +Not much else to say. For a product that bills itself as simple and easy, VersionControl certainly delivers. It does one thing, and it does it pretty well. It's definitely easy - and there's less excuse than ever for not using some kind of version control for your scripts. [A FAQ on SAPIEN's blog][2] answers questions like why VersionRecall doesn't check-in files automagically each time they change, how it compares to something like Git, and more. +[**Update**: I've removed the section on the license key and activation; SAPIEN's Alex Riedel pointed out that I had some factual errors, because my observations were based on my use of a "real" license key that was issued for my particular use, not a "trial" key. I admit that I find software licensing uninteresting, and none of it has any impact on the usefulness of the software, which is what the article was meant to cover.] +VersionRecall sells for $179 as a standalone product, which includes a year of updates. I think that price might be a bit high, given what the product does. I expect, however, that most people are getting VersionRecall as part of a SAPIEN software bundle. For $789, for example, you get everything they make. For me, the perfect combo is PowerShell Studio and VersionRecall, which retails for $568. + + + [1]: http://www.sapien.com/software/versionrecall + [2]: http://www.sapien.com/blog/2014/04/09/versionrecall-2014-faq/ diff --git a/content/articles/2014/04/sapiens-new-wmi-explorer-released/index.md b/content/articles/2014/04/sapiens-new-wmi-explorer-released/index.md new file mode 100644 index 000000000..073e28f25 --- /dev/null +++ b/content/articles/2014/04/sapiens-new-wmi-explorer-released/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2014-04-21-sapiens-new-wmi-explorer-released/ +title: "SAPIEN's new WMI Explorer Released" +authors: + - Don Jones +date: "2014-04-21T22:59:41+00:00" +categories: + - Tools +aliases: + - /2014/04/sapiens-new-wmi-explorer-released/ +--- + +We all know that working with WMI/CIM can be frustrating. So little of it is documented, and it can be tough to find the class that has the exact info you need. +A long time ago, SAPIEN released a very nice WMI Explorer tool that, recently, was taken offline. The reason is that the company was producing an all-new, from-scratch replacement - [and it's now available][1]. +Their new approach is pretty interesting. Rather than just live-browsing the local WMI repository or a remote computer's repository, the tool can now go through the repo and actually create a local cache. That cache is optimized for searching, making it a ton easier to search not only for class names, but also for property names and more. Even property values! So if you know (for example) that "Windows 8.1" is part of _some_ property of _some_ class, this tool can help you find where it is. It also provides in-product links to what online WMI documentation exists, making it quicker to get to that stuff. +Although the old tool was a freebie, this new one will set you back $40, and I imagine it's included with the $789 kitchen-sink bundle the company sells. While I miss the free tool, this new one is significant enough that I'd pay for it. After all, money is what keeps the programmers at SAPIEN employed, so we can't expect great tools for zero money. Frankly, this new WMI Explorer is one of the very, very, very, very few tools that's going to earn a place in my base VM images that I use in classes - simply because it's so useful. The ability to search for _property values_ gives me a whole new approach to finding the exact WMI class I need. +It's a well thought-out tool. Now, it's not "zero footprint" like the old one - but the old one didn't do nearly as much, like creating a local, searchable cache of the repo. Also, this isn't something I'd install on all my servers. There's no need - you install it on _your_ computer, and let it reach out to key servers to discover their repositories. So it's "zero footprint" on the server, which is all I care about. That cache means I can even browse a remote machine's repo when I'm completely offline, like on an airplane working on a book. That's a huge deal for me. +SAPIEN's blog article on the software release includes another interesting fact: They plan to release a new line of smaller tools like WMI Explorer, and either sell them separately or as a community package. Cool! But what's even cooler is this: _"The proceeds from these tools will go towards supporting user groups and non-profit organizations." _Well, damn. So that $40 isn't even funding the development of the tool per se, it's funding (in part) your local user group. That's awesome, and makes it well worth the standalone purchase if you don't own the whole Software Suite already. +As usual, SAPIEN offers a free trial. Give it a whirl. + + [1]: http://www.sapien.com/blog/2014/04/17/wmi-explorer-2014-released/ diff --git a/content/articles/2014/04/summit-session-change/index.md b/content/articles/2014/04/summit-session-change/index.md new file mode 100644 index 000000000..5cbdb13c0 --- /dev/null +++ b/content/articles/2014/04/summit-session-change/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2014-04-13-summit-session-change/ +title: Summit Session Change +authors: + - Don Jones +date: "2014-04-13T23:21:08+00:00" +categories: + - PowerShell Summit +aliases: + - /2014/04/summit-session-change/ +--- + +Paul Higinbotham's session on threading in PowerShell has been changed, because his content would have overlapped with other sessions. Instead, Paul will be presenting: +**PowerShell Debugging Enhancements** +A number of script debugging enhancements were added to PowerShell 4.0 and the WMF 5.0 preview release. In this talk I will discuss these new debugging features and demonstrate how they work. This will include the new support for remote debugging, debugging workflow scripts, debugging PowerShell jobs, ISE enhancements for remote debugging, and the new "Break All" command. +We'll update the schedule grid and abstract document. diff --git a/content/articles/2014/05/_index.md b/content/articles/2014/05/_index.md new file mode 100644 index 000000000..3dafaafe7 --- /dev/null +++ b/content/articles/2014/05/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from May 2014" +description: "PowerShell.org Articles published in May 2014." +--- diff --git a/content/articles/2014/05/analyzing-the-black-magic-powershell-exploit-and-appropriate-actions/index.md b/content/articles/2014/05/analyzing-the-black-magic-powershell-exploit-and-appropriate-actions/index.md new file mode 100644 index 000000000..e8d1db290 --- /dev/null +++ b/content/articles/2014/05/analyzing-the-black-magic-powershell-exploit-and-appropriate-actions/index.md @@ -0,0 +1,81 @@ +--- +url: /articles/2014-05-31-analyzing-the-black-magic-powershell-exploit-and-appropriate-actions/ +title: "Analyzing the \"Black Magic\" PowerShell \"Exploit\" and Appropriate Actions" +authors: + - Don Jones +date: "2014-05-31T14:39:14+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/05/analyzing-the-black-magic-powershell-exploit-and-appropriate-actions/ +--- + +Trend Micro released a report on a new [PowerShell-vectored exploit named Black Magic][1]. I had a lovely Twitter conversation about what this means in terms of PowerShell's vulnerability to attack, and what admins should do. Unfortunately Twitter sucks for carrying on that kind of conversation, so I wanted to post this to clarify a few things. +First, I'm going to write this article as if "you" were hit by this exploit. Don't take it personally, it's just an easier style of language for me - it's not actually addressing _you._ +Second, when it comes to security, the goal is to _stop attacks from happening._ That means you have to consider all the ways something could nail you, and try to block as many of them as is practical. That's called "defense in depth," giving you multiple layers of defense. The corollary to that is that your environment must still be functional. I mean, from a secure standpoint, if I unplugged all the WiFi access points and Ethernet switches you have, you'd be pretty secure. And non-functional. +Third... and I don't know how to be delicate about this, but a lot of admins out there aren't very sophisticated about security. There's sometimes a tendency to fix what they can get their hands on, whether or not that makes any impact on security or not. So let's be very clear about what you do when it comes to security: _You do as little as possible, and impinge as little functionality as possible, while achieving your security goals._ That helps maintain a "functional" environment, and keeps the security aspect of it "maintainable." Sometimes, "as little as possible" is quite a lot indeed - but you look for that balance. Finally, you almost _never do anything to "improve" security if it is in fact a null improvement._ That is, you don't lock the doors if the windows can't be closed. There's no point. +Now, let's look at how Black Magic operates. + + +## Step 1: Social Engineering + +The exploit comes in the form of an .LNK e-mail attachment. That's a Windows shortcut file. Users are meant to double-click it, and the shortcut launches a PowerShell session with the execution policy essentially turned off. + +> **Problem 1:** You let users get .LNK e-mail attachments from external users. This is stupid. Users shouldn't be able to receive executable file types. Note that a .PS1 file isn't an executable file type, which is why the exploit had to take this action. If you'd blocked .LNK attachments at the firewall, the exploit would be useless. +> **Problem 2:** Your users are opening file attachments from people they don't know. _There is no technical way to protect an environment where users aren't doing the right thing._ No way. Just give up. This is why I keep going on about building a "[culture of security][2]." If your users' job descriptions, or your company employee manual, doesn't say something to the effect of, "employees must be able to safely operate company computers in accordance with company policies and standards," then you're just doomed. If it _does_ say that, and a user does open an attachment like this, you write them up and eventually fire them. +If you think you can stop stupid users from bypassing every security measure you put in place, you are dumber than they are +. You have to fix the social engineering element. There is almost no point in trying anything else, because users will get around it. + +I know. A lot of you are shrugging and saying, "well, you can't fix users, so I'll just lock down PowerShell." It won't work. +I once, and rather famously, refused to help a law firm client get their NTFS file permissions under control, because they let users print sensitive documents and leave them lying around the office. _Don't bother locking the door if the windows are open._ + + +## Step 2: The Download + +One of the elements of the Twitter discussion was, "maybe standard users shouldn't have PowerShell able to run, because it's so powerful and can be exploited so easily." +Um, no. +First: PowerShell's execution policy _is not a measure against malware._ It was never designed to be, so don't be disappointed when it isn't. If you thought it was, you were wrong, and that's your fault for not educating yourself, not Microsoft's fault for failing to do something they never set out to do in the first place. +Second: PowerShell _only lets you do what you have permission to do._ The Black Magic exploit used PowerShell _simply to download a file from the Internet._ That's it. It didn't wipe out Active Directory, it didn't erase a file server, and it didn't start grabbing messages out of Exchange, _because normal users can't do those things._ +Would locking down PowerShell, so that normal users couldn't run it, have stopped this exploit? No, because normal users have an _abundance_ of ways to download files, and the exploit would simply have used a different one. PowerShell was convenient here, not necessary. If you're going to posit locking down PowerShell, _you must also lock down every other possible means of downloading a file from the Internet,_ or you've done nothing to impact security. Nothing. +**PowerShell is not powerful.** Erase that from your mind. Everything PowerShell is and does comes from the .NET Framework installed on every one of your computers, which your users have full access to. PowerShell is **nothing more** than a human-friendly way of getting to the Framework without needing Visual Studio on-hand. You could _erase_ PowerShell and 100% of its functionality would still be present and absolutely usable by an exploit. Get your brain wrapped around that, because it's an important concept. + +> **Problem 3**: You let your users download files from trashy websites. Your firewall should have been blocking access, and if it had integrated malware tools and realtime block lists, it probably would have caught this access. +> **Problem 4:** You're not using a local to block +outgoing + access by applications. For standard users, there's little reason to access the Internet by means other than a web browser or known applications. This is a well-known technology and approach that's been around for a decade. + +## Step 3: Run a File + +Black Magic's last step is to run the downloaded payload, _which it does under normal user permissions._ + +> **Problem 5:** You're allowing users to run arbitrary applications. AppLocker has been around since Windows Vista, and provides a way of "whitelisting" applications that may run. This payload would never have been allowed to execute if you'd been using a built-in tool that's been around since 2008. AppLocker even offers the ability to build that whitelist for you. +> **Problem 6:** You're not running updated anti-malware software that would have detected the payload and blocked it - and alerted someone. Most would have blocked access to the URL where the payload came from, too. + +## Conclusions + +So you've had six opportunities to stop this exploit, all of which involve well-known, years-old technologies and techniques. You probably haven't _done most of them,_ and so you want to blame PowerShell. +OK... I'll step out of the "you" attack-y mode :). +The point is that, once you have arbitrary code running on users' systems, you're owned. Nothing you can do to PowerShell will stop that. This attack could easily have been a .LNK file that ran Cmd.exe and the Telnet or FTP client - it could have achieved the same thing. It could easily have been an .EXE ("no, we block EXE file attachments;" "why the hell don't you also block .LNK then, dummy?"). +I don't want to come across as defending PowerShell per se; I'm trying to help folks understand where the real security problems lie. PowerShell is a red herring in all this; it was a convenient way of getting innocuous code to execute. There were six other places where _this attack would have been stopped in its tracks,_ and any six of those would also have stopped every other similar kind of attack that didn't rely specifically on PowerShell. That's what makes those six _effective_ - they're global, not targeted at one specific piece of code. All of those six act to stop malware. +Before you take actions in security, you need to make sure you're doing so from a holistic, professional security perspective. The first time a fire broke out in a crowded theater, officials didn't say, "well, we should put sprinklers and alarms in that theater." They put them in _every_ theater, and started demanding flame-retardant fabrics and other measures. You address security _across the board,_ not on a piecemeal basis. + + +## A Tangent Argument + +"Ah," the argument goes, "but we should reduce moving parts. Users don't have a legit need to run PowerShell, so we should lock them out of it." +Valid. Except that PowerShell.exe _isn't PowerShell._ PowerShell is a .NET Framework-based engine; PowerShell.exe is just a console application that lets you feed typed commands to that engine. You _can't_ remove PowerShell, and you _can't_ "block" users' access to it, because it's part of the Framework. It's an integral part of the operating system. Things you don't even realize are using it, are using it. +But yes, you could block users' access to the console application, PowerShell.exe. I might even buy that argument, especially in a highly secure environment where you simply don't want users having access to _anything_ they don't explicitly need to do their jobs. In fact, I _would_ buy that argument, _if and only if_ you block users' access to _everything_ they don't explicitly need. Notepad. Windows Paint. Solitaire. Etc. Because based on the theory you're working from, _all code is bad code_ (a valid security perspective) and you block everything not explicitly needed. Remember, PowerShell doesn't give users any special capabilities. Anything a normal user can do in PowerShell _can be done in at least 2 other ways using other native tools._ This is why AppLocker is a better approach: the list of apps a user _needs_ is smaller than the list of apps they don't, and so a whitelist is more maintainable, no matter how huge it is. + + +## Anyway... + +There you go. Now, you're welcome to make comments on this, and offer your perspective. However, I have a couple of guidelines. + + 1. Keep the conversation civil and professional. I'll delete anything obnoxious. + 2. Keep the conversation focused on _security._ And remember that security isn't about locking down the doors when the windows are open; it's about holistically achieving specific goals. You don't take security measures that simply move the target elsewhere. "Defense in depth" doesn't mean 80 security restrictions and 20 ways around them. If something is super-easy to bypass, you don't bother. + + + + + [1]: http://blog.trendmicro.com/trendlabs-security-intelligence/black-magic-windows-powershell-used-again-in-new-attack/ + [2]: http://redmondmag.com/Blogs/IT-Decision-Maker/2014/04/Creating-a-Culture-of-Security.aspx diff --git a/content/articles/2014/05/attend-a-beta-advanced-powershell-class-live-or-remote/index.md b/content/articles/2014/05/attend-a-beta-advanced-powershell-class-live-or-remote/index.md new file mode 100644 index 000000000..0a1d1ab29 --- /dev/null +++ b/content/articles/2014/05/attend-a-beta-advanced-powershell-class-live-or-remote/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2014-05-19-attend-a-beta-advanced-powershell-class-live-or-remote/ +title: "Attend a Beta \"Advanced PowerShell\" Class Live or Remote" +authors: + - Don Jones +date: "2014-05-19T16:29:55+00:00" +categories: + - Training +aliases: + - /2014/05/attend-a-beta-advanced-powershell-class-live-or-remote/ +--- + +As you may know, I helped developing the forthcoming Microsoft Official Courseware 10962A class, "Advanced Windows PowerShell." It's a 3-day class that includes an overview of DSC, a full day of scripting and toolmaking, a Workflow overview, error handling and debugging, and more. It's meant as a direct follow-on to the 5-day 10961 course. We're scheduling a beta teach through a Microsoft training center in mid-August 2014. It'll be taught by MCT Jason Yoder, who's an excellent trainer (and who attended PowerShell Summit North America 2014 a few weeks ago, so you know he's jiggy with PowerShell). +There will likely be a fee to attend live or remote, as you'll get the complete "A" rev of the course. If you think you might be interested, go to http://powershell.hosted.phplist.com/lists/?p=subscribe&id=7 and sign up. Once the full class info is online, we'll e-mail you and let you know where to go find it - we won't share your info with anyone else, including the training center. +Do this quickly - the class will likely fill up. diff --git a/content/articles/2014/05/beta-powershell-lab-guide-for-classes/index.md b/content/articles/2014/05/beta-powershell-lab-guide-for-classes/index.md new file mode 100644 index 000000000..5d9301eff --- /dev/null +++ b/content/articles/2014/05/beta-powershell-lab-guide-for-classes/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2014-05-17-beta-powershell-lab-guide-for-classes/ +title: BETA PowerShell Lab Guide for Classes +authors: + - Don Jones +date: "2014-05-17T18:59:49+00:00" +categories: + - Training +aliases: + - /2014/05/beta-powershell-lab-guide-for-classes/ +--- + +I've been working on a new lab guide for my classes, and thought I'd share an early version. Note that this may become unavailable at any point; the final version will go on MoreLunches.com, as the lab guide corresponds largely with _Learn Windows PowerShell in a Month of Lunches_ and _Learn PowerShell Toolmaking in a Month of Lunches_, as well as with several of the free ebooks here on PowerShell.org. +Also note that there is no slide deck. I hate slides and don't use them in class, so I haven't produced any slides. I do use a few diagrams in class (I load them into an iPad app called AirSketch, which "broadcasts" to my computer's web browser, allowing me to show those images on the screen, and to whiteboard on them as needed), and those diagrams are replicated in the lab guide for students' convenience. +This new guide is designed to be more standalone than the ones I've used in the past. Each lab includes background and syntax reminders, designed so that students don't have to take notes while the instructor is demonstrating things. That way, everyone can focus on the demos. I basically review each lab myself before I start a unit, and then just teach and demo what's covered in the lab. Students then get the lab itself as a reminder, and exercises to cement what they're learning. In many of my classes, this guide is the only thing students have in front of them, and it works well with my teaching style. +At 119 pages, it's a pretty substantial guide - and I have about nine more units to write, plus an additional four I plan to develop in the future. +You can [download the guide in PDF form][1]. Again, this link may go dead at some point when I'm done with the guide, and officially post it on MoreLunches.com. Right now, I'm very interested in what you think. It's designed to present very concise summaries of what I teach, not completely replace me, but in some places it's still pretty extensive. + + [1]: http://1drv.ms/1lwCYtr diff --git a/content/articles/2014/05/building-scalable-configurations-with-dsc/index.md b/content/articles/2014/05/building-scalable-configurations-with-dsc/index.md new file mode 100644 index 000000000..9fd310b38 --- /dev/null +++ b/content/articles/2014/05/building-scalable-configurations-with-dsc/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2014-05-22-building-scalable-configurations-with-dsc/ +title: Building Scalable Configurations With DSC +authors: + - Steven Murawski +date: "2014-05-22T18:30:00+00:00" +categories: + - Tips and Tricks +aliases: + - /2014/05/building-scalable-configurations-with-dsc/ +--- + +My Building Scalable Configurations with DSC talk from the PowerShell Summit is now online. +Enjoy! diff --git a/content/articles/2014/05/installing-powershell-v5-be-a-little-careful-ok/index.md b/content/articles/2014/05/installing-powershell-v5-be-a-little-careful-ok/index.md new file mode 100644 index 000000000..ffb398115 --- /dev/null +++ b/content/articles/2014/05/installing-powershell-v5-be-a-little-careful-ok/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2014-05-21-installing-powershell-v5-be-a-little-careful-ok/ +title: Installing PowerShell v5? Be a Little Careful, OK? +authors: + - Don Jones +date: "2014-05-21T17:37:46+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +aliases: + - /2014/05/installing-powershell-v5-be-a-little-careful-ok/ +--- + +I'm getting a lot of questions from folks, via Twitter and other venues, regarding Windows Management Framework 5.0 - which is where PowerShell v5 comes from. It's awesome that people are installing v5 and kicking the tires - however, please help spread the word: + + * v5 **is a preview.** It isn't done, and it isn't guaranteed bug-free. It shouldn't be installed on production computers until it's officially released. + * v5 doesn't install 'side by side' with v3 or v4. You can't run it with "-version 3" to "downgrade." Now, v5 shouldn't _break_ anything - something that runs in v3 or v4 should still work fine - but there are no guarantees **as it's a preview and not released code** at this stage. + * Server software (Exchange, SharePoint, etc) often has a hard dependency on a specific version of PowerShell. You need to look into that before you install v5. + * After installing v5, you might not be able to cleanly uninstall and revert to a prior version. + +Generally speaking, v5 should be installed in a test virtual machine at the very least, not on a production computer. It's great to play with it, and you should absolutely log bugs and suggestions to http://connect.microsoft.com. +This situation will be true for **any** pre-release preview of PowerShell or WMF going forward. "Preview" is the new Microsoft-speak for "beta," and you should treat it as such. Play with it, yes - that's the whole point, and it's how we get a stable, clean release in the end. But play with caution, and never on production computers. diff --git a/content/articles/2014/05/life-and-times-of-a-dsc-resource/index.md b/content/articles/2014/05/life-and-times-of-a-dsc-resource/index.md new file mode 100644 index 000000000..2058e7d89 --- /dev/null +++ b/content/articles/2014/05/life-and-times-of-a-dsc-resource/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2014-05-21-life-and-times-of-a-dsc-resource/ +title: Life and Times of a DSC Resource +authors: + - Steven Murawski +date: "2014-05-22T01:21:50+00:00" +categories: + - Tips and Tricks +aliases: + - /2014/05/life-and-times-of-a-dsc-resource/ +--- + +My Life and Times of a DSC Resource talk from the PowerShell Summit is now online. +Enjoy! diff --git a/content/articles/2014/05/my-teched-2014-patterns-and-practices-example-scripts/index.md b/content/articles/2014/05/my-teched-2014-patterns-and-practices-example-scripts/index.md new file mode 100644 index 000000000..d2356a862 --- /dev/null +++ b/content/articles/2014/05/my-teched-2014-patterns-and-practices-example-scripts/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2014-05-11-my-teched-2014-patterns-and-practices-example-scripts/ +title: "My TechEd 2014 \"Patterns and Practices\" Example Scripts" +authors: + - Don Jones +date: "2014-05-11T14:23:26+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/05/my-teched-2014-patterns-and-practices-example-scripts/ +--- + +I'll be using these examples in my TechEd 2014 session on PowerShell patterns and practices. They won't make much sense, perhaps, until you see the session (live, or in the recordings - and I believe this session is one of the "Taste of TechEd" ones that will be live-streamed), but here are the scripts. +[TechEd-NA-2014-Patterns-Examples][1] + + [1]: https://powershell.org/wp-content/uploads/2014/05/TechEd-NA-2014-Patterns-Examples.zip diff --git a/content/articles/2014/05/patterns-for-implementing-a-dsc-pull-server-environment/index.md b/content/articles/2014/05/patterns-for-implementing-a-dsc-pull-server-environment/index.md new file mode 100644 index 000000000..5c759071e --- /dev/null +++ b/content/articles/2014/05/patterns-for-implementing-a-dsc-pull-server-environment/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2014-05-23-patterns-for-implementing-a-dsc-pull-server-environment/ +title: Patterns for Implementing a DSC Pull Server Environment +authors: + - Steven Murawski +date: "2014-05-23T13:00:25+00:00" +categories: + - Tips and Tricks +aliases: + - /2014/05/patterns-for-implementing-a-dsc-pull-server-environment/ +--- + +My Patterns for Implementing a DSC Pull Server Environment talk from the PowerShell Summit is now online. +Enjoy! diff --git a/content/articles/2014/05/phillyposh-05012014-meeting-summary-and-presentation-materials/index.md b/content/articles/2014/05/phillyposh-05012014-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..80584a361 --- /dev/null +++ b/content/articles/2014/05/phillyposh-05012014-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2014-05-10-phillyposh-05012014-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 05/01/2014 meeting summary and presentation materials +authors: + - John Mello +date: "2014-05-10T22:21:17+00:00" +aliases: + - /2014/05/phillyposh-05012014-meeting-summary-and-presentation-materials/ +--- + +* [Boe Prox][1] gave a presentation entitled “Managing WSUS with Windows PowerShell”. During his talked Boe went over the various ways you can orchestrate [WSUS][2] using PowerShell. A copy of his [presentation materials are available here][3]. + * We then had a group discussion around: + * [Lido Paglia][4] and [John Mello][5] discussed their experiences and what they learned at the [2014 PowerShell Summit][6],, + * The differences between how Active Directory Users and Computers displays groups when compared to [Get-Aduser][7] in regards to primary group membership. In PowerShell the primary group is only returned in the _PrimaryGroup_ property and all other groups are returned in the _MemberOf_ property, while ADUC will show every group the user is a member of. + + * A [recording of this meeting][8] has been posted to our [YouTube channel][9] + + [1]: http://learn-powershell.net/author/boeprox/ + [2]: http://technet.microsoft.com/en-us/windowsserver/bb332157.aspx + [3]: https://powershell.org/wp-content/uploads/2014/05/PhillyPosh-2014_05_01-BoeProx_WSUS.zip + [4]: http://paglia.org/ + [5]: http://mellositmusings.com/ + [6]: https://powershell.org/community-events/summit/powershell-summit-north-america/ + [7]: http://technet.microsoft.com/en-us/library/ee617241.aspx + [8]: http://youtu.be/k4geOLcrQec + [9]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014/05/powershell-summit-n-a-2014-session-videos/index.md b/content/articles/2014/05/powershell-summit-n-a-2014-session-videos/index.md new file mode 100644 index 000000000..8bbed92d2 --- /dev/null +++ b/content/articles/2014/05/powershell-summit-n-a-2014-session-videos/index.md @@ -0,0 +1,50 @@ +--- +url: /articles/2014-05-16-powershell-summit-n-a-2014-session-videos/ +title: PowerShell Summit N.A. 2014 Session Videos! +authors: + - Don Jones +date: "2014-05-16T21:20:43+00:00" +categories: + - PowerShell Summit +aliases: + - /2014/05/powershell-summit-n-a-2014-session-videos/ +--- + +Aaron Hoover was kind enough to webcam the Summit sessions he attended, and he's posted the videos on YouTube. URLs, from Aaron's channel, are below. +Just Enough Admin - Security in a Post-Snowden World - Jeffrey Snover - PowerShell Summit 2014 + +Windows System Internals with PowerShell - Adam Driscoll - PowerShell Summit 2014 + +PowerCLI: How to Automate Your VMWare Environment Reports - Matt Griffin - PowerShell Summit 2014 + +Parallel Execution with PowerShell - Tome Tanasovski - PowerShell Summit 2014 + +PowerShell for Security Incident Response - Lee Holmes and Joe Bialek - PowerShell Summit 2014 + +Leverage Multi-Threading for Speeding Up Your Scripts - Jason Walker - PowerShell Summit 2014 + +Advanced PowerShell Eventing Scripting Techniques - Matt Graeber - PowerShell Summit 2014 + +Using PowerShell as a Reverse Engineering Tool - Matt Graeber - PowerShell Summit 2014 + +On the Job: Putting PowerShell Scheduled Jobs to Work - Jeff Hicks - PowerShell Summit 2014 + +The Seven Secrets of CIM - Brian Wilhite - PowerShell Summit 2014 + +WSMan Cmdlets - Richard Siddaway - PowerShell Summit 2014 + +Networking Administration with PowerShell - Richard Siddaway - PowerShell Summit 2014 + +Kerberos Delegation, CredSSP, and Windows PowerShell - Aleksandar Nikolic - PowerShell Summit 2014 + +The Joy of Intellisense: Tab Expansion - James O'Neill - PowerShell Summit 2014 + +Trending and Reporting - Don Jones - PowerShell Summit 2014 + +Leveraging Web Services with PowerShell - Trond Hindenes - PowerShell Summit 2014 + +Monitoring Using PowerShell - Josh Swenson - PowerShell Summit 2014 + +Cmdlet-ize the Registry - Richard Siddaway - PowerShell Summit 2014 + +PowerShell Module Design Rules (and When to Bend Them) - Kirk Freiheit - PowerShell Summit 2014 diff --git a/content/articles/2014/05/teched-n-a-2014-session-recordings/index.md b/content/articles/2014/05/teched-n-a-2014-session-recordings/index.md new file mode 100644 index 000000000..f9485a3e0 --- /dev/null +++ b/content/articles/2014/05/teched-n-a-2014-session-recordings/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2014-05-15-teched-n-a-2014-session-recordings/ +title: TechEd N.A. 2014 Session Recordings +authors: + - Don Jones +date: "2014-05-15T20:50:50+00:00" +categories: + - PowerShell for Admins + - Training +aliases: + - /2014/05/teched-n-a-2014-session-recordings/ +--- + +There's some great PowerShell content now online for your viewing pleasure. +Jeffrey Snover and I had a blast doing "[Windows PowerShell Unplugged][1]," and I reviewed some best PowerShell practices (and hopefully provided a little inspiration for your career) in "[Windows PowerShell Best Patterns and Practices: Time to Get Serious.][2]" And the #2 overall session of TechEd? "[DSC: A Practical Overview][2]," including a surprise demo (and announcement) from Snover showing DSC running on Linux. +Enjoy! + + [1]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2014/DCIM-B318#fbid= + [2]: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2014/DCIM-B417#fbid= diff --git a/content/articles/2014/05/verified-effective-exams-will-begin-soon-looking-for-early-registrants/index.md b/content/articles/2014/05/verified-effective-exams-will-begin-soon-looking-for-early-registrants/index.md new file mode 100644 index 000000000..4606e25f1 --- /dev/null +++ b/content/articles/2014/05/verified-effective-exams-will-begin-soon-looking-for-early-registrants/index.md @@ -0,0 +1,28 @@ +--- +url: /articles/2014-05-24-verified-effective-exams-will-begin-soon-looking-for-early-registrants/ +title: "[UPDATED] Verified Effective Exams will Begin Soon" +authors: + - Don Jones +date: "2014-05-24T23:21:00+00:00" +categories: + - Announcements +aliases: + - /2014/05/verified-effective-exams-will-begin-soon-looking-for-early-registrants/ +--- + +Check it out... +[![getcertificate](https://powershell.org/wp-content/uploads/2014/05/getcertificate.png)](https://powershell.org/wp-content/uploads/2014/05/getcertificate.png) + +## Wave 1 + +We'll be going live with the PowerShell Toolmaker program very soon. Wave 1 will permit our PowerShell Summit N.A. 2014 alumni who registered early and were given a free exam. If you're one of those folks, **and if you would like to be an early registrant, please contact exams at PowerShell.org**. You will need to have your Summit confirmation code (it was e-mailed to you when you registered, and was printed on your badge; we cannot provide it to you if you've lost it). **We're looking for a small handful of early registrants to take the exam and help us test the grading systems**. If you pass, it's "real," and you'll get an e-certificate like the one shown here! +How do you know if you got a free exam? There was a slip included with your badge at the Summit. If you weren't paying attention, we'll allow you to try entering your Summit confirmation code as an exam voucher to see if it works. If you can't find your confirmation code, you're out of luck. +Wave 1 is designed to let us test the system and make sure everything is working well, in a small enough scale to manage any problems that arise. + + +## Next Steps + +If you'd like to know more about the program, and understand when it may be open to you, please review the [VERIFIED EFFECTIVE information page][1]. + + + [1]: https://powershell.org/?p=15671 diff --git a/content/articles/2014/05/why-puppet-vs-dsc-isnt-even-a-thing/index.md b/content/articles/2014/05/why-puppet-vs-dsc-isnt-even-a-thing/index.md new file mode 100644 index 000000000..ec0619384 --- /dev/null +++ b/content/articles/2014/05/why-puppet-vs-dsc-isnt-even-a-thing/index.md @@ -0,0 +1,65 @@ +--- +url: /articles/2014-05-14-why-puppet-vs-dsc-isnt-even-a-thing/ +title: "Why Puppet vs. DSC Isn't Even a Thing" +authors: + - Don Jones +date: "2014-05-14T13:06:15+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/05/why-puppet-vs-dsc-isnt-even-a-thing/ +--- + +After all the DSC-related excitement this week, there have been a few online and Twitter-based discussions including Chef, Puppet, and similar solutions. Many of these discussions start off with a tone I suppose I should be used to: fanboy dissing. "Puppet already does this and is cross-platform! Why should I bother with DSC?" Those people, sadly, miss the point about as entirely as it's possible to do. + +## Point 1: Coolness + +First, what Microsoft has accomplished with DSC is **cool.** Star Wars Episode V was also cool. These facts do not prevent previous things - Puppet/Chef/etc and Episode IV - from being cool as well. Something new being cool does not make other things less cool. This shouldn't be a discussion of, "Puppet did this first, so nothing else can possibly be interesting at the same time." As _IT professionals,_ we should be looking at _everything_ with an eye toward what it does, and what new ideas it might offer than can be applied to existing approaches. + +## Point 2: Switching + +Have you seen the magazine ads suggesting you ditch Puppet and start using DSC? No, you have not - and you will not. If Puppet/Chef/etc is meeting your needs, keep using it. The fact that Microsoft has introduced a technology that accomplishes similar things (make no mistake, they're not the same and aren't intended to be), doesn't mean Microsoft is trying to convince you to change. +I know where people get confused on this, because in the past that's exactly what Microsoft intended to do. They're not, this time. And I'll explain why in a minute. + +## Point 3: DSC on Linux + +Snover demonstrated a DSC Local Configuration Manager running on Linux, consuming a standard DSC MOF file, being used to set up an Apache website on the server. The underlying DSC resources were native Linux code. +This is not an attempt to convince Linux people to switch to Windows, nor is it an attempt to convince them to use DSC. Saying so is like saying, "Microsoft made PowerShell accept forward slashes as path separators in an attempt to convert Linux people.... _but we're too smart for that, hahahahah!"_ It's idiotic. Microsoft knows you're not going to suddenly break down and switch operating systems. They may be a giant corporation that sometimes makes silly moves, but they're not _dumb._ +No, DSC on Linux is for _Windows admins_ who choose to use DSC, and who want to extend that skill set to other platforms they have to manage. People who aren't, in other words, faced with a "switch" decision. + +## Point 4: Puppet/Chef/etc Should Use DSC + +Linux is, in many many ways, a more simplistic OS than Windows. And I mean that in a very good way, not as a dig. Most config information comes form text files, and text files are ridiculously easy to edit. Getting a solution like Puppet to work on Linux is, form a purely technical perspective, pretty straightforward. Windows, on the other hand, is built around an enormous set of disparate APIs, meaning getting something like Chef/DSC/whatever working on Windows is not only harder, it's essentially a never-ending task. +Microsoft is pouring time and money into creating DSC resources that can, through a very simple and consistent interface, configure tons of the OS. The coverage provided by DSC resources will continue to grow - exponentially, I suspect. That means Microsoft is doing a lot of work that you don't have to. +Even if you're using Puppet/Chef/etc instead of DSC, you can still piggyback on all the _completely open and human-readable code_ that actually makes DSC work. Your recipes and modules can simply call those DSC resources directly. You're not "using" DSC, but you're snarfing its code, so that you don't have to re-invent that wheel yourself. This should make Puppet/Chef people super-happy, because their lives got easier. Yes, you'll doubtless have to write some custom stuff still, but "save me +some + work" should always be a good thing. + +## Point 5: Tool vs. Platform + +Another thing that sidetracks these discussions is folks not understanding that Puppet/Chef/etc each provide a complete solution stack. They are a management console, they are a domain-specific language, and they are a platform-level implementation. When you adopt Puppet, you adopt it from top to bottom. +DSC isn't like that. +DSC only provides the platform-level implementation. It doesn't come with the management tools you actually need in a large environment, or even in many medium-sized environments. I completely expect tools like System Center Configuration Manager, or something, to provide the management-level tooling on top of DSC at some point - but we aren't discussing System Center. +So arguing "Puppet vs. DSC" is a lot like arguing "Toyota vs. 6-cylinder engine." The argument doesn't make sense. Yes, at the end of the day, Puppet/Chef/etc and DSC are meant to accomplish every similar things, but DSC is only a piece of the picture, which leads to the most important point. + +## Point 6: Microsoft Did Something Neat + +You can't take your Puppet scripts and push them to a Chef agent, nor can you do the reverse. Puppet/Chef/etc are, as I mentioned, fully integrated stacks - and they're proprietary stacks. "Proprietary" is not the same as "close-sourced;" and I realize that the languages used by these products aren't specifically proprietary. But the Puppet agent only knows how to handle Puppet scripts, and the Chef agent only knows how to read Chef scripts. That's +not + a dig at those products - being an integrated, proprietary stack isn't a bad thing at all. +But it's interesting that Microsoft took a different approach. Interesting in part because _they're_ usually the ones making fully-integrated stacks, where you can only use their technology if you fully embrace their entire product line. This time, _Microsoft bucked the trend_ and didn't go fully-integrated, proprietary stack. Microsoft did this, and the simple fact that they did is important, even if you don't want to use _any_ of their products. +From the top-down, that is from the management side down, Microsoft isn't forcing you to use PowerShell. They're not forcing you to use Microsoft technology at all, in fact. The configuration file that goes to a managed node is a static MOF file. That's a plain-text file, as in "Management Object Format," as in developed by the Distributed Management Task Force (DMTF). A vendor-neutral standard, in other words. +See, Microsoft _isn't_ pushing DSC as a fully integrated stack. DSC is just the bottom layer that accepts a configuration and implements it. Puppet Labs could absolutely design their product to turn Puppet scripts into the MOF file that DSC needs. You'd be able to completely leverage _the OS-native, built-in configuration agent_ and all its resources, right from Puppet. +Frankly, de-coupling the administrative tooling from the underlying API should make people _happy._ If we're having a really professional, non-fanboy discussion about declarative configuration, I think you have to admit that Microsoft has kinda done the right thing. In a perfect world, the Puppet/Chef/etc administrative tools would let you write your configuration scripts in their domain-specific language, and then compile those to a MOF. Everyone's agents would accept the same kind of MOF, and execute the MOF using local, native resources. That approach means _any_ OS could be managed by _any_ tool. _That's_ cross-platform. You'd be free to switch tools anytime you wanted, because the underlying agents would all accept the same incoming language - MOF. +I'm not saying Puppet/Chef/etc _should_ do that. But if you're going to make an argument about cross-platform and vendor-agnostic tooling, Microsoft's _approach_ is the right one. They've implemented a service that accepts _vendor-neutral configurations_ (MOF), and implements them using local, native resources. You can swap out the tooling layer anytime you want to. You don't need to write PowerShell; you just need to produce a MOF. + +## At the End of the Day + +I think the folks behind Puppet/Chef/etc totally "get" all this. I think you're probably going to see them taking steps to better leverage the work MS is doing on DSC, simply because it saves _them,_ and their users, work. And I don't think you're going to see Microsoft suggesting you ditch Puppet in favor of DSC. That's a complete non-argument, and nobody at Microsoft even understands why people thing the company wants that. +I fully recognize that there's a lot of "Microsoft vs. Linux" animosity in the world - the so-called "OS religions." I've never understood that, and I certainly am not trying to convince anyone of the relative worth of one OS over another. PowerShell.org - a community dedicated to a Microsoft product - runs on a CentOS virtual machine, which should tell you something about my total lack of loyalty when it comes to choosing the right tool for a job. If you're similarly "non-religious" about operating systems, I think DSC is worth taking a look at _just to take a look at it._ What's it do differently? How can you leverage that in your existing world? Are there any approaches that might be worth considering? +Part of my frustration about the whole "Puppet vs DSC" meme is that it smacks of, "my toys are shinier than your toys," which is just... well, literally childish. And it worries me that people are missing some of the above, very important, points - mainly, that Microsoft is trying really damn hard to play nicely with the other kids in the sandbox for a change. _Encourage_ that attitude, because it benefits everyone. + +## Once More... + +And again, I don't think Microsoft is trying to convince you to use DSC, or any other MS product, here. I'm certainly not trying to do so. I think DSC presents an opportunity for folks who already have a declarative configuration management system, strictly in terms of saving you some work in custom module authoring. And I think for folks that _don't_ have a declarative configuration management solution, and who already have an investment in Microsoft's platform, DSC is going to be an exceptionally critical technology to master. That doesn't in any way diminish the accomplishment of the folks behind Puppet/Chef/etc. In fact, if nothing else, it further validates those products' goals. And I think it's massively interesting that Microsoft took an approach that is open to be used by those other products, rather than trying to make their own top-to-bottom stack. It's a shift in Microsoft's strategic thinking, if nothing else, and an explicit acknowledgement that the world is bigger than Redmond. +Let's at least "cheers" for that shift in attitude. diff --git a/content/articles/2014/05/yasg-yet-another-scripting-game/index.md b/content/articles/2014/05/yasg-yet-another-scripting-game/index.md new file mode 100644 index 000000000..d928805b9 --- /dev/null +++ b/content/articles/2014/05/yasg-yet-another-scripting-game/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2014-05-30-yasg-yet-another-scripting-game/ +title: YASG! (Yet Another Scripting Game) +authors: + - Terri Donahue +date: "2014-05-30T16:02:23+00:00" +aliases: + - /2014/05/yasg-yet-another-scripting-game/ +--- + +The monthly Charlotte PowerShell Users Group meeting is coming up quickly. Mark Thursday, June 5th on your calendars. All of our MIA leaders should be at this one. Hopefully we will be able to personally congratulate the Teresa, aka ScriptingWife, on her recent MVP Award. Jump on over to the [MeetUp](http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/178572422/) page and let us know if we will see you there. diff --git a/content/articles/2014/06/_index.md b/content/articles/2014/06/_index.md new file mode 100644 index 000000000..c59a8a996 --- /dev/null +++ b/content/articles/2014/06/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from June 2014" +description: "PowerShell.org Articles published in June 2014." +--- diff --git a/content/articles/2014/06/charlotte-powershell-user-group-no-meeting-in-july-enjoy-your-holiday/index.md b/content/articles/2014/06/charlotte-powershell-user-group-no-meeting-in-july-enjoy-your-holiday/index.md new file mode 100644 index 000000000..789732451 --- /dev/null +++ b/content/articles/2014/06/charlotte-powershell-user-group-no-meeting-in-july-enjoy-your-holiday/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2014-06-16-charlotte-powershell-user-group-no-meeting-in-july-enjoy-your-holiday/ +title: Charlotte PowerShell User Group No meeting in July, enjoy your holiday! +authors: + - ScriptingWife +date: "2014-06-16T22:00:59+00:00" +aliases: + - /2014/06/charlotte-powershell-user-group-no-meeting-in-july-enjoy-your-holiday/ +--- + +There will not be a meeting in July in Charlotte, please enjoy the 4th of July holiday. We will be back on schedule in August. diff --git a/content/articles/2014/06/european-powershell-summit/index.md b/content/articles/2014/06/european-powershell-summit/index.md new file mode 100644 index 000000000..0a39e454e --- /dev/null +++ b/content/articles/2014/06/european-powershell-summit/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2014-06-19-european-powershell-summit/ +title: European PowerShell Summit +authors: + - Richard Siddaway +date: "2014-06-20T07:35:51+00:00" +categories: + - PowerShell Summit +aliases: + - /2014/06/european-powershell-summit/ +--- + +There seems to have been a bit of confusion regarding the European PowerShell Summit as the site will tell you that registration is currently unavailable. +There isn't a problem and the Summit **HAS NOT** sold out at this time. WE just haven't opened registration yet. +**Registration will open on 15 July 2014** +. diff --git a/content/articles/2014/06/free-online-access-to-techletter-back-issues/index.md b/content/articles/2014/06/free-online-access-to-techletter-back-issues/index.md new file mode 100644 index 000000000..eee912106 --- /dev/null +++ b/content/articles/2014/06/free-online-access-to-techletter-back-issues/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2014-06-13-free-online-access-to-techletter-back-issues/ +title: Free Online Access to TechLetter Back Issues +authors: + - Don Jones +date: "2014-06-13T18:38:08+00:00" +categories: + - Announcements +aliases: + - /2014/06/free-online-access-to-techletter-back-issues/ +--- + +Did you know that PowerShell.org has, for more than a year now, offered a mostly-monthly TechLetter e-mail newsletter? It's stuffed with community news, announcements (like our free [webinar][1] schedule), feature articles on PowerShell, and much more. It's a great way to learn a little bit at a time, and it's truly awesome content. +And we keep back issues for your perusal! +[You can find the back issues online][2]. We post all but the most recent 2-3 issues, but of course you can [subscribe and have them delivered right to your inbox][3] around the middle of most months. +We're always on the lookout for new content, too - and if you're thinking, "oh, I have nothing really to share," you're wrong! It can be as simple as an article about something you figured out. With more than 5,000 subscribers, someone's sure to appreciate your perspective! Contact our Editors at PowerShell.org via e-mail to submit your article, or to suggest an article idea. +And please - tell a friend! + + [1]: https://powershell.org/techsession-webinars/ "TechSession Webinars" + [2]: https://powershell.org/techletter/ + [3]: https://powershell.org/newsletter/ "Newsletter" diff --git a/content/articles/2014/06/omaha-powershell-user-group-is-filling-up-fast/index.md b/content/articles/2014/06/omaha-powershell-user-group-is-filling-up-fast/index.md new file mode 100644 index 000000000..18ca07db8 --- /dev/null +++ b/content/articles/2014/06/omaha-powershell-user-group-is-filling-up-fast/index.md @@ -0,0 +1,12 @@ +--- +url: /articles/2014-06-19-omaha-powershell-user-group-is-filling-up-fast/ +title: Omaha PowerShell User Group is Filling Up Fast! +authors: + - Jacob Benson +date: "2014-06-19T18:55:25+00:00" +aliases: + - /2014/06/omaha-powershell-user-group-is-filling-up-fast/ +--- + +The first meeting of the Omaha PowerShell User Group is filling up fast!  There are only 16 available seats so make sure you get your spot! +Meeting details and sign up information can be found at omahapsug.eventbrite.com diff --git a/content/articles/2014/06/omaha-powershell-user-group-is-open/index.md b/content/articles/2014/06/omaha-powershell-user-group-is-open/index.md new file mode 100644 index 000000000..9ebff3df4 --- /dev/null +++ b/content/articles/2014/06/omaha-powershell-user-group-is-open/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2014-06-05-omaha-powershell-user-group-is-open/ +title: Omaha PowerShell User Group is Open! +authors: + - Jacob Benson +date: "2014-06-05T18:51:10+00:00" +aliases: + - /2014/06/omaha-powershell-user-group-is-open/ +--- + +The Omaha PowerShell User Group is now open for business!  If you are in the Omaha-Council Bluffs-Lincoln area and are interested in being a part of it, either let myself, Jacob Benson (@vhusker) or Boe Prox (@proxb) know. +We are currently looking for a meeting place and are shooting for having our first meeting the last week in July.  In addition to finding out who might be interested in attending, we would also like to know what days/times work best for you and the kinds of things you would like to get out of the meetings. +You can follow us on Twitter at @OmahaPSUG.  If you wish to contact us through email you can reach us at omahapsug@gmail.com . diff --git a/content/articles/2014/06/phillyposh-06052014-meeting-summary-and-presentation-materials/index.md b/content/articles/2014/06/phillyposh-06052014-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..16b610480 --- /dev/null +++ b/content/articles/2014/06/phillyposh-06052014-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2014-06-09-phillyposh-06052014-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 06/05/2014 meeting summary and presentation materials +authors: + - John Mello +date: "2014-06-10T03:19:05+00:00" +aliases: + - /2014/06/phillyposh-06052014-meeting-summary-and-presentation-materials/ +--- + +* [Jeff Hicks][1] gave a presentation entitled “Getting Started with Desired State Configuration (DSC)”. During his talked Jeff gave an overview of [DSC][2] and walked through an example of a push mode configuration. A copy of his [ +presentation materials are available here +.][3] + * A [ +recording of this meeting +][4] has been posted to our [ +YouTube channel +][5] + + + + [1]: http://jdhitsolutions.com/blog/ + [2]: http://technet.microsoft.com/en-us/library/dn249912.aspx + [3]: https://github.com/PhillyPoSH/2014-06-Jeff-Hicks-DSC + [4]: https://www.youtube.com/watch?v=J5ru8h73F0g&feature=youtu.be + [5]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014/06/powershell-org-annual-operating-budget/index.md b/content/articles/2014/06/powershell-org-annual-operating-budget/index.md new file mode 100644 index 000000000..80d0e8ab7 --- /dev/null +++ b/content/articles/2014/06/powershell-org-annual-operating-budget/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2014-06-01-powershell-org-annual-operating-budget/ +title: PowerShell.org Annual Operating Budget +authors: + - Don Jones +date: "2014-06-01T14:30:30+00:00" +categories: + - Announcements +aliases: + - /2014/06/powershell-org-annual-operating-budget/ +--- + +As we approach our annual shareholder meeting for PowerShell.org, Inc., I wanted to take a moment and share some details about our 2014-2015 operating budget. +First, you can always [review the budget spreadsheet in our OneDrive account][1]. This is updated as our plans change, prices rise, and so on; you're welcome to check back whenever you like. +Now, let's talk about some of our organizational goals, and what some of the items in the spreadsheet mean. As you know, we've been fortunate to have the support of several corporate sponsors since our invention. MVP Systems, Interface Technical Training, CBT Nuggets, and SAPIEN Technologies have been amongst those helping us out; Interface and SAPIEN both signed on for a generous three-year commitment right when we launched, and we couldn't have gotten to this point without them. However, we know that companies' goals and positions change over time, so we've been trying to drive to a point where we didn't need to rely on corporate sponsorship. We now believe that the PowerShell Summit is stable enough that, with a conservative budget, we can meet our operational needs out of the profits from the North America and Europe events. +As a note, PowerShell.org isn't classified as a _nonprofit; _we're a _not-for-profit. _We're legally allowed to make a profit; it just isn't a goal. The corporation pays Federal income tax on any profits, although most of our income is spent on expenses, which end up being deductions. +As you'll notice in the spreadsheet, we believe we can meet our annual operating budget by applying a $175 overhead charge to each attendee of the Summit, assuming we get 100 attendees between the two events annually. That's _conservative; _the N.A. show has done 100 and 150, in its two years. So in reality the number can probably be much smaller. +Our $750 annual AWPP fee includes Summit admission, VERIFIED EFFECTIVE exams, and other benefits; our operating budget reflects the costs for these items (including virtual machine hosting for the examination program). So $175 of that $750 is earmarked for PowerShell.org; that leaves $575 to cover actual Summit expenses. Due to the exchange rate, Europe is our worst-case show for expenses, with a $330/person overhead for food and beverage. The remaining $245 goes to cover speaker overhead: speaker food and beverage (we admit them to the event for free, but they still eat), and some speaker travel reimbursement. With 50 paid attendees, that's $12,250 in overhead income. Subtract $3300 for 10 speakers' F&B, and we have about $9000 left to cover other expenses, including some speaker travel reimbursement. The US shows do somewhat better; in reality; we probably will take less than the $175 per person from the Europe show, to allow for more speaker travel expenses, and take a bit more from the US show where our expenses are lower and attendance is known to be higher. +Most of the budget line items should be fairly self-explanatory. In some cases, we're receiving some of the services for free at present; we've budgeted to pays for them should our free ride ever end. You're welcome to ask about anything that seems unclear, too. But you'll notice that there's no budget for salaries: nobody associated with PowerShell.org, Inc. is paid for their efforts. We're run by volunteers. +So what happens when we get 200 global Summit attendees instead of the 100 we budget for? That'll give us an operational pad. In most cases, it means we'll be able to be a bit more elaborate with the Summit itself, buying some food for an evening event, for example. As I mentioned, it'll also allow us to better reimburse speakers for their out-of-pocket travel expenses, which is definitely a goal. In fact, one reason we've tried to pay the operational budget from just half our expected attendance is specifically so we'll have extra funds so that speakers don't have to be entirely out-of-pocket to present at the Summits. +I hope this is helpful. As always, feel free to post your questions. + + [1]: http://1drv.ms/1eKECnJ diff --git a/content/articles/2014/06/quick-tip-wmi-vs-cim-syntax/index.md b/content/articles/2014/06/quick-tip-wmi-vs-cim-syntax/index.md new file mode 100644 index 000000000..fb5656c95 --- /dev/null +++ b/content/articles/2014/06/quick-tip-wmi-vs-cim-syntax/index.md @@ -0,0 +1,41 @@ +--- +url: /articles/2014-06-04-quick-tip-wmi-vs-cim-syntax/ +title: "Quick Tip: WMI vs. CIM Syntax" +authors: + - Don Jones +date: "2014-06-04T12:31:32+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/06/quick-tip-wmi-vs-cim-syntax/ +--- + +`# List all classes in a namespace +Get-CimClass -Namespace root\CIMv2 +Get-WmiObject -Namespace root\CIMv2 -List +`\# list all classes containing "service" in their name +Get-CimClass -Namespace root\CIMv2 | Where CimClassName -like '\*service\*' | Sort CimClassName +(or) +Get-CimClass -Namespace root\CIMv2 -Classname \*service\* +Get-WmiObject -Namespace root\CIMv2 -List | Where Name -like '\*service\*' | Sort Name +\# get all class instances +Get-CimInstance -Namespace root\CIMv2 -ClassName Win32_OperatingSystem +Get-WmiObject -Namespace root\CIMv2 -Class Win32_OperatingSystem +\# filter class instances +Get-CimInstance -Namespace root\CIMv2 -ClassName Win32_LogicalDisk -Filter "DriveType=3" +Get-WmiObject -Namespace root\CIMv2 -Class Win32_LogicalDisk -Filter "DriveType=3" +\# show all properties +Get-CimInstance -Namespace root\CIMv2 -ClassName Win32_OperatingSystem | Get-Member +Get-WmiObject -Namespace root\CIMv2 -Class Win32_OperatingSystem | Get-Member +\# show all properties and values +Get-CimInstance -Namespace root\CIMv2 -ClassName Win32_OperatingSystem | fl * +Get-WmiObject -Namespace root\CIMv2 -Class Win32_OperatingSystem | fl * +\# remote computer +Get-CimInstance -Namespace root\CIMv2 -ClassName Win32_BIOS -ComputerName dc,win81 +Get-WmiObject -Namespace root\CIMv2 -Class Win32_BIOS -ComputerName dc,win81 +\# use CIM command to talk to non-CIM computer +Get-CimInstance -Namespace root\CIMv2 -ClassName win32_BIOS -CimSession ( +New-CimSession -ComputerName OLD-XP-PC -SessionOption ( +New-CimSessionOption -Protocol Dcom +) +) diff --git a/content/articles/2014/06/wish-list-better-code-formatting-in-the-forums-can-you-help/index.md b/content/articles/2014/06/wish-list-better-code-formatting-in-the-forums-can-you-help/index.md new file mode 100644 index 000000000..987c4a80e --- /dev/null +++ b/content/articles/2014/06/wish-list-better-code-formatting-in-the-forums-can-you-help/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2014-06-09-wish-list-better-code-formatting-in-the-forums-can-you-help/ +title: "Wish List: Better Code Formatting in the Forums (Can You Help?)" +authors: + - Don Jones +date: "2014-06-09T18:06:36+00:00" +aliases: + - /2014/06/wish-list-better-code-formatting-in-the-forums-can-you-help/ +--- + +I know it's been a "wish" of many folks for our forums to have better code formatting. Well, if you know some PHP and a little about WordPress, you can make it happen. +What we need is a WordPress plugin that hooks the action for post displays. The plugin needs to take the post body, and look for anything contained within HTML "code" tags or "pre" tags. +Within that content, the plugin needs to strip any further code/pre tags (WordPress has a bit of a glitch where it'll sometimes nest them). It should then HTML-encode the remaining content to turn any backticks into an HTML entity. Finally, it should color-code the content, or whatever, and hand it back to WordPress for display. +If you think you might be interested, let me know. +There ARE existing code formatters. But they have some weaknesses: + + * Many require you to use a custom shortcode, which our forums users won't pick up on. Getting folks to use the standard CODE tag, which is even on the toolbar, is hard enough. + * Most require additional directives to specify the language and whatnot that will be formatted - that's a hurdle people, in the past, weren't able to grasp. + * Some use extensive client-side JavaScript, which is heavy, performs poorly, and doesn't interact well with some of the other JavaScript on the site. + * Many don't accommodate WordPress' treatment of backticks. WP wants them to be code delimiters, but obviously in PowerShell the backtick is important for other reasons. + +What we need isn't giant, and it isn't complicated, it'll just require some time. +**UPDATE:** I'm working on it. +**UPDATE:** I think I got it. I'm using the GeSHi parser Joel uses on PoshCode.org, although I've applied different CSS style to it. If anyone would like to tackle improving that parser, or the CSS, you can hit me up and I'll give you the code as it stands. But as-is, we get line-numbered, colorized syntax in a scrollable window when you use`to enclose your code blocks. WordPress backticks aren't allowed for code, and inline code isn't supported. Older HTML-style CODE and PRE tags will be converted automatically. I think. diff --git a/content/articles/2014/07/_index.md b/content/articles/2014/07/_index.md new file mode 100644 index 000000000..b4890222d --- /dev/null +++ b/content/articles/2014/07/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from July 2014" +description: "PowerShell.org Articles published in July 2014." +--- diff --git a/content/articles/2014/07/omaha-powershell-user-group-meeting-notesvideo/index.md b/content/articles/2014/07/omaha-powershell-user-group-meeting-notesvideo/index.md new file mode 100644 index 000000000..45a050287 --- /dev/null +++ b/content/articles/2014/07/omaha-powershell-user-group-meeting-notesvideo/index.md @@ -0,0 +1,27 @@ +--- +url: /articles/2014-07-30-omaha-powershell-user-group-meeting-notesvideo/ +title: Omaha PowerShell User Group Meeting Notes/Video +authors: + - Jacob Benson +date: "2014-07-30T14:31:57+00:00" +aliases: + - /2014/07/omaha-powershell-user-group-meeting-notesvideo/ +--- + +The first Omaha PowerShell User Group Meeting is in the books!  We had a great turnout with 26 people showing up last night. +The video Don Jones made for us is available on YouTube [here][1]. +Our next meeting will take place on August 26th with PowerShell MVP Bartek Bielawski doing the presentation on either Pre-Param Scriptology or PowerShell and OMI.  We will also have a short Scripting Game/Contest of some kind.  Stay tuned for the event sign up which should be going out soon. +If you would like to speak about PowerShell here is a list of some topics people have expressed interest in learning more about: +PowerShell Security/InfoSec +Desired State Configuration +OMI Interface w/PowerShell +Workflows/SMA +PowerCLI/VMWare +.NET Methods/Classes/Underneath/Exploration +OneGet/Chocolaty/Nuget +TFS/PowerShell Integration +PowerShell Formatting/Export Options +PowerShell Basics/PowerShell 101/Why PowerShell +Finally, if you have any ideas for things we could do for the Scripting Games/Contest please send them to omahapsug@gmail.com + + [1]: https://www.youtube.com/watch?v=NtAcl64oHH4&feature=youtu.be diff --git a/content/articles/2014/07/phillyposh-07032014-meeting-summary-and-presentation-materials/index.md b/content/articles/2014/07/phillyposh-07032014-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..f02c963b7 --- /dev/null +++ b/content/articles/2014/07/phillyposh-07032014-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2014-07-05-phillyposh-07032014-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 07/03/2014 meeting summary and presentation materials +authors: + - John Mello +date: "2014-07-05T18:46:17+00:00" +aliases: + - /2014/07/phillyposh-07032014-meeting-summary-and-presentation-materials/ +--- + +* [Ferdinand G. Rios][1] gave a presentation entitled “Building PowerShell GUI Tool Solutions" During his talked Ferdinand demonstrated how to use [Sapien PowerShell Studio 2014][2] to easily build GUI applications on top of PowerShell, + * A [ +recording of this meeting +][3] has been posted to our [ +YouTube channel +][4] + + [1]: http://www.ferdinandrios.com/ + [2]: http://www.sapien.com/software/powershell_studio + [3]: https://www.youtube.com/watch?v=1daOFL4lp5E&feature=youtu.be + [4]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014/07/registration-for-european-summit-2014-is-open/index.md b/content/articles/2014/07/registration-for-european-summit-2014-is-open/index.md new file mode 100644 index 000000000..64b4fbd17 --- /dev/null +++ b/content/articles/2014/07/registration-for-european-summit-2014-is-open/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2014-07-15-registration-for-european-summit-2014-is-open/ +title: Registration for European Summit 2014 is open +authors: + - Richard Siddaway +date: "2014-07-15T08:15:52+00:00" +categories: + - PowerShell Summit +aliases: + - /2014/07/registration-for-european-summit-2014-is-open/ +--- + +Registration for the PowerShell Summit Europe 2014 is now open. Follow the links under Events diff --git a/content/articles/2014/08/_index.md b/content/articles/2014/08/_index.md new file mode 100644 index 000000000..4583dc38e --- /dev/null +++ b/content/articles/2014/08/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from August 2014" +description: "PowerShell.org Articles published in August 2014." +--- diff --git a/content/articles/2014/08/denverpsug-keith-hill-presenting/index.md b/content/articles/2014/08/denverpsug-keith-hill-presenting/index.md new file mode 100644 index 000000000..3fbb834db --- /dev/null +++ b/content/articles/2014/08/denverpsug-keith-hill-presenting/index.md @@ -0,0 +1,115 @@ +--- +url: /articles/2014-08-26-denverpsug-keith-hill-presenting/ +title: DenverPSUG – Keith Hill Presenting +authors: + - JasonMorgan +date: "2014-08-26T15:32:29+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/08/denverpsug-keith-hill-presenting/ +--- + +Hello everyone, +The Denver PowerShell User Group will be meeting again on September 4th and we will have [Keith Hill][1] presenting. Keith has published an ebook, is a repeat Microsoft MVP, and has been heavily involved in writing and maintaining the PowerShell Community Extensions. +You can find more information on the event as well as RSVP here: + + + + + +### + Keith Hill - Effective PowerShell + + + + + + Thursday, Sep 4, 2014, 7:00 PM + + + + + + +899 Logan st + + +Suite 210 Denver, CO + + + + + + + +8 PowerShell People Went + + + + + + + + + ![](https://secure.meetupstatic.com/photos/member/6/8/3/2/thumb_269906674.jpeg) + + + + + + ![](https://secure.meetupstatic.com/photos/member/b/a/4/d/thumb_11027693.jpeg) + + + + + + ![](https://secure.meetupstatic.com/photos/member/c/0/9/6/thumb_219409302.jpeg) + + + + + + ![](https://secure.meetupstatic.com/photos/member/3/6/3/0/thumb_71293872.jpeg) + + + + + + ![](https://secure.meetupstatic.com/photos/member/6/6/b/e/thumb_206426302.jpeg) + + + + + + ![](https://secure.meetupstatic.com/photos/member/b/c/3/6/thumb_222648182.jpeg) + + + + + + ![](https://secure.meetupstatic.com/photos/member/6/f/4/thumb_8401780.jpeg) + + + + + + + + + PowerShell MVP Keith Hill, http://rkeithhill.wordpress.com/, will be giving a talk on effective PowerShell.  It's an excellent session for anyone but it should work really well for those just getting started with PowerShell.  Also a great talk for more intermediate and advanced users. + + + + + + + + + [**Check out this Meetup →**](https://www.meetup.com/Denver-PowerShell-User-Group/events/199909982/) + + + + + + [1]: http://rkeithhill.wordpress.com/ diff --git a/content/articles/2014/08/european-summit-deadline-approaching/index.md b/content/articles/2014/08/european-summit-deadline-approaching/index.md new file mode 100644 index 000000000..dc45ce88c --- /dev/null +++ b/content/articles/2014/08/european-summit-deadline-approaching/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2014-08-28-european-summit-deadline-approaching/ +title: European Summit deadline approaching +authors: + - Richard Siddaway +date: "2014-08-28T17:23:53+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2014/08/european-summit-deadline-approaching/ +--- + +There are just over two weeks left for you to register for the European PowerShell Summit. At the moment we are still short of the number that would enable us to repeat a European Summit in 2015. We had a lot of comments from people stating they wanted a Summit in Europe. Now is the time to step up and support that idea. +Hope to see you there diff --git a/content/articles/2014/08/omaha-powershell-user-group-meeting-826/index.md b/content/articles/2014/08/omaha-powershell-user-group-meeting-826/index.md new file mode 100644 index 000000000..048fee57b --- /dev/null +++ b/content/articles/2014/08/omaha-powershell-user-group-meeting-826/index.md @@ -0,0 +1,12 @@ +--- +url: /articles/2014-08-18-omaha-powershell-user-group-meeting-826/ +title: Omaha PowerShell User Group Meeting – 8/26 +authors: + - Jacob Benson +date: "2014-08-18T12:36:09+00:00" +aliases: + - /2014/08/omaha-powershell-user-group-meeting-826/ +--- + +The next (and second ever) meeting of the Omaha PowerShell Users Group is taking place next Tuesday, August 26th.  MVP Bartek Bielawski will be talking about OMI on Windows and Linux. +I am having some issues with Lync in our Office 365 account so as soon as that gets straightened out I will be creating the invite for you to sign up, so watch for that! diff --git a/content/articles/2014/08/philadelphia-meeting-september-4th-2014/index.md b/content/articles/2014/08/philadelphia-meeting-september-4th-2014/index.md new file mode 100644 index 000000000..3c6a97718 --- /dev/null +++ b/content/articles/2014/08/philadelphia-meeting-september-4th-2014/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2014-08-20-philadelphia-meeting-september-4th-2014/ +title: Philadelphia Meeting – September 4th 2014 +authors: + - John Mello +date: "2014-08-21T03:59:22+00:00" +aliases: + - /2014/08/philadelphia-meeting-september-4th-2014/ +--- + +Join us Thursday, September 4th where [Jan Egil RIng][1] will be presenting a talk on **Get Started with Windows PowerShell Desired State Configuration** +Jan will explain how to use Windows PowerShell Desired State Configuration (DSC), which was introduced in Windows PowerShell 4.0, to configure your environment. The purpose of DSC is to provide Deployment, Configuration and Compliance capabilities for Windows resources such as a files, services, roles and features, users, groups and anything that can be managed from PowerShell by using custom resources such as a script. During his talk you will + + * Learn how to use the configuration keyword to define configurations for different resources. + * Learn the two different configuration modes - Pull and Push - and how to configure them. + * See several demos on how DSC can be leveraged in the real world + +**More about Jan:** +Jan Egil Ring works as a Lead Architect on the Infrastructure Team at Crayon, Norway. He mainly works with Microsoft server-products, and has a strong passion for Windows PowerShell. In addition to being a consultant, he is a Microsoft Certified Trainer. He has obtained several certifications such as MCSE: Server Infrastructure and MCSE: Private Cloud. He has a strong passion for Windows PowerShell, and regularly writes articles for PowerShell Magazine, the Crayon Services blog and the Norwegian TechNet blog. He is also a multiple-year recipient of the Microsoft Most Valuable Professional Award for his contributions in the Windows PowerShell technical community. +You can follow Jan on [Twitter][2], [LinkedIn][3], or subscribe to his [blog][1]. +Please [register](http://phillyposh.eventbrite.com/) if you plan to attend in person or online. The meeting URL to join us remotely will be included in your Eventbrite registration confirmation. +[![Eventbrite - PhillyPoSH September 4th 2014](https://www.eventbrite.com/custombutton?eid=12733862325)](http://www.eventbrite.com/e/phillyposh-september-4th-2014-tickets-12733862325?ref=ebtnebregn) + + [1]: http://blog.powershell.no/ + [2]: http://twitter.com/janegilring + [3]: http://www.linkedin.com/pub/8/290/a26 diff --git a/content/articles/2014/08/registration-for-august-omaha-powershell-user-group-meeting-is-live/index.md b/content/articles/2014/08/registration-for-august-omaha-powershell-user-group-meeting-is-live/index.md new file mode 100644 index 000000000..15e1b8583 --- /dev/null +++ b/content/articles/2014/08/registration-for-august-omaha-powershell-user-group-meeting-is-live/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2014-08-19-registration-for-august-omaha-powershell-user-group-meeting-is-live/ +title: Registration for August Omaha PowerShell User Group Meeting is Live! +authors: + - Jacob Benson +date: "2014-08-19T13:22:47+00:00" +aliases: + - /2014/08/registration-for-august-omaha-powershell-user-group-meeting-is-live/ +--- + +https://www.eventbrite.com/e/omaha-powershell-users-group-august-meeting-tickets-12703856577 + + + In the second ever meeting of the Omaha PowerShell User Group we will have PowerShell MVP Bartek Bielawski talking about OMI: PowerShell Everywhere: + + + - + CIM cmdlets and CDXML commands are advertised as technology that will enable PowerShell users to manage anything in datacenter. It wouldn’t be possible though without something that we can talk to on the remote end, and that’s were OMI kicks in. In this presentation I will show you how you can manage processes on Linux using OMI and CIM, and how easy it is to create CDXML based commands on top of it. + + + + This meeting (and all future meetings) are for anyone who uses or is interested in PowerShell. + + + This meeting is not limited to people who reside in Omaha.  If you are in the area and want to come, you are more than welcome! diff --git a/content/articles/2014/09/_index.md b/content/articles/2014/09/_index.md new file mode 100644 index 000000000..8a381271a --- /dev/null +++ b/content/articles/2014/09/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from September 2014" +description: "PowerShell.org Articles published in September 2014." +--- diff --git a/content/articles/2014/09/instructions-for-powershell-summit-north-america-2015-registration/index.md b/content/articles/2014/09/instructions-for-powershell-summit-north-america-2015-registration/index.md new file mode 100644 index 000000000..c58ba6b34 --- /dev/null +++ b/content/articles/2014/09/instructions-for-powershell-summit-north-america-2015-registration/index.md @@ -0,0 +1,31 @@ +--- +url: /articles/2014-09-23-instructions-for-powershell-summit-north-america-2015-registration/ +title: Instructions for PowerShell Summit North America 2015 Registration +authors: + - Don Jones +date: "2014-09-23T19:28:11+00:00" +categories: + - PowerShell Summit +aliases: + - /2014/09/instructions-for-powershell-summit-north-america-2015-registration/ +--- + +If you're planning to attend PowerShell Summit North America 2015, to be held at the end of April 2015 in Charlotte, North Carolina, you should read the following important information: + + * The registration site will be open from 30 October 2014 to 30 March 2015. There is about a 30-day window from the end of registration to the event itself. There are no exceptions to this cutoff. + * You should read the **[extremely important information][1]** about registering. It also contains links to the agenda and to the registration site. + * The agenda will be available in mid-October 2014. + * We will only have about 90 seats available due to the size of the venue. You will probably need to plan to register early, because we don't have a magical way of making the building bigger to accommodate "just one more person." + * We will not be holding seats for later registrations. Everything becomes available on 30 October 2014. We've done the "phased release" before and it was a major PITA. + * Yes, we will be recording all sessions and posting them on the PowerShell.org YouTube channel. We will not be live-streaming because the facilities don't exist to do so. Recordings will include slides/demos and a room microphone; this will not be Channel 9-quality, but it should get the job done. Or you could, you know, show up at the live event. + +**If you are planning to have someone in your organization register and pay on your behalf, it is crucial that they do so  +using your e-mail address +, not theirs.** Otherwise, we may not be able to admit you to the event. ** +This is a big deal. + **Please don't mess it up. +** +Please help us get the word out. +** This is entirely a community event, run entirely by volunteers who are paying their own way to the event also. We have zero marketing and advertising budget, because we try to keep the overall costs as low as humanly possible. Set reminders to tweet, Facebook, etc. once a month and help us let the world know about the event. + + [1]: https://powershell.org/community-events/summit/ diff --git a/content/articles/2014/09/join-the-dsc-hackathon-at-powershell-summit-2014-europe/index.md b/content/articles/2014/09/join-the-dsc-hackathon-at-powershell-summit-2014-europe/index.md new file mode 100644 index 000000000..168c76648 --- /dev/null +++ b/content/articles/2014/09/join-the-dsc-hackathon-at-powershell-summit-2014-europe/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2014-09-28-join-the-dsc-hackathon-at-powershell-summit-2014-europe/ +title: Join the DSC Hackathon at PowerShell Summit 2014 Europe +authors: + - Don Jones +date: "2014-09-28T14:08:36+00:00" +categories: + - PowerShell Summit +aliases: + - /2014/09/join-the-dsc-hackathon-at-powershell-summit-2014-europe/ +--- + +On Monday night (Amsterdam time, September 29th), we'll be holding the first DSC Hackathon at PowerShell Summit Europe 2014. Attached are the scenarios we'll be asking participants to select from. We'll ask everyone to work in small groups, pick one scenario, and try to produce a custom DSC resource that solves the problem. +Many of these are from Microsoft's own internal "wish list" of resources that they don't yet have anyone assigned to. +You're welcome to participate, even if you're not present at the Summit. You _will _need to operate in Amsterdam time; we're only accepting submissions during that time (from about 6pm local time). If you'd like to participate, you'll need a Twitter account to begin with. When the Hackathon starts, drop a tweet that includes the hash tag #DSCHackathon, as well as the scenario you'd like to work on. We'll respond and connect you with a group that's working on that scenario. From there, the group will let you know how they'd like to communicate - possibly a Skype chat window, possibly an IRC chat, it'll be up to them. +In the event that Internet connectivity sucks, we'll simply do our best, and may direct remote users to work on their own. But, if you monitor the #DSCHackathon tag, you may be able to find other remote users to team up with. +There are no prizes - we're doing this for the good of the community. However, every team who hands in a working resource will get public recognition in the PowerShell team blog, on PowerShell.org, and wherever else we can manage to mention you :). +As a reminder, you should plan to have Windows PowerShell v4 or later on your laptop in order to participate. We don't anticipate going longer than 2-3 hours, and if you're on-site plan to use battery power for the entire period. Ideally, you'll want a server VM or two so that you can test the scenarios... which are attached herewith. And it's fine to get an early start on these, if you like. +Download: [DSC Hackathon][1] Scenarios + + [1]: https://powershell.org/wp-content/uploads/2014/09/DSC-Hackathon.docx diff --git a/content/articles/2014/09/last-call-for-the-european-powershell-summit-2014/index.md b/content/articles/2014/09/last-call-for-the-european-powershell-summit-2014/index.md new file mode 100644 index 000000000..2b801eaa3 --- /dev/null +++ b/content/articles/2014/09/last-call-for-the-european-powershell-summit-2014/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2014-09-06-last-call-for-the-european-powershell-summit-2014/ +title: LAST CALL for the European PowerShell Summit 2014 +authors: + - Richard Siddaway +date: "2014-09-06T08:50:32+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2014/09/last-call-for-the-european-powershell-summit-2014/ +--- + +This is the **last call** for attendee registration for the European PowerShell Summit 2014. +The Summit is in Amsterdam - 29 September to 1 October 2014. Details from the events page https://powershell.org/community-events/summit/. +Due to a change in circumstances beyond our control **we have to close public registration on 10 September 2014**. +If you contact us by 10 September and ask to be able to perform a funds transfer rather than paying on line you have until 15 September 2014 to complete that transaction. No monies or registrations will be accepted after 15 September. We will not accept any new request for paying by money transfer after 10 September. +Apologies for the change in dates (the web site states registration is open until 15 September) but our hands have been forced on this. +There are still a number of places available so please register quickly if you want to attend. The more attendees we have the better chance we have of staging a European PowerShell Summit in 2015. diff --git a/content/articles/2014/09/omaha-powershell-user-group-august-meeting-materials/index.md b/content/articles/2014/09/omaha-powershell-user-group-august-meeting-materials/index.md new file mode 100644 index 000000000..a62c254d0 --- /dev/null +++ b/content/articles/2014/09/omaha-powershell-user-group-august-meeting-materials/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2014-09-09-omaha-powershell-user-group-august-meeting-materials/ +title: Omaha PowerShell User Group August Meeting Materials +authors: + - Jacob Benson +date: "2014-09-09T19:25:33+00:00" +aliases: + - /2014/09/omaha-powershell-user-group-august-meeting-materials/ +--- + +In August Bartek Bielawski presented on OMI, PowerShell, Linux using PowerShell and the power of Sparkle Ponies.  His presentation notes and code can be found here:  https://onedrive.live.com/?cid=4BFE4A6675A48C91&id=4BFE4A6675A48C91%21115 diff --git a/content/articles/2014/09/philadelphia-meeting-october-2nd-2014/index.md b/content/articles/2014/09/philadelphia-meeting-october-2nd-2014/index.md new file mode 100644 index 000000000..75eca3761 --- /dev/null +++ b/content/articles/2014/09/philadelphia-meeting-october-2nd-2014/index.md @@ -0,0 +1,43 @@ +--- +url: /articles/2014-09-14-philadelphia-meeting-october-2nd-2014/ +title: Philadelphia Meeting – October 2nd 2014 +authors: + - John Mello +date: "2014-09-15T00:59:08+00:00" +aliases: + - /2014/09/philadelphia-meeting-october-2nd-2014/ +--- + +Join us Thursday, October 2nd where +[ + +John Mello + +](http://mellositmusings.com/) +will be presenting a talk on  + +The different custom object creation methods and their performance tradeoffs. + +Followed by +[ + +TJ Turner + +](http://techguytj.com/bio/) +will give a talk entitled + +Intro to basic run space pools + +.  + + + +Please [ +register +][1] if you plan to attend in person or online. The meeting URL to join us remotely will be included in your Eventbrite registration confirmation. +[![Eventbrite - PhillyPoSH October 2th 2014](https://www.eventbrite.com/custombutton?eid=13119002289)](http://www.eventbrite.com/e/phillyposh-october-2th-2014-tickets-13119002289?ref=ebtnebregn) +We are also giving [Meetup][2] a try for the next 6th month so feel free to register there as well. + + + [1]: http://phillyposh.eventbrite.com/ "phillyposh on eventbrite" + [2]: http://meetu.ps/2xTtT0 diff --git a/content/articles/2014/09/phillyposh-09042014-meeting-summary-and-presentation-materials/index.md b/content/articles/2014/09/phillyposh-09042014-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..05aea33db --- /dev/null +++ b/content/articles/2014/09/phillyposh-09042014-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2014-09-07-phillyposh-09042014-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 09/04/2014 meeting summary and presentation materials +authors: + - John Mello +date: "2014-09-08T02:39:58+00:00" +aliases: + - /2014/09/phillyposh-09042014-meeting-summary-and-presentation-materials/ +--- + +* [ +Jan Egil Ring +][1] gave a presentation entitled “Get Started with Windows PowerShell Desired State Configuration”. During his talked Jan went over a series of demos explaining how to use the configuration keyword to define configurations for different resources along with the different configuration modes. A copy of his demo scripts and presentation are available [here][2]. + * A [ +recording of this meeting + ][3]has been posted to our [ +YouTube channel +][4] + + [1]: http://blog.powershell.no/ + [2]: https://onedrive.live.com/?cid=4e672563938ed1e2&id=4E672563938ED1E2%2132074&ithint=folder,&authkey=!AAKDqB2auYF3L9w + [3]: https://www.youtube.com/watch?v=BeStZxknsCM&feature=youtu.be + [4]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014/09/powershell-summit-europe-2014-final-agenda/index.md b/content/articles/2014/09/powershell-summit-europe-2014-final-agenda/index.md new file mode 100644 index 000000000..7ca43c836 --- /dev/null +++ b/content/articles/2014/09/powershell-summit-europe-2014-final-agenda/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2014-09-23-powershell-summit-europe-2014-final-agenda/ +title: PowerShell Summit Europe 2014 – final agenda +authors: + - Richard Siddaway +date: "2014-09-23T20:12:43+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2014/09/powershell-summit-europe-2014-final-agenda/ +--- + +The final agenda for the PowerShell Summit is available at http://eventmgr.azurewebsites.net/event/home/PSEU14 +Circumstances beyond the control of PowerShell.org have meant we’ve had to make a few changes to the agenda from that previously published. +Look forward to seeing you all in Amsterdam. diff --git a/content/articles/2014/09/powershell-summit-europe-2014-prepare-for-the-dsc-hackathon/index.md b/content/articles/2014/09/powershell-summit-europe-2014-prepare-for-the-dsc-hackathon/index.md new file mode 100644 index 000000000..f97df3b3d --- /dev/null +++ b/content/articles/2014/09/powershell-summit-europe-2014-prepare-for-the-dsc-hackathon/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2014-09-02-powershell-summit-europe-2014-prepare-for-the-dsc-hackathon/ +title: "PowerShell Summit Europe 2014: Prepare for the DSC Hackathon" +authors: + - Don Jones +date: "2014-09-02T22:54:16+00:00" +categories: + - PowerShell Summit +aliases: + - /2014/09/powershell-summit-europe-2014-prepare-for-the-dsc-hackathon/ +--- + +We're hoping that everyone attending the PowerShell Summit Europe 2014 will join our Monday evening **DSC Hackathon, **where we'll become "product team members for a night" and try to code up some DSC Resources from the team's own internal wish list! +We'll provide a cash bar as well as finger food for our on-site attendees... but you're welcome to participate remotely, too! Sometime on September 29th, watch PowerShell.org for a posting that includes the challenges. Choose your challenge, and follow the blog post instructions to submit them. We'll also include details for participating live via IRC and other chat mechanisms, and we may be able to do a live room-cast via Lync or something. +There are no winners and no losers - only the _entire community _wins, because completed entries will be added to the PowerShell.org GitHub repo and made available to the world, for free. But, coders who complete a resource _will_ receive public recognition, both here on PowerShell.org and in some other very visible venues! +Here's what you'll need to participate: + + * A laptop with a charged battery and PowerShell 4.0 installed. We won't be able to provide power, so make sure you can run 1-2 hours unplugged. + * Ideally, a virtual machine running Win2012R2 that is configured as a domain controller. If your laptop has limited resources, install the full server GUI on that and code right on it - it's the domain controller functionality you'll want. + * Whatever editing tools you like apart from the ISE. + * Beforehand, familiarize yourself with "The DSC Book." + * Have the [full DSC Resource Kit installed][1]. In many cases, you'll want to refer to existing resources to see how they do things. At a minimum, the xActiveDirectory module is a good one to have. + +Apart from that - stay tuned! + + [1]: http://gallery.technet.microsoft.com/scriptcenter/DSC-Resource-Kit-All-c449312d diff --git a/content/articles/2014/09/powershell-v5-class-support/index.md b/content/articles/2014/09/powershell-v5-class-support/index.md new file mode 100644 index 000000000..9d9bcd245 --- /dev/null +++ b/content/articles/2014/09/powershell-v5-class-support/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2014-09-08-powershell-v5-class-support/ +title: "PowerShell v5: Class Support" +authors: + - Don Jones +date: "2014-09-08T14:14:38+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +aliases: + - /2014/09/powershell-v5-class-support/ +--- + +_This post is based on the September 2014 preview release of WMF 5.0. This is pre-release software, so this information may change._ +One of the banner new features in PowerShell v5 is support for real live .NET Framework class creation in Windows PowerShell. The WMF 5.0 download's release notes has some good examples of what classes look  like, but I wanted to briefly set some expectations for the feature, based on my own early experiences. +The primary use case for classes, at this point, is for DSC resources. Rather than creating a special PowerShell module that has specially named functions, live in a specially named folder, and work in a special way - that's a lot of special, which means a lot of room for error - classes provide a more declarative way of creating DSC resources. +But we're a bit ahead of ourselves. What's a _class_? +In object-oriented programming, a _class_ is a hunk of code that provides a specific interface. Everything in the .NET Framework is a class. When you run Get-Process in PowerShell, for example, you are returning objects of the type System.Diagnostics.Process - or, in other languages, objects _of the class_ System.Diagnostics.Process. Each process is an _instance_ of the class. The class describes all the standardized things that a process can show you (like its name or ID), or that it can do (like terminate). Programmers build the functionality into the class itself. +Classes can have _static_ properties and methods - these are hunks of code that don't require an actual instance of a process. For example, you can start a process without having a process in the first place. The System.Math class in .NET has lots of static members - the static property Pi, for example, contains the numeric value of pi to a certain number of decimal places. The static Abs() method returns the absolute value of a number. +PowerShell classes are designed to provide similar functionality. The trick with PowerShell classes, at least at this stage of their development, is that they don't add their type name to any kind of global namespace. That is, let's say you write a class named My.Cool.Thing, and you save it into a script module named MyCoolThing.psm1. You can't just go into the shell and run **New-Object -TypeName My.Cool.Thing** to create an instance of the class, because there's nothing in PowerShell (yet) that knows to go look for your script module to find the class. That'll likely change in a future release, but for right now it means classes are kind of limited. +The basic rule is that you can only use a class _within the same module that contains the class. _That is, the class can only be "seen" from within the module. So, your MyCoolThing.psm1 module might define a class, and then might also define several commands (functions) that use the class - that's legal, and it will work. You still can't use New-Object; instead, you'd instantiate your class by using something like **ClassName::new()**, calling the static New() method of the class to instantiate it. I expect New-Object will get "hooked up" at some point, but it might not be until some future version of PowerShell. +Anyway, back to DSC. +DSC is a bit unique, because normally _you_ don't load resource modules; the Local Configuration Manager loads them. When you build a DSC resource class, you're forced to provide three methods: Get(), Set(), and Test(). The LCM loads your module, instantiates the class, and then calls the three methods as needed. DSC resources built in this fashion can live in a plain old module .PSM1 file - there's no need to create a DSCResources subfolder, no need to have an empty "root" module, or any of that. So it's a more elegant solution all around. Aside from some structural differences, you code them the same as you always have. v5 still supports the old-style resources, for backward compatibility, but class-based resources are the "way forward." I expect Microsoft will eventually refactor the DSC Resource Kit to be class-based resources, as soon as they get a minute and as soon as v5 is widely adopted. +So most of the "wiring" behind classes has, to this point, been designed to support that DSC use case. In other words, of all the things a PowerShell class will need to do, the team has _so far_ focused mainly on those things that impact DSC. The rest will come later - the release notes use the phrase, "...in this release" a lot, meaning the team understands where the current weaknesses are. "This release" in some cases may simply mean _this current preview release, _meaning they're targeting more features for v5's final release; in other cases, more features will have to wait for v6 (or whatever) or a later version of PowerShell. +So there's a little rambling on classes and what's presently in PowerShell v5. If you haven't already downloaded the preview and started playing with it, you should; _not in production, though. _Keep it in a test VM for the time being. diff --git a/content/articles/2014/09/powershell-v5-misc-goodness-including-auditing/index.md b/content/articles/2014/09/powershell-v5-misc-goodness-including-auditing/index.md new file mode 100644 index 000000000..df90fb123 --- /dev/null +++ b/content/articles/2014/09/powershell-v5-misc-goodness-including-auditing/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2014-09-10-powershell-v5-misc-goodness-including-auditing/ +title: "PowerShell v5: Misc Goodness (including Auditing)" +authors: + - Don Jones +date: "2014-09-10T14:49:04+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/09/powershell-v5-misc-goodness-including-auditing/ +--- + +Aside from classes and new DSC features, which I've already written about, there are a number of less-headline, but still-very-awesome, new capabilities. +_This article is based on the September 2014 preview release of WMF 5.0. Information is highly subject to change._ +First up is the **ability to automatically create PowerShell cmdlets from an OData endpoint. **Huh? OData is a kind of web service (basically); PowerShell gains the ability to look at the endpoint and construct a set of proxy cmdlets that let you interact with the endpoint more naturally. This is spiritually similar to what PowerShell can already do for a SOAP web service endpoint. +Next are some 7-years-overdue cmdlets for **managing ZIP files**: Compress-Archive and Expand-Archive. Finally. These use underlying .NET Framework ZIP functionality (I think), which has had _some_ compatibility problems in the past, so we'll see how these hold up. But they should be the missing link to letting you do everything DSC-related right in PowerShell, since you can now ZIP up your custom resources for deployment via pull server. +**Auditing gets a huge win**, and this is really more of a headline feature than people think. For one, the ISE now supports transcript creation. Yay! You can also "nest" transcripts, meaning you can have one running, and then start a second one to cover only a portion of time. Closing the second one lets the first remain running. You can also specify a central transcript directory, which is useful when you want to collect these things into a central folder for reporting. For example, you should now be able to set up Remoting endpoints that automatically kick off a transcript when someone connects, and saves them to that central location. +**More auditing** comes in the form of Group Policy settings. You've always been able to log the fact that certain commands were run (did you know that?), but now you can enable detailed script tracing that logs a crapload of detail to the PowerShell operational log (which can, like any other event log, be forwarded to another server). You get the complete details of every script block executed, even if it creates another script block. Again, this is set up in Group Policy - check out the WMF 5.0 release notes for the location. +**Ed Snowden gets a face slap** with new Cryptographic Message Syntax (CMS) cmdlets, including Get-CmsMessage, Protect-CmsMessage, and Unprotect-CmsMessage. These use PKI to encrypt data. By the way, **if your organization doesn't already have an internal PKI, WTF are you waiting for, you're ten years behind the curve, man. **PKI becomes more important to Windows environments every single day, and you need to get with the program. +There's also a new **fun feature for extracting content from strings. **This system uses some Microsoft Research functionality called FlashExtract. Essentially, you give it examples of what your data looks like, and then point it to a big string (like a text file) full of data. It can extract all the data pieces based on your example. It's early days for this technology, but it's kind of _awesome_ to see the PowerShell team giving us an easy way to play with it. +Because WMF 5.0 **introduces PowerShellGet**,** **it now includes commands to add PowerShellGet repositories. That means you can stand up your own repo, host your modules there, and install modules by simply running Install-Module (or find them using Find-Module). Tres awesome! We don't yet have technical details on what the heck a PowerShellGet repository actually looks like, but I'm sure that'll crop up. +ARE YOU PLAYING WITH WMF 5.0 ON A NON-PRODUCTION VM YET? YOU SHOULD BE. Times are changing and you gotta keep up! diff --git a/content/articles/2014/09/powershell-v5-whats-new-in-dsc/index.md b/content/articles/2014/09/powershell-v5-whats-new-in-dsc/index.md new file mode 100644 index 000000000..610ea49d6 --- /dev/null +++ b/content/articles/2014/09/powershell-v5-whats-new-in-dsc/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2014-09-09-powershell-v5-whats-new-in-dsc/ +title: "PowerShell v5: What's New in DSC" +authors: + - Don Jones +date: "2014-09-09T17:11:57+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/09/powershell-v5-whats-new-in-dsc/ +--- + +When Desired State Configuration (DSC) came out - gosh, just about a year ago - I kept telling people that there was more to come. And a lot of it is now just around the corner in PowerShell v5. +_This article is written to the September 2014 preview release - things may change for the final release._ +A major set of changes in DSC is a much more detailed and granular configuration of the Local Configuration Manager (LCM), the local "agent" that makes DSC work on the target node. This new level of configuration really shows you where Microsoft's thinking is. +For example, a single target node can be configured _to pull configurations from multiple pull servers. _That doesn't necessarily mean separate _machines, _as a single IIS instance can host multiple websites, but it means you're no longer limited to one MOF per computer. +Yes, I said that. The LCM can now _pull_ (but not have pushed to it) _partial configurations. _Each partial configuration is a MOF, but the understanding is that there can be more than one. There's still no dynamic evaluation of _which_ MOFs will be pulled; you have to specify them all in the LCM configuration, but now you can break a machine's total configuration into multiple bits. Each partial configuration is given a _source_, which is a pull server. +Each partial configuration can be given exclusivity over certain resources. This helps avoid overlap. For example, you might decided that Partial Config A has exclusive control over all xIPAddress settings, meaning those settings from _any other_ partial config wouldn't work. Partial configurations can also depend on each other, so that (for example), Partial Config B won't even run until Partial Config A is complete. +The LCM can also have a separate server configured for web- or file-based resource repositories, meaning those can be separated from the pull server endpoint. +What used to be called the "compliance server" is now simply the _reporting server_ - we mentioned in "The DSC Book" that the name of this would likely change. It's now a distinct configuration item, meaning _even a node in Push mode can report its status to the reporting server!_ +New global synchronization capabilities also exist. A node's configuration can be made dependent on _a configuration item from another node. _Meaning, Node "A" won't try to configure until Node "B" completes certain items first. Communications is all via WS-MAN and CIM. +A new **Get-DscConfigurationStatus** returns a high-level status for a node - similar to what the reporting server would collect - and an amazing new **Compare-DscConfiguration** can now accept a configuration and tell you _where a given node differs. _This is a big deal, and something a lot of folks wanted in PowerShell v4. There's also an **Update-DscConfiguration, **which forces a node to evaluate its DSC stuff right away. +DSC is quickly coming of age. In less than a year, we've seen (so far) 6 releases of additional resources, and now with PowerShell v5 we're seeing a number of important enhancements and evolutions in the core technology. Many of the things that frustrated folks initially are now taken care of. diff --git a/content/articles/2014/09/september-omaha-powershell-user-group-registration-is-live/index.md b/content/articles/2014/09/september-omaha-powershell-user-group-registration-is-live/index.md new file mode 100644 index 000000000..c0f9fca1a --- /dev/null +++ b/content/articles/2014/09/september-omaha-powershell-user-group-registration-is-live/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2014-09-09-september-omaha-powershell-user-group-registration-is-live/ +title: September Omaha PowerShell User Group Registration is Live! +authors: + - Jacob Benson +date: "2014-09-09T19:52:57+00:00" +aliases: + - /2014/09/september-omaha-powershell-user-group-registration-is-live/ +--- + +This month PowerShell MVP Trevor Sullivan will be presenting on using Windows Azure with PowerShell. Additionally you will want to bring your laptops (or favorite device to use PowerShell on) as we will have a little scripting challenge involving PowerShell, Credentials and Security. Also, my girlfriend has promised to make cookies for everyone! + + + Trevor Sullivan is an IT professional and a Microsoft Windows PowerShell MVP who has been in the field since early 2004. His focus has been on using various enterprise tools within the Microsoft platform to provide business value through positive end user impact. + + + [You can register here](https://www.eventbrite.com/e/omaha-powershell-user-group-september-meeting-tickets-13033167555) diff --git a/content/articles/2014/09/when-will-there-be-a-powershell-summit-in-____/index.md b/content/articles/2014/09/when-will-there-be-a-powershell-summit-in-____/index.md new file mode 100644 index 000000000..ebad2c54d --- /dev/null +++ b/content/articles/2014/09/when-will-there-be-a-powershell-summit-in-____/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2014-09-30-when-will-there-be-a-powershell-summit-in-____/ +title: When Will There be a PowerShell Summit in ____? +authors: + - Don Jones +date: "2014-09-30T11:18:11+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2014/09/when-will-there-be-a-powershell-summit-in-____/ +--- + +As we move into the middle of PowerShell Summit Europe 2014, we have a lot of folks asking, "when will you hold a Summit in ____" (insert the name of your favorite country). +Right now, PowerShell.org is committed to organizing both North American and European events, one per year, while there is audience demand for them. Both events will shift locations from year to year, and the location choice is driven by a number of criteria - mainly financial ones. +But we're all volunteers here. Each event requires upwards of 240 man-hours to put together, and an up-front financial commitment of up to $25,000. We're getting to the point where the organization can front that money, but it's been on personal credit cards to this point, paid back only once the event is complete. So... it's a big deal. Strictly from a time perspective, we just don't have enough to organize more events elsewhere in the world. +However, we continue to encourage folks to organize their own events. We've even come up with a brand name to get you started: PowerShell Forum. The idea is for those to be smaller 2-3 day, regional-level events that we help promote. We'll provide all the advice we can to help get you going, too. We'll put you in touch with the right folks so that if product team participation is an option, you can find out. We hope that a PowerShell Forum "grows up" to one day host a PowerShell Summit - because the organizers and volunteers are in place to let us hold a full Summit without taking on the entire time commitment ourselves. +In any community, if you want something good to come your way, the best way is to do it yourself - rather than asking someone else to bring the good to you. We feel that's particularly true with live events, because _you_ know the local market, the venues, the audience, the customs, the laws, and so on. +So, "when will there be a PowerShell Summit in _____?" The answer is, "when you make it happen." We'd love to help - but you'll have to take the first step. diff --git a/content/articles/2014/10/_index.md b/content/articles/2014/10/_index.md new file mode 100644 index 000000000..a0854cfd2 --- /dev/null +++ b/content/articles/2014/10/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from October 2014" +description: "PowerShell.org Articles published in October 2014." +--- diff --git a/content/articles/2014/10/how-to-have-the-powershell-summit-come-to-you/index.md b/content/articles/2014/10/how-to-have-the-powershell-summit-come-to-you/index.md new file mode 100644 index 000000000..a3bcc6b5a --- /dev/null +++ b/content/articles/2014/10/how-to-have-the-powershell-summit-come-to-you/index.md @@ -0,0 +1,37 @@ +--- +url: /articles/2014-10-16-how-to-have-the-powershell-summit-come-to-you/ +title: How to Have the PowerShell Summit Come to You +authors: + - Don Jones +date: "2014-10-16T18:24:25+00:00" +categories: + - PowerShell Summit +aliases: + - /2014/10/how-to-have-the-powershell-summit-come-to-you/ +--- + +We're **often** asked if we're planning to have a PowerShell Summit in (insert name of town/country/city). The answer is, "no," because we're usually not planning much in advance of whatever's currently on the table. Keep in mind - **we're all volunteers. **We don't have a ton of free time to plan 3 years out! As you'll see in a minute, it's a lot of work. +That said, **you** can play a big role in bringing the Summit to **your** town. How? Simply write a proposal and submit it to us. Use the "Admin" e-mail alias at PowerShell.org. Here's what to include: + + * When you're proposing for. We typically need a proposal roughly 18 months out. The North America event is in April, and the Europe event in September, so you need to plan about a year and a half ahead of those dates. + * A description of the local PowerShell audience. Helping us understand the local business environment, how many Microsoft IT pros are employes, and whether or not there's a local user group, all helps. The more you can do to help us reach out to the locals, the more confident we'll be in planning an event in your area. + * A venue. This is the tough part, because we have a number of pretty strict requirements. Many commercial venues won't talk to a smaller organization more than 6-9 months out, so in talking to a venue you'll have to ask them to estimate pricing based on their current situation; we'll nail down particulars closer-in if we select the venue. We don't need you to guarantee dates; we just need an estimate of how much the venue wants to charge us. + +Our venue requirements are **detailed** and pretty much **non-negotiable**. + + * The venue must be near an international airport - no more than a 30-minute drive. This must be accessible by a major air carrier, such that a flight from Seattle-Tacoma could make it to the venue's airport with no more than one connection. We have to be considerate of the product team's time! + * The venue must be near a sufficient number of affordable, business-class hotels. We **do not** reserve room blocks or guarantee rooms, so if you're talking to a hotel, they may not want to deal with you because of this. + * The venue must offer parking - although we are okay if there are parking fees. + * We must have 2 rooms capable of seating at least 50 people each. That seating can be "theater-style..." + * ...but we must also have a place for at least 100 people to eat lunch. Sometimes, that means a separate room. Other times, it may mean setting the session rooms "classroom style" so people can eat in the session rooms. Switching to "classroom style" still needs to afford seating for 50 people per room, minimum. + * We prefer to buy "all-day" catering packages that include unlimited coffee, a continental breakfast (pastries), buffet lunch, and an afternoon snack. Pricing cannot exceed about $110 per person per day - and that must include taxes, service fees, gratuities, and so on. + * We prefer **not** to guarantee a specific number of people until very close-in. However, most commercial venues require a commitment up front. In that case, we prefer to commit to no more than 50 people - even though we want the flexibility to have more than that. + * If we're paying top dollar for catering, we should get the venue itself for free. That's traditional at most commercial venues. If we're paying for the venue, then our per-person/per-day catering cost should be substantially under our limit. + * We prefer to minimize A/V expenses, but do require an HD projector, screen, and wireless lav mic in each of the two rooms. We'd need pricing on that equipment if it isn't included in the venue pricing. + * The venue needs to have decent Internet. That doesn't necessarily need to be included for free, but it needs to be available. We may purchase 2-4 connections for speakers to use when presenting, so knowing the pricing would be helpful. + * The venue needs to be available for at least one evening event, where we'll likely want a cash bar and some light snacks - we expect to pay extra for the evening food, but not for the venue itself. + +As you can see, it's a tough list, and it's a lot of work for us to find venues. That's one reason we tend to lean toward Microsoft facilities, when they're available, because we get the venue cheaper, the food cheaper, and so on. +You'll also see that our pricing doesn't leave a ton of room for error. At $110/person/day, each attendee costs us $330. With 50 attendees, there's another $130 per person in overhead to pay for speakers' meals. We have about another $130 per person in hard costs like insurance, equipment shipping, and logistics planning. We carve off another $150 per person to help fund PowerShell.org itself, including this website. That's $740 per person in costs - real close to the $800 we charge, which also has to cover VERIFIED EFFECTIVE exam costs and so on. We plan our numbers around a 50-person break-even point because we're incredibly risk-averse - we don't want to have to make up the difference on our personal credit cards, which has almost happened in the past. As you can see, we try to keep our numbers pretty tight - which means a lot of careful planning. +So... if you want to volunteer (it's much appreciated!) and do some local legwork, you're more than welcome to propose your favorite town. We understand that, working 18+ months out, some of the numbers will be estimates - that's fine. Knowing that something is roughly in the right price range is a big start. +We **do** have other operational criteria that can come into play, so just because you propose someplace doesn't mean we're guaranteeing we'll go there - but we'll keep it in mind, even for future years. diff --git a/content/articles/2014/10/our-nanowrimo-challenge-write-a-powershell-article/index.md b/content/articles/2014/10/our-nanowrimo-challenge-write-a-powershell-article/index.md new file mode 100644 index 000000000..0ce361278 --- /dev/null +++ b/content/articles/2014/10/our-nanowrimo-challenge-write-a-powershell-article/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2014-10-25-our-nanowrimo-challenge-write-a-powershell-article/ +title: "Our NaNoWriMo Challenge: Write a PowerShell Article" +authors: + - Don Jones +date: "2014-10-25T16:28:27+00:00" +categories: + - News + - Training + - Tutorials +aliases: + - /2014/10/our-nanowrimo-challenge-write-a-powershell-article/ +--- + +In honor of National Novel Writing Month (NaNoWriMo), I wanted to offer a smaller, and more unique, challenge. +Send me a PowerShell article. +Seriously. My name is **Don J**ones, and this is **PowerShell.org**, so you can probably figure out how to contact me. Send me an article between 800 and 3,000 words (including code) in Microsoft Word format. Don't attach any scripts. Please keep the formatting super-simple: paste code from the PowerShell ISE, and use Word's default styles otherwise. If you must include screen shots, please embed them in the doc, but also include them as a a separate PNG in your e-mail. +You can write about _anything,_ provided it's PowerShell-related._ _What's best? Some challenge that stumped you - and that you eventually solved (and please, tell us how). Something that you think folks could benefit from, or could learn to do better. Even an article that lays out both sides of a particular question, and outlines the pros and cons of each argument. Doesn't matter. What matters is that you _write. _ +I will +personally + commit to reading every single one, and providing you with feedback on your article. When suitable, I'll make some specific suggestions for improving the article. If you then fix it up accordingly, I'll run it by a professional editor_ - and I'll have it published. _In some cases, we'll publish it right here on PowerShell.org. In other cases, I'll submit it to my friends at 1105 Media for their consideration in one of their IT magazines, like _Redmond Magazine_ or _MCPMag.com_. Still others will go into the PowerShell.org TechLetter, which would be a huge help to our editors, who are always hungry for content. +Being able to communicate well is important in all walks of life, but being _willing to share_ is even more important. Think you've got nothing to share? _Wrong. _You have unique experiences that everyone can learn from. You do _not_ need to be an expert in order to have something valuable to share. We would all benefit a lot more if _more_ people shared their experiences and successes - so now it's your turn. +The deadline is November 30th, of course, and I'll work my way through them all as quickly as possible. You're not going to be judged on your grammar or spelling (although do use Word's tools to help those as much as it can). Don't try to write fancy, or overly formal. In fact, just write like you'd talk. Read your piece back to yourself _aloud, _and if it sounds weird, fix it so it doesn't. If it _sounds_ good, it'll _read_ well. +C'mon. Take up the challenge. And tweet folks over to this article, too. Let's make it a thing. My goal is to help at least a few folks because regular bloggers, either here or elsewhere, and my dream is to find maybe a couple of folks who can pick up a full-time column with a magazine or other publication. That'd be awesome. I know you're out there - let's get the party started. diff --git a/content/articles/2014/10/phillyposh-10022014-meeting-summary-and-presentation-materials/index.md b/content/articles/2014/10/phillyposh-10022014-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..7867d4ca6 --- /dev/null +++ b/content/articles/2014/10/phillyposh-10022014-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2014-10-13-phillyposh-10022014-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 10/02/2014 meeting summary and presentation materials +authors: + - John Mello +date: "2014-10-14T01:35:26+00:00" +aliases: + - /2014/10/phillyposh-10022014-meeting-summary-and-presentation-materials/ +--- + +* [John Mello][1] gave a presentation entitled "Custom Object Creation". A copy of his demo scripts and presentation are available [here][2] at our [GitHub site][3]. + * [TJ Turner][4] gave a presentation entitled "Runspace Pools". A copy of his demo scripts and presentation are available [here][5] at our [GitHub site][3]. + * A +recording of this meeting + + +has been posted to our [ +YouTube channel +][6] + + [1]: http://mellositmusings.com/about/ + [2]: https://github.com/PhillyPoSH/2014-10/tree/master/Creating%20Custom%20Objects + [3]: https://github.com/PhillyPoSH/ + [4]: http://techguytj.com/bio/ + [5]: https://github.com/PhillyPoSH/2014-10/tree/master/Run%20Space%20Pools + [6]: http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2014/10/powershell-summit-europe-2014-all-videos-available/index.md b/content/articles/2014/10/powershell-summit-europe-2014-all-videos-available/index.md new file mode 100644 index 000000000..afe8ff02a --- /dev/null +++ b/content/articles/2014/10/powershell-summit-europe-2014-all-videos-available/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2014-10-14-powershell-summit-europe-2014-all-videos-available/ +title: PowerShell Summit Europe 2014 – All videos available +authors: + - Richard Siddaway +date: "2014-10-15T07:08:48+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2014/10/powershell-summit-europe-2014-all-videos-available/ +--- + +All of the recordings from the recent PowerShell Summit in Amsterdam are now available through the PowerShell.org channel on youtube. The playlist for the Summit is https://www.youtube.com/playlist?list=PLfeA8kIs7Coehjg9cB6foPjBojLHYQGb_ +Thank you again to the speakers, and attendees, who made for a wonderful first Summit in Europe and more thanks to the people who donated to our appeal to raise funds for the recording equipment. diff --git a/content/articles/2014/10/powershell-summit-europe-2014-slides-and-code/index.md b/content/articles/2014/10/powershell-summit-europe-2014-slides-and-code/index.md new file mode 100644 index 000000000..06c3e5ecd --- /dev/null +++ b/content/articles/2014/10/powershell-summit-europe-2014-slides-and-code/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2014-10-07-powershell-summit-europe-2014-slides-and-code/ +title: PowerShell Summit Europe 2014 – – slides and code +authors: + - Richard Siddaway +date: "2014-10-07T17:49:55+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2014/10/powershell-summit-europe-2014-slides-and-code/ +--- + +All of the slides and demo code the speakers wanted to share are available for your enjoyment at http://1drv.ms/1vMWmtm +I'm currently uploading the videos which is a slow process. I'll post when hat activity is completed. diff --git a/content/articles/2014/10/powershell-summit-europe-2014-thank-you/index.md b/content/articles/2014/10/powershell-summit-europe-2014-thank-you/index.md new file mode 100644 index 000000000..6fb6ebc73 --- /dev/null +++ b/content/articles/2014/10/powershell-summit-europe-2014-thank-you/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2014-10-04-powershell-summit-europe-2014-thank-you/ +title: PowerShell Summit Europe 2014 – – Thank you +authors: + - Richard Siddaway +date: "2014-10-04T11:17:10+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2014/10/powershell-summit-europe-2014-thank-you/ +--- + +I would like to express a huge thank you to the speakers and attendees at our recent Summit. +The speakers delivered an excellent set of sessions that dived into PowerShell features new and old. +The attendees asked lots of questions, both during and after sessions, which is what we want. This is a Summit not a conference where a speaker rushes in, delivers a talk and rushes out. We wanted a healthy level of discussion and that's what we got. +The feed back we've had has been very positive from both the attendees and speakers. We managed to record practically all of the sessions and those videos as well as the slides and code will be available for download soon. +This year's event in Amsterdam has laid a very solid foundation for the future of the European Summit and our plans are to run a European Summit in 2015. Exact location and dates haven't been decided yet but we will communicate them as soon as we know. diff --git a/content/articles/2014/10/powershell-summit-europe-2014-videos-from-day-1/index.md b/content/articles/2014/10/powershell-summit-europe-2014-videos-from-day-1/index.md new file mode 100644 index 000000000..2091b475c --- /dev/null +++ b/content/articles/2014/10/powershell-summit-europe-2014-videos-from-day-1/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2014-10-08-powershell-summit-europe-2014-videos-from-day-1/ +title: PowerShell Summit Europe 2014 – – videos from day 1 +authors: + - Richard Siddaway +date: "2014-10-09T07:23:31+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2014/10/powershell-summit-europe-2014-videos-from-day-1/ +--- + +The videos from day 1 of the Powershell Summit Europe 2014 are now available on the PowerShell.org youtube channel. The European Summit playlist can be found at + +Uploading of day 2 is in progress and I'll supply notification when complete +Enjoy. diff --git a/content/articles/2014/10/the-current-and-future-state-of-the-windows-management-framework/index.md b/content/articles/2014/10/the-current-and-future-state-of-the-windows-management-framework/index.md new file mode 100644 index 000000000..b44fecabd --- /dev/null +++ b/content/articles/2014/10/the-current-and-future-state-of-the-windows-management-framework/index.md @@ -0,0 +1,304 @@ +--- +url: /articles/2014-10-06-the-current-and-future-state-of-the-windows-management-framework/ +title: The current and future state of the Windows Management Framework +authors: + - Bjorn Houben +date: "2014-10-06T11:04:50+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/10/the-current-and-future-state-of-the-windows-management-framework/ +--- + +At the 2nd of October, [Lee Holmes](http://www.leeholmes.com/) gave a presentation about the current and future state of the Windows Management Framework (WMF) during the [Dutch PowerShell User Group (DuPSUG)](http://www.dupsug.com/?page_id=914) at the Microsoft headquarters in The Netherlands. +The slide decks and recorded videos will be made available soon, but this is what was discussed: + +**The release cycle of the Windows Management Framework (WMF)** + +Faster incremental releases of preview versions are being released. This rapid development means that companies that need specific new functionalities to tackle current problems they're having, don't have to wait as long as they had to in the past. +Everyone should keep in mind that documentation for preview versions can be more limited, but should still read the [release notes ](http://www.microsoft.com/en-us/download/details.aspx?id=44070)carefully. They contain descriptions of some of the improvements that are discussed in this blog post, but also cover other things that aren't discussed here. Also be sure to take a look at [What's New in Windows PowerShell](http://technet.microsoft.com/en-us/library/hh857339.aspx) at TechNet. +A request from the audience was to include more helpful real-life examples until documentation is fully up-to-date. + + +**Desired State Configuration (DSC) partial/split configurations** + +With DSC partial/split configuration it is possible to combine multiple separate DSC configurations to a single desired state. This could be useful when a company has different people or departments that are responsible for a specific part of the configuration (by example Windows, database, applications). + + +**OneGet** + +OneGet is a Package Manager Manager (it manages package managers). It enables companies to find, get, install and uninstall packages from both internal and public sources. Public repositories can contain harmful files and should be treated accordingly. +Besides the OneGet module included in the Windows Management Framework Preview, updated versions are continuously being uploaded to [https://github.com/OneGet/oneget](https://github.com/OneGet/oneget) by Microsoft. These can include bug fixes and new functionality like support for more provider types. +While in the past it seemed that Nuget was required, during the [PowerShell Summit](https://powershell.org/community-events/summit/) it was demonstrated that a file share can be used as well. +From the audience a question was raised whether BITS (Background Intelligent Transfer Service) could be used. This is currently not the case and there were also no plans yet to implement it. + + +**PowerShellGet** + +PowerShellGet is a module manager which should make it easier to find the many great modules that are already available, but are not very discoverable because they're fragmented on numerous websites across the Internet. +Microsoft is currently hosting a gallery of modules. The modules that are available in there are currently being controlled by Microsoft, but this might change in the future. +It is possible to create an internal module source and the save location for modules can be specified as well. + + +**PSReadLine** + +PSReadLine is a bash inspired readline implementation for PowerShell to improve the command line editing experience in the PowerShell.exe console. It includes syntax coloring and CTRL+C and CTRL+V support, for more information about other improvements, view their [website](https://github.com/lzybkr/PSReadLine). +PSReadLine is one of the modules that can be installed using PowerShellGet: + + +Find-Module + + +PsReadLine + + +| + + +Install-Module + + + + + +**Security** + + + * Always be careful when running scripts that include Invoke-Expression or its alias iex because it might run harmful code. + * For a non harmful example, take a look at this [blog post](http://www.leeholmes.com/blog/2011/04/01/powershell-and-html5/) by Lee Holmes. + * Many people in the security community are adopting PowerShell. + * PowerShell is done in memory and is therefore volatile. To improve security the following enhancements were introduced: + * Transcript improvements + * Transcript support was added to the engine so it can used everywhere, also in the Integrated Scripting Environment (ISE). + * A transcript file name automatically includes the computer name. + * Transcript logging can be enforced to be redirected to another system. + * Transcription can be enforced by default. + * Group Policy + * An ADMX file is currently not available to configure it on all platforms, but it can be found in the technical preview versions of Windows 10 and Windows Server under: Administrative Templates -> Windows Components -> Windows PowerShell + * More advanced Scriptblock logging + * Enable ScriptBlockLogging through GPO (in later Windows versions) or by registry by setting EnableScriptBlockLogging to 1 (REG_DWORD) in: HKLM:\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging + * The additional logging will show you what code was run and can be found in event viewer under Applications and Services Logs\Microsoft\Windows\PowerShell\Operational. + * Scriptblocks can be split across multiple event log entries due to size limitations. + * Using Get-WinEvent -FilterHashTable it is possible to get related events, extract the information and combine it. + * Since attackers would want to remove these registry settings and clear event logs, consider using Windows Event Forwarding/SCOM ACS to store this information on another server. Also consider enabling cmdlet logging. + * Just Enough Admin (JEA) + * JEA enables organizations to provide operators with only the amount of access required to perform their tasks. + + + +**New and improved functionality and cmdlets** + + +**Manage .zip files using Expand-Archive and Compress-Archive** +.zip files can be managed using Compress-Archive and Expand-Archive. Other archive types like .rar are not currently supported, but this might be added in future versions. + +**New-Item** +It is now not necessary anymore to specify the item type. To create a new item, simply run + + +New-Item + + +foo.txt + + + + +**Get-ItemPropertyValue** +This makes it easier to get the value of a file or registry: + + * + + +Get-ItemPropertyValue + + +$Env:windir + + +\system32\calc.exe + + +-name + + +versioninfo + + + * + + +Get-ItemPropertyValue + + +-Path + + +HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\ScriptedDiagnostics + + +-Name + + +ExecutionPolicy + + + +**Symbolic links support for New-Item, Remove-Item and Get-ChildItem** +Symbolic link files and directories can now be created using: + + * + + + + +New-Item + + +-ItemType + +SymbolicLink + +-Path + +C:\Temp\MySymLinkFile.txt + +-Value + +$pshome + +\profile.ps1 + + + + + + * + + + + +New-Item + + +-ItemType + +SymbolicLink + +-Path + +C:\Temp\MySymLinkDir + +-Value + +$pshome + + + + + +Junctions cannot currently be created, but this might also be added in a later version. + +**Debugging using Enter-PSHostProcess and Exit-PSHostProcess** +Let you debug Windows PowerShell scripts in processes separate from the current process that is running in the Windows PowerShell console (by example long running or looping code). Run Enter-PSHostProcess to enter, or attach to, a specific process ID, and then run Get-Runspace to return the active runspaces within the process. Run Exit-PSHostProcess to detach from the process when you are finished debugging the script within the process. + +**Use Psedit to edit files in a remote session directly in ISE** +Simply open a new PSSession to a remote computer and type PSEdit +. + +**Classes and other user-defined types** + + * The goal is to enable a wider range of use cases, simplify development of Windows PowerShell artifacts (such as DSC resources), and accelerate coverage of management surfaces. + * Classes are useful for structured data. Think by example about custom objects that you need to change afterwards. + * Name of the class and the constructor must be the same. + * Code is case insensitive. + * In classes, variables are lexically scoped (matching braces) instead of dynamically scoped. + * Every return must be explicit. + * Sample code: + + + + + + + +Class + + MyClass + + + +{ + + + + +MyClass + +( + +$int1 + +, + + + +$int2 + +) + + +   { + + + + +"In the constructor" + + +   } + + + + +[int] + +$Property1 + + + + +[DateTime] + +$Property2 + + + + +[int] + +MyHelper + +( + +$param1 + +) + + +   { + + + + +return + + + +42 + + +   }  + + +} diff --git a/content/articles/2014/11/_index.md b/content/articles/2014/11/_index.md new file mode 100644 index 000000000..21016a954 --- /dev/null +++ b/content/articles/2014/11/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from November 2014" +description: "PowerShell.org Articles published in November 2014." +--- diff --git a/content/articles/2014/11/call-for-presentations-for-powershell-summit-europe-2015/index.md b/content/articles/2014/11/call-for-presentations-for-powershell-summit-europe-2015/index.md new file mode 100644 index 000000000..7d47fb795 --- /dev/null +++ b/content/articles/2014/11/call-for-presentations-for-powershell-summit-europe-2015/index.md @@ -0,0 +1,54 @@ +--- +url: /articles/2014-11-24-call-for-presentations-for-powershell-summit-europe-2015/ +title: Call for Presentations for PowerShell Summit Europe 2015 +authors: + - Richard Siddaway +date: "2014-11-24T20:02:17+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2014/11/call-for-presentations-for-powershell-summit-europe-2015/ +--- + +The PowerShell Summit is the number one conference where PowerShell enthusiasts gather and learn from each other in fast-paced, knowledge packed presentations. PowerShell experts from all over the world including MVP’s, Guru’s, community leaders and PowerShell team members, will once again join together for a few days in Stockholm, Sweden to discuss and learn about maximizing PowerShell in the workplace. If you want to share your PowerShell expertise or story, then this is your official call to submit presentations for selection! +PowerShell Summit Europe 2015 will be held 14-16 September 2015 in Stockholm, Sweden. + +## Topic Areas – What we are looking for + +We are looking for 45-minute presentations covering a wide aspect of PowerShell expertise. We have two main topic areas that may assist you in building an abstract. +PowerShell Internals – A deep look into the inside workings of PowerShell and practical solutions that are built from them. These presentations are typically more directed to the PowerShell development community that is building extensions and solutions relating to PowerShell. +PowerShell Features Deep Dive – These presentations are a deep look into configuring and working with PowerShell features and capabilities such as Remoting, Desired State Configuration and more. These presentations tend to be more IT Pro focused. +We are open to presentations across the entire ecosystem that has been built around PowerShell; so don’t hesitate to send an abstract for your particular area of expertise. This includes Microsoft platforms and products that have PowerShell-based management tools as well as 3rd parties such as VMware. New topics will be preferred over recycling of older topics – look to see what’s new in PowerShell 5.0 and use the questions on PowerShell.org to spot areas of confusion that could supply a good session for the Summit. + +##  What kind of sessions get selected? + +We’re looking for sessions that go beyond – often way beyond – “beginner.” If you want to see examples of the depth we’re looking for use the recordings on the PowerShell.org Youtube channel from the PowerShell Summit Europe 2014 as a guide. We look for an abstract that’s compelling and makes us salivate to see your session – so spend time writing a punchy abstract! We want sessions that offer real-world usability combined with “wow, nobody talks about THAT” awesomeness. If in doubt aim high. Remember, Summit sessions are recorded, so if you’ve previously presented a topic at a Summit, we’re less likely to choose it for another Summit. We want sessions that are challenging, and that ideally present things that simply aren’t explained or documented elsewhere. New modules, new techniques, and crazy approaches are all welcome. Discussion-format sessions are great, too, especially if you plan to turn them into a community deliverable (like a “best practices for writing DSC Resources” session that gets turned into a free e-guide later). Think community, deep dive, engaging, and amazing as keywords. We want attendees to finish each day with information leaking… just a little bit… out their eyeballs. Help us make it happen. +We do have some goals for speaker selection, too. We obviously have, and appreciate, the great involvement we get from the product team. We aim to have a certain number of sessions from well-known members of the community, simply because they’re well-known for a reason – they do a great job! But we also set aside slots for newcomers who’ve never presented before, or who’ve maybe only presented once or twice before – the audience will judge you on content not style. We want to create opportunities for more folks to become engaged and active in our community, and the Summit is a great way to do that. +We aren’t looking for soft-skills sessions, like “how to get a new user group running,” although contact us via email (summit@) if you’d like to do something like that as an extra evening thing after the main content wraps for the day. +Please note all sessions are to be delivered in English. Presenter will provide all equipment needed to deliver session(s), including a laptop or other computer. Presenter must be able to provide video by means of HDMI, DVI-D, or DisplayPort connectors – VGA is NOT supported. Presenter must be able to manually select an appropriate screen resolution for video output. Typically, 1024x768 or 1280x720 are preferred. + +## How to submit abstracts of presentations + +Presentations will be 45-minutes in length and the submission should include the following: +Presentation Title +Presentation abstract – a description of the presentation and the topics covered. 250 words or less and suitable for marketing. +Go to . This is the only valid URL for pre-registration. Provide your e-mail address, password, and full name. You’re creating a new account, even if you’ve attended past Summit events. +**Do NOT attempt to register for the Summit as an attendee at this stage – we will be opening registration in late February 2015.** +Click Abstracts +Click Submit Abstract +Provide a title and description; descriptions must be 50-250 words. Set the Status to “Ready to Review” when you are ready to send your session to us for consideration. +To return to the site at a later time, go to . Click Log In. You can then re-visit Abstracts. +Note that you must set your abstract status to **Ready for Review** or we won’t see it. If you leave it in **Pending,** it won’t be considered. +You can submit multiple presentations in the same topic area or for different ones. Be aware that even though the session length is 45 minutes we prefer to have at least 10 minutes set aside for questions. Summit presentations are intense and intimate often with plenty of audience interaction. You must expect questions and discussions. This is not a “lecture to the audience” event. Also because of the session length, generally co-presenters are unnecessary, but that is not a requirement. + +## Presentation submission deadline – When you should send it by + +Start sending your presentation submissions immediately! The selection committee will start selecting presentations as soon as they arrive so you don’t want to miss out. The last day we will accept presentation submissions will be **Sunday 11 January 2015**. This is a hard deadline. + +## When you will know you’ve been selected + +The selection committee will start reviewing submissions immediately and begin the selection process. You will be informed if one or more of your presentations have been selected and sent a contract on or before Sunday 18 January 2015. You will need to return the signed contract by Wednesday 28 January 2015 otherwise another speaker may be offered the opportunity. +Speakers, with accepted sessions, will be given free admission to the event, including attendance at all official Summit activities. However, AWPP membership is not included. Speakers may not bring guests to the day sessions or evening events. We have a limited budget, and the number of speakers selected will be partially governed by that budget. Speakers are responsible for their own travel expenses, including hotel, airfare, and ground transportation. +The final agenda will be announced and posted on PowerShell.Org on, or about, Monday 2 February 2015. +We look forward to your submissions and your help in making PowerShell Summit Europe 2015 the most valuable IT/Dev conference of the year building on and surpassing the Europe 2014 Summit! diff --git a/content/articles/2014/11/charlotte-powershell-user-group-meeting-on-116/index.md b/content/articles/2014/11/charlotte-powershell-user-group-meeting-on-116/index.md new file mode 100644 index 000000000..d9e6f605b --- /dev/null +++ b/content/articles/2014/11/charlotte-powershell-user-group-meeting-on-116/index.md @@ -0,0 +1,12 @@ +--- +url: /articles/2014-11-03-charlotte-powershell-user-group-meeting-on-116/ +title: Charlotte PowerShell User Group meeting on 11/6 +authors: + - Terri Donahue +date: "2014-11-03T19:06:00+00:00" +aliases: + - /2014/11/charlotte-powershell-user-group-meeting-on-116/ +--- + +Shell and Tell is back.. bring your scripts you've been working on and show your PowerShell pride by displaying your scripting prowess.  We'll have food and drinks, so come join the fun! +Everyone is welcome. Please RSVP on the [MeetUp](http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/216116072/) event page so we can plan food accordingly. diff --git a/content/articles/2014/12/_index.md b/content/articles/2014/12/_index.md new file mode 100644 index 000000000..c67301012 --- /dev/null +++ b/content/articles/2014/12/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from December 2014" +description: "PowerShell.org Articles published in December 2014." +--- diff --git a/content/articles/2014/12/a-crowdsourced-powershell-proficiency-exam/index.md b/content/articles/2014/12/a-crowdsourced-powershell-proficiency-exam/index.md new file mode 100644 index 000000000..cf2e96ef3 --- /dev/null +++ b/content/articles/2014/12/a-crowdsourced-powershell-proficiency-exam/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2014-12-04-a-crowdsourced-powershell-proficiency-exam/ +title: A Crowdsourced PowerShell Proficiency Exam +authors: + - Don Jones +date: "2014-12-04T16:25:34+00:00" +categories: + - Training +aliases: + - /2014/12/a-crowdsourced-powershell-proficiency-exam/ +--- + +I wanted to call your attention to Smarterer, a company recently acquired by my employer, Pluralsight. Smarterer's schtick (apart from vexing my auto-correct) is that the host crowdsourced technology assessments. In other words, the _community_ decides what questions to ask someone in the test. +The magic is that their back-end engine, over time, figures out which questions are awesome and which ones suck, and adjusts the assessment accordingly. So as more people (especially qualified ones) take the test, the better it gets at identifying skilled people. It gives it a sort of built-in immunity against bad community-contributed questions, because those eventually filter out of the assessment that's delivered to people. It's pretty engaging, actually. I've had some fun taking some web development-oriented assessments, and surprised myself in a few places. +They've [got a PowerShell assessment][1]. Why not jump in, take it, and then add some questions of your own? Next time you need to interview someone for PowerShell chops, send 'em to Smarterer. + + [1]: http://smarterer.com/tests/powershell diff --git a/content/articles/2014/12/job-posting-help-us-run-powershell-org/index.md b/content/articles/2014/12/job-posting-help-us-run-powershell-org/index.md new file mode 100644 index 000000000..71dee807e --- /dev/null +++ b/content/articles/2014/12/job-posting-help-us-run-powershell-org/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2014-12-08-job-posting-help-us-run-powershell-org/ +title: "JOB POSTING: Help us Run PowerShell.org" +authors: + - Don Jones +date: "2014-12-08T17:00:38+00:00" +categories: + - Announcements +aliases: + - /2014/12/job-posting-help-us-run-powershell-org/ +--- + +[UPDATE: We've gotten an outpouring of responses - I'm literally a bit teary-eyed right now - so I'll work with the existing set of volunteers and post again should everyone realize what we're asking and go running for the hills!] +We're looking for a volunteer to take over regular maintenance of the PowerShell.org website. We may even have a small budget to make this a paid-contractor gig. Trick being, it's gotta be done _regularly. _ +The specifics: + + * Set up new user groups with pages (as needed) + * Approve/Delete forums posts that are held for moderation (daily - this doesn't happen often, though) + * Moderate blog comments (daily) + * Approve community-submitted calendar events (weekly) + * Assist TechLetter team with setting up Forums topics for discussing upcoming TechLetter articles (monthly) + * Identify Forums posts that have gone unanswered; raise awareness and recruit answers (often via Twitter) (at least weekly) + +We're not looking for this person to do actual WordPress maintenance at this stage. However, if you're interested and do have WordPress experience, we could potentially tack that on. It wouldn't be much more than approving WordPress and plugin updates on a scheduled basis, although we do have one PHP code hack that has to be maintained after core WordPress updates. +If you're interested, please e-mail Admin right here at PowerShell.org. We're hoping to have someone start in January. We'd obviously love a volunteer to step in and be our hero; if it goes well, we can divert some budget to making it a permanent gig. We know that sometimes the family finds it easier to have you donate your time if you're getting a bit back in return. We're planning to make a similar offer to other key positions, including our TechLetter Editors and TechSession Manager, in 2015 if we can. diff --git a/content/articles/2014/12/nj-powershell-users-group-meeting-presenter-doug-finke-microsoft-mvp/index.md b/content/articles/2014/12/nj-powershell-users-group-meeting-presenter-doug-finke-microsoft-mvp/index.md new file mode 100644 index 000000000..8af4f488f --- /dev/null +++ b/content/articles/2014/12/nj-powershell-users-group-meeting-presenter-doug-finke-microsoft-mvp/index.md @@ -0,0 +1,50 @@ +--- +url: /articles/2014-12-29-nj-powershell-users-group-meeting-presenter-doug-finke-microsoft-mvp/ +title: "NJ PowerShell Users Group Meeting: Presenter Doug Finke – Microsoft MVP" +authors: + - NJPowerShell +date: "2014-12-30T04:25:33+00:00" +categories: + - PowerShell for Admins +aliases: + - /2014/12/nj-powershell-users-group-meeting-presenter-doug-finke-microsoft-mvp/ +--- + +The NJ PowerShell User Group is having a meetup on Thursday, January 8th from 6:00 - 8:00 PM. If interested, please register through the [Eventbrite website](http://www.eventbrite.com/e/nj-powershell-users-group-meeting-presenter-doug-finke-microsoft-mvp-tickets-15066672824) to track attendance for ordering pizza.  For those attending online (Webex) we will send a follow-up email with the meeting link based on Eventbrite online registrants. + **Agenda**: + 6:00 – 6:30: Pizza and socializing + 6:30 – 7:30: Presentation + 7:30 - 8:00: Q & A + + + + + Please note that the Webex meeting will start at 6:00 PM, but the actual presentation won't start until 6:30 + In-Person attendees must register, print out their EventBrite ticket, and present it at the door. Walk-ins will not be permitted. + + + + + + **Presenter**: Doug Finke + **Bio: **Doug Finke, author of “[PowerShell for Developers](http://www.amazon.com/Windows-PowerShell-Developers-Douglas-Finke/dp/1449322700/)”, a Microsoft Most Valuable Professional (MVP) for PowerShell and works at Start-Automating, a company specializing in all aspects of PowerShell development, including consulting, training and tool building. Doug has been a developer and author working with numerous technologies. You can catch up with Doug at his blog Development in a Blink at [http://dougfinke.com/blog](http://dougfinke.com/blog). + Microsoft Most Valuable Professional (MVP) Doug Finke takes us through PowerShell from a developer’s point of view. Doug shows techniques for integrating/debugging PowerShell from + and to C# code as well as using PowerShell with a Windows Presentation Foundation (WPF) application. He also addresses using reflection at the command line, object pipelining, and + PowerShell’s REPL. Plus, time permitting, Doug will highlight some of the new features in the PowerShell v5 November Preview. + **Twitter**:[@DFinke](https://twitter.com/dfinke) + [![Doug Finke](https://cdn.evbuc.com/eventlogos/111855199/dougfinkebio.png)    ![Windows PowerShell for Developers](https://cdn.evbuc.com/eventlogos/111855199/powershellfordevelopers-1.jpg)](http://dougfinke.com/blog) + +NJ PowerShell Meetup Coffee Bar and Conference room at Mathematica Policy Research + + ![Conference Room](https://cdn.evbuc.com/eventlogos/111855199/eventbriteconferenceroom.png) + + + + + + + + + + + ![Coffee Bar](https://cdn.evbuc.com/eventlogos/111855199/eventbritecoffeebar.png) diff --git a/content/articles/2014/12/powershell-summit-n-a-2015-status-update-info/index.md b/content/articles/2014/12/powershell-summit-n-a-2015-status-update-info/index.md new file mode 100644 index 000000000..1f11b7fa1 --- /dev/null +++ b/content/articles/2014/12/powershell-summit-n-a-2015-status-update-info/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2014-12-15-powershell-summit-n-a-2015-status-update-info/ +title: PowerShell Summit N.A. 2015 Status Update & Info +authors: + - Don Jones +date: "2014-12-15T20:01:34+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2014/12/powershell-summit-n-a-2015-status-update-info/ +--- + +As of this post, PowerShell Summit North America 2015 is full, and registration has been cut off. We're taking some time to confirm our numbers and venue capacity; if we're able to open additional seats, that will happen in January 2015. We will allow any additional capacity to be registered until one month prior to the Summit, or until it sells out, whichever comes first. We do not maintain a waiting list; please check here and on the @PSHSummit Twitter feed for any announcements. +For those already registered, we _do not have any official hotel recommendations. _You're welcome to use the [Summit Forum][1] to see where others are staying, or to arrange for carpooling or other stuff. We certainly encourage all attendees to check the Forum for Q&A and other discussion - it's never too early to start getting involved. On the hotel front, just look for hotels in downtown Charlotte, or near Microsoft Charlotte, based on your preferences. The reason there's no official hotel is that there are numerous business-class hotels nearby, and after a close call last year we didn't want to take the financial risk of booking out a room block. +Our intent at this time is to book the venue to fire code capacity, which is why we may be able to open additional slots after we confirm everything. That means _both venue rooms will be full at all times. _You will not be permitted to stand or sit in the aisles, back of the room, or block the doorways. If the session you hoped to attend is full, you'll need to go to the other one. Keep in mind we're recording everything, so you won't miss out entirely. +The last sessions on all three days will only have a single session. We'll position the speaker in one of the two rooms, and we'll live-stream to the other room. This is where we plan to put Jeffrey Snover's talks, both to accommodate what has historically been high interest in his sessions, and to accommodate his total inability to do a session in only 45 minutes :). If you don't get a chair in the "live" room, you'll need to join from the "overflow" room. +The two rooms are actually in different buildings, separated from each other by a driveway/courtyard arrangement. We're suggesting that you _not_ bring your ginormous 21" laptop, since it'll just drag you down moving between sessions. Maybe stick with a Surface if you want to take notes and stuff. Although we're recording everything, so... you know. Maybe just enjoy the session. +Lunches will be taken _in the session rooms_, with buffet setups in the hallways just outside each room. +Stay tuned for further details, and please use the Summit forum to ask questions. + + [1]: https://powershell.org/forums/forum/powershell-summit/ diff --git a/content/articles/2014/_index.md b/content/articles/2014/_index.md new file mode 100644 index 000000000..654344a59 --- /dev/null +++ b/content/articles/2014/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from 2014" +description: "PowerShell.org Articles published in 2014." +--- diff --git a/content/articles/2015-01-06-ebook-cover-contest.md b/content/articles/2015-01-06-ebook-cover-contest.md deleted file mode 100644 index b5694452b..000000000 --- a/content/articles/2015-01-06-ebook-cover-contest.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: eBook Cover Contest -authors: - - Don Jones -date: "2015-01-06T18:55:11+00:00" -categories: - - Books -aliases: - - /2015/01/ebook-cover-contest/ ---- - -Fancy yourself a graphics person? Just like to doodle? -We're holding a contest to create new covers for our various [ebooks][1]. Winners will receive absolutely nothing, other than a cover credit within the text (hey, we'll also give you a full set of the ebooks for free, what the heck). - - * Covers must include the book title, and should include the PowerShell.org logo. The logo is below. - * Don't include author names in the artwork. Authors are credit on the book's "About" page. - * Images must be 8.5" wide by 11" high, preferably at 300dpi, in PNG or JPG format ([see these specifications][2] if you need that sizing in pixels). - * Don't include art, photos, or any other elements that you yanked off the Internet, including Microsoft imagery, unless you can provide us with written permission from the copyright holder to use it. - -You can submit a series for all the books, or just covers for the book or books you like best. -Be serious. Have fun. Whatever! Send submissions via e-mail to Admin, right here at PowerShell.org. We'll let you submit until the **end of January 2015, **and we'll pick the best selections we have at the time. -[![metro-logo](https://powershell.org/wp-content/uploads/2015/01/metro-logo.png)](https://powershell.org/wp-content/uploads/2015/01/metro-logo.png) - - [1]: https://powershell.org/ebooks/ - [2]: https://www.penflip.com/Penflip/help/blob/master/publishing/cover.md diff --git a/content/articles/2015-01-06-lets-make-a-powershell-job-interview-quiz-cmon-and-help.md b/content/articles/2015-01-06-lets-make-a-powershell-job-interview-quiz-cmon-and-help.md deleted file mode 100644 index 48a839328..000000000 --- a/content/articles/2015-01-06-lets-make-a-powershell-job-interview-quiz-cmon-and-help.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: "Let's Make a PowerShell Job Interview Quiz. C'mon and Help." -authors: - - Don Jones -date: "2015-01-06T23:51:30+00:00" -categories: - - Announcements -aliases: - - /2015/01/lets-make-a-powershell-job-interview-quiz-cmon-and-help/ ---- - -The folks at [Smarterer][1] have agreed to let us - that's all of us, as in "The PowerShell Community" - build a sort of "exam" for people to prove their PowerShell Proficiency. And I need your help to do it! -**Step 1**, you need to be pretty decent with PowerShell yourself. Not Level 12 Guru Level, mind you, but you should be working with it daily. [Most of this book][2] should make sense to you. -**Step 2**, you need to download my Quiz Question Writing Guide (It's all of 1 page) and Topic List. [PowerShell Quiz Guidelines][3] is the download. Go on, I'll wait. -**Step 3, **you need to sign up, using your e-mail address, and let me know you're interested in helping. What you're volunteering to do is, over the course of February 2015, write at least 20 questions. That's about 2 questions per category. You're also agreeing to help peer-review the questions other folks write, so we can spot the stinkers.  -Signups are due by January 20th 2015 -. - - - [Go here to register!](http://674004.polldaddy.com/s/help-create-a-powershell-quiz) - - -**BTW, **20 questions total is only about 1 per day. You could totally do 5 per day if you made an effort. Think about PowerShell questions you'd ask during a job interview, to tell if someone knew their stuff or was merely a poser. _We cannot have too many good questions. _ -**Now for the good news there are prizes! **[Pluralsight][4] is offering a prizes to the top net question contributors ("net contributor" means the number of questions you write that survive peer review and are accepted by the Quiz Captain). - - * 1st place: $200 Amazon gift card and 6 months of access to the entire Pluralsight library - * 2nd place: $100 Amazon gift card and 3 months of access to the entire Pluralsight library - * 3rd place: $50 Amazon gift card and 1 month of access to the entire Pluralsight library - -**We're also looking for a Quiz Captain**, so when you register, indicate if you're willing to take on that role. There's only one, and you're exempt from the prize (that's what you get for stepping up). You're in charge of final acceptance on all questions that go into the final pool - not so much for technical accuracy, but for being well-written. -**Disclosures:** You'll be using an online authoring tool called Flock, which means your registration e-mail address (which you provide) will be provided to Smarterer, so they can load you into the tool and send you an access invite via e-mail. Your e-mail will also be used to contact you about the project, and regarding any prizes you may earn. -**WHY? **Well, the idea is that we're all getting to a point where we'll need to hire PowerShell sk1llz. Rather than us all concocting our own job interviews, this'll act as a kind of central, crowdsourced job interview you could direct a job candidate to. Yes, some of you will also ask for a more in-depth interview, perhaps offering a coding challenge or something - that's awesome. _This_ is just the first stage you could use. The exam will be available free of charge to anyone who wants to take it, anytime, ever. And it can be updated and evolved as the technology, and our business needs, evolve. - - [1]: http://smarterer.com - [2]: http://manning.com/jones6/ - [3]: https://powershell.org/wp-content/uploads/2015/01/PowerShell-Quiz-Guidelines.docx - [4]: http://pluralsight.com diff --git a/content/articles/2015-01-06-powershell-summit-europe-2015-topic-submissions.md b/content/articles/2015-01-06-powershell-summit-europe-2015-topic-submissions.md deleted file mode 100644 index 15de714e8..000000000 --- a/content/articles/2015-01-06-powershell-summit-europe-2015-topic-submissions.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: PowerShell Summit Europe 2015–topic submissions -authors: - - Richard Siddaway -date: "2015-01-06T09:02:42+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2015/01/powershell-summit-europe-2015-topic-submissions/ ---- - -Topic submissions for the PowerShell Summit Europe are still open. If you want to be considered as a speaker please submit your topic very soon. -At the moment there aren’t enough submissions to enable us to put on a quality event. The 2014 European Summit was an excellent event with many good sessions – now is the time to submit your sessions. We need your sessions. -We have a policy of accepting sessions from new speakers as well as established experts. It’s not who you are but the quality of the session that counts. -Details on how to submit session proposals are available here -[ -https://powershell.org/2014/11/24/call-for-presentations-for-powershell-summit-europe-2015/ -][1] -Please submit your proposals soon as we can’t run the European PowerShell Summit without them! As a note, we are confirmed for Stockholm (or within a a short subway ride of Stockholm) for the timeframe indicated, although we don't have the exact venue yet. It's important that we get sessions lined up soon, so that we can begin general registration. - - [1]: https://powershell.org/2014/11/24/call-for-presentations-for-powershell-summit-europe-2015/ "https://powershell.org/2014/11/24/call-for-presentations-for-powershell-summit-europe-2015/" diff --git a/content/articles/2015-01-13-phillyposh-01082015-meeting-summary-and-presentation-materials.md b/content/articles/2015-01-13-phillyposh-01082015-meeting-summary-and-presentation-materials.md deleted file mode 100644 index fa6a25199..000000000 --- a/content/articles/2015-01-13-phillyposh-01082015-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: PhillyPoSH 01/08/2015 meeting summary and presentation materials -authors: - - John Mello -date: "2015-01-14T02:12:41+00:00" -aliases: - - /2015/01/phillyposh-01082015-meeting-summary-and-presentation-materials/ ---- - -[John Mello][1] gave a presentation entitled “The ForEach and Where methods in Powershell v4 ”. [A copy of his demo script and presentation][2] are available here at our [GitHub site][3]. [A recording of this meeting][4] has been posted to our [YouTube channel][5]. - - [1]: http://mellositmusings.com/ - [2]: https://github.com/PhillyPoSH/2015-01 - [3]: https://github.com/PhillyPoSH - [4]: http://youtu.be/vc2Ukz2N9WQ - [5]: https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2015-01-17-our-ebook-transition-and-your-chance-to-contribute.md b/content/articles/2015-01-17-our-ebook-transition-and-your-chance-to-contribute.md deleted file mode 100644 index 9934d62eb..000000000 --- a/content/articles/2015-01-17-our-ebook-transition-and-your-chance-to-contribute.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Our eBook Transition – and Your Chance to Contribute! -authors: - - Don Jones -date: "2015-01-17T16:26:37+00:00" -categories: - - Announcements - - Books -aliases: - - /2015/01/our-ebook-transition-and-your-chance-to-contribute/ ---- - -We're in the process of migrating our free ebook collection over to Penflip, an online, Git-based collaborative authoring and publishing tool. Matt Penny has taken the lead in converting our Word documents to the Markdown syntax used by Penflip, and as [you can see on our ebooks page][1], most of the titles now have an initial version in Penflip. -One neat thing about Penflip is that anyone can register for a free account, fork one of our projects, and make their own modifications. You can then submit your changes back to the master branch, so we can incorporate your changes into the ebook. This will make it easy for everyone in the community to suggest new content, offer corrections, and so on. **I encourage you to help out -** right now, you may simply notice some flaws from the semi-automated and fully hellish Markdown conversion, and we'd love your assistance in correcting those. -Penflip also supports on-demand downloads of each ebook in a variety of common formats, including EPUB, PDF, and more. That means you'll always be able to grab the latest version of your favorite ebook. We've not yet migrated the source code that goes with some of the ebooks; the plan is to move those into our GitHub repo over the next week. -Penflip will be enabling the next generation of our ebooks, including a massive new DSC title I plan to begin working on in 2015. -**Thanks for any help you can** **provide**, and I hope you continue to find the ebooks helpful! - - [1]: https://powershell.org/ebooks/ diff --git a/content/articles/2015-01-18-powershell-summit-na-2015-agenda-changes.md b/content/articles/2015-01-18-powershell-summit-na-2015-agenda-changes.md deleted file mode 100644 index 8f480028e..000000000 --- a/content/articles/2015-01-18-powershell-summit-na-2015-agenda-changes.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: PowerShell Summit NA 2015 Agenda changes -authors: - - Richard Siddaway -date: "2015-01-18T16:15:59+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2015/01/powershell-summit-na-2015-agenda-changes/ ---- - -We’ve had to make some minor changes to the Summit agenda – the revised schedule is shown on the event web site - [ -http://eventmgr.azurewebsites.net/event/home/PSNA15 -][1] - - [1]: http://eventmgr.azurewebsites.net/event/home/PSNA15 "http://eventmgr.azurewebsites.net/event/home/PSNA15" diff --git a/content/articles/2015-01-25-powershell-org-free-ebook-transition.md b/content/articles/2015-01-25-powershell-org-free-ebook-transition.md deleted file mode 100644 index 61ec4f3f9..000000000 --- a/content/articles/2015-01-25-powershell-org-free-ebook-transition.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: PowerShell.org Free eBook Transition -authors: - - Don Jones -date: "2015-01-25T13:02:48+00:00" -categories: - - Announcements - - Books -aliases: - - /2015/01/powershell-org-free-ebook-transition/ ---- - -Over the past few weeks, [Matt Penny][1] has been busy moving our free eBooks into [their new home on Penflip][2]. Code, when available, is located in our [GitHub repo][3], and modules will [soon be available in the PowerShell Gallery][4] for downloading via Install-Module. -Penflip is a Markdown-based editing system backed by GitHub. This means anyone can contribute corrections, additional material, and so on - which will make it easier to maintain these great books over time. You can download ebooks directly from Penflip in a variety of e-book formats. We're now focused on electronic formats, rather than traditional page-based layout, although PDF is still an available download option if you want to make a hardcopy. -The conversion from Word to Markdown was challenging and largely manual, so if you run across formatting problems (especially with code), we absolutely appreciate your help in fixing those. Simply "branch" the book, creating your own copy of the project. Make corrections, and then submit those back to the master branch. Approvals are manual, so give us a few days to review what you've done and merge it into the master. -Massive thanks to Matt for all the long hours making this conversion happen, and to the folks who've submitted cover art for the new books. - - [1]: https://twitter.com/salisbury_matt - [2]: http://penflip.com/powershellorg - [3]: http://github.com/powershellorg/ebooks - [4]: http://powershellgallery.com diff --git a/content/articles/2015-01-26-charlotte-powershell-user-group-252014.md b/content/articles/2015-01-26-charlotte-powershell-user-group-252014.md deleted file mode 100644 index 4ecdd60d2..000000000 --- a/content/articles/2015-01-26-charlotte-powershell-user-group-252014.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Charlotte PowerShell User Group 2/5/2014 -authors: - - Terri Donahue -date: "2015-01-26T17:23:23+00:00" -aliases: - - /2015/01/charlotte-powershell-user-group-252014/ ---- - -It has been quite a busy past couple of months and we have not had our monthly get-together. We are working to get back on track and will start in February. This month, I will be discussing IIS and PowerShell at our meeting. For those of you that do not know me, I am an IIS MVP and a PowerShell hack. I would like to tailor the discussion, demos, and examples to address specific questions or needs that the members have. You can also check out my powershell specific blogs [here](http://terrid.me/tag/powershell/). Feel free to tweet to @owterri with any content requests that you have. - -Look forward to seeing you in a couple of weeks. diff --git a/content/articles/2015-02-09-design-the-next-scripting-games.md b/content/articles/2015-02-09-design-the-next-scripting-games.md deleted file mode 100644 index a831b789a..000000000 --- a/content/articles/2015-02-09-design-the-next-scripting-games.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Design the Next Scripting Games -authors: - - Don Jones -date: "2015-02-09T15:03:49+00:00" -categories: - - Announcements - - Scripting Games -aliases: - - /2015/02/design-the-next-scripting-games/ ---- - -We have some folks working on the next Scripting Games... but we want some feedback from the community to make sure we're offering something of value. -The current plan is to run a series of events, with both Beginner and Intermediate tracks. There will be no "advanced" track; the feeling is that, if you're advanced, you should be helping out by judging ;). Events will be constructed as a combination of puzzles and real-world tasks, meaning some things will simply test your PowerShell skills, while others will test them in a more production-applicable way. -What we need from the community is some sense of what you want to get from the Games. However, before you reply, understand what is NOT on the table: **we will not be running an event where every entry gets personal commentary or feedback from an expert judge.** It simply isn't practical - everyone doing the judging has a full-time job, and offering personal feedback just isn't feasible. -What COULD be on the table is offering a numeric score from a judge, based on the completeness of your entry and what the judge thinks of it. However, if it's a low score, you're not going to be told why ("no commentary," see above). So we're not sure that numeric scores are useful. -One proposal has been to post the events, and have judges select both good ones and less-good ones to write about. In other words, provide commentary on the outstanding entries, but not EVERY entry. Individual entries wouldn't receive a score, but you could certainly compare what you did to the outstanding ones that did receive commentary. The idea here is to give you a task on which to test your skills, and to provide some educational feedback on some representative entries. The fact is that, in any given task, we tend to see a lot of similar-looking entries anyway, so hopefully taking some of them and commenting (both positively and constructively) will help everyone "judge" their own entries and improve their skills. -After trying numerous approaches to the Games over the past years, and after listening closely to people's feedback, we're trying to come up with something that is both useful and do-able. -What do you think of that proposal? Or, would you offer another proposal for us to build the Games around? Keep in mind - any proposal that suggests "expert commentary on every entry" will simply have to be turned down outright. After major discussion, we simply can't commit to it. We'll leave this open for the month of February 2015 - [discuss away][1]! -[Add to the discussion in the Forums][1]. Login required; not accepting comments on this post. - - [1]: https://powershell.org/forums/topic/the-next-scripting-games-your-thoughts/ diff --git a/content/articles/2015-02-19-nj-powershell-ug-meeting-march-5th-presenter-adam-bertram.md b/content/articles/2015-02-19-nj-powershell-ug-meeting-march-5th-presenter-adam-bertram.md deleted file mode 100644 index 8fb84a07e..000000000 --- a/content/articles/2015-02-19-nj-powershell-ug-meeting-march-5th-presenter-adam-bertram.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: "NJ PowerShell UG Meeting March 5th: Presenter Adam Bertram" -authors: - - NJPowerShell -date: "2015-02-19T18:59:59+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/02/nj-powershell-ug-meeting-march-5th-presenter-adam-bertram/ ---- - -The NJ PowerShell User Group is having a meetup on Thursday, March 6th from 6:00 - 8:00 PM.  The first half hour will be for socializing, pizza, and playing pool at our coffee bar.  - - -**Registration**: [EventBrite](http://www.eventbrite.com/e/nj-powershell-ug-meeting-march-5th-presenter-adam-bertram-tickets-15834592693)  You must register to attend in person. - - -**Agenda**: - - - -                6:00 – 6:30: Pizza and socializing - - -                6:30 – 7:30: Presentation - - -                7:30 - 8:00: Q & A - - - - -Please note that the Webex meeting will start at 6:00 PM, but the actual presentation won't start until 6:30 - -.  -In-Person a - -ttendees must register, print out their EventBrite ticket, and present it at the door.  Walk-ins will not be permitted. - - - - -**Presenter**: Adam Bertram - - -**Bio: ** -Adam has been in the IT industry since 1998 and has mostly focused his career on Microsoft technologies.  He's a child of autoexec.bat and batch menus, graduated to VBscript 10 years ago and made his way to Powershell 3 years ago.  Adam's passion is breaking complicated problems down and developing creative solutions using Powershell.  Due to his experience with Microsoft's Configuration Manager he's been known to write a lot of scripts around software management. - - - -**Presentation Description:** - - -Managing Software Installs with Powershell - - -If you've ever tried to script a software install or uninstall to a lot of different applications you'll know how hard it can be. Every piece of software seems to work in a different manner. This talk will go over a Powershell module I've created that allows me to easily find, install and uninstall MSIs, InstallShield and other EXE installers. It also has the ability to perform various cleanup routines and perform many other functions necessary for the software to work as you would expect. - - - -Twitter: -[@adbertram](https://twitter.com/adbertram) - - -  [![AdamBertram](http://njpowershell.org/wp-content/uploads/2015/02/AdamBertram-150x150.png)](http://njpowershell.org/wp-content/uploads/2015/02/AdamBertram.png)  - - - Coffee Bar, Pool Table, and XBox - - -![Coffee Bar](https://cdn.evbuc.com/eventlogos/111855199/eventbritecoffeebar.png) - - - Conference Room - - -![Conference Room](https://cdn.evbuc.com/eventlogos/111855199/eventbriteconferenceroom.png) diff --git a/content/articles/2015-02-20-powershell-summit-europe-registration.md b/content/articles/2015-02-20-powershell-summit-europe-registration.md deleted file mode 100644 index 9ad15df0d..000000000 --- a/content/articles/2015-02-20-powershell-summit-europe-registration.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: PowerShell Summit Europe Registration -authors: - - Don Jones -date: "2015-02-20T14:35:03+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2015/02/powershell-summit-europe-registration/ ---- - -Registration for PowerShell Summit Europe will commence on February 27th, 2015 at roughly 12:01am server time (I believe the server is in a Pacific time Azure datacenter). We will be limited to roughly 100 attendees. -I want everyone to understand the basic rules of engagement for this. Setting up and running this event involves significant financial risk. While in this case the event venue, a Microsoft office in Kista (near Stockholm), Sweden, isn't charging us huge fees and requiring us to commit to hotel rooms and the like, there is still risk. _Most of that risk is not borne by PowerShell.org, _but for the most part by myself, personally. Our speakers also commit to covering their own travel expenses (something we're hoping to offset this year). In addition, PowerShell team members are taking _time away from the product_ to attend, which is a huge logistical commitment because it's such a relatively small team. -For the Europe 2014 event, we had very poor registration numbers almost until the last minute. We also had to work very hard to drum up topic submissions from European speakers. Those two facts worry us a lot, because it suggests that there isn't a strong and engaged community interested in this event. If that's the case, we don't want to barge in and run the event at all. As a result, we're going to be taking a pretty risk-averse approach this time, and I wanted to be up-front and forthright about it. -So: We're going to evaluate the registration numbers and velocity in mid-April. By then, we need to see at least 20-30 registrations. (We usually achieve that in the first week of registrations for the North American event.) If we're not hitting that level, then **the event is subject to cancellation** (and everyone will naturally get a full and complete refund). -Also know that, should we make it past that point, registration **will end by August 15th 2015** or when we fill the available space, whichever comes first. In other words, last-minute registration won't be a thing. -The success of this event **depends on the European members of the overall PowerShell community. ** -You - need to help get the word out. We aren't going to be advertising, soliciting Microsoft's help, or other techniques. This isn't a commercial conference; it's being done _by_ the community and _for_ the community - and if the community can't make it happen, then it won't happen. -Our agenda will be going online shortly, and you should head to http://PowerShellSummit.org to find the registration links (after reading the introductory material, click "Europe 2015" for details). We'll get it all posted and ready for February 27th - it won't be live until then. **Help us get the word out. **Tell co-workers. Use Twitter, Google+, and Facebook. Attend user group meetings and spread the word. We've got about 6 weeks to get 20-30 people signed up to make sure we're covering base expenses and making this happen. diff --git a/content/articles/2015-02-27-charlotte-powershell-user-group-meeting352015.md b/content/articles/2015-02-27-charlotte-powershell-user-group-meeting352015.md deleted file mode 100644 index c42605882..000000000 --- a/content/articles/2015-02-27-charlotte-powershell-user-group-meeting352015.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Charlotte PowerShell User Group Meeting–3/5/2015 -authors: - - Terri Donahue -date: "2015-02-27T18:52:15+00:00" -aliases: - - /2015/02/charlotte-powershell-user-group-meeting352015/ ---- - -We will be bringing you a presentation by Jason Walker, @AutomationJason, at our next meeting. Jason will be discussing the Anatomy of a DSC Resource. The session will dive into the anatomy of a DSC resource and will provide an understanding of what it takes to develop your own DSC resources. - -Food and drinks will be provided. Everyone is welcome. Please RSVP on the [MeetUp][1] event page so we can plan food accordingly. - - [1]: http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/216116072/ diff --git a/content/articles/2015-03-06-the-fastest-powershell-2-count-all-users-in-active-directory-domain.md b/content/articles/2015-03-06-the-fastest-powershell-2-count-all-users-in-active-directory-domain.md deleted file mode 100644 index 3791b7160..000000000 --- a/content/articles/2015-03-06-the-fastest-powershell-2-count-all-users-in-active-directory-domain.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: "The fastest Powershell #1 : Count all users in Active Directory domain" -authors: - - Steve -date: "2015-03-07T00:47:42+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/03/the-fastest-powershell-2-count-all-users-in-active-directory-domain/ ---- - -**Updated :** October 01, 2015 -** -Question -**: What is the fastest solution to count all the users in Active Directory domain? - -* * * - -** -Answer -**: To answer this question, I will compare 17 different commands in a domain with 75 000 users. - - -`[System.GC]::WaitForPendingFinalizers() -[System.GC]::Collect() -Set-Location -Path 'C:\demo' -Add-Type -AssemblyName System.DirectoryServices.Protocols -Import-Module -Name .\S.DS.P.psd1 -Add-PSSnapin -Name 'Quest.ActiveRoles.ADManagement' -$searcher = [adsisearcher]'(&(objectclass=user)(objectcategory=person))' -$searcher.SearchRoot = 'LDAP://DC=domain,DC=com' -$searcher.PageSize = 1000 -$searcher.PropertiesToLoad.AddRange(('samaccountname')) -function Get-QueryResult -{ - [CmdletBinding()] - Param - ( - [Parameter(Mandatory=$true)] - [int]$Id - ) - switch ($id) - { - 1 { ( Get-ADUser -Filter 'objectClass -eq "user" -and objectCategory -eq "person"' -SearchBase 'DC=domain,DC=com' -Properties SamAccountName).SamAccountName } - 2 { ( Get-ADUser -LDAPFilter '(&(objectclass=user)(objectcategory=person))' -SearchBase 'DC=domain,DC=com' -Properties SamAccountName).SamAccountName } - 3 { ( Get-ADObject -Filter 'objectCategory -eq "person" -and objectClass -eq "user"' -SearchBase 'DC=domain,DC=com' -Properties SamAccountName).SamAccountName } - 4 { ( Get-ADObject -LDAPFilter '(&(objectclass=user)(objectcategory=person))' -SearchBase 'DC=domain,DC=com' -Properties SamAccountName).SamAccountName } - 5 { ( Get-ADObject -LDAPFilter 'sAMAccountType=805306368' -SearchBase 'DC=domain,DC=com' -Properties SamAccountName).SamAccountName } - 6 { ( Get-QADUser -SearchRoot 'DC=domain,DC=com' -DontUseDefaultIncludedProperties -IncludedProperties SamAccountName -SizeLimit 0).SamAccountName } - 7 { ( $searcher.FindAll() ) } - 8 { (Find-LdapObject -SearchFilter:'(&(objectclass=user)(objectcategory=person))' -SearchBase:'DC=domain,DC=com' -LdapServer:'' -PageSize 1000 -PropertiesToLoad:@('sAMAccountName')) } - 9 { (Find-LdapObject -SearchFilter:'sAMAccountType=805306368' -SearchBase:'DC=domain,DC=com' -LdapServer:'' -PageSize 1000 -PropertiesToLoad:@('sAMAccountName')) } - 10 { (Find-LdapObject -SearchFilter:'(&(objectclass=user)(objectcategory=person))' -SearchBase:'DC=domain,DC=com' -LdapServer:'' -PageSize 1000) } - 11 { (Find-LdapObject -SearchFilter:'sAMAccountType=805306368' -SearchBase:'DC=domain,DC=com' -LdapServer:'' -PageSize 1000) } - 12 { (dsquery user -o samid 'DC=domain,DC=com' -limit 0) } - 13 { (dsquery * -filter '(&(objectclass=user)(objectcategory=person))' -attr samAccountName -attrsonly -limit 0) } - 14 { (dsquery * -filter 'sAMAccountType=805306368' -attr samAccountName -attrsonly -limit 0) } - 15 { ([regex]::match((.\AdFind.exe -b 'DC=domain,DC=com' -f '(&(objectclass=user)(objectcategory=person))' -c),'\d{5}').value) 2> $null } - 16 { ([regex]::match((.\AdFind.exe -b 'DC=domain,DC=com' -f 'sAMAccountType=805306368' -c),'\d{5}').value) 2> $null } - 17 { ([regex]::match((.\AdFind.exe -b 'DC=domain,DC=com' -sc adobjcnt:user -c),'\d{5}').value) 2> $null } - } -} -# Check -for ($i = 1; $i -le 17; $i++) -{ - if ($i -ge 15) - { - $count = Get-QueryResult -Id $i - } - else - { - $count = (Get-QueryResult -Id $i | Measure-Object).Count - } - [PSCustomObject]@{ - Query = $i - Count = $count - } -} -# Measure -for ($i = 1; $i -le 17; $i++) -{ - New-Variable -Name "query$i" -Value $('{0:N2}' -f (Measure-Command -Expression { Get-QueryResult -ID $i }).TotalSeconds) -} -[PSObject]@{ - 'Get-ADUser -Filter objectClass and objectCategory' = $query1 - 'Get-ADUser -LDAPFilter objectclass objectcategory' = $query2 - 'Get-ADObject -Filter objectClass and objectCategory' = $query3 - 'Get-ADObject -LDAPFilter objectclass objectcategory' = $query4 - 'Get-ADObject -LDAPFilter sAMAccountType=805306368' = $query5 - 'Quest' = $query6 - '[adsisearcher]' = $query7 - 'Find-LdapObject objectClass and objectCategory PropertiesToLoad' = $query8 - 'Find-LdapObject sAMAccountType=805306368 PropertiesToLoad' = $query9 - 'Find-LdapObject objectClass and objectCategory' = $query10 - 'Find-LdapObject sAMAccountType=805306368' = $query11 - 'dsquery user -o samid' = $query12 - 'dsquery objectClass and objectCategory' = $query13 - 'dsquery sAMAccountType=805306368' = $query14 - 'adfind objectClass and objectCategory' = $query15 - 'adfind sAMAccountType=805306368' = $query16 - 'adfind -sc adobjcnt:user' = $query17 -}.GetEnumerator() | Sort-Object -Property Value | Select-Object -Property @{ - Name = 'Query' - Expression = {$_.Name} -}, @{ - Name = 'TotalSeconds' - Expression = {[double]$_.Value} -} | Sort-Object -Property TotalSeconds | Format-Table -AutoSize -`First, I check that all these commands return the same value: - -Result: - - -**Conclusion** -: In this scenario, the fastest was : - - -`AdFind.exe -b 'DC=domain,DC=com' -f 'sAMAccountType=805306368' -c -`**Links** : -Download AdFind (adfind.exe) -[http://www.joeware.net/freetools/tools/adfind/](http://www.joeware.net/freetools/tools/adfind/) -Download System.DirectoryServices.Protocols module (S.DS.P.psm1) -[https://gallery.technet.microsoft.com/scriptcenter/Using-SystemDirectoryServic-0adf7ef5](https://gallery.technet.microsoft.com/scriptcenter/Using-SystemDirectoryServic-0adf7ef5) -Download QAD cmdlets (Get-QADUser) -[http://software.dell.com/products/activeroles-server/powershell.aspx](http://software.dell.com/products/activeroles-server/powershell.aspx) -All these tools in one file : - -**Note** : If you have a faster solution, feel free to comment below so I can update my article. - -* * * - -** -Real-world example -**: -Couting the total numbers of users in Active Directory can be useful in some cases. -You could need this information to generate statistics or reports, or maybe you just want to monitor the number of accounts created / removed on regular basis. - -* * * diff --git a/content/articles/2015-03-10-phillyposh-03052015-meeting-summary-and-presentation-materials.md b/content/articles/2015-03-10-phillyposh-03052015-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 49368e4e8..000000000 --- a/content/articles/2015-03-10-phillyposh-03052015-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: PhillyPoSH 03/05/2015 meeting summary and presentation materials -authors: - - John Mello -date: "2015-03-11T01:18:19+00:00" -aliases: - - /2015/03/phillyposh-03052015-meeting-summary-and-presentation-materials/ ---- - -[Derek Murawsky][1] gave an excellent presentation entitled “Introducing Chocolatey”. [A copy of his demo script and presentation][2] are available here at our [GitHub site][3]. [A recording of this meeting][4] has been posted to our [YouTube channel][5]. - - [1]: https://twitter.com/OutOfOrder2day - [2]: https://github.com/PhillyPoSH/2015-03-Derek-Murawsky-Chocolatey- - [3]: https://github.com/PhillyPoSH - [4]: https://www.youtube.com/watch?v=LqyHyoa_F1c - [5]: https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2015-03-11-march-omaha-powershell-user-group-meeting.md b/content/articles/2015-03-11-march-omaha-powershell-user-group-meeting.md deleted file mode 100644 index 4dcc496b8..000000000 --- a/content/articles/2015-03-11-march-omaha-powershell-user-group-meeting.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: March Omaha PowerShell User Group Meeting -authors: - - Jacob Benson -date: "2015-03-11T12:52:14+00:00" -aliases: - - /2015/03/march-omaha-powershell-user-group-meeting/ ---- - -This month we have several exciting things going on!  First, Trond Hindenes will be joining us via Lync from the great country of Norway for a presentation on Service Management Automation (SMA).  Trond is a Senior Consultant at Crayon who spends most of his non-snowboarding time working on Microsoft System Center, PowerShell, Active Directory, Virtualization and Microsoft Azure. You can find him on[Twitter](https://twitter.com/trondhindenes) and on his website [Trond’s Working!](http://hindenes.com/trondsworking/) -Second, the first 30 minutes of this meeting will be used to announce the “official” formation of an Omaha System Center Users Group and to give attendees time to network with each other and talk to Matt, Kelly and Zac about the formation of the user group (if they are interested in learning more about it).  If you are interested in learning more about the Omaha Sytems Center User Group before the meeting you can find them on [Twitter](http://twitter.com/omahascug%20) or you can email them [omahascug@outlook.com](mailto:omahascug@outlook.com) . -We will attempt to record Trond’s presentation using Lync but no promises :). -[Event Registration is here][1]. - - [1]: http://www.eventbrite.com/e/omaha-powershell-user-group-march-meeting-tickets-16120181898 diff --git a/content/articles/2015-03-25-home-labs-for-the-it-pro.md b/content/articles/2015-03-25-home-labs-for-the-it-pro.md deleted file mode 100644 index 60d060c9a..000000000 --- a/content/articles/2015-03-25-home-labs-for-the-it-pro.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Home Labs for the IT pro -authors: - - Greg Altman -date: "2015-03-25T15:34:48+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/03/home-labs-for-the-it-pro/ ---- - -Every IT pro needs a lab. It’s not just the fact that we all have a little mad scientist in us, it’s a playground for experimentation and learning. By “lab” I do not mean a formal test or dev environment, but a much more informal setting that typically goes before the “dev” part gets started. This lab need not be expensive. A little creative repurposing and virtualization will go a long way towards getting started with a home lab. - - 1. Hardware- Obviously you have to have a computer. - * The least expensive is the system you already have. When you bought it did you buy a high end Core i7 with lots of ram for gaming or just future proofing? If so then you’re done! Windows 8.1 or Windows 10 preview do a great job of Hyper-V hosting. Of course you may need more hard drive space, but then again drives are relatively cheap these days. The system I use is a 3 year old Dell XPS with a Core i7 and 6GB of Ram and an added 1TB SATA drive. Hardware cost = zero. Of course, I want to add more ram and disk but for now it gets along. I run 3-4 windows core servers at a time, but more than 4 causes the system to go into disk thrash mode pretty seriously due to RAM overuse. - * The next best option takes up more space but can potentially be even cheaper in a strictly monetary sense. How does your company dispose of old outdated equipment? Can you score 5-10 laptops or a server or two? What about old Ethernet switches? That plus $50 at Walmart for some shelving and you have your own network in the basement to play with. - * Finally if you have an extra $600 -800 you can get a dedicated PC bare-bones kit with a Core i7, 16+ GB of ram and a 2-3 TB hard drive. - - - - - Software- If you are learning Linux then you’re in luck here as the cost is pretty much free. However in the Windows PowerShell lab, we need Windows! The approach to this is pretty much dependent on the cash you want to spend and the approach you took to solve the hardware problem. If you are using option a) then you don’t need a ‘host’ OS as you already have an OS. Microsoft offers free demo versions for download, and although they are time locked, these VMs aren’t going to usually live long enough to expire. If you already have a MSDN subscription from work, then you already have access to server OS downloads. - - - - - - Networking- Obviously you have an internet connection. Beyond that, if your home is like mine, there are a dozen or so devices connected to the home LAN. Gaming consoles, televisions, DVRs, etc. that anyone else in the house may want to use while you are using your lab equipment. I strongly recommend that you keep the “lab” separate from your home network. If you are going the basement shelves of equipment route, you’ll certainly need some Ethernet switches and perhaps a router or firewall to keep the “lab” network separate. If you are going the more virtual route, you can do as I did and install a Linux router on a VM to act as firewall/gateway from the “virtual” subnet to the “real” LAN. I used VyOS ([http://www.vyos.net](http://www.vyos.net)), which is nice since you can simply follow the directions on their site to do a basic setup. This keeps lab services in the virtual space where they belong. - - - - - - Time- I know we are all busy, but seriously make the time. Getting this set up takes literally a couple of hours depending on your internet connection. Once it’s set, then you can squeeze in a little here and there and make surprising strides in your learning. Get up an hour earlier and play in the lab a bit while drinking coffee. Stay up an hour later and work on the lab after the family is in bed. Dedicate two or three lunch hours a week. You’ll be amazed how much faster you can learn things when you can just “try it and see what happens” with no fear of breaking something important. After all you built it- you can rebuild it! - - - -So now that we have all the parts together, what specifically do we need to build?  Since in most instances, we’ll be building this in a virtual space, let’s focus on that one. Those of you building a lab physically may have to fill in some blanks to match up with your physical setup but the concepts are the same. -I start off with the most basic: the network. Servers are much more interesting when they can talk to each other some right? In Hyper-V Manager make two virtual switches, one is linked to your host machine’s NIC and therefore to the rest of your LAN and presumably the internet. The second one is an Internal Only type. These should be on separate subnets to keep the routing simple. I like to use a 10.x.x.x/24 network so that I have lots of room to play around with subnets and software based networking. -Once we have those two networks, we need a router. As I mentioned before, I use VyOS installed on a VM with two NICS, one on the internal LabNet switch and on the external “HomeLan” switch. -Next it’s time to start standing up servers. This can be done one of two ways; manually or via Desired State Configuration.   If you are like me, and just getting started with DSC, I recommend a mixed approach. Get your Domain Controller going and a Windows 8.1 or later client installed on your LabNet.  Now you have a stable network and can start playing around with DSC. I have a standard build of a configured router, DC, Windows 10 client, and a DSC server saved to a 1 TB USB drive as a backup. That way no matter how badly I hose up the lab, I can get back to a minimum stable configuration quickly and easily.  On the DSC server I keep a couple of copies of configurations for web servers, video servers, Windows 10 desktops, whatever it is that I’m playing with that week. -The only thing I haven’t been able to really introduce test wise is Apple products since I’m running in a PC environment and there is no legal way to virtualize a Mac on hardware that isn’t Apple. Of course with a little twiddling of the router configuration and by introducing a VLAN on my wireless router I’m sure I could incorporate external wireless devices like a MacBook. However, that violates the premise of keeping the “Mad Scientist Stuff” in an isolated virtual space. -Obviously there wasn’t much PowerShell in this discussion, and equally obviously, much of this you can do from a PowerShell prompt or with DSC. Unfortunately in order to get your skills to that level, the lab has to come first. diff --git a/content/articles/2015-03-26-special-charlotte-powershell-group-meeting-on-422-featuring-lee-holmes.md b/content/articles/2015-03-26-special-charlotte-powershell-group-meeting-on-422-featuring-lee-holmes.md deleted file mode 100644 index 1c135de4c..000000000 --- a/content/articles/2015-03-26-special-charlotte-powershell-group-meeting-on-422-featuring-lee-holmes.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Special Charlotte PowerShell Group meeting on 4/22 featuring Lee Holmes -authors: - - Terri Donahue -date: "2015-03-26T22:41:03+00:00" -aliases: - - /2015/03/special-charlotte-powershell-group-meeting-on-422-featuring-lee-holmes/ ---- - -Charlotte hackers, our regularly scheduled meeting on April 2nd will not be occurring. Instead we will have our monthly meeting on April 22nd. Can you hear the drum roll in the distance? It will continue to build to a crescendo as April 22nd approaches. Lee Holmes will be speaking at the meeting. - -In this highly interactive session, Principle PowerShell developer Lee Holmes shares some of his favorite PowerShell tips and tricks. Attendees are encouraged to share their favorite PowerShell tricks as well, and so the session should be both fun and educational. - -This is a remarkably unique opportunity to interact with one of the cornerstone developers of PowerShell. We expect a large turnout given the proximity to the PowerShell Summit, so we are requiring everyone to RSVP this time around. - -In addition, we're giving Charlotte PowerShell Group members first crack at the reservations. Ed Wilson will be promoting this event heavily on his blog starting March 30, and it will likely be promoted as part of the PowerShell summit marketing as well. My point is - the seats will go fast. Get yours while you can. - -Everyone wanting to attend this event will need to sign-up and join the Charlotte PowerShell User Group on MeetUp. Click on over and save your spot. - -[http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/221424922/][1] - -We look forward to seeing everyone and enjoying a great meeting with Lee. - - [1]: http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/221424922/ "http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/221424922/" diff --git a/content/articles/2015-04-02-omaha-psug-march-meeting-slides-video-now-available.md b/content/articles/2015-04-02-omaha-psug-march-meeting-slides-video-now-available.md deleted file mode 100644 index 9d8361c47..000000000 --- a/content/articles/2015-04-02-omaha-psug-march-meeting-slides-video-now-available.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Omaha PSUG March Meeting Slides & Video Now Available -authors: - - Jacob Benson -date: "2015-04-02T13:08:21+00:00" -aliases: - - /2015/04/omaha-psug-march-meeting-slides-video-now-available/ ---- - -Trond Hindenes presented on Real Life SMA this month.  Boe Prox was able to get this presentation recorded and it is now on YouTube. -The slides Trond used in his presentation are [here][1].  The YouTube video is [here][2]. - - [1]: https://onedrive.live.com/redir?resid=4bfe4a6675a48c91%21120 - [2]: https://youtu.be/eLKZ0GWAO10 diff --git a/content/articles/2015-04-06-nj-powershell-users-group-meet-presenter-jeffrey-hicks-microsoft-mvp.md b/content/articles/2015-04-06-nj-powershell-users-group-meet-presenter-jeffrey-hicks-microsoft-mvp.md deleted file mode 100644 index a5a0ec817..000000000 --- a/content/articles/2015-04-06-nj-powershell-users-group-meet-presenter-jeffrey-hicks-microsoft-mvp.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: "NJ PowerShell Users Group Meet: Presenter Jeffrey Hicks – Microsoft MVP" -authors: - - NJPowerShell -date: "2015-04-06T16:54:14+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/04/nj-powershell-users-group-meet-presenter-jeffrey-hicks-microsoft-mvp/ ---- - -The NJ PowerShell User Group is having a meetup on Tuesday, April 28th from 6:00 - 8:00 PM.  The first half hour will be for socializing, pizza, and playing pool at our coffee bar.  - - -Agenda: - - - -                6:00 – 6:30: Pizza and socializing - - -                6:30 – 7:30: Presentation - - -                7:30 - 8:00: Q & A - - - -Please note that the Webex meeting will start at 6:00 PM, but the actual presentation won't start until 6:30. In-Person a ttendees must register, print out their EventBrite ticket, and present it at the door.  Walk-ins will not be permitted. - - - -![Eventbrite](http://njpowershell.org/wp-content/uploads/2015/04/EventBritelogo.png) [Eventbrite Registration Page](http://www.eventbrite.com/e/nj-powershell-users-group-meet-april-28th-presenter-jeffrey-hicks-tickets-16466847785)  -A Webex meeting link will be emailed to Eventbrite on-line registrants prior to the event. - - - - -**Presenter**: Jeffrey Hicks (in-person) - - -**Presentation: ** -On the Job: Putting PowerShell Scheduled Jobs to Work for You. So you know how to use PowerShell and how it can make your job easier to do. But why should you have to be sitting at your desk to run a PowerShell script or command? Why not combine the simplicity of a PowerShell script with the ease of use of a scheduled task! PowerShell MVP and author Jeff Hicks will guide you through the process of setting up and using PowerShell scheduled jobs, including a few potential gotchas. By the end of the session you should know enough to be able to schedule the boring right out of your job. - - - -**Bio: ** -Jeffery Hicks is an IT veteran with over 25 years of experience, much of it spent as an IT infrastructure consultant specializing in Microsoft server technologies with an emphasis in automation and efficiency. He is a multi-year recipient of the Microsoft MVP Award in Windows PowerShell. He works today as an independent author, trainer and consultant. Jeff has written for numerous online sites and print publications, is a contributing editor at Petri.com ([http://www.petri.com](http://www.petri.com)), and a frequent speaker at technology conferences and user groups. His latest book is[ PowerShell In Depth: An Administrator's Guide 2nd Ed](http://www.amazon.com/PowerShell-Depth-Don-Jones/dp/1617292184/). - - - - - -Twitter: -[@JeffHicks](https://twitter.com/jeffhicks) - - -[![Jeff Hicks](http://njpowershell.org/wp-content/uploads/2015/04/JeffHicks-150x150.jpeg)](https://twitter.com/jeffhicks)   [![PowerShell In Depth 2nd Ed.](http://njpowershell.org/wp-content/uploads/2015/04/PowerShellInAction2nd-150x150.jpg)](http://www.amazon.com/PowerShell-Depth-Don-Jones/dp/1617292184/) - - - Coffee Bar, Pool Table, and XBox - - -![Coffee Bar](https://cdn.evbuc.com/eventlogos/111855199/eventbritecoffeebar.png) - - - Conference Room - - -![Conference Room](https://cdn.evbuc.com/eventlogos/111855199/eventbriteconferenceroom.png) diff --git a/content/articles/2015-04-07-a-quick-powershell-summit-europe-update-spread-the-word.md b/content/articles/2015-04-07-a-quick-powershell-summit-europe-update-spread-the-word.md deleted file mode 100644 index 443b55201..000000000 --- a/content/articles/2015-04-07-a-quick-powershell-summit-europe-update-spread-the-word.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: A Quick PowerShell Summit Europe Update (spread the word!) -authors: - - Don Jones -date: "2015-04-07T14:52:16+00:00" -categories: - - PowerShell Summit -aliases: - - /2015/04/a-quick-powershell-summit-europe-update-spread-the-word/ ---- - -First: Because e-mail these days is actually unreliable, what with spam filters and all, please know that we're relying on you to keep yourself informed on Summit updates. Following the [Summit category on PowerShell.org][1], and watching the [@PSHSummit Twitter account][2], are the reliable means of doing so. -**First:** Summit Europe is happening. There was some confusion because a draft blog post from a month ago got resurrected somehow, but the Summit is **on.** -**Second: **We're almost sold out. I think we literally have 2 or 3 seats left. There was a rush over this past weekend. -**Third: **We're exploring other venues in Stockholm and Kista, which would afford us more room. I expect to have this pinned down no later than mid-May. The dates will not change, and the Kista area will probably not change. But **pay attention** so you're not going to the wrong building. Watching the Summit category and @PSHSummit Twitter page is vital, especially closer-in. -**Fourth: **Hotel inventory in central Stockholm is dicey because there's some giant conference at the waterfront conference center. There are rooms available just outside the central area, as well as in Kista. So long as you're close to a tram line or Metro stop, you're good to go - the Metro will be able to get you to whatever venue we select (we're ensuring that). -**Fifth: **That is all. Have a good week :). - - [1]: https://powershell.org/forums/forum/powershell-summit/ - [2]: http://twitter.com/pshsummit diff --git a/content/articles/2015-04-10-powershell-summit-europe-venue-change.md b/content/articles/2015-04-10-powershell-summit-europe-venue-change.md deleted file mode 100644 index ea14a671a..000000000 --- a/content/articles/2015-04-10-powershell-summit-europe-venue-change.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: PowerShell Summit Europe VENUE CHANGE -authors: - - Don Jones -date: "2015-04-10T14:43:52+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2015/04/powershell-summit-europe-venue-change/ ---- - -We're announcing a venue change for PowerShell Summit Europe 2015. Although we're very appreciative to Microsoft for offering the use of their office in Kista, our registration velocity warrants a larger venue, and gives us the opportunity for a more central location. -Dates are not changed. We will be at the [Scandic Klara hotel][1], which is near to the [HTL Kungsgaten][2], both of which has sleeping room available as of this writing. Both are as close as we can get to Stockholm Central station, and both are near a tram line. -We are recommending that attendees **reserve sleeping rooms immediately. **A government congress at the waterfront convention center has made room inventory tight. Our [registration website][3] has been updated with the additional attendee capacity. - - [1]: http://www.scandichotels.se/Hotels/Sverige/Stockholm/Scandic-Klara/#.VSfgrlwtaq4 - [2]: http://htlhotels.com/hotels/kungsgatan/ - [3]: https://eventmgr.azurewebsites.net/event/home/PSEU15 diff --git a/content/articles/2015-04-16-microsoft-publishes-dsc-resource-kit-in-github.md b/content/articles/2015-04-16-microsoft-publishes-dsc-resource-kit-in-github.md deleted file mode 100644 index b9ca12efb..000000000 --- a/content/articles/2015-04-16-microsoft-publishes-dsc-resource-kit-in-github.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Microsoft Publishes DSC Resource Kit in GitHub -authors: - - Don Jones -date: "2015-04-16T11:47:50+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/04/microsoft-publishes-dsc-resource-kit-in-github/ ---- - -When Microsoft first released the DSC Resource Kit (in [Wave 10][1] as of this writing), they opened the door to community contributions. Our own [PowerShell.org GitHub repo][2] consists partly of DSC resource that used Microsoft's code as a baseline, and then corrected problems or expanded capabilities. -What we never had was a way for Microsoft to circle back, pick up those enhancements, and include them as part of an official future Resource Kit Wave. Now, we do. - - - -Microsoft has moved the entire DSC Resource Kit to an [open GitHub repo][3]. They've also included some [basic guidelines for potential contributors][4]. This now allows anyone to jump in, make corrections, or potentially even expand capabilities, knowing that their work has a chance of being reviewed and included in the "official" repository. That means we have a shot at having One True Version of these modules, which anyone can find and use, rather than scattered versions that inherited from the originals, but were harder for the general public to find. -As of this writing, there are over 45 DSC resources you can download, check out, modify, and submit changes for - as well as using them in your environment. Thank you, Microsoft! - - [1]: https://gallery.technet.microsoft.com/scriptcenter/DSC-Resource-Kit-All-c449312d - [2]: https://github.com/powershellorg - [3]: https://github.com/PowerShell/DscResources - [4]: https://github.com/PowerShell/DscResources/blob/master/CONTRIBUTING.md diff --git a/content/articles/2015-04-20-powershell-summit-north-america-launches.md b/content/articles/2015-04-20-powershell-summit-north-america-launches.md deleted file mode 100644 index 36b456563..000000000 --- a/content/articles/2015-04-20-powershell-summit-north-america-launches.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: PowerShell Summit – North America Launches! -authors: - - Will Anderson -date: "2015-04-20T22:49:06+00:00" -categories: - - PowerShell Summit -aliases: - - /2015/04/powershell-summit-north-america-launches/ ---- - -The PowerShell community descended on Charlotte, North Carolina for the third annual PowerShell Summit - North America this week!  Enthusiasts, MVPs, community leaders, and the PowerShell product team came to discuss the latest and greatest ongoings in the PowerShell world. -The festivities kicked off in downtown Charlotte at the Ri Ra Irish Pub this last Sunday.  New network connections were made and old friends reunited over fine brews in the Victorian-style public house before getting a good nights' rest before the three day summit. - -Monday started off with an exciting lineup of speakers to discuss some of the hottest community topics including Desired State Configuration, automated code testing with Pester, and working with Azure.  Some great announcements were made by the product team as well, including: - - * The release of Windows Management Framework 5.0 on April 30th.  This release will be available downlevel for Windows 7 and Server 2008. - * PowerShell Package Manager announced as the official name of OneGet. - * The release of [PowerShell Tools for Visual Studio](https://visualstudiogallery.msdn.microsoft.com/c9eb3ba8-0c59-4944-9a62-6eee37294597), available now for download. - - -A big congratulations to PowerShell MVP and PowerShell.org board member Dave Wyatt, who's works on Pester will be making it's way into the next build of Windows Server! -Take a look at our latest videos from the summit on [YouTube](https://www.youtube.com/user/powershellorg/videos), and follow the excitement at [#PowerShell on Twitter](https://twitter.com/search?q=%23powershell&src=typd)! diff --git a/content/articles/2015-04-21-painlessly-get-data-from-powershell-to-excel.md b/content/articles/2015-04-21-painlessly-get-data-from-powershell-to-excel.md deleted file mode 100644 index 7de5e6172..000000000 --- a/content/articles/2015-04-21-painlessly-get-data-from-powershell-to-excel.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Painlessly Get Data from PowerShell to Excel -authors: - - Don Jones -date: "2015-04-21T12:08:54+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/04/painlessly-get-data-from-powershell-to-excel/ ---- - -Doug Finke has [written an awesome article][1] - complete with a module! - to help get data into Excel spreadsheets. - - [1]: http://www.dougfinke.com/blog/index.php/2015/04/20/painlessly-get-data-from-powershell-to-excel/ diff --git a/content/articles/2015-04-23-observations-from-our-powershell-summit-verified-effective-exam.md b/content/articles/2015-04-23-observations-from-our-powershell-summit-verified-effective-exam.md deleted file mode 100644 index b98bdd262..000000000 --- a/content/articles/2015-04-23-observations-from-our-powershell-summit-verified-effective-exam.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Observations from our PowerShell Summit VERIFIED EFFECTIVE Exam -authors: - - Don Jones -date: "2015-04-23T14:24:29+00:00" -categories: - - PowerShell Summit -aliases: - - /2015/04/observations-from-our-powershell-summit-verified-effective-exam/ ---- - -We offered our first in-person, proctored VERIFIED EFFECTIVE exam at PowerShell Summit in April 2015, located in Charlotte, NC. While the exam is not intended as a diagnostic or learning tool, there are definitely some observations I can share from glancing through some of the submissions so far. -First, the exam isn't easy. 31 people signed up to take it (our room capacity; more would have if we'd had space), and only 12 turned in submissions. Of those, fewer than 5 are probably going to pass by the end of the grading process. - - * If you don't know what **[CmdletBinding(SupportsShouldProcess=$True)]** does, then you shouldn't be using it. It should never be used in a cmdlet that merely queries information and doesn't make changes to the system. It isn't boilerplate that should be included in every function, and it has nothing to do with the PROCESS script block. - * If you don't understand **ValueFromPipeline** and **ValueFromPipelineByPropertyName, **then you need to learn. - * If you're using aliases like **%** in a function, you're not creating a readable, maintainable script. Avoid aliases, especially ones that don't immediately communicate the task being completed. **Dir** might be acceptable; **?** not so much. - * If you're not neatly indenting your constructs, your script is not going to be readable. - * Creating a parameter that accepts a limited set of values (say, "foo" and "bar") doesn't create internal variables with those names (e.g., $foo and $bar). Don't confuse parameter names with their values. - -In the end analysis, there's a difference between being able to hack out a working script, and being able to create a professional, maintainable tool that complies with PowerShell's native practices and patterns. If you're to the point where you're able to hack out a working script, take a next step by reading something like _The Community Book of PowerShell Practices_ (available for free), or solidify your skills and understanding through a book like (gratuitous plug) _Learn PowerShell Toolmaking in a Month of Lunches. _ -Most of the non-passing submissions we're seeing have simple mistakes - for example, including a static computer name in a verbose message, rather than inserting the name of the currently-processing computer. Or creating a CIMSession, but then not using it (forcing a later command to spin up a second session). In other instances, we saw poor practices (like globally and unnecessarily setting $ErrorActionPreference, suggesting a lack of understanding about the more specific -ErrorAction). There was also a few instances where a lack of attention to details - or perhaps simply running out of time - was a problem, such as failing to define a needed parameter, or defining a ValidateSet() with incorrect values. -We're going to be removing one of our VERIFIED EFFECTIVE exam scenarios from production use, and turning that into an "example scenario" that you can use to self-assess your toolmaking skills. Look for that in the next few weeks. We'll continue offering in-person proctored exams at PowerShell Summit, with Europe 2015 in Stockholm being our next go. In 2016, look for us to expand the program with more capacity (so more people can sit the exam), and for us to eventually offer a DSC-related exam. -In the meantime, anyone with a VERIFIED EFFECTIVE certificate has indeed completed a challenging, practical exam that shows they are definitely _effective_ toolmakers, capable of building professional-grade tools that are consistent with PowerShell's native use patterns. Thus far, fewer than 20 certificates have been earned. diff --git a/content/articles/2015-04-24-charlotte-powershell-user-group-meeting-for-may.md b/content/articles/2015-04-24-charlotte-powershell-user-group-meeting-for-may.md deleted file mode 100644 index 9d52e873a..000000000 --- a/content/articles/2015-04-24-charlotte-powershell-user-group-meeting-for-may.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Charlotte PowerShell User Group meeting for May -authors: - - Terri Donahue -date: "2015-04-24T14:01:21+00:00" -aliases: - - /2015/04/charlotte-powershell-user-group-meeting-for-may/ ---- - -The Charlotte PowerShell User Group had a great meeting in late April with a special guest presenter, Lee Holmes. Due to this occurrence and scheduling conflicts for the month of May, our regularly scheduled meeting will not occur. Stay tuned for information about our next meeting which will occur on our normal day (1st Thursday of every month), June 4th. diff --git a/content/articles/2015-04-24-management-information-the-omicimwmimidmtf-dictionary.md b/content/articles/2015-04-24-management-information-the-omicimwmimidmtf-dictionary.md deleted file mode 100644 index 5bc733966..000000000 --- a/content/articles/2015-04-24-management-information-the-omicimwmimidmtf-dictionary.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: "Management Information: The OMI/CIM/WMI/MI/DMTF Dictionary" -authors: - - Don Jones -date: "2015-04-24T22:57:48+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/04/management-information-the-omicimwmimidmtf-dictionary/ ---- - -Not too long ago, over on DonJones.com, I [wrote an article][1] that tried to explain some of the confusion between Microsoft's World of Management Instrumentation - e.g., WMI, OMI, CIM, and a bunch of other acronyms. I glossed over some of the finer details, and this article is intended to provide more specificity and accuracy - thanks to Microsoft's Keith Bankston for helping me sort things out. - -## CIM and the DMTF - -Let us begin with CIM. CIM stands for Common Information Model, and it is not a tangible thing. It isn't even software. It's a set of standards that describe how management information can be represented in software, and it was created by the Distributed Management Task Force (DMTF), an industry working group that Microsoft is a member of. - -## Old WMI, DCOM, and RPC - -Back in the day - we're talking Windows NT 4.0 timeframe - Microsoft created Windows Management Instrumentation, or WMI. This was a server component (technically, a background service, and it ran on Workstation as well as Server) that delivered up management information in the CIM format. Now, at the time, the CIM standards were pretty early in their life, and WMI complied with what existed at the time. But the standards themselves were silent on quite a few things, like what network communications protocol you'd use to actually talk to a server. Microsoft opted for Distributed Component Object Model, or DCOM, which was a very mainstream thing for them at the time. DCOM talks by using Remote Procedure Calls, or RPCs, also a very standard thing for Windows in those days. - -## New WMI, WS-MAN, and WINRM - -Fast forward a bit to 2012. With Windows Management Framework 3, Microsoft releases a new version of WMI. They fail to give it a unique name, which causes a lot of confusion, but it complies with all the latest CIM specifications. There's still a server-side component, but this "new WMI" talks over WS-Management (Web Services for Management, often written as WS-MAN) instead of DCOM/RPC. Microsoft's implementation of WS-MAN lives in the Windows Remote Management (WinRM) service. The PowerShell cmdlets that talk this new kind of WMI all use CIM as part of the noun, giving us Get-CimInstance, Get-CimClass, Invoke-CimMethod, and so on. But make no mistake - these things aren't "talking CIM," because CIM isn't a protocol. They're talking WS-MAN, which is what the new CIM standard specifies. -Sidebar: From a naming perspective, Microsoft was pretty much screwed with the new cmdlets' names, no matter what they called them. "Cim" is a terrible part of the noun. After all, the "old WMI" was compliant with the CIM of its day, but it didn't get to be called CIM. The new cmdlets don't use any technology called "Cim," they're merely compliant with the newest CIM standards. Maybe they should have been called something like Get-Wmi2Instance, or Invoke-NewWmiMethod, but that wasn't going to make anyone happy, either. So, Cim it is. - -## OMI - -Now, at some point, folks noticed that implementing a full WMI/DCOM/RPC stack wasn't ever going to happen on anything but Windows. It was too big, too "heavy," and frankly too outdated by the time anyone noticed. But there was a big desire to have all this CIM-flavored stuff running elsewhere, like on routers, switches, Linux boxes, you name it. So Microsoft wrote Open Management Instrumentation, or OMI. This is basically a CIM-compliant server that speaks WS-MAN, just like the "new WMI." But it's really teeny-tiny, taking up just a few megabytes of storage and a wee amount of RAM. That makes it suitable for running on devices with constrained compute capacity, like routers and switches and whatnot. Microsoft open-sourced their OMI server code, making it a good reference item that other people could adopt, build on, and implement. - -## Under the Hood: Provider APIs - -Time to dig under the hood a bit. "Old WMI" got its information from something called the WMI Repository. The Repository, in turn, was populated by many different WMI Providers. These Providers are written in native code (e.g., C++) and only run on Windows. They're what create the classes - Win32_OperatingSystem, Win32_BIOS, and so on - that we IT ops people are used to querying. -As Microsoft started looking at OMI, and at updated WMI to the newer CIM standards, they realized these old-school Providers weren't hot stuff. First, they were kinda hard to write, which didn't encourage developers to jump on board. They were also kinda huge, relatively speaking, making them less suitable for constrained environments like routers and switches. -So Microsoft came up with a new Application Programming Interface (API) for writing providers, calling it simply Management Instrumentation, or MI. MI providers are easier to write, and a lot smaller. MI providers, at an API level, work under the "new WMI" as well as under OMI. So if you're getting a router hooked up to all this CIM stuff, you're going to implement the teeny OMI server, and underneath it you're going to write one or more MI providers to provide information to the OMI server. MI providers don't necessarily need a repository, meaning they provide information "live" to the server component. That helps save storage space. -MI providers are also written in native code, which is nice because lots of developers who work with low-level system stuff greatly prefer native code. The client and server APIs are (on Windows, at least) available in native or managed (.NET) versions, so both kinds of developers get access. Providers, though, are always native code. -As an IT ops person, you'll probably never care what kind of provider you're using. The "new WMI" on Windows supports both old-style WMI Providers and new-style MI Providers, so developers can pick and choose. Also, Microsoft doesn't need to go re-do all the work they already did writing providers for "old WMI," because "new WMI" can continue to use it. - -## PowerShell Cmdlets - -When you're using Get-CimInstance in PowerShell, by default you're using "new WMI," meaning you're talking WS-MAN to the remote machine. Those commands also have the ability to talk DCOM/RPC, mainly for backward compatibility with machines that either aren't running WMF3 or later, or that haven't enabled WinRM (remember, WinRM is what "listens" for the incoming WS-MAN traffic). - -## Client API Differences: This Matters - -It's massively important that you understand the inherent differences between DCOM/RPC and WS-MAN. Under DCOM, you were basically connected to a "live" object on the remote machine. That meant you could get a WMI instance, execute methods, change properties in some cases, and generally treat it as functioning code. The RPC protocol was designed for that kind of continuous back-and-forth, although it wasn't terribly network- or memory-efficient, because of the "live connection" concept. WS-MAN, on the other hand, is basically like talking to a web server. Heck, it uses HTTP, even. So when you run Get-CimInstance, your data is generated on the remote machine, serialized into XML, transmitted back in an HTTP stream, and then deserialized into objects on your computer. Those aren't "live" objects; they're not "connected" to anything. That's why they don't have methods. To execute a method, you have to send another WS-MAN request to the machine, which will execute the method and send you any results - which is what Invoke-CimMethod does. The entire relationship between you and the remote machine is essentially stateless, just like the relationship between a web browser and a web server. So your coding technique has to change a bit as you move from "old WMI" to "new WMI." The good news is that the new, web-style approach is a lot lighter-touch on the server, requiring less network and memory, so it becomes a lot more scalable. - -## Versions - -Anything running WMF3 or later (Win2008R2 and later, Win7 and later) has "new WMI." Microsoft continues to include "old WMI" for backward compatibility, although on newer versions of Windows (I'm playing with Win2012R2), the ports for DCOM/RPC may not be open, while the ports for WS-MAN are, by default. So we're clearly moving forward. - -## Enabling WinRM CIM Remoting New WMI - -Oh, and as a complete side note, a LOT of us in the industry will say stuff like "enable PowerShell Remoting" when we refer to enabling WS-MAN. Technically, that's not accurate. Enabling Remoting, if you do it right, enables WinRM, and enables WinRM to pass traffic to PowerShell. It'll also enable most of the other cool stuff we use WS-MAN for, including PowerShell Workflow, the "new WMI" communications for CIM cmdlets, and so on. But you could also enable the "new WMI" stuff without also turning on PowerShell Remoting. At the end of the day, though, turning on Remoting is just the Right Thing To Do, so why not make life easy and turn it all on at once? - -## Summary - -OLD WMI: Uses DCOM/RPC. Uses old-style native code providers and a repository. Available only on Windows. More or less deprecated, meaning it's not a focus area for further improvement or development. You're connected to "live" objects and can play with them. -NEW WMI: Uses WS-MAN (via WinRM service). Supports old-style native code providers and a repository, as well as new-style MI providers. Available only on Windows. The way forward. If something can talk to "NEW WMI" it should be able to talk to OMI, also. You're not connected to "live" objects, and have an essentially stateless relationship with the remote machine. -OMI: Uses WS-MAN (OMI code includes the protocol stack). Supports only new-style MI providers. Available on any implementing platform. Also the way forward. If something can talk to OMI, it should be able to talk to "NEW WMI" also. -CIM: Defines the standard. Created by DMTF. Early versions were implemented as "OLD WMI" by Microsoft, newest version implemented both in "NEW WMI" and OMI by Microsoft and others. -And if you prefer summaries by layer: -SERVER (or, the bit that serves up the info, which could technically be a client device like a laptop) uses PROVIDERS (either old-style WMI, new-style MI, or both) to generate management information. If the SERVER is a non-Windows device, it would run OMI and only support new-style MI providers. -CLIENT (the machine doing the querying) uses either old-style WMI (DCOM/RPC) or new-style (WS-MAN) to send requests to SERVER and to receive the results. CLIENT doesn't care what API was used to write the providers running on the server, because the server makes the information all look the same. If CLIENT queries a SERVER that only supports WS-MAN, then CLIENT must obviously use WS-MAN. -Hope that helps. - - [1]: http://donjones.com/2015/04/14/omi-cim-wmi/ diff --git a/content/articles/2015-04-27-powershelltos-next-meeting-may-6th-2015.md b/content/articles/2015-04-27-powershelltos-next-meeting-may-6th-2015.md deleted file mode 100644 index 13e34cfe0..000000000 --- a/content/articles/2015-04-27-powershelltos-next-meeting-may-6th-2015.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "PowerShellTO's Next Meeting – May 6th, 2015" -authors: - - Will Anderson -date: "2015-04-27T23:00:51+00:00" -aliases: - - /2015/04/powershelltos-next-meeting-may-6th-2015/ ---- - -Join us on Wednesday, May 6th for our second Toronto PowerShell User’s Group meeting.  This time you get to take the wheel!  Send us some of your PowerShell related challenges and we’ll pick the top ones to work out in a group together!  We’ll also be talking about some of the things learned at PowerShell Summit – North America, and more! - - - -[Hit us up and let us know ](http://powershellto.ca/contact/)what PowerShell challenges you’d like to table at the next PowerShellTO meeting! -For this meeting, we'll be located at the Microsoft Technology Center in Mississauga at 1950 Meadowvale Blvd - Mississauga, Ontario, L5N8L9.  Space is limited, so be sure to claim your EventBrite ticket below! -A note on parking: When you arrive at the MTC, go around to the side facing Meadowvale Blvd.  There is a visitor entrance and parking there.  See you soon! - - - - - - - - [Online Ticketing](http://www.eventbrite.ca/r/etckt) - for -[PowerShellTO - May 2015 Meeting](https://www.eventbrite.ca/e/powershellto-may-2015-meeting-tickets-16415587464?ref=etckt) -powered by - [Eventbrite](http://www.eventbrite.ca?ref=etckt) diff --git a/content/articles/2015-04-28-why-is-remoting-enabled-by-default-on-windows-server.md b/content/articles/2015-04-28-why-is-remoting-enabled-by-default-on-windows-server.md deleted file mode 100644 index fe5ae449a..000000000 --- a/content/articles/2015-04-28-why-is-remoting-enabled-by-default-on-windows-server.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Why is Remoting Enabled by Default on Windows Server? -authors: - - Don Jones -date: "2015-04-28T23:16:44+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/04/why-is-remoting-enabled-by-default-on-windows-server/ ---- - -There was a brief and lively discussion on Twitter recently stemming from someone asking for advice on how to convince management to turn on Remoting. -"Fire Management, if they have to ask" was apparently not an option, although it should have been. I mean, at this stage, you either know the value of PowerShell and its Remoting technology, or you're being willfully ignorant. -But that wasn't where the discussion got lively. - - - -The real discussion was about why Remoting was turned on by default in the first place, on newer versions of Windows Server (since Win2012). After all, Remote Desktop Protocol (RDP) is turned off by default. Most Linux distributions, it was pointed out, turn off sshd by default. So why is Remoting turned on? Isn't the safest bet to just disable everything, and let people turn on what they need? -I think Remoting (and by Remoting, I mean the Windows Remote Management, or WinRM service) being turned on by default gives us a valuable look at Microsoft's psyche these days. -First, keep in mind that _you can turn it off. _You can even do that via a Group Policy for domain computers, and you could certainly do so in a server master image if you wanted to. So it's pretty easy to have an "off by default" setup in your environment if you want. But wouldn't it therefore be just as easy for Microsoft to leave it off, and let you "default it to on" by whatever means you prefer, if that's what you want? Sure. But again, I think this is about Microsoft's psyche, these days. -Understand that what follows is conjecture, but it's conjecture based on more than 20 years of watching this company, and on a pretty good working relationship with many of the company's technology leaders. This also isn't intended to make you feel that "on by default" is the right answer for you, nor is it intended to convince you that "on by default" is the right answer for _anyone. _This is an attempt to speculate about the _reasons_ behind "on by default," whether the decision itself was correct or not. -The short reason is, "Nano Server." -If you just nodded and went, "yeah, that would explain their thinking," then you can skip the rest of this. Keep in mind that Remoting isn't turned on for _client_ computers by default, and that just pretty much reinforces the Nano Server reason. -The very long answer is that Microsoft, these days, is building _first for themselves. _Specifically, for Azure. They believe - and again, you're free to disagree and I'm not pitching their belief as gospel - that enterprises should manage their datacenter in much the same way Microsoft manages Azure. Microsoft's argument for this revolves around efficiency, primarily, and specifically efficiency at scale. Reliability factors into the argument, too. So Microsoft's decisions have to be examined in light of what works in "the cloud," because that's how they expect you're going to be managing your own servers in the future. -Microsoft has been on a long path, since 2008, of breaking down the monolithic Windows Server product into a discrete set of chunks that can be turned on or off at will. We say that first with the big refactoring of the product into Roles & Features, which could be installed or uninstalled pretty easily. We also saw them ripping out the GUI bits to create the first Server Core. Over the next 5 years, the company refactored Server more and more, through a series of three releases culminating in Windows Server 2012 R2. In that time, Server Core became more and more functional, as more and more of Windows Server was refactored into standalone little bits, and separated from the "GUI stuff." -Microsoft's direction here has never been a big secret: they want to ship a fully-functioning version of Windows Server that doesn't have any... er... windows. They want it, in other words, to be a _server, _not a client that just happens to have a lot of RAM installed. -Once you kind of buy into the "no GUI on the server" idea, even if just for the sake of discussion, it's not a far step to "no logging into the server at all, in any way." Headless servers, in other words, where the host hardware might not even contain video output hardware. After all, if there's no GUI, then you can be definition do everything via text, which is very easy to transmit over a network. Ask Unix, which has been doing it for decades over Telnet and SSH. If you can do everything remotely, why even support a local login? -Well, that's Nano Server, an installation option in the version of Windows Server that is expected to ship in 2016. -_And if you can't log on locally at all, then you need some way of connecting to the server to initially configure it. _Which is why Remoting is enabled by default, even though little else is. You use your existing OSD infrastructure to deploy new Nano servers, and then you Remote into them to set them up as needed. Unlike most Linux distributions, which _allow_ local login, Nano isn't even going to provide a means to log into "the console." At least, as far as we currently know, it won't; Microsoft's only made a few statements about it so far. -Windows Server's architect, Jeffrey Snover, put it fairly concisely in the Twitter discussion: "We believe in a world of headless remote mgmt as the norm." _Headless_ meaning _no way to log in locally, no such thing. _Ergo, you need some way to log in remotely, and Remoting is it, and it therefore is enabled by default. -Now, in defense of this "on by default" approach, I'll point out that unlike nearly every preceding remote management protocol introduced by Microsoft, Remoting is incredibly controllable. It uses WS-Management (WS-MAN), which is HTTP-based. It runs on just one incoming port, which is easy to lock down through physical, soft, and virtual firewalls. You can certainly have an environment that's pre-engineered to protect that port. But if you buy into Microsoft's "headless" approach - and whether you do or not, Microsoft certainly buys in - then they had to enable _something _so you could configure the server, at least initially. -So whether you agree with this direction or not is entirely up to you - and you're welcome to add your polite, professional comments to this post. I wanted to write this in an attempt to _explain, _just justify, _why_ I think Microsoft took this approach, and what I think it means for the long term of Windows Server itself. I think simply knowing that direction can inform a lot of your base infrastructure decisions and planning going forward, whether you buy into the approach or not. diff --git a/content/articles/2015-04-30-powershell-org-is-now-on-imgur.md b/content/articles/2015-04-30-powershell-org-is-now-on-imgur.md deleted file mode 100644 index 90e86777c..000000000 --- a/content/articles/2015-04-30-powershell-org-is-now-on-imgur.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: PowerShell.org Is Now On Imgur! -authors: - - Will Anderson -date: "2015-04-30T17:00:11+00:00" -aliases: - - /2015/04/powershell-org-is-now-on-imgur/ ---- - -Hey there everyone!  I'm pleased to announce that PowerShell.org has a new feed on Imgur! - - -During the PowerShell Summit, I began the hunt for a social photo sharing site that had a set of features that would meet the needs of PowerShell.org.  Our list of criteria was rigorous.  We required a site that was capable of providing embed code for posts.  We needed a site that would be easy to upload images and add them to albums for publishing.  It needed to be social media friendly.  And it needed to be free. -Mainly it needed to be free. -So I present to you, our new [PowerShell.org Imgur feed](http://powershellorg.imgur.com/)!  If you want quick access to it and don't feel like adding it to your favorites, you can just hit the Imgur icon on our nifty new social media bar on the right! -We shall be endeavouring to cover more PowerShell related events in our feeds and posts in the future.  I'm still working on a list of standards for photo submissions, but in the meantime, if you happen to be at a PowerShell event and have some photos that you'd like us to share on the Imgur feed, please feel free to contact me at _**webmaster at powershell dot org**_ and we'll take a look at them! - - -> - -> [PowerShell Summit NA 2015](//imgur.com/a/UxUNW) -> diff --git a/content/articles/2015-05-04-dealing-with-the-click-next-admin.md b/content/articles/2015-05-04-dealing-with-the-click-next-admin.md deleted file mode 100644 index 40c4c27f6..000000000 --- a/content/articles/2015-05-04-dealing-with-the-click-next-admin.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Dealing with the Click-Next-Admin -authors: - - pscookiemonster -date: "2015-05-04T17:24:17+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/05/dealing-with-the-click-next-admin/ ---- - -I had a good deal of yard work to do this weekend; I see yard work in a similar way that a click-next-admin sees Windows PowerShell. I want no part in it. So I wrote a quick bit on [how we can deal with the click-next-admin][1]. -Jeffrey Snover recently gave a TechDays Online session where he candidly asked us to "make today the last day you hire a click next admin." -![Reward the right people](http://ramblingcookiemonster.github.io/images/click-next/lastday.png) -This is a fantastic goal, but how do we get there? There's no set answer, but I listed out some of the major challenges I see. -Would love to hear your feedback and ideas - [flip through the post][1] and stop back here to discuss! -If you'd like to have some fun, share your click-next-admin stories on twitter with the [#ClickNextAdmin][2] tag. -![Too Busy](http://ramblingcookiemonster.github.io/images/click-next/toobusy.png) -Aside: Thank you for the invite to contribute here, it's an honor. -Cheers! - - [1]: http://ramblingcookiemonster.github.io/Dealing-With-The-Click-Next-Admin/ - [2]: https://twitter.com/search?q=%23clicknextadmin&src=typd diff --git a/content/articles/2015-05-05-setting-up-the-powershell-org-dsc-tools-from-github.md b/content/articles/2015-05-05-setting-up-the-powershell-org-dsc-tools-from-github.md deleted file mode 100644 index c72d8aaa7..000000000 --- a/content/articles/2015-05-05-setting-up-the-powershell-org-dsc-tools-from-github.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Setting up the PowerShell.org DSC tools from Github -authors: - - David Jones -date: "2015-05-06T04:27:34+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/05/setting-up-the-powershell-org-dsc-tools-from-github/ ---- - -I have created a [short blog series][1] about how to setup the DSC tooling from the [PowerShell.org DSC repository][2]. With the mindset of contributing changes. - - - 1. [Test-HomeLab -InputObject ‘The Plan’][1] - 2. [Get-Posh-Git | Test-Lab][3] - 3. [Get-DSCFramework | Test-Lab][4] - 4. [Invoke-DscBuild | Test-Lab][5] - 5. [Test-Lab | Update-GitHub][6] - --David Jones - - - [1]: https://bladefirelight.wordpress.com/2015/04/27/test-homelab-inputobject-the-plan/ - [2]: https://github.com/PowerShellOrg/DSC - [3]: https://bladefirelight.wordpress.com/2015/04/30/get-posh-git-test-lab/ - [4]: https://bladefirelight.wordpress.com/2015/05/02/get-dscframework-test-lab/ - [5]: https://bladefirelight.wordpress.com/2015/05/03/invoke-dscbuild-test-lab-2/ - [6]: https://bladefirelight.wordpress.com/2015/05/06/test-lab-update-github/ diff --git a/content/articles/2015-05-07-nyc-user-group-restart.md b/content/articles/2015-05-07-nyc-user-group-restart.md deleted file mode 100644 index b22e035ea..000000000 --- a/content/articles/2015-05-07-nyc-user-group-restart.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: NYC User Group Restart! -authors: - - Sunny Chakraborty -date: "2015-05-07T18:52:22+00:00" -aliases: - - /2015/05/nyc-user-group-restart/ ---- - -After a long hiatus, NYC Powershell User-group is back. -Tome and Sunny will be presenting 2 sessions -This is the inaugural series of Tome's 1-year residency on Powershell Concepts (Beginner to Advanced) -**Tome Tanasovski:** -Concept of Objects -- Object Characterization -- Everything is an object -- Sorting, Grouping, Counting -- Where-Object and ForEach -Language Fundamentals -- Operators, Variables. -- Arrays and Hashtables -- Loop structures -- Conditional Structures -- Useful rules to know. -Tome is an executive for a market-leading global financial services firm in New York City where he focuses on automation, private cloud, and distributed computing. He is the founder and leader of the New York City PowerShell User group, a blogger, and speaks regularly at conferences and user groups. In 2011 he became a cofounder of the NYC Techstravaganza, coauthored the Windows PowerShell Bible, and received the title of Honorary Scripting Guy from the Hey Scripting Guy! blog. Tome has also received the MVP award from Microsoft for the last five years in Windows PowerShell. -**Blog**: -**Twitter**: -**Sunny Chakraborty:** -- Large scale Application inventory using Custom MOF Files. -- Remote MSI Execution Tricks -- Invoke-Command AST -- Powershell Anonymous Functions. -Sunny is a Sr. Engineer with a global financial services firm in Philadelphia, where he focusses on Messaging, Microsoft Applications and Automation using Powershell. -**GitHub**: -**Twitter**: -Pizza is being sponsored by SAPIEN, Makers of PowerShell Studio and Primal Script -6pm - 6:30 - Pizza and catching up -6:30 - 7:15 - Tome. -7:15 - 7:45 - Sunny. -8ish - ?? - Drinks at Beer Authority (next to Port Authority) -You must RSVP via Event Brite in order to attend: -[![EventBriteLogo](https://powershell.org/wp-content/uploads/2015/05/EventBriteLogo.bmp)][1] -**Meeting Date:** -Monday, May 11, 2015 - 18:00 - 20:00 -**Location** -Microsoft - Times Square - 6th Floor -11 Times Square -New York, NY 10018 -United States -See map: [Google Maps][2] - - [1]: https://www.eventbrite.com/e/nyc-powershell-ug-tome-tanasovski-and-sunny-chakraborty-powershell-language-fundamentals-powershell-tickets-4054585374 - [2]: http://maps.google.com/?q=40.750879+-73.985792+%2811+Times+Square%2C+New+York%2C+NY%2C+10018%2C+us%29 diff --git a/content/articles/2015-05-10-survey-source-control-for-the-it-professional.md b/content/articles/2015-05-10-survey-source-control-for-the-it-professional.md deleted file mode 100644 index 599d43e2a..000000000 --- a/content/articles/2015-05-10-survey-source-control-for-the-it-professional.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Survey: Source Control for the IT Professional [Results in]" -authors: - - pscookiemonster -date: "2015-05-10T18:22:05+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -aliases: - - /2015/05/survey-source-control-for-the-it-professional/ ---- - -**Edit:** **[The results are in.][1]** -I was watching Don and Jeffrey's [PowerShell Unplugged session][2] from Ignite the other day, and something stood out. -At 30 minutes in, Don asked the crowd whether they were using source control. Based on the video, the crowd wasn't big on source control. -I work in IT. If I asked that same question at work, I would likely get a similar response. Why is that? Source control is incredibly important and can drive a number of other processes, yet it seems to be an afterthought for many IT professionals. -I drafted up a quick, informal [survey on source control for IT professionals][3]. If you have a moment, would love to see your responses. Stay tuned for a rough analysis and write-up on the results [Edit: [Results are in][1]]. -Cheers! - - [1]: https://powershell.org/2015/05/18/source-control-survey-results/ - [2]: http://channel9.msdn.com/Events/Ignite/2015/BRK4451 - [3]: http://bit.ly/VCSForIT diff --git a/content/articles/2015-05-11-mississippi-powershell-user-group-virtual-meeting-may-12th-2015.md b/content/articles/2015-05-11-mississippi-powershell-user-group-virtual-meeting-may-12th-2015.md deleted file mode 100644 index 1a1cd87df..000000000 --- a/content/articles/2015-05-11-mississippi-powershell-user-group-virtual-meeting-may-12th-2015.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Mississippi PowerShell User Group Virtual Meeting – May 12th 2015 -authors: - - Mike F Robbins -date: "2015-05-11T14:30:40+00:00" -aliases: - - /2015/05/mississippi-powershell-user-group-virtual-meeting-may-12th-2015/ ---- - -Join us virtually on Tuesday, May 12th at 8:30pm Central Time when PowerShell MVP Kirk Munro will present _**"A peek inside the Poshoholic’s toolbelt"**_. -It’s easy to get excited about all of the new technologies that are being talked about these days.  PowerShell 5.  Windows 10.  Nano server.  .NET Core.  But none of these technologies have been released yet, and even when they are released, it will be some time before we can fully adopt them in our organizations.  That’s why I like to arm my PowerShell toolbelt with impactful modules that work with current releases, so that people like you and I can work with innovative solutions for today while we keep learning about what will be available tomorrow.  This session is about those modules that I use in my toolbelt every day.  HistoryPx, FormatPx, DebugPx, SnippetPx, TypePx, and others.  Highly impactful, innovative PowerShell solutions that you can use, right now. -**About Kirk -** Kirk Munro is a Technical Product Manager at Provance Technologies, where he is helping build the next generation of Provance’s flagship IT Asset Management product, along with several smaller products such as the ScsmPx PowerShell module and the Auto-Close Work Item MP.  He is also an 8-time recipient of the Microsoft Most Valued Professional (MVP) award for his involvement in the PowerShell community.  For the past 9 years, Kirk has focused almost all of his time on PowerShell and PowerShell solutions, including managing popular products such as PowerGUI, PowerWF and PowerSE.  It is through this work he became known as the world’s first self-proclaimed Poshoholic.  Outside of work these days Kirk is returning to his software developer roots, learning mobile technologies like Xamarin and Ruby on Rails, and taking courses on Coursera or edX whenever he can make the time to do so. -Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this virtual meeting. [Click here](http://mspsug.com/2015/05/05/mspsug-virtual-meeting-a-peek-inside-the-poshoholics-toolbelt-on-tuesday-may-12th-at-830pm-cst/) to be redirected to the original post of this article on the [Mississippi PowerShell User Group](http://mspsug.com/) website which contains additional information about the meeting including the system requirements to attend. -µ diff --git a/content/articles/2015-05-16-whats-it-like-at-powershell-summit.md b/content/articles/2015-05-16-whats-it-like-at-powershell-summit.md deleted file mode 100644 index c5f755f0c..000000000 --- a/content/articles/2015-05-16-whats-it-like-at-powershell-summit.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "What's it Like at PowerShell Summit?" -authors: - - Don Jones -date: "2015-05-16T13:15:03+00:00" -categories: - - PowerShell Summit -aliases: - - /2015/05/whats-it-like-at-powershell-summit/ ---- - -Ever wonder what it's like to attend PowerShell Summit? Attendee Tommy Maynard [blogged about his entire experience][1] - including the build-up anticipation prior to the event - and it's a great set of reads. Check it out. - - [1]: http://tommymaynard.com/extra-powershell-summit-north-america-2015-0-2015/ diff --git a/content/articles/2015-05-18-philadelphia-powershell-user-group-meeting-june-4th-2015.md b/content/articles/2015-05-18-philadelphia-powershell-user-group-meeting-june-4th-2015.md deleted file mode 100644 index c37d8a4ba..000000000 --- a/content/articles/2015-05-18-philadelphia-powershell-user-group-meeting-june-4th-2015.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Philadelphia PowerShell User Group Meeting – June 4th 2015 -authors: - - John Mello -date: "2015-05-19T01:14:53+00:00" -aliases: - - /2015/05/philadelphia-powershell-user-group-meeting-june-4th-2015/ ---- - -Join us on Thursday, June 4th when [Dave Wyatt][1], will present **The basics of encrypting and decrypting data, including symmetric and public key algorithms, key management / sharing, and digital certificates.** This talk will focus on doing so in the .NET Framework and PowerShell. - -#### About Dave - -[Dave Wyatt][1] has been in the IT business since 1999 and is currently an Application Operations Engineer at [DevOpsGuys.][2] In addition Dave is a Microsoft MVP (PowerShell) and a member of PowerShell.org's Board of Directors. -Please [ -register -][3] if you plan to attend in person or online. The meeting URL to join us remotely will be included in your Eventbrite registration confirmation. - - [1]: https://twitter.com/MSH_Dave - [2]: http://www.devopsguys.com/team/ - [3]: https://www.eventbrite.com/e/phillyposh-june-4th-2015-tickets-17038157588 diff --git a/content/articles/2015-05-18-source-control-survey-results.md b/content/articles/2015-05-18-source-control-survey-results.md deleted file mode 100644 index a9cdfe384..000000000 --- a/content/articles/2015-05-18-source-control-survey-results.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "Survey Results: Source Control for the IT Professional" -authors: - - pscookiemonster -date: "2015-05-18T13:42:42+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/05/source-control-survey-results/ ---- - -First off - thank you to everyone who participated in the version control survey! -We've had a fun few weeks - Somehow the [PowerShell Summit][1], Build, and Ignite were scheduled back-to-back-to-back. Among a host of other announcements and tidbits, we found that Microsoft has open sourced the DSC resources on GitHub, that Pester will be included in Windows, and saw a cool demonstration from Steven Murawski on [using Test Kitchen to test DSC resources][2]. -These and other solutions and technologies are starting to assume you know how to use source control, and many require having a source control solution in place - how do you automate testing and deployment on a commit, if you have nothing to commit to? -Source control has long been an important component of IT, but it seems IT professionals, particularly those in Microsoft environments, aren't consistently using it. -You might expect a gap between IT professionals and developers, but less than 50% of IT pro respondents used source control as a team. -![](http://ramblingcookiemonster.github.io/images/source-control/UseByDevVsITPro.png) -Breaking down the IT professional population by environment, we see that Microsoft environments are even further behind. Many PowerShell aficionados work on teams that aren't using version control. -![](http://ramblingcookiemonster.github.io/images/source-control/UseByEnvironment.png) -Long story short? IT professionals, management, and vendors have work to do; these new tools and ideas that rely on source control are great, but we need to work on finding a horse for the cart. The rest of [my rambling analysis can be found here][3]. -If you want to get up and running quickly, consider [using GitHub for your PowerShell projects][4]. You can start with the easy-to-use GUI client, and drop into the command line when you want to get your hands dirty. It's a great way to start learning about source control, and to get involved in the community. -Do you have any suggestions on how we can get to a place where using source control is common place for IT professionals? Is this a worthwhile goal? Sound off in the comments! - - [1]: http://ramblingcookiemonster.github.io/PowerShell-Summit-Wrap/ - [2]: https://www.youtube.com/watch?v=h2P5Az3vfxk - [3]: http://ramblingcookiemonster.github.io/Source-Control-Survey - [4]: http://ramblingcookiemonster.github.io/GitHub-For-PowerShell-Projects/ diff --git a/content/articles/2015-05-19-creating-a-small-footprint-base-image-part-1.md b/content/articles/2015-05-19-creating-a-small-footprint-base-image-part-1.md deleted file mode 100644 index bdb77eda7..000000000 --- a/content/articles/2015-05-19-creating-a-small-footprint-base-image-part-1.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Creating a small footprint, base image Part 1 -authors: - - David Jones -date: "2015-05-19T19:01:13+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/05/creating-a-small-footprint-base-image-part-1/ ---- - -I'm starting a new blog series on using [PowerShell to create small footprint VHDX][1] that are fully patched. - - [1]: https://bladefirelight.wordpress.com/2015/05/19/creating-a-small-footprint-base-image-part-1-vhdx-from-iso/ diff --git a/content/articles/2015-05-20-creating-a-small-footprint-base-image-part-2.md b/content/articles/2015-05-20-creating-a-small-footprint-base-image-part-2.md deleted file mode 100644 index 48b8d5ccc..000000000 --- a/content/articles/2015-05-20-creating-a-small-footprint-base-image-part-2.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Creating a small footprint, base image Part 2 -authors: - - David Jones -date: "2015-05-21T00:56:25+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/05/creating-a-small-footprint-base-image-part-2/ ---- - -I posted Part 2 of using PowerShell to create small footprint VHDX that are fully patched. -[Patching and Cleanup via PowerShell][1] - - [1]: https://bladefirelight.wordpress.com/2015/05/20/creating-a-small-footprint-base-image-part-2-patching-and-cleanup-via-powershell/ diff --git a/content/articles/2015-05-26-new-ps-module-for-working-with-f5s-ltm-rest-api.md b/content/articles/2015-05-26-new-ps-module-for-working-with-f5s-ltm-rest-api.md deleted file mode 100644 index 7b0dc00d6..000000000 --- a/content/articles/2015-05-26-new-ps-module-for-working-with-f5s-ltm-rest-api.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "New PS Module for working with F5's LTM REST API" -authors: - - Joel Newton -date: "2015-05-27T04:54:03+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -aliases: - - /2015/05/new-ps-module-for-working-with-f5s-ltm-rest-api/ ---- - -If you use F5's BIG‑IP Local Traffic Manager (LTM) for load-balancing, then you may find the new PS module I've written helpful. The module uses the REST API in ver. 11.6 of the LTM to query and manipulate an F5 LTM device. You can add and remove members from a pool, enable and disable them, and find out what pools a member is in, among other things. -I've made the module files available [here][1]. I welcome all comments. -A few notes: Since the module uses the Invoke-WebRequest cmdlet, PowerShell 3 or higher is required. Also, since some F5's utilize self-signed certificates, and Invoke-WebRequest is unhappy if part of the certificate chain isn't trusted, I've included a dependency on Jaykul's PS module [TunableSSLValidator](https://github.com/Jaykul/Tunable-SSL-Validator), which allows for temporarily ignoring certificate errors. If you're using a trusted certificate chain, then you don't need the TunableSSLValidator module and can remove the -insecure flags from the Invoke-WebRequest calls. -Cheers, -Joel - - [1]: https://github.com/joel74/POSH-LTM-Rest diff --git a/content/articles/2015-06-02-major-changes-to-dsc-pull-server-configuration-ids.md b/content/articles/2015-06-02-major-changes-to-dsc-pull-server-configuration-ids.md deleted file mode 100644 index 5d0319a50..000000000 --- a/content/articles/2015-06-02-major-changes-to-dsc-pull-server-configuration-ids.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Major Changes to DSC Pull Server Configuration IDs -authors: - - Don Jones -date: "2015-06-02T13:45:09+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/06/major-changes-to-dsc-pull-server-configuration-ids/ ---- - -Configuration IDs - Globally Unique Identifiers, or GUIDs, that DSC nodes use to identify themselves to a pull server - have always been a limiting factor in DSC design and architecture. In the April 2015 preview of WMF5, however, Microsoft has completely overhauled Configuration IDs. If you're working with DSC, this is must-have information. - - - -For the official write-up, see http://blogs.msdn.com/b/powershell/archive/2015/05/29/how-to-register-a-node-with-a-dsc-pull-server.aspx?utm_content=bufferd9bce&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer. -In a nutshell: - - * Nodes can now be assigned a human-meaningful AgentID. This is unique per node, and allows the node to uniquely identify itself to the pull server for reporting purposes, regardless of what configuration the node is pulling. - * Configuration IDs are no longer GUIDs, but are instead human-readable strings. This means your MOF filenames on the pull server can now be meaningful and easier to identify. It also means it's easier to track which configuration a node is pulling. - * A new RegistrationKey acts as a password between the node and the pull server, making it harder for a bad actor to pull configuration files. Now that configuration MOFs have more meaningful text names, and not hard-to-guess GUIDs, this provides an extra layer of protection. The registration key is set in the node's meta config, and in the web.config file of the pull server. - -These changes should make it MUCH easier for nodes to share configurations (especially partials), and help eliminate the hassle of tracking which node had which GUID. In fact, these changes can actually reduce the need for certain DSC tooling (that we've never gotten anyway) to track node-to-configuration mappings. diff --git a/content/articles/2015-06-02-verified-effective-self-assessment.md b/content/articles/2015-06-02-verified-effective-self-assessment.md deleted file mode 100644 index d7699f0ab..000000000 --- a/content/articles/2015-06-02-verified-effective-self-assessment.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: VERIFIED EFFECTIVE Self-Assessment -authors: - - Don Jones -date: "2015-06-02T23:36:16+00:00" -categories: - - Announcements -aliases: - - /2015/06/verified-effective-self-assessment/ ---- - -We've had a number of people ask about a self-assessment for their PowerShell Toolmaking skills. We've decided to publish one, just once, in July. Here's how to get it. - - - -The self-assessment will be published as a _very_ long article in our July 2015 TechLetter. That means, to get it, you'll need to [subscribe to the newsletter][1] prior to that date. Don't worry, we use that e-mail list _only_ for the newsletter, and you can always bail out and unsubscribe later, if you like. -So sign up prior to July 2015. This issue will be made available in our back-issue page by November 2015, in case you've run across this in what is currently the future. - - [1]: https://powershell.org/newsletter/ diff --git a/content/articles/2015-06-04-automating-with-jenkins-and-powershell-on-windows.md b/content/articles/2015-06-04-automating-with-jenkins-and-powershell-on-windows.md deleted file mode 100644 index 8572be076..000000000 --- a/content/articles/2015-06-04-automating-with-jenkins-and-powershell-on-windows.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Automating with Jenkins and PowerShell on Windows -authors: - - Matthew Hodgkins -date: "2015-06-05T01:31:32+00:00" -categories: - - Tips and Tricks - - Tools - - Tutorials -aliases: - - /2015/06/automating-with-jenkins-and-powershell-on-windows/ ---- - -Take a minute think about how many PowerShell scripts you have written for yourself or your team. Countless functions and modules, helping to automate this or fix that or make your teams lives easier. You spend hours coding, writing in-line help, testing, packaging your script, distributing it to your team. All that effort, and then a lot of the time the script is forgotten about! People just go back to doing things the manual way. -I put this down to being out of sight, out of mind. Users who do not use the command line regularly will quickly forget about the amazing PowerShell-ing that you did to try and make their lives easier. -Then there are are other problems, like working out the best way to give end users permissions to use your function when they aren’t administrators. Do you give them remote desktop access to a server and only provide a PowerShell session? Setup PowerShell Web Access? Configure a restricted endpoint? I thought the point of this module was to make your life easier, not make things harder! -These problems are what an open source tool called **Jenkins** can solve for you. Traditionally used by developers to automate their build process, it can be leveraged to wrap web interfaces, job tracking and scheduling around the PowerShell scripts you worked so hard on. -The below image shows what a Jenkins build looks like. In this basic example, the the build creates a text file on a remote machine by using PowerShell Remoting and the **Set-Content** CmdLet**. **The parameters for these commands can be entered into the form, and will be passed to your PowerShell script via variables. -![jenkins](https://powershell.org/wp-content/uploads/2015/06/jenkins.png) -To find out how to start leveraging Jenkins in your environment, take a look at the below blog posts: - - * [Part 1 - Installing Jenkins, Configuring Basic Security, The PowerShell Plugin, Creating Jobs](http://bit.ly/PSJenkins1) - * [Part 2 - Using SSL on the Web Interface, Configuring PowerShell Remoting, How to Pass Credentials to Jobs](http://bit.ly/PSJenkins2) diff --git a/content/articles/2015-06-04-creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation.md b/content/articles/2015-06-04-creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation.md deleted file mode 100644 index 75be86cca..000000000 --- a/content/articles/2015-06-04-creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Creating a small footprint, base image Part 4 | Bringing it all together with automation -authors: - - David Jones -date: "2015-06-05T04:07:16+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/06/creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation/ ---- - -In this entry I combing all I covered into a set of scripts to automate the process of creating a small footprint VHDX base image and a WIM to use a sorce that is fully patched. And I added a script to update the files on a regular basis. -Check it out and let me know what you think. -[Creating a small footprint, base image Part 4 | Bringing it all together with automation][1] - - [1]: https://bladefirelight.wordpress.com/2015/06/05/creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation/ diff --git a/content/articles/2015-06-04-nyc-powershell-usergroup-meets-on-june-8th.md b/content/articles/2015-06-04-nyc-powershell-usergroup-meets-on-june-8th.md deleted file mode 100644 index c0bbcb0d2..000000000 --- a/content/articles/2015-06-04-nyc-powershell-usergroup-meets-on-june-8th.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: NYC Powershell Usergroup meets on June 8th -authors: - - Sunny Chakraborty -date: "2015-06-04T18:47:58+00:00" -aliases: - - /2015/06/nyc-powershell-usergroup-meets-on-june-8th/ ---- - -Continuing from our May meeting, Tome will be presenting a beginner’s track on Powershell covering String manipulations, Functions and Powershell Scripts. -We also have Powershell MVP Doug Finke, who will be covering the new components as part of the Powershell V5.0 release, including PSPM, Classes and Convert-String. -**AGENDA:** -**Tome Tanasovski**: -String manipulation - - * Counting, splitting, uppercasing/lowercasing, etc. - * Format operator - * -split, -join - * -match, -replace - * Select-String - * Secure strings - -Scripts and functions - - * Principles - * Execution policies - * Passing arguments and parameters - * Scoping - -**Bio** -Tome is an executive for a market-leading global financial services firm in New York City where he focuses on automation, private cloud, and distributed computing. He is the founder and leader of the New York City PowerShell User group, a blogger, and speaks regularly at conferences and user groups. In 2011 he became a cofounder of the NYC Techstravaganza, coauthored the Windows PowerShell Bible, and received the title of Honorary Scripting Guy from the Hey Scripting Guy! blog. Tome has also received the MVP award from Microsoft for the last five years in Windows PowerShell. -**Blog**: -**Twitter**: -**Doug Finke:** - - * What’s new in Powershell V5 - * Covers Package Management, object oriented constructs with the new _Class_ keyword - * ConvertFrom-String, and Convert-String. - -**Bio** -Doug Finke, author of “PowerShell for Developers”, 7 time MVP recipient and an international professional speaker. Doug works at Start-Automating, a company that builds advanced PowerShell tools, provides PowerShell training and PowerShell consulting. You can catch up with Doug at his blog Development in a Blink at . -Pizza is being sponsored by SAPIEN, Makers of PowerShell Studio and Primal Script -[![SapienLogo3](https://powershell.org/wp-content/uploads/2015/06/SapienLogo3.png)](http://www.sapien.com) -6pm - 6:30 - Pizza and catching up -6:30 - 7:15 – Tome Tanasovski. -7:15 - 7:45 – Doug Finke. -8ish - ?? - Drinks at Beer Authority (next to Port Authority) -You must RSVP via Event Brite in order to attend: [Register Here](https://www.eventbrite.com/e/nyc-powershell-ug-tome-tanasovski-doug-finke-powershell-v5-pspm-classes-and-powershell-fundamentals-tickets-17221745705)! -[![EventBriteLogoEventBriteLogo](https://powershell.org/wp-content/uploads/2015/06/EventBriteLogo.png)](https://www.eventbrite.com/e/nyc-powershell-ug-tome-tanasovski-doug-finke-powershell-v5-pspm-classes-and-powershell-fundamentals-tickets-17221745705) -**Meeting Date:** -Monday, June 08, 2015 - 18:00 - 20:00 -**Location** -Microsoft - Times Square - 6th Floor -11 Times Square -New York, NY 10018 -United States -See map: [Google Maps][1] - - [1]: https://www.google.com/maps/place/11+Times+Square,+New+York,+NY+10036/@40.7567203,-73.9896494,17z/data=!3m1!4b1!4m2!3m1!1s0x89c258534f8455ad:0x55d4588f7b23a524 diff --git a/content/articles/2015-06-07-dont-start-learning-powershell.md b/content/articles/2015-06-07-dont-start-learning-powershell.md deleted file mode 100644 index 8f7552803..000000000 --- a/content/articles/2015-06-07-dont-start-learning-powershell.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: "DON'T Start Learning PowerShell?!?!?" -authors: - - Don Jones -date: "2015-06-07T16:13:59+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/06/dont-start-learning-powershell/ ---- - -Jason Helmick and I were recently up in Redmond recording a Microsoft Virtual Academy series entitled, "Building Your Datacenter One DSC Resource at a Time." While we were there, we decided to film a tongue-in-cheek promo for the series that started with the premise that, "if you haven't already learned PowerShell, you missed the bus." Obviously, there's a bit more to the story. - - - -First, watch the video at https://www.youtube.com/watch?v=kuzFUI5Id0g … - -Second, notice that _we specifically encourage people to learn DSC. _Hmm... are there any pre-requisite technologies for learning DSC? - -Maybe, learning PowerShell ? - -We were really speaking to the folks who've been procrastinating on PowerShell for the past half-decade or more, because we _really do believe_ that DSC is a great, and often easier, way to actually learn PowerShell. Sometimes, PowerShell is tough to get into simply because you don't have a task to tackle. DSC gives you one - a practical application of PowerShell that lets you dive in from a different angle. - -_Obviously, _we think learning PowerShell is important, _**or we wouldn't have built our careers around the technology**. _But we know it can be tough to get started in - and every year that passes makes it harder to get started, as new features are added. But DSC represents a bit of a fresh start, and an opportunity to get into PowerShell on the ground floor, from a somewhat different direction. - -Some folks got really ticked when we basically said, "if you haven't started learning PowerShell by now, then it's too late," but seemed to miss the massive encouragement we gave for learning DSC.  - -And no, we don't _really_ think that it's too late to start in PowerShell if you haven't, already. I'm forever reminding people that there's this thing called a "birth rate" in the world, which means there'll always be new people coming into the industry and starting from scratch. I've spent a massive amount of effort producing materials to help those newcomers, and I certainly don't think that "entry level" just stopped in 2015! - -But... if you've been putting it off, maybe take a new look at PowerShell from the DSC perspective. It's different, I promise - and it's not at all like programming as you get started. It's a neat way to leverage, and kind of abstract, the massive investment that's been made in PowerShell since 2006, and might be just the thing to win you over to the Shell Side. diff --git a/content/articles/2015-06-08-mississippi-powershell-user-group-virtual-meeting-june-9th-2015.md b/content/articles/2015-06-08-mississippi-powershell-user-group-virtual-meeting-june-9th-2015.md deleted file mode 100644 index 06273c484..000000000 --- a/content/articles/2015-06-08-mississippi-powershell-user-group-virtual-meeting-june-9th-2015.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Mississippi PowerShell User Group Virtual Meeting – June 9th 2015 -authors: - - Mike F Robbins -date: "2015-06-08T13:46:23+00:00" -aliases: - - /2015/06/mississippi-powershell-user-group-virtual-meeting-june-9th-2015/ ---- - -Join us virtually on Tuesday, June 9th at 8:30pm Central Time when PowerShell MVP Trevor Sullivan will present -_**“Creating Object-Oriented Scripts using PowerShell Classes”**_ -. - - -During this deep, technical discussion, we will take a look at PowerShell classes, and then authoring PowerShell Desired State Configuration (DSC) Resource using PowerShell v5 classes. We’ll also explore leveraging PowerShell DSC on Microsoft Azure infrastructure (IaaS) virtual machines using the Azure VM DSC Extension. This session assumes some previous knowledge of PowerShell & DSC, so make sure you’re familiar with the basics ahead of time! - - -**About Trevor - ** -Trevor Sullivan is an 11 year veteran in the IT industry, and a multi-year recipient of the Microsoft Most Valuable Professional (MVP) award for Windows PowerShell automation. With 8 years of automation experience with PowerShell, and 3 years of experience working with the Microsoft Azure public cloud, Trevor is uniquely equipped to offer cost and process efficiency enhancements to nearly any area of the business. Trevor is a passionate community member, and seeks to spread awareness and knowledge about various technical solutions to business problems through a variety of social media channels. You can find out more about Trevor at [http://trevorsullivan.net](http://trevorsullivan.net/) -and  -[http://twitter.com/pcgeek86](http://twitter.com/pcgeek86) -. - - -Register via -[EventBrite](http://mspsug.eventbrite.com/) -to receive the URL for this virtual meeting.  -[Click here](http://mspsug.com/2015/06/02/mspsug-virtual-meeting-creating-object-oriented-scripts-using-powershell-classes-on-tuesday-june-9th-at-830pm-cdt/) - to be redirected to the original post of this article on the -[Mississippi PowerShell User Group](http://mspsug.com/) -website which contains additional information about the meeting including the system requirements to attend. - - -µ diff --git a/content/articles/2015-06-08-powershell-org-where-weve-been-our-new-look-where-were-going.md b/content/articles/2015-06-08-powershell-org-where-weve-been-our-new-look-where-were-going.md deleted file mode 100644 index 02b931c72..000000000 --- a/content/articles/2015-06-08-powershell-org-where-weve-been-our-new-look-where-were-going.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: "PowerShell.org: Where We've Been, Our New Look, Where We're Going" -authors: - - Don Jones -date: "2015-06-08T18:29:11+00:00" -categories: - - Announcements -aliases: - - /2015/06/powershell-org-where-weve-been-our-new-look-where-were-going/ ---- - -PowerShell.org has come a long way, both spiritually and physically, since our inception in September of 2012. Let's look at some screen grabs from the [Internet Archive][1], and take a stroll through our history. - - - -## Before PowerShell.org - -Not long after PowerShell's product launching 2006, I convinced my employer at the time, SAPIEN Technologies, as well as Quest Software, Dell, and Microsoft to help fund the launch of a new PowerShell community. Creatively named PowerShellCommunity.org, it was a DotNetNuke site, launched around 2007. - - -The idea was to create something central that could serve as a jumping-off point to the rest of the PowerShell community. Criticized by some for the "toilet bowl water" color scheme (it was changed to a blue version in 2009), it saw moderate success. Unfortunately, for a variety of reasons, it never really caught on. - -Back in 2007, PowerShell.org didn't look even that nice. - - -That was before I acquired the PowerShell.org domain name, in fact. But after speaking with some of the PowerShell product team members, myself and the other PowerShell.org founders (including Kirk Munro, Richard Siddaway, and Jeff Hicks) knew we needed a standalone, independent entity in order to accomplish some of what we wanted. So I purchased the PowerShell.org name, and we started getting a new site ready. - -## An Org is Born: 2012 - - -And so in 2012, PowerShell.org was born. As of March 2013, it had a pretty basic look. At that time, our front page led to the different, distinct applications that made up the website - primarily the forums, along with pages for the Scripting Games and PowerShell Summit. We'd moved quickly, taking on the Games and starting the Summit at the behest of Microsoft. Our little community was starting to chug along, based largely on the selfless efforts of its early volunteers. We had strong support from some early, dedicated sponsors, and we started to make an impact right away. Although there are a number of incredible PowerShell resources online, they were a bit scattered. The friendliness of Q&A forums, in particular, was pretty variable. We wanted to offer a friendly starting point in the community, and then help guide people to the other offerings that were out there. - -## Settling In: 2014 - - -Yeah, we were a little rough-looking back then. But by a year later, we'd started to refine our look. Our new "metro" logo and a cleaner look went along with our integration into a single platform for everything. As you can see, we'd started to make big strides in supporting local user groups, and welcomed the PowerScripting Podcast (started in 2006) to our site. We'd finished our first PowerShell Summit, and in March 2014 were getting ready for our second one - and our first European Summit, later that year. Our dream of helping to foster community was coming true - we just had to keep plugging at it. - -## More Community: 2015 - - -Fast forward a year... Now, we've got more user groups featured! More volunteers authoring articles! And we've launched our DSC Hub, providing quick access to new ebooks, a GitHub repo, and learning resources. By March 2015, we've got three PowerShell Summit events under our belts, and three Scripting Games events. We've got our first North American Summit outside Washington coming up in Charlotte, and are looking ahead to our second European Summit in Stockholm. We're welcoming 150,000 visitors a month to the site, and we've launched a series of TechSession webinars. We've got a TechLetter newsletter with a dozen issues published, and almost a dozen free ebooks authored by members of the community. Our site look hasn't changed much, but we're doing a lot more with it. - -But there was still some valid criticism. The site wasn't very small-screen friendly. Posting code in the forums was a little touch-and-go. Major elements like the Summit, our free ebooks, and the incredible work done by our volunteer authors were still kind of buried. - -## A New Us: 2015 - - -One last leap forward in time - about a year and 3 months, to June 2015. In other words, we're in the present, and PowerShell.org is ready to continue moving forward. - -Our new look is fresher, cleaner, and more modern. We're doing more to highlight the great work being done by the community, with a formal Articles area for our volunteer writers, better exposure of the forums, and a fully-responsive theme that's small-screen friendly. Our forums have a great new code colorizer, and supports pasting of Gist snippets simply by adding the URL to the post. Forums posts can now even be marked as "resolved," to help future generations better identify answers when they come searching. - -But beyond our look, I feel that we've accomplished _so much_ in terms of fostering a true community. - - * Our volunteers take on everything from writing articles, editing the newsletter, producing ebooks, running the website, and organizing webinars. And we're always looking for more, especially writers, so chime in! - * We've successfully produced four PowerShell Summit events globally, with a fifth on the way this September, and 2016 already in planning. - * We're back with a new edition of the Scripting Game this summer, in what we believe will be a long-term-sustainable format that offers fun and challenge. - * Our TechSession webinars are getting traction, and we're starting to build out a reliable monthly schedule of free educational offerings. - * Our free ebooks have been downloaded more than 50,000 times, making them a collective set of bestsellers by any calculation. - * We're helping support almost two dozen independent user groups by giving them a space to publish their meeting notes, meeting announcements, and other details. - * The PowerScripting Podcast continues to draw thousands of listeners to each episode, and we're proud to offer them some space from which to do it, along with financial support. - -I'm proudest of the fact that _I'm not doing most of these things _- you, in the community, are. You're helping answer questions in the forums, you're driving demand for the PowerShell Summit, and you're writing resources for our DSC Repository. PowerShell.org is achieving exactly what its founders always intended: providing a gathering place for community, because we know that once you all have a place to come together, you'll do amazing things. - -It's been an exciting three years since we began, and I can't wait to see where you take us next. - - - - [1]: http://archive.org diff --git a/content/articles/2015-06-08-trust-but-verify.md b/content/articles/2015-06-08-trust-but-verify.md deleted file mode 100644 index 44eb1f9be..000000000 --- a/content/articles/2015-06-08-trust-but-verify.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Trust, but Verify -authors: - - pscookiemonster -date: "2015-06-09T00:12:33+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/06/trust-but-verify/ ---- - -The PowerShell code you write can turn up in interesting places. Production services might rely on it. Your co-workers might take a peak and borrow ideas from it. You might decide to share it online. Someone might see your code online and use it in their own solutions. - -[Hit the link][1] for a quick bit on how we can help create more reliable, consistent, and secure solutions. Simplified to one line: always ask yourself "what could go wrong?" - -What do you think? Is this over the top? Do you have any funny or awe-inspiring-train-wreck stories that resulted from assumptions around PowerShell or other code? - -I've been lucky so far. My scariest moment? A while back, I was testing some code against a test server or two with [Invoke-Parallel][2]. Oops! The code to pull test systems hit a bug, and pulled all computer accounts. A number of domain controllers were hit before I could press ctrl+c. After recovering from a minor heart attack, I realized the code was benign, quickly fixed the bug, and broke the bad habit of running with a high-privilege account. - -Cheers! - - - [1]: http://ramblingcookiemonster.github.io/Trust-but-Verify/ - [2]: https://github.com/RamblingCookieMonster/Invoke-Parallel diff --git a/content/articles/2015-06-09-why-remoting-vs-ssh-isnt-even-a-thing.md b/content/articles/2015-06-09-why-remoting-vs-ssh-isnt-even-a-thing.md deleted file mode 100644 index 388f8197b..000000000 --- a/content/articles/2015-06-09-why-remoting-vs-ssh-isnt-even-a-thing.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: "Why Remoting vs. SSH Isn't Even a Thing" -authors: - - Don Jones -date: "2015-06-09T21:13:04+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/06/why-remoting-vs-ssh-isnt-even-a-thing/ ---- - -As you've probably read, Microsoft [recently announced][1] that they're getting on board with [SSH][2], and that they've plans to, in some future-and-unspecified version of Windows, include a default SSH server and client. Some folks have taken to the Twittersphere rejoicing this decision, even though I suspect they've no idea why Microsoft is doing it. Others have suggested that this is the downfall of Remoting (management via [WS-MAN][3]), because who would want that when you've got SSH? - -And so now I have to write this. - -First of all, let's speculate - with some objectivity - why Microsoft is getting involved with SSH at all. My personal belief is that an SSH client is simply massively overdue. Literally every other business-grade operating system on the entire planet comes with a decent command-line SSH client, so for pity's sake, let's get Windows one, too. Being able to reach out to Linux boxes, routers, switches, and all manner of other devices isn't a convenience, it's a necessity. - -The SSH server piece is a little more interesting. My suspicion is that Microsoft wants to further enable management systems that are primarily built for Linux to log into Windows and manage Windows boxes. If you've got Ansible or Salt, for example, then you know that they revolve in part around using SSH to log into nodes and run commands. Fine - Microsoft can enable that on Windows if it'll help. - -But. - -Let's be clear on why making a decision between Remoting and SSH isn't actually a decision. - -SSH is, basically, Telnet*. You send characters to the remote computer, and it sends characters back. It's built entirely around stdin and stdout. On a Unix system, this works beautifully, because at the end of the day everything on Unix is a process, a file, or a folder. It's all text, all the way down to the turtles. SSH is great at accessing text. Now, _text itself _isn't necessarily a wonderful management API, because it requires administrators to become experts at string manipulation and slicing, but in the Unix world that's a de facto skill. In other words, _for the type of management API that Unix uses, SSH is a wonderful data transport mechanism. _ - -(*yes, I know that SSH has evolved tremendously beyond Telnet - but for the purpose of discussing how SSH moves data back and forth, Telnet is a useful analogy. I know SSH does a lot more than just the Telnet-y bits. That's less relevant to my discussion, but thanks to the SSH fans who've pointed it out. I'm simplifying so I can get to the point - I don't regard SSH as bad or weak.) - -Windows, on the other hand, is entirely different. It is based on APIs. Data doesn't move between bits of software as a text stream; it moves as a data structure called an _object. _Windows APIs all assume that you're passing objects back and forth, and text parsing-and-slicing isn't part of the deal. When an API gets input, it expects the computer name to be in the ComputerName property of an input object, not hiding in columns 26 to 46 of a text block. SSH, therefore, is _not_ a good mechanism for transmitting the data structures that Windows uses for management. - -Remoting, on the other hand, _is_ a good mechanism. It has built-in code for serializing objects into XML, and then deserializing them back into objects on the other end. Like SSH, Remoting natively supports encryption. Unlike SSH, which is really just a remote console, Remoting wasn't built with synchronous operations in mind. Remoting is perfectly happy to fire off a command and then wait until the data comes back some time later. Remoting's underlying protocol, WS-Management, as implemented by the WinRM service, is capable of connecting to far more than just PowerShell, too. CIM and OMI, for example, communicate using WS-MAN. So, unlike SSH, Remoting (well, its underlying infrastructure) connects _software endpoints_ for manageability. That's important in Windows, because those endpoints are where we call the APIs we need to get stuff done. - -SSH and Remoting (and WS-MAN) solve different problems. The fact that both solutions involve transmitting encrypted bits across the wire is _literally_ the only thing they have in common. Yes, when you use **Enter-PSSession** to interactively connect to a remote machine, it looks and feels a lot like SSH in how it works. It isn't. It's _entirely and completely_ different, and if you don't know why, you should learn. - -(Briefly, Enter-PSSession doesn't send one character out, and then receive that same character echo back. Your typing occurs entirely inside your _local console_, where you can have rich tools like PSReadLine running. When you hit Enter, what you've typed is transmitted _all at once_ to the remote box. It runs your commands, serializes the results into XML, and sends 'em. Your console deserializes the XML into objects, and _your local formatting system_ takes over to display those objects. SSH assumes a dumb client; Remoting and Enter-PSSession require a smarter client.) - -Remoting and SSH enable different functionality. Neither is better than the other, any more than cars are better than hot tubs. Both have their place, and both have strengths and weaknesses that devolve primarily from the operating system environments in which they were born. Microsoft _is not implementing an SSH server_ because they believe it's the best way to administer Windows; they're doing it to enable some customer scenarios that, previously, were unnecessarily difficult. Rich management of Windows will always be easier to accomplish using Remoting, but if your management solution can only do SSH, at least you'll be able to do what that can do. - -Keep in mind that Microsoft's also provided a reference implementation for WS-MAN running on Linux, because if your solution supports WS-MAN - as Microsoft's do - then it's nice to be able to use that cross-platform. - -Now, another argument is, "my security people won't approve Remoting, but they already approve SSH, so we should just use that." First, your "security" people (and they're clearly anything but secure or people) have also probably allowed RDP for managing servers, which is just dumb. Choosing to use an inappropriate tool just because the organization won't grouse about it suggests that you have H.R. problems. Either someone in "security" should be fired, or you should be applying for new jobs at companies that aren't stupid. SSH wasn't _always_ approved; someone had to understand it, what it did, how it worked, and become comfortable with it. They're going to need to do that with WS-MAN whether they like it or not, because it's _what Microsoft is going to fixate on, exclusively, for proper management of their operating system. _You're not going to be able to properly manage Windows via SSH, trust me. Microsoft investing some time in OpenSSH is not the same as Microsoft investing time to re-architect their entire operating system around Telnet as a management communications protocol. If you don't believe me on that, then you're just being obstinate. Which is fine, but time will prove me right on this. So, if your organization doesn't "like"  Remoting, fix your organization. - -And SSH will be another tool in our toolbox. Hopefully, you'll use it when it's the very best thing to do, and use other tools when _they_ offer the best way to accomplish a particular task. - - [1]: http://blogs.msdn.com/b/powershell/archive/2015/06/03/looking-forward-microsoft-support-for-secure-shell-ssh.aspx - [2]: http://en.wikipedia.org/wiki/Secure_Shell - [3]: http://en.wikipedia.org/wiki/WS-Management diff --git a/content/articles/2015-06-16-philadelphia-powershell-user-group-meeting-july-7th-2015.md b/content/articles/2015-06-16-philadelphia-powershell-user-group-meeting-july-7th-2015.md deleted file mode 100644 index ac11812c2..000000000 --- a/content/articles/2015-06-16-philadelphia-powershell-user-group-meeting-july-7th-2015.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Philadelphia PowerShell User Group Meeting – July 7th 2015 -authors: - - John Mello -date: "2015-06-17T01:30:48+00:00" -aliases: - - /2015/06/philadelphia-powershell-user-group-meeting-july-7th-2015/ ---- - -Join us Tuesday, July 7th when PhillyPosh members [John Mello](https://twitter.com/Iczer1) and [TJ Turner](https://twitter.com/techguytj) will be presenting. John will be giving a presentation on the new ConvertFrom-String cmdlet in the PowerShell V5 preview. Afterwards TJ Turner will be giving a presentation entitled "What's in your toolbox?”. - -Please [ -register -][1] if you plan to attend in person or online. The meeting URL to join us remotely will be included in your Eventbrite registration confirmation. - -[![Eventbrite - PhillyPoSH July 7th 2015](https://www.eventbrite.com/custombutton?eid=17420823151)](http://www.eventbrite.com/e/phillyposh-july-7th-2015-tickets-17420823151?ref=ebtnebregn) - - [1]: https://www.eventbrite.com/e/phillyposh-july-7th-2015-tickets-17420823151 diff --git a/content/articles/2015-06-19-walkthrough-an-example-of-how-i-write-powershell-functions.md b/content/articles/2015-06-19-walkthrough-an-example-of-how-i-write-powershell-functions.md deleted file mode 100644 index 3e9ff39fc..000000000 --- a/content/articles/2015-06-19-walkthrough-an-example-of-how-i-write-powershell-functions.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "Walkthrough: An example of how I write PowerShell functions" -authors: - - Mike F Robbins -date: "2015-06-19T14:59:15+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/06/walkthrough-an-example-of-how-i-write-powershell-functions/ ---- - -A couple of days ago I posted a blog article titled "[PowerShell function: *Test-ConsoleColor* provides a visual demonstration of the foreach scripting construct](http://mikefrobbins.com/2015/06/17/powershell-function-test-consolecolor-provides-a-visual-demonstration-of-the-foreach-scripting-construct/)" and today I thought I would walk you through that function step by step since it's what I consider to be a well written PowerShell function. - -It starts out by using the [#Requires](https://technet.microsoft.com/en-us/library/hh847765.aspx) statement to require at least PowerShell version 3 or it won't run. It also requires that the [PowerShell Community Extensions](https://pscx.codeplex.com/) module be installed since it uses a function from that module and continuing without it only leads to errors: - - -`#Requires -Version 3.0 -Modules Pscx -`The function is then declared using a [Pascal case name](https://msdn.microsoft.com/en-us/library/dd878270(v=vs.85).aspx#SD02) that uses an [approved verb](https://msdn.microsoft.com/en-us/library/ms714428(v=vs.85).aspx) along with a [singular noun](https://msdn.microsoft.com/en-us/library/dd878270(v=vs.85).aspx#SD01). [Comment based help](https://technet.microsoft.com/en-us/library/hh847834.aspx) is provided just inside the function declaration. This isn't the only location where comment based help can be specified at, but it's my preferred location for it. - -[Click here](http://mikefrobbins.com/2015/06/19/walkthrough-an-example-of-how-i-write-powershell-functions/) - to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. - - -µ diff --git a/content/articles/2015-06-22-decorating-powershell-objects.md b/content/articles/2015-06-22-decorating-powershell-objects.md deleted file mode 100644 index f8705d0e0..000000000 --- a/content/articles/2015-06-22-decorating-powershell-objects.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Decorating PowerShell Objects -authors: - - pscookiemonster -date: "2015-06-22T12:44:21+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/06/decorating-powershell-objects/ ---- - -Ever wonder how PowerShell seems to know how to format objects? When you run - - -`Get-ChildItem -`or - - -`Get-WmiObject -`, you only see a few key properties, but a wealth of other information is available through commands like - - -`Select-Object -`and - - -`Get-Member -`. - -Have you ever written a PowerShell function that you nearly always pipe to - - -`Format-Table -`? Wouldn't it be nice to specify some default properties and force them into a table? - -Stop by for [a quick hit on how to decorate your PowerShell objects][1] with type names and formatting, including a re-usable tool to abstract out some of the details. - -Cheers! - - [1]: http://bit.ly/DecoratePSObjects diff --git a/content/articles/2015-06-29-the-scripting-games-heres-whats-happening.md b/content/articles/2015-06-29-the-scripting-games-heres-whats-happening.md deleted file mode 100644 index f7b4011d3..000000000 --- a/content/articles/2015-06-29-the-scripting-games-heres-whats-happening.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: "The Scripting Games: Here's What's Happening" -authors: - - Don Jones -date: "2015-06-29T15:11:27+00:00" -categories: - - Scripting Games -aliases: - - /2015/06/the-scripting-games-heres-whats-happening/ ---- - -I know a lot of folks have been wondering about when the next Scripting Games will be. It's a complicated answer... so bear with me for a minute while I unburden my soul to you. If you prefer to just skip the explanations, you can skip a bit to see what we're doing, part 1. - -## **The Background** - -I'm not sure how long Microsoft's Scripting Guys ran The Scripting Games, but it goes back at least to 2006. Back then, the focus was on VBScript, it wasn't until a year or so later that a parallel PowerShell track was started, and another year or two before VBScript was discontinued. The Games back then were... well, _games._ They weren't always terribly real-world, but they were fun, and they made you think. - -In 2013, Last Scripting Guy Standing, Ed Wilson, turned the Games over to PowerShell.org. Ed was, to put it bluntly, exhausted. Coming up with nine events in two tracks, let alone grading the thousands of entries, wrangling the assistant judges, begging for prizes - it was a couple of months out of his life, during which he was still expected to do his full-time job. So we stepped in, mindful of the trust he was placing in us, to take over and keep the tradition alive. - -We've tried some variations on the Games, but two things became abundantly clear: - -1. The real value people like in the Games is getting the individual expert feedback and scoring. - -2. The one thing we simply can't feasibly provide is individual expert feedback and scoring. - -Seriously, we'd go out and recruit a couple of dozen judges, but it's just mind-numbing to look through entry after entry after entry after you've already put in a full day of work at your job. YOU wouldn't want to do it. So in the end, it'd always be the same 4-5 stalwarts who slaved away for 40 or more hours - not kidding - to make sure everyone got a grade and a comment. It's just insane. None of us who've done it for a few years ever wants to do it again, even if it's the one thing that would save us from our robotic conquerors. We can't handle it. - -We tried to do community scoring and that was a huge non-popular-thing-to-do. People wanted "the experts" giving feedback, not some schmuck from the next cube over. Which we understand, but it doesn't mean we can physically deliver what people are after. - -## **What We Thought About Trying** - -So we thought about a Games where we went back to focusing on puzzles. Believe me, the original Scripting Guys weren't reviewing, grading, and commenting on every submission. Most entries went in via e-mail, and they picked the ones they thought were winners. But the Games evolved to the point where people expected that individual feedback. - -So when we shared our draft plans with a few folks, their knee-jerk reaction was universally, "WTF?!??" They struggled with the idea of a Games that didn't include individual feedback. And once we started being honest with ourselves, we could appreciate the value in that, and how people would react when the Games eliminating the judging. - -But we still can't do the individual judging. There just aren't enough experts with enough time. We've all got 50-hour a week jobs just like you do, and we're talking THOUSANDS of submissions that we're supposed to do instead of hanging out with our friends and families.  - -So... there we were. Kind of stuck between a rock and a hard place. - -## **Here's What We're Doing, Part 1** - -We're going to pivot the Scripting Games into a monthly event, sort of. Each month, we'll publish a puzzle. They won't all necessarily be real-world, but they'll all be designed to make you think about something important. We'll try to describe _why_ it's important, too, since in some cases it won't be super-obvious. You'll get a full month to work on your entry, and you'll be encouraged to post it (we'll provide posting instructions).  - -We're encouraging user groups to occasionally or regularly make the monthly puzzle a part of their meetings. We're encouraging them to publicize when they're doing so, and if they allow virtual visitors, then you'll have the opportunity to share your solution with a group of peers, work on a solution together, and give each other feedback in real-time. That's a hugely valuable exercise, by the way, and I encourage everyone to take advantage of the opportunity if they can. You don't work in this field alone - start to make some friends and colleagues, even if they're across the globe. - -The following month, we'll post a new puzzle. We'll also post a wrap-up for the preceding month's puzzle. In it, we'll offer a sample solution and an explanation for it. When possible, we'll offer Celebrity Participant solutions, often from members of the PowerShell team or from other MVPs. And, when we have volunteers willing to do so, we'll post a "stream of consciousness" article that shares how that person tackled the problem and came to their solution. Finally, we'll include some analysis of the entries people posted, including things we especially liked, and things we didn't like so much. - -All of that should provide the learning opportunity that the Games were originally created for. You'll have to use some critical thinking, some out-of-the-box skills, and some cleverness. You'll get to see how other people approached the problem, and gain some new perspective. No, you won't get an individual score or commentary - but this isn't a certification exam, and it isn't intended as a personal benchmark for YOU. It's a way for us to all learn together. - -And, best of all, the Scripting Games' monthly puzzle will create an opportunity for the Games to resurface on The Scripting Guy's blog, as Ed has offered to run the monthly puzzles. - -## **Here's What Else We're Doing, Part 2** - -We haven't given up on the idea of an annual, fast-paced event that includes individual feedback. It's going to have to be a new set of volunteers who tackle that, though, and we have a few people thinking about it. I imagine it'll be a larger-scale challenge, so that you can exercise several sets of skills and knowledge and once, and get feedback on something that's perhaps more real-world than a puzzle. I can't offer any timelines or promises on this; it's a huge undertaking, and we're still running ideas around. Heck, if you think you have a solution, share them in Web Site Feedback forum on PowerShell.org.  - -However, if you offer an solution, be prepared to volunteer to implement it. What we don't want are, "here's what I'd like YOU do to, and I'll just sit back and consume that." "Solutions," for us, are PEOPLE, not ideas. I myself am not a community, nor are my fellow PowerShell.org Board members. ALL OF US are a community - so if this is something the community wants, the community has to pull together to build it out. - -## **A User Group CALL TO ACTION** - -Do you run or participate in a PowerShell User Group? Well, today's your lucky day. First - why not make the monthly Scripting Games puzzle a part of your user group meetings? Invite remote visitors to come along for the ride - increase participation by putting code front and center. - -And here's a special offer just for user groups: We'll be publishing the monthly puzzles on the beginning of the month (likely the first Saturday). As a user group, you can send your best join submission right to Ed Wilson, The Scripting Guy. He'll select the most noteworthy user group submissions, publish them, and comment on it, raising visibility for your group and its members. He'll also publish selected excerpts that he finds noteworthy from other user group entries. Caveats, here: only the registered user group leader will be able to submit the group's entry. So if you're not listing your user group on PowerShell.org, consider doing so. - -So now there's a HUGE reason to get involved with a user group, since it's another opportunity for you to work on code together, and have that code published in one of the highest-profile PowerShell blogs in existence!  - -And to sweeten that pot even more - the user group that has the most entries selected over the year will be eligible for a grand prize, courtesy of PowerShell.org. You see (and this was all Ed's idea), we really want to give people more reasons to create, run, and participate in user groups. They're really the best way to make community happen. It all starts at a local level, even if you're attending remotely. - -## **Here's Something YOU Can Do To Help** - -Offer to write the monthly puzzle. Seriously. Drop a line to Admin over here at PowerShell.org, and include an RTF (not Word, please) document with your monthly puzzle. You'll get credit, and you'll be giving back to the community that's supported you as you learned PowerShell. Do it for the children. - -## **Here's Something Else YOU Can Do** - -We've heard over and over that expert reviews are valuable to people. You know, you can probably have an expert review without having a Scripting Games. Get together with a handful of colleagues, and invite your favorite PowerShell expert to a Code Review Hour. Have some code ready for them, and do a Skype screen-share or something and let them pick apart what you've done. PAY THEM. Offer $100 or $200 an hour, which is a going rate depending on the level of expertise you're getting. You and your friends can pool your funds. Heck, with five people offering $20 each, you've got $100, right? And if that expert review is truly valuable to you - well, "valuable" means you can put a value on it, and $100 an hour ain't much. - -If PowerShell.org can do something to facilitate these, like helping you contact interested experts, let me know in the Web Site Feedback forum, and I'll figure something out. - -## **In the Meantime** - -So while you're waiting on that first Scripting Games, Monthly Edition (expect it in July), start thinking of the kinds of puzzles you'd like to see. Ones that make people think, even if they don't necessarily have one-and-only-one correct answer. Don't just CONSUME community, help CREATE it by offering to write one of the monthly Puzzlers. And start thinking how you, and we, all together, can do a better job AS A COMMUNITY of providing peer code reviews, code feedback, and other elements. I look forward to your ideas. diff --git a/content/articles/2015-06-30-i-need-your-powershell-stories.md b/content/articles/2015-06-30-i-need-your-powershell-stories.md deleted file mode 100644 index b9219ec23..000000000 --- a/content/articles/2015-06-30-i-need-your-powershell-stories.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: I need YOUR PowerShell Stories -authors: - - Adam Bertram -date: "2015-06-30T18:57:25+00:00" -categories: - - News -aliases: - - /2015/06/i-need-your-powershell-stories/ ---- - -We all love PowerShell and we all probably have some very entertaining stories about a situation where it really saved our butts (or caused problems). Either way, we can all tell some kind of interesting story around a memorable moment you had with PowerShell or automation in general.  I'd love to hear about them. - -I'm looking for a short story anywhere from a few paragraphs to an entire article if you want.  The more detail the better. What kind of situation were you in? Were you under a deadline and PowerShell saved the day?  Did automation backfire in your face and you blew up your whole datacenter?  I want to know about it! - -If you have any stories around PowerShell please send them to me by contacting me via [my blog's contact page](http://www.adamtheautomator.com/get-ahold-of-me/).  I will be editing and collecting them all up soon and putting them all into a community eBook here on [powershell.org](https://powershell.org/) as well as my blog. If you don't want your name attached to the story let me know. - -**The deadline for submissions is 7/31/15.** - -I look forward to reading your contributions! - -- [Adam Bertram][1] - - [1]: http://www.adamtheautomator.com diff --git a/content/articles/2015-06-30-powershell-org-inc-2015-shareholder-meeting-roundup.md b/content/articles/2015-06-30-powershell-org-inc-2015-shareholder-meeting-roundup.md deleted file mode 100644 index 2f68902e4..000000000 --- a/content/articles/2015-06-30-powershell-org-inc-2015-shareholder-meeting-roundup.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: PowerShell.org, Inc. 2015 Shareholder Meeting Roundup -authors: - - Don Jones -date: "2015-06-30T17:55:23+00:00" -categories: - - Announcements -aliases: - - /2015/06/powershell-org-inc-2015-shareholder-meeting-roundup/ ---- - -I wanted to provide a quick wrap-up of the Annual Shareholder Meeting that we just concluded. We had a quorum of shareholder votes present online or by proxy, and we made some important decisions that I want to share with the community overall. - -One, we voted to amend the organization's Articles of Incorporation and Bylaws to make some important structural changes. These are absolutely in line with our original _intent_ for the organization, and reflect how we've actually done things, but now they're "law." The first was to remove any legal possibility of corporate funds being paid out to shareholders; all corporate funds must be used only for corporate programs and operating expenses. We also voted that, in the event the corporation is completely dissolved, any remaining assets and proceeds will be donated to a 501(c)(3) charity. - -The bigger news is that we also voted to, if necessary, cancel all shares held by the corporation's owners - with no financial consideration - and re-incorporate as a nonprofit corporation. That means everyone who's invested time and money into PowerShell.org would get no money back, yet would lose their ownership of it. That's likely to be a necessary step for us to achieve tax-free status, which is something we'd very much like to do moving forward. We would still have a Board of Directors, and would likely form a volunteer Community Council to help advise on program directions and other matters of governance. Legally, under US nonprofit rules, the Directors could not be paid for their service as Directors - which is exactly how we've always done things. - -We also announced that Steve Murawski will be joining the Board as our sixth Director. Steve's been instrumental in moving the community forward on DSC, and plays an important role in connecting the community to the DSC product team members, so we're pleased to have him. - -Director Dave Wyatt, known for his work on Pester, will be working on a PowerShell.org Continuous Integration service. The theory is that you submit your code to an open-source repo, and the CI service automatically runs your Pester tests on the code. If the code passes, your code is packaged and made available for production use in a repository (similar to PowerShellGallery.com, perhaps, and potentially _that_ repository depending on Microsoft's directions). - -Our other big announcement was a 2016 plan to launch a DevOps-focused education program designed for young people and young entrants to the IT field. This program will combine self-study online training with live mentorship, and lead to as many as nine entry-level certification titles by its conclusion. Anyone will be welcome to join the program on an a-la-carte basis, meaning you could simply follow it on your own, skip the exams, or whatever. However, in partnership with vendor sponsors to be announced, we hope to provide two full-ride scholarships to the program. One will be a general scholarship, and the other will be a "Diversity in Tech" scholarship reserved for members of groups that are presently underrepresented in the industry. The goal of the program will be to take a recent high school graduate, or someone with similar education, and provide them the skills and knowledge needed to successfully apply for an entry-level job (such as Help Desk Technician), with a focus on pointing their career in a DevOps direction. - -As you can see, our community is coming together into a significant force, and these major programs are one reason we'd like to pursue nonprofit status - doing so will not only remove our own tax burden and leave more money for programs, but also potentially make donations to the organization tax-deductible for the donor.  - -All of this on top of two annual Summit events, a revamped website, the re-imagined Scripting Games, our information-packed TechLetter, and our newly launched TechSession webinars. We've got a lot going on, and it couldn't be done without the ample and able help of our many volunteers, and the support of our wonderful community. Thank you - our most exciting years appear to be ahead of us! - -Slide deck: [Shareholder Meeting][1] - - [1]: https://powershell.org/wp-content/uploads/2015/06/Shareholder-Meeting.pptx diff --git a/content/articles/2015-07-01-want-to-blog-at-powershell-org.md b/content/articles/2015-07-01-want-to-blog-at-powershell-org.md deleted file mode 100644 index 8c2489ed7..000000000 --- a/content/articles/2015-07-01-want-to-blog-at-powershell-org.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Want to Blog at PowerShell.org? -authors: - - Don Jones -date: "2015-07-01T22:16:52+00:00" -categories: - - Announcements - - News -aliases: - - /2015/07/want-to-blog-at-powershell-org/ ---- - -PowerShell.org was never meant to be a small group of people doing good - it was meant to be a place where _all of us_ can do good for each other. And that's why **everyone is invited to blog here. ** -Yup, even you. -If you'd like blogging permissions added to your account, just e-mail webmaster@ with your site username, and we'll make it so. Now, I do realize that a lot of folks would much rather blog in their own space, and that's totally, 100% cool. But, if you'd like to blog here, we only have a few rules. - -## Your Content is YOUR Content - -If you ever decide you don't want to blog here anymore, we'll be happy to export your articles (in whatever form WordPress supports at the time) and give you that archive. You can then do whatever you want with your content. - -## Minimize Dupli-Blogging - -We ask that, if you post an article here, that you not also post it in a ton of other places. This isn't an "exclusivity" thing at all - it's that search engines like Google "penalize" sites for carrying duplicate content, and that would make it harder for people to find other resources that we offer here. -That said, you're more than welcome to write a post elsewhere, and then write a shorter, "introductory" post here, pointing to your "main" article elsewhere. That's absolutely OK. We just ask that the shorter post you submit here be entirely original - that is, not just an excerpt of your longer post, but something uniquely written for this site. Again - that's just us trying to be square with the Goog. -For example, you might write a quick "tip" article here that offers someone genuine learning value, and then point them to a longer article that includes additional, related material on your own site. - -## That's It - -PowerShell.org is meant to be a service to _you_ and to the entire community. We get over 200,000 hits a month, so we're a pretty decent place for your writing to get more exposure - and to help more people. But we also want to be a respectful player in the community, so aside from the above ground rules, we really don't want to restrict you or ask you to do something that might not be good for _you. _ - -## Well, Also This - -We've also created some generic artwork that you can set as the "Featured Image" for your post. When your post is fresh, it'll cycle through the front page of PowerShell.org in the "carousel" at the top of the page. Having an image makes it a little sexier. Just click "Set featured image" and then choose one of the media items we've provided. You'll find them in the Media Library from December 2015 (there's a drop-down list to filter to that month). -We look forward to hearing from you! diff --git a/content/articles/2015-07-04-2015-july-scripting-games-puzzle.md b/content/articles/2015-07-04-2015-july-scripting-games-puzzle.md deleted file mode 100644 index 1ab13408a..000000000 --- a/content/articles/2015-07-04-2015-july-scripting-games-puzzle.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: 2015-July Scripting Games Puzzle -authors: - - Don Jones -date: "2015-07-04T08:01:13+00:00" -categories: - - Scripting Games -aliases: - - /2015/07/2015-july-scripting-games-puzzle/ ---- - -Our July 2015 puzzler is designed to make you really think about the PowerShell parser. Normally, you can more or less ignore the parser, because if you're typing best-practice, long-form code (no aliases, spell out parameter names, etc), the parser deals really well with everything. But knowing how the parser works is useful, because when you get into tricky syntax, the parser can be harder to work with. So we're going to test the limits of the parser's patience - and your skills! - - - -## **Instructions** - -The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month's puzzle. You can find them all at https://powershell.org/category/announcements/scripting-games/. Many puzzles will include optional challenges, that you can use to really push your skills. - -**To participate**, add your solution to a public Gist (http://gist.github.com; you'll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post.  -**Only post one entry per person. You are not allowed to come back and post corrected or improved versions. If you do, all of your posts will be ignored. **However, remember that you can always go back and edit your Gist. We'll always pull the most recent one when we display it, so there's no need to post multiple entries if you want to make an edit. - - -Don't forget the [main rules and purpose of these monthly puzzles][1], including the fact that you won't receive individual scoring or commentary on your entry. - -**User groups are encouraged to work together** on the monthly puzzles. User group leaders should submit their group's best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most "favorite" entries of the year will win a grand prize from PowerShell.org. - -## - -## **Our Puzzle** - -Write a one-liner that produces the following output (note that property values will be different from computer to computer; that’s fine).  - - -`PSComputerName ServicePackMajorVersion Version  BIOSSerial                                -------------- ----------------------- -------  ----------                                win81                                0 6.3.9600 VMware-56 4d 09 1 71 dd a9 d0 e6 46 9f -`By definition, a one-liner is a single, long command or pipeline that you type, hitting Enter only at the very end. If it wraps to more than one physical line as you’re typing, that’s OK. But, in order to really test your skill with the parser, try to make your one-liner as short as technically possible while still running correctly. - - - -**Challenges:** - -• - -Try to use no more than one semicolon total in the entire one-liner - -• - -Try not to use ForEach-Object or one of its aliases - -• - -Write the command so that it could target multiple computers (no error handling needed) if desired - -• - -Want to go obscure? Feel free to use aliases and whatever other shortcuts you want to produce a teeny-tiny one-liner. - - [1]: https://powershell.org/?p=2574 diff --git a/content/articles/2015-07-07-mississippi-powershell-user-group-virtual-meeting-july-14th-2015.md b/content/articles/2015-07-07-mississippi-powershell-user-group-virtual-meeting-july-14th-2015.md deleted file mode 100644 index 678cfd772..000000000 --- a/content/articles/2015-07-07-mississippi-powershell-user-group-virtual-meeting-july-14th-2015.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Mississippi PowerShell User Group Virtual Meeting – July 14th 2015 -authors: - - Mike F Robbins -date: "2015-07-07T15:19:57+00:00" -aliases: - - /2015/07/mississippi-powershell-user-group-virtual-meeting-july-14th-2015/ ---- - -Join us virtually on Tuesday, July 14th at 8:30pm Central Time when PowerShell MVP Sean Kearney will present “_**Introduction to Windows PowerShell**_”. - -Windows PowerShell is not a difficult system to work with however sometimes, like with anything in life, you stare at it and say “Where do I even start?”. In this session we will do a very simple overview of Windows PowerShell and what it is and how to make it useful at very simple level. It comes directly from a person who had Zero time to learn about any technology in his first IT Job, Windows PowerShell MVP, Sean Kearney. You might not master PowerShell after this session, but you certainly should be a little more comfortable to open up the door and play afterwards. - -Visit the [Mississippi PowerShell User Group][1] website to learn more about Sean and to find out more details about this month’s meeting. - -The Mississippi PowerShell User Group Meetings are held online (via Microsoft Lync) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info][2]” section. - -Register via [EventBrite][3] to receive the URL for this meeting. - -µ - - [1]: http://mspsug.com/2015/06/30/mspsug-virtual-meeting-introduction-to-windows-powershell-on-tuesday-july-14th-at-830pm-cdt/ - [2]: http://mspsug.com/attendee-info/ - [3]: http://mspsug.eventbrite.com/ diff --git a/content/articles/2015-07-07-rabbitmq-and-powershell.md b/content/articles/2015-07-07-rabbitmq-and-powershell.md deleted file mode 100644 index 470658b65..000000000 --- a/content/articles/2015-07-07-rabbitmq-and-powershell.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: RabbitMQ and PowerShell -authors: - - pscookiemonster -date: "2015-07-07T11:22:36+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/07/rabbitmq-and-powershell/ ---- - -Have you ever needed to communicate between scripts, perhaps running on different servers and in different languages?  Did you use a non-standard "messaging" solution like the file system or a SQL database? Did you try to avoid this and squeeze everything into a monolithic, delicate script? - - - - - - - - - [RabbitMQ](http://ramblingcookiemonster.github.io/RabbitMQ-Intro/) is a solid messaging solution that happens to have a handy REST API and .NET client, which means we can use PowerShell! - - - - - - - - - Wrote a quick hit on setting up a simple RabbitMQ deployment and using PowerShell to manage the solution and send and receive messages. Thanks go to Mariusz Wojcik and Chris Duck for writing and sharing the PowerShell modules that were tweaked for this article. - - - - - - [RabbitMQ and PowerShell](http://ramblingcookiemonster.github.io/RabbitMQ-Intro/) - - - - - - - - - Here's an example showing two independent PowerShell sessions talking to each other over a RabbitMQ server: - - - - - - - - - [![listener-small](https://powershell.org/wp-content/uploads/2015/07/listener-small.gif)](https://powershell.org/wp-content/uploads/2015/07/Listener.gif)[](https://powershell.org/wp-content/uploads/2015/07/Listener.gif) - - - - - - - - - Is this something you could use in your solutions? Hit the link and check it out - pull requests and input would be welcome. - - - - - - - - - Cheers! diff --git a/content/articles/2015-07-10-nyc-powershell-usergroup-meets-on-july13.md b/content/articles/2015-07-10-nyc-powershell-usergroup-meets-on-july13.md deleted file mode 100644 index 82702b845..000000000 --- a/content/articles/2015-07-10-nyc-powershell-usergroup-meets-on-july13.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: NYC Powershell Usergroup meets on July 13th -authors: - - Sunny Chakraborty -date: "2015-07-10T18:03:27+00:00" -categories: - - Events -aliases: - - /2015/07/nyc-powershell-usergroup-meets-on-july13/ ---- - -We have an exciting line-up for the July Powershell User-Group meeting. -Powershell MVP, Tome Tanasovski will be presenting a beginner’s track on Powershell covering File Management, and Date/Time manipulations. -We also have Powershell MVP Doug Finke, who will be covering Pester. - -**AGENDA:** - -**Tome Tanasovski**: -File management -- Managing paths -- Reading data from a file -- Finding strings in a collection of files -- XML and CSV file manipulation -- Exporting data to an HTML page - -Handling dates and time -- Date and time formatting and custom date formats -- Creating and updating a datetime object -- Date comparison -- Timespan datatype - -**Bio -** Tome is an executive for a market-leading global financial services firm in New York City where he focuses on automation, private cloud, and distributed computing. He is the founder and leader of the New York City PowerShell User group, a blogger, and speaks regularly at conferences and user groups. In 2011, he became a cofounder of the NYC Techstravaganza, coauthored the Windows PowerShell Bible, and received the title of Honorary Scripting Guy from the Hey Scripting Guy! blog. Tome has also received the MVP award from Microsoft for the last five years in Windows PowerShell. -**Blog**: -**Twitter**: - -** -Doug Finke: -** Testing PowerShell Scripts with Pester. -This will be a demo heavy presentation showing how to test scripts and test Modules -- Pester, Why Test, How to Test, Mocks. -- Visual Studio PoshTools Addin - -**Bio** -Doug Finke, author of _PowerShell for Developers_, 7 time MVP recipient and an international professional speaker. Doug works at Start-Automating, a company that builds advanced PowerShell tools, provides PowerShell training and PowerShell consulting. You can catch up with Doug at his blog Development in a Blink at -**Blog:** -**Twitter:**   - -Pizza is being sponsored by SAPIEN, Makers of PowerShell Studio and Primal Script - -[![SapienLogo3](https://powershell.org/wp-content/uploads/2015/06/SapienLogo3.png)][1] - -6 pm - 6:30 - Pizza and catching up -6:30 - 7:15 – Tome Tanasovski. -7:15 - 7:45 – Doug Finke. -8ish - ?? - Drinks at Beer Authority (next to Port Authority) - -You must RSVP via Event Brite in order to attend: [Register Here][2]! - -[![EventBriteLogoEventBriteLogo](https://powershell.org/wp-content/uploads/2015/06/EventBriteLogo.png)][2] - -**Meeting Date:** -Monday, July 13, 2015 - 18:00 - 20:00 - -**Location** - -Microsoft - Times Square - 6th Floor -11 Times Square -New York, NY 10018 -United States -See map: [Google Maps][3] - - [1]: http://www.sapien.com - [2]: https://www.eventbrite.com/e/nyc-powershell-ug-doug-finke-introduction-to-pester-tome-managing-datetime-with-powershellfile-tickets-17726352999 - [3]: https://www.google.com/maps/place/11+Times+Square,+New+York,+NY+10036/@40.7567203,-73.9896494,17z/data=!3m1!4b1!4m2!3m1!1s0x89c258534f8455ad:0x55d4588f7b23a524 diff --git a/content/articles/2015-07-12-philadelphia-powershell-user-group-meeting-august-6th-2015.md b/content/articles/2015-07-12-philadelphia-powershell-user-group-meeting-august-6th-2015.md deleted file mode 100644 index 877e2a3aa..000000000 --- a/content/articles/2015-07-12-philadelphia-powershell-user-group-meeting-august-6th-2015.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Philadelphia PowerShell User Group Meeting – August 6th 2015 -authors: - - John Mello -date: "2015-07-13T03:40:33+00:00" -aliases: - - /2015/07/philadelphia-powershell-user-group-meeting-august-6th-2015/ ---- - -Join us on Thursday, August 6th when [June Blender][1] will be conducting a hands on lab (in person!) called **Working with Classes in PowerShell** **5.0.** To participate in the lab, bring a laptop (or VM) with PowerShell 5.0, but it's not required! After that, we will review the results of the [ -July Scripting games puzzle -][2].  - -#### About June - - -June Blender is a technology evangelist for SAPIEN Technologies, Inc. -Formerly a Senior Programming Writer at Microsoft Corporation, she is best known for her work with the Windows PowerShell product team from 2006-2012. developing the help system and writing the Get-Help help topics for PowerShell 1.0 – 3.0. In other roles, June wrote content for the Azure Active Directory SDK and Azure PowerShell Help, Windows Driver Kits, Windows Support Tools, and Windows Resource Kits. -She lives in magnificent Escalante, Utah, where she works remotely when she's not out hiking, canyoneering, taking Coursera classes, or convincing lost tourists to try Windows PowerShell. -She is a Windows PowerShell MVP, a PowerShell Hero, an Honorary Scripting Guy, and a frequent contributor to PowerShell.org. Contact her at [ - -juneb@sapien.com - -][3] -and follow her on the -[ - -SAPIEN Blog - -][4] -and on Twitter at -[ - -@juneb_get_help - -](https://twitter.com/juneb_get_help) -. - - -Please [ -register -][5] if you plan to attend in person or online. The meeting URL to join us remotely will be included in your Eventbrite registration confirmation. - -[![Eventbrite - PhillyPosh August 6th 2015 - June Blender](https://www.eventbrite.com/custombutton?eid=17741751055)](http://www.eventbrite.com/e/phillyposh-august-6th-2015-june-blender-tickets-17741751055?ref=ebtnebregn) - - [1]: https://twitter.com/juneb_get_help - [2]: https://powershell.org/2015/07/04/2015-july-scripting-games-puzzle/ - [3]: mailto:juneb@sapien.com - [4]: http://www.sapien.com/blog/ - [5]: https://www.eventbrite.com/e/phillyposh-august-6th-2015-june-blender-tickets-17741751055?ref=ebtn diff --git a/content/articles/2015-07-13-phillyposh-07072015-meeting-summary-and-presentation-materials.md b/content/articles/2015-07-13-phillyposh-07072015-meeting-summary-and-presentation-materials.md deleted file mode 100644 index 01a839eba..000000000 --- a/content/articles/2015-07-13-phillyposh-07072015-meeting-summary-and-presentation-materials.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: PhillyPoSH 07/07/2015 meeting summary and presentation materials -authors: - - John Mello -date: "2015-07-14T00:51:36+00:00" -aliases: - - /2015/07/phillyposh-07072015-meeting-summary-and-presentation-materials/ ---- - -[John Mello](https://twitter.com/Iczer1) gave a presentation entitled “ConvertFrom-String Overview and Examples”. -[A copy of his demo scripts and presentation][1] -are available at our -[GitHub site][2] -. [TJ Turner](https://twitter.com/techguytj)'s presentation "[What's in your Toolbox](http://techguytj.com/whats-in-your-toolbox/)" is available at his [blog](http://techguytj.com/).  -[A recording of this meeting][3] -has been posted to our -[YouTube channel][4] -. - - - [1]: https://github.com/PhillyPoSH/2015-07-ConvertFrom-String - [2]: https://github.com/PhillyPoSH - [3]: https://www.youtube.com/watch?v=GGr3dQRi5nQ - [4]: https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2015-07-14-curious-about-the-poshcruise-ask-questions-here.md b/content/articles/2015-07-14-curious-about-the-poshcruise-ask-questions-here.md deleted file mode 100644 index 1106b1fcd..000000000 --- a/content/articles/2015-07-14-curious-about-the-poshcruise-ask-questions-here.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "Curious About the #PoshCruise? Ask Questions Here." -authors: - - Don Jones -date: "2015-07-14T16:12:57+00:00" -categories: - - Announcements -aliases: - - /2015/07/curious-about-the-poshcruise-ask-questions-here/ ---- - -Jeffrey Langdon, Doug Finke, and untold others are putting together [PoshCruise][1], a PowerShell Cruise Conference. I wanted to make sure everyone knew about it, because it (A) stands to be a lot of run, and (B) offers some special pricing through this month. - -The "conference" itself is free - you just have to pay for your cruise. There'll be presentations (I'm guessing mainly on the "at sea" days of the 7-day trip, although personally I've rented a beach cabana on Great Stirrup Cay and will hold forth on technical topics over tropical cocktails).  - -Cruises can be a pretty good deal in terms of value. NCL, the cruise line, is really clear about [what's included][2] and what's extra. And, unlike many lines, NCL's "Freestyle Cruising" means you're not locked into a schedule for things like meals - you just eat when you want, where you want, in a number of different venues. I plan to inject PowerShell into every possible minute of the cruise - PowerShell in the pool, DSC in the whiskey bar, Toolmaking in the buffet, you name it. - -If you've not cruised before, and are curious about how different stuff works, pop a question into the comments here. I've cruised a _ton, _so I'll do my best to answer - and if something comes up about the PowerShell aspect of the cruise, I'll grab one of the guys to drop an answer here. - -At a per-person price as low as $950 (based on double occupancy), it's amongst the cheapest conferences you'll find. You'll need to factor in airfare to NYC, about $110 in shipboard service charges, but apart from that you don't _have_ to spend any more. That covers your food, beverages like tea and water, and most shipboard activities. Packages can lower the price of alcoholic or soft drinks (especially if you book early, when those packages are either included in the price or are heavily discounted), even. - -So... whatcha wanna know about a PoshCruise? - - [1]: http://poshcruise.org - [2]: https://www.ncl.com/faq/cruise-fare-includes diff --git a/content/articles/2015-07-15-building-a-test-lab-the-basics-part-1-rootca.md b/content/articles/2015-07-15-building-a-test-lab-the-basics-part-1-rootca.md deleted file mode 100644 index 9925b6d19..000000000 --- a/content/articles/2015-07-15-building-a-test-lab-the-basics-part-1-rootca.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "Building a test lab : The basics Part 1 RootCA" -authors: - - David Jones -date: "2015-07-16T04:16:28+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/07/building-a-test-lab-the-basics-part-1-rootca/ ---- - -Part of building a functional test lab is being able to deal with cattle and not pets. With that in mode I'm writing a series about the script necessary to build a production like lab for testing DSC, and be able to to tear it down and rebuild it with little effort. - -Part 1 is about bootstrapping DSC for the Root CA. and doing so without using plaintext passwords. - -I would welcome some feedback on both my methods and writing style. - -[Building the basics Part 1 | PKI: RootCA][1] - - [1]: https://bladefirelight.wordpress.com/2015/07/16/building-the-basics-part-1-pki-rootca/ diff --git a/content/articles/2015-07-24-curious-about-powershell-cruise-heres-how-to-learn-more.md b/content/articles/2015-07-24-curious-about-powershell-cruise-heres-how-to-learn-more.md deleted file mode 100644 index fadef9785..000000000 --- a/content/articles/2015-07-24-curious-about-powershell-cruise-heres-how-to-learn-more.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "Curious about PowerShell Cruise? Here's how to learn more." -authors: - - Don Jones -date: "2015-07-24T19:58:17+00:00" -categories: - - Announcements -aliases: - - /2015/07/curious-about-powershell-cruise-heres-how-to-learn-more/ ---- - -I'm stupid-excited about [PowerShell Cruise][1]. Did you know you can register now for just $500, which is fully refundable up to a point? And that doing so NOW gets you awesome amenities like free Internet minutes or liquor packages? Did you know I'm speaking? Did you...  - -Wait. You probably have a ton of questions, especially if you've never cruised. So on Wednesday July 29, at 4pm Pacific, get your answers. Go to https://attendee.gotowebinar.com/register/4206318439550861826 to register for a webinar. I'll host, and I'll be joined by the event organizers, as well as the travel agency that's handling the bookings. There's literally no PowerShell Cruise question these brave souls can't answer. - -Did you know the conference portion of the cruise - the technical conten - will be FREE? Did you know two people can sail for under $1900, inclusive of meals, snacks, and most onboard activities? NO, you did not know, and that's why you need to at least show up and get the facts. We will record the whole thing, too. - -I want to emphasize that this isn't a PowerShell.org event - we are just being as hugely supportive as possible to the bold individuals who are trying to do this thing for their community, at no profit for themselves, and with (probably) more than a few evil eyes from their spouses. So show your love and join the webinar!!! - - [1]: Http://PoshCruise.org diff --git a/content/articles/2015-07-28-powershell-is-for-the-desktop-tech-as-well.md b/content/articles/2015-07-28-powershell-is-for-the-desktop-tech-as-well.md deleted file mode 100644 index f41f2079b..000000000 --- a/content/articles/2015-07-28-powershell-is-for-the-desktop-tech-as-well.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Powershell IS for the desktop tech as well -authors: - - Brian Bourque -date: "2015-07-29T00:06:26+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/07/powershell-is-for-the-desktop-tech-as-well/ ---- - -Every day some one tends to ask me if there is a simpler way to do task A or B, and the minute I mention PowerShell the response is almost always the same, "yea i have been meaning to learn that but. This really saddens me for 2 reasons,  -1) Because PowerShell can and does make your life simpler  -2) i am already seeing peoples jobs get replaced when they fall behind in the skill and as more and more companies move closer to automation it will only get worse.  - -It saddens me even more so when I see co-workers who i have taken the time to write the scripts to improve the speed of resolution not use them either. then wounder why i am able to fix the same issue in a fraction of the time they have.  - -As you probably guessed from the title i am talking about people in the world of desktop technicians. the , in my opinion, unsung heroes of IT support.  -Powershell is not just for system admins, the local desktop guy can make his life much simpler by scripting out the simple stuff to save you time and money.  -here is an example,  -one of our clients has an issue with network printers getting jammed up if they do not print PDF documents as an image, once I had to do 3 or 4 of these i decided this took to long to fix, since we have to stop the print spooler, delete all the Print jobs and then restart then spooler again, and when you have 20-30 PCs to do this on i am sue you can guess this takes up a lot of our time. so I wrote a script to solve the issue, and it is really simple as well  - - - - -`/** - * function Start-Error49FixV3 -{ - [CmdletBinding()] - [OutputType([int])] - Param - ( - # Enter the Hostname of the Target PC(s) - [Parameter(Mandatory=$true, - ValueFromPipelineByPropertyName=$true, - Position=0)] - [string[]]$Computername - ) - Begin - { - } - Process - { - foreach ($Computer in $Computername) -{ - Invoke-Command -computername $Computer -ScriptBlock {Stop-Service -Displayname "Citrix Print Manager Service"} - Invoke-Command -computername $Computer -ScriptBlock {Stop-Service -Name spooler -force} - Remove-Item -Path \\$Computer\c$\Windows\System32\spool\PRINTERS\* -recurse - Invoke-Command -computername $Computer -ScriptBlock {Start-Service -Displayname "Citrix Print Manager Service"} - Invoke-Command -computername $Computer -ScriptBlock {Start-Service -Name spooler} - Get-Service -Computername $Computer -name Spooler | Select name,status,$Computer | sort $Computer |format-table -AutoSize - Get-Service -Computername $Computer -Displayname "Citrix Print Manager Service" | Select name,status,$Computer | sort $Computer |format-table -AutoSize -} - } - End - { - } -} - */ -`This simple line of Code was able to turn this process from being done after hours to a normall 20 minute fix for most of the clients locations, not only allowing us to get back to other issues faster but also helpinn to make the client happy since they no longer ad to wait a day for the printer to get backup and running. -This is just one example, i could fill up your PC with other even simpler examples but instead i would rather show you. so over the course of the blog I am going to introduce you to a verity of topics from how to right clean code, how to test it safely, and lastly how to get a devops platform discussion into your work place for this so your code can get properly validated and confirmed safe in the environment. -also if you have any questions on anything to do with PowerHhell feel free to drop it in the comments below or e-mail me @ Brian.Bourque@live.com -until next time guys happy scripting diff --git a/content/articles/2015-07-28-powershell-summit-na-2016-call-for-topics-coming-soon.md b/content/articles/2015-07-28-powershell-summit-na-2016-call-for-topics-coming-soon.md deleted file mode 100644 index dbe37ddc6..000000000 --- a/content/articles/2015-07-28-powershell-summit-na-2016-call-for-topics-coming-soon.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: PowerShell Summit NA 2016 – call for topics coming soon -authors: - - Richard Siddaway -date: "2015-07-28T15:28:45+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2015/07/powershell-summit-na-2016-call-for-topics-coming-soon/ ---- - -The North American PowerShell Summit 2016 will take place at the -Meydenbauer center in Bellevue WA. on April 4-6 2016. The Summit is a community event, with community based speakers. That means we need **you **to submit sessions. Members of the PowerShell team will be attending, and speaking, as in previous years as will a number of PowerShell MVPs. One of the goals of PowerShell.org is to help build the PowerShell community and that means helping and developing new speakers. You don't have to be an established speaker to present at the Summit - just knowledgeable about your topic and enthusiastic about PowerShell. - - -We'll be posting the official "Call for Topics" next week. This is a warning to get you thinking about topics you can present at the Summit.  Standard sessions are 45 minutes with Q&A though expect discussions to continue over coffee. - -This year we're expecting to be able to cover at least some of the hotel room costs for speakers - more details next week. - -In the mean time - start thinking of those ideas and be ready to submit them when we open up the event site for speaker submissions. Established expert or new-comer - we need your sessions to make the Summit work. We've had 3 excellent NA Summits so far - your session will help make 2016 the best one yet. diff --git a/content/articles/2015-07-29-2015-july-scripting-games-wrap-up.md b/content/articles/2015-07-29-2015-july-scripting-games-wrap-up.md deleted file mode 100644 index dc9911112..000000000 --- a/content/articles/2015-07-29-2015-july-scripting-games-wrap-up.md +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: 2015-July Scripting Games Wrap-Up -authors: - - Don Jones -date: "2015-07-29T17:39:26+00:00" -categories: - - Scripting Games -aliases: - - /2015/07/2015-july-scripting-games-wrap-up/ ---- - -The [July puzzler][1] wasn't intended to break your brain - but it was intended to highlight an extremely important pipeline technique - and to make you think about how PowerShell parses command lines. Let's begin with our Celebrity Entry, from Boe Prox. We think you'll discover some interesting new techniques in this answer - and learn from understanding how he got there. - -# Celebrity Entry - -The 2015 Scripting Games have started and have taken a different route this year in that we are they are running a monthly puzzle vs. the usual format. That being said, I was asked to be a celebrity contestant and put together my solution as well as adding my thoughts (I promise to try and stay on a clear path) and various routes that I took to get to my final solution. - -The event, while seemingly simple, did cause me to spend some time trying to whittle down the number of characters to try and get as few as possible (because shorter code, while harder to read is always fun to write ;)). - -The rules of engagement for this particular puzzle are as follows: - -_Write a one-liner that produces the following output (note that property values will be different from computer to computer; that’s fine). _ - -**_PSComputerName ServicePackMajorVersion Version  BIOSSerial  _** - -_By definition, a one-liner is a single, long command or pipeline that you type, hitting Enter only at the very end. If it wraps to more than one physical line as you’re typing, that’s OK. But, in order to really test your skill with the parser, try to make your one-liner as short as technically possible while still running correctly._ - -That’s not all though, here are some extra pieces to make it a little more challenging; - - * Try to use no more than one semicolon total in the entire one-liner - * Try not to use ForEach-Object or one of its aliases - * Write the command so that it could target multiple computers (no error handling needed) if desired - * Want to go obscure? Feel free to use aliases and whatever other shortcuts you want to produce a teeny-tiny one-liner. - -Now that we have all of this understood, it is time to start looking at how I am going to handle this. - -I know already that I need to look at WMI as my source to pull this information. PSComputername is already available when I use Get-CIMInstance to handle my query. - -The first thing that I need to do is that in order to pull both the **ServicePackMajorVersion** and **Version** I need to use the Cim_OperatingSystem class (it has everything I need from Win32_OperatingSystem, but at fewer characters!), but then I have the BIOSSerial property which happens to exist on the Win32_BIOS class. If I intend to overcome the _only use 1 semicolon_ challenge and also make this a one liner, I need to start thinking of a good workaround. Fortunately, a workaround exists in creating a custom property that will define the BIOSSerial label and then performs a query to the class that returns the serial number. - - -`Get-CIMInstance -Class Cim_OperatingSystem | -Select-Object PSComputername,ServicePackMajorVersion,Version,@{Label='BIOSSerial';Expression={(Get-CIMInstance -Class Win32_BIOS).SerialNumber}} -`This works great and also ensures that I only have a single semicolon to boot! At this point I technically have a submission that works…but it is missing a few things extra that would really meet all of the requirements to include being able to target multiple systems as well as shrinking the code down to its smallest possible size while still retaining its functionality. - -## **Handling Multiple Systems** - -First off is the concept of -allowing for multiple systems - (remember that this was one of the challenge requirements). I wanted something that would be dynamic enough to where I wasn’t hard coding a host file or computer names into the script. - -I thought I could get away with this using Read-Host, but unfortunately for me, it displays everything as a single string, not an array of strings that I had hoped for.  - - -`(Read-Host ' ').GetType().Fullname -`That pretty much threw out one idea that I had until I had the idea of splitting the comma (which would be the common character to use with building a collection of items) if it was used with Read-Host and instantly this is back in the game! I also realized that I just needed to give a single character (that wasn’t a single or double quote) to knock out a couple of characters for the prompt. - - -`(Read-Host .).split(',') -`I almost thought that I had this done until I did a little more research. Sure enough, there is a better approach to be had here in the form of **Echo**, which happens to be an alias for Write-Output. If nothing is supplied to it, it prompts for input and continues to do so until you hit return on an empty line which means…you guessed it…instant collections that can be passed to the command! - -That really knocked down my character count! - -## **Shrinking Cmdlets** - -Obviously, this is where aliases begin to come into play. I start knocking down my cmdlets to get them as small as possible. Get-WMIObject becomes gwmi and Select-Object becomes Select. Next up I can take my custom property and bring Label down to just ‘l’ and then make Expression ‘e’.  Because it was not explicitly mentioned that we would be outputting this to a file or doing anything else with it, I am going to instead use Format-Table, or more appropriately, its alias of **FT** to further reclaim the valuable character count. - - -`FT @{l='BIOSSerial';e={(gcim -Class Win32_BIOS).SerialNumber}} -`As a bonus to this, I am also going to use the smallest possible property names with wildcards to still have the proper display but much fewer characters. - - -`ft PSC*,*aj*,V*,@{n='BIOSSerial';e={(gcim Win32_BIOS).SerialNumber}} -`## **Shrinking Parameters** - -Getting there… Parameters also will sometimes have their own aliases that can be used, so –Computername can become –cn and –Class can be knocked down to –cl without fear of running into the dreaded ambiguous parameter error. But why stop at shortened parameter names when positional parameter can be much more fun while at the same time squeezing out more characters in my attempt to make this as small as possible. Using gwmi, we have the positional parameter for the –Class parameter meaning that we can specific the class first and the cmdlet will process it just as though we specified the parameter name. - -## **Positional Parameter** - -Parameter aliases are nice and all, but if I want to continue to shrink down my command, I need to look at parameters by position. With Get-WMIObject, I only have one option for a positional parameter with –Class (which happens to be as position 0). –Computername is unfortunately not a positional parameter (as shown in the image below) in the way that I can just have it right after –Class. - - -`(Get-Command Get-CimInstance).Parameters.GetEnumerator()|ForEach{ - $Param = $_.Key - $_.Value.Attributes|ForEach{ - If ($_.TypeId -eq [System.Management.Automation.ParameterAttribute]) { - [pscustomobject]@{ - Name=$Param - Position=$_.Position - ParamSet=$_.ParameterSetName - } - } - } -} -`But…it turns out Computername is an accepted value via the pipeline, so now I can go that route and not have to worry about specifying any parameters in my one liner! - -What I ended up with is the following submission (I’ve broke this out at a natural line break for the sake of readability): - - -`echo|gcim cim_operatingsystem| -ft PSC*,*j*,V*,@{n='BIOSSerial';e={(gcim Win32_BIOS).SerialNumber}} -`This one liner is **97** characters in length (woo hoo!) with the various aliases being used, removing any unnecessary white space in between things such as the pipe (|) and commas. I also ensure that the output is exactly what was shown in the example for the event. My victory was short lived however. - -Did you notice what I was missing here in this approach? I didn’t realize this until I was at the end of this article that I was only querying the local system for the BIOS. With that issue, I quickly fixed it (at the cost of more characters) and now have something that comes in at **105 characters** -and - meets the requirements and challenges. - - -`echo|gcim cim_operatingsystem| -ft PSC*,*j*,V*,@{n='BIOSSerial';e={($_.csname|gcim Win32_BIOS).SerialNumber}} -`## **Side Note on Invoke-Command** - -I could have went with Invoke-Command (using icm an alias) but the problem lies with the output object that includes Runspaceid which obviously would not meet the requirement of this puzzle. - -With that, I look forward to seeing what everyone else has put together and learning some awesome ways of accomplishing this puzzle including who can put together an insanely short command that meets all of the design criteria! - -# Official Answer - -While there's no one right way to accomplish this task, our puzzle author obviously has an answer in mind. Here it is: - - -`gwmi win32_operatingsystem | select pscomputername,servicepackmajorversion,version,@{n='BIOSSerial';e={gwmi win32_bios | select -expand serialnumber}} -`This solution doesn't hit all of the additional challenges, but it perhaps makes it clearer to see the most important bit: using a custom property to execute a second query, and extracting the results of that query into the custom property's value. Boe's celebrity solution, above, is a much more concise version of this, and meets many more of the optional challenges! - -# Interesting Submissions - -Stephen Testino had an interesting approach: - - -`gwmi win32_operatingsystem -co @(".") | select *pu*, *j*, v*, @{n="BIOSSerial";e={(gwmi win32_bios -co $_.csname).serialnumber}} -`Here, you're seeing the value in using wildcards with Select-Object. Stephen also saved a little space by not using Select-Object and -ExpandProperty to get the SerialNumber property's contents; instead, he used a parenthetical expression. A but harder to read, perhaps, but more concise in this case. You might argue that the addition of the -ComputerName parameter isn't necessary, since the local computer is already the default; creating a one-element array was also unnecessary because PowerShell would have done that anyway. - -"powershelleanpeoplesfront" offered one of the Invoke-Command approaches we saw: - - -`icm{gwmi cim_operatingsystem|ft psc*,*j*,v*,@{n='BIOSSerial';e={(gwmi win32_bios).SerialNumber}}}-cn . -`Basically the same idea. In this case, Format-Table is being used as an alternate for Select-Object. Within the scope of the puzzle, they're doing the same thing; the only downside to using Format-Table is that the output can't then be piped on to very many other cmdlets. So in a more real-world scenario, Select-Object offers more flexibility. - -Paal had one of the "who cares about the optional challenges?" answers (which is totally fine, as it's a lot easier to read!!!) - a lot of people came up with something similar to this. - - -`# https://powershell.org/2015/07/04/2015-july-scripting-games-puzzle/ -Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName $Computers | Format-Table -AutoSize PSComputerName,ServicePackMajorVersion,Version,@{l="BIOSSerial"; e={(Get-CimInstance -ClassName Win32_BIOS -ComputerName $_.PSComputerName).SerialNumber}} -`Again, note the use of Format-Table. Within the scope of this puzzle, it's fine - but make sure you know why Select-Table can do more or less the same thing, and how it differs from formatting. - -Joshua Wortz used pipeline input to save some space: - - -`@('Comp1','Comp2')|gcim win32_operatingsystem|ft PSC*,*j*,V*,@{N="BIOSSerial";E={(gwmi win32_bios -cn $_.pscomputername).serialnumber}} -`By piping in the computer names, you eliminate the need to manually specify -ComputerName. However, Joshua could have eliminated the **@()** array construct; PowerShell usually treats comma-separated strings as arrays anyway, so you'd reduce your character count by three more that way. With the Win32_OperatingSystem class in particular, you also get a CSName property that could be used instead of PSComputerName, for ad additional reduction in character count. You'll notice that some entries used CSName, probably for that reason. The PSComputerName property wasn't added until PowerShell 3, also. - -Stephen Owen [posted an entry that included his thoughts][2], and that's something _everyone_ is welcome, and encouraged, to do. It's super-useful to everyone in the community to see your thought process as well as your solution! Stephen also had the same learning moment that Boe had, which was that the output of Read-Host is a single string, not the array you need in order to feed the names to a parameter. That's valuable knowledge! Several others, based on their solutions' use of -Split or the Split() method, learned the same thing. - -"kvprasoon" has an absolutely unique approach: - - -`foreach($O in "Win32_operatingsystem","win32_bios"){if($O -eq "win32_bios"){$r+=(gwmi $O|select @{E="Serialnumber";L="BIOS Serialnumber"},Pscomputername,@{E={$r.servicepackmajorversion};L="servicepackmajorversion"},@{E={$R.version};L="version"})} else{[array]$r+=(gwmi $O|select @{E={""};L="Serialnumber"},Pscomputername,servicepackmajorversion,version)};$R[1]} -`I think that's probably _way_ more code than anyone else wrote, and having it as a one-liner makes it pretty tough to read, but it's definitely an interesting approach. I think, though, that this demonstrates how _not_ to use the pipeline in PowerShell. This is really structural code, and it doesn't let PowerShell do most of the work that it's willing to do. But hopefully everyone can learn a little bit by comparing this to some of the more commonly offered patterns, including those I've shared here. For the record, the same user also posted other, better solutions; in the future, we ask folks to post just one submission, to make the read-through a little easier. - -I hope everyone found this puzzle to be fun, a little challenging, and perhaps learned something new. Two notes going forward: - - * **Please post only one solution. **Keep in mind that you can always go back and edit your Gist, and we'll always pull the most recent one, so there's no need to re-post a new solution if you want to change something. - * **Please use Gists, as indicated in the instructions. **That's different from a regular GitHub URL, and it's not the same as just pasting code into a comment.  - -If you're a blogger, you are **more than welcome** to create a blog article about your solution; just add that article's URL to the comment with your Gist URL. - -See you in a little bit with next month's puzzle! - - [1]: https://powershell.org/2015/07/04/2015-july-scripting-games-puzzle/ - [2]: https://gist.github.com/1RedOne/e2a89f1a2ec5413d2c37#file-july-2015-powershell-challenge diff --git a/content/articles/2015-07-29-even-vaguely-considering-powershell-cruise-read-this-right-now.md b/content/articles/2015-07-29-even-vaguely-considering-powershell-cruise-read-this-right-now.md deleted file mode 100644 index 8bac13738..000000000 --- a/content/articles/2015-07-29-even-vaguely-considering-powershell-cruise-read-this-right-now.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: "[UPDATED] Even Vaguely Considering PowerShell Cruise? READ THIS RIGHT NOW." -authors: - - Don Jones -date: "2015-07-29T19:02:14+00:00" -categories: - - Announcements -aliases: - - /2015/07/even-vaguely-considering-powershell-cruise-read-this-right-now/ ---- - -It's no secret that I'm a big fan of next year's [PowerShell Cruise][1] and am excited for the folks who are organizing it. Tonight's [webinar][2] (which they'll post to their YouTube channel) will be a chance for you to learn more. - -But. - -If you've never cruised before, you may not be aware of how the majority of the cruise industry works: - - * Your cruise price includes your room, and is based on two people staying in the room together. - * Your cruise price includes most food on the ship - certain specialty restaurants may charge a la carte like a normal restaurant, or may have a small ($25-ish) per-person charge to dine there. If they have the per-person charge, everything on the menu is  then included at no extra charge. - * Your drinks cost extra - everything but water, tea, and plain coffee in most cases. Even soda is an extra price. - -That's why I want you to think **really really hard** about what I'm going to write next. - -If you **put a deposit down for the cruise before Friday July 31 2015, you can get all beverages included for just $68 extra per person. **That's all your soda. All your drinks (including cocktails up to $15 each). If you plan to have one nice glass of wine per day, and then drink cola, this will pay for itself easily.  - -The deposit is $250 per person, meaning $500 per stateroom. And it's fully refundable - **you can get the entire deposit back** - until April 2016. **So you don't need to make up your mind yet, **but if you don't do the deposit **now** you can't get the cheap drink package. Sure, you could buy it later, but it'll run you another $350 or so per person, I believe.  - -Even if you're planning to take the kids, they can get the drink package too - it'll cover their soft drinks for the entire cruise.  - -So look - I don't want anyone to miss this opportunity just because they... well, _missed_ it. And keep in mind, this is the _first of a kind event, _and there will be swag to prove you were there. So there's a lot of reasons to _at least consider going_ - and if you're considering it, get that deposit in _right now_ so you can score the drink package, at the very least. [Call the travel agency that's handling the bookings][3] (don't e-mail, you want this done _now). _ - -Thank you. This ends the public service announcement. Resume shelling. - - [1]: http://poshcruise.org - [2]: https://t.co/StJPSxbexE - [3]: http://poshcruise.org/booking.html diff --git a/content/articles/2015-07-31-introduction-to-powershell.md b/content/articles/2015-07-31-introduction-to-powershell.md deleted file mode 100644 index 383c24cbf..000000000 --- a/content/articles/2015-07-31-introduction-to-powershell.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Introduction to Powershell -authors: - - Stephen Moore -date: "2015-07-31T11:07:47+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/07/introduction-to-powershell/ ---- - -Hi Guys, - -I'm going to have a PowerShell ramble on a semi regular basis. What prompts me to write here on powershell.org is that I love powershell. I makes my job so much better. I'm an IT Pro and work for a large ish world spanning company. I mostly work with windows servers but get to work with other technology too. Like VMware and Citrix for example. The other thing I want to point out is that I'm not a programer. I don't know VB Script and no one taught me -PowerShell -. There are many people though that helped me on my PowerShell Journey through their books, blogs, postings, and videos.  - -I want to spread the word of PowerShell. I want people to understand that it helps in so many ways. I've learned about wmi, .net classes and all the properties of an AD object. This helps me understand the computers I work with every day. With a GUI these things are under the hood and no one needs to know too much about them. With  -PowerShell you naturally learn about these things as you come across them. Didn't know that you can install VMware tools without having to restart? Well if you use PowerShell there's a switch that stands out that makes it obvious.  It makes life easier. - - -One thing I really love about  -PowerShell is that it is very consistent (well mostly). So once you learn the basics anything else you want to do is kind of the same. I don't need complication. I have so many technologies to learn ( the System Center Suite comes to mind) that I really don't want to waste my time learning where in the GUI Microsoft have hidden what I'm looking for this time. You see, I have always thought computers existed for a reason. To automate things. To do the work for us. To make life easier. We have i7 processors. They are so powerful.. just amazing. So why as an admin would you want to be clicking on menus and buttons. Hit the PowerShell go button and let the computer do all the work. It's liberating! - - -Now I know what some people think. It's too hard. And it is hard. There are people that are so good at powershell that it just blows me away. But what I want to stress is that you don't have to be that good. You can be, but you don't have to be. So take it one step at a time and then it's not so hard. But it's like a snow ball rolling down hill. If you use it your knowledge will grow exponentially. So I want to stress 3 things this week. - -1.   You _can_ learn  -PowerShell. - - -2.    -PowerShell has a shell..... Don't know what a shell is? It's a window into the operating system that lets you communicate with it.  So open PowerShell and start communicating. Always have the shell open. If you want to open the temp folder on C drive. Type invoke-item c:\temp and press enter. Now you think of something to do! One step at a time. If you're not in a hurry try and find out how to do it in powershell. Remember you are just starting out so don't be hard on yourself. - - -3.   Of course  -PowerShell is a scripting language as well. So think of something to automate. Maybe there is a process you have to restart everyday. That old server with the legacy app. Automate it! It will be a great first script. And don't forget that you can use scheduled tasks to help with the automation. And it's not that hard to send an email letting you know it's been done with the send-mail cmdlet. Enjoy. Don't start with something critical. - - - - -I haven't told you specifically how to do things on purpose. There are heaps of books, technet articles and other plog posts. Google is your best friend. (sorry Bing). So today I got an alert from Operations Manager telling me a C drive on a server was running out of space. It wasn't the usual suspects like a large profile or log files etc. I didn't want to look through every folder and I can't use programs like treesize for policy reasons. So I wrote a quick script that looped through all the folders, measured the length of the files, added them together and let me know where the space had gone. I used Google. And I confess I do not understand 100% how the cmdlet for measuring stuff works. You're probably smarter than me so don't worry.  I can worry about that later. I worked out how to use it to do what I wanted. That was enough for today. I got the job done and the Server fixed. I don't know how I would have found the solution without  -PowerShell. In case you are curious the little script looked like this. Open the Powershell ISE. Make sure under view you change it so you can see the scripting pane. Poke around.... explore, you'll find it.  - - - - - -# so this bit gets the names of all the directories and stores them in a Variable called $folders. I know! It's so cool! - - -$folders = Get-ChildItem \\Yourservername\C$\windows -force | where {$_.mode -like "\*d\*"} - - - -#And this bit goes through each one and counts the file lengths adding them together. It prints out the name of the folder followed by how big it is. Powershell is like magic, what can I say. - -foreach ($folder in $folders) - -{ - -$folder.name - -$colItems = (Get-ChildItem "\\ -Yourservername -\C$\windows\$($folder.name)" -Recurse -force | Measure-Object -Property length -Maximum -Minimum -Average -Sum) - -"{0:N2}" -f ($colItems.sum / 1MB) + " MB" - -} - - - -Now there are many different ways to write the same script. For me the important thing is that I understand it. In more permanent or bigger scripts in production make sure you explain each part of the script in detail. # lets you write in the script without powershell reading it when it's running the script. Keep this script. Start a collection of all your scripts. You can safely keep them all in a folder in text files. And always test scripts first!!!. Do not just run them. As a rule of thumb though if the cmdlet is get-..... then you are safe enough. The get- cmdlets just read information and then display it for you. For example get-ADuser -filter \* will just give you a list of all your users in Active Directory. If you use remove-ADuser -filter \* the results will be far more tragic... (Please don't try it!) - - - -Thanks for reading. Comment if you feel you want to. The blogs is titled introduction to -PowerShell. Should be called introduction to blogging....  -It's my first ever blog so sorry if it's a bit rough. I'll write some more PowerShell insights next week. I sincerely hope you start your  -PowerShell journey or continue with it. The rewards are definitely worth it.  - - -Steve diff --git a/content/articles/2015-08-01-august-2015-scripting-games-puzzle.md b/content/articles/2015-08-01-august-2015-scripting-games-puzzle.md deleted file mode 100644 index b9e8b65c8..000000000 --- a/content/articles/2015-08-01-august-2015-scripting-games-puzzle.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: 2015-August Scripting Games Puzzle -authors: - - Don Jones -date: "2015-08-01T13:10:40+00:00" -categories: - - Scripting Games -aliases: - - /2015/08/august-2015-scripting-games-puzzle/ ---- - -Our August 2015 puzzler tests your ability to retrieve data from the Web. If you've never done this before, it can be a real brain-bender - but don't overthink it; experts can probably pull this off in a one-liner if they're using a newer version of PowerShell! - - - -## **Instructions** - -The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month's puzzle. You can find them all at https://powershell.org/category/announcements/scripting-games/. Many puzzles will include optional challenges, that you can use to really push your skills. - -**To participate**, add your solution to a public Gist (http://gist.github.com; you'll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post.  -**Only post one entry per person. You are not allowed to come back and post corrected or improved versions. If you do, all of your posts will be ignored. **However, remember that you can always go back and edit your Gist. We'll always pull the most recent one when we display it, so there's no need to post multiple entries if you want to make an edit. - - -Don't forget the [main rules and purpose of these monthly puzzles][1], including the fact that you won't receive individual scoring or commentary on your entry. - -**User groups are encouraged to work together** on the monthly puzzles. User group leaders should submit their group's best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most "favorite" entries of the year will win a grand prize from PowerShell.org. - -##   - -## **Our Puzzle** - -At www.telize.com/geoip, you'll find a JavaScript Object Notation endpoint. It's public. Your goal is to get PowerShell to display something like the following (because this is based on _your_ IP address, the property values will be different than what's shown here): - - -`longitude latitude continent_code timezone ---------- -------- -------------- -------- --115.1685 36.2212 NA America/Los_Angeles -`Being able to query information from the Web - often in XML or JavaScript Object Notation - is an important integration skill. PowerShell can actually make it pretty easy. Although this challenge _can_ be solved using a one-liner, you could also go further and write a complete "Get-GeoInformation" function around it. However, keep in mind that a function would not normally (a) limit the data that's output or (b) pre-format the data. Why not? - -**Challenges:** - - * Try to do this in a one-liner, but spell out all command and parameter names. - * Write an advanced function that provides a complete Get-GeoInformation "wrapper" around this endpoint. - * Along with your entry, include the endpoint for another XML or JavaScript Object Notation web service that you think is cool, along with a brief notation of what it does - - - - [1]: https://powershell.org/?p=2574 diff --git a/content/articles/2015-08-03-powershell-summit-north-america-2016-call-for-topics.md b/content/articles/2015-08-03-powershell-summit-north-america-2016-call-for-topics.md deleted file mode 100644 index d6a188a01..000000000 --- a/content/articles/2015-08-03-powershell-summit-north-america-2016-call-for-topics.md +++ /dev/null @@ -1,399 +0,0 @@ ---- -title: PowerShell Summit North America 2016 – Call for Topics -authors: - - Richard Siddaway -date: "2015-08-03T16:39:58+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2015/08/powershell-summit-north-america-2016-call-for-topics/ ---- - -** - -PowerShell Summit NA 2016 – Call for Topics - -** - - - - -The PowerShell Summit is the number one conference where PowerShell enthusiasts gather and learn from each other in fast-paced, knowledge packed presentations. PowerShell experts from all over the world including MVP’s, Guru’s, community leaders and PowerShell team members, will once again join together for a few days in Bellevue, WA. to discuss and learn about maximizing PowerShell in the workplace. If you want to share your PowerShell expertise or story, then this is your official call to submit presentations for selection! - - - - - -PowerShell Summit North America 2016 will be held 4-6 April in the Meydenbauer center, Bellevue WA. - - - - - -** - -Topic Areas – What we are looking for - -** - - - - -We are looking for 45-minute presentations covering a wide aspect of PowerShell expertise. We have two main topic areas that may assist you in building an abstract. - - - - - -PowerShell Internals – A deep look into the inside workings of PowerShell and practical solutions that are built from them. These presentations are typically more directed to the PowerShell development community that is building extensions and solutions relating to PowerShell. - - - - - -PowerShell Features Deep Dive – These presentations are a deep look into configuring and working with PowerShell features and capabilities such as Remoting, Desired State Configuration and more. These presentations tend to be more IT Pro focused. - - - - - -We are open to presentations across the entire ecosystem that has been built around PowerShell; so don’t hesitate to send an abstract for your particular area of expertise. This includes Microsoft platforms and products that have PowerShell-based management tools as well as 3rd parties such as VMware. New topics will be preferred over recycling of older topics – look to see what’s new in PowerShell 5.0 and use the questions on PowerShell.org to spot areas of confusion that could supply a good session for the Summit. - - - - - -_ - -We may consider double length sessions, but only in exceptional cases. Please contact us – - -_[_ - -summit@powershell.org - -_][1]_ - - – with your idea before spending too much time developing such a session. - -_ - - - - -** - - What kind of sessions get selected? - -** - - - - -We’re looking for sessions that go beyond – way beyond – “beginner.” If you want to see examples of the depth we’re looking for use the recordings on the PowerShell.org Youtube channel from the PowerShell Summit Europe 2014, or PowerShell Summit NA 2015 as a guide. We look for an abstract that’s compelling and makes us salivate to see your session – so spend time writing a punchy abstract! We want sessions that offer real-world usability combined with “wow, nobody talks about THAT” awesomeness. If in doubt aim high, very high. Remember, Summit sessions are recorded, so if you’ve previously presented a topic at a Summit, we’re less likely to choose it for another Summit. We want sessions that are challenging, and that ideally present things that simply aren’t explained or documented elsewhere. New modules, new techniques, and crazy approaches are all welcome. Discussion-format sessions are great, too, especially if you plan to turn them into a community deliverable (like a “best practices for writing DSC Resources” session that gets turned into a free e-guide later). Think community, deep dive, engaging, and amazing as keywords. We want attendees to finish each day with information leaking… just a little bit… out their eyeballs. Help us make it happen. - - - - - -_ - -If you have any doubts about the suitability of a particular session please contact us - - -_[_ - -summit@powershell.org - -_][1]_ - - – we’re always happy to discuss proposed sessions. - -_ - - - - -We do have some goals for speaker selection, too. We obviously have, and appreciate, the great involvement we get from the product team. We aim to have a certain number of sessions from well-known members of the community, simply because they’re well-known for a reason – they do a great job! But we also set aside slots for newcomers who’ve never presented before, or who’ve maybe only presented once or twice before – the audience will judge you on content not style. We want to create opportunities for more folks to become engaged and active in our community, and the Summit is a great way to do that. - - - - - -We aren’t looking for soft-skills sessions, like “how to get a new user group running,” although contact us via email (summit@powershell.org) if you’d like to do something like that as an extra evening thing after the main content wraps for the day. - - - - - -Please note all sessions are to be delivered in English. Presenter will provide all equipment needed to deliver session(s), including a laptop or other computer. Presenter must be able to provide video by means of HDMI, DVI-D, or DisplayPort connectors – VGA is **NOT** supported. Presenter must be able to manually select an appropriate screen resolution for video output. Typically, 1024×768 or 1280×720 are preferred. - - - - - -** - -How to submit abstracts of presentations - -** - - - - -Presentations will be 45-minutes in length and the submission should include the following: - - - - - -Presentation Title - - - - - -Presentation abstract – a description of the presentation and the topics covered. 250 words or less and suitable for marketing. - - - - - - - - - - -Go to - -[ -https://eventloom.com/event/register/PSNA16/Speaker?preregister=1 -](https://eventloom.com/event/register/PSNA16/Speaker?preregister=1) - -. - - - - - - - - -This is the only valid URL for pre-registration. Provide your e-mail address, password, and confirm password. You’re creating a new account, even if you’ve attended past Summit events. - - - - - - - ** - -DO NOT ATTEMPT TO REGISTER FOR THE SUMMIT AS AN ATTENDEE AT THIS STAGE – WE WILL BE OPENING REGISTRATION IN NOVEMBER 2015. ANY NON-SPEAKER REGISTRATIONS WILL BE DELETED. - -** - - - - - - - - -Click Abstracts on the top menu - - - - - - - - -Click SUBMIT ABSTRACT - - - - - - - - -Enter Title and Description. - - - - - - - - -Click SUBMIT - - - - - - - - -Provide a title and description; descriptions must be 50-250 words. Set the Status to “Ready to Review” when you are ready to send your session to us for consideration. - - - - - - - - -To return to the site at a later time, go to - -[ -https://eventloom.com/event/login/PSNA16 -](https://eventloom.com/event/login/PSNA16) - - - - - - - - -Click Log In. You can then re-visit Abstracts. - - - - - - - - -Note that you must set your abstract status to **Ready for Review** or we won’t see it. If you leave it in **Pending, **it won’t be considered. - - - - - - - - -You can submit multiple presentations in the same topic area or for different ones. Be aware that even though the session length is 45 minutes we prefer to have at least 10 minutes set aside for questions. Summit presentations are intense and intimate often with plenty of audience interaction. You must expect questions and discussions. This is not a “lecture to the audience” event. Also because of the session length, generally co-presenters are unnecessary, but that is not a requirement. - - - - - - - ** - -Presentation submission deadline – When you should send it by - -** - - - - - - - - -Start sending your presentation submissions immediately! The selection committee will start selecting presentations as soon as they arrive so you don’t want to miss out. The last day we will accept presentation submissions will be **Thursday 1 October 2015**. This is a **hard** deadline – no sessions will be accepted after this date. - - - - - - - ** - -When you will know you’ve been selected - -** - - - - - - - - -The selection committee will start reviewing submissions immediately and begin the selection process. You will be informed if one or more of your presentations have been selected and notified by Thursday 15 October 2015. - - - - - - - - -You will need to log back onto the event site and complete your registration with the code we will provide in the notification email. This will have to occur before 31 October 2015 so that we have a completed agenda in time for attendee registration. - - - - - - - - -Speakers, with accepted sessions, will be given free admission to the event, including attendance at all official Summit activities. However, AWPP membership is not included. Speakers may not bring guests to the day sessions or evening events. We have a limited budget, and the number of speakers selected will be partially governed by that budget. - - - - - - - - -Pre-registering does not guarantee you a place at the event. Pre-registration is until 1 October 2015. Final session selections will be made by 15 October 2015, and you will be notified of accepted/unaccepted sessions. - - - - - - - - -If at least two sessions are accepted, you will be asked to immediately make a reservation at our speaker hotel. You will be given our group code, and we will directly pay for up to 3 nights’ lodging. Any additional nights are your responsibility as are travel and other costs. - - - - - - - - - -If any sessions are accepted, you will be asked to immediately complete your Summit registration using a free promotional code. If you do not complete your registration by 1 November 2015, then we will assume you do not wish to present and your sessions will be cancelled, and the slots offered to another speaker. - - - - - - - - - -If no sessions are accepted, then your pre-registration will be deleted. Beginning 1 November 2015 and through 4 March 2016, you are welcome to create a new account and register as a standard attendee on a space-available basis. - - - - - - - - - -The final agenda will be announced and posted on PowerShell.Org on, or about, Sunday 1 November 2015. - - - - - - - - -We look forward to your submissions and your help in making PowerShell Summit North America 2016 the most valuable IT/Dev conference of the year building on and surpassing the previous Summits! - - - - - - - [1]: mailto:summit@powershell.org diff --git a/content/articles/2015-08-05-mspsug-virtual-meeting-conquering-azure-and-office-365-with-powershell-august-11th-2015.md b/content/articles/2015-08-05-mspsug-virtual-meeting-conquering-azure-and-office-365-with-powershell-august-11th-2015.md deleted file mode 100644 index 4ef5c9794..000000000 --- a/content/articles/2015-08-05-mspsug-virtual-meeting-conquering-azure-and-office-365-with-powershell-august-11th-2015.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "MSPSUG Virtual Meeting: Conquering Azure and Office 365 with PowerShell – August 11th 2015" -authors: - - Mike F Robbins -date: "2015-08-05T14:49:49+00:00" -aliases: - - /2015/08/mspsug-virtual-meeting-conquering-azure-and-office-365-with-powershell-august-11th-2015/ ---- - -Join the Mississippi PowerShell User Group virtually on Tuesday, August 11th at 8:30pm Central Time when SharePoint MVP [Todd Klindt](http://www.toddklindt.com/blog/default.aspx) will present “ -_**Conquering Azure and Office 365 with PowerShell **_ -”. - - -After years and years of anticipation, 2015 might end up actually being the year of the Cloud. With any new technology comes the opportunity to tame it with PowerShell. In this session Todd will give you an overview of the PowerShell options you have when interacting with Office 365 and Azure. He’ll go over how to get them installed in your environment. Then he’ll walk you through getting them connected to Office 365 and Azure and actually doing some work with them. Finally he’ll show you some tricks to get around the limitations. When this session is finished you’ll be armed with all the information you need to fire up PowerShell and wrangle Office 365 and Azure AD into submission. - - -Visit the -[Mississippi PowerShell User Group](http://mspsug.com/2015/08/02/mspsug-virtual-meeting-conquering-azure-and-office-365-with-powershell-on-tuesday-august-11th-at-830pm-cdt/) -website to learn more about Todd and to find out more details about this month’s meeting. - - -The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info](http://mspsug.com/attendee-info/)” section. - -Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this meeting. - -µ diff --git a/content/articles/2015-08-07-what-are-variables-anyway.md b/content/articles/2015-08-07-what-are-variables-anyway.md deleted file mode 100644 index 0f0bb25e6..000000000 --- a/content/articles/2015-08-07-what-are-variables-anyway.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: What are variables anyway… -authors: - - Stephen Moore -date: "2015-08-07T09:03:51+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/08/what-are-variables-anyway/ ---- - -Fellow Admins. - -A quick chat if you're new to variables. - -So if you're like me and don't know any other programing/scripting language then all this PowerShell stuff is a bit daunting. So to help, this articles is on -PowerShell Variables. The thing is that Variables in PowerShell are very important. I'm assuming you know what a cmdlet is? The very basic underlying tools that make powershell work. They are like powershell building blocks or bricks in a PowerShell wall. For example, get-aduser gets a list of all the users in AD and includes a few details like SID, name and distinguished name. So that little cmdlet gets all that information, and more once you learn to manipulate it. If cmdlets are the bricks then Variables are the mortar. They hold all this information you have gathered together and let you save and pick and choose what you want. - - -Let's stick with get-aduser as an example. By the way, it's available if you have the AD module installed on your server. It will work out of the box if you try it on a domain controller but you can install it on other servers so you don't have to log  into your DC. The reason it's a good example is that if you have a thousand users then you get 1000 entries in your list when you use the get-ADuser cmdlet. Thats a lot of information and it may take some time for the cmdlet to finish running. Say you want just the names that start with P. And you also want to look at the users who were created in the last week. And you also want to see their email address. This is what a Variable is for. You run the cmdlet once, collecting all the user information, and then you have the information sitting there to use in anyway you want for as often as you want. There is a lot to learn about Variables but the most import thing is you understand the idea. So look at this... - -$ADusers = get-ADuser - -Powershell uses the $ sign to denote a variable. So these are variables. $servers, $comp, $process, and $Itdoesntmatterwhatthenameis. They are just containers - thats it!  And just like any bucket or plastic box you can put a label on it that is anything you like. But it must start with a $ so  -PowerShell knows it's a container. There is a cmdlet called new-variable for creating variables which you can explore but the easiest way is using the = sign. So now all the users in the domain are stored in the variable $ADusers. Let use another example. Say we wanted to work with services. We could use the get-service cmdlet and get a list of all the services on our machine. And if we want to work with them we can store them in a variable. Like this. $myservices = Get-service. So now if we enter $myservices in powershell and press enter, all the services gathered by the get-service cmdlet are listed. - - -[![Services](https://powershell.org/wp-content/uploads/2015/08/Services.png)](https://powershell.org/wp-content/uploads/2015/08/Services.png) - - - -Now we get to work with a variable. Quite a lot of information is in our variable and we want to get some out. This is where we can use a thing called a pipeline. It is a big thing in  -PowerShell. I'm not sure about other languages but for powershell it's like a production line. So we could do something like this. $myservices  | where {$_.name -like "*spool*"}.  That straight up and down bar is like a pipe from one part of the line to the next. They are a bit like filters.  So we have all this information in our variable but we only want to look at the print service. And worse I can't remember what the name of the print service is. Something about spool... No problem though because we told PowerShell to get something* like "*spool" and I'm sure I'll recognise it. - - -So lets have a look at what happens when we run the line of script. - -[![SpoolerSVC](https://powershell.org/wp-content/uploads/2015/08/SpoolerSVC.png)](https://powershell.org/wp-content/uploads/2015/08/SpoolerSVC.png) - -You can do all kinds of things now you have all that information in the variable. We just extract what we want. Maybe you think to yourself...I wonder how many running services I have? Or how many are not running. Don't be concerned with the code you see here, as if you're beginning it is hard to get a handle on it all at once. The point is that the Variable has all this information stored and we can get it out. Variables are great if not essential in scripts as the script can do all these things once it collects the information for the Variable at the beginning.  - -![statuscount](https://powershell.org/wp-content/uploads/2015/08/statuscount.png) - -There is something else about Variables that is really important to understand in PowerShell. And I have to say it took me quite a while to "get it". PowerShell is an Object Orientated language.  It is very important to understand and deserves a blog post in it's own right. It's like saying it's a 3 dimensional language instead of a 2 dimensional language. So when we create a variable we are not just holding a word or a string we are holding an object. And objects are exciting! Because they hold heaps of information (properties)  and another another thing called methods. All of this is inside the variable. In the example above the "name" spooler is a property. It's like naming anything. Like a car. The cars name is Ford. But the method is drive, for example. There (hopefully) is also a method for stop. In our PowerShell example the method is count and the property we are looking for is status. Some properties have properties...like "running". It can get complex. The thing is all this is in a variable and all of it you can access bit by bit when and how you want it. - -In other languages variables have to be declared. There are lots of kinds of variables but PowerShell is smart enough to automatically work out what kind of variable it should be looking at. So declaring a variable is usually not needed. The problem in Powershell is that most of the time the automatic part works well .... so well sometimes I forget that variables can be declared. Sometimes the script just doesn't work like you thought it would. It turns out you need to declare the variable. And sometimes you want to because there are some juicy methods you want to get to. Image you want to work with a date. 12/05/15. So you put it in a variable called $date. $date = "12/05/15". Remember we talked about methods. Methods are things we can do. By the way that date is just some writing. It's basic. What PowerShell thinks is, that it's a sting. Like this: [string]$date. That's how you can declare a variable in PowerShell. Use [] and the appropriate syntax. If you want to work with numbers [int]$date and PowerShell knows you want to work with numbers. In out case we want to work with a date. So we declare our variable. [datetime]$date. There is a very cool cmdlet called get-member that shows all the properties and methods (and other things) in a variable. Check this out. This is what _$date | get-member_  gives us when we don't declare the variable. - -[![stringmethod](https://powershell.org/wp-content/uploads/2015/08/stringmethod.png)](https://powershell.org/wp-content/uploads/2015/08/stringmethod.png) - - - -All those methods let you do things to the content of the variable. Like _toupper_. That will make all the letters capital. Or _replace_. Lets you replace letter or words in a string stored in the variable. But we don't want that! We want to work with our date! Now check this out... [datetime]$date | get-member - -![datemethods](https://powershell.org/wp-content/uploads/2015/08/datemethods.png) - -It's totally different. There's all those juicy properties like _month,minute_ and _dayofyear_. And cool methods like _todatetime_, and _tolongdatestring_. So now that we have made available _tolongdatestring_ we can use it like this_. _Our 12/05/15 has become Saturday, 5 December 2015. If we hadn't declared our variable we wouldn't have been able to do that. - -[![tolongdate2](https://powershell.org/wp-content/uploads/2015/08/tolongdate2.png)](https://powershell.org/wp-content/uploads/2015/08/tolongdate2.png) - -Hopefully if you didn't know what those $ sign things were you now have a better idea. Oh and that . in the .count or .tolongdatestring is so cool. I had no idea when I was starting out and you should try looking up . on the internet. That . is like a short cut to get into the variables and access methods or properties. $myservice.name, $myservice.status, and $myservice.displayname will give just those properties.  All that complexity is yours to play with, explore and use once it's stored in a variable.  - -Keep practicing, PowerShell is the best thing since Windows. - - - -Steve diff --git a/content/articles/2015-08-08-continuous-integration-continuous-delivery-and-psdeploy.md b/content/articles/2015-08-08-continuous-integration-continuous-delivery-and-psdeploy.md deleted file mode 100644 index 61f7ff65d..000000000 --- a/content/articles/2015-08-08-continuous-integration-continuous-delivery-and-psdeploy.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Continuous Integration, Continuous Delivery, and PSDeploy -authors: - - pscookiemonster -date: "2015-08-08T15:16:01+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -aliases: - - /2015/08/continuous-integration-continuous-delivery-and-psdeploy/ ---- - -Are you starting to use version control at work? Are you being pestered by fellow PowerShell aficionados to start learning version control? Did you catch the PowerShell.org [Crash Course in Version Control](https://powershell.org/event/techsession-a-crash-course-in-version-control-and-git/) and pick up some Git and GitHub experience? Shameless plug, sorry : ) - - - Version control is just the start. What if we want to automate testing? To deploy our files, folders, and other artifacts out to production or other environments? Version control alone offers some nice benefits, but without these extra steps, it might introduce some pain points! - - - Developers have a bit of a head start on some of the interesting ideas and tools that streamline these processes. These will be increasingly important as IT professionals start to rely on version control. Let's take a quick look at a few key concepts. - - -## Continuous Integration - - - Let's pretend we have a PowerShell project called ProjectX. - - - Traditionally, we might check this out of version control, work on it for days on end, and integrate it back into version control once we were done with some major component, or at some arbitrary interval (check in once a day!). - - - With [continuous integration](https://en.wikipedia.org/wiki/Continuous_integration) (CI), we focus on making many small changes, integrating into version control often, rather than only after completing a major task, or at some pointless interval. - - - CI is often associated with running automated unit and integration tests, perhaps with [Pester](https://www.youtube.com/watch?v=SftZCXG0KPA). - - - You can get practical experience with this at home - set up a PowerShell project in GitHub, add some Pester tests, and sign up for AppVeyor - If you need some pointers, hit [the walk through here](http://ramblingcookiemonster.github.io/GitHub-Pester-AppVeyor/). - - - So! What does this look like? I make a change, commit to version control, tests automatically run, validate that I didn't break anything, and [update my view from version control](http://ramblingcookiemonster.github.io/GitHub-For-PowerShell-Projects/#continuous-integration) to let me know the build is passing. - - -## Continuous Deployment - - - Okay! We have our files in version control, and maybe we set up some automatic tests to run when we make a change. There's still a small problem. Will you remember to update the files where they actually live? Will you update those files outside of source control because this process is a pain? Continuous deployment (CD) can help with this. - - - For our purposes, the idea is that you can set up a series of validations, and if everything passes, you deploy to production. - - - While you can certainly involve [more gates](https://en.wikipedia.org/wiki/Continuous_delivery#Principles), you might have CI/CD pipeline that works as follows: - - - * You make a change - * You commit to source control - * Automated tests run - * If the automated tests pass, the deployment runs - - - So, now you don't need to worry about keeping production and other environments in sync with source control - this can all happen automatically! - - - We left out an important bit. What exactly happens with a deployment? - - -## PSDeploy - - - We use [Jenkins](https://powershell.org/2015/06/04/automating-with-jenkins-and-powershell-on-windows/) at work. What if we move to TeamCity? or Bamboo? Or some other solution? [PSDeploy](http://ramblingcookiemonster.github.io/PSDeploy/) is a quick and dirty module to help deployments on your preferred CI/CD platform. - - - Long story short, you have a deployment config file in each project. This spells out what you want to deploy (perhaps files or folders) and where to deploy them. You invoke PSDeploy, and it runs these deployments. - - - A few quick examples: - - - * We have a PowerShell module in version control.  Deployments.yml tells PSDeploy to copy the module to a network share, and a few servers.  Now, any time I commit a change to this module, Jenkins runs some Pester tests, and if they succeed, PSDeploy copies the module out. No extra work for me! - * We have a repository that stores a variety of config files.  Deployments.yml tells PSDeploy to copy these config files out to the various shares and servers that need them.  John Doe, who struggled a bit with version control (imagine forcing them to use Jenkins!) pushes a commit, a few Pester tests run, and we deploy the config files out as needed. - * We have an _everything but the kitchen sink_ repository, containing scheduled task scripts, PowerShell session configuration scripts, and other files. Same deal. Commit to source control, tests run, these files are delivered to their homes. - - - All I need to do in these cases is pick out what to deploy and where to deploy it to; PSDeploy does the rest. I can use the exact same build script for each of these projects, invoking PSDeploy against the deployments.yml. - - - What does this look like in practice? Here's a quick illustration: - - - [![PSDeployFlowSmall](https://powershell.org/wp-content/uploads/2015/08/PSDeployFlowSmall.png)](https://powershell.org/wp-content/uploads/2015/08/PSDeployFlow.png) - - - There are certainly product-specific ways to do this, but if PSDeploy sounds interesting, you can [read more here](http://ramblingcookiemonster.github.io/PSDeploy/). - - -## Next Steps - - - That's about it! If you plan to start using version control, take a look at the concepts and tools that can make your life easier. - - - [GitHub, Pester, and AppVeyor](http://ramblingcookiemonster.github.io/GitHub-Pester-AppVeyor/) are a great free way to get started, but be sure to check out [Dave Wyatt's TechSession on TeamCity and the Build.PowerShell.org](https://powershell.org/event/techsession-discovering-teamcity-and-build-powershell-org/), which will cover a handy new service enabling free continuous integration and delivery for community PowerShell projects. - - - Lastly, I can't help but mention Steven Murawski's great post [on joining the open source community](http://stevenmurawski.com/powershell/2015/8/moving-in-to-open-source). This is a great way to learn, to get involved, and to help others - skim through his post, and definitely consider it! diff --git a/content/articles/2015-08-10-the-start-sharing-challenge.md b/content/articles/2015-08-10-the-start-sharing-challenge.md deleted file mode 100644 index b6047721c..000000000 --- a/content/articles/2015-08-10-the-start-sharing-challenge.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: The Start Sharing Challenge -authors: - - Adam Bertram -date: "2015-08-10T15:55:25+00:00" -categories: - - Announcements -aliases: - - /2015/08/the-start-sharing-challenge/ ---- - -I'm back from [Techmentor Redmond 2015][1] which was my first public speaking talk ever. It went great. I met a ton of great people and really enjoyed myself. When speaking to IT pros one of the questions I typically ask them is "**Are you blogging or sharing your knowledge?**". 9 times out of 10 I get a big, fat no. Why? It's because they feel like they have nothing to share. They feel like no one would be interested in their ho-hum, mundane life as an IT guy. I always followup that comment with "How do you know?" which ultimately results in a shrug. You don't know that your life isn't interesting and can teach others something. **Why are you making the decision for others?** You've acquired lots of knowledge in your career. Don't be stingy! Share it! -As a personal challenge to you, I have a copy of Don Jones' and Jeff Hicks' [Learn PowerShell Toolmaking in a Month of Lunches][2] book. If you don't have a blog today, start one. If you do and haven't blogged in awhile, dust it off and start writing again. The first one to contact me on my blog [Adam, The Automator][3] with a link to their blog with at least 5 good posts will win the book. Don't try to sneak those piddly little one paragraph posts by me just to get a free book! Minimum post length is 500 words. -You have nothing to lose but perhaps a few hours of your time and some further opportunities in your career. Give back and you will be rewarded. -P.S. Did you know I used to blog about selling used books on Amazon? Talk about a niche topic. At it's peak it was getting over 1,000 readers/day. Now, don't you think IT is just a wee bit bigger than that? If I can blog about selling used books and get 1,000 readers/day you can spend just an hour a week writing a blog post about your IT experiences and you _will_ help more people than you think. - - [1]: https://techmentorevents.com/Home.aspx - [2]: http://www.manning.com/jones4/ - [3]: http://adamtheautomator.com diff --git a/content/articles/2015-08-12-template-based-parsing-and-progress-bars.md b/content/articles/2015-08-12-template-based-parsing-and-progress-bars.md deleted file mode 100644 index a6465d4a0..000000000 --- a/content/articles/2015-08-12-template-based-parsing-and-progress-bars.md +++ /dev/null @@ -1,205 +0,0 @@ ---- -title: Template based parsing and progress bars -authors: - - Jonas Sommer Nielsen -date: "2015-08-12T22:54:37+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/08/template-based-parsing-and-progress-bars/ ---- - -Working with wifi I have often needed to do a survey of the surroundings, and therefor I loved that windows 7 (maybe even Vista) introduced more advanced netsh with wifi support. - -There’s a lot of useful information but it might be nice to have a more graphical overview. The thing is that a text blob like this is not very handy to work with. - -[![image1](https://powershell.org/wp-content/uploads/2015/08/image1.png)](https://powershell.org/wp-content/uploads/2015/08/image1.png) - -Some time late last year I heard a guy from the powershell team on the Powerscripting podcast talk about ConvertFrom-String and the new template based parsing. And it occurred to me that you can combine this with a simple powershell progress bar (write-progress) to give a visual representation of signal strength. - -**Why not try it out** - -Ps> help ConvertFrom-String -[online][1] - -[![Help_ConvertFrom-String](https://powershell.org/wp-content/uploads/2015/08/Help_ConvertFrom-String.png)](https://powershell.org/wp-content/uploads/2015/08/Help_ConvertFrom-String.png) - -This looks straight forward. - - -`$TemplateSSID = @' -Interface name : Wi-Fi -There are 9 networks currently visible. -SSID 1 : {SSID*:My Movies 5G} - Network type : Infrastructure - Authentication : WPA2-Personal - Encryption : CCMP - BSSID 1 : bc:ae:c5:eb:59:8c - Signal : {SIGNAL:88}% - Radio type : 802.11n - Channel : 36 - Basic rates (Mbps) : 6 12 24 - Other rates (Mbps) : 9 18 36 48 54 -SSID 3 : {SSID*:blackbox} - Network type : Infrastructure - Authentication : WPA2-Personal - Encryption : CCMP - BSSID 1 : c8:be:19:aa:98:a4 - Signal : {SIGNAL:41}% - Radio type : 802.11n - Channel : 2 - Basic rates (Mbps) : 1 2 5.5 11 - Other rates (Mbps) : 6 9 12 18 24 36 48 54 -SSID 4 : {SSID*:Greenbox} - Network type : Infrastructure - Authentication : WPA2-Personal - Encryption : CCMP - BSSID 1 : 20:c9:d0:28:fb:05 - Signal : {SIGNAL:60}% - Radio type : 802.11n - Channel : 1 - Basic rates (Mbps) : 1 2 5.5 11 - Other rates (Mbps) : 6 9 12 18 24 36 48 54 - BSSID 2 : 20:c9:d0:28:fb:06 - Signal : 40% - Radio type : 802.11n - Channel : 100 - Basic rates (Mbps) : 6 12 24 - Other rates (Mbps) : 9 18 36 48 54 -'@ -$Netsh = netsh.exe wlan show networks mode=bssid -$Netsh | ConvertFrom-String -TemplateContent $TemplateSSID -`Executing the the above code resulted in - -[![testoutput1](https://powershell.org/wp-content/uploads/2015/08/testoutput1.png)](https://powershell.org/wp-content/uploads/2015/08/testoutput1.png) - -This looks great. The data is structured nicely in a easy to use form. - -Now lets combine that with a progress bar. We need a while loop to keep the progress bar alive and a one second sleep timer is probably a good idea. - - -`while ($true) { - $Netsh = netsh.exe wlan show networks mode=bssid - $Networks = $Netsh | ConvertFrom-String -TemplateContent $TemplateSSID - $i = 0 - foreach($Network in $Networks) { - Write-Progress -Id $i -Activity $Network.SSID -PercentComplete $Network.SIGNAL - $i++ - } - Start-Sleep -Seconds 1 -} -`The essential part is just a foreach looping through the networks objects. We use Write-Progress with parameters SIGNAL strength as PercentComplete and SSSID as Activity. - -[![ise progress bars](https://powershell.org/wp-content/uploads/2015/08/image3.png)](https://powershell.org/wp-content/uploads/2015/08/image3.png) - -It looks great in ISE and even works in the shell - -[![shell progress](https://powershell.org/wp-content/uploads/2015/08/image4.png)](https://powershell.org/wp-content/uploads/2015/08/image4.png) - -How cool is that? - -The bright reader might have spotted an obvious flaw in the first template. It doesn’t handle networks with multiple radios e.g. a network with both a 2.4 ghz and 5 ghz and same ssid. And all the other nice information from netsh is simply ignored. - -**Second try** - - -`$TemplateSSID = @' -Interface name : Wi-Fi -There are 9 networks currently visible. -{NETWORK*:SSID 1 : {SSID:My Movies 5G} - Network type : Infrastructure - Authentication : WPA2-Personal - Encryption : CCMP - {BSSID*:BSSID 1 : {MAC:bc:ae:c5:eb:59:8c} - Signal : {SIGNAL:88}% - Radio type : 802.11n - Channel : {CHANNEL:36} - Basic rates (Mbps) : 6 12 24 - Other rates (Mbps) : 9 18 36 48 54}} -{NETWORK*:SSID 3 : {SSID:blackbox} - Network type : Infrastructure - Authentication : WPA2-Personal - Encryption : CCMP - {BSSID*:BSSID 1 : {MAC:c8:be:19:aa:98:a4} - Signal : {SIGNAL:41}% - Radio type : 802.11n - Channel : {CHANNEL:2} - Basic rates (Mbps) : 1 2 5.5 11 - Other rates (Mbps) : 6 9 12 18 24 36 48 54}} -{NETWORK*:SSID 4 : {SSID:Greenbox} - Network type : Infrastructure - Authentication : WPA2-Personal - Encryption : CCMP - {BSSID*:BSSID 1 : {MAC:20:c9:d0:28:fb:05} - Signal : {SIGNAL:60}% - Radio type : 802.11n - Channel : {CHANNEL:1} - Basic rates (Mbps) : 1 2 5.5 11 - Other rates (Mbps) : 6 9 12 18 24 36 48 54} - {BSSID*:BSSID 2 : {MAC:20:c9:d0:28:fb:06} - Signal : {SIGNAL:40}% - Radio type : 802.11n - Channel : {CHANNEL:100} - Basic rates (Mbps) : 6 12 24 - Other rates (Mbps) : 9 18 36 48 54}} -'@ -$Netsh = netsh.exe wlan show networks mode=bssid -$Networks = $Netsh | ConvertFrom-String -TemplateContent $TemplateSSID -$Networks -`There's a bit more markup here, and I admit it took me a few tries to get my head around the nested data structure. Look more closely at SSID 4 above, and how this have 2 BSSID's, because of this they are marked with a *. - -Now $Networks contain a little more complicated data structure - -[![testoutput2](https://powershell.org/wp-content/uploads/2015/08/testoutput2.png)](https://powershell.org/wp-content/uploads/2015/08/testoutput2.png) - -Though if we dive into it                              - -[![testoutput3](https://powershell.org/wp-content/uploads/2015/08/testoutput3.png)](https://powershell.org/wp-content/uploads/2015/08/testoutput3.png) - -It does look more like what we saw first. But with more info. And we can even dig into TDC-TC network and see each channel. - -[![testoutput4](https://powershell.org/wp-content/uploads/2015/08/testoutput4.png)](https://powershell.org/wp-content/uploads/2015/08/testoutput4.png) - -A slightly modified loop - - -`while ($true) { - $Netsh = netsh.exe wlan show networks mode=bssid - $Networks = $Netsh | ConvertFrom-String -TemplateContent $TemplateSSID - $i = 0 - foreach($Network in $Networks) { - Write-Progress -Id $i -Activity $Network.network.SSID - $i++ - } - Start-Sleep -Seconds 1 -} -`And the percentage complete is a sub object. So we will need another loop to go through every BSSID attached to the SSID - - -`while ($true) { - $Netsh = netsh.exe wlan show networks mode=bssid - $Networks = $Netsh | ConvertFrom-String -TemplateContent $TemplateSSID - $i = 0 - foreach($Network in $Networks) { - foreach($bssid in $Network.NETWORK.bssid) { - Write-Progress -id $i -Activity $Network.network.SSID -Status "Channel: $($bssid.CHANNEL) MAC: $($bssid.MAC)" -PercentComplete $bssid.SIGNAL - $i++ - } - } - Start-Sleep -Seconds 1 -} -`The main thing here is of course using the template based parsing. It took me a few tries to figure it out, but it’s cool when it works and might be very useful in many other situations. The progress is just a hack that makes the presentation a little more fun. - -**References** - - * - * - * - -#### Contact me - -Twitter [@mrhvid][2] -Web [Jonas.SommerNielsen.dk][3] - - [1]: https://technet.microsoft.com/library/dn807178(v=wps.640).aspx - [2]: https://twitter.com/mrhvid - [3]: http://Jonas.SommerNielsen.dk diff --git a/content/articles/2015-08-16-abstraction-and-configuration-data.md b/content/articles/2015-08-16-abstraction-and-configuration-data.md deleted file mode 100644 index 45686940c..000000000 --- a/content/articles/2015-08-16-abstraction-and-configuration-data.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Abstraction and Configuration Data -authors: - - pscookiemonster -date: "2015-08-16T20:55:20+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/08/abstraction-and-configuration-data/ ---- - -Modularity and abstraction are a huge benefit in scripting and coding. Which of the following blocks of code are easier to understand? - - -`$SQLConnection = New-Object System.Data.SqlClient.SQLConnection -$SQLConnection.ConnectionString = 'Server=SqlServer1;Database=MyDB;Integrated Security=True;Connect Timeout=15' -$cmd = New-Object system.Data.SqlClient.SqlCommand("SELECT * FROM Table1",$SQLConnection) -$ds = New-Object system.Data.DataSet -$da = New-Object system.Data.SqlClient.SqlDataAdapter($cmd) -[void]$da.fill($ds) -$SQLConnection.Close() -$ds.Tables[0] -`Or... - - -`# -Invoke-Sqlcmd2 -ServerInstance SQLServer1 -Database MyDB -Query 'SELECT * FROM Table1' -`If you aren't a masochist, [the latter][1] probably looks a bit nicer. Oh, and it offers other parameters, error handling, parameterized SQL queries, built in help, and other benefits the .NET code block misses. - -The takeaway? You should be writing or using Advanced Functions and Modules, not monolithic scripts and snippets. Do it for yourself. Do it for anyone who might have to read your code down the line. - -Some modules can benefit from persistent configurations. If you have a module that wraps a REST API, you might want to allow the end user to specify a default URL, rather than specify it every time they run a command. - -This begs the question: what data format should you use? XML? JSON? YAML? INI? - -[This is a quick hit on options for storing configuration data in PowerShell][2]. - -Don't be ashamed. Many of us sysadmins pride ourselves on learning through experience. That doesn't mean you need to re-invent all the wheels. It can be a great learning experience to write your own code and functions, but at the end of the day, there's nothing wrong with finding the best tool for the job, and sticking with it. Developers make a living writing code, yet they all borrow existing libraries. - -Once you start writing modules and advanced functions, be sure to [share them with the community][3]! - - [1]: https://raw.githubusercontent.com/RamblingCookieMonster/PowerShell/master/Invoke-Sqlcmd2.ps1 - [2]: http://ramblingcookiemonster.github.io/PowerShell-Configuration-Data/ - [3]: http://stevenmurawski.com/powershell/2015/8/moving-in-to-open-source diff --git a/content/articles/2015-08-17-philadelphia-powershell-user-group-meeting-september-3rd-2015-with-max-trinidad.md b/content/articles/2015-08-17-philadelphia-powershell-user-group-meeting-september-3rd-2015-with-max-trinidad.md deleted file mode 100644 index b2a7580ac..000000000 --- a/content/articles/2015-08-17-philadelphia-powershell-user-group-meeting-september-3rd-2015-with-max-trinidad.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Philadelphia PowerShell User Group Meeting – September 3rd 2015 with Max Trinidad -authors: - - John Mello -date: "2015-08-18T01:11:05+00:00" -aliases: - - /2015/08/philadelphia-powershell-user-group-meeting-september-3rd-2015-with-max-trinidad/ ---- - -Join us on Thursday, September 3rd when [ -Maximo Trinidad -][1] will be giving a talk called a "**Creating a SQL Server Database Report with PowerShell**". As describe by Maximo: This is a deep dive on how to create a SQL Server report using PowerShell and SMO. At the same time, you will learn how to create and work with PowerShell objects, scriptblocks, formatting properties, and generating output results. We'll be looking into creating a report to identify database properties irregularities. This will be a good start to help begin documenting your SQL Server on the network. - - - - -**About Maximo Trinidad** - - - - -Maximo Trinidad (Florida Aka – Mr. PowerShell) hails from Puerto Rico and have been working with computers since 1979. Throughout his many years, he has worked with SQL Server Technologies, and provided support to Windows Servers/Client Systems, Microsoft Cloud and Virtualization Technologies. Maximo has also been a Microsoft PowerShell MVP since 2009 and MVP SAPIEN Technologies 2015.  You can find him speaking in most at most of the SQLSaturday, IT Pro and .NET camps events around the Florida’s State.  He is also the founder of the Florida PowerShell User Group which meets every 3rd Thursday evening of the month. -Follow him on [ -Twitter -][2] and on his [ -blog -][3]! - -Please [ -register -][4] if you plan to attend in person or online. **PLEAE NOTE THE NEW LOCATION!** The meeting URL to join us remotely will be included in your Eventbrite registration confirmation. - - - - -[![Eventbrite - PhillyPosh September 3rd 2015 - Max Trinidad](https://www.eventbrite.com/custombutton?eid=18198473123)](http://www.eventbrite.com/e/phillyposh-september-3rd-2015-max-trinidad-tickets-18198473123?ref=ebtnebregn) - - [1]: https://twitter.com/juneb_get_help - [2]: https://twitter.com/MaxTrinidad - [3]: http://www.maxtblog.com/ - [4]: https://www.eventbrite.com/e/phillyposh-september-3rd-2015-max-trinidad-tickets-18198473123 diff --git a/content/articles/2015-08-17-test-it-new-iisadministration-module.md b/content/articles/2015-08-17-test-it-new-iisadministration-module.md deleted file mode 100644 index b0bc61dad..000000000 --- a/content/articles/2015-08-17-test-it-new-iisadministration-module.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "TEST IT: New IISAdministration Module" -authors: - - Don Jones -date: "2015-08-17T17:35:08+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/08/test-it-new-iisadministration-module/ ---- - -It's no secret that Microsoft's WebAdministration module isn't universally loved. It's functionality isn't deep, and it doesn't play well in the PowerShell pipeline. There are also a number of things in it that run really slowly, making bulk administration a pain. - -Last week, [Baris Caglar announced that Windows 10 contains a new IISAdministration module][1], which is a rough draft of what is hoped to be a final module in Windows Server 2016. **If you use IIS, get hold of this and start testing so the team can get feedback.** Note that this is a _feature of Windows 10; _I haven't yet been able to test and see if file-copying it to another version of Windows will work or not (if you try, please post your results in a comment). The module seems to rely heavily on the [IIS Administration .NET class][2], going so far as giving you easy access to an instance of it so you can code against it directly for whatever the module itself doesn't offer. - -IIS as a product is in a weird place, because it no longer has a dedicated sub-team within the Windows Server team (at least, it didn't last I checked). That's made it difficult for anyone at Microsoft to produce a better administration module, since nobody really "owned" the product as their daily job, and nobody was available to be tasked with PowerShell improvements. Hopefully this new module is a step in the right direction at last. - -Some of what we still don't know: - - * Will this be released under an open-source license, perhaps posted on GitHub where others can contribute? - * Is the Win2016 release a for-sure on finalizing this module, or is that more a target? How will subsequent releases be made available? - * Can this be made available for downlevel operating systems? The .NET class in question has been around since IIS7, so it seems in theory that the code would run on older versions of Windows. - -Unfortunately, because Microsoft's IIS.NET blog system doesn't seem to do well with handling spam 😉 I'm not sure asking the author there will produce any answers - but let's try! - - [1]: http://blogs.iis.net/bariscaglar/iisadministration-powershell-cmdlets-new-feature-in-windows-10-server-2016 - [2]: https://msdn.microsoft.com/en-us/library/microsoft.web.administration.servermanager(v=vs.90).aspx diff --git a/content/articles/2015-08-20-multithreading-using-jobs.md b/content/articles/2015-08-20-multithreading-using-jobs.md deleted file mode 100644 index 78204acfc..000000000 --- a/content/articles/2015-08-20-multithreading-using-jobs.md +++ /dev/null @@ -1,225 +0,0 @@ ---- -title: Multithreading using jobs -authors: - - Jonas Sommer Nielsen -date: "2015-08-20T10:23:48+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/08/multithreading-using-jobs/ ---- - -Often I have had to check something against all servers or clients. A classic problem and every time I run into the it it's time consuming and running the job multithreaded would be nice. - -A few years back I found a nice little script for multithreading which I have been using quite often. Unfortunately this wasn't a module. And I can't remember where it came from. So this week I set my mind on recreating this as a module and to see if I can publish it on [PowerShell Gallery][1]. - -## **Version control 101** - -I recently watched the [crash course][2] Warren did on youtube a month back and I started out creating a repository for the project. - -[github.com/mrhvid/Start-MultiThread][3] - -I will let the video explain the concept. But I already feel more productive and safe while coding. Only thing left is to get in a process where I commit often or at least when it makes sense. - -## **Idea** - -The original version was just a function I found on google somewhere. It worked fine but it wasn't too handy to load up each time. And the input for the function was for two files, a script and a text file with a list of ComputerNames. - -It would be nice if I could just call it with a list of computer names from whereever. e.g. Get-ADComputer, (Computer1, Computer2, localhost) or (Get-content servers.txt).b - -And for quick oneliners if I need something simple it would be nice to be able to just write the script and not have to save a .ps1 file with the command. - -**Pseudo code**: - - -`Multi-Thread -Script { Test-Connection } -Computers [list of computers] -`## Execution - -First off I needed to figure out a good name. - -Get-Verb lists 98 verbs on my machine. Sadly "multi" is not one of them. After som consideration I chose **"Start"** as a good verb, and **"multithread"** as the noun. - - -`Start-MultiThread -`Sounds fair so I created a new folder with this name and a Start-MultiThread.psm1 file for the module. - -[![Snip](https://powershell.org/wp-content/uploads/2015/08/Snippit.png)](https://powershell.org/wp-content/uploads/2015/08/Snippit.png) - -A snippet for a full advanced function is always a good starting point. I added this to my version control and things are looking good so far. - -[https://github.com/mrhvid/Start-Multithread/...][4] (first upload) - -It already looks way more organized than what I usually come up with. - -### Coding - -Tuesday afternoon I put on my headphones, started banging away on my keyboard and the result was this code - - -`function Start-Multithread -{ - [CmdletBinding(DefaultParameterSetName='Parameter Set 1', - SupportsShouldProcess=$true, - PositionalBinding=$false, - HelpUri = 'https://github.com/mrhvid/Start-MultiThread/', - ConfirmImpact='Medium')] - [Alias()] - [OutputType([String])] - Param - ( - # Command or script to run. Must take ComputerName as argument to make sense. - [Parameter(Mandatory=$true, - ValueFromPipeline=$true, - ValueFromPipelineByPropertyName=$true, - Position=0)] - $Script, - # List of computers to run script against - [Parameter(Mandatory=$true, - ValueFromPipeline=$true, - ValueFromPipelineByPropertyName=$true, - Position=1)] - [String[]] - $Computers, - # Maximum concurrent threads to start - [Parameter(Mandatory=$false, - ValueFromPipeline=$true, - ValueFromPipelineByPropertyName=$true, - Position=2)] - [int] - $MaxThreads = 20 , - # Number of sec to wait after last thred is started. - [Parameter(Mandatory=$false, - ValueFromPipeline=$true, - ValueFromPipelineByPropertyName=$true, - Position=3)] - [int] - $MaxWaitTime = 600, - # Number of Milliseconds to wait if MaxThreads is reached - [Parameter(Mandatory=$false, - ValueFromPipeline=$true, - ValueFromPipelineByPropertyName=$true, - Position=4)] - $SleepTime = 500 - ) - Begin - { - } - Process - { - if ($pscmdlet.ShouldProcess('Target', 'Operation')) - { - $i = 0 - $Jobs = @() - Foreach($Computer in $Computers) { - # Wait for running jobs to finnish if MaxThreads is reached - While((Get-Job -State Running).count -gt $MaxThreads) { - Write-Progress -Id 1 -Activity 'Waiting for existing jobs to complete' -Status "$($(Get-job -State Running).count) jobs running" -PercentComplete ($i / $Computers.Count * 100) - Start-Sleep -Milliseconds $SleepTime - } - # Start new jobs - $i++ - $Jobs += Start-Job -ScriptBlock $Script -ArgumentList $Computer -Name $Computer -OutVariable LastJob - Write-Progress -Id 1 -Activity 'Starting jobs' -Status "$($(Get-job -State Running).count) jobs running" -PercentComplete ($i / $Computers.Count * 100) - } - # All jobs have now been started - # Wait for jobs to finish - While((Get-Job -State Running).count -gt 0) { - $JobsStillRunning = '' - foreach($RunningJob in (Get-Job -State Running)) { - $JobsStillRunning += $RunningJob.Name - } - Write-Progress -Id 1 -Activity 'Waiting for jobs to finish' -Status "$JobsStillRunning" -PercentComplete (($Computers.Count - (Get-Job -State Running).Count) / $Computers.Count * 100) - Start-Sleep -Milliseconds $SleepTime - } - # Output - Get-job | Receive-Job - # Cleanup - Get-job | Remove-Job - } - } - End - { - } -} -`This is by no means final code. (I already made small changes check [GitHub][5] for latest code). But the outline started to look good. - -The Foreach just runs through the list of computers supplied and for each one starts a new job with the script code and the ComputerName as argument.   - -To make sure the throttle limit is kept I have a small While loop that checks the number of running jobs and just sleeps until it falls under $MaxThreads limit. - -When all jobs are started it's just a matter of waiting for all jobs to finish. (It would be wise to add a timer here and kill hanging jobs after some time) - -And lastly I just output all the results. - -### Testing - - [![2015-08-19 (6)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-6.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-6.png) - - This looks great but unfortunately it fails to receive the computername. - -[![2015-08-19 (7)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-7.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-7.png) - -It does run the code once for each computer but it asks for a computername each time which kind of defeats the point. - -Good thing we have google and good ol' [Don][6]. - -[![2015-08-19 (8)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-8.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-8.png) - -Adding a parameter() block to the script makes it work. - -Clearly there's still a lot to be done here. - -### Publishing - -But creating modules is only really fun if you can share them with others. And this is where I'm beginning to love PowerShell v5. It turns out it's quite simpel to do this. - -[PowerShellGallery.com][7] describes this. After signing up it's a one-liner. - - -`PS> Publish-Module -Name -NuGetApiKey -`You need to create a manifest for your module first. - -Now I have my module published and it has it's own page on the internet WUUHU - -[www.powershellgallery.com/packages/Start-Multithread][8] - -Cool as that might seem the really cool stuff comes next. - -### Installing on a new machine - -This requires WMF 5 or newer. Aka. Windows 10 works out of the box. Try it out from your elevated powershell promt. - -![2015-08-19 (9)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-9.png) - -The module is available from the standard PSGallery repository. And installing it on your machine is as simpel as piping this to Install-Module - -[![2015-08-19 (10)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-10.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-10.png) - -Now you can try out the module on your own machine. Promission to be impressed.  - -## Help make it better - -This module is not flawless so if you have any ideas feel free to get on your [GitHub][5] and submit changes 🙂 - -My idea is to keep it simple and try to follow some good practices e.g. as described in [Learn PowerShell Toolmaking in a Month of Lunches][9]. - - - - - -#### Contact me - -Twitter [@mrhvid][10] -Web [Jonas.SommerNielsen.dk][11] - - [1]: https://www.powershellgallery.com/ - [2]: https://www.youtube.com/watch?v=wmPfDbsPeZY - [3]: https://github.com/mrhvid/Start-MultiThread - [4]: https://github.com/mrhvid/Start-Multithread/commit/9355446aae85c9f23abe07481edc3ec84d487fe4 - [5]: https://github.com/mrhvid/Start-Multithread - [6]: https://powershell.org/forums/topic/passing-parameter-to-start-job/ - [7]: https://www.powershellgallery.com/packages/upload - [8]: https://www.powershellgallery.com/packages/Start-Multithread/ - [9]: http://www.manning.com/jones4/ - [10]: https://twitter.com/mrhvid - [11]: http://Jonas.SommerNielsen.dk diff --git a/content/articles/2015-08-26-techsession-webinar-the-top-10-considerations-when-writing-powershell-advanced-functions.md b/content/articles/2015-08-26-techsession-webinar-the-top-10-considerations-when-writing-powershell-advanced-functions.md deleted file mode 100644 index b956bf9b8..000000000 --- a/content/articles/2015-08-26-techsession-webinar-the-top-10-considerations-when-writing-powershell-advanced-functions.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: "TechSession Webinar: The Top 10 Considerations When Writing #PowerShell Advanced Functions" -authors: - - Mike F Robbins -date: "2015-08-26T14:52:40+00:00" -categories: - - Announcements - - Events - - Training -aliases: - - /2015/08/techsession-webinar-the-top-10-considerations-when-writing-powershell-advanced-functions/ ---- - -On Wednesday, September 2nd at 2pm EDT (1pm CDT), I’ll be presenting the September TechSession Webinar for PowerShell.org. The topic for this month's session is: “[The Top 10 Considerations When Writing PowerShell Advanced Functions](https://powershell.org/event/techsession-the-top-10-considerations-when-writing-powershell-advanced-functions/)”. - -Here’s what you can expect from my presentation: - -There are lots of things to consider when writing an advanced function in PowerShell depending on what the function will be designed to accomplish, what operating system and PowerShell versions it will be written for, and who will be using it. During this session, PowerShell MVP Mike F Robbins will walk you through the top 10 items that he takes into consideration along with his thought process when creating advanced functions in PowerShell. We’ll briefly discuss comment based help, parameters, parameter validation, pipeline input, and error handling. This will NOT be a deep dive into any one of these topics as the focus of this session will be on writing advanced functions to maximize code reusability by minimizing static values. Prior experience with PowerShell is recommended. - -Registration URL: [https://attendee.gotowebinar.com/register/39900545688014338](https://attendee.gotowebinar.com/register/39900545688014338) - -Who am I? - -Mike F Robbins is a Microsoft MVP on Windows PowerShell and a SAPIEN Technologies MVP. He is a co-author of Windows PowerShell TFM 4th Edition and is a contributing author of a chapter in the PowerShell Deep Dives book. Mike has written guest blog articles for the Hey, Scripting Guy! Blog, PowerShell Magazine, and PowerShell.org. He is the winner of the advanced category in the 2013 PowerShell Scripting Games. Mike is also the leader and co-founder of the [Mississippi PowerShell User Group](http://mspsug.com/). He blogs at [mikefrobbins.com](http://mikefrobbins.com/) and can be found on twitter [@mikefrobbins](http://twitter.com/mikefrobbins). - -µ diff --git a/content/articles/2015-08-28-list-users-logged-on-to-your-machines.md b/content/articles/2015-08-28-list-users-logged-on-to-your-machines.md deleted file mode 100644 index 689c0256f..000000000 --- a/content/articles/2015-08-28-list-users-logged-on-to-your-machines.md +++ /dev/null @@ -1,232 +0,0 @@ ---- -title: List users logged on to your machines -authors: - - Jonas Sommer Nielsen -date: "2015-08-28T11:12:07+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/08/list-users-logged-on-to-your-machines/ ---- - -Password policies are the best 😀 Sometimes they lead to account logouts when someone forgets to logout of a session somewhere on the network though. It might be the TS session they use once a quarter for reporting or maybe you know the feeling when you RDP to a server only to find that it is locked by 2 other admins who forgot to logoff when they left. (Off cause this never happens… we all use PowerShell…) Anyway, this had me searching for a user session somewhere on the network. The worst thing is when my own password expires. I hate when my account ends up being locked. Therefor I made it a rule to just check all servers before I change password. There are multiple ways to do this but of course I tend to go the PowerShell route.  - -## Research - -The originally method I used is from [TechNet gallery][1] - -In short: Get-WmiObject -Class Win32_process - -This basically finds all unique users running processes on the machine. This is cool because it finds everything even stuff running as a service but I'm not convinced it is the most efficient way. - -Checking up with google I find a lot of creative ways to check who is logged on to your box. - -[peetersonline.nl/2008/11/oneliner-get-logged-on-users-with-powershell/][2] gave me the idea to check Win32_LoggedOnUser which seems obvious. - -[![2015-08-28 (1)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-1.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-1.png) - -This looks great and seems to work with Get-CimInstance too though the output is a little different. - -![2015-08-28](https://powershell.org/wp-content/uploads/2015/08/2015-08-28.png) - -[learn-powershell.net/.../Quick-hit-find-currently-logged-on-users/][3] took a little more old-school approach which I kind of like because it's a little rough and forces me to play with my [template based parsing.][4] - - [![2015-08-28 (2)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-2.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-2.png) - -I'm not really sure which method is faster so why not try implementing all 3 in a module and test it out. - -## Sketching - -It's always a good idea to begin by making a sketch of what you're trying to accomplish. - - -`Pseudo code: -Get-ActiveUser -ComputerName [] -Method [Cim,Wmi,Query] -Wanted output: -Username ComputerName --------- ------------ -TestUser1 Svr3 -TestUser3 Svr3 -DonaldDuck Client2 -`Now I have all the information I need to set up the GitHub repository. - -[github.com/mrhvid/Get-ActiveUser][5] - -## Code - -First of all the parameters I'm interested in are ComputerName and Method. - - -`Param - ( - # Computer name, IP, Hostname - [Parameter(Mandatory=$true, - ValueFromPipelineByPropertyName=$true, - Position=0)] - [String[]] - $ComputerName, - # Choose method, WMI, CIM or Query - [Parameter(Mandatory=$true, - ValueFromPipelineByPropertyName=$true, - Position=1)] - [ValidateSet('WMI','CIM','Query')] - [String] - $Method - ) -`I already have 3 possible Methods in mind so I set ValidateSet with the 3 possibilities. Then I don't have to worry about that input later. - - -`Process - { - switch ($Method) - { - 'WMI' - { - } - 'CIM' - { - } - 'Query' - { - } - } - } -`In the Process part of my function I simply use a switch for the 3 different methods I allowed in the Parameter. - -Now it's basic fill-in-the-blanks. - -### WMI - -My old solution is simpel and works fine. - - -`$WMI = Get-WmiObject -Class Win32_Process -ComputerName $ComputerName -ErrorAction Stop -$ProcessUsers = $WMI.getowner().user | Select-Object -Unique -`[![2015-08-28 (3)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-3.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-3.png) - -But now that I found Win32_LoggedOnUser it seams wrong to do it this way. Lets look at the new idea instead. - -[![2015-08-28 (4)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-4.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-4.png) - -[![gwmi-Wmi32_LoggedOnUser_gm](https://powershell.org/wp-content/uploads/2015/08/gwmi-Wmi32_LoggedOnUser_gm.png)](https://powershell.org/wp-content/uploads/2015/08/gwmi-Wmi32_LoggedOnUser_gm.png) - -This is all the right data but it seems to be in a string format so I'll have to do a little manipulation. This can be done in a million ways. - - -`function Get-MyLoggedOnUsers - { - param([string]$Computer) - Get-WmiObject Win32_LoggedOnUser -ComputerName $Computer | Select Antecedent -Unique | %{“{0}{1}” -f $_.Antecedent.ToString().Split(‘”‘)[1], $_.Antecedent.ToString().Split(‘”‘)[3]} - } -`Peter's aforementioned one-liner didn't seem very reader-friendly to me, which is ok for a one-liner, but I would like it to be a little more readable if possible. - - -`$WMI = (Get-WmiObject Win32_LoggedOnUser).Antecedent -$ActiveUsers = @() -foreach($User in $WMI) { - $StartOfUsername = $User.LastIndexOf('=') + 2 - $EndOfUsername = $User.Length - $User.LastIndexOf('=') -3 - $ActiveUsers += $User.Substring($StartOfUsername,$EndOfUsername) -} -`[![2015-08-28 (5)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-5.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-5.png) - - This seams right 🙂 I'll save the output in $ActiveUsers variable and do the same for CIM and Query. - -### CIM - -Lets try with CIM. - -[![2015-08-28 (6)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-6.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-6.png) - -This looks way more structured. - -[![2015-08-28 (7)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-7.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-7.png) - -CIM ends up being an easy to understand one-liner 😀 - - -`$ActiveUsers = (Get-CimInstance Win32_LoggedOnUser -ComputerName $ComputerName).antecedent.name | Select-Object -Unique -`### Query - -Using the good ol' Query.exe I found the [template based parsing discussed earlier][4] very useful. - - -`$Template = @' - USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME ->{USER*:jonas} console 1 Active 1+00:27 24-08-2015 22:22 - {USER*:test} 2 Disc 1+00:27 25-08-2015 08:26 -'@ -$Query = query.exe user -$ActiveUsers = $Query | ConvertFrom-String -TemplateContent $Template | Select-Object -ExpandProperty User -`### Output - -Now I just need to format and output the users in a nice way. I want clean objects with ComputerName and UserName. - - -`# Create nice output format -$UsersComputersToOutput = @() -foreach($User in $ActiveUsers) { - $UsersComputersToOutput += New-Object psobject -Property @{ - ComputerName=$ComputerName; - UserName=$User - } - } -} -# output data -$UsersComputersToOutput -`## Testing - -Now I have a problem. I can't test this as I don't have a bunch of test serveres at my disposal. All my testing has been done against my own Windows 10 box. It's seems that query is a lot faster running locally but WMI/CIM might give a more complete view of what services are running.   - -[![get-activeuser_wmi_highlight](https://powershell.org/wp-content/uploads/2015/08/get-activeuser_wmi_highlight.png)](https://powershell.org/wp-content/uploads/2015/08/get-activeuser_wmi_highlight.png) - -I have a bunch of standard service accounts running that might be nice to remove from the output. Also for this to be useful we will want to run it against a lot of machines. - -[![get-activeuser_query](https://powershell.org/wp-content/uploads/2015/08/get-activeuser_query.png)](https://powershell.org/wp-content/uploads/2015/08/get-activeuser_query.png) - -Combining Get-ActiveUser with [Start-Multithread from last weeks post][6] seems to be working as intended. - - -`Start-Multithread -Script { - param($C) - Get-ActiveUser -ComputerName $C -Method Query - } -ComputerName ::1,Localhost | Out-GridView -`Piping the above to Out-GridView is proberbly my personal favorite way of accomplishing something truly useful. - -[![get-activeuser_query_out-gridview](https://powershell.org/wp-content/uploads/2015/08/get-activeuser_query_out-gridview.png)](https://powershell.org/wp-content/uploads/2015/08/get-activeuser_query_out-gridview.png) - -Now we have all the data in a nice searchable way and it's really easy to check if your user is logged in on some random machine. It also an easy way to check for rouge users on your network. - - - -## Publishing and feedback - -The code is published on [PowerShellGallery][7]. - -Please help me out by testing it for me. I would love to know if this works in the real world 🙂 - - -`# To install Get-ActiveUser -Install-Module Get-ActiveUser -#To install Start-Multithread -Install-Module Start-Multithread -`This should work when you have WMF 5 + installed and on Windows 10 out of the box.  - -As this is my third blogpost ever I would love some feedback. Is there something I could do better or in a better format? Have you used this and for what? Please let me know in the comments 🙂 - - - -#### Contact me - -Twitter [@mrhvid][8] -Web [Jonas.SommerNielsen.dk][9] - - [1]: https://gallery.technet.microsoft.com/scriptcenter/d46b1f3b-36a4-4a56-951b-e37815a2df0c - [2]: http://www.peetersonline.nl/2008/11/oneliner-get-logged-on-users-with-powershell/ - [3]: http://learn-powershell.net/2010/11/01/quick-hit-find-currently-logged-on-users/ - [4]: https://powershell.org/2015/08/12/template-based-parsing-and-progress-bars/ - [5]: https://github.com/mrhvid/Get-ActiveUser - [6]: https://powershell.org/2015/08/20/multithreading-using-jobs/ - [7]: https://www.powershellgallery.com/packages/Get-ActiveUser/ - [8]: https://twitter.com/mrhvid - [9]: http://Jonas.SommerNielsen.dk diff --git a/content/articles/2015-09-01-basic-exchange-monitoring.md b/content/articles/2015-09-01-basic-exchange-monitoring.md deleted file mode 100644 index 2dce93a01..000000000 --- a/content/articles/2015-09-01-basic-exchange-monitoring.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Basic Exchange Monitoring -authors: - - Matt Laird -date: "2015-09-02T01:32:03+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks - - Tools -aliases: - - /2015/09/basic-exchange-monitoring/ ---- - -Hello Powershell.org!  This is the first time I've posted for anyone outside of my own powershell blog site [PowerShellMasters.com](http://www.powershellmasters.com) and I just want to thank PowerShell.org for everything they do for our community.  I think most of you would agree that this site is one of the best PowerShell sites out there today and I am grateful for the opportunity to reach so many PowerShell people.  OK enough with the touchy-feely stuff. 🙂 - -If you've been a Sys Admin for any extended time then you've probably had your fair share of run-ins with Exchange.  Whether you are a full-time Exchange Admin or just doing it as part of your "other duties" I think we all know you have to keep an eye on this system or it can get away from you!   - -Now there are dozens of monitoring solution out there that can help us monitor our Exchange environments and the are great especially in detailed reports.  But who has time to pour over screen after screen of stats?  I wrote the script [Exchange_Basic_Monitor.ps1](http://powershellmasters.com/scripts/) because I wanted a simple one-page report to check each morning when I get to the office.  There's nothing fancy or overly complicated about this script, but it will definitely let you know where you stand with your Exchange environment.  If you want to read more about this script just follow the link below.  When you are done make sure to come back and check out some more of [PowerShell.org](http://www.powershell.org)'s site. - - -**[Exchange 2013: Basic Monitoring](http://powershellmasters.com/2015/09/exchange-2013-basic-monitoring/)** - - -Like I said I'm pretty new to this whole blogging thing, but so far it's been really fun (and a little theraputic too!).  If you have some comments, questions or advice I'm happy to hear it.  Thanks for reading and I hope everyone likes the article. - - - -Thanks - -Matt diff --git a/content/articles/2015-09-03-use-import-localizeddata-to-internationalize-your-scripts.md b/content/articles/2015-09-03-use-import-localizeddata-to-internationalize-your-scripts.md deleted file mode 100644 index c0eeac1a7..000000000 --- a/content/articles/2015-09-03-use-import-localizeddata-to-internationalize-your-scripts.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Use Import-LocalizedData to Internationalize your Scripts -authors: - - Adam Platt -date: "2015-09-03T21:13:28+00:00" -categories: - - PowerShell for Developers - - Tutorials -aliases: - - /2015/09/use-import-localizeddata-to-internationalize-your-scripts/ ---- - -Whether you're working with an enterprise client with a global presence or building a tool that you want to share with the world, you may find yourself wanting to build support for multiple languages into your scripts. The Import-LocalizedData Cmdlet is a simple and powerful way to achieve this. I put up a pair of posts about my recent experience with a globalization effort and how we were able to get a lot of functionality with only a few lines of code. - -The first post, [Internationalization with Import-LocalizedData](http://www.plattsoft.net/2015/08/24/internationalization-with-import-localizeddata/), describes the Cmdlet itself, how it works, and how to use it to automatically detect and load the correct language files for display at runtime. This is based on the regional settings of the user under which the PowerShell session is running. - -The second post, [Internationalization with Import-LocalizedData: Part 2](http://www.plattsoft.net/2015/08/27/internationalization-with-import-localizeddata-part-2/), goes into more detail about some research we had to do into what exact regional settings control the language that PowerShell will attempt to use. - -Even if you're not planning to localize your scripts into other languages right now, you should still think about globalizing your code so that it's easy to do if you change your mind, or if someone is kind enough to want to contribute some translations. diff --git a/content/articles/2015-09-04-mspsug-virtual-meeting-the-art-of-powershell-runspaces-september-8th-2015.md b/content/articles/2015-09-04-mspsug-virtual-meeting-the-art-of-powershell-runspaces-september-8th-2015.md deleted file mode 100644 index d6338e338..000000000 --- a/content/articles/2015-09-04-mspsug-virtual-meeting-the-art-of-powershell-runspaces-september-8th-2015.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "#MSPSUG Virtual Meeting: The Art of #PowerShell Runspaces – September 8th 2015" -authors: - - Mike F Robbins -date: "2015-09-04T14:58:27+00:00" -aliases: - - /2015/09/mspsug-virtual-meeting-the-art-of-powershell-runspaces-september-8th-2015/ ---- - -Join the Mississippi PowerShell User Group virtually on Tuesday, September 8th at 8:30pm Central Time when PowerShell MVP [Boe Prox](http://learn-powershell.net/) will present “_**The Art of PowerShell Runspaces**_”. - -PowerShell runspaces are a known but little documented area that can help to provide performance improvements in your scripts. Besides just using this for performance gains, you can use this to provide a snappier approach to building GUIs in PowerShell. This presentation will show you examples of using Runspaces, RunspacePools as well as utilizing shared variables that can be viewed and modified in multiple runspaces during runtime. Also being demoed is a module called [PoshRSJob](https://github.com/proxb/PoshRSJob) which provides runspace multhreading in a familiar jobs infrastructure. - -Visit the [Mississippi PowerShell User Group](http://mspsug.com/2015/08/25/mspsug-virtual-meeting-the-art-of-powershell-runspaces-on-tuesday-september-8th-at-830pm-cdt/) website to learn more about Boe and to find out more details about this month’s meeting. - -The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info](http://mspsug.com/attendee-info/)” section. - -Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this meeting. - -Note: It is not necessary to live in Mississippi or join our user group to attend our meetings or present a session for our user group. - -µ diff --git a/content/articles/2015-09-05-september-2015-scripting-games-puzzle.md b/content/articles/2015-09-05-september-2015-scripting-games-puzzle.md deleted file mode 100644 index 89526900d..000000000 --- a/content/articles/2015-09-05-september-2015-scripting-games-puzzle.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: 20115-September Scripting Games Puzzle -authors: - - Don Jones -date: "2015-09-05T13:26:02+00:00" -categories: - - Scripting Games -aliases: - - /2015/09/september-2015-scripting-games-puzzle/ ---- - -Our September 2015 puzzle is another one-liner, to help get you out of Summer Mood and back into Work Mode. This time, it's a pretty real-world scenario, designed to test your understanding of the pipeline and how data can be manipulated within it. You'll need to really grasp pipeline parameter binding to make this work in the shortest command possible. - - - -## **Instructions** - -The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month's puzzle. You can find them all at https://powershell.org/category/announcements/scripting-games/. Many puzzles will include optional challenges, that you can use to really push your skills. - -**To participate**, add your solution to a public Gist (http://gist.github.com; you'll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post.  -**Only post one entry per person. You are not allowed to come back and post corrected or improved versions. If you do, all of your posts will be ignored. **However, remember that you can always go back and edit your Gist. We'll always pull the most recent one when we display it, so there's no need to post multiple entries if you want to make an edit. - - -Don't forget the [main rules and purpose of these monthly puzzles][1], including the fact that you won't receive individual scoring or commentary on your entry. - -**User groups are encouraged to work together** on the monthly puzzles. User group leaders should submit their group's best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most "favorite" entries of the year will win a grand prize from PowerShell.org. - -## - -## **Our Puzzle** - -You’ve been given a CSV file (named Input.csv) that has a single column, named MACHINENAME. The contents of that column are either computer host names or IP addresses. The computers named run a mix of operating systems, from Windows Server 2003 and Windows XP, up through the newest versions. All have at least PowerShell v2 installed. RPC communications are open between all computers on the network. All computers belong to the same domain. - -Write a command or short script that reads the CSV file, contacts each computer, and retrieves each computer’s textual operating system version (e.g., “Microsoft Windows 8.1 Pro”, not “6.3.9600”). The command or script should output a CSV file, named Output.csv, that has two columns: MACHINENAME and OSVERSION. - -There’s no need to handle errors for machines that aren’t reachable. - - - - - -**Challenges:** - - * Try to do write this as a one-liner, using as few semicolons as possible. - * Try to minimize your use of curly brackets (just for fun) in your answer. - - [1]: https://powershell.org/?p=2574 diff --git a/content/articles/2015-09-06-writing-and-publishing-powershell-modules.md b/content/articles/2015-09-06-writing-and-publishing-powershell-modules.md deleted file mode 100644 index b1a77f125..000000000 --- a/content/articles/2015-09-06-writing-and-publishing-powershell-modules.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Writing and Publishing PowerShell Modules -authors: - - pscookiemonster -date: "2015-09-06T20:31:29+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -aliases: - - /2015/09/writing-and-publishing-powershell-modules/ ---- - -Earlier in August [we mentioned](https://powershell.org/2015/08/16/abstraction-and-configuration-data/) that modularity and abstraction are quite helpful. PowerShell modules can help enable these concepts. - - - You might ask "Modules... why can't I just write a function?" There are a number of benefits to bundling your functions into modules: - - - - - * Simplify code organization - * Group related functions together - * Share state between functions, but not with the user - * Re-use "helper functions" that you don't want exposed to the user - * Improve discoverability: -`Find-Module MyModule`Get-Command -Module MyModule -`* Simplify distribution: -`Install-Module MyModule -`Where does that last bullet come from? - - - - -## The PowerShell Gallery - - - If you've worked with Perl, you've probably used [CPAN](https://www.perl.org/about/whitepapers/perl-cpan.html), which archives more than 150,000 modules. Other languages have similar tools, like [PyPI](https://pypi.python.org/pypi) for Python, or [RubyGems](https://rubygems.org/) for Ruby. - - - - - - In the PowerShell world we've had a few community alternatives, but nothing official until late 2014, when Microsoft introduced the [PowerShell Gallery](https://www.powershellgallery.com/). The gallery is still under limited preview, with less than 300 modules published. - - - - - - The PowerShell community can benefit from the PowerShell Gallery through simplified and centralized discovery and distribution. We can find, install, or publish modules with a single command in PowerShell 5. Perhaps some day we will see a vibrant PowerShell community that extends [beyond IT administration](http://ramblingcookiemonster.github.io/PowerShell-Beyond-Administration/). - - - - -## Write and Publish PowerShell Modules - - - Let's help build up the PowerShell Gallery. Do you write PowerShell modules at work or at home? Consider [open sourcing](http://stevenmurawski.com/powershell/2015/8/moving-in-to-open-source) them on GitHub, and publishing them in the PowerShell Gallery! - - - - - - If you're comfortable writing PowerShell functions, but haven't started writing modules, check out [Building a PowerShell Module](http://ramblingcookiemonster.github.io/Building-A-PowerShell-Module), where we walk through the creation and publication of a PowerShell module. - - - - - - Edit: [This follow-up](https://powershell.org/deploying-modules-to-the-powershell-gallery/) shows a simple way to automatically deploy your modules to the gallery. - - - - - - Cheers! diff --git a/content/articles/2015-09-08-find-location-of-locked-out-accounts.md b/content/articles/2015-09-08-find-location-of-locked-out-accounts.md deleted file mode 100644 index 2a893fbf7..000000000 --- a/content/articles/2015-09-08-find-location-of-locked-out-accounts.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Find Location of Locked Out Accounts -authors: - - Matt Laird -date: "2015-09-08T11:16:45+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks - - Tools -aliases: - - /2015/09/find-location-of-locked-out-accounts/ ---- - -# I'm Locked Out, Help! - -If you've been a sys admin for more than a week you've probably heard this..."I'm locked-out, help!".  Normally the user has made their way to your cube and is impatiently tapping their foot waiting for you to magically solve there problem.  So you find their account, reset their password and everything is right with the world...Or is it?  Two minutes later they show up again because their account was locked-out before they even got back to their desk.  Now what do you do? - -There are several ways to go about finding this information, some MUCH better than others.  Since we are all PowerShell people (or at least stayed at a Holiday Inn Express) that will be our method of choice.  If you want to read more click on the link below, but if you just want to get to the script you can follow this link to my [downloads page][1]. - -As always make sure once you've checked us out over at [PowerShellMasters.com][2] to head back here to read more awesome PowerShell posts on [PowerShell.org][3]. - -**[Find Location of Locked Out Accounts][4]** - -If you have some comments, questions or advice I'm happy to hear it.  Thanks for reading and I hope everyone likes the article. - -Thanks - -Matt - - [1]: http://powershellmasters.com/scripts/ - [2]: http://powershellmasters.com - [3]: https://powershell.org - [4]: http://powershellmasters.com/2015/07/find-location-of-locked-out-accounts/ diff --git a/content/articles/2015-09-08-where-are-my-fsmo-roles.md b/content/articles/2015-09-08-where-are-my-fsmo-roles.md deleted file mode 100644 index ae5aae6df..000000000 --- a/content/articles/2015-09-08-where-are-my-fsmo-roles.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Where Are My FSMO Roles? -authors: - - Thomas Rayner -date: "2015-09-08T14:00:21+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -aliases: - - /2015/09/where-are-my-fsmo-roles/ ---- - -Hello, PowerShell people! I've never posted on PowerShell.org before and so I feel as though I owe you a quick introduction before we dive into the tip I'd like to share with you. - -My name is Thomas Rayner and I am a Microsoft MVP for Windows PowerShell. I'm also a systems administrator and degree program instructor. I volunteer a fair bit of time as the President of the Edmonton Microsoft User Group (EMUG). EMUG has a more in depth bio for me on their [About Executive](http://emug.ca/executive/) page in case you want to know more about the person behind the avatar. If you're in the Edmonton area, I strongly recommend [signing up for our mailing list](http://emug.ca/contact-us/) so you can come attend the great events we put on. - -I'm pretty active on Twitter at [@MrThomasRayner](http://twitter.com/MrThomasRayner) and I post bi-weekly on my own blog, [workingsysadmin.com](http://workingsysadmin.com). - -**Ok, tip time!** - -If you're an IT pro of any kind, it would be difficult to not bump into Active Directory from time to time. If you're a reader of PowerShell.org, you most likely administer Active Directory in some capacity. Inevitably, as an AD admin, you're going to find yourself asking "Which server is holding which FSMO role right now?" and "Isn't there a way to do this in PowerShell?". _If you're scratching your head right now wondering what a Flexible Single Master Operation (FSMO) role is, please check out this prerequisite reading: [https://support.microsoft.com/en-us/kb/197132](https://support.microsoft.com/en-us/kb/197132). _ - -Of course there's a way to do this in PowerShell! Let's work through a solution. Firstly, we need to import the Active Directory module. _[Stuck already?](http://blogs.msdn.com/b/rkramesh/archive/2012/01/17/how-to-add-active-directory-module-in-powershell-in-windows-7.aspx)_ - - -`Import-Module ActiveDirectory -`That was easy. Now, let's get digging. There's a cmdlet called Get-ADDomainController which seems like a good place to start since we know our FSMO roles are going to be on Domain Controllers (DC). Let's take a look at what gets returned for each DC. - - -`Get-ADDomainController -Filter * | Select-Object -First 1 | Get-Member - TypeName: Microsoft.ActiveDirectory.Management.ADDomainController -Name MemberType Definition ----- ---------- ---------- -Contains Method bool Contains(string propertyName) -Equals Method bool Equals(System.Object obj) -GetEnumerator Method System.Collections.IDictionaryEnumerator GetEnumerator() -GetHashCode Method int GetHashCode() -GetType Method type GetType() -ToString Method string ToString() -Item ParameterizedProperty Microsoft.ActiveDirectory.Management.ADPropertyValueCollection Item(string propertyName) {get;} -ComputerObjectDN Property System.String ComputerObjectDN {get;} -DefaultPartition Property System.String DefaultPartition {get;} -Domain Property System.String Domain {get;set;} -Enabled Property System.Boolean Enabled {get;} -Forest Property System.String Forest {get;set;} -HostName Property System.String HostName {get;} -InvocationId Property System.Guid InvocationId {get;} -IPv4Address Property System.String IPv4Address {get;set;} -IPv6Address Property System.String IPv6Address {get;set;} -IsGlobalCatalog Property System.Boolean IsGlobalCatalog {get;} -IsReadOnly Property System.Boolean IsReadOnly {get;} -LdapPort Property System.Int32 LdapPort {get;} -Name Property System.String Name {get;set;} -NTDSSettingsObjectDN Property System.String NTDSSettingsObjectDN {get;} -OperatingSystem Property System.String OperatingSystem {get;} -OperatingSystemHotfix Property System.String OperatingSystemHotfix {get;} -OperatingSystemServicePack Property System.String OperatingSystemServicePack {get;} -OperatingSystemVersion Property System.String OperatingSystemVersion {get;} -OperationMasterRoles Property Microsoft.ActiveDirectory.Management.ADPropertyValueCollection OperationMasterRoles {get;} -Partitions Property Microsoft.ActiveDirectory.Management.ADPropertyValueCollection Partitions {get;} -ServerObjectDN Property System.String ServerObjectDN {get;} -ServerObjectGuid Property System.Guid ServerObjectGuid {get;} -Site Property System.String Site {get;set;} -SslPort Property System.Int32 SslPort {get;} -`That's a lot of stuff. We can see if a DC is an RODC, which forest and domain it's in, the OS, its site... and its OperationMasterRoles! Looks like we're in business. The following code just about accomplishes our goal. - - -`Get-ADDomainController -Filter * | -Select-Object -Property Name, OperationMasterRoles -`The above script will get all the DCs in the environment and return the name of the DC and the FSMO roles held. That's great, but, what if you have dozens of DCs and looking at a big list of DCs isn't appealing? There must be a way to get _only _the DCs that actually have FSMO roles, right? - - -`Get-ADDomainController -Filter "OperationMasterRoles -like '*'" | -Select-Object -Property Name, OperationMasterRoles -`Of course there is! We don't even need to pipe our output into another cmdlet like Where-Object because we can simply adjust our filter on which DCs we return in the first place. "OperationMasterRoles -like '*'" translates to "Domain Controllers whose OperationMasterRoles field have a value in them" which doesn't include the DCs whose OperationMasterRoles field are null (because they're not holding any FSMO roles). - -**That's it!** - -Locating your Active Directory FSMO roles is just that easy. - -Thank you, PowerShell.org for letting me post on your blog. I've got tremendous respect and admiration for the people who contribute to this website and the PowerShell community. PowerShell.org is an incredible resource for people of any experience level to improve their skills and learn new things. The world is a better place for having resources like this one. diff --git a/content/articles/2015-09-11-devops-a-practical-example.md b/content/articles/2015-09-11-devops-a-practical-example.md deleted file mode 100644 index 39559ff82..000000000 --- a/content/articles/2015-09-11-devops-a-practical-example.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "DevOps: A Practical Example" -authors: - - Don Jones -date: "2015-09-11T11:22:12+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/09/devops-a-practical-example/ ---- - -If you look at DevOps as a means of removing hurdles between coders and users, there's almost no better real-world, practical example than Amazon Elastic Beanstalk. If you're not familiar with EBS, look into it - it's kinda cool. - -EBS isn't suitable for every situation, to be sure. It's mainly useful for Linux VMs, running Web sites, in fact, which isn't 100% of your workloads. But the _idea_ is pretty awesome. Developers store their code in a source control repo - ideally, Git. Along with their code - and this is the cool bit - they include a configuration file. This file can list things like environment variables, packages (installed from repos using NPM, RHL, YUM, etc), and so on. - -When you recycle the application, EBS spins up new VMs _and configures them on the fly to match your configuration file. _It then shuts down any currently running machines.  - -So the deal is, _the developer_ specifies the machine configuration - and they can do that in a test silo. All the code, _including the configuration directives, _live in Git. So when it's working in test, you just point the production silo at the same Git repo, and SHAZAM! application is up and running. Nobody manually configures anything. Change the app? No problem - just check in the code and recycle the application, and the new code - and its configuration - is live. - -The "ops" portion of the scenario, in other words, is completely automated. Amazon has automated all the bits that sit between a developer and deployed code. Amazon's back end magic reads that configuration document and uses it to configure 1-to-infinity virtual machines as directed. Nobody has to do anything manual. The "server," in the form of a VM, just becomes another software element. "Infrastructure as code," if you will. - -Gosh, what could Microsoft do to compete with that in Azure? What could _you_ do, in your "private cloud," to provide similar capabilities? - -Hmm... 🙂 diff --git a/content/articles/2015-09-11-working-with-powershellgallery.md b/content/articles/2015-09-11-working-with-powershellgallery.md deleted file mode 100644 index f2986e54c..000000000 --- a/content/articles/2015-09-11-working-with-powershellgallery.md +++ /dev/null @@ -1,148 +0,0 @@ ---- -title: Working with PowershellGallery -authors: - - Jonas Sommer Nielsen -date: "2015-09-11T13:34:23+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/09/working-with-powershellgallery/ ---- - -After my two first posts ([Multithreading using jobs][1], [List users logged on to your machines][2]) where I mentioned [PowershellGallery.com][3] a few times and after [Warren talked about the Gallery a few days ago][4] I felt like digging a little deeper to see if I was actually doing it right. - -So I wrote them an email and this was their reply: - - -------------------------- - - - *"Hi Jonas – The “limited preview” designation on the PowerShell Gallery is because we are doing significant development to the site.* * However, there is nothing about that status which should prevent you from sharing your code. * - - -_A couple of things you will want to consider as you get ready to publish to the Gallery:_ - - * _You will want to scan your modules with PSSCriptAnalyzer (see ), as we scan all modules that have been posted with that tool. Anything flagged as an “error” must be corrected, things flagged as “warnings” should be fixed._ - * _Most submitters have a project site on GitHub, or something of that nature, that they link to from the Gallery. That allows them to get feedback on what they have submitted, & it’s something we would recommend._ - - - *Hope this helps –* * The PowerShell Gallery Operations Team"* - - -  -------------------------- - - - Really nice feedback. To the commandline. - - - [![Install-PSScriptAnalyzer.a](https://powershell.org/wp-content/uploads/2015/09/Install-PSScriptAnalyzer.a.png)](https://powershell.org/wp-content/uploads/2015/09/Install-PSScriptAnalyzer.a.png) - - - Installing the analyser is a breeze, suddenly I have two new commands. Lets try out the analyzer and see what it can do. - - - [![2015-09-10 (1)](https://powershell.org/wp-content/uploads/2015/09/2015-09-10-1.png)](https://powershell.org/wp-content/uploads/2015/09/2015-09-10-1.png) - - - Unfortunately the help on my machine is not updated, but the online version seems to be updated. - - -`help Invoke-ScriptAnalyzer -online -`This goes to the [online version](http://go.microsoft.com/fwlink/?LinkId=525914). Also from the [PowerShell Gallery PSScriptAnalyzer site](http://www.powershellgallery.com/packages/PSScriptAnalyzer/) there is a link to the [Project Site at GitHub.](https://github.com/PowerShell/PSScriptAnalyzer/)  - - - [![ScriptAnalyzer-start-multithread](https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.png)](https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.png) - - - This is kind of neat and it looks like I only have one warning, though 6 times. - - - ***"Cmdlet 'Write-Verbose' has positional parameter. Please use named parameters instead of positional parameters when calling a command."*** - - - Opening the same file in ISE  looking at line 92 and running the script analyser - - - [![ScriptAnalyzer-start-multithread.ise.slim](https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.ise_.slim_.png)](https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.ise_.slim_.png) - - - The help from Write-Verbose tells me that they are referring to the -Message parameter. - - - [![help-write-verbose](https://powershell.org/wp-content/uploads/2015/09/help-write-verbose.png)](https://powershell.org/wp-content/uploads/2015/09/help-write-verbose.png) - - -That looks like a pretty easy fix. Going through the file and fixing the 6 warnings and suddenly there are none left. - -[![ScriptAnalyzer-start-multithread.ise.fixed](https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.ise_.fixed_.png)](https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.ise_.fixed_.png) - -I'm sure the fact that there weren't more errors was mostly due to dumb luck combined with me testing [ISESteroids][5] at the time of writing. (Side note: Try it out. **Install-Module ISESteroids.** It is really AWSOME or quoting Tim Cook; It's AMAZING) ISESteroids is an add-on for ISE which adds some neat stuff like highlighting errors in the code but that's a subject for some other day. Let's just say it saved my behind this time. - -[![github.update](https://powershell.org/wp-content/uploads/2015/09/github.update.png)](https://powershell.org/wp-content/uploads/2015/09/github.update.png) - -Now that really wasn't too bad. To update the code on PowerShellGallery I need to increment the version of the module. This is done in the manifest file .psd1. - -[![update-version](https://powershell.org/wp-content/uploads/2015/09/update-version.png)](https://powershell.org/wp-content/uploads/2015/09/update-version.png) - -Now I can update the module by running the command from the [Publish Module][6] page - - -`PS> Publish-Module -Name -NuGetApiKey -`[![publish-module](https://powershell.org/wp-content/uploads/2015/09/publish-module.png)](https://powershell.org/wp-content/uploads/2015/09/publish-module.png) - -Now the code is accessible to all .... And there was [much rejoicing][7].  - -## Looking a little closer at the ScriptAnalyzer - -Lets see what the help says.  - -#### Invoke-ScriptAnalyzer - -_"Parameter Set: Default_ _Invoke-ScriptAnalyzer [-Path]  [-CustomizedRulePath  ] [- -ExcludeRule  - ] [- -IncludeRule -  ] [-LoggerPath  ] [-Recurse] [- -Severity -  ] [ ]_ - -_Detailed Description_ _Invoke-ScriptAnalyzer starts analyzing one or more specified scripts by using ScriptAnalyzer, evaluating your scripts against a set of best practice measures called rules. ScriptAnalyzer works by evaluating scripts against either all available rules, or against a set of rules that you specify by adding the ExcludeRule or IncludeRule parameters. After ScriptAnalyzer finishes evaluating your scripts, it displays results in the console window."_ - -Looks like IncludeRule and ExcludeRule parameters are straight forward. To get a list of rules and their descriptions Get-ScriptAnalyzerRule is very helpful. - -#### Get-ScriptAnalyzerRule - -Parameter Set: Default Get-ScriptAnalyzerRule [-CustomizedRulePath  ] [-Name  ] [-Severity  ] [ ] - -[![Get-ScriptAnalyzerRule](https://powershell.org/wp-content/uploads/2015/09/Get-ScriptAnalyzerRule.png)](https://powershell.org/wp-content/uploads/2015/09/Get-ScriptAnalyzerRule.png) - -The output gives us much useful information, severity level and a nice description of each rule. - -## More - -PowerShellGallery.org has a nice [GettingStarted][8] page.  - -## ps. - -Remember PowerShell Summit Europe starts Monday. Check out the [Event Schedule][9] and I hope to see you there. If on the other hand you're missing out check out these videos from [PowerShell Summit North America 2015][10]. - - - - - -#### Contact me - -Twitter [@mrhvid][11] -Web [Jonas.SommerNielsen.dk][12] - - [1]: https://powershell.org/2015/08/20/multithreading-using-jobs/ - [2]: https://powershell.org/2015/08/28/list-users-logged-on-to-your-machines/ - [3]: http://www.PowershellGallery.com - [4]: https://powershell.org/2015/09/06/writing-and-publishing-powershell-modules/ - [5]: http://www.powertheshell.com/isesteroids/ - [6]: https://www.powershellgallery.com/packages/upload - [7]: https://www.youtube.com/watch?v=GjjZGyYcH9E - [8]: https://www.powershellgallery.com/pages/GettingStarted - [9]: https://eventmgr.azurewebsites.net/event/home/PSEU15 - [10]: https://www.youtube.com/playlist?list=PLfeA8kIs7CochwcgX9zOWxh4IL3GoG05P - [11]: https://twitter.com/mrhvid - [12]: http://Jonas.SommerNielsen.dk diff --git a/content/articles/2015-09-12-find-stale-accounts-in-active-directory.md b/content/articles/2015-09-12-find-stale-accounts-in-active-directory.md deleted file mode 100644 index 2aac351ad..000000000 --- a/content/articles/2015-09-12-find-stale-accounts-in-active-directory.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Find Stale Accounts in Active Directory -authors: - - Matt Laird -date: "2015-09-12T16:02:38+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/09/find-stale-accounts-in-active-directory/ ---- - -# **Find Stale Accounts in Active Directory** - -Everyone who has managed Active Directory knows that keeping it free of "stale" accounts is a tough task.  Typically no one cares about this until it’s time for the Microsoft True Up.  Then we’ve got to hustle to get rid of all these unused accounts before we have to pay for them again!  Pre-PowerShell it was tough because well... you didn't have POWERSHELL!  Now the hardest part about finding these accounts is defining what stale means to your company.  There is no right or wrong answer to this question, but there are some things that we can check to help lead us to an optimal answer.  You can read the rest of this article by clicking on the link below.  While you are there check out some of my other posts, the [script repository][1] and the [resource page][2]. - -**[Find Stale Accounts in Active Directory][3]** - -As always make sure once you've checked us out over at [PowerShellMasters.com][4] to head back here to read more awesome PowerShell posts on [PowerShell.org][5]. - -If you have some comments, questions or advice I'm happy to hear it.  Thanks for reading and I hope everyone likes the article. - -Thanks - -Matt - - - - [1]: http://powershellmasters.com/scripts/ - [2]: http://powershellmasters.com/resources/ - [3]: http://powershellmasters.com/2015/07/find-stale-accounts-in-active-directory/ - [4]: http://powershellmasters.com - [5]: https://powershell.org diff --git a/content/articles/2015-09-13-call-for-topics-extended-powershell-and-devops-global-summit-2016.md b/content/articles/2015-09-13-call-for-topics-extended-powershell-and-devops-global-summit-2016.md deleted file mode 100644 index 72465889c..000000000 --- a/content/articles/2015-09-13-call-for-topics-extended-powershell-and-devops-global-summit-2016.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "Call for Topics Extended: PowerShell and DevOps Global Summit 2016" -authors: - - Don Jones -date: "2015-09-14T06:56:16+00:00" -categories: - - PowerShell Summit -aliases: - - /2015/09/call-for-topics-extended-powershell-and-devops-global-summit-2016/ ---- - -In light of our recent [announcement regarding the future of PowerShell Summit][1], we are extending the call for topics to the end of October, 2015. - -We invite speakers to re-visit their existing proposals and indicate the desired length of their session. For example, simply add "[45min]" to the session abstract if you feel your session is suitable for our traditional 45-minute time slot. Or, indicate an alternative of [90min] or [120min].  - -We also are broadening the scope of the event to include a variety of DevOps-focused topics. We welcome sessions on DevOps practices, tooling, and technologies. - -Topics on any technology centered on the PowerShell Language Specification are also welcome, including cross-platform DSC, PowerShell on operating systems other than Windows, and so on. - -With our expanded focus and renewed commitment to deep-dive, DevOps-flavored information, we hope that you'll take the time to propose a session for this wonderful new event! Please [follow the instructions on the original call for topics][2], with the new deadline and topical focus in mind. - - [1]: https://powershell.org/2015/09/13/future-of-powershell-summit-in-europe-and-north-america/ - [2]: https://powershell.org/2015/08/03/powershell-summit-north-america-2016-call-for-topics/ diff --git a/content/articles/2015-09-13-future-of-powershell-summit-in-europe-and-north-america.md b/content/articles/2015-09-13-future-of-powershell-summit-in-europe-and-north-america.md deleted file mode 100644 index 1d3bc4f70..000000000 --- a/content/articles/2015-09-13-future-of-powershell-summit-in-europe-and-north-america.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Future of PowerShell Summit in Europe and North America -authors: - - Don Jones -date: "2015-09-14T06:49:02+00:00" -categories: - - PowerShell Summit -aliases: - - /2015/09/future-of-powershell-summit-in-europe-and-north-america/ ---- - -As we kick off PowerShell Summit Europe 2015, I wanted to share some decisions we've made regarding the future of the event. - -When we first launched PowerShell Summit in 2013, our goal was to be the spiritual successor of the former “PowerShell Deep Dive” events held as part of Quest’s The Experts Conference (TEC) event. Dell’s acquisition of Quest eliminated TEC, and PowerShell.org worked with the PowerShell product team to create the Summit. - -It’s important to understand that Microsoft has never financially supported PowerShell Summit, except for sending team members to participate and present. Microsoft wanted to ensure the Summit would continue even if Microsoft itself got distracted in one year – something which does happen – and establishing the event as independent and financially secure was a critical part of the vision. For the first two years, that meant Summit’s expenses were charged to the organizers’ personal credit cards, and then paid back once registration fees came in. With a budget of around $75,000 per year, it was a significant commitment. - -Our expansion to Europe in 2014 was an attempt to make the content more readily accessible to a larger audience. Europe 2014 was also the first event where we recorded and posted all of the session content, using equipment funded entirely by members of the community. Although smaller, due to exchange rates, higher taxes, and higher overall expenses, Europe still runs a budget close to that of its US counterpart. - -The format of the Summit – 45-minute session blocks – was established at the Deep Dive as a way to present a variety of content, force a tight topical scope, and provide ample time for both Q&A and mingling. - -After completing both 2015 events – in North America and Europe – we decided to sit down and take a look at Summit, think back to its original goals, and see if we were still doing the best job we could to meet those goals. It’s been an interesting conversation, and we have some decisions to share. - - - -**PowerShell Summit Europe** - -First, we at PowerShell.org will not be proceeding with a PowerShell Summit Europe event in 2016. The two Europe Summits that we’ve held so far have been successful, but they involve many times the level of work as the North American event, mainly because everyone running the thing is eight or nine time zones away from where it’s to be held. We literally, in some cases, don’t speak the language. And, because we rely entirely on the efforts of volunteers, the additional time commitment just isn’t sustainable. It’s also personally expensive, since everyone running the event pays – out of pocket – for their international flights, hotel rooms, and so on. It’s been a big burn for our Board members, in particular. - -There’s also a financial problem with the event itself. After two years, we’ve been able to get the North American event to generate enough profit that the excess income from one year can pay for the deposits on the following year – meaning the event is financially self-sufficient, and people’s personal credit cards are no longer at risk. We’ve not been able to achieve that level of financial independence for the European event, in large part due to our own ignorance of the European market, pricing, business customs, taxes, and so on. That means the European events still require someone’s personal credit card to guarantee deposits and event expenses, and it’s pretty scary for those people. So far, we’ve always paid them back – but it’s a pretty big deal to be carrying tens of thousands of dollars on your own credit card, hoping the event sells out. - -So it isn’t at all that we think Europe somehow doesn’t “deserve” its own event – those of us in the USA just can’t be the ones to organize it. In speaking with several members of the community here in Stockholm during Summit 2015, they agree - the community here is more than able to make an incredible event, and organize and price it according to local needs. - - - -**PowerShell Forum: It’s Time for YOU to Get Involved** - -So we’ve creating an [event planning guide][1]. If you, or someone you know, would like to organize a PowerShell event in your country or region, then we’re more than happy to help. We’ll help promote it, we’ll help you get a registration website set up (the same one that Summit uses), and we’ll connect you with the product team and as many global speakers as we can to help create your content program. Ultimately, we think Europeans can do a much better job at organizing an event in Europe, but we’re happy to help as much as we can. We’ve even reserved a brand name, “PowerShell Forum,” which you’d be welcome to use if you want to. - -In fact, we hope that people inside the US will also want to hold “PowerShell Forum” events in their regions. They should be a great “next step” after a smaller PowerShell Saturday event, and they offer the opportunity to fine-tune the content for that specific area. The PowerShell Summit is meant as an expert-grade, deep-dive event – but PowerShell Forum could address beginners, intermediate users, or whatever is locally needed. We believe the guide we’ve created will help remove a lot of the uncertainty and ambiguity of organizing such an event, enabling more people to “give back to the community” by setting up locally focused and regional conferences. - -Also, know that PowerShell Summit Europe was hardly the only option for Europeans. For years, PowerShell MVP Tobias Weltner has held a mostly German-language PowerShell event that’s well-attended by an enthusiastic and engaged audience. European DevOps Days and TechDays events outnumber the ones held in the US, in some years. If you’re looking for a live event with solid PowerShell content, make sure you’re actually _looking,_ because they’re out there. And, as already mentioned, we hope to work with a lot of people all over the world to help promote locally organized events that feature amazing PowerShell content. Tobias’ work in particular shows that locally organized events can be fantastic, and can in many ways be superior to having us Americans come over and fumble our way through something in an unfamiliar environment. - - - -**Many Forums, One Summit** - -With all that in mind, PowerShell Summit North America will be known as **[PowerShell and DevOps Global Summit][2]** from here on out, beginning with our 2016 event in Bellevue, Washington. We believe that one of the primary benefits of Summit is close contact with a wide swath of the PowerShell team, and so it’s likely that _most_ future Summits will be in the area of Microsoft’s campus. It’s simply easier to fly us all up there than it is to have the product team close up shop and fly somewhere else to meet us. The “DevOps” part of the new name reflects the fact that while PowerShell is an awesome tool, it’s real purpose is to help meet business needs. DevOps – a kind of IT management and operational philosophy – is a business-level need that, in the Microsoft space, PowerShell helps realize. - -We’re also going to be changing the session format of the Summit. Rather than a strict schedule of 45-minute sessions, we’re going to switch things up a bit. We’ll continue to offer space for short sessions, since they’re a great way to cover tightly focused topics. But we’re also going to expand into longer sessions, allowing presenters to truly “dive deep” into the guts of the technology. We’re going to create more opportunities for smaller breakouts, since it’s the discussions and personal interactions that create some of the best value from the Summit. And, aside from preparatory pre-conference sessions offered at additional charge, we’re going to strongly de-emphasize beginner- and even intermediate-level content. There are plenty of educational opportunities elsewhere for beginners, and part of the original mission of the Summit was to help the product team connect with some of PowerShell’s most hardcore users. So you’ll see us pushing the envelope more in terms of session content. - -We’re also going to devote a lot of time and effort toward making Summit more interactive. The “wow” factor of that first year at TEC was the amazing amount of back-and-forth generated in the single, 50-person session room. The information shared, the perspectives gained – that’s all difficult in a 100-person session like we have now. So with a European event no longer consuming so much time and brainpower, we’re going to re-commit to making Summit a more personally engaging event, not just a conference. The community has offered a ton of great ideas in this direction already, and we’re going to start implementing some of them in 2016. We’ll continue to experiment and tweak as a regular part of doing business, evolving the event to meet your needs, and to better connect you to this technology community. - -“Some longer sessions” means “fewer total speakers,” which means we’ll also be able to do a bit more, financially, to help our presenters. Until now, they’ve traveled and housed themselves more or less on their own dime, and we’d like to do a lot more to make it less burdensome. Our goal is to have the best presenters on the planet, and we want to try and reduce the “expense hurdle” as much as possible, so that speaker selection isn’t limited to just those who can easily afford to come. We also have a very specific goal of making room for new presenters, so that everyone in the community can truly participate. - - - -**Facing Facts and Setting Expectations** - -We do realize that a relocation to Bellevue, and the elimination of a European Summit event, will reduce the number of people who can make it to the Summit. We’ve decided we’re okay with that. The Summit was always intended to be a small event, attracting the best and brightest in the industry. If you’re working deeply with PowerShell and its related technologies, then the Summit still offers incredible value – even if you’re traveling from far away. We realize that for someone who isn’t deeply engaged with PowerShell, we may be making Summit a harder prospect – but if you’re not truly, deeply engaged, then Summit might not have been the right event for you. - -To be very clear: we know that there’s a huge need for beginner- and intermediate-level education, and that it needs to be affordable. But Summit _isn’t that event._ We still think Summit is an incredible value, one that – if PowerShell is truly _part of your professional_ – is well worth the expense, even if that involves international travel. - -And what we’re _not_ okay with is for Europeans, or anyone else in the world, to be somehow excluded from the great content that a dedicated PowerShell event offers. But that’s not something we can just _give_ everyone. If you look at the major regions of the world – Asia, Australia, Northern Europe, Southern Europe, South Africa, the list goes on – there’s no way we at a single volunteer organization run by six people can possibly bring content to _everyone._ We just aren’t that wealthy! So everyone is going to have to pitch in and help. If you think an awesome PowerShell event would be a huge success in, say, France, then you’re going to have to be the one to step up and organize it. We will _absolutely help_ in terms of promotion, finding speakers, selecting content, and so on – but this is community, and you only get out of it what you put into it. We’re putting a big effort into this event-planning guide to help you get started, but your success will depend a lot on your own efforts. We want _everyone_ to have the education and interaction that a Summit-style event offers – but _everyone_ is going to have to help make it happen. - -Also, know that we will continue with our tradition of recording session content and posting it, for free, online. We’re looking into adding HD video so that you can see presenters as well as their presentations, although there’s no real way for us to capture the immersive experience of actually attending in person. - - - -**What About Beginners?** - -And if the Summit is going to double-down on deep-dive content, what about newcomers who are still trying to become deeply engaged? Hundreds of training centers across the globe still provide solid PowerShell training from Microsoft’s Official Curriculum catalog and Microsoft’s Courseware Marketplace. Independent conferences – TechMentor, for example – offer a range of PowerShell topics as a regular part of their agenda. Books and video training on entry-level topics are available in abundance. Summit was never really intended as an entry-level event, although we recognize that we’ve strayed a bit into that territory in an attempt to be more accessible to a broader audience. **Our 2016 strategy is really a recommitment to our original concept of serving the PowerShell _professional._** But the individual PowerShell Forum events, PowerShell Saturday events, or other PowerShell conferences you organize – whatever you name them, and wherever you hold them – can definitely help meet the need for beginners. - - - -**Our Path Forward** - -**PowerShell and DevOps Global Summit 2016** will be happening in the same year as PowerShell’s 10th birthday, and so much has changed in that decade. Once-difficult topics like Remoting are – for the deeply engaged – now considered routine. We’ve moved on to higher-layer topics like Desired State Configuration, Continuous Integration and Delivery, cloud-based Workflow, and much more. As a community, we’ve developed best practices and patterns that we share, and we’ve seen Microsoft begin a shift toward open-source releases of key components. Heck, we’ve seen Microsoft move PowerShell technologies to other operating systems – something nobody ever thought would happen “back in the day.” And PowerShell.org has remained a volunteer-run organization that tries to benefit the entire community. We’re evolving Summit, and we’ll continue to do our best to do good works on behalf of the community. - -The Board of PowerShell.org has gone through a lot of soul-searching in writing this document, because we don’t want to anyone to see us as walking away from the European Summit. Instead, we feel that we’ve proven a European event _can_ be successful – and we think it _will_ be successful once our European friends step in and take over. We are all stronger _together_ as a community, especially when we can serve our local communities in more specific and granular ways. We would experience the most profound joy you can imagine if, in a couple of years, there are PowerShell Forum (or whatever they’re named) events throughout Europe… Canada… Africa… Asia… Australia and New Zealand… the United States… everywhere. We would take it as the greatest compliment and achievement if we’ve done nothing more than help people see how to pull it off, and inspire them to dive in and make things happen in their own backyard. - -We hope, if you’ve read all this, that you’re already giving it some thought. - - [1]: http://cdn.powershell.org/wp/wp-content/uploads/2013/07/Making-a-PowerShell-Forum.docx - [2]: https://powershell.org/summit/ diff --git a/content/articles/2015-09-15-store-secured-password-in-powershell-script.md b/content/articles/2015-09-15-store-secured-password-in-powershell-script.md deleted file mode 100644 index 261ef01ee..000000000 --- a/content/articles/2015-09-15-store-secured-password-in-powershell-script.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Store Secured Password in PowerShell Script -authors: - - Matt Laird -date: "2015-09-16T00:52:27+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks - - Tools -aliases: - - /2015/09/store-secured-password-in-powershell-script/ ---- - -Automation is awesome, but what if you need to run a script with elevated privileges?   If you are following security best practices then the account you login with most likely doesn't have the required elevated privileges.  Storing your password in plain text in your scripts is no good either.  So what do we do?  There are several options and each has there place, but I'll show you my favorite below.  Check out the full article by clicking on the link below.  While you are there check out some of my other posts, the [script repository][1] and the [resource page][2]. - -**[Store Secured Password in PowerShell Script][3]** - - - -As always make sure once you've checked us out over at [PowerShellMasters.com][4] to head back here to read more awesome PowerShell posts on [PowerShell.org][5]. - -If you have some comments, questions or advice I'm happy to hear it.  Thanks for reading and I hope everyone likes the article. - -Thanks - -Matt - - [1]: http://powershellmasters.com/scripts/ - [2]: http://powershellmasters.com/resources/ - [3]: http://powershellmasters.com/2015/08/store-secured-password-in-powershell-script - [4]: http://powershellmasters.com - [5]: https://powershell.org diff --git a/content/articles/2015-09-16-speaking-at-powershell-summit-2016-topic-ideas-for-aspiring-speakers.md b/content/articles/2015-09-16-speaking-at-powershell-summit-2016-topic-ideas-for-aspiring-speakers.md deleted file mode 100644 index b1ca3b29a..000000000 --- a/content/articles/2015-09-16-speaking-at-powershell-summit-2016-topic-ideas-for-aspiring-speakers.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "Speaking at PowerShell Summit 2016: Topic Ideas for Aspiring Speakers" -authors: - - Don Jones -date: "2015-09-16T08:26:25+00:00" -categories: - - PowerShell Summit -aliases: - - /2015/09/speaking-at-powershell-summit-2016-topic-ideas-for-aspiring-speakers/ ---- - -Our call for topics for **PowerShell and DevOps Global Summit 2016** is open until November 1st, and I thought I'd share some ideas for the kind of 400-level content we're looking for. - -First, to submit abstracts, [pre-register as a speaker candidate][1]. Be sure to fill in the brief demographic information presented, and then add any information for the Attendee Directory that you'd like. When you're done with that, select **Abstracts** from the menu at the tippy-top of the page, and enter your session information. Be sure to include, as the first characters in the abstract, either "[45m]", "[90m]", or "[120m]" as an indication on your desired timeslot - 45, 90, or 120 minutes. Also set your session to "Ready for Review" when you're done. - -Now... for some ideas! Feel free to riff on these and twist them in any direction you think people would find useful. Keep in mind that we're after 400+ level content - deep, deep dives. - - * PowerShell Remoting. Tackle something difficult, like multi-hop authentication, certificate authentication, etc. - * DevOps. Case studies and detailed information into how you've seen DevOps succeed or fail, along with lessons learned. - * Tooling. Bring deep education on tools that can help enable a DevOps way of life. More than just feature overviews - dig deep into exactly how you improved your organization's operations, and what you learned along the way. - * Deeper coding. Using .NET, digging into the depths of CIM, creating scripted classes, diving into workflow - there's a huge universe of advanced, core PowerShell topics that attendees would benefit from. - * Domain-specific topics. Using PowerShell with Azure, O365, System Center, and more - these are all in-demand topics. Keep the coverage deep - beginner content belongs at another event. - * Hacking the shell. Extending the ISE, writing your own tab completion/expansion routines, and more - dig deep into the shell's guts and show people what can be done. - * Practical shell. Help attendees build reporting infrastructure, inventorying systems, and other complete solutions using a PowerShell, DIY approach. - -As you can see, it's a real greenfield. Speakers will be offered 3 nights' hotel accommodations at the Summit, and anyone presenting for more than 45 minutes will be offered an additional honorarium to further offset travel expenses. **Everyone** who has been using the shell for a while has something to offer - so step in and offer! - - [1]: https://eventloom.com/event/register/PSNA16/Speaker?preregister=1 diff --git a/content/articles/2015-09-17-take-home-from-powershell-summit-europe.md b/content/articles/2015-09-17-take-home-from-powershell-summit-europe.md deleted file mode 100644 index e84b64e56..000000000 --- a/content/articles/2015-09-17-take-home-from-powershell-summit-europe.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Take home from PowerShell Summit Europe -authors: - - Jonas Sommer Nielsen -date: "2015-09-17T12:25:55+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/09/take-home-from-powershell-summit-europe/ ---- - -WOOHA it's been a great week. - -I sat down last night my brain all fried and tried to compile a list of things to remember from the past week. - -[![PowerShellMagazine - (wallpaper) - KEEP CALM.cdr](https://powershell.org/wp-content/uploads/2015/09/KeepCalmAndLearnPowerShell_1024x768.jpg)][1] - -There is  much focus on "changing the mindset" of the community. Get into the DevOps mindset and become a toolmakers. This is my take-home from the conference. There's no way to summarize all of the conference other than to say: Look forward to the videos on YouTube. - -#### Stuff to read: - - * A great short read about "[Toolmaking][2]" - * [Steven][3] did a [DevOps Reading list][4]. - -### Concepts: - - * **[Iain Brighton][5]'s talk "Man vs Testlab"**. I'm definitely going home and testing his [script][6] He created a script that will do everything from downloading .iso's from Microsoft, Configure Hyper-V, create instances and spawns servers for you. To stand up a entire Testlab following the [Microsoft Lab guides standard][7]. (DC, Server, Non-domain joined server and a client) You can of cause easily change the setup. - * **GitHub** I was amazed by [Hemant Mahawar][8] and [Krishna C Vutukuri][9]'s talk on the way the PowerShell team uses GitHub and how easy it is to contribute to the code today. (Go -get a GitHub account today -! and start learning if you haven't already, and [go here][10] to contribute) - * **PowerShell Gallery** There were multiple talks on the [Gallery][11] and I personally love this. It's nice to hear that the PowerShell Team feels the same way. (See earlier [post][12]) - * **Pester tests** Unfortunately I didn't attend any pester specific talks this time. But it's clear from the general theme that pester is a big part of the DevOps' mindset and the way tools are being developed in the future. - *  Quote [June Blender][13]: _Free! #PowerShell Community Build Server. Runs Pester tests on v2-v5 automatically. Best thing since the pipeline. _ - * **DSC** This is a crucial platform for the future. The ability to use the "Make it so" mindset. To configure and services and prevent drift, this is the documentation of the future. [Getting started][14] - -[![makeitso](https://powershell.org/wp-content/uploads/2015/09/makeitso.png)](https://powershell.org/wp-content/uploads/2015/09/makeitso.png) - -There were tons of other things going on. On a personal note after my trip to [PSUG.dk][15] a few weeks ago where we had a session on [ARM][16] and spend a day creating JSON files by hand by following the schema's on GitHub and had a horrible experience.  [Jeff][17] blew my mind when he demoed roughly the same and noted, off cause we just do: ConvertFrom-Json play with the PowerShell object and ConvertTo-Json back to JSON. He had some really nice examples on how not to do JSON templates, and better ways to generate them. - -And I got really excited when during [Simon][18]'s talk on GitHub, I asked for ISE integration and [Tobias][19] replied from somewhere behind me. - --_Working on that_. - -Meaning [ISESteroids][20] will have that soon. Happy times 😀 - - - -When all the above is done, I only need to figure out how to get to the next Summit 🙂 - - - - - -#### Contact me - -Twitter [@mrhvid][21] - -Web [Jonas.SommerNielsen.dk][22] - - [1]: http://www.powershellmagazine.com/2011/09/23/powershell-wallpapers/ - [2]: http://www.itskeptic.org/content/important-devops-word-toolmakers - [3]: https://twitter.com/StevenMurawski - [4]: http://stevenmurawski.com/devops-reading-list/index.html - [5]: https://twitter.com/iainbrighton - [6]: https://github.com/iainbrighton/PSHSummit-Man-vs-Testlab - [7]: http://social.technet.microsoft.com/wiki/contents/articles/7807.windows-server-2012-test-lab-guides.aspx - [8]: https://twitter.com/HemantMahawar - [9]: https://github.com/KrishnaV-MSFT - [10]: https://github.com/powershell/ - [11]: http://www.PowerShellGallery.com - [12]: https://powershell.org/2015/09/11/working-with-powershellgallery/ - [13]: https://twitter.com/juneb_get_help - [14]: https://www.microsoftvirtualacademy.com/en-US/training-courses/getting-started-with-powershell-desired-state-configuration-dsc--8672 - [15]: http://www.psug.dk/?p=649 - [16]: https://azure.microsoft.com/en-us/documentation/articles/resource-group-overview/ - [17]: https://twitter.com/JeffWouters - [18]: https://twitter.com/SimonWahlin - [19]: https://twitter.com/TobiasPSP - [20]: http://www.powertheshell.com/isesteroids/ - [21]: https://twitter.com/mrhvid - [22]: http://Jonas.SommerNielsen.dk diff --git a/content/articles/2015-09-21-powershell-scheduled-jobs-and-tableau-analytics.md b/content/articles/2015-09-21-powershell-scheduled-jobs-and-tableau-analytics.md deleted file mode 100644 index 8f56dfb88..000000000 --- a/content/articles/2015-09-21-powershell-scheduled-jobs-and-tableau-analytics.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: PowerShell Scheduled Jobs and Tableau analytics -authors: - - Mike Roberts -date: "2015-09-21T18:43:21+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/09/powershell-scheduled-jobs-and-tableau-analytics/ ---- - -Here’s a brief rundown of how we leverage a few Cmdlets from the PSScheduledJob module to manage our Analytics stack. For those of us on the Analytics team at -[ -Pluralsight -][1] -, PowerShell is the lynch-pin which binds our two worlds together. To manage the gaps inherent in all platforms (since one tool would be hard-pressed to cover all areas), we use PowerShell to link the worlds of Data and Analytics (and back). We do this because of its depth and the ease with which we can automate just about anything. - - -[![data_stack](https://powershell.org/wp-content/uploads/2015/09/data_stack.png)](https://powershell.org/wp-content/uploads/2015/09/data_stack.png) - - - - - - - - - - - - - - -All that said, we leverage two Cmdlets extensively: -_ -Register-ScheduledJob -_ -and -_ -New-JobTrigger. -_ -In all, there are: - - -- - -90+ jobs - - -- - -30+ enabled and scheduled - - -- - -2 jobs to manage the metadata - - -- - -1 Tableau workbook that surfaces this data to our team - - -**The ‘How does the job perform’ part: ** - -So, you’ve registered a job which soon becomes about 50 jobs. How do you know if each of them succeeded, how long they took, and whether or not they had errors? What about knowing if one takes 10x longer on one particular day? This is certainly worth investigating and analyzing so that you can react quickly to potential hiccups. The below script will let you do that and is meant to be...wait for it...scheduled. - - -`$jobs = Get-ScheduledJob -foreach ($job in $jobs) { - Get-Job -Name $job.Name -Newest 1 | select -Property @{n='Env';e={"$env:computername"}},@{n='Name';e={$job.name}}, @{n='State';e={$_.State}},@{n='DurationInSec';e={($_.PSEndTime - $_.PSBeginTime).Total Seconds}},@{n='TimeStart';e={$_.PSBeginTime}},@{n='TimeEnd';e={$_.PSEndTime}},@{n='ErrCnt';e={($_.Error).count}},@{n='Date';e={(Get-Date).ToString('yyyy-MM-dd')}} | Export-Csv -Path 'your path' -Delimiter ";" -NoTypeInformation -Append -} -`**The ‘When do these jobs happen’ part:** - -While we didn’t use all the properties in the _Get-ScheduledJob_ cmdlet, we did pull out a few. Mostly, we want duration, error count and start/end times. - - -It’s one thing to have a few scheduled jobs running, but it becomes a different animal altogether when there are over 90 happening throughout the day (and on multiple machines). In order to both tame the chaos and control the inevitable job failures, it is necessary to know about (1) when they happened and (2) what happens -_ -when -_ -they, well, run. - - -Again, the basic assumption is that one has some scripts and/or files with code in them. The scheduled jobs, then, make this easier. Here’s a basic example of the ‘when’ regarding the scheduled jobs. We’re exporting a csv so that we can then consume it in -[ -Tableau -][2] -for analysis and alerting: - - -`$t = New-JobTrigger -Daily -At "8:00PM" -RandomDelay 00:00:30 -Register-ScheduledJob -Name 'Cool Name Here' -ScriptBlock { -$TsJobs = Get-ScheduledJob | select -expand Name -foreach($job in $TsJobs) { - Get-JobTrigger -Name $job | select @{n='Env';e={"$env:computername"}},@{n='Date';e={(Get-Date).ToString('yyyy-MM-dd')}},@{n='JobName';e={$job}},Frequency,@{n='Time';e={([datetime]($_.At)).ToShortTime String()}},@{n='DaysOfWeek';e={$_.DaysOfWeek}},Enabled,RepetitionInterval | export-csv 'your path' -delimiter ";" -NoTypeInformation -Append - } -} -Trigger $t -`For this part, much like above, we use a few properties from the -_ -Get-JobTrigger -_ -cmdlet for the analysis and trending of our jobs (see image below). - - - - -[![schd_job_triggers](https://powershell.org/wp-content/uploads/2015/09/schd_job_triggers.png)](https://powershell.org/wp-content/uploads/2015/09/schd_job_triggers.png) - - - - - - - - - - - - - - - - - -**Summary** - -I have added a ‘Date’ field to both sections so that we can do some historical analysis with the jobs. What’s also important is whenever we have to update software/change things on the servers, we can use this to identify when, during the day, we might have a window to do this, not to mention what jobs would be affected by it. - -With two simple bits, we’re able to get a deeper look into the performance and potential avenues for tuning of our analytics pipeline and the jobs. This type of analysis on the ScheduledJob cmdlets can also be correlated with system performance (eg: logs) and our Analytics infrastructure’s performance and logs. While it’s a unique look at a use case for PowerShell, we find it’s been invaluable at providing the data that might not fit into the domains listed above. In short, it’s a perfect ‘glue’ for each pillar we interact with. - - -In the image below, we’ve put it all together for the ‘Job Performance’ overview. This allows us to narrow in on the job/jobs that might not be performing up to par (or as they have historically). - - -[![data_control_dashboard](https://powershell.org/wp-content/uploads/2015/09/data_control_dashboard.png)](https://powershell.org/wp-content/uploads/2015/09/data_control_dashboard.png) - - [1]: http://www.pluralsight.com/ - [2]: http://www.tableau.com/ diff --git a/content/articles/2015-09-23-automate-enabling-and-disabling-lync-skype-for-business-users.md b/content/articles/2015-09-23-automate-enabling-and-disabling-lync-skype-for-business-users.md deleted file mode 100644 index cd9660c7a..000000000 --- a/content/articles/2015-09-23-automate-enabling-and-disabling-lync-skype-for-business-users.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Automate enabling and disabling Lync / Skype for Business users -authors: - - Steve Parankewich -date: "2015-09-23T21:30:58+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -aliases: - - /2015/09/automate-enabling-and-disabling-lync-skype-for-business-users/ ---- - -Hello PowerShell.org community, - -This is my first post here at PowerShell.org, and I have a goal of posting tips, tricks, articles, and solutions once a week. My first exposure to scripting was on my x486 computer. I would always create .bat files to launch my DOS based games from the root folder. I learned complex scripting through the use of VB Script, automating the roll out and updating of Windows 2000 desktops and servers. I quickly transitioned to PowerShell as my preferred scripting language upon its release. I use PowerShell on a daily basis to administer Windows Server, SQL Server, Exchange, Lync / Skype for Business, Citrix XenApp / XenDesktop, Office 365, and Dell Active Roles Server. I have very much enjoyed watching the progression and adoption of PowerShell as the default scripting language. I hope my posts will be useful to other administrators around the world. - -Today's post deals with automatically enabling and disabling users for Lync / Skype for Business. I kept the script examples simple so that they are easy to understand. If you would like a complex scenario tackled, simply comment on the blog and I will post the solution. - -Head on over to [PowerShellBlogger.com][1] for a full breakdown of enabling and disabling Lync / Skype for Business users locally or remotely. - -Best Regards, -Steve Parankewich -Twitter: [powershellblog][2] - - [1]: http://powershellblogger.com/?p=111 - [2]: http://twitter.com/powershellblog diff --git a/content/articles/2015-09-25-how-to-handle-oauth-from-powershell.md b/content/articles/2015-09-25-how-to-handle-oauth-from-powershell.md deleted file mode 100644 index bc8cb5b09..000000000 --- a/content/articles/2015-09-25-how-to-handle-oauth-from-powershell.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: How to handle oAuth from PowerShell -authors: - - Stephen Owen -date: "2015-09-25T15:35:24+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -aliases: - - /2015/09/how-to-handle-oauth-from-powershell/ ---- - -One of the coolest features of PowerShell is the many tools we have available to work with services on the web, be they SOAP, REST, RPC or even WSDL services.  It's no question, PowerShell makes it very easy to pull down data from any of these places. - -Unfortunately, getting data from a service isn't always as easy as embedding your credentials in a URL. In fact, some services require us to authenticate and ask the user for permission before giving up the goods.  For these, oAuth is the de-facto standard for delegated access.   - -In this blog post today on FoxDeploy.com, we cover an easy method to present a user with an oAuth window to ask for permission, and offer a guide of how to handle the somewhat complicated flow of credentials and URLs needed to delegate permissions, using WordPress as an example.   - -[Using PowerShell and oAuth][1] - -#### Special Thanks - -This post couldn't have happened without contributions by Lee Holmes, [Adam Bertram][2], [Keith Hill][3], [Chris Wu][4], and [Ryan Yates][5] for helping me to understand how to safely store credentials, and for other questions.  Extra thanks go to Adam and Ryan for helping me fact-check the post, and to Chris Wu for his excellent write-up on the '[Hey, Scripting Guy][6]' blog.   - - - --Stephen - - [1]: http://foxdeploy.com/2015/09/25/using-powershell-and-oauth/ - [2]: http://www.adamtheautomator.com/ - [3]: https://rkeithhill.wordpress.com/ - [4]: https://twitter.com/ps4it - [5]: https://twitter.com/ryanyates1990 - [6]: http://blogs.technet.com/b/heyscriptingguy/archive/2013/07/01/use-powershell-3-0-to-get-more-out-of-windows-live.aspx diff --git a/content/articles/2015-09-28-convert-iso-and-wim-to-vhd-with-a-module.md b/content/articles/2015-09-28-convert-iso-and-wim-to-vhd-with-a-module.md deleted file mode 100644 index 845d968c5..000000000 --- a/content/articles/2015-09-28-convert-iso-and-wim-to-vhd-with-a-module.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Convert ISO and WIM to VHD with a module -authors: - - David Jones -date: "2015-09-29T04:24:03+00:00" -categories: - - Tools -aliases: - - /2015/09/convert-iso-and-wim-to-vhd-with-a-module/ ---- - -Convert-WindowsImage.ps1 is a very popular method to create VHD's with. However it's not a module, and in it's current form cant be added to one. - -So I have started a new project on GitHub called WindowsImageTools and posted the results to the [PowerShell Gallery][1]. - -It has a few functions so far. Convert-Wim2Vhd, to do the work,  and New-UnattendXml because it hate having to edit XML to make minor changes. The resulting XML is universal in that it works on both 32 and 64 bit and will do a silent install (currently on Volume Media only). Then it auto-logs on the Admin and run a PowerShell script to kick off what ever you need bootstrapped (like DSC) - -To find out more. take look at the details over on [my blog about WindowImageTools][2] (and Yaks) or the [GitHub repo][3] - - [1]: https://www.powershellgallery.com/packages/WindowsImageTools/ - [2]: https://bladefirelight.wordpress.com/2015/09/29/shaving-the-yak-leads-me-to-create-new-module-windowsimagetools/ - [3]: https://github.com/BladeFireLight/WindowsImageTools diff --git a/content/articles/2015-10-02-delete-specific-e-mail-or-e-mails-from-all-exchange-mailboxes.md b/content/articles/2015-10-02-delete-specific-e-mail-or-e-mails-from-all-exchange-mailboxes.md deleted file mode 100644 index 3857f29f7..000000000 --- a/content/articles/2015-10-02-delete-specific-e-mail-or-e-mails-from-all-exchange-mailboxes.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Delete Specific E-Mail or E-Mails From All Exchange Mailboxes -authors: - - Steve Parankewich -date: "2015-10-02T15:27:10+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -aliases: - - /2015/10/delete-specific-e-mail-or-e-mails-from-all-exchange-mailboxes/ ---- - -Well this is week number two in my quest to post an article once a week and I am back with a common request for Exchange administrators. There are a lot of scenarios that bring up a need to remove an e-mail or e-mails from all mailboxes in your environment. Perhaps there was a disgruntled employee, a virus outbreak, or a reply all to the whole company. We all know that the "Retract" button is best effort (yes I still miss GroupWise for that purpose). - -As always we can turn to PowerShell for our scripting needs. The Search-Mailbox command is your best friend for these scenarios. With a simple Get-Mailbox | Search-Mailbox you can take control of all your mailboxes. Be extremely cautious when executing, with great power comes great responsibility. For a full run down on how to accomplish this head on over to [PowerShellBlogger.com][1]. I look forward to seeing everyone again next week! - - [1]: http://powershellblogger.com/?p=117 diff --git a/content/articles/2015-10-03-october-2015-scripting-games-puzzle.md b/content/articles/2015-10-03-october-2015-scripting-games-puzzle.md deleted file mode 100644 index 549555480..000000000 --- a/content/articles/2015-10-03-october-2015-scripting-games-puzzle.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: 2015-October Scripting Games Puzzle -authors: - - Don Jones -date: "2015-10-03T13:31:53+00:00" -categories: - - Scripting Games -aliases: - - /2015/10/october-2015-scripting-games-puzzle/ ---- - -Our October 2015 puzzle might take us beyond the realm of one-liners, but it circles back to the August 2015 theme of retrieving information from the web. This is another scenario that actually has a lot of real-world applications, in that there's a lot of practical uses in the work environment for this technique.  - - - -## **Instructions** - -The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month's puzzle. You can find them all at https://powershell.org/category/announcements/scripting-games/. Many puzzles will include optional challenges, that you can use to really push your skills. - -**To participate**, add your solution to a public Gist (http://gist.github.com; you'll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post.  -**Only post one entry per person. You are not allowed to come back and post corrected or improved versions. If you do, all of your posts will be ignored. **However, remember that you can always go back and edit your Gist. We'll always pull the most recent one when we display it, so there's no need to post multiple entries if you want to make an edit. - - -Don't forget the [main rules and purpose of these monthly puzzles][1], including the fact that you won't receive individual scoring or commentary on your entry. - -**User groups are encouraged to work together** on the monthly puzzles. User group leaders should submit their group's best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most "favorite" entries of the year will win a grand prize from PowerShell.org. - -## - -## **Our Puzzle** - -Write a short script that can retrieve the most recent article headlines from a blog by using the blog’s RSS or Atom feed. You should ideally just display the headlines, but might also choose to display a URL that links to the article, and might display a short excerpt of the article. If the feed contains the full article text, don’t display it – at most, display a short excerpt. - -While you could definitely write this as a one-liner, and might choose to do so as you start, there's real value in turning this into a "Get-RSSFeed" function. To be fair, lots of folks have done this before - but challenge yourself, and try to figure it out without opening a search engine! - - - -**Challenges:** - - * Try to write this to be a PowerShell command (an advanced function) that uses parameters to direct the behavior of the command. - * Try to ensure your script’s output could be easily displayed in an on-screen table, or redirected to a CSV file. - * Try to minimize your use of “raw” .NET classes (e.g., try to use only PowerShell commands as much as possible). - - [1]: https://powershell.org/?p=2574 diff --git a/content/articles/2015-10-05-finding-evil-ldap-queries.md b/content/articles/2015-10-05-finding-evil-ldap-queries.md deleted file mode 100644 index 5b1ca77a4..000000000 --- a/content/articles/2015-10-05-finding-evil-ldap-queries.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Finding Evil LDAP Queries -authors: - - pscookiemonster -date: "2015-10-05T14:17:34+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/10/finding-evil-ldap-queries/ ---- - -Have you ever wondered what LDAP queries were hitting your domain controllers? Even outside of fun investigations, it can be insightful to get a sampling of queries hitting your domain controller. The more services you have integrated with Active Directory, the more likely a vendor or sysadmin unwittingly configured their service to produce evil queries. - -Mark Morowczynski from Microsoft wrote a great post on [finding these expensive, inefficient, or long running queries][1] - But something was missing. Screen shots of regedit? If you have more than a handful of domain controllers, enabling and disabling this logging is going to be quite a chore. - -[Here's a quick bit][2] on using PowerShell to enable and disable this logging quickly. Take a peek, you might find some misbehaving applications. - - [1]: http://blogs.technet.com/b/askpfeplat/archive/2015/05/11/how-to-find-expensive-inefficient-and-long-running-ldap-queries-in-active-directory.aspx - [2]: http://ramblingcookiemonster.github.io/Evil-LDAP-Queries/ diff --git a/content/articles/2015-10-06-mspsug-virtual-meeting-using-regular-expressions-with-powershell-october-13th-2015.md b/content/articles/2015-10-06-mspsug-virtual-meeting-using-regular-expressions-with-powershell-october-13th-2015.md deleted file mode 100644 index 730ebeef9..000000000 --- a/content/articles/2015-10-06-mspsug-virtual-meeting-using-regular-expressions-with-powershell-october-13th-2015.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "#MSPSUG Virtual Meeting: Using Regular Expressions with #PowerShell – October 13th 2015" -authors: - - Mike F Robbins -date: "2015-10-06T14:13:57+00:00" -aliases: - - /2015/10/mspsug-virtual-meeting-using-regular-expressions-with-powershell-october-13th-2015/ ---- - -Join the Mississippi PowerShell User Group virtually on Tuesday, October 13th at 8:30pm Central Time when [Timothy Warner](http://twitter.com/TechTrainerTim) will present “_**Pattern Match Like a Pro: Using Regular Expressions with Windows PowerShell**_”. - -Many Windows systems administrators are intimidated with regular expressions due to its seemingly strange, "Unixy" syntax. Take heart! By the end of this session, you'll finally understand how to perform simple and advanced text filtering with RegEx, specifically by leveragine PowerShell's -match operator and Select-String cmdlet. - -Visit the [Mississippi PowerShell User Group](http://mspsug.com/2015/09/22/mspsug-1013-meeting-pattern-match-like-a-pro-using-regular-expressions-with-windows-powershell/) website to learn more about Timothy and to find out more details about this month’s meeting. - -The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info](http://mspsug.com/attendee-info/)” section. - -Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this meeting. - -Note: It is not necessary to live in Mississippi or join our user group to attend our meetings or present a session for our user group. - -µ diff --git a/content/articles/2015-10-08-testing-powershell-direct-with-windows-server-2016-tp3-hyper-v.md b/content/articles/2015-10-08-testing-powershell-direct-with-windows-server-2016-tp3-hyper-v.md deleted file mode 100644 index fcd71d48f..000000000 --- a/content/articles/2015-10-08-testing-powershell-direct-with-windows-server-2016-tp3-hyper-v.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Testing PowerShell Direct with Windows Server 2016 TP3 Hyper-V -authors: - - Timothy Warner -date: "2015-10-08T14:03:48+00:00" -categories: - - PowerShell for Admins - - Training -aliases: - - /2015/10/testing-powershell-direct-with-windows-server-2016-tp3-hyper-v/ ---- - -Hey there! I  thought we could test [PowerShell Direct][1] together today. Here's the elevator pitch: In Windows Server 2016 and Windows 10, we can send PowerShell commands from the Hyper-V host directly to its corresponding virtual machines (VMs), _**even in the absence of guest VM networking**_. Yeah, that's cool, isn't it? - -What's just as impressive is that PowerShell Direct works _**even if PowerShell remoting is disabled on the guest VM!** _PowerShell Direct also circumvents Windows Firewall. Note that PowerShell Direct requires that commands are sent only from a Hyper-V host to its local VMs. - -Also, PowerShell Direct is supported at this point only by Windows Server 2016 TP3 and Windows 10. That means a Windows Server 2016 TP3 Hyper-V host cannot leverage PowerShell Direct against, say, Windows Server 2012 R2 virtual machines (give the Hyper-V, PowerShell, and Windows Server teams time; I'm sure this will be supported in the future). - -The secret sauce behind PowerShell Direct is [PowerShell Remoting Protocol][2] (MS-PSRP), which used to be called just plain ol' garden variety "PowerShell remoting." - -## The Lab Setup - -In my test lab, I started with a domain controller and Hyper-V host (yeah, I'm combining server roles--what of it?) named **hyperv1.company.pri**. That server's running [Windows Server 2016 Technical Preview 3][3]. - -In Hyper-V I created a single virtual switch named **Internal** that is connected to the host/guest network. Of course, we don't care about the switch fabric because we're going to use PowerShell Direct. - -Next, I built a Windows Server 2016 TP3-based guest VM named **server1** and disabled the network adapter as you can see in the following screenshot. No smoke and mirrors here! - - - [![Our lab is set up and ready to test PowerShell Direct.](https://powershell.org/wp-content/uploads/2015/10/Our-lab-set-up-and-ready-to-test-PowerShell-direct.png)](https://powershell.org/wp-content/uploads/2015/10/Our-lab-set-up-and-ready-to-test-PowerShell-direct.png) - - - - Our lab is set up and ready to test PowerShell Direct. - - - -As a final "sanity check" to ensure the guest VM is as theoretically inaccessible as possible, I blocked access to all remote access session configurations and disabled the Windows Remote Management (WinRM) service by running the following command from within the guest (thanks to PowerShell MVP [Aleksandar Nikolić][4] for clarification on this point): - - -`Disable-PSRemoting -Force -Get-Service -Name WinRM | Stop-Service -Force | Set-Service -StartupType Disabled -`Okay. Let's move onto the next phase of our experiment. - -## Sending Commands to the Guest VM - -Let's obtain the name and globally unique identifier (GUID) of our Windows Server 2016 VM (you'll see why in just a moment): - - -`Get-VM | Select-Object -Property Name, VMid -Name VMId ----- ---- -server1 31d787fe-02cd-4363-b50b-16bc8243fc77 -`PowerShell Direct makes itself manifest by means of two new parameters: - - * VMname - * VMGuid - -Handy, eh? The following two cmdlets support the **-VMname** and **-VMGuid** parameters as of this writing in October 2016: - - * [Enter-PSSession][5] - * [Invoke-Command][6] - -Time to test! Let's start a remote session with the **server1** guest VM by specifying its GUID. Note that you will need: - - * Hyper-V administrative privileges on the host - * Local administrative privileges on the guest - - -`$cred = Get-Credential -Enter-PSSession -VMGuid 31d787fe-02cd-4363-b50b-16bc8243fc77 -Credential $cred -[server1]: PS C:\Users\Administrator\Documents> -`We'll finish by using Invoke-Command to send ad-hoc PowerShell pipelines and entire scripts from host to guest: - - -`Invoke-Command -VMName 'server1' -Credential $cred -ScriptBlock { Get-Service | Where-Object {$_.Status -eq 'Stopped'} } -Invoke-Command -VMName 'server1' -FilePath 'D:\scripts\setup-ip.ps1' -Credential $cred -`## Conclusions - -Convenience is the primary advantage that PowerShell Direct brings to us Hyper-V administrators. We can connect to and fully administer our guest virtual machines regardless of their networking, firewall, or WS-Man state. Thanks for reading, and more power to the shell! - - [1]: http://blogs.technet.com/b/virtualization/archive/2015/05/14/powershell-direct-running-powershell-inside-a-virtual-machine-from-the-hyper-v-host.aspx - [2]: https://msdn.microsoft.com/en-us/library/dd357801.aspx - [3]: https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-technical-preview - [4]: https://twitter.com/alexandair - [5]: https://technet.microsoft.com/en-us/library/hh849707.aspx - [6]: https://technet.microsoft.com/en-us/library/hh849719.aspx diff --git a/content/articles/2015-10-09-export-subnets-from-active-directory-sites-and-services.md b/content/articles/2015-10-09-export-subnets-from-active-directory-sites-and-services.md deleted file mode 100644 index 050c452c1..000000000 --- a/content/articles/2015-10-09-export-subnets-from-active-directory-sites-and-services.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Export Subnets from Active Directory Sites and Services -authors: - - Steve Parankewich -date: "2015-10-10T02:39:20+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -aliases: - - /2015/10/export-subnets-from-active-directory-sites-and-services/ ---- - -I am back this week with a quick write up on how to export your network subnets from Active Directory Sites and Services. Active Directory Sites and Services subnet assignments are important for healthy replication and for location based services to function properly. The need for this information has come across my desk on several occasions. Even a quick print out would be extremely helpful to keep at your desk.  I have included both Windows 7/2008 and Windows 8/2012 methods to ensure everyone is covered. Head on over to [PowerShellBlogger.com][1] for the full article. As always, leave a comment and I will be sure to respond. - - [1]: http://powershellblogger.com/?p=121 diff --git a/content/articles/2015-10-12-automate-sip-address-and-upn-name-changes-in-lync-skype-for-business.md b/content/articles/2015-10-12-automate-sip-address-and-upn-name-changes-in-lync-skype-for-business.md deleted file mode 100644 index 1e79b3729..000000000 --- a/content/articles/2015-10-12-automate-sip-address-and-upn-name-changes-in-lync-skype-for-business.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Automate Sip Address and UPN name changes in Lync / Skype for Business -authors: - - Steve Parankewich -date: "2015-10-12T18:37:56+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks - - Tutorials -aliases: - - /2015/10/automate-sip-address-and-upn-name-changes-in-lync-skype-for-business/ ---- - -Name changes are a common occurrence in the world of IT and usually the primary concern is the e-mail address. Exchange e-mail address policies will handle this for us but often times the Sip Address and User Principal Name are left behind. I tackle these changes with an automated way of changing the Lync / Skype for Business sip address (also known as sign-in address) and User Principal Name to match the e-mail address. I also include the link to download the Lync / Skype for Business meeting update tool that is required when a Sip Address is changed. Head on over to [PowerShellBlogger.com][1] for the full article. - - [1]: http://powershellblogger.com/?p=164 diff --git a/content/articles/2015-10-12-using-package-management-in-windows-powershell-v3.md b/content/articles/2015-10-12-using-package-management-in-windows-powershell-v3.md deleted file mode 100644 index a4b05f4a1..000000000 --- a/content/articles/2015-10-12-using-package-management-in-windows-powershell-v3.md +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: Using Package Management in Windows PowerShell v3 -authors: - - Timothy Warner -date: "2015-10-12T20:48:32+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -aliases: - - /2015/10/using-package-management-in-windows-powershell-v3/ ---- - -Hey now! The [PowerShell team][1] published a preview version of [PackageManagement][2] for Windows PowerShell v3 and v4. As it happens, I have a Windows 7 SP1 box running PowerShell v3--why not run a little experiment? - - -`$PSVersionTable.PSVersion -Major Minor Build Revision ------ ----- ----- -------- -3 0 -1 -1 -`## Preparing the Environment - -You need [.NET Framework 4.5][3] or later, so take care of that prerequisite before you install the following two assets: - - * [Windows Management Framework (WMF) v3][4] - * [PackageManagement PowerShell Modules Preview][2] - -I restarted the computer after each installation just to be safe. - -Before we proceed we also need to relax our Windows 7 client's script execution policy or we won't see the PSModule package provider or the PowerShellGet module: - - -`Set-ExecutionPolicy -ExecutionPolicy Bypass -Force -`As you can see in the following screenshot, installing the PackageManagement Preview also gives us PowerShellGet. By the way, in case you didn't know, we use PowerShellGet to discover, install, and manage PowerShell modules, and we use PackageManagement to discover, install, and manage software packages. - - - [![Modules folder on our Windows 7 workstation](https://powershell.org/wp-content/uploads/2015/10/Modules-folder-on-our-Windows-7-workstation-628x313.png)](https://powershell.org/wp-content/uploads/2015/10/Modules-folder-on-our-Windows-7-workstation.png) - - - - Modules folder on our Windows 7 workstation - - - - - -## Poking Around with the Commands - -Let's do this! Open an administrative PowerShell console examine the PackageManagement commands: - - -`Get-Command -Module PackageManagement | Select-Object -Property Name | Format-Wide -Column 2 -Find-Package Get-Package -Get-PackageProvider Get-PackageSource -Install-Package Register-PackageSource -Save-Package Set-PackageSource -Uninstall-Package Unregister-PackageSource -`In PackageManagement nomenclature, a package provider represents the "conduit" between the local computer and the PackageManagement engine. As a matter of fact, PackageManagement is most often called a package manager manager (no, that's not a typo). - -Next, take a look at the default package providers: - - -`Get-PackageProvider | Select-Object -Property Name | Sort-Object -Property Name -Name ----- -msi -msu -Programs -PSModule -`Your intuition is correct if you think that you can manage locally installed software by working with the **msi, msu,** and **Programs** providers. A single package provider can be associated with one or more package sources (repositories). - - -`Get-PackageSource | Select-Object -Property Name, ProviderName, IsTrusted -Name ProviderName IsTrusted ----- ------------ --------- -PSGallery PSModule False -`The [PowerShell Gallery][5] (PSGallery for short) is a Microsoft-run PowerShell module repository. That's fine, but where are the software packages? That's what PackageManagement package sources are for! - -Microsoft promotes the [Chocolatey package repository][6] as a starting point for PowerShell package management. Please note that Chocolatey is not owned by Microsoft and using Chocolatey packages is at your own risk. - -Moreover, be aware also that setting the **-Trusted** flag on a repository performs no source code validation. Instead, it simply suppresses an "Are you sure?" confirmation sanity check before you install a package. - -All that having been said, let's register Chocolatey as a trusted repo on our Windows 7 workstation, and then verify its installation: - - -`Register-PackageSource -Name Chocolatey -Location http://chocolatey.org/api/v2 -ProviderName PSModule -Trusted -Verbose -Get-PackageSource | Select-Object -Property Name, ProviderName, IsTrusted -Name ProviderName IsTrusted ----- ------------ --------- -PSGallery PSModule False -Chocolatey PSModule True -`I didn't show it in the previous code example, but on first run you'll be prompted to let PowerShell download and install the NuGet provider. [NuGet][7] is a package manager intended for .NET developers and makes it easier to find and install code libraries in Visual Studio. Chocolatey has a dependency on NuGet, so that's why it's required. - -The open-source world seems to love word puns; perhaps you derived a few 'yuk yuks' over the idea of "chocolatey nuget," right? Er, maybe not. 🙂 - -## Installing Some Software - -Well, the great moment has arrived: Let's install some software. How about 7-Zip, the freeware file archiver? Does the Chocolatey repo host a copy of the tool? - - -`Find-Package -Name *7zip* -`I'll spare you the output, but the answer is "Yes, of course." Now that we know the name of the package, we can pipeline the object to **[Install-Package][8].** We'll specify** **the **-Verbose** switch parameter so we see as many "behind the scenes" details as possible: - - -`Find-Package -Name 7zip | Install-Package -Verbose -Force -`Sadly, I learned through bitter experience (as well as by inspecting the **-Verbose** package installation output) that different packages put the executables in different folders. For instance, the Chocolatey [7-Zip][9] package uses the traditional **C:\Program Files**. On the other hand, the Chocolatey [Windows Sysinternals][10] package places its executables in the path **C:\Chocolatey\bin**. Thus, I needed to add this path permanently to my [PATH][11] environment variable to make the Sysinternals utilities easier to use from within PowerShell.  - -Now for the bad news. What I said in the previous paragraph is perfectly valid for PackageManagement under Windows PowerShell v5. However, I was unable to install any packages on my Windows 7 SP1 machine. Strangely, the package installations failed not with a traditional red error message but with the yellow (or green? I'm colorblind) warning message: - - -`WARNING: The module '7zip' cannot be installed or updated because it is not a properly-formed module. -`This is obviously a bug. Either that or I did something stupid on my own on this computer .:) - -## Testing PowerShellGet - -Just for grins, let's use PowerShellGet to install [ISE Steroids][12], my favorite script editor. We'll begin by enumerating the PowerShellGet functions as usual: - - -`Get-Command -Module PowerShellGet | Select-Object -Property Name | Format-Wide -Column 2 -Find-Module Get-InstalledModule -Get-PSRepository Install-Module -Publish-Module Register-PSRepository -Save-Module Set-PSRepository -Uninstall-Module Unregister-PSRepository -Update-Module -`Fun fact: The PowerShellGet functions are simply wrappers for PackageManagement commands. PowerShellGet runs through the PSModule package provider by default. - -Next we'll install the module. Yes, we could use **Find-Module**, but I already know that [Dr. Weltner][13] posted his module to the Gallery: - - -`Install-Module -Name ISESteroids -Verbose -Force -`This time a smile crept across my face when I issued **Start-Steroids** from within my PowerShell v3 ISE and ISE Steroids loaded.  - -## Final Thoughts - -I have two parting thoughts for you. First, the PackageManagement Modules Preview for PowerShell v3 and v4 (wow, say that three times quickly) is indeed a preview release. Therefore, we can always file bug reports on [Microsoft Connect][14] and I'm sure the PowerShell team will validate and correct them. - -Second, any self-respecting business should deploy their own private, internal package and module repositories rather than use public ones like Chocolatey. The best instructions I've found online for building your own package management repository come from PowerShell MVP [Boe Prox][15] in his blog post "[Setting Up a NuGet Feed for Use with OneGet][16]." By the way, OneGet was the original name for what's now called PackageManagement. - -I hope you found this article useful. Let's chat about it in the comments! Thanks for reading and take good care. - - [1]: http://blogs.msdn.com/b/powershell/archive/2015/10/09/package-management-preview-for-powershell-4-amp-3-is-now-available.aspx - [2]: https://www.microsoft.com/en-us/download/details.aspx?id=49186 - [3]: https://www.microsoft.com/en-us/download/details.aspx?id=40779 - [4]: https://www.microsoft.com/en-us/download/details.aspx?id=34595 - [5]: https://www.powershellgallery.com/ - [6]: https://chocolatey.org/ - [7]: https://www.nuget.org/ - [8]: https://docs.nuget.org/consume/package-manager-console-powershell-reference#install-package - [9]: http://www.7-zip.org/ - [10]: https://technet.microsoft.com/en-us/sysinternals/bb545021.aspx - [11]: https://www.wikiwand.com/en/PATH_(variable) - [12]: http://www.powertheshell.com/isesteroids/ - [13]: https://mvp.microsoft.com/en-us/PublicProfile/9199?fullName=Tobias%20Weltner - [14]: https://connect.microsoft.com/PowerShell - [15]: https://mvp.microsoft.com/en-us/PublicProfile/5000355?fullName=Boe%20Prox - [16]: http://learn-powershell.net/2014/04/11/setting-up-a-nuget-feed-for-use-with-oneget/ diff --git a/content/articles/2015-10-14-desired-state-configuration-beware-of-circular-configurations.md b/content/articles/2015-10-14-desired-state-configuration-beware-of-circular-configurations.md deleted file mode 100644 index a3e8b888a..000000000 --- a/content/articles/2015-10-14-desired-state-configuration-beware-of-circular-configurations.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Desired State Configuration – Beware Of Circular Configurations -authors: - - Will Anderson -date: "2015-10-14T13:00:37+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/10/desired-state-configuration-beware-of-circular-configurations/ ---- - -Lately, I've been working at converting a lot of my server configuration scripts into DSC configurations.  After all, what better way to learn than by updating your existing methods?  I recently ran into an issue, however, while converting my SCCM Distribution Point deployment script into a config, where the test systems inexplicably began rebooting every thirty minutes or so.  The Local Configuration Manager was configured to reboot if necessary, and these were fresh installs, so I knew that my culprit was most likely in my configuration. - -The config was pretty basic: Put the server into a Core state and uninstall the UI management tools, ensure RDC is installed, install the distribution point prerequisites (IIS, IIS 6 WMI Compatibility, .NET 4.5, etc), and configure some firewall rules.  My original script had always served me well, so I was dumbfounded as to what the problem could be.  I decided to [enable the debug logging](http://blogs.msdn.com/b/powershell/archive/2014/01/03/using-event-logs-to-diagnose-errors-in-desired-state-configuration.aspx) for DSC and see what came up. - - -`Get-WinEvent -LogName "Microsoft-Windows-Dsc/Debug" -ComputerName LWINCM02 -Oldest | Out-Gridview -`When I get the output, I'm seeing a lot of looping around my Remote Differential Compression resource, which ensures that the RDC component is installed.  A further look in the logs showed that the UI Management Tools were also being uninstalled repeatedly.  Hmm... - -[![](https://powershell.org/wp-content/uploads/2015/10/RDCOGV-628x331.jpg)](https://powershell.org/wp-content/uploads/2015/10/RDCOGV.jpg) - -So on another system that isn't receiving the configuration, I decide to run the Install-WindowsFeature command with the WhatIf switch against the RDC component.  Upon the result, I immediately see what my problem is: - -[![RDCInst](https://powershell.org/wp-content/uploads/2015/10/RDCInst-e1444781798166-628x413.jpg)](https://powershell.org/wp-content/uploads/2015/10/RDCInst-e1444781815463.jpg) - -The Remote Differential Component requires the installation of the GUI Management Tools.  Likewise, the uninstallation of these tools results in the removal of the RDC component.  So what was happening was this: - - * GUI Tools are removed by DSC, also removing the RDC component. - * Server reboots. - * GUI tools are verified uninstalled.  RDC component is reinstalled, which reinstalls the GUI Tools. - * Server Reboots. - * Wash.  Rinse.  Repeat. - -I've since removed the GUI tools removal from my configuration, as RDC is a required component for my distribution points, and my configuration is now working flawlessly.  In tracing the root of my problem, I came to realize two very important lessons. - -First, as admins, engineers, and solution providers, we often don't take a very close look at our scripts and what it's really doing behind the scenes if it gives us the result we're looking for.  In the case of my configuration script, I added a line to install the RDC component after removing the UI and tools and didn't look any further into why I had to do this in the first place.  DSC kept me honest in this respect - and gave me a gentle reminder to look a little deeper if something unexpected occurs, rather than slapping a band-aid on it and calling it good. - -Second, it can be very easy to find yourself dealing with a configuration loop if you're altering the state of components that other components in your config rely on.  Be sure to test your configurations, check your logs, and most importantly, make sure you know what you're really configuring when you configure it. diff --git a/content/articles/2015-10-18-command-and-query-separation-in-pester-tests.md b/content/articles/2015-10-18-command-and-query-separation-in-pester-tests.md deleted file mode 100644 index 15716ee44..000000000 --- a/content/articles/2015-10-18-command-and-query-separation-in-pester-tests.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Command and query separation in Pester tests -authors: - - nohwnd -date: "2015-10-18T19:15:14+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -aliases: - - /2015/10/command-and-query-separation-in-pester-tests/ ---- - -Do you feel that writing tests is confusing, and you often end up with complicated test code? I did too, before I learned about Command-query separation principle (or CQS). This principle lead me to start thinking about data flow directions in tests and in the end I realized there are few basic patterns that I use in my test code over and over. - -## Command-query separation principle - -The command and query separation principle tells us that we should separate commands from queries (duh!). To do that, we first need to learn the difference between a command and query: A command is a function that has an observable side-effect and returns no result. A query is the opposite. A function that has no observable-side effect, and returns a result. -https://gist.github.com/nohwnd/fb5616fb92995555480c -The call to _Set-Variable_ has a side effect of creating a variable named "a" and setting it to value "1". This side effect is clearly observable, because we had no variable _$a_ before the call and now we have one, so _Set-Variable_ must be a command. Also the _Set-Variable_ does not return any output which should be another clue (unless you provide the _-PassThru_ parameter, more on that later). -The other call, the call to _Get-Variable_, has no observable side effect. You could call it once or 100 times and that would have no effect on the value of the _$a_ variable. Plus the Get-Variable returns a result so it must be a query. -PowerShell also gives us another clue whether a function is a command or query with the Verb used for that function. Anything with Set, Add and New verb is supposed to be a command. Anything with Get verb should be a query. -Understanding the difference between commands and queries is important, because data flows through them in opposite directions, and so you need to test them differently. - -### Data flow in commands and queries - -Let's see some (almost) real-life examples of tests that deal with commands and queries, identify the data flow in them, and try to discover some patterns. -https://gist.github.com/nohwnd/f6be402363baa4fb15e7 -In this code the first two functions only act as place-holders for the actual Active Directory cmdlets, feel free to ignore them. The next two functions are more interesting, they are the actual production code that we test - the SUT (System Under Test). Notice that the first function, _New-SalesUser_ is a command, and the second, _Get-SalesUser_ is a query. The most important part are the actual tests, let's have a closer look on each one of them separately. - -### Testing New-SalesUser - -The _New-SalesUser_ is a command, it won't return any value, but it should have an observable side-effect. The side-effect is that a new user is created in the Sales department. The _New-SalesUser_ is not able to do that by itself, instead it delegates the work to the _New-ADUser_ cmdlet. Because we believe that the _New-ADUser_ will do it's work, all we need to test is if it was invoked with the correct parameters, and that's exactly what's happening. -As you can hopefully see the data (input parameters) flow from the input of the _New-SalesUser_ (SUT) towards the internal function _New-ADUser_, we then use the _Assert-MockCalled_ to verify that the internal command was called correctly. I call this the command direction. - -### Testing Get-SalesUser - -The _Get-SalesUser_ is a query. It will return a value and will have no side-effect. We know that the _Get-ADUser_ is a query as well, so the only part that needs testing is whether or not the _FullName_ property was added. To do that we create a mock of the _Get-ADUser_ function that returns an object and set it's _GivenName_ and _Surname_ properties. We run the _Get-SalesUser_ function and check the values of _FullName_ property. -In this case the data go from the internal function Get-ADUser to the output of the _Get-SalesUser_ (SUT), and we use the Should assertion to check if data was processed correctly. I call this the query direction. - -## Command-Query hybrids - -Unfortunately the world of PowerShell is not so black and white as we might like. There are numerous commands that support _-PassThru_ parameter. The _-PassThru_ parameter breaks the clean separation between commands and queries, and so our example function would become a _New-Get-SalesUser_ hybrid. -Such hybrids are a source of confusion and lot of people end up with code like this: -https://gist.github.com/nohwnd/86dc22cede6736c2647c -As you can see both the production code and the tests are simply a merge of the _Get-SalesUser_ and _New-SalesUser_ seen in the previous example. The test no longer tests a single thing. If you take your time and track the flow of the data you should see the both the command and query directions are used, and asserted. -The test still works, but is unnecessarily complex and can fail for at least two different reasons. It would be way better to have two separate simpler tests. One testing the query path of the command and another testing the command path. Such conversion is easily done, all we need to do is take the _Get-SalesUser_ test and change the command to _New-SalesUser_: -https://gist.github.com/nohwnd/31df2ef5686f77f1b910 -The tests were split into two and the _-PassThru_ switch was implemented in the _New-SalesUser_ function. -The first _It_ tests the command part of the function, it does not specify the _-PassThru_ switch and so the _New-SalesUser_ acts as a pure command and is tested like that. -The second _It_ tests the query part of the function, specifying the _-PassThru_ switch, and hitting the mock, which produces no side-effects, in result it acts as a pure query function, and is also tested like one. - -## Are query-command hybrids really that bad? - -No not really. Such hybrids have some useful properties that make PowerShell better. Probably the most useful is that they enable you to combine both queries and commands in a single pipeline. The also enable you to immediately retreive result of your changes and for example print them to screen. -All in all such hybrids are quite useful beasts. The downside unfortunately is that a lot of people unconiously end up with such hybrid, and without seeing the way to split it they start to produce overly-complicated tests. Often copy pasting the code to set up the whole environment, just to assert the result of the "query". Setting up twenty properties on the resulting object just to ignore it while testing the "command". Or worst all of this together. - -## Summary - -Hopefully this article gave you the minimum to tell commands from queries and outlined possible approaches to testing them. You should now be aware of the command query hybrids and be able to identify them even if they don't specify a _-PassThru_ parameter. -Happy coding! diff --git a/content/articles/2015-10-19-the-jape-challenge.md b/content/articles/2015-10-19-the-jape-challenge.md deleted file mode 100644 index e9637b01e..000000000 --- a/content/articles/2015-10-19-the-jape-challenge.md +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: The JAPE challenge -authors: - - Carlo Mancini -date: "2015-10-19T08:58:34+00:00" -categories: - - PowerShell for Developers -aliases: - - /2015/10/the-jape-challenge/ ---- - -I have wanted to write my very own obfuscated e-mail signature for a long time but kept myself from doing it. At the time I thought of all these lines of obfuscated code that people wrote during competitions such as the _International Obfuscated C Code Contest (IOCCC)_ or the _Obfuscated Perl Contest_ as beyond interest. - -Then I started competing in the Scripting Games, and some tasks involved writing Powershell oneliners that required **mastering the use of the pipeline** as a tool to refine what each cmdlet passed to another. Once I added a few aliases to these oneliners - which sometimes happened to involve pretty arcane regular expressions - I often came back with hard-to-read and impossible-to-maintain pieces of Powershell code. But, hey, this was fun! - -So, today I have reviewed my point of view. I have understood that reading and understanding obfuscated code can be an interesting **mental challenge.** And being able to write it is a game I like to play. - -Last week I was writing an [article exploring different ways to implement primality tests in Powershell](http://www.happysysadm.com/2015/10/powershell-gymnastics-prime-numbers.html). In the last part of that article I show how to port to Powershell a powerful Perl onliner that can find prime numbers only by matching strings whose length is not prime. - -This Perl oneliner, originally written by Abigail, is part of a collection of famous **JAPHs** - Usenet posting signatures in the 90s - that will output the text '_Just another Perl Hacker,_' to screen. - -When you have a look at some of these JAPHs (there is a canonical list on CPAN.org), you can see how it can actually be surprisingly difficult to write truly breathtaking obfuscated code. - -Having said all that, I have come up with the idea of starting some kind of similar challenge around Powershell. - -## Write your JAPE - -The challenge consists of writing the most intricate, illegible, awe-inspiring piece of code you can think of, which prints the text '_JUST ANOTHER POWERSHELL ENTHUSIAST,_'. - -Feel free to post your contribution in the comments. The rules are: - - 1. the code has to be carefully formatted to fit into max four lines of max 77 characters each, in the style of a Usenet signature - 2. the comma at the end of the string is mandatory (hey, we are just adding ourselves to the basket!) - 3. letter case in the output is not important, so you can go for pOwErShElL if you feel like it - 4. every JAPE has to be presented in the canonical list format, with a date and author attribution - -Rule 1 can be thrown out of the window in case you want to go artistic, as in this notable Perl JAPH by Kickstart: - - -`#Kickstart from http://www.perlmonks.com/ -#note: a slight valentine variation :) - $LOVE= AMOUR. - true.cards. ecstacy.crush - .hon.promise.de .votion.partners. - tender.truelovers. treasure.affection. -devotion.care.woo.baby.ardor.romancing. -enthusiasm.fealty.fondness.turtledoves. -lovers.sentiment.worship.sweetling.pure -attachment.flowers.roses.promise.poem; - $LOVE=~ s/AMOUR/adore/g; @a=split(//, - $LOVE); $o.= chr (ord($a[1])+6). chr - (ord($a[3])+3). $a[16]. $a[5]. chr - (32). $a[0]. $a[(26+2)]. $a[27]. - $a[5].$a[25]. $a[8].$a[3].chr - (32).$a[29]. $a[8].$a[3]. - $a[62].chr(32).$a[62]. - $a[2].$a[38].$a[4]. - $a[3].'.'; - print - $o; -`Now, the most notable contributions will be added to the **JAPE Hall of Fame** below. - -**Do come up with some interesting piece of 'educational' code, and let's see what creative minds we have here. And remember to have fun!** - -To start with, I have decided, with the consent of the author, that the first JAPE be one by Lee Holmes. Even if it breaks the rule of outputting 'JUST ANOTHER POWERSHELL ENTHUSIAST,', it's probably the first Powershell obfuscated code I have ever seen. Hence the index 0. - -## JAPE Hall of Fame - -Index: $jape[0] - Author: Lee Holmes - Date: June 6th, 2007 - - -`$ofs=""; -'"$(0'+ - '..(0'+ - 'xa*['+ - 'Math'+ - ']::R'+ - 'ound'+ - '([Ma'+ - 'th]:'+ - ':Pi/'+ - '2,1)'+ - ')|%{'+ - '[cha'+ - 'r][i'+ - 'nt]"'+ - '"$($'+ - '("""'+ - '"0$('+ - '1838'+ - '1589'+ - '*726'+ - '371*'+ - '60)$'+ - '(877'+ - '7365'+ - '981*'+ - '263*'+ - '360)'+ - '$(22'+ - '2330'+ - '793*'+ - '1442'+ - '99)$'+ - '(310'+ - '9*37'+ - ') ""'+ '"")[' + '($_*' + '3)..' + -'($_*'+ '3+2)' + '])""' + ' })"'|iex -`Here's my first JAPE as a very basic example to start with. It's a signature block composed of 4 lines of 59 chars. - -Index: $jape[1]  - Author: Carlo - Date: October 9th, 2015 - - -`([regex]::Matches(",{0}S{1}I{2}U{3}T{4}E{5}L{6}E{7}S{8}E{9} -O{10} {11}E{12}T{13}N{14} {15}S{16}J" -f 'T!A$S!H$N! $L!H$R -!W$P!R$H!O$A!T$U'.split('!|$',[System.StringSplitOptions]:: -RemoveEmptyEntries),'.','RightToLeft')|%{$_.value}) -join'' -`References: - - * [http://www.leeholmes.com/blog/2007/06/06/obfuscated-powershell/](http://www.leeholmes.com/blog/2007/06/06/obfuscated-powershell/) - * [http://www.happysysadm.com/2015/10/powershell-gymnastics-prime-numbers.html](http://www.happysysadm.com/2015/10/powershell-gymnastics-prime-numbers.html) - * [http://www.cpan.org/misc/japh](http://www.cpan.org/misc/japh) - * [http://www.happysysadm.com/p/jape.html](http://www.happysysadm.com/p/jape.html) - -Contact me: - - * Twitter [@sysadm2010](https://twitter.com/sysadm2010) diff --git a/content/articles/2015-10-23-find-any-e-mail-address-or-proxy-address-in-active-directory.md b/content/articles/2015-10-23-find-any-e-mail-address-or-proxy-address-in-active-directory.md deleted file mode 100644 index 0d6a053eb..000000000 --- a/content/articles/2015-10-23-find-any-e-mail-address-or-proxy-address-in-active-directory.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Find any E-Mail Address or Proxy Address In Active Directory -authors: - - Steve Parankewich -date: "2015-10-23T16:58:00+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks - - Tutorials -aliases: - - /2015/10/find-any-e-mail-address-or-proxy-address-in-active-directory/ ---- - -I am back this week with some more Exchange and Unified Communications goodness. This is another request I see a lot, someone want's to know where an e-mail address is assigned. This opens up the possibilities of user mailboxes, shared mailboxes, distribution lists, public folders, conference rooms, contacts or resources. I have also seen duplicate e-mail addresses being assigned outside of Exchange causing delivery failures. I take a look at how you can quickly find any e-mail address in your environment along with partial searches of e-mail addresses. The two attributes for e-mail addresses being mail and proxyAddresses. - -I cover finding specific types of proxy addresses such as sip: x500: eum: etc. I also touch briefly on creating a simple function that will accept e-mail addresses as an input to return all of the AD objects that contain it. I cover the search through Active Directory commandlets, including LDAP query syntax, as well as the Exchange commandlets. Head on over to [PowerShellBlogger.com][1] for the full article. - - [1]: http://powershellblogger.com/?p=200 diff --git a/content/articles/2015-10-28-win-a-free-4-day-pass-to-powershell-and-devops-summit-2016.md b/content/articles/2015-10-28-win-a-free-4-day-pass-to-powershell-and-devops-summit-2016.md deleted file mode 100644 index d8396119c..000000000 --- a/content/articles/2015-10-28-win-a-free-4-day-pass-to-powershell-and-devops-summit-2016.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Win a Free 4-Day Pass to PowerShell and DevOps Summit 2016! -authors: - - Don Jones -date: "2015-10-28T13:56:18+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2015/10/win-a-free-4-day-pass-to-powershell-and-devops-summit-2016/ ---- - -Want to attend the newly expanded, 4-day [PowerShell and DevOps Summit][1] coming to Bellevue, WA in April 2016? Well you can - if you make your own community contribution! - -Our [TechLetter newsletter][2] is looking for articles. And, November is of course [NaNoWriMo][3], the National Novel Writing Month. But we aren't looking for a novel - just newsletter articles! So we'll call it National PowerShell and DevOps Article Writing Month (NaPoshDoArWriMo). Er. Or something. - -Anyway, here's the rules: - - 1. Submit your articles in Word or RTF format, in a ZIP file via email, to "editors" here at PowerShell.org. Please include a plain-text file with copies of any code in your article, as this makes formatting easier. Also include PNG files of any screen shots your article uses. - 2. Your article can be on any PowerShell or DevOps topic. Talk about techniques, challenges you've solved, best practices, or whatever you like. Minimum article length, excluding code, is 1,500 words. Maximum article length, excluding code, is 5,000 words. - 3. The best articles usually tell a story - a problem you ran into, what you tried, what errors you encountered, and what eventually worked. This is true of "best practices" as well - talk about how the practice helped you solve a problem, or will help prevent problems. Provide lots of examples! - 4. You may submit more than one article. Please do so in a separate email for each. In each email, include your name and e-mail address. **Entries are due by the end of November, 2015.** - 5. Our Editors will choose the winning entry and announce it in the January 2016 TechLetter. Editors reserve the right to decline any article they feel is unsuitable, and Editors' decision on the winning article is final. Winners are responsible for any taxes or duties imposed by their local government. Prize does not include travel expenses, lodging, or anything else. Anyone, anywhere, is eligible to win unless prevented or limited by local law. Prize is nontransferable and has no cash value. - -All right. Go to it!!! - - [1]: http://powershellsummit.org - [2]: https://powershell.org/newsletter/ - [3]: http://nanowrimo.org diff --git a/content/articles/2015-10-30-join-computer-to-domain-with-specified-computer-name-and-ou.md b/content/articles/2015-10-30-join-computer-to-domain-with-specified-computer-name-and-ou.md deleted file mode 100644 index 7c457df8f..000000000 --- a/content/articles/2015-10-30-join-computer-to-domain-with-specified-computer-name-and-ou.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Join Computer to Domain with Specified Computer Name and OU -authors: - - Steve Parankewich -date: "2015-10-30T18:10:55+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks - - Tutorials -aliases: - - /2015/10/join-computer-to-domain-with-specified-computer-name-and-ou/ ---- - -I addressed a reader requested script for my article this week. PowerShell gives you the ability to add computers to Active Directory right from the command line with the built in PowerShell commandlets. This was introduced with PowerShell version 3 and can be used to automate imaging processes or to prompt an agent for the desired computer name and organizational unit. This is useful since a lot of organizations will use specific OUs for computers according to location or department. This allows them to set group policies that apply to those computer accounts accordingly. By default these computer accounts are created in the root Computers OU, but creating an account can be targeted. The highlighted examples should provide you everything you need to tackle that use case. I provide the basics of adding a computer to the domain as well as prompting the user to enter the computer name and location. Head on over to [PowershellBlogger.com][1] for the full write up and thanks for everyone's continued support! - - [1]: http://powershellblogger.com/?p=220 diff --git a/content/articles/2015-11-01-summit-2016-call-for-topics-is-closed.md b/content/articles/2015-11-01-summit-2016-call-for-topics-is-closed.md deleted file mode 100644 index a927ba633..000000000 --- a/content/articles/2015-11-01-summit-2016-call-for-topics-is-closed.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Summit 2016 – Call for topics is closed -authors: - - Richard Siddaway -date: "2015-11-01T12:27:11+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2015/11/summit-2016-call-for-topics-is-closed/ ---- - -The Call for Topics for the 2016 Summit is now closed. We've had an amazing number of top quality submissions. We'd like to thank everyone who took the time to submit a proposal for a session at the Summit. We'll be working through the submissions over the next few days as we put the agenda together for what looks to be a superb Summit. - -We'll publish the schedule as soon as we can.  - -Once we have the agenda finalised we'll let you know. diff --git a/content/articles/2015-11-07-november-2015-scripting-games-puzzle.md b/content/articles/2015-11-07-november-2015-scripting-games-puzzle.md deleted file mode 100644 index b12d443ec..000000000 --- a/content/articles/2015-11-07-november-2015-scripting-games-puzzle.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: 2015-November Scripting Games Puzzle -authors: - - Don Jones -date: "2015-11-07T14:06:18+00:00" -categories: - - Scripting Games -aliases: - - /2015/11/november-2015-scripting-games-puzzle/ ---- - -Our November 2015 puzzle comes from PowerShell.org user [Tim Curwick][1], who created the puzzle based on a challenge he ran across at work. There's nothing more real-world than this! - - - -## **Instructions** - -The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month's puzzle. You can find them all at https://powershell.org/category/announcements/scripting-games/. Many puzzles will include optional challenges, that you can use to really push your skills. - -**To participate**, add your solution to a public Gist (http://gist.github.com; you'll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post.  -**Only post one entry per person. **However, remember that you can always go back and edit your Gist. We'll always pull the most recent one when we display it, so there's no need to post multiple entries if you want to make an edit. - - -Don't forget the [main rules and purpose of these monthly puzzles][2], including the fact that you won't receive individual scoring or commentary on your entry. - -**User groups are encouraged to work together** on the monthly puzzles. User group leaders should submit their group's best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most "favorite" entries of the year will win a grand prize from PowerShell.org. - -##   - -## **Our Puzzle** - -Scripting challenge: Understanding and cleaning up someone else's code - -Below is an actual script that was in production use at a large enterprise client. The script worked as desired, but as you can see, it could benefit from some clean up. There is some old code in there that may have served a function at one time, but no longer does. The original author and several editors donít seem to have understood PowerShell very well, and it is far more complex than it needs to be. - -Your challenge is to replace everything after the Param statement with a single line of code (no semicolons), while retaining all functionality. - -We are not looking for the _shortest_ line. The whole point is to make the code _more readable_. Don't replace unnecessarily complex with unnecessarily cryptic. - -As in real life, you should also add internal documentation in the form of any concise comments about the script or your new code which may be of value to the next person troubleshooting or updating the script. - - -`param([string]$VMNameStr) -$VMs=@() -$VMNames=@() -if($VMNameStr.indexof(",") -gt 0) -{ -$Trace="Found Comma..." -$VMs=$VMNameStr -split "," | %{$_.trim()} -$trace+="Length = $($VMs.length)" -$trace+=$VMs -is [array] -for($i=0;$i -lt $VMs.length;$i++){ -if($VMs[$i] -gt ""){ -set-variable -Name ("vmname" + $i) -value $VMs[$i] -$VMNames+=$VMs[$i] -} -} -} -else{$VMName0=$VMNameStr;$VMNames=$VMName0} -$VMNames -`[1]: http://madwithpowershell.com - [2]: https://powershell.org/?p=2574 diff --git a/content/articles/2015-11-13-powershell-devops-global-summit-2016-info.md b/content/articles/2015-11-13-powershell-devops-global-summit-2016-info.md deleted file mode 100644 index 9c367a27f..000000000 --- a/content/articles/2015-11-13-powershell-devops-global-summit-2016-info.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: PowerShell + DevOps Global Summit 2016 Info -authors: - - Don Jones -date: "2015-11-13T14:48:49+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2015/11/powershell-devops-global-summit-2016-info/ ---- - -Here's everything that's fit to print regarding Summit 2016, running April 3-4-5-6 in Bellevue, WA! You can also download: [Brochure-PowerShell and DevOps Summit 2016][1] to share with your boss and team. - -## Registration - -Registration for Summit will open December 1, 2015, and run through March 1, 2016. [Visit the registration website for more details][2]. Registration will be limited to about 200 attendees. Initially, we will only offer registration for a 4-day event, which includes full-day pre-conference sessions on April 3rd, 2016. On February 1st, 2016, we will open any remaining space for 3-day registration. - -## Agenda - -The registration website will list the complete agenda, which is subject to change, so be sure to check the website often. The agenda will be online prior to December 1, 2015.  - -## Session Streaming/Recording - -We will **not** be live-streaming sessions - the cost for sufficient bandwidth is prohibitive. We **will** be recording the two main session rooms on April 4-5-6. We **will not** be recording the full-day sessions on April 3rd, nor will we be recording the "extra" sessions in the third session room throughout the week (we only have enough equipment to record two rooms, and the third room will not be in use all the time). - -[Pluralsight][3] has agreed to sponsor the event, and will be recording HD video and high-quality audio of our speakers in the two main session rooms. They'll be using that, along with our traditional screen captures, to produce an enhanced set of session recordings. Those recordings will be made available to all of their subscribers, and all Summit attendees will received free access to the enhanced recordings. For non-attendees, our basic screen-capture recordings will be made available free of charge on our [YouTube channel][4], just as in the past. - -## Special Events - -We'll have several special evening events throughout the conference. Most importantly, Tuesday afternoon will feature an all-hands-on-deck address by Microsoft Technical Fellow Jeffrey Snover, followed by "lightning demos" from members of the WMF product team. After that, we'll move directly into a meet-and-greet reception (kindly sponsored by [SAPIEN][5]) where we've invited the entire product team to come talk to you. Stay tuned for further announcements on special events. - -## Hotel - -We do not have an official arrangement with any hotel. You'll find several hotels near the Meydenbauer Center in downtown Bellevue, including the Red Lion Inn, Hilton, Courtyard by Marriott, and others. You're welcome to stay where you like. Please note that parking **is not free** at the Center, so we do not recommend a rental car. Lyft/Uber are generally available, as are taxis, and several hotels are within a reasonable walking distance (~15min).  - - [1]: https://powershell.org/wp-content/uploads/2015/11/Brochure-PowerShell-and-DevOps-Summit-2016-copy.pdf - [2]: https://eventloom.com/event/home/PSNA16 - [3]: http://pluralsight.com - [4]: http://youtube.com/powershellorg - [5]: http://sapien.com diff --git a/content/articles/2015-11-14-powershell-devops-global-summit-2016-the-agenda.md b/content/articles/2015-11-14-powershell-devops-global-summit-2016-the-agenda.md deleted file mode 100644 index a74f22799..000000000 --- a/content/articles/2015-11-14-powershell-devops-global-summit-2016-the-agenda.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: PowerShell + DevOps Global Summit 2016 – the agenda -authors: - - Richard Siddaway -date: "2015-11-14T18:50:03+00:00" -categories: - - PowerShell Summit -aliases: - - /2015/11/powershell-devops-global-summit-2016-the-agenda/ ---- - -We've finalised the agenda and we're starting to publish session information on the web site at - -https://eventloom.com/event/login/PSNA16 - -There are a handful of sessions on the site at present. The rest will be added over the next week or so. - -Keep checking back to see who's been added. - -Registration opens 1 December 2015 diff --git a/content/articles/2015-11-17-philadelphia-powershell-user-group-meeting-december-3rd-2015-with-adam-bertram.md b/content/articles/2015-11-17-philadelphia-powershell-user-group-meeting-december-3rd-2015-with-adam-bertram.md deleted file mode 100644 index 320f6e5ab..000000000 --- a/content/articles/2015-11-17-philadelphia-powershell-user-group-meeting-december-3rd-2015-with-adam-bertram.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Philadelphia PowerShell User Group Meeting – December 3rd 2015 with Adam Bertram -authors: - - John Mello -date: "2015-11-18T01:24:39+00:00" -aliases: - - /2015/11/philadelphia-powershell-user-group-meeting-december-3rd-2015-with-adam-bertram/ ---- - -Join us on Thursday, December 3rd when [Adam Bertram][1] will be giving a talk called a "**Top 10 PowerShell mistakes** " -**About Adam Bertram** -Adam Bertram is an independent consultant, technical writer, trainer and presenter. Adam specializes in consulting and evangelizing all things IT automation mainly focused around Windows PowerShell. Adam is a Microsoft Windows PowerShell MVP, 2015 [powershell.org][2] PowerShell hero and has numerous Microsoft IT pro certifications. He authors IT pro course content for Pluralsight, is a regular contributor to numerous print and online publications and presents at various user groups and conferences.  You can find Adam at [adamtheautomator.com][1] or on Twitter at [@adbertram][3]. -[![Eventbrite - PhillyPosh December 3rd 2015 - Adam Bertram](https://www.eventbrite.com/custombutton?eid=19612925789)](http://www.eventbrite.com/e/phillyposh-december-3rd-2015-adam-bertram-tickets-19612925789?ref=ebtnebregn) - - [1]: http://adamtheautomator.com - [2]: https://powershell.org - [3]: https://twitter.com/adbertram diff --git a/content/articles/2015-11-19-atlanta-powershell-users-group-meeting-december-8th-with-june-blender.md b/content/articles/2015-11-19-atlanta-powershell-users-group-meeting-december-8th-with-june-blender.md deleted file mode 100644 index dbce405de..000000000 --- a/content/articles/2015-11-19-atlanta-powershell-users-group-meeting-december-8th-with-june-blender.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Atlanta PowerShell User's Group Meeting – December 8th with June Blender" -authors: - - Stephen Owen -date: "2015-11-19T15:03:47+00:00" -aliases: - - /2015/11/atlanta-powershell-users-group-meeting-december-8th-with-june-blender/ ---- - -[![PUG wide text](https://powershell.org/wp-content/uploads/2015/11/PUG-wide-text-968x142.png)][1] -**UPDATE: The new venue will not be ready until next months' meeting, so please meet us instead at the Microsoft office in Alpharetta, Microsoft Corporation -1125 Sanctuary Pkwy Ste 300, Alpharetta** -Join us on Tuesday, December 8th when [June Blender][2] will be giving a talk on PowerShell Events!  This will be in our brand-new venue and meeting place, Microsoft's new Innovation Center, in the famous Atlanta Flat Iron building.  Wear your Santa hats for a special door prize! -**About June Blender** -June Blender is a technology evangelist for SAPIEN Technologies, Inc. Formerly a Senior Programming Writer at Microsoft Corporation, she is best known for her work with the Windows PowerShell product team from 2006-2012, developing the help system and writing the Get-Help help topics for PowerShell 1.0 – 3.0. In other roles, June wrote content for the Azure Active Directory SDK and Azure PowerShell Help, Windows Driver Kits, Windows Support Tools, and Windows Resource Kits. She lives in magnificent Escalante, Utah, where she works remotely when she's not out hiking, canyoneering, or convincing lost tourists to try Windows PowerShell. She is a Windows PowerShell MVP, a PowerShell Hero, an Honorary Scripting Guy, and a frequent contributor to PowerShell.org. Contact her at  [ and follow her on the ](http://www.eventbrite.com/e/phillyposh-december-3rd-2015-adam-bertram-tickets-19612925789?ref=ebtnebregn)[SAPIEN Blog][2] and on Twitter at [@juneb_get_help][3] -[Register now on Meetup!][4] -[![MeetUp](https://powershell.org/wp-content/uploads/2015/11/MeetUp.png)][4] - - [1]: http://www.meetup.com/Atlanta-PowerShell-Users-Group/ - [2]: http://www.sapien.com/blog/ - [3]: https://twitter.com/juneb_get_help - [4]: http://www.meetup.com/Atlanta-PowerShell-Users-Group/events/226320634/?a=socialmedia diff --git a/content/articles/2015-11-24-keeping-windows-powershell-help-up-to-date.md b/content/articles/2015-11-24-keeping-windows-powershell-help-up-to-date.md deleted file mode 100644 index 5c9eb7cdf..000000000 --- a/content/articles/2015-11-24-keeping-windows-powershell-help-up-to-date.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Keeping Windows PowerShell Help Up To Date -authors: - - Steve Parankewich -date: "2015-11-24T19:21:37+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks - - Tutorials -aliases: - - /2015/11/keeping-windows-powershell-help-up-to-date/ ---- - -After a two week hiatus I am back this week with a quick write up on how to automate the updating of PowerShell help. Update-Help should be one of the first things typed in PowerShell on a new workstation build. I jump into the topic and demonstrate how to automate the updating of the help files from the Internet or from a local network share. You can view the full article over at [PowerShellBlogger.com][1]. -I look forward to getting another article out to everyone next week and I hope everyone in the US enjoys their long weekend! - - [1]: http://powershellblogger.com/?p=237 diff --git a/content/articles/2015-11-30-the-popular-week-of-powershell-blogging-is-back-psblogweek.md b/content/articles/2015-11-30-the-popular-week-of-powershell-blogging-is-back-psblogweek.md deleted file mode 100644 index 267163fd1..000000000 --- a/content/articles/2015-11-30-the-popular-week-of-powershell-blogging-is-back-psblogweek.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: "The Popular Week of PowerShell Blogging is back! #PSBlogWeek" -authors: - - Adam Bertram -date: "2015-11-30T14:00:28+00:00" -categories: - - Announcements -aliases: - - /2015/11/the-popular-week-of-powershell-blogging-is-back-psblogweek/ ---- - -Back by popular demand is the week-long coordination of blog posts on a single PowerShell topic known as [#PSBlogWeek][1]! This week, 5 hand-picked bloggers will be writing informative content around the topic of logging. -The daily schedule for this week is as follows: -Monday (Jason Wasser [@wasserja][2]) - [Building Readable Text Log Files][3] -Tuesay (Thom Schumacher [@driberif][4]) - [Slicing and Dicing Text Log Files][5] -Wednesday (Jaap Brasser [@jaap_brasser][6]) - [PowerShell Logging in the Windows Event Log][7] -Thursday (Adam Platt [@platta][8]) - [Reading Events from Event Logs][9] -Friday - (Adam Bertram [@adbertram][10]) - [Building Logs for CMTrace][11] -A big thanks to June Blender ([@juneb_get_help][12]) for her help in editing these posts. -If you'd like to download an eBook containing a nicely laid out compilation of all the content provided this week, head over to [adamtheautomator.com][13] to snag a copy. Feel free to share it wherever you'd like. Consider it public domain. -If you missed our last #PSBlogWeek, download the eBook to bone up on [everything you need to know about PowerShell advanced functions][14]. - - [1]: https://twitter.com/hashtag/PSBlogWeek?src=hash - [2]: https://twitter.com/wasserja - [3]: http://mrautomaton.com/2015/11/30/psblogweek-building-readable-text-log-files/ - [4]: https://twitter.com/driberif - [5]: https://crshnbrn66.wordpress.com/2015/11/30/slicing-and-dicing-log-files/ - [6]: https://twitter.com/jaap_brasser - [7]: http://www.jaapbrasser.com/psblogweek-powershell-logging-in-the-windows-event-log - [8]: https://twitter.com/platta - [9]: http://www.plattsoft.net/2015/12/03/reading-the-event-log-with-windows-powershell - [10]: https://www.twitter.com/adbertram - [11]: http://www.adamtheautomator.com/building-logs-for-cmtrace-powershell/ - [12]: https://twitter.com/juneb_get_help - [13]: http://www.adamtheautomator.com/psblogweek-ebook - [14]: https://powershell.org/wp-content/uploads/2015/11/PowerShell-Blog-Week-Advanced-Functions-Bertram-Blender-Cat-Hicks-Prox1.pdf diff --git a/content/articles/2015-12-03-a-real-world-devops-implementation-and-food-for-thought.md b/content/articles/2015-12-03-a-real-world-devops-implementation-and-food-for-thought.md deleted file mode 100644 index 07deb78b0..000000000 --- a/content/articles/2015-12-03-a-real-world-devops-implementation-and-food-for-thought.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: A Real-World DevOps Implementation – and Food for Thought -authors: - - Don Jones -date: "2015-12-03T21:02:23+00:00" -categories: - - DevOps - - PowerShell for Admins -aliases: - - /2015/12/a-real-world-devops-implementation-and-food-for-thought/ ---- - -Want to see what a real-world, functional, production-grade DevOps environment looks like? -Look no further than Amazon Web Services' Elastic Beanstalk (EBS). EBS is a neat combination of their EC2 IaaS product, S3 storage, and some DevOps magic. From a working perspective, it goes something like this: - - 1. Developer checks code into Git. A portion of this code is actually a set of EBS directives, outlining changes that need to be made to the base operating environment. This can include things like setting environment variables, installing packages, and so on. - 2. Someone indicates that what's in GitHub is ready for release. You can do this by pushing a button in your AWS console, or by making a call to AWS' REST APIs. It's pretty easy to automat this step. - 3. AWS spins up virtual machines, and reads the EBS directives to get that environment configured the way it's supposed to be. The code is loaded from Git into the VMs. The VMs are registered with AWS' load balancer, and whatever old VMs were running are de-registered and destroyed. Poof, your app is up and running. - -This model accomplishes the basic goal of DevOps, which is to shorten the path between developers and users. So where's the "Ops" role in all this? Amazon did it. Their contribution to ops was to create all the automation necessary to make these steps happen. And the beauty of this model is that it supports tiered environments. For example, the above three steps might serve to spin up a testing environment, where you then run automated tests to validate the code. If the code validates, it's pushed into a production tier - all automatically - running on a separate EBS application. So from check-in to in-production is entirely automated, and the process can be performed consistently every single time. -Now... what would this look like in a Windows world? -In Step 1, imagine that instead of a set of EBS configuration directives - which are just text files - your developers create DSC configurations. Yes, the developers. After all, they're the ones who are coding for the environment, so that DSC configuration documents what they need the environment to look like. You might have a second DSC configuration that documents corporate standards for security, manageability, and so on. Whatever. -Step 3 might be Microsoft Azure Pack or System Center Virtual Machine Manager, told - perhaps via an SMA automation script - to spin up the new VMs from a base OS image. The DSC configurations are run to produce a MOF, which is injected into the new VM. The developer's code is deployed to the VM. The VM is registered with DNS and perhaps a load balancer, which provide access to it. -There are a couple of important details that I've glossed over a bit. Jeffrey Snover is fond saying, "treat servers like cattle, not pets." But servers by their nature have to have a few unique pieces of information, right? Well... yes and no. For all I know, cows make up names for themselves. I just don't care. Take IP addresses, for example. You shouldn't be assigning static IP addresses to servers; your DHCP system should be highly available, fault tolerant, and set up to handle servers. As you spin up a new VM, you can obviously have it register itself with DNS, so the IP address is mapped to a hostname. And speaking of that hostname - you as a human never need to know it. Or you shouldn't. Windows will make up a host name for itself as the VM spins up, and you can - through your automation scripts - capture that host name. That lets you set up DNS CNAME records, a load balancer, or whatever else. The point is that while the server may have made up a name for itself, you don't care. Nobody will ever address that server by its host name - they'll use an abstraction, like a load-balanced name, or a CNAME, or something else. Your automation scripts handle the mapping for you. When a VM is spun down, automation de-registers the dying host's name from whatever, closing the lifecycle loop. -Interestingly, you could probably do this exact model, today, with a huge number of applications in your environment. Why bother? I mean, this model makes sense in web apps where you're constantly spinning up and destroying VMs, but what about the majority of your apps that just run all the time without change? Well, this same model could spin them up in a disaster recovery scenario. Or in testing environments, which are constantly re-created to provide "clean" tests. Yes, it's a lot of _investment_ up front to make it all work, but once it's set up it just runs itself. -And that's what DevOps looks like. diff --git a/content/articles/2015-12-03-powershell-editor-services-hack-week-dec-6-13.md b/content/articles/2015-12-03-powershell-editor-services-hack-week-dec-6-13.md deleted file mode 100644 index 61413f827..000000000 --- a/content/articles/2015-12-03-powershell-editor-services-hack-week-dec-6-13.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Join us for the PowerShell Editor Services Hack Week, Dec 6-13! -authors: - - David Wilson -date: "2015-12-03T15:59:08+00:00" -categories: - - Announcements - - PowerShell for Developers - - Tools -aliases: - - /2015/12/powershell-editor-services-hack-week-dec-6-13/ ---- - -Do you wish your favorite editor had better PowerShell editing support?  Do you have a great idea for a new feature for the PowerShell extension in Visual Studio Code?  We’re dedicating next week, **December 6th through 13th** (Sunday through next Sunday), to hacking together on new features to enable better PowerShell support in any editor! -Here’s the plan: -**On Sunday, December 6th at 11AM-12PM PST (7-8PM GMT)** I’ll host a [Crowdcast event][1] to give an overview of PowerShell Editor Services, the PowerShell extension for VS Code, and other general ideas for contributions that people can make.  Participants can join to ask questions and discuss potential ideas so that we can get the ball rolling. -Once hacking has started, we’ll hang out together in the #editors channel of the [PowerShell Slack Community][2] so that everyone can get help on their contributions.  We’ll be using these discussions to help flesh out documentation about these projects using the [GitHub Wiki][3].  Every question asked will be helpful so don’t be shy! -On the week following our hacktivities, I’ll release new builds of PowerShell Editor Services and the Visual Studio Code extension containing our collective efforts.  I’ll also post a follow-up report here on PowerShell.org with details about all the contributions that were made in this time. - -### Ways to Contribute - -There are many places where you can contribute even if you don’t have time to write code.  Here are some ideas: -**Improve PowerShell Editor Services** - - * Write and review documentation for the .NET and JSON APIs - * Help provide good PowerShell script examples for validating language intelligence features - * Add language features support for files in a PowerShell module project ([issue #11][4]) - * Add language feature support for PowerShell classes ([issue #14][5]) - * Check out the [help wanted issue label][6] for more ideas! - -**Improve the PowerShell extension for Visual Studio Code** - - * Create new VS Code “command” features which provide helpful functionality for PowerShell - * File bugs for cool features you’d like to see or examples of things that don’t work well yet - * Help improve syntax highlighting for PowerShell code (issues [#26][7] and [#52][8]) - * Add features or fix bugs with the [help wanted issue label][9] - -**Add new editor integrations for PowerShell Editor Services** - - * [Sublime Text][10] - * [Atom][11] - * [Emacs][12] - * [Vim][13] - * … any other editor you’re interested in! - - * Use any of these projects during the hack week and provide feedback! - -### Want to participate? - -If you're interested in participating, check out the [PowerShell Editor Services Hack Week wiki page][14] and add your name to the participants list. I’ll be tracking the latest details about the event there next week.  Don’t forget to RSVP for the [Crowdcast event][1] to be reminded when it begins. -Looking forward to hacking with you all next week! -David Wilson [@daviwil -][15] Software Engineer at Microsoft - - [1]: https://www.crowdcast.io/e/pseditorhackweek1215 - [2]: http://slack.poshcode.org/ - [3]: https://github.com/PowerShell/PowerShellEditorServices/wiki - [4]: https://github.com/PowerShell/PowerShellEditorServices/issues/11 - [5]: https://github.com/PowerShell/PowerShellEditorServices/issues/14 - [6]: https://github.com/PowerShell/PowerShellEditorServices/labels/help-wanted - [7]: https://github.com/PowerShell/vscode-powershell/issues/26 - [8]: https://github.com/PowerShell/PowerShellEditorServices/issues/52 - [9]: https://github.com/PowerShell/vscode-powershell/labels/help-wanted - [10]: https://github.com/SublimeText/PowerShell - [11]: https://github.com/jugglingnutcase/language-powershell - [12]: https://github.com/jschaf/powershell.el - [13]: https://github.com/PProvost/vim-ps1 - [14]: https://github.com/PowerShell/PowerShellEditorServices/wiki/PowerShell-Editor-Services-Hack-Week---Dec-2015 - [15]: https://twitter.com/daviwil diff --git a/content/articles/2015-12-05-december-2015-scripting-games-puzzle.md b/content/articles/2015-12-05-december-2015-scripting-games-puzzle.md deleted file mode 100644 index fa0975748..000000000 --- a/content/articles/2015-12-05-december-2015-scripting-games-puzzle.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: 2015-December Scripting Games Puzzle -authors: - - Don Jones -date: "2015-12-05T16:33:35+00:00" -categories: - - Scripting Games -aliases: - - /2015/12/december-2015-scripting-games-puzzle/ ---- - -Our December 2015 puzzle comes from PowerShell.org board member Jeff Hicks, who wanted to share a little holiday fun for the season. - - -## **Instructions** - -The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month's puzzle. You can find them all at https://powershell.org/category/announcements/scripting-games/. Many puzzles will include optional challenges, that you can use to really push your skills. -**To participate**, add your solution to a public Gist (http://gist.github.com; you'll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post.  -**Only post one entry per person. **However, remember that you can always go back and edit your Gist. We'll always pull the most recent one when we display it, so there's no need to post multiple entries if you want to make an edit. - -Don't forget the [main rules and purpose of these monthly puzzles][1], including the fact that you won't receive individual scoring or commentary on your entry. -**User groups are encouraged to work together** on the monthly puzzles. User group leaders should submit their group's best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most "favorite" entries of the year will win a grand prize from PowerShell.org. - -## **Our Puzzle** - -The 12 Days of PowerShell! It is that time of year again. Time to think about sugar plums, nutcrackers and PowerShell. Well, maybe we think about that last one all year long. Because I am a giving kind of guy, I thought I‘d give you a PowerShell present. I like to think my present is one that continues to give as it involves learning. I have a small set of challenges that shouldn’t be too difficult, should be fun and in the end educational. -In PowerShell, and I think the ISE might work best for this, create this here-string. - - -`$list = @" -1 Partridge in a pear tree -2 Turtle Doves -3 French Hens -4 Calling Birds -5 Golden Rings -6 Geese a laying -7 Swans a swimming -8 Maids a milking -9 Ladies dancing -10 Lords a leaping -11 Pipers piping -12 Drummers drumming -"@ -`The variable $list is technically a single string with a length of 226. Using $list, see if you can solve these questions or challenges. I have written these in such a way that the solutions build on earlier answers. - - 1. Split $list into a collection of entries, as you typed them, and sort the results by length. As a bonus, see if you can sort the length without the number. - 2. Turn each line into a custom object with a properties for Count and Item. - 3. Using your custom objects, what is the total number of all bird-related items? - 4. What is the total count of all items? - -For those of you who have been extra good this year, I have a bonus challenge (or maybe you’ll think it is a lump of coal). Some people interpret The 12 Days of Christmas cumulatively. That is, on day 1 your true love got 1 item. On the second day, your true love got 2 turtle doves AND a partridge in a pair tree. This is in addition to the previous day’s presents. If you were to manually plot this in PowerShell you might do: - - -`$t = 0 -$t += 1 -$t += 1+2 -$t += 1+2+3 -`… -But you should be more elegant. Using PowerShell what is the total number of cumulative gifts? - - - [1]: https://powershell.org/?p=2574 diff --git a/content/articles/2015-12-15-recap-of-the-dec-2015-powershell-editor-services-hack-week.md b/content/articles/2015-12-15-recap-of-the-dec-2015-powershell-editor-services-hack-week.md deleted file mode 100644 index dc133b622..000000000 --- a/content/articles/2015-12-15-recap-of-the-dec-2015-powershell-editor-services-hack-week.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Recap of the Dec 2015 PowerShell Editor Services Hack Week -authors: - - David Wilson -date: "2015-12-16T01:30:17+00:00" -categories: - - Events - - PowerShell for Developers - - Tools -aliases: - - /2015/12/recap-of-the-dec-2015-powershell-editor-services-hack-week/ ---- - -Thanks to all those who participated in the PowerShell Editor Services Hack Week last week!  Much progress was made on fixing bugs and adding new features to both [PowerShell Editor Services][1] and the [PowerShell extension for Visual Studio Code][2].  Here's a quick summary of the contributions that were made during the week: -**Variable Display Improvements in the Debugger** -[Keith Hill][3] made many great improvements to how we display variable contents in the Visual Studio Code debugger.  First of all, he added support for variable scopes other than just "Local" as we had before.  You can now inspect variables from both the Global and Script scopes.  You will also see a special "Auto" section which filters the set of variables down to those that were defined in the current scope.  This is really helpful for quickly checking the state of the variables in your functions! -[![keith_auto](https://powershell.org/wp-content/uploads/2015/12/keith_auto.png)](https://powershell.org/wp-content/uploads/2015/12/keith_auto.png) -He also added greatly improved the variable value display for collections such as arrays and dictionaries and also objects which implement the ToString() method in .NET.  You will now see much greater detail for these variables in the debugger: -[![keith_vars](https://powershell.org/wp-content/uploads/2015/12/keith_vars.png)](https://powershell.org/wp-content/uploads/2015/12/keith_vars.png) -**New Expand Aliases Command** -[Doug Finke][4] contributed a new "Expand Aliases" command which searches your script file or selection for the use of cmdlet aliases.  For any alias it finds, it replaces the text with the full command name.  This is helpful for developers who want to quickly write out scripts using aliases but resolve them to their command names before committing to source control. -Here's a GIF of the feature in action (click to play!): -[![Demo of Expand Alias in VS Code](https://powershell.org/wp-content/uploads/2015/12/vscodeExpandAlias2-628x360.gif)](https://powershell.org/wp-content/uploads/2015/12/vscodeExpandAlias2.gif) -**Sublime Text Editor Integration** -Work on the integration of PowerShell Editor Services in Sublime Text has progressed quite well this week.  The basic protocol implementation is now working, enabling language features to be integrated over time.  I've also implemented basic file management support so that opened files are sent to Editor Services for syntax checking and semantic analysis.  From this point it's just a matter of integrating the language features of PowerShell Editor Services into Sublime's UI using its [plugin API][5]. -Check out the current code in the [editor-services branch of my fork][6] of the PowerShell Sublime Text package.  Once this effort is stable enough for an initial release, I'll be submitting a PR back to the [original PowerShell Sublime Text package repo][7] and future work will continue there. -**Atom Editor Integration** -Some work was started on an integration with the Atom editor but it was quickly determine that Atom's APIs for language features were to sparse to make quick progress.  However, with the experience gained from the Sublime Text integration, future work on the Atom integration should be much easier.  Expect to see more effort in this area in the first half of 2016. -**Miscellaneous Improvements** - - * [Mateusz Świetlicki][8] improved the "Run Selection" command so that it will run the line that the user's cursor is sitting on if there is no text selection - * The default set of Script Analyzer rules used for semantic analysis has been reduced to provide helpful hints without giving too much feedback.  (In the future the rule set will be completely configurable.) - * A set of bugs around code completion text replacements were fixed so that using IntelliSense no longer eats your code 🙂 - -**New Releases** -As promised, I've prepared new releases of both PowerShell Editor Services and the PowerShell extension for Visual Studio Code which contain all of the contributions made during these week.  The new NuGet packages for PowerShell Editor Services have been released on NuGet today (see the following changelog link).  The Visual Studio Code extension will be released once a publishing issue has been resolved. -Here are the changelog entries for both releases: - - * [PowerShell Editor Services 0.3.0][9] - * [PowerShell for Visual Studio Code 0.3.0][10] - -**Looking Ahead** -Overall I am very impressed with the work that we accomplished this week even though there wasn't a large amount of contributors.  My guess is that PowerShell fans would feel more comfortable contributing by writing PowerShell rather than C#.  I've got some ideas on how to make this possible in the future so keep an eye out for another Hack Week next year! -Thanks again to all the contributors and to all the users of these projects! - - [1]: https://github.com/PowerShell/PowerShellEditorServices - [2]: https://github.com/PowerShell/vscode-powershell - [3]: https://twitter.com/r_keith_hill - [4]: https://twitter.com/dfinke - [5]: http://www.sublimetext.com/docs/3/api_reference.html - [6]: https://github.com/daviwil/SublimePowerShell/tree/editor-services - [7]: https://github.com/SublimeText/PowerShell - [8]: https://github.com/mswietlicki - [9]: https://github.com/PowerShell/PowerShellEditorServices/blob/master/CHANGELOG.md#030 - [10]: https://github.com/PowerShell/vscode-powershell/blob/master/CHANGELOG.md#030 diff --git a/content/articles/2015-12-21-powershell-news-roundup-theres-been-a-lot-of-it.md b/content/articles/2015-12-21-powershell-news-roundup-theres-been-a-lot-of-it.md deleted file mode 100644 index 13032640a..000000000 --- a/content/articles/2015-12-21-powershell-news-roundup-theres-been-a-lot-of-it.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "PowerShell News Roundup (There's Been a Lot of it)" -authors: - - Don Jones -date: "2015-12-21T18:37:50+00:00" -categories: - - Announcements -aliases: - - /2015/12/powershell-news-roundup-theres-been-a-lot-of-it/ ---- - -There've been so many under-the-radar announcements and news bits about PowerShell, that I thought it'd be worth a quick start-of-the-week, pre-holiday roundup. -First off, the big news is that **[Windows Management Framework v5 has been released to manufacturing (RTM)][1]. **Not that there's any real "manufacturing" anymore, but this means we've hit the milestone where it's "done." Now, if Microsoft is smart, whatever WMF ships with Win2016 will be "5.1" or something, so we can all keep track of what's what. Fingers crossed on that. -Next, and you may have missed this, **Microsoft is moving away from Connect and over to UserVoice** for many products, and [PowerShell is now amongst them][2]. Spread the word on this, because feedback is super-important, the team _actually does listen, _and UserVoice is now where it'll happen. -In the continuing move to open source, the PowerShell team **[released a bunch of their tests on GitHub][3]. **These are some of the tests they use to test PowerShell itself, and the ability for everyone to now contribute to those means the team can produce more error free code for us. This is a big deal, and proves this isn't your grandfather's Microsoft anymore. -The **[DSC Documentation has also been open sourced][4], **meaning we can all finally contribute to that. Yeah, we all know Microsoft should be producing their own docs - and they are - but this lets us correct errors, add examples and expansions, and fill in the gaps Microsoft may have to leave. They're not a bundle of infinite resources, after all, and this finally lets us help each other in a more effective way. -The **[PowerShell + DevOps Global Summit 2016][5]** is about 1/3 sold-out. Currently, only 4-day registration is available. In February, we'll begin offering any remaining seats for 3-day attendance as well as 4-day. We don't recommend waiting much longer, because when we hit most people's new fiscal year next month, it'll be downhill to "sold out" again. Remember that registration cuts off at the beginning of March 2016, too. -Finally, **the Scripting Games puzzles** continue to be posted at the start of each month (usually the first Saturday). We're actively looking for a moderator to take over the process of collecting puzzle submissions from the community, coordinating puzzle and solution posting, and reviewing community submissions for noteworthy ones to call out. If you're interested, drop an e-mail to admin here at PowerShell.org. We already have content for January and February 2016, and are also looking for puzzle submissions. Drop an e-mail if you'd like to contribute a puzzle and a solution. -Happy Holidays from everyone here at PowerShell.org, and we wish you all the best in the coming new year! - - [1]: http://blogs.msdn.com/b/powershell/archive/2015/12/16/windows-management-framework-wmf-5-0-rtm-is-now-available.aspx - [2]: http://blogs.msdn.com/b/powershell/archive/2015/12/14/improving-the-powershell-feedback-experience-with-uservoice.aspx - [3]: http://blogs.msdn.com/b/powershell/archive/2015/12/07/powershell-tests-released-on-github.aspx - [4]: http://blogs.msdn.com/b/powershell/archive/2015/11/03/the-new-home-of-dsc-documentation.aspx - [5]: http://powershellsummit.org diff --git a/content/articles/2015-12-28-microsofts-brave-new-world-needs-version-numbers.md b/content/articles/2015-12-28-microsofts-brave-new-world-needs-version-numbers.md deleted file mode 100644 index 97e37d52f..000000000 --- a/content/articles/2015-12-28-microsofts-brave-new-world-needs-version-numbers.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "Microsoft's Brave New World Needs Version Numbers" -authors: - - Don Jones -date: "2015-12-28T19:21:23+00:00" -categories: - - News - - PowerShell for Admins -aliases: - - /2015/12/microsofts-brave-new-world-needs-version-numbers/ ---- - -In Microsoft's brave new world of agile, more-frequent software releases, including numerous pre-release cycles... Microsoft needs to rethink the way it communicates versioning. -Windows Management Framework (WMF) v5 has, for me, been pretty much the perfect example of what _not_ to do, and the perfect example of Microsoft still shoehorning itself into old nomenclature that no longer fills the bill. I know a bunch of folks on the PowerShell team are probably still trying to figure out what works, too, so this isn't meant to be a hammer-on-'em post, but WMF5's lifecycle was, from a versioning perspective, pretty hellish. -We had several "technology preview" releases, which were simply named after their month of release. April 2015. November. Whatever. It was really difficult from within the product - e.g., via $PSVersionTable - to tell which one you were running, which made helping people difficult. None of these were supported in production until the "WMF5 Production Preview" released in late 2015, and in December we got "RTM" code. RTM means "Released to Manufacturing," which is kind of absurd as a milestone, because there's literally zero actual manufacturing going on. It's just a word Microsoft is used to using. Windows 10 shipped with a production-supported version of WMF5, but it still wasn't "final," meaning RTM WMF is better than what shipped with the RTM OS. God willing, what ships in Windows Server 2016 will be v5.1 or something, because if we get yet another 5.0 release folks are going to start throwing up their hands and quitting. -Now that Microsoft's all lovey-huggy with open source and Linux and stuff, can we just copy what those guys do? -Every time you release code, increment the version number. It's that simple. There's no "production preview," there's just "5.3." And you maintain a list of what's supported in production. If 5.3 isn't a production milestone, fine - say so. But it's still a real version, because it was released unto the world. The next release is 5.4. Then 5.5. And maybe 5.6 is supported in production, but once 5.7 is out, 5.6 remains supported for only 90 days. Or whatever. Just have a list of what's supported, and increment the version number every time you release it. 5.8 might only last a week before someone finds some heinous bug and releases 5.9 - that's fine. After that comes 5.10, and then 5.11, and so on. -6.0 is the first release of a major new evolution in the product, and it's probably a "preview" release. 6.1 will be a bit better, with fewer bugs and more features nailed down, but it won't be until maybe 6.5 that we get a "supported in production" release. -All of this is a **lot easier to keep track of** than vague "version" numbers like "April 2016 Production Preview." -And while we're at it, let's have a Get-PSVersionInfo cmdlet. It can wrap around the existing $PSVersionTable variable, of course, but it can also ping a web service on Microsoft.com to tell you what the _latest_ version is, what the _latest supported_ version is, and whether or not your current version is supported in production. OMG, that would be _wonderful. _ - - -`PS C:\> Get-PSVersionInfo -Name Value ----- ------ -PSVersion 5.8 -ProductionOK False -LatestPSVersion 6.0 -LatestProductionPSVer 5.9 -`This tells me that I have 5.8, and it isn't supported in production at this time. I can get 5.9, which is supported in production, although there's a newer 6.0 which obviously isn't supported in production. -So please. [Vote for this on UserVoice][1]. - - [1]: https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11226561-version-numbering-for-all-releases diff --git a/content/articles/2015-12-28-my-favorite-dsc-feature-suggestions-on-uservoice-upvote.md b/content/articles/2015-12-28-my-favorite-dsc-feature-suggestions-on-uservoice-upvote.md deleted file mode 100644 index 6c0daf84c..000000000 --- a/content/articles/2015-12-28-my-favorite-dsc-feature-suggestions-on-uservoice-upvote.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: My Favorite DSC Feature Suggestions on UserVoice (upvote!) -authors: - - Don Jones -date: "2015-12-28T19:35:27+00:00" -categories: - - PowerShell for Admins -aliases: - - /2015/12/my-favorite-dsc-feature-suggestions-on-uservoice-upvote/ ---- - -Hopefully, you're aware that Microsoft is moving to UserVoice for accepting feature requests and bugs. [DSC in particular has 30-odd suggestions at present][1], and I thought I'd run through some of my fav's. Log in and up-vote the ones you like, or add comments to expand the discussion! - - * [Add Maintenance Windows Awareness to DSC/LCM][2]. This is one of mine, but it came from several customer suggestions. - * [Change the Pull Server database to SQL Server][3]. Broadly, this is a great idea. In theory, you should be able to modify the web.config file and direct it to a SQL Server already, but nobody knows the database schema that the pull server expects. - * [Refactor the LCM's validation logic][4]. This is another of mine, and it's crucial. Right now, only the LCM can validate multiple partial configs and tell you if there's a validation problem like a duplicate key. This means our only possible point of failure is the target node, which is the worst possible place for that to be. Factoring the logic out would let us built a pull server that could combine multiple configurations _server-side, _and spit out a combined, pre-validated MOF for the target to consume. We could also use the configuration logic to manually combine and validate MOFs in a test or RSoP mode, perhaps with a cmdlet. - -There's plenty more - have a look, vote for ones you like, and add your own suggestions! And there's a lot more besides DSC in there - see anything that you think is important? - - [1]: https://windowsserver.uservoice.com/forums/301869-powershell/category/148047-desired-state-configuration-dsc - [2]: https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11088780-add-maintenance-window-awareness-to-dsc-lcm - [3]: https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11088516-change-from-edb-file-to-sql-server-database-for-de - [4]: https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11088813-enable-proactive-validation-of-partial-configurati diff --git a/content/articles/2015-12-29-powershell-orgs-nonprofit-status.md b/content/articles/2015-12-29-powershell-orgs-nonprofit-status.md deleted file mode 100644 index b51939ba0..000000000 --- a/content/articles/2015-12-29-powershell-orgs-nonprofit-status.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "PowerShell.org's Nonprofit Status" -authors: - - Don Jones -date: "2015-12-29T15:11:16+00:00" -categories: - - Announcements -aliases: - - /2015/12/powershell-orgs-nonprofit-status/ ---- - -We learned today that The DevOps Collective, Inc., (the company that officially owns and runs PowerShell.org, the PowerShell + DevOps Global Summit, etc.) was accepted by the US Treasury as a 501(c)(3) public charity. -That means that the company is quite literally owned by the American public now, and run by its Board of Directors. No human or business entity owns the company and its assets, which is exactly our intent. Further, no human or business entity can profit from the company, which is also our exact intent. Regardless of who's running it, it's now big-time illegal for any Director (for example) to just partake of the organization's money. Previously, it was merely unethical, but completely legal, as the company was technically for-profit. So we're right where we want to be. -Donations to the corporation are now tax-deductible, charitable contributions. However, a _donation_ is when you get nothing of value in return; unfortunately, Summit registration fees - since Summit itself is of considerable material value - are _not_ charitable contributions. Your registration is likely still deductible as a business expense (namely, education, along with your travel expenses), something you or your organization's accountants should determine. Sponsorships - given that sponsors don't receive anything of material value from us - are considered deductible contributions in most cases. -I'm very proud to have brought the organization to this point, and I want to point out that it's due in part to Microsoft's own recent activities, such as bringing Core CLR, the WS-MAN stack, DSC client, and other bits to non-Windows operating systems, as well as their progress in open sourcing so many critical pieces. Those activities - and our expanding focus on DevOps in general - have taken us away from being an organization that supports a commercial product (MS Windows) to a much broader organization that was qualified for this beneficial status. I also want to offer a big shout-out to my fellow Directors, and especially Jason Helmick, who put in a lot of work with our own accountants to get this all in order for the IRS. -For the organization itself, it means our main revenue activity - Summit - is now nontaxable for us. That means we get to keep all of our money to spend on organizational operating expenses, instead of losing some of it to taxes. That gives us a 15-25% boost in being able to operate our TeamCity public build server, this very website, our TechSession webinars, and other activities. This new status also, I believe, places us firmly on a path toward long-term existence. PowerShell.org is now, in a very binding legal way, something _we all own, _and something it's on all of us to continue growing and supporting. -Thank you for that support, and Happy New Year! diff --git a/content/articles/2015/01/_index.md b/content/articles/2015/01/_index.md new file mode 100644 index 000000000..c4e81f581 --- /dev/null +++ b/content/articles/2015/01/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from January 2015" +description: "PowerShell.org Articles published in January 2015." +--- diff --git a/content/articles/2015/01/charlotte-powershell-user-group-252014/index.md b/content/articles/2015/01/charlotte-powershell-user-group-252014/index.md new file mode 100644 index 000000000..321220922 --- /dev/null +++ b/content/articles/2015/01/charlotte-powershell-user-group-252014/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2015-01-26-charlotte-powershell-user-group-252014/ +title: Charlotte PowerShell User Group 2/5/2014 +authors: + - Terri Donahue +date: "2015-01-26T17:23:23+00:00" +aliases: + - /2015/01/charlotte-powershell-user-group-252014/ +--- + +It has been quite a busy past couple of months and we have not had our monthly get-together. We are working to get back on track and will start in February. This month, I will be discussing IIS and PowerShell at our meeting. For those of you that do not know me, I am an IIS MVP and a PowerShell hack. I would like to tailor the discussion, demos, and examples to address specific questions or needs that the members have. You can also check out my powershell specific blogs [here](http://terrid.me/tag/powershell/). Feel free to tweet to @owterri with any content requests that you have. + +Look forward to seeing you in a couple of weeks. diff --git a/content/articles/2015/01/ebook-cover-contest/index.md b/content/articles/2015/01/ebook-cover-contest/index.md new file mode 100644 index 000000000..bf6211d03 --- /dev/null +++ b/content/articles/2015/01/ebook-cover-contest/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2015-01-06-ebook-cover-contest/ +title: eBook Cover Contest +authors: + - Don Jones +date: "2015-01-06T18:55:11+00:00" +categories: + - Books +aliases: + - /2015/01/ebook-cover-contest/ +--- + +Fancy yourself a graphics person? Just like to doodle? +We're holding a contest to create new covers for our various [ebooks][1]. Winners will receive absolutely nothing, other than a cover credit within the text (hey, we'll also give you a full set of the ebooks for free, what the heck). + + * Covers must include the book title, and should include the PowerShell.org logo. The logo is below. + * Don't include author names in the artwork. Authors are credit on the book's "About" page. + * Images must be 8.5" wide by 11" high, preferably at 300dpi, in PNG or JPG format ([see these specifications][2] if you need that sizing in pixels). + * Don't include art, photos, or any other elements that you yanked off the Internet, including Microsoft imagery, unless you can provide us with written permission from the copyright holder to use it. + +You can submit a series for all the books, or just covers for the book or books you like best. +Be serious. Have fun. Whatever! Send submissions via e-mail to Admin, right here at PowerShell.org. We'll let you submit until the **end of January 2015, **and we'll pick the best selections we have at the time. +[![metro-logo](https://powershell.org/wp-content/uploads/2015/01/metro-logo.png)](https://powershell.org/wp-content/uploads/2015/01/metro-logo.png) + + [1]: https://powershell.org/ebooks/ + [2]: https://www.penflip.com/Penflip/help/blob/master/publishing/cover.md diff --git a/content/articles/2015/01/lets-make-a-powershell-job-interview-quiz-cmon-and-help/index.md b/content/articles/2015/01/lets-make-a-powershell-job-interview-quiz-cmon-and-help/index.md new file mode 100644 index 000000000..e696a5ffa --- /dev/null +++ b/content/articles/2015/01/lets-make-a-powershell-job-interview-quiz-cmon-and-help/index.md @@ -0,0 +1,38 @@ +--- +url: /articles/2015-01-06-lets-make-a-powershell-job-interview-quiz-cmon-and-help/ +title: "Let's Make a PowerShell Job Interview Quiz. C'mon and Help." +authors: + - Don Jones +date: "2015-01-06T23:51:30+00:00" +categories: + - Announcements +aliases: + - /2015/01/lets-make-a-powershell-job-interview-quiz-cmon-and-help/ +--- + +The folks at [Smarterer][1] have agreed to let us - that's all of us, as in "The PowerShell Community" - build a sort of "exam" for people to prove their PowerShell Proficiency. And I need your help to do it! +**Step 1**, you need to be pretty decent with PowerShell yourself. Not Level 12 Guru Level, mind you, but you should be working with it daily. [Most of this book][2] should make sense to you. +**Step 2**, you need to download my Quiz Question Writing Guide (It's all of 1 page) and Topic List. [PowerShell Quiz Guidelines][3] is the download. Go on, I'll wait. +**Step 3, **you need to sign up, using your e-mail address, and let me know you're interested in helping. What you're volunteering to do is, over the course of February 2015, write at least 20 questions. That's about 2 questions per category. You're also agreeing to help peer-review the questions other folks write, so we can spot the stinkers.  +Signups are due by January 20th 2015 +. + + + [Go here to register!](http://674004.polldaddy.com/s/help-create-a-powershell-quiz) + + +**BTW, **20 questions total is only about 1 per day. You could totally do 5 per day if you made an effort. Think about PowerShell questions you'd ask during a job interview, to tell if someone knew their stuff or was merely a poser. _We cannot have too many good questions. _ +**Now for the good news there are prizes! **[Pluralsight][4] is offering a prizes to the top net question contributors ("net contributor" means the number of questions you write that survive peer review and are accepted by the Quiz Captain). + + * 1st place: $200 Amazon gift card and 6 months of access to the entire Pluralsight library + * 2nd place: $100 Amazon gift card and 3 months of access to the entire Pluralsight library + * 3rd place: $50 Amazon gift card and 1 month of access to the entire Pluralsight library + +**We're also looking for a Quiz Captain**, so when you register, indicate if you're willing to take on that role. There's only one, and you're exempt from the prize (that's what you get for stepping up). You're in charge of final acceptance on all questions that go into the final pool - not so much for technical accuracy, but for being well-written. +**Disclosures:** You'll be using an online authoring tool called Flock, which means your registration e-mail address (which you provide) will be provided to Smarterer, so they can load you into the tool and send you an access invite via e-mail. Your e-mail will also be used to contact you about the project, and regarding any prizes you may earn. +**WHY? **Well, the idea is that we're all getting to a point where we'll need to hire PowerShell sk1llz. Rather than us all concocting our own job interviews, this'll act as a kind of central, crowdsourced job interview you could direct a job candidate to. Yes, some of you will also ask for a more in-depth interview, perhaps offering a coding challenge or something - that's awesome. _This_ is just the first stage you could use. The exam will be available free of charge to anyone who wants to take it, anytime, ever. And it can be updated and evolved as the technology, and our business needs, evolve. + + [1]: http://smarterer.com + [2]: http://manning.com/jones6/ + [3]: https://powershell.org/wp-content/uploads/2015/01/PowerShell-Quiz-Guidelines.docx + [4]: http://pluralsight.com diff --git a/content/articles/2015/01/our-ebook-transition-and-your-chance-to-contribute/index.md b/content/articles/2015/01/our-ebook-transition-and-your-chance-to-contribute/index.md new file mode 100644 index 000000000..d61b3d65b --- /dev/null +++ b/content/articles/2015/01/our-ebook-transition-and-your-chance-to-contribute/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2015-01-17-our-ebook-transition-and-your-chance-to-contribute/ +title: Our eBook Transition – and Your Chance to Contribute! +authors: + - Don Jones +date: "2015-01-17T16:26:37+00:00" +categories: + - Announcements + - Books +aliases: + - /2015/01/our-ebook-transition-and-your-chance-to-contribute/ +--- + +We're in the process of migrating our free ebook collection over to Penflip, an online, Git-based collaborative authoring and publishing tool. Matt Penny has taken the lead in converting our Word documents to the Markdown syntax used by Penflip, and as [you can see on our ebooks page][1], most of the titles now have an initial version in Penflip. +One neat thing about Penflip is that anyone can register for a free account, fork one of our projects, and make their own modifications. You can then submit your changes back to the master branch, so we can incorporate your changes into the ebook. This will make it easy for everyone in the community to suggest new content, offer corrections, and so on. **I encourage you to help out -** right now, you may simply notice some flaws from the semi-automated and fully hellish Markdown conversion, and we'd love your assistance in correcting those. +Penflip also supports on-demand downloads of each ebook in a variety of common formats, including EPUB, PDF, and more. That means you'll always be able to grab the latest version of your favorite ebook. We've not yet migrated the source code that goes with some of the ebooks; the plan is to move those into our GitHub repo over the next week. +Penflip will be enabling the next generation of our ebooks, including a massive new DSC title I plan to begin working on in 2015. +**Thanks for any help you can** **provide**, and I hope you continue to find the ebooks helpful! + + [1]: https://powershell.org/ebooks/ diff --git a/content/articles/2015/01/phillyposh-01082015-meeting-summary-and-presentation-materials/index.md b/content/articles/2015/01/phillyposh-01082015-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..cd6ff7cc4 --- /dev/null +++ b/content/articles/2015/01/phillyposh-01082015-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2015-01-13-phillyposh-01082015-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 01/08/2015 meeting summary and presentation materials +authors: + - John Mello +date: "2015-01-14T02:12:41+00:00" +aliases: + - /2015/01/phillyposh-01082015-meeting-summary-and-presentation-materials/ +--- + +[John Mello][1] gave a presentation entitled “The ForEach and Where methods in Powershell v4 ”. [A copy of his demo script and presentation][2] are available here at our [GitHub site][3]. [A recording of this meeting][4] has been posted to our [YouTube channel][5]. + + [1]: http://mellositmusings.com/ + [2]: https://github.com/PhillyPoSH/2015-01 + [3]: https://github.com/PhillyPoSH + [4]: http://youtu.be/vc2Ukz2N9WQ + [5]: https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2015/01/powershell-org-free-ebook-transition/index.md b/content/articles/2015/01/powershell-org-free-ebook-transition/index.md new file mode 100644 index 000000000..2e82f9556 --- /dev/null +++ b/content/articles/2015/01/powershell-org-free-ebook-transition/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2015-01-25-powershell-org-free-ebook-transition/ +title: PowerShell.org Free eBook Transition +authors: + - Don Jones +date: "2015-01-25T13:02:48+00:00" +categories: + - Announcements + - Books +aliases: + - /2015/01/powershell-org-free-ebook-transition/ +--- + +Over the past few weeks, [Matt Penny][1] has been busy moving our free eBooks into [their new home on Penflip][2]. Code, when available, is located in our [GitHub repo][3], and modules will [soon be available in the PowerShell Gallery][4] for downloading via Install-Module. +Penflip is a Markdown-based editing system backed by GitHub. This means anyone can contribute corrections, additional material, and so on - which will make it easier to maintain these great books over time. You can download ebooks directly from Penflip in a variety of e-book formats. We're now focused on electronic formats, rather than traditional page-based layout, although PDF is still an available download option if you want to make a hardcopy. +The conversion from Word to Markdown was challenging and largely manual, so if you run across formatting problems (especially with code), we absolutely appreciate your help in fixing those. Simply "branch" the book, creating your own copy of the project. Make corrections, and then submit those back to the master branch. Approvals are manual, so give us a few days to review what you've done and merge it into the master. +Massive thanks to Matt for all the long hours making this conversion happen, and to the folks who've submitted cover art for the new books. + + [1]: https://twitter.com/salisbury_matt + [2]: http://penflip.com/powershellorg + [3]: http://github.com/powershellorg/ebooks + [4]: http://powershellgallery.com diff --git a/content/articles/2015/01/powershell-summit-europe-2015-topic-submissions/index.md b/content/articles/2015/01/powershell-summit-europe-2015-topic-submissions/index.md new file mode 100644 index 000000000..5f7199689 --- /dev/null +++ b/content/articles/2015/01/powershell-summit-europe-2015-topic-submissions/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2015-01-06-powershell-summit-europe-2015-topic-submissions/ +title: PowerShell Summit Europe 2015–topic submissions +authors: + - Richard Siddaway +date: "2015-01-06T09:02:42+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2015/01/powershell-summit-europe-2015-topic-submissions/ +--- + +Topic submissions for the PowerShell Summit Europe are still open. If you want to be considered as a speaker please submit your topic very soon. +At the moment there aren’t enough submissions to enable us to put on a quality event. The 2014 European Summit was an excellent event with many good sessions – now is the time to submit your sessions. We need your sessions. +We have a policy of accepting sessions from new speakers as well as established experts. It’s not who you are but the quality of the session that counts. +Details on how to submit session proposals are available here +[ +https://powershell.org/2014/11/24/call-for-presentations-for-powershell-summit-europe-2015/ +][1] +Please submit your proposals soon as we can’t run the European PowerShell Summit without them! As a note, we are confirmed for Stockholm (or within a a short subway ride of Stockholm) for the timeframe indicated, although we don't have the exact venue yet. It's important that we get sessions lined up soon, so that we can begin general registration. + + [1]: https://powershell.org/2014/11/24/call-for-presentations-for-powershell-summit-europe-2015/ "https://powershell.org/2014/11/24/call-for-presentations-for-powershell-summit-europe-2015/" diff --git a/content/articles/2015/01/powershell-summit-na-2015-agenda-changes/index.md b/content/articles/2015/01/powershell-summit-na-2015-agenda-changes/index.md new file mode 100644 index 000000000..28efa52ce --- /dev/null +++ b/content/articles/2015/01/powershell-summit-na-2015-agenda-changes/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2015-01-18-powershell-summit-na-2015-agenda-changes/ +title: PowerShell Summit NA 2015 Agenda changes +authors: + - Richard Siddaway +date: "2015-01-18T16:15:59+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2015/01/powershell-summit-na-2015-agenda-changes/ +--- + +We’ve had to make some minor changes to the Summit agenda – the revised schedule is shown on the event web site - [ +http://eventmgr.azurewebsites.net/event/home/PSNA15 +][1] + + [1]: http://eventmgr.azurewebsites.net/event/home/PSNA15 "http://eventmgr.azurewebsites.net/event/home/PSNA15" diff --git a/content/articles/2015/02/_index.md b/content/articles/2015/02/_index.md new file mode 100644 index 000000000..ca2520f2b --- /dev/null +++ b/content/articles/2015/02/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from February 2015" +description: "PowerShell.org Articles published in February 2015." +--- diff --git a/content/articles/2015/02/charlotte-powershell-user-group-meeting352015/index.md b/content/articles/2015/02/charlotte-powershell-user-group-meeting352015/index.md new file mode 100644 index 000000000..853357170 --- /dev/null +++ b/content/articles/2015/02/charlotte-powershell-user-group-meeting352015/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2015-02-27-charlotte-powershell-user-group-meeting352015/ +title: Charlotte PowerShell User Group Meeting–3/5/2015 +authors: + - Terri Donahue +date: "2015-02-27T18:52:15+00:00" +aliases: + - /2015/02/charlotte-powershell-user-group-meeting352015/ +--- + +We will be bringing you a presentation by Jason Walker, @AutomationJason, at our next meeting. Jason will be discussing the Anatomy of a DSC Resource. The session will dive into the anatomy of a DSC resource and will provide an understanding of what it takes to develop your own DSC resources. + +Food and drinks will be provided. Everyone is welcome. Please RSVP on the [MeetUp][1] event page so we can plan food accordingly. + + [1]: http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/216116072/ diff --git a/content/articles/2015/02/design-the-next-scripting-games/index.md b/content/articles/2015/02/design-the-next-scripting-games/index.md new file mode 100644 index 000000000..d3e434acf --- /dev/null +++ b/content/articles/2015/02/design-the-next-scripting-games/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2015-02-09-design-the-next-scripting-games/ +title: Design the Next Scripting Games +authors: + - Don Jones +date: "2015-02-09T15:03:49+00:00" +categories: + - Announcements + - Scripting Games +aliases: + - /2015/02/design-the-next-scripting-games/ +--- + +We have some folks working on the next Scripting Games... but we want some feedback from the community to make sure we're offering something of value. +The current plan is to run a series of events, with both Beginner and Intermediate tracks. There will be no "advanced" track; the feeling is that, if you're advanced, you should be helping out by judging ;). Events will be constructed as a combination of puzzles and real-world tasks, meaning some things will simply test your PowerShell skills, while others will test them in a more production-applicable way. +What we need from the community is some sense of what you want to get from the Games. However, before you reply, understand what is NOT on the table: **we will not be running an event where every entry gets personal commentary or feedback from an expert judge.** It simply isn't practical - everyone doing the judging has a full-time job, and offering personal feedback just isn't feasible. +What COULD be on the table is offering a numeric score from a judge, based on the completeness of your entry and what the judge thinks of it. However, if it's a low score, you're not going to be told why ("no commentary," see above). So we're not sure that numeric scores are useful. +One proposal has been to post the events, and have judges select both good ones and less-good ones to write about. In other words, provide commentary on the outstanding entries, but not EVERY entry. Individual entries wouldn't receive a score, but you could certainly compare what you did to the outstanding ones that did receive commentary. The idea here is to give you a task on which to test your skills, and to provide some educational feedback on some representative entries. The fact is that, in any given task, we tend to see a lot of similar-looking entries anyway, so hopefully taking some of them and commenting (both positively and constructively) will help everyone "judge" their own entries and improve their skills. +After trying numerous approaches to the Games over the past years, and after listening closely to people's feedback, we're trying to come up with something that is both useful and do-able. +What do you think of that proposal? Or, would you offer another proposal for us to build the Games around? Keep in mind - any proposal that suggests "expert commentary on every entry" will simply have to be turned down outright. After major discussion, we simply can't commit to it. We'll leave this open for the month of February 2015 - [discuss away][1]! +[Add to the discussion in the Forums][1]. Login required; not accepting comments on this post. + + [1]: https://powershell.org/forums/topic/the-next-scripting-games-your-thoughts/ diff --git a/content/articles/2015/02/nj-powershell-ug-meeting-march-5th-presenter-adam-bertram/index.md b/content/articles/2015/02/nj-powershell-ug-meeting-march-5th-presenter-adam-bertram/index.md new file mode 100644 index 000000000..a8f51f1c7 --- /dev/null +++ b/content/articles/2015/02/nj-powershell-ug-meeting-march-5th-presenter-adam-bertram/index.md @@ -0,0 +1,78 @@ +--- +url: /articles/2015-02-19-nj-powershell-ug-meeting-march-5th-presenter-adam-bertram/ +title: "NJ PowerShell UG Meeting March 5th: Presenter Adam Bertram" +authors: + - NJPowerShell +date: "2015-02-19T18:59:59+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/02/nj-powershell-ug-meeting-march-5th-presenter-adam-bertram/ +--- + +The NJ PowerShell User Group is having a meetup on Thursday, March 6th from 6:00 - 8:00 PM.  The first half hour will be for socializing, pizza, and playing pool at our coffee bar.  + + +**Registration**: [EventBrite](http://www.eventbrite.com/e/nj-powershell-ug-meeting-march-5th-presenter-adam-bertram-tickets-15834592693)  You must register to attend in person. + + +**Agenda**: + + + +                6:00 – 6:30: Pizza and socializing + + +                6:30 – 7:30: Presentation + + +                7:30 - 8:00: Q & A + + + + +Please note that the Webex meeting will start at 6:00 PM, but the actual presentation won't start until 6:30 + +.  +In-Person a + +ttendees must register, print out their EventBrite ticket, and present it at the door.  Walk-ins will not be permitted. + + + + +**Presenter**: Adam Bertram + + +**Bio: ** +Adam has been in the IT industry since 1998 and has mostly focused his career on Microsoft technologies.  He's a child of autoexec.bat and batch menus, graduated to VBscript 10 years ago and made his way to Powershell 3 years ago.  Adam's passion is breaking complicated problems down and developing creative solutions using Powershell.  Due to his experience with Microsoft's Configuration Manager he's been known to write a lot of scripts around software management. + + + +**Presentation Description:** + + +Managing Software Installs with Powershell + + +If you've ever tried to script a software install or uninstall to a lot of different applications you'll know how hard it can be. Every piece of software seems to work in a different manner. This talk will go over a Powershell module I've created that allows me to easily find, install and uninstall MSIs, InstallShield and other EXE installers. It also has the ability to perform various cleanup routines and perform many other functions necessary for the software to work as you would expect. + + + +Twitter: +[@adbertram](https://twitter.com/adbertram) + + +  [![AdamBertram](http://njpowershell.org/wp-content/uploads/2015/02/AdamBertram-150x150.png)](http://njpowershell.org/wp-content/uploads/2015/02/AdamBertram.png)  + + + Coffee Bar, Pool Table, and XBox + + +![Coffee Bar](https://cdn.evbuc.com/eventlogos/111855199/eventbritecoffeebar.png) + + + Conference Room + + +![Conference Room](https://cdn.evbuc.com/eventlogos/111855199/eventbriteconferenceroom.png) diff --git a/content/articles/2015/02/powershell-summit-europe-registration/index.md b/content/articles/2015/02/powershell-summit-europe-registration/index.md new file mode 100644 index 000000000..ac6669dbf --- /dev/null +++ b/content/articles/2015/02/powershell-summit-europe-registration/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2015-02-20-powershell-summit-europe-registration/ +title: PowerShell Summit Europe Registration +authors: + - Don Jones +date: "2015-02-20T14:35:03+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2015/02/powershell-summit-europe-registration/ +--- + +Registration for PowerShell Summit Europe will commence on February 27th, 2015 at roughly 12:01am server time (I believe the server is in a Pacific time Azure datacenter). We will be limited to roughly 100 attendees. +I want everyone to understand the basic rules of engagement for this. Setting up and running this event involves significant financial risk. While in this case the event venue, a Microsoft office in Kista (near Stockholm), Sweden, isn't charging us huge fees and requiring us to commit to hotel rooms and the like, there is still risk. _Most of that risk is not borne by PowerShell.org, _but for the most part by myself, personally. Our speakers also commit to covering their own travel expenses (something we're hoping to offset this year). In addition, PowerShell team members are taking _time away from the product_ to attend, which is a huge logistical commitment because it's such a relatively small team. +For the Europe 2014 event, we had very poor registration numbers almost until the last minute. We also had to work very hard to drum up topic submissions from European speakers. Those two facts worry us a lot, because it suggests that there isn't a strong and engaged community interested in this event. If that's the case, we don't want to barge in and run the event at all. As a result, we're going to be taking a pretty risk-averse approach this time, and I wanted to be up-front and forthright about it. +So: We're going to evaluate the registration numbers and velocity in mid-April. By then, we need to see at least 20-30 registrations. (We usually achieve that in the first week of registrations for the North American event.) If we're not hitting that level, then **the event is subject to cancellation** (and everyone will naturally get a full and complete refund). +Also know that, should we make it past that point, registration **will end by August 15th 2015** or when we fill the available space, whichever comes first. In other words, last-minute registration won't be a thing. +The success of this event **depends on the European members of the overall PowerShell community. ** +You + need to help get the word out. We aren't going to be advertising, soliciting Microsoft's help, or other techniques. This isn't a commercial conference; it's being done _by_ the community and _for_ the community - and if the community can't make it happen, then it won't happen. +Our agenda will be going online shortly, and you should head to http://PowerShellSummit.org to find the registration links (after reading the introductory material, click "Europe 2015" for details). We'll get it all posted and ready for February 27th - it won't be live until then. **Help us get the word out. **Tell co-workers. Use Twitter, Google+, and Facebook. Attend user group meetings and spread the word. We've got about 6 weeks to get 20-30 people signed up to make sure we're covering base expenses and making this happen. diff --git a/content/articles/2015/03/_index.md b/content/articles/2015/03/_index.md new file mode 100644 index 000000000..ecaab73e5 --- /dev/null +++ b/content/articles/2015/03/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from March 2015" +description: "PowerShell.org Articles published in March 2015." +--- diff --git a/content/articles/2015/03/home-labs-for-the-it-pro/index.md b/content/articles/2015/03/home-labs-for-the-it-pro/index.md new file mode 100644 index 000000000..c18797109 --- /dev/null +++ b/content/articles/2015/03/home-labs-for-the-it-pro/index.md @@ -0,0 +1,41 @@ +--- +url: /articles/2015-03-25-home-labs-for-the-it-pro/ +title: Home Labs for the IT pro +authors: + - Greg Altman +date: "2015-03-25T15:34:48+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/03/home-labs-for-the-it-pro/ +--- + +Every IT pro needs a lab. It’s not just the fact that we all have a little mad scientist in us, it’s a playground for experimentation and learning. By “lab” I do not mean a formal test or dev environment, but a much more informal setting that typically goes before the “dev” part gets started. This lab need not be expensive. A little creative repurposing and virtualization will go a long way towards getting started with a home lab. + + 1. Hardware- Obviously you have to have a computer. + * The least expensive is the system you already have. When you bought it did you buy a high end Core i7 with lots of ram for gaming or just future proofing? If so then you’re done! Windows 8.1 or Windows 10 preview do a great job of Hyper-V hosting. Of course you may need more hard drive space, but then again drives are relatively cheap these days. The system I use is a 3 year old Dell XPS with a Core i7 and 6GB of Ram and an added 1TB SATA drive. Hardware cost = zero. Of course, I want to add more ram and disk but for now it gets along. I run 3-4 windows core servers at a time, but more than 4 causes the system to go into disk thrash mode pretty seriously due to RAM overuse. + * The next best option takes up more space but can potentially be even cheaper in a strictly monetary sense. How does your company dispose of old outdated equipment? Can you score 5-10 laptops or a server or two? What about old Ethernet switches? That plus $50 at Walmart for some shelving and you have your own network in the basement to play with. + * Finally if you have an extra $600 -800 you can get a dedicated PC bare-bones kit with a Core i7, 16+ GB of ram and a 2-3 TB hard drive. + + + - + Software- If you are learning Linux then you’re in luck here as the cost is pretty much free. However in the Windows PowerShell lab, we need Windows! The approach to this is pretty much dependent on the cash you want to spend and the approach you took to solve the hardware problem. If you are using option a) then you don’t need a ‘host’ OS as you already have an OS. Microsoft offers free demo versions for download, and although they are time locked, these VMs aren’t going to usually live long enough to expire. If you already have a MSDN subscription from work, then you already have access to server OS downloads. + + + + - + Networking- Obviously you have an internet connection. Beyond that, if your home is like mine, there are a dozen or so devices connected to the home LAN. Gaming consoles, televisions, DVRs, etc. that anyone else in the house may want to use while you are using your lab equipment. I strongly recommend that you keep the “lab” separate from your home network. If you are going the basement shelves of equipment route, you’ll certainly need some Ethernet switches and perhaps a router or firewall to keep the “lab” network separate. If you are going the more virtual route, you can do as I did and install a Linux router on a VM to act as firewall/gateway from the “virtual” subnet to the “real” LAN. I used VyOS ([http://www.vyos.net](http://www.vyos.net)), which is nice since you can simply follow the directions on their site to do a basic setup. This keeps lab services in the virtual space where they belong. + + + + - + Time- I know we are all busy, but seriously make the time. Getting this set up takes literally a couple of hours depending on your internet connection. Once it’s set, then you can squeeze in a little here and there and make surprising strides in your learning. Get up an hour earlier and play in the lab a bit while drinking coffee. Stay up an hour later and work on the lab after the family is in bed. Dedicate two or three lunch hours a week. You’ll be amazed how much faster you can learn things when you can just “try it and see what happens” with no fear of breaking something important. After all you built it- you can rebuild it! + + + +So now that we have all the parts together, what specifically do we need to build?  Since in most instances, we’ll be building this in a virtual space, let’s focus on that one. Those of you building a lab physically may have to fill in some blanks to match up with your physical setup but the concepts are the same. +I start off with the most basic: the network. Servers are much more interesting when they can talk to each other some right? In Hyper-V Manager make two virtual switches, one is linked to your host machine’s NIC and therefore to the rest of your LAN and presumably the internet. The second one is an Internal Only type. These should be on separate subnets to keep the routing simple. I like to use a 10.x.x.x/24 network so that I have lots of room to play around with subnets and software based networking. +Once we have those two networks, we need a router. As I mentioned before, I use VyOS installed on a VM with two NICS, one on the internal LabNet switch and on the external “HomeLan” switch. +Next it’s time to start standing up servers. This can be done one of two ways; manually or via Desired State Configuration.   If you are like me, and just getting started with DSC, I recommend a mixed approach. Get your Domain Controller going and a Windows 8.1 or later client installed on your LabNet.  Now you have a stable network and can start playing around with DSC. I have a standard build of a configured router, DC, Windows 10 client, and a DSC server saved to a 1 TB USB drive as a backup. That way no matter how badly I hose up the lab, I can get back to a minimum stable configuration quickly and easily.  On the DSC server I keep a couple of copies of configurations for web servers, video servers, Windows 10 desktops, whatever it is that I’m playing with that week. +The only thing I haven’t been able to really introduce test wise is Apple products since I’m running in a PC environment and there is no legal way to virtualize a Mac on hardware that isn’t Apple. Of course with a little twiddling of the router configuration and by introducing a VLAN on my wireless router I’m sure I could incorporate external wireless devices like a MacBook. However, that violates the premise of keeping the “Mad Scientist Stuff” in an isolated virtual space. +Obviously there wasn’t much PowerShell in this discussion, and equally obviously, much of this you can do from a PowerShell prompt or with DSC. Unfortunately in order to get your skills to that level, the lab has to come first. diff --git a/content/articles/2015/03/march-omaha-powershell-user-group-meeting/index.md b/content/articles/2015/03/march-omaha-powershell-user-group-meeting/index.md new file mode 100644 index 000000000..9d70a046c --- /dev/null +++ b/content/articles/2015/03/march-omaha-powershell-user-group-meeting/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2015-03-11-march-omaha-powershell-user-group-meeting/ +title: March Omaha PowerShell User Group Meeting +authors: + - Jacob Benson +date: "2015-03-11T12:52:14+00:00" +aliases: + - /2015/03/march-omaha-powershell-user-group-meeting/ +--- + +This month we have several exciting things going on!  First, Trond Hindenes will be joining us via Lync from the great country of Norway for a presentation on Service Management Automation (SMA).  Trond is a Senior Consultant at Crayon who spends most of his non-snowboarding time working on Microsoft System Center, PowerShell, Active Directory, Virtualization and Microsoft Azure. You can find him on[Twitter](https://twitter.com/trondhindenes) and on his website [Trond’s Working!](http://hindenes.com/trondsworking/) +Second, the first 30 minutes of this meeting will be used to announce the “official” formation of an Omaha System Center Users Group and to give attendees time to network with each other and talk to Matt, Kelly and Zac about the formation of the user group (if they are interested in learning more about it).  If you are interested in learning more about the Omaha Sytems Center User Group before the meeting you can find them on [Twitter](http://twitter.com/omahascug%20) or you can email them [omahascug@outlook.com](mailto:omahascug@outlook.com) . +We will attempt to record Trond’s presentation using Lync but no promises :). +[Event Registration is here][1]. + + [1]: http://www.eventbrite.com/e/omaha-powershell-user-group-march-meeting-tickets-16120181898 diff --git a/content/articles/2015/03/phillyposh-03052015-meeting-summary-and-presentation-materials/index.md b/content/articles/2015/03/phillyposh-03052015-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..ef616d4f6 --- /dev/null +++ b/content/articles/2015/03/phillyposh-03052015-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2015-03-10-phillyposh-03052015-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 03/05/2015 meeting summary and presentation materials +authors: + - John Mello +date: "2015-03-11T01:18:19+00:00" +aliases: + - /2015/03/phillyposh-03052015-meeting-summary-and-presentation-materials/ +--- + +[Derek Murawsky][1] gave an excellent presentation entitled “Introducing Chocolatey”. [A copy of his demo script and presentation][2] are available here at our [GitHub site][3]. [A recording of this meeting][4] has been posted to our [YouTube channel][5]. + + [1]: https://twitter.com/OutOfOrder2day + [2]: https://github.com/PhillyPoSH/2015-03-Derek-Murawsky-Chocolatey- + [3]: https://github.com/PhillyPoSH + [4]: https://www.youtube.com/watch?v=LqyHyoa_F1c + [5]: https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2015/03/special-charlotte-powershell-group-meeting-on-422-featuring-lee-holmes/index.md b/content/articles/2015/03/special-charlotte-powershell-group-meeting-on-422-featuring-lee-holmes/index.md new file mode 100644 index 000000000..a57101671 --- /dev/null +++ b/content/articles/2015/03/special-charlotte-powershell-group-meeting-on-422-featuring-lee-holmes/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2015-03-26-special-charlotte-powershell-group-meeting-on-422-featuring-lee-holmes/ +title: Special Charlotte PowerShell Group meeting on 4/22 featuring Lee Holmes +authors: + - Terri Donahue +date: "2015-03-26T22:41:03+00:00" +aliases: + - /2015/03/special-charlotte-powershell-group-meeting-on-422-featuring-lee-holmes/ +--- + +Charlotte hackers, our regularly scheduled meeting on April 2nd will not be occurring. Instead we will have our monthly meeting on April 22nd. Can you hear the drum roll in the distance? It will continue to build to a crescendo as April 22nd approaches. Lee Holmes will be speaking at the meeting. + +In this highly interactive session, Principle PowerShell developer Lee Holmes shares some of his favorite PowerShell tips and tricks. Attendees are encouraged to share their favorite PowerShell tricks as well, and so the session should be both fun and educational. + +This is a remarkably unique opportunity to interact with one of the cornerstone developers of PowerShell. We expect a large turnout given the proximity to the PowerShell Summit, so we are requiring everyone to RSVP this time around. + +In addition, we're giving Charlotte PowerShell Group members first crack at the reservations. Ed Wilson will be promoting this event heavily on his blog starting March 30, and it will likely be promoted as part of the PowerShell summit marketing as well. My point is - the seats will go fast. Get yours while you can. + +Everyone wanting to attend this event will need to sign-up and join the Charlotte PowerShell User Group on MeetUp. Click on over and save your spot. + +[http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/221424922/][1] + +We look forward to seeing everyone and enjoying a great meeting with Lee. + + [1]: http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/221424922/ "http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/221424922/" diff --git a/content/articles/2015/03/the-fastest-powershell-2-count-all-users-in-active-directory-domain/index.md b/content/articles/2015/03/the-fastest-powershell-2-count-all-users-in-active-directory-domain/index.md new file mode 100644 index 000000000..9ca0af198 --- /dev/null +++ b/content/articles/2015/03/the-fastest-powershell-2-count-all-users-in-active-directory-domain/index.md @@ -0,0 +1,139 @@ +--- +url: /articles/2015-03-06-the-fastest-powershell-2-count-all-users-in-active-directory-domain/ +title: "The fastest Powershell #1 : Count all users in Active Directory domain" +authors: + - Steve +date: "2015-03-07T00:47:42+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/03/the-fastest-powershell-2-count-all-users-in-active-directory-domain/ +--- + +**Updated :** October 01, 2015 +** +Question +**: What is the fastest solution to count all the users in Active Directory domain? + +* * * + +** +Answer +**: To answer this question, I will compare 17 different commands in a domain with 75 000 users. + + +`[System.GC]::WaitForPendingFinalizers() +[System.GC]::Collect() +Set-Location -Path 'C:\demo' +Add-Type -AssemblyName System.DirectoryServices.Protocols +Import-Module -Name .\S.DS.P.psd1 +Add-PSSnapin -Name 'Quest.ActiveRoles.ADManagement' +$searcher = [adsisearcher]'(&(objectclass=user)(objectcategory=person))' +$searcher.SearchRoot = 'LDAP://DC=domain,DC=com' +$searcher.PageSize = 1000 +$searcher.PropertiesToLoad.AddRange(('samaccountname')) +function Get-QueryResult +{ + [CmdletBinding()] + Param + ( + [Parameter(Mandatory=$true)] + [int]$Id + ) + switch ($id) + { + 1 { ( Get-ADUser -Filter 'objectClass -eq "user" -and objectCategory -eq "person"' -SearchBase 'DC=domain,DC=com' -Properties SamAccountName).SamAccountName } + 2 { ( Get-ADUser -LDAPFilter '(&(objectclass=user)(objectcategory=person))' -SearchBase 'DC=domain,DC=com' -Properties SamAccountName).SamAccountName } + 3 { ( Get-ADObject -Filter 'objectCategory -eq "person" -and objectClass -eq "user"' -SearchBase 'DC=domain,DC=com' -Properties SamAccountName).SamAccountName } + 4 { ( Get-ADObject -LDAPFilter '(&(objectclass=user)(objectcategory=person))' -SearchBase 'DC=domain,DC=com' -Properties SamAccountName).SamAccountName } + 5 { ( Get-ADObject -LDAPFilter 'sAMAccountType=805306368' -SearchBase 'DC=domain,DC=com' -Properties SamAccountName).SamAccountName } + 6 { ( Get-QADUser -SearchRoot 'DC=domain,DC=com' -DontUseDefaultIncludedProperties -IncludedProperties SamAccountName -SizeLimit 0).SamAccountName } + 7 { ( $searcher.FindAll() ) } + 8 { (Find-LdapObject -SearchFilter:'(&(objectclass=user)(objectcategory=person))' -SearchBase:'DC=domain,DC=com' -LdapServer:'' -PageSize 1000 -PropertiesToLoad:@('sAMAccountName')) } + 9 { (Find-LdapObject -SearchFilter:'sAMAccountType=805306368' -SearchBase:'DC=domain,DC=com' -LdapServer:'' -PageSize 1000 -PropertiesToLoad:@('sAMAccountName')) } + 10 { (Find-LdapObject -SearchFilter:'(&(objectclass=user)(objectcategory=person))' -SearchBase:'DC=domain,DC=com' -LdapServer:'' -PageSize 1000) } + 11 { (Find-LdapObject -SearchFilter:'sAMAccountType=805306368' -SearchBase:'DC=domain,DC=com' -LdapServer:'' -PageSize 1000) } + 12 { (dsquery user -o samid 'DC=domain,DC=com' -limit 0) } + 13 { (dsquery * -filter '(&(objectclass=user)(objectcategory=person))' -attr samAccountName -attrsonly -limit 0) } + 14 { (dsquery * -filter 'sAMAccountType=805306368' -attr samAccountName -attrsonly -limit 0) } + 15 { ([regex]::match((.\AdFind.exe -b 'DC=domain,DC=com' -f '(&(objectclass=user)(objectcategory=person))' -c),'\d{5}').value) 2> $null } + 16 { ([regex]::match((.\AdFind.exe -b 'DC=domain,DC=com' -f 'sAMAccountType=805306368' -c),'\d{5}').value) 2> $null } + 17 { ([regex]::match((.\AdFind.exe -b 'DC=domain,DC=com' -sc adobjcnt:user -c),'\d{5}').value) 2> $null } + } +} +# Check +for ($i = 1; $i -le 17; $i++) +{ + if ($i -ge 15) + { + $count = Get-QueryResult -Id $i + } + else + { + $count = (Get-QueryResult -Id $i | Measure-Object).Count + } + [PSCustomObject]@{ + Query = $i + Count = $count + } +} +# Measure +for ($i = 1; $i -le 17; $i++) +{ + New-Variable -Name "query$i" -Value $('{0:N2}' -f (Measure-Command -Expression { Get-QueryResult -ID $i }).TotalSeconds) +} +[PSObject]@{ + 'Get-ADUser -Filter objectClass and objectCategory' = $query1 + 'Get-ADUser -LDAPFilter objectclass objectcategory' = $query2 + 'Get-ADObject -Filter objectClass and objectCategory' = $query3 + 'Get-ADObject -LDAPFilter objectclass objectcategory' = $query4 + 'Get-ADObject -LDAPFilter sAMAccountType=805306368' = $query5 + 'Quest' = $query6 + '[adsisearcher]' = $query7 + 'Find-LdapObject objectClass and objectCategory PropertiesToLoad' = $query8 + 'Find-LdapObject sAMAccountType=805306368 PropertiesToLoad' = $query9 + 'Find-LdapObject objectClass and objectCategory' = $query10 + 'Find-LdapObject sAMAccountType=805306368' = $query11 + 'dsquery user -o samid' = $query12 + 'dsquery objectClass and objectCategory' = $query13 + 'dsquery sAMAccountType=805306368' = $query14 + 'adfind objectClass and objectCategory' = $query15 + 'adfind sAMAccountType=805306368' = $query16 + 'adfind -sc adobjcnt:user' = $query17 +}.GetEnumerator() | Sort-Object -Property Value | Select-Object -Property @{ + Name = 'Query' + Expression = {$_.Name} +}, @{ + Name = 'TotalSeconds' + Expression = {[double]$_.Value} +} | Sort-Object -Property TotalSeconds | Format-Table -AutoSize +`First, I check that all these commands return the same value: + +Result: + + +**Conclusion** +: In this scenario, the fastest was : + + +`AdFind.exe -b 'DC=domain,DC=com' -f 'sAMAccountType=805306368' -c +`**Links** : +Download AdFind (adfind.exe) +[http://www.joeware.net/freetools/tools/adfind/](http://www.joeware.net/freetools/tools/adfind/) +Download System.DirectoryServices.Protocols module (S.DS.P.psm1) +[https://gallery.technet.microsoft.com/scriptcenter/Using-SystemDirectoryServic-0adf7ef5](https://gallery.technet.microsoft.com/scriptcenter/Using-SystemDirectoryServic-0adf7ef5) +Download QAD cmdlets (Get-QADUser) +[http://software.dell.com/products/activeroles-server/powershell.aspx](http://software.dell.com/products/activeroles-server/powershell.aspx) +All these tools in one file : + +**Note** : If you have a faster solution, feel free to comment below so I can update my article. + +* * * + +** +Real-world example +**: +Couting the total numbers of users in Active Directory can be useful in some cases. +You could need this information to generate statistics or reports, or maybe you just want to monitor the number of accounts created / removed on regular basis. + +* * * diff --git a/content/articles/2015/04/_index.md b/content/articles/2015/04/_index.md new file mode 100644 index 000000000..83edfd0b6 --- /dev/null +++ b/content/articles/2015/04/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from April 2015" +description: "PowerShell.org Articles published in April 2015." +--- diff --git a/content/articles/2015/04/a-quick-powershell-summit-europe-update-spread-the-word/index.md b/content/articles/2015/04/a-quick-powershell-summit-europe-update-spread-the-word/index.md new file mode 100644 index 000000000..b52736983 --- /dev/null +++ b/content/articles/2015/04/a-quick-powershell-summit-europe-update-spread-the-word/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2015-04-07-a-quick-powershell-summit-europe-update-spread-the-word/ +title: A Quick PowerShell Summit Europe Update (spread the word!) +authors: + - Don Jones +date: "2015-04-07T14:52:16+00:00" +categories: + - PowerShell Summit +aliases: + - /2015/04/a-quick-powershell-summit-europe-update-spread-the-word/ +--- + +First: Because e-mail these days is actually unreliable, what with spam filters and all, please know that we're relying on you to keep yourself informed on Summit updates. Following the [Summit category on PowerShell.org][1], and watching the [@PSHSummit Twitter account][2], are the reliable means of doing so. +**First:** Summit Europe is happening. There was some confusion because a draft blog post from a month ago got resurrected somehow, but the Summit is **on.** +**Second: **We're almost sold out. I think we literally have 2 or 3 seats left. There was a rush over this past weekend. +**Third: **We're exploring other venues in Stockholm and Kista, which would afford us more room. I expect to have this pinned down no later than mid-May. The dates will not change, and the Kista area will probably not change. But **pay attention** so you're not going to the wrong building. Watching the Summit category and @PSHSummit Twitter page is vital, especially closer-in. +**Fourth: **Hotel inventory in central Stockholm is dicey because there's some giant conference at the waterfront conference center. There are rooms available just outside the central area, as well as in Kista. So long as you're close to a tram line or Metro stop, you're good to go - the Metro will be able to get you to whatever venue we select (we're ensuring that). +**Fifth: **That is all. Have a good week :). + + [1]: https://powershell.org/forums/forum/powershell-summit/ + [2]: http://twitter.com/pshsummit diff --git a/content/articles/2015/04/charlotte-powershell-user-group-meeting-for-may/index.md b/content/articles/2015/04/charlotte-powershell-user-group-meeting-for-may/index.md new file mode 100644 index 000000000..00185d1e6 --- /dev/null +++ b/content/articles/2015/04/charlotte-powershell-user-group-meeting-for-may/index.md @@ -0,0 +1,11 @@ +--- +url: /articles/2015-04-24-charlotte-powershell-user-group-meeting-for-may/ +title: Charlotte PowerShell User Group meeting for May +authors: + - Terri Donahue +date: "2015-04-24T14:01:21+00:00" +aliases: + - /2015/04/charlotte-powershell-user-group-meeting-for-may/ +--- + +The Charlotte PowerShell User Group had a great meeting in late April with a special guest presenter, Lee Holmes. Due to this occurrence and scheduling conflicts for the month of May, our regularly scheduled meeting will not occur. Stay tuned for information about our next meeting which will occur on our normal day (1st Thursday of every month), June 4th. diff --git a/content/articles/2015/04/management-information-the-omicimwmimidmtf-dictionary/index.md b/content/articles/2015/04/management-information-the-omicimwmimidmtf-dictionary/index.md new file mode 100644 index 000000000..cd84224d2 --- /dev/null +++ b/content/articles/2015/04/management-information-the-omicimwmimidmtf-dictionary/index.md @@ -0,0 +1,67 @@ +--- +url: /articles/2015-04-24-management-information-the-omicimwmimidmtf-dictionary/ +title: "Management Information: The OMI/CIM/WMI/MI/DMTF Dictionary" +authors: + - Don Jones +date: "2015-04-24T22:57:48+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/04/management-information-the-omicimwmimidmtf-dictionary/ +--- + +Not too long ago, over on DonJones.com, I [wrote an article][1] that tried to explain some of the confusion between Microsoft's World of Management Instrumentation - e.g., WMI, OMI, CIM, and a bunch of other acronyms. I glossed over some of the finer details, and this article is intended to provide more specificity and accuracy - thanks to Microsoft's Keith Bankston for helping me sort things out. + +## CIM and the DMTF + +Let us begin with CIM. CIM stands for Common Information Model, and it is not a tangible thing. It isn't even software. It's a set of standards that describe how management information can be represented in software, and it was created by the Distributed Management Task Force (DMTF), an industry working group that Microsoft is a member of. + +## Old WMI, DCOM, and RPC + +Back in the day - we're talking Windows NT 4.0 timeframe - Microsoft created Windows Management Instrumentation, or WMI. This was a server component (technically, a background service, and it ran on Workstation as well as Server) that delivered up management information in the CIM format. Now, at the time, the CIM standards were pretty early in their life, and WMI complied with what existed at the time. But the standards themselves were silent on quite a few things, like what network communications protocol you'd use to actually talk to a server. Microsoft opted for Distributed Component Object Model, or DCOM, which was a very mainstream thing for them at the time. DCOM talks by using Remote Procedure Calls, or RPCs, also a very standard thing for Windows in those days. + +## New WMI, WS-MAN, and WINRM + +Fast forward a bit to 2012. With Windows Management Framework 3, Microsoft releases a new version of WMI. They fail to give it a unique name, which causes a lot of confusion, but it complies with all the latest CIM specifications. There's still a server-side component, but this "new WMI" talks over WS-Management (Web Services for Management, often written as WS-MAN) instead of DCOM/RPC. Microsoft's implementation of WS-MAN lives in the Windows Remote Management (WinRM) service. The PowerShell cmdlets that talk this new kind of WMI all use CIM as part of the noun, giving us Get-CimInstance, Get-CimClass, Invoke-CimMethod, and so on. But make no mistake - these things aren't "talking CIM," because CIM isn't a protocol. They're talking WS-MAN, which is what the new CIM standard specifies. +Sidebar: From a naming perspective, Microsoft was pretty much screwed with the new cmdlets' names, no matter what they called them. "Cim" is a terrible part of the noun. After all, the "old WMI" was compliant with the CIM of its day, but it didn't get to be called CIM. The new cmdlets don't use any technology called "Cim," they're merely compliant with the newest CIM standards. Maybe they should have been called something like Get-Wmi2Instance, or Invoke-NewWmiMethod, but that wasn't going to make anyone happy, either. So, Cim it is. + +## OMI + +Now, at some point, folks noticed that implementing a full WMI/DCOM/RPC stack wasn't ever going to happen on anything but Windows. It was too big, too "heavy," and frankly too outdated by the time anyone noticed. But there was a big desire to have all this CIM-flavored stuff running elsewhere, like on routers, switches, Linux boxes, you name it. So Microsoft wrote Open Management Instrumentation, or OMI. This is basically a CIM-compliant server that speaks WS-MAN, just like the "new WMI." But it's really teeny-tiny, taking up just a few megabytes of storage and a wee amount of RAM. That makes it suitable for running on devices with constrained compute capacity, like routers and switches and whatnot. Microsoft open-sourced their OMI server code, making it a good reference item that other people could adopt, build on, and implement. + +## Under the Hood: Provider APIs + +Time to dig under the hood a bit. "Old WMI" got its information from something called the WMI Repository. The Repository, in turn, was populated by many different WMI Providers. These Providers are written in native code (e.g., C++) and only run on Windows. They're what create the classes - Win32_OperatingSystem, Win32_BIOS, and so on - that we IT ops people are used to querying. +As Microsoft started looking at OMI, and at updated WMI to the newer CIM standards, they realized these old-school Providers weren't hot stuff. First, they were kinda hard to write, which didn't encourage developers to jump on board. They were also kinda huge, relatively speaking, making them less suitable for constrained environments like routers and switches. +So Microsoft came up with a new Application Programming Interface (API) for writing providers, calling it simply Management Instrumentation, or MI. MI providers are easier to write, and a lot smaller. MI providers, at an API level, work under the "new WMI" as well as under OMI. So if you're getting a router hooked up to all this CIM stuff, you're going to implement the teeny OMI server, and underneath it you're going to write one or more MI providers to provide information to the OMI server. MI providers don't necessarily need a repository, meaning they provide information "live" to the server component. That helps save storage space. +MI providers are also written in native code, which is nice because lots of developers who work with low-level system stuff greatly prefer native code. The client and server APIs are (on Windows, at least) available in native or managed (.NET) versions, so both kinds of developers get access. Providers, though, are always native code. +As an IT ops person, you'll probably never care what kind of provider you're using. The "new WMI" on Windows supports both old-style WMI Providers and new-style MI Providers, so developers can pick and choose. Also, Microsoft doesn't need to go re-do all the work they already did writing providers for "old WMI," because "new WMI" can continue to use it. + +## PowerShell Cmdlets + +When you're using Get-CimInstance in PowerShell, by default you're using "new WMI," meaning you're talking WS-MAN to the remote machine. Those commands also have the ability to talk DCOM/RPC, mainly for backward compatibility with machines that either aren't running WMF3 or later, or that haven't enabled WinRM (remember, WinRM is what "listens" for the incoming WS-MAN traffic). + +## Client API Differences: This Matters + +It's massively important that you understand the inherent differences between DCOM/RPC and WS-MAN. Under DCOM, you were basically connected to a "live" object on the remote machine. That meant you could get a WMI instance, execute methods, change properties in some cases, and generally treat it as functioning code. The RPC protocol was designed for that kind of continuous back-and-forth, although it wasn't terribly network- or memory-efficient, because of the "live connection" concept. WS-MAN, on the other hand, is basically like talking to a web server. Heck, it uses HTTP, even. So when you run Get-CimInstance, your data is generated on the remote machine, serialized into XML, transmitted back in an HTTP stream, and then deserialized into objects on your computer. Those aren't "live" objects; they're not "connected" to anything. That's why they don't have methods. To execute a method, you have to send another WS-MAN request to the machine, which will execute the method and send you any results - which is what Invoke-CimMethod does. The entire relationship between you and the remote machine is essentially stateless, just like the relationship between a web browser and a web server. So your coding technique has to change a bit as you move from "old WMI" to "new WMI." The good news is that the new, web-style approach is a lot lighter-touch on the server, requiring less network and memory, so it becomes a lot more scalable. + +## Versions + +Anything running WMF3 or later (Win2008R2 and later, Win7 and later) has "new WMI." Microsoft continues to include "old WMI" for backward compatibility, although on newer versions of Windows (I'm playing with Win2012R2), the ports for DCOM/RPC may not be open, while the ports for WS-MAN are, by default. So we're clearly moving forward. + +## Enabling WinRM CIM Remoting New WMI + +Oh, and as a complete side note, a LOT of us in the industry will say stuff like "enable PowerShell Remoting" when we refer to enabling WS-MAN. Technically, that's not accurate. Enabling Remoting, if you do it right, enables WinRM, and enables WinRM to pass traffic to PowerShell. It'll also enable most of the other cool stuff we use WS-MAN for, including PowerShell Workflow, the "new WMI" communications for CIM cmdlets, and so on. But you could also enable the "new WMI" stuff without also turning on PowerShell Remoting. At the end of the day, though, turning on Remoting is just the Right Thing To Do, so why not make life easy and turn it all on at once? + +## Summary + +OLD WMI: Uses DCOM/RPC. Uses old-style native code providers and a repository. Available only on Windows. More or less deprecated, meaning it's not a focus area for further improvement or development. You're connected to "live" objects and can play with them. +NEW WMI: Uses WS-MAN (via WinRM service). Supports old-style native code providers and a repository, as well as new-style MI providers. Available only on Windows. The way forward. If something can talk to "NEW WMI" it should be able to talk to OMI, also. You're not connected to "live" objects, and have an essentially stateless relationship with the remote machine. +OMI: Uses WS-MAN (OMI code includes the protocol stack). Supports only new-style MI providers. Available on any implementing platform. Also the way forward. If something can talk to OMI, it should be able to talk to "NEW WMI" also. +CIM: Defines the standard. Created by DMTF. Early versions were implemented as "OLD WMI" by Microsoft, newest version implemented both in "NEW WMI" and OMI by Microsoft and others. +And if you prefer summaries by layer: +SERVER (or, the bit that serves up the info, which could technically be a client device like a laptop) uses PROVIDERS (either old-style WMI, new-style MI, or both) to generate management information. If the SERVER is a non-Windows device, it would run OMI and only support new-style MI providers. +CLIENT (the machine doing the querying) uses either old-style WMI (DCOM/RPC) or new-style (WS-MAN) to send requests to SERVER and to receive the results. CLIENT doesn't care what API was used to write the providers running on the server, because the server makes the information all look the same. If CLIENT queries a SERVER that only supports WS-MAN, then CLIENT must obviously use WS-MAN. +Hope that helps. + + [1]: http://donjones.com/2015/04/14/omi-cim-wmi/ diff --git a/content/articles/2015/04/microsoft-publishes-dsc-resource-kit-in-github/index.md b/content/articles/2015/04/microsoft-publishes-dsc-resource-kit-in-github/index.md new file mode 100644 index 000000000..4ee26d037 --- /dev/null +++ b/content/articles/2015/04/microsoft-publishes-dsc-resource-kit-in-github/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2015-04-16-microsoft-publishes-dsc-resource-kit-in-github/ +title: Microsoft Publishes DSC Resource Kit in GitHub +authors: + - Don Jones +date: "2015-04-16T11:47:50+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/04/microsoft-publishes-dsc-resource-kit-in-github/ +--- + +When Microsoft first released the DSC Resource Kit (in [Wave 10][1] as of this writing), they opened the door to community contributions. Our own [PowerShell.org GitHub repo][2] consists partly of DSC resource that used Microsoft's code as a baseline, and then corrected problems or expanded capabilities. +What we never had was a way for Microsoft to circle back, pick up those enhancements, and include them as part of an official future Resource Kit Wave. Now, we do. + + + +Microsoft has moved the entire DSC Resource Kit to an [open GitHub repo][3]. They've also included some [basic guidelines for potential contributors][4]. This now allows anyone to jump in, make corrections, or potentially even expand capabilities, knowing that their work has a chance of being reviewed and included in the "official" repository. That means we have a shot at having One True Version of these modules, which anyone can find and use, rather than scattered versions that inherited from the originals, but were harder for the general public to find. +As of this writing, there are over 45 DSC resources you can download, check out, modify, and submit changes for - as well as using them in your environment. Thank you, Microsoft! + + [1]: https://gallery.technet.microsoft.com/scriptcenter/DSC-Resource-Kit-All-c449312d + [2]: https://github.com/powershellorg + [3]: https://github.com/PowerShell/DscResources + [4]: https://github.com/PowerShell/DscResources/blob/master/CONTRIBUTING.md diff --git a/content/articles/2015/04/nj-powershell-users-group-meet-presenter-jeffrey-hicks-microsoft-mvp/index.md b/content/articles/2015/04/nj-powershell-users-group-meet-presenter-jeffrey-hicks-microsoft-mvp/index.md new file mode 100644 index 000000000..f176ba262 --- /dev/null +++ b/content/articles/2015/04/nj-powershell-users-group-meet-presenter-jeffrey-hicks-microsoft-mvp/index.md @@ -0,0 +1,71 @@ +--- +url: /articles/2015-04-06-nj-powershell-users-group-meet-presenter-jeffrey-hicks-microsoft-mvp/ +title: "NJ PowerShell Users Group Meet: Presenter Jeffrey Hicks – Microsoft MVP" +authors: + - NJPowerShell +date: "2015-04-06T16:54:14+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/04/nj-powershell-users-group-meet-presenter-jeffrey-hicks-microsoft-mvp/ +--- + +The NJ PowerShell User Group is having a meetup on Tuesday, April 28th from 6:00 - 8:00 PM.  The first half hour will be for socializing, pizza, and playing pool at our coffee bar.  + + +Agenda: + + + +                6:00 – 6:30: Pizza and socializing + + +                6:30 – 7:30: Presentation + + +                7:30 - 8:00: Q & A + + + +Please note that the Webex meeting will start at 6:00 PM, but the actual presentation won't start until 6:30. In-Person a ttendees must register, print out their EventBrite ticket, and present it at the door.  Walk-ins will not be permitted. + + + +![Eventbrite](http://njpowershell.org/wp-content/uploads/2015/04/EventBritelogo.png) [Eventbrite Registration Page](http://www.eventbrite.com/e/nj-powershell-users-group-meet-april-28th-presenter-jeffrey-hicks-tickets-16466847785)  +A Webex meeting link will be emailed to Eventbrite on-line registrants prior to the event. + + + + +**Presenter**: Jeffrey Hicks (in-person) + + +**Presentation: ** +On the Job: Putting PowerShell Scheduled Jobs to Work for You. So you know how to use PowerShell and how it can make your job easier to do. But why should you have to be sitting at your desk to run a PowerShell script or command? Why not combine the simplicity of a PowerShell script with the ease of use of a scheduled task! PowerShell MVP and author Jeff Hicks will guide you through the process of setting up and using PowerShell scheduled jobs, including a few potential gotchas. By the end of the session you should know enough to be able to schedule the boring right out of your job. + + + +**Bio: ** +Jeffery Hicks is an IT veteran with over 25 years of experience, much of it spent as an IT infrastructure consultant specializing in Microsoft server technologies with an emphasis in automation and efficiency. He is a multi-year recipient of the Microsoft MVP Award in Windows PowerShell. He works today as an independent author, trainer and consultant. Jeff has written for numerous online sites and print publications, is a contributing editor at Petri.com ([http://www.petri.com](http://www.petri.com)), and a frequent speaker at technology conferences and user groups. His latest book is[ PowerShell In Depth: An Administrator's Guide 2nd Ed](http://www.amazon.com/PowerShell-Depth-Don-Jones/dp/1617292184/). + + + + + +Twitter: +[@JeffHicks](https://twitter.com/jeffhicks) + + +[![Jeff Hicks](http://njpowershell.org/wp-content/uploads/2015/04/JeffHicks-150x150.jpeg)](https://twitter.com/jeffhicks)   [![PowerShell In Depth 2nd Ed.](http://njpowershell.org/wp-content/uploads/2015/04/PowerShellInAction2nd-150x150.jpg)](http://www.amazon.com/PowerShell-Depth-Don-Jones/dp/1617292184/) + + + Coffee Bar, Pool Table, and XBox + + +![Coffee Bar](https://cdn.evbuc.com/eventlogos/111855199/eventbritecoffeebar.png) + + + Conference Room + + +![Conference Room](https://cdn.evbuc.com/eventlogos/111855199/eventbriteconferenceroom.png) diff --git a/content/articles/2015/04/observations-from-our-powershell-summit-verified-effective-exam/index.md b/content/articles/2015/04/observations-from-our-powershell-summit-verified-effective-exam/index.md new file mode 100644 index 000000000..2d55b8018 --- /dev/null +++ b/content/articles/2015/04/observations-from-our-powershell-summit-verified-effective-exam/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2015-04-23-observations-from-our-powershell-summit-verified-effective-exam/ +title: Observations from our PowerShell Summit VERIFIED EFFECTIVE Exam +authors: + - Don Jones +date: "2015-04-23T14:24:29+00:00" +categories: + - PowerShell Summit +aliases: + - /2015/04/observations-from-our-powershell-summit-verified-effective-exam/ +--- + +We offered our first in-person, proctored VERIFIED EFFECTIVE exam at PowerShell Summit in April 2015, located in Charlotte, NC. While the exam is not intended as a diagnostic or learning tool, there are definitely some observations I can share from glancing through some of the submissions so far. +First, the exam isn't easy. 31 people signed up to take it (our room capacity; more would have if we'd had space), and only 12 turned in submissions. Of those, fewer than 5 are probably going to pass by the end of the grading process. + + * If you don't know what **[CmdletBinding(SupportsShouldProcess=$True)]** does, then you shouldn't be using it. It should never be used in a cmdlet that merely queries information and doesn't make changes to the system. It isn't boilerplate that should be included in every function, and it has nothing to do with the PROCESS script block. + * If you don't understand **ValueFromPipeline** and **ValueFromPipelineByPropertyName, **then you need to learn. + * If you're using aliases like **%** in a function, you're not creating a readable, maintainable script. Avoid aliases, especially ones that don't immediately communicate the task being completed. **Dir** might be acceptable; **?** not so much. + * If you're not neatly indenting your constructs, your script is not going to be readable. + * Creating a parameter that accepts a limited set of values (say, "foo" and "bar") doesn't create internal variables with those names (e.g., $foo and $bar). Don't confuse parameter names with their values. + +In the end analysis, there's a difference between being able to hack out a working script, and being able to create a professional, maintainable tool that complies with PowerShell's native practices and patterns. If you're to the point where you're able to hack out a working script, take a next step by reading something like _The Community Book of PowerShell Practices_ (available for free), or solidify your skills and understanding through a book like (gratuitous plug) _Learn PowerShell Toolmaking in a Month of Lunches. _ +Most of the non-passing submissions we're seeing have simple mistakes - for example, including a static computer name in a verbose message, rather than inserting the name of the currently-processing computer. Or creating a CIMSession, but then not using it (forcing a later command to spin up a second session). In other instances, we saw poor practices (like globally and unnecessarily setting $ErrorActionPreference, suggesting a lack of understanding about the more specific -ErrorAction). There was also a few instances where a lack of attention to details - or perhaps simply running out of time - was a problem, such as failing to define a needed parameter, or defining a ValidateSet() with incorrect values. +We're going to be removing one of our VERIFIED EFFECTIVE exam scenarios from production use, and turning that into an "example scenario" that you can use to self-assess your toolmaking skills. Look for that in the next few weeks. We'll continue offering in-person proctored exams at PowerShell Summit, with Europe 2015 in Stockholm being our next go. In 2016, look for us to expand the program with more capacity (so more people can sit the exam), and for us to eventually offer a DSC-related exam. +In the meantime, anyone with a VERIFIED EFFECTIVE certificate has indeed completed a challenging, practical exam that shows they are definitely _effective_ toolmakers, capable of building professional-grade tools that are consistent with PowerShell's native use patterns. Thus far, fewer than 20 certificates have been earned. diff --git a/content/articles/2015/04/omaha-psug-march-meeting-slides-video-now-available/index.md b/content/articles/2015/04/omaha-psug-march-meeting-slides-video-now-available/index.md new file mode 100644 index 000000000..6996ff855 --- /dev/null +++ b/content/articles/2015/04/omaha-psug-march-meeting-slides-video-now-available/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2015-04-02-omaha-psug-march-meeting-slides-video-now-available/ +title: Omaha PSUG March Meeting Slides & Video Now Available +authors: + - Jacob Benson +date: "2015-04-02T13:08:21+00:00" +aliases: + - /2015/04/omaha-psug-march-meeting-slides-video-now-available/ +--- + +Trond Hindenes presented on Real Life SMA this month.  Boe Prox was able to get this presentation recorded and it is now on YouTube. +The slides Trond used in his presentation are [here][1].  The YouTube video is [here][2]. + + [1]: https://onedrive.live.com/redir?resid=4bfe4a6675a48c91%21120 + [2]: https://youtu.be/eLKZ0GWAO10 diff --git a/content/articles/2015/04/painlessly-get-data-from-powershell-to-excel/index.md b/content/articles/2015/04/painlessly-get-data-from-powershell-to-excel/index.md new file mode 100644 index 000000000..b1ac98fba --- /dev/null +++ b/content/articles/2015/04/painlessly-get-data-from-powershell-to-excel/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2015-04-21-painlessly-get-data-from-powershell-to-excel/ +title: Painlessly Get Data from PowerShell to Excel +authors: + - Don Jones +date: "2015-04-21T12:08:54+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/04/painlessly-get-data-from-powershell-to-excel/ +--- + +Doug Finke has [written an awesome article][1] - complete with a module! - to help get data into Excel spreadsheets. + + [1]: http://www.dougfinke.com/blog/index.php/2015/04/20/painlessly-get-data-from-powershell-to-excel/ diff --git a/content/articles/2015/04/powershell-org-is-now-on-imgur/index.md b/content/articles/2015/04/powershell-org-is-now-on-imgur/index.md new file mode 100644 index 000000000..87d98c895 --- /dev/null +++ b/content/articles/2015/04/powershell-org-is-now-on-imgur/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2015-04-30-powershell-org-is-now-on-imgur/ +title: PowerShell.org Is Now On Imgur! +authors: + - Will Anderson +date: "2015-04-30T17:00:11+00:00" +aliases: + - /2015/04/powershell-org-is-now-on-imgur/ +--- + +Hey there everyone!  I'm pleased to announce that PowerShell.org has a new feed on Imgur! + + +During the PowerShell Summit, I began the hunt for a social photo sharing site that had a set of features that would meet the needs of PowerShell.org.  Our list of criteria was rigorous.  We required a site that was capable of providing embed code for posts.  We needed a site that would be easy to upload images and add them to albums for publishing.  It needed to be social media friendly.  And it needed to be free. +Mainly it needed to be free. +So I present to you, our new [PowerShell.org Imgur feed](http://powershellorg.imgur.com/)!  If you want quick access to it and don't feel like adding it to your favorites, you can just hit the Imgur icon on our nifty new social media bar on the right! +We shall be endeavouring to cover more PowerShell related events in our feeds and posts in the future.  I'm still working on a list of standards for photo submissions, but in the meantime, if you happen to be at a PowerShell event and have some photos that you'd like us to share on the Imgur feed, please feel free to contact me at _**webmaster at powershell dot org**_ and we'll take a look at them! + + +> + +> [PowerShell Summit NA 2015](//imgur.com/a/UxUNW) +> diff --git a/content/articles/2015/04/powershell-summit-europe-venue-change/index.md b/content/articles/2015/04/powershell-summit-europe-venue-change/index.md new file mode 100644 index 000000000..9660160f6 --- /dev/null +++ b/content/articles/2015/04/powershell-summit-europe-venue-change/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2015-04-10-powershell-summit-europe-venue-change/ +title: PowerShell Summit Europe VENUE CHANGE +authors: + - Don Jones +date: "2015-04-10T14:43:52+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2015/04/powershell-summit-europe-venue-change/ +--- + +We're announcing a venue change for PowerShell Summit Europe 2015. Although we're very appreciative to Microsoft for offering the use of their office in Kista, our registration velocity warrants a larger venue, and gives us the opportunity for a more central location. +Dates are not changed. We will be at the [Scandic Klara hotel][1], which is near to the [HTL Kungsgaten][2], both of which has sleeping room available as of this writing. Both are as close as we can get to Stockholm Central station, and both are near a tram line. +We are recommending that attendees **reserve sleeping rooms immediately. **A government congress at the waterfront convention center has made room inventory tight. Our [registration website][3] has been updated with the additional attendee capacity. + + [1]: http://www.scandichotels.se/Hotels/Sverige/Stockholm/Scandic-Klara/#.VSfgrlwtaq4 + [2]: http://htlhotels.com/hotels/kungsgatan/ + [3]: https://eventmgr.azurewebsites.net/event/home/PSEU15 diff --git a/content/articles/2015/04/powershell-summit-north-america-launches/index.md b/content/articles/2015/04/powershell-summit-north-america-launches/index.md new file mode 100644 index 000000000..ecfae31c9 --- /dev/null +++ b/content/articles/2015/04/powershell-summit-north-america-launches/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2015-04-20-powershell-summit-north-america-launches/ +title: PowerShell Summit – North America Launches! +authors: + - Will Anderson +date: "2015-04-20T22:49:06+00:00" +categories: + - PowerShell Summit +aliases: + - /2015/04/powershell-summit-north-america-launches/ +--- + +The PowerShell community descended on Charlotte, North Carolina for the third annual PowerShell Summit - North America this week!  Enthusiasts, MVPs, community leaders, and the PowerShell product team came to discuss the latest and greatest ongoings in the PowerShell world. +The festivities kicked off in downtown Charlotte at the Ri Ra Irish Pub this last Sunday.  New network connections were made and old friends reunited over fine brews in the Victorian-style public house before getting a good nights' rest before the three day summit. + +Monday started off with an exciting lineup of speakers to discuss some of the hottest community topics including Desired State Configuration, automated code testing with Pester, and working with Azure.  Some great announcements were made by the product team as well, including: + + * The release of Windows Management Framework 5.0 on April 30th.  This release will be available downlevel for Windows 7 and Server 2008. + * PowerShell Package Manager announced as the official name of OneGet. + * The release of [PowerShell Tools for Visual Studio](https://visualstudiogallery.msdn.microsoft.com/c9eb3ba8-0c59-4944-9a62-6eee37294597), available now for download. + + +A big congratulations to PowerShell MVP and PowerShell.org board member Dave Wyatt, who's works on Pester will be making it's way into the next build of Windows Server! +Take a look at our latest videos from the summit on [YouTube](https://www.youtube.com/user/powershellorg/videos), and follow the excitement at [#PowerShell on Twitter](https://twitter.com/search?q=%23powershell&src=typd)! diff --git a/content/articles/2015/04/powershelltos-next-meeting-may-6th-2015/index.md b/content/articles/2015/04/powershelltos-next-meeting-may-6th-2015/index.md new file mode 100644 index 000000000..8d3e2db63 --- /dev/null +++ b/content/articles/2015/04/powershelltos-next-meeting-may-6th-2015/index.md @@ -0,0 +1,29 @@ +--- +url: /articles/2015-04-27-powershelltos-next-meeting-may-6th-2015/ +title: "PowerShellTO's Next Meeting – May 6th, 2015" +authors: + - Will Anderson +date: "2015-04-27T23:00:51+00:00" +aliases: + - /2015/04/powershelltos-next-meeting-may-6th-2015/ +--- + +Join us on Wednesday, May 6th for our second Toronto PowerShell User’s Group meeting.  This time you get to take the wheel!  Send us some of your PowerShell related challenges and we’ll pick the top ones to work out in a group together!  We’ll also be talking about some of the things learned at PowerShell Summit – North America, and more! + + + +[Hit us up and let us know ](http://powershellto.ca/contact/)what PowerShell challenges you’d like to table at the next PowerShellTO meeting! +For this meeting, we'll be located at the Microsoft Technology Center in Mississauga at 1950 Meadowvale Blvd - Mississauga, Ontario, L5N8L9.  Space is limited, so be sure to claim your EventBrite ticket below! +A note on parking: When you arrive at the MTC, go around to the side facing Meadowvale Blvd.  There is a visitor entrance and parking there.  See you soon! + + + + + + + + [Online Ticketing](http://www.eventbrite.ca/r/etckt) + for +[PowerShellTO - May 2015 Meeting](https://www.eventbrite.ca/e/powershellto-may-2015-meeting-tickets-16415587464?ref=etckt) +powered by + [Eventbrite](http://www.eventbrite.ca?ref=etckt) diff --git a/content/articles/2015/04/why-is-remoting-enabled-by-default-on-windows-server/index.md b/content/articles/2015/04/why-is-remoting-enabled-by-default-on-windows-server/index.md new file mode 100644 index 000000000..ea0449e1c --- /dev/null +++ b/content/articles/2015/04/why-is-remoting-enabled-by-default-on-windows-server/index.md @@ -0,0 +1,33 @@ +--- +url: /articles/2015-04-28-why-is-remoting-enabled-by-default-on-windows-server/ +title: Why is Remoting Enabled by Default on Windows Server? +authors: + - Don Jones +date: "2015-04-28T23:16:44+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/04/why-is-remoting-enabled-by-default-on-windows-server/ +--- + +There was a brief and lively discussion on Twitter recently stemming from someone asking for advice on how to convince management to turn on Remoting. +"Fire Management, if they have to ask" was apparently not an option, although it should have been. I mean, at this stage, you either know the value of PowerShell and its Remoting technology, or you're being willfully ignorant. +But that wasn't where the discussion got lively. + + + +The real discussion was about why Remoting was turned on by default in the first place, on newer versions of Windows Server (since Win2012). After all, Remote Desktop Protocol (RDP) is turned off by default. Most Linux distributions, it was pointed out, turn off sshd by default. So why is Remoting turned on? Isn't the safest bet to just disable everything, and let people turn on what they need? +I think Remoting (and by Remoting, I mean the Windows Remote Management, or WinRM service) being turned on by default gives us a valuable look at Microsoft's psyche these days. +First, keep in mind that _you can turn it off. _You can even do that via a Group Policy for domain computers, and you could certainly do so in a server master image if you wanted to. So it's pretty easy to have an "off by default" setup in your environment if you want. But wouldn't it therefore be just as easy for Microsoft to leave it off, and let you "default it to on" by whatever means you prefer, if that's what you want? Sure. But again, I think this is about Microsoft's psyche, these days. +Understand that what follows is conjecture, but it's conjecture based on more than 20 years of watching this company, and on a pretty good working relationship with many of the company's technology leaders. This also isn't intended to make you feel that "on by default" is the right answer for you, nor is it intended to convince you that "on by default" is the right answer for _anyone. _This is an attempt to speculate about the _reasons_ behind "on by default," whether the decision itself was correct or not. +The short reason is, "Nano Server." +If you just nodded and went, "yeah, that would explain their thinking," then you can skip the rest of this. Keep in mind that Remoting isn't turned on for _client_ computers by default, and that just pretty much reinforces the Nano Server reason. +The very long answer is that Microsoft, these days, is building _first for themselves. _Specifically, for Azure. They believe - and again, you're free to disagree and I'm not pitching their belief as gospel - that enterprises should manage their datacenter in much the same way Microsoft manages Azure. Microsoft's argument for this revolves around efficiency, primarily, and specifically efficiency at scale. Reliability factors into the argument, too. So Microsoft's decisions have to be examined in light of what works in "the cloud," because that's how they expect you're going to be managing your own servers in the future. +Microsoft has been on a long path, since 2008, of breaking down the monolithic Windows Server product into a discrete set of chunks that can be turned on or off at will. We say that first with the big refactoring of the product into Roles & Features, which could be installed or uninstalled pretty easily. We also saw them ripping out the GUI bits to create the first Server Core. Over the next 5 years, the company refactored Server more and more, through a series of three releases culminating in Windows Server 2012 R2. In that time, Server Core became more and more functional, as more and more of Windows Server was refactored into standalone little bits, and separated from the "GUI stuff." +Microsoft's direction here has never been a big secret: they want to ship a fully-functioning version of Windows Server that doesn't have any... er... windows. They want it, in other words, to be a _server, _not a client that just happens to have a lot of RAM installed. +Once you kind of buy into the "no GUI on the server" idea, even if just for the sake of discussion, it's not a far step to "no logging into the server at all, in any way." Headless servers, in other words, where the host hardware might not even contain video output hardware. After all, if there's no GUI, then you can be definition do everything via text, which is very easy to transmit over a network. Ask Unix, which has been doing it for decades over Telnet and SSH. If you can do everything remotely, why even support a local login? +Well, that's Nano Server, an installation option in the version of Windows Server that is expected to ship in 2016. +_And if you can't log on locally at all, then you need some way of connecting to the server to initially configure it. _Which is why Remoting is enabled by default, even though little else is. You use your existing OSD infrastructure to deploy new Nano servers, and then you Remote into them to set them up as needed. Unlike most Linux distributions, which _allow_ local login, Nano isn't even going to provide a means to log into "the console." At least, as far as we currently know, it won't; Microsoft's only made a few statements about it so far. +Windows Server's architect, Jeffrey Snover, put it fairly concisely in the Twitter discussion: "We believe in a world of headless remote mgmt as the norm." _Headless_ meaning _no way to log in locally, no such thing. _Ergo, you need some way to log in remotely, and Remoting is it, and it therefore is enabled by default. +Now, in defense of this "on by default" approach, I'll point out that unlike nearly every preceding remote management protocol introduced by Microsoft, Remoting is incredibly controllable. It uses WS-Management (WS-MAN), which is HTTP-based. It runs on just one incoming port, which is easy to lock down through physical, soft, and virtual firewalls. You can certainly have an environment that's pre-engineered to protect that port. But if you buy into Microsoft's "headless" approach - and whether you do or not, Microsoft certainly buys in - then they had to enable _something _so you could configure the server, at least initially. +So whether you agree with this direction or not is entirely up to you - and you're welcome to add your polite, professional comments to this post. I wanted to write this in an attempt to _explain, _just justify, _why_ I think Microsoft took this approach, and what I think it means for the long term of Windows Server itself. I think simply knowing that direction can inform a lot of your base infrastructure decisions and planning going forward, whether you buy into the approach or not. diff --git a/content/articles/2015/05/_index.md b/content/articles/2015/05/_index.md new file mode 100644 index 000000000..507166ffe --- /dev/null +++ b/content/articles/2015/05/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from May 2015" +description: "PowerShell.org Articles published in May 2015." +--- diff --git a/content/articles/2015/05/creating-a-small-footprint-base-image-part-1/index.md b/content/articles/2015/05/creating-a-small-footprint-base-image-part-1/index.md new file mode 100644 index 000000000..aeffdf8d5 --- /dev/null +++ b/content/articles/2015/05/creating-a-small-footprint-base-image-part-1/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2015-05-19-creating-a-small-footprint-base-image-part-1/ +title: Creating a small footprint, base image Part 1 +authors: + - David Jones +date: "2015-05-19T19:01:13+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/05/creating-a-small-footprint-base-image-part-1/ +--- + +I'm starting a new blog series on using [PowerShell to create small footprint VHDX][1] that are fully patched. + + [1]: https://bladefirelight.wordpress.com/2015/05/19/creating-a-small-footprint-base-image-part-1-vhdx-from-iso/ diff --git a/content/articles/2015/05/creating-a-small-footprint-base-image-part-2/index.md b/content/articles/2015/05/creating-a-small-footprint-base-image-part-2/index.md new file mode 100644 index 000000000..f7e6cc4b9 --- /dev/null +++ b/content/articles/2015/05/creating-a-small-footprint-base-image-part-2/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2015-05-20-creating-a-small-footprint-base-image-part-2/ +title: Creating a small footprint, base image Part 2 +authors: + - David Jones +date: "2015-05-21T00:56:25+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/05/creating-a-small-footprint-base-image-part-2/ +--- + +I posted Part 2 of using PowerShell to create small footprint VHDX that are fully patched. +[Patching and Cleanup via PowerShell][1] + + [1]: https://bladefirelight.wordpress.com/2015/05/20/creating-a-small-footprint-base-image-part-2-patching-and-cleanup-via-powershell/ diff --git a/content/articles/2015/05/dealing-with-the-click-next-admin/index.md b/content/articles/2015/05/dealing-with-the-click-next-admin/index.md new file mode 100644 index 000000000..d5479adaa --- /dev/null +++ b/content/articles/2015/05/dealing-with-the-click-next-admin/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2015-05-04-dealing-with-the-click-next-admin/ +title: Dealing with the Click-Next-Admin +authors: + - pscookiemonster +date: "2015-05-04T17:24:17+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/05/dealing-with-the-click-next-admin/ +--- + +I had a good deal of yard work to do this weekend; I see yard work in a similar way that a click-next-admin sees Windows PowerShell. I want no part in it. So I wrote a quick bit on [how we can deal with the click-next-admin][1]. +Jeffrey Snover recently gave a TechDays Online session where he candidly asked us to "make today the last day you hire a click next admin." +![Reward the right people](http://ramblingcookiemonster.github.io/images/click-next/lastday.png) +This is a fantastic goal, but how do we get there? There's no set answer, but I listed out some of the major challenges I see. +Would love to hear your feedback and ideas - [flip through the post][1] and stop back here to discuss! +If you'd like to have some fun, share your click-next-admin stories on twitter with the [#ClickNextAdmin][2] tag. +![Too Busy](http://ramblingcookiemonster.github.io/images/click-next/toobusy.png) +Aside: Thank you for the invite to contribute here, it's an honor. +Cheers! + + [1]: http://ramblingcookiemonster.github.io/Dealing-With-The-Click-Next-Admin/ + [2]: https://twitter.com/search?q=%23clicknextadmin&src=typd diff --git a/content/articles/2015/05/mississippi-powershell-user-group-virtual-meeting-may-12th-2015/index.md b/content/articles/2015/05/mississippi-powershell-user-group-virtual-meeting-may-12th-2015/index.md new file mode 100644 index 000000000..a553613f5 --- /dev/null +++ b/content/articles/2015/05/mississippi-powershell-user-group-virtual-meeting-may-12th-2015/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2015-05-11-mississippi-powershell-user-group-virtual-meeting-may-12th-2015/ +title: Mississippi PowerShell User Group Virtual Meeting – May 12th 2015 +authors: + - Mike F Robbins +date: "2015-05-11T14:30:40+00:00" +aliases: + - /2015/05/mississippi-powershell-user-group-virtual-meeting-may-12th-2015/ +--- + +Join us virtually on Tuesday, May 12th at 8:30pm Central Time when PowerShell MVP Kirk Munro will present _**"A peek inside the Poshoholic’s toolbelt"**_. +It’s easy to get excited about all of the new technologies that are being talked about these days.  PowerShell 5.  Windows 10.  Nano server.  .NET Core.  But none of these technologies have been released yet, and even when they are released, it will be some time before we can fully adopt them in our organizations.  That’s why I like to arm my PowerShell toolbelt with impactful modules that work with current releases, so that people like you and I can work with innovative solutions for today while we keep learning about what will be available tomorrow.  This session is about those modules that I use in my toolbelt every day.  HistoryPx, FormatPx, DebugPx, SnippetPx, TypePx, and others.  Highly impactful, innovative PowerShell solutions that you can use, right now. +**About Kirk +** Kirk Munro is a Technical Product Manager at Provance Technologies, where he is helping build the next generation of Provance’s flagship IT Asset Management product, along with several smaller products such as the ScsmPx PowerShell module and the Auto-Close Work Item MP.  He is also an 8-time recipient of the Microsoft Most Valued Professional (MVP) award for his involvement in the PowerShell community.  For the past 9 years, Kirk has focused almost all of his time on PowerShell and PowerShell solutions, including managing popular products such as PowerGUI, PowerWF and PowerSE.  It is through this work he became known as the world’s first self-proclaimed Poshoholic.  Outside of work these days Kirk is returning to his software developer roots, learning mobile technologies like Xamarin and Ruby on Rails, and taking courses on Coursera or edX whenever he can make the time to do so. +Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this virtual meeting. [Click here](http://mspsug.com/2015/05/05/mspsug-virtual-meeting-a-peek-inside-the-poshoholics-toolbelt-on-tuesday-may-12th-at-830pm-cst/) to be redirected to the original post of this article on the [Mississippi PowerShell User Group](http://mspsug.com/) website which contains additional information about the meeting including the system requirements to attend. +µ diff --git a/content/articles/2015/05/new-ps-module-for-working-with-f5s-ltm-rest-api/index.md b/content/articles/2015/05/new-ps-module-for-working-with-f5s-ltm-rest-api/index.md new file mode 100644 index 000000000..10f9cfdb0 --- /dev/null +++ b/content/articles/2015/05/new-ps-module-for-working-with-f5s-ltm-rest-api/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2015-05-26-new-ps-module-for-working-with-f5s-ltm-rest-api/ +title: "New PS Module for working with F5's LTM REST API" +authors: + - Joel Newton +date: "2015-05-27T04:54:03+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +aliases: + - /2015/05/new-ps-module-for-working-with-f5s-ltm-rest-api/ +--- + +If you use F5's BIG‑IP Local Traffic Manager (LTM) for load-balancing, then you may find the new PS module I've written helpful. The module uses the REST API in ver. 11.6 of the LTM to query and manipulate an F5 LTM device. You can add and remove members from a pool, enable and disable them, and find out what pools a member is in, among other things. +I've made the module files available [here][1]. I welcome all comments. +A few notes: Since the module uses the Invoke-WebRequest cmdlet, PowerShell 3 or higher is required. Also, since some F5's utilize self-signed certificates, and Invoke-WebRequest is unhappy if part of the certificate chain isn't trusted, I've included a dependency on Jaykul's PS module [TunableSSLValidator](https://github.com/Jaykul/Tunable-SSL-Validator), which allows for temporarily ignoring certificate errors. If you're using a trusted certificate chain, then you don't need the TunableSSLValidator module and can remove the -insecure flags from the Invoke-WebRequest calls. +Cheers, +Joel + + [1]: https://github.com/joel74/POSH-LTM-Rest diff --git a/content/articles/2015/05/nyc-user-group-restart/index.md b/content/articles/2015/05/nyc-user-group-restart/index.md new file mode 100644 index 000000000..45bf722ac --- /dev/null +++ b/content/articles/2015/05/nyc-user-group-restart/index.md @@ -0,0 +1,54 @@ +--- +url: /articles/2015-05-07-nyc-user-group-restart/ +title: NYC User Group Restart! +authors: + - Sunny Chakraborty +date: "2015-05-07T18:52:22+00:00" +aliases: + - /2015/05/nyc-user-group-restart/ +--- + +After a long hiatus, NYC Powershell User-group is back. +Tome and Sunny will be presenting 2 sessions +This is the inaugural series of Tome's 1-year residency on Powershell Concepts (Beginner to Advanced) +**Tome Tanasovski:** +Concept of Objects +- Object Characterization +- Everything is an object +- Sorting, Grouping, Counting +- Where-Object and ForEach +Language Fundamentals +- Operators, Variables. +- Arrays and Hashtables +- Loop structures +- Conditional Structures +- Useful rules to know. +Tome is an executive for a market-leading global financial services firm in New York City where he focuses on automation, private cloud, and distributed computing. He is the founder and leader of the New York City PowerShell User group, a blogger, and speaks regularly at conferences and user groups. In 2011 he became a cofounder of the NYC Techstravaganza, coauthored the Windows PowerShell Bible, and received the title of Honorary Scripting Guy from the Hey Scripting Guy! blog. Tome has also received the MVP award from Microsoft for the last five years in Windows PowerShell. +**Blog**: +**Twitter**: +**Sunny Chakraborty:** +- Large scale Application inventory using Custom MOF Files. +- Remote MSI Execution Tricks +- Invoke-Command AST +- Powershell Anonymous Functions. +Sunny is a Sr. Engineer with a global financial services firm in Philadelphia, where he focusses on Messaging, Microsoft Applications and Automation using Powershell. +**GitHub**: +**Twitter**: +Pizza is being sponsored by SAPIEN, Makers of PowerShell Studio and Primal Script +6pm - 6:30 - Pizza and catching up +6:30 - 7:15 - Tome. +7:15 - 7:45 - Sunny. +8ish - ?? - Drinks at Beer Authority (next to Port Authority) +You must RSVP via Event Brite in order to attend: +[![EventBriteLogo](https://powershell.org/wp-content/uploads/2015/05/EventBriteLogo.bmp)][1] +**Meeting Date:** +Monday, May 11, 2015 - 18:00 - 20:00 +**Location** +Microsoft - Times Square - 6th Floor +11 Times Square +New York, NY 10018 +United States +See map: [Google Maps][2] + + [1]: https://www.eventbrite.com/e/nyc-powershell-ug-tome-tanasovski-and-sunny-chakraborty-powershell-language-fundamentals-powershell-tickets-4054585374 + [2]: http://maps.google.com/?q=40.750879+-73.985792+%2811+Times+Square%2C+New+York%2C+NY%2C+10018%2C+us%29 diff --git a/content/articles/2015/05/philadelphia-powershell-user-group-meeting-june-4th-2015/index.md b/content/articles/2015/05/philadelphia-powershell-user-group-meeting-june-4th-2015/index.md new file mode 100644 index 000000000..2533fca9d --- /dev/null +++ b/content/articles/2015/05/philadelphia-powershell-user-group-meeting-june-4th-2015/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2015-05-18-philadelphia-powershell-user-group-meeting-june-4th-2015/ +title: Philadelphia PowerShell User Group Meeting – June 4th 2015 +authors: + - John Mello +date: "2015-05-19T01:14:53+00:00" +aliases: + - /2015/05/philadelphia-powershell-user-group-meeting-june-4th-2015/ +--- + +Join us on Thursday, June 4th when [Dave Wyatt][1], will present **The basics of encrypting and decrypting data, including symmetric and public key algorithms, key management / sharing, and digital certificates.** This talk will focus on doing so in the .NET Framework and PowerShell. + +#### About Dave + +[Dave Wyatt][1] has been in the IT business since 1999 and is currently an Application Operations Engineer at [DevOpsGuys.][2] In addition Dave is a Microsoft MVP (PowerShell) and a member of PowerShell.org's Board of Directors. +Please [ +register +][3] if you plan to attend in person or online. The meeting URL to join us remotely will be included in your Eventbrite registration confirmation. + + [1]: https://twitter.com/MSH_Dave + [2]: http://www.devopsguys.com/team/ + [3]: https://www.eventbrite.com/e/phillyposh-june-4th-2015-tickets-17038157588 diff --git a/content/articles/2015/05/setting-up-the-powershell-org-dsc-tools-from-github/index.md b/content/articles/2015/05/setting-up-the-powershell-org-dsc-tools-from-github/index.md new file mode 100644 index 000000000..025770ff4 --- /dev/null +++ b/content/articles/2015/05/setting-up-the-powershell-org-dsc-tools-from-github/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2015-05-05-setting-up-the-powershell-org-dsc-tools-from-github/ +title: Setting up the PowerShell.org DSC tools from Github +authors: + - David Jones +date: "2015-05-06T04:27:34+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/05/setting-up-the-powershell-org-dsc-tools-from-github/ +--- + +I have created a [short blog series][1] about how to setup the DSC tooling from the [PowerShell.org DSC repository][2]. With the mindset of contributing changes. + + + 1. [Test-HomeLab -InputObject ‘The Plan’][1] + 2. [Get-Posh-Git | Test-Lab][3] + 3. [Get-DSCFramework | Test-Lab][4] + 4. [Invoke-DscBuild | Test-Lab][5] + 5. [Test-Lab | Update-GitHub][6] + +-David Jones + + + [1]: https://bladefirelight.wordpress.com/2015/04/27/test-homelab-inputobject-the-plan/ + [2]: https://github.com/PowerShellOrg/DSC + [3]: https://bladefirelight.wordpress.com/2015/04/30/get-posh-git-test-lab/ + [4]: https://bladefirelight.wordpress.com/2015/05/02/get-dscframework-test-lab/ + [5]: https://bladefirelight.wordpress.com/2015/05/03/invoke-dscbuild-test-lab-2/ + [6]: https://bladefirelight.wordpress.com/2015/05/06/test-lab-update-github/ diff --git a/content/articles/2015/05/source-control-survey-results/index.md b/content/articles/2015/05/source-control-survey-results/index.md new file mode 100644 index 000000000..d171b0284 --- /dev/null +++ b/content/articles/2015/05/source-control-survey-results/index.md @@ -0,0 +1,28 @@ +--- +url: /articles/2015-05-18-source-control-survey-results/ +title: "Survey Results: Source Control for the IT Professional" +authors: + - pscookiemonster +date: "2015-05-18T13:42:42+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/05/source-control-survey-results/ +--- + +First off - thank you to everyone who participated in the version control survey! +We've had a fun few weeks - Somehow the [PowerShell Summit][1], Build, and Ignite were scheduled back-to-back-to-back. Among a host of other announcements and tidbits, we found that Microsoft has open sourced the DSC resources on GitHub, that Pester will be included in Windows, and saw a cool demonstration from Steven Murawski on [using Test Kitchen to test DSC resources][2]. +These and other solutions and technologies are starting to assume you know how to use source control, and many require having a source control solution in place - how do you automate testing and deployment on a commit, if you have nothing to commit to? +Source control has long been an important component of IT, but it seems IT professionals, particularly those in Microsoft environments, aren't consistently using it. +You might expect a gap between IT professionals and developers, but less than 50% of IT pro respondents used source control as a team. +![](http://ramblingcookiemonster.github.io/images/source-control/UseByDevVsITPro.png) +Breaking down the IT professional population by environment, we see that Microsoft environments are even further behind. Many PowerShell aficionados work on teams that aren't using version control. +![](http://ramblingcookiemonster.github.io/images/source-control/UseByEnvironment.png) +Long story short? IT professionals, management, and vendors have work to do; these new tools and ideas that rely on source control are great, but we need to work on finding a horse for the cart. The rest of [my rambling analysis can be found here][3]. +If you want to get up and running quickly, consider [using GitHub for your PowerShell projects][4]. You can start with the easy-to-use GUI client, and drop into the command line when you want to get your hands dirty. It's a great way to start learning about source control, and to get involved in the community. +Do you have any suggestions on how we can get to a place where using source control is common place for IT professionals? Is this a worthwhile goal? Sound off in the comments! + + [1]: http://ramblingcookiemonster.github.io/PowerShell-Summit-Wrap/ + [2]: https://www.youtube.com/watch?v=h2P5Az3vfxk + [3]: http://ramblingcookiemonster.github.io/Source-Control-Survey + [4]: http://ramblingcookiemonster.github.io/GitHub-For-PowerShell-Projects/ diff --git a/content/articles/2015/05/survey-source-control-for-the-it-professional/index.md b/content/articles/2015/05/survey-source-control-for-the-it-professional/index.md new file mode 100644 index 000000000..0df8dd0be --- /dev/null +++ b/content/articles/2015/05/survey-source-control-for-the-it-professional/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2015-05-10-survey-source-control-for-the-it-professional/ +title: "Survey: Source Control for the IT Professional [Results in]" +authors: + - pscookiemonster +date: "2015-05-10T18:22:05+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +aliases: + - /2015/05/survey-source-control-for-the-it-professional/ +--- + +**Edit:** **[The results are in.][1]** +I was watching Don and Jeffrey's [PowerShell Unplugged session][2] from Ignite the other day, and something stood out. +At 30 minutes in, Don asked the crowd whether they were using source control. Based on the video, the crowd wasn't big on source control. +I work in IT. If I asked that same question at work, I would likely get a similar response. Why is that? Source control is incredibly important and can drive a number of other processes, yet it seems to be an afterthought for many IT professionals. +I drafted up a quick, informal [survey on source control for IT professionals][3]. If you have a moment, would love to see your responses. Stay tuned for a rough analysis and write-up on the results [Edit: [Results are in][1]]. +Cheers! + + [1]: https://powershell.org/2015/05/18/source-control-survey-results/ + [2]: http://channel9.msdn.com/Events/Ignite/2015/BRK4451 + [3]: http://bit.ly/VCSForIT diff --git a/content/articles/2015/05/whats-it-like-at-powershell-summit/index.md b/content/articles/2015/05/whats-it-like-at-powershell-summit/index.md new file mode 100644 index 000000000..e48a1ea31 --- /dev/null +++ b/content/articles/2015/05/whats-it-like-at-powershell-summit/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2015-05-16-whats-it-like-at-powershell-summit/ +title: "What's it Like at PowerShell Summit?" +authors: + - Don Jones +date: "2015-05-16T13:15:03+00:00" +categories: + - PowerShell Summit +aliases: + - /2015/05/whats-it-like-at-powershell-summit/ +--- + +Ever wonder what it's like to attend PowerShell Summit? Attendee Tommy Maynard [blogged about his entire experience][1] - including the build-up anticipation prior to the event - and it's a great set of reads. Check it out. + + [1]: http://tommymaynard.com/extra-powershell-summit-north-america-2015-0-2015/ diff --git a/content/articles/2015/06/_index.md b/content/articles/2015/06/_index.md new file mode 100644 index 000000000..1df7913a3 --- /dev/null +++ b/content/articles/2015/06/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from June 2015" +description: "PowerShell.org Articles published in June 2015." +--- diff --git a/content/articles/2015/06/automating-with-jenkins-and-powershell-on-windows/index.md b/content/articles/2015/06/automating-with-jenkins-and-powershell-on-windows/index.md new file mode 100644 index 000000000..23fee8065 --- /dev/null +++ b/content/articles/2015/06/automating-with-jenkins-and-powershell-on-windows/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2015-06-04-automating-with-jenkins-and-powershell-on-windows/ +title: Automating with Jenkins and PowerShell on Windows +authors: + - Matthew Hodgkins +date: "2015-06-05T01:31:32+00:00" +categories: + - Tips and Tricks + - Tools + - Tutorials +aliases: + - /2015/06/automating-with-jenkins-and-powershell-on-windows/ +--- + +Take a minute think about how many PowerShell scripts you have written for yourself or your team. Countless functions and modules, helping to automate this or fix that or make your teams lives easier. You spend hours coding, writing in-line help, testing, packaging your script, distributing it to your team. All that effort, and then a lot of the time the script is forgotten about! People just go back to doing things the manual way. +I put this down to being out of sight, out of mind. Users who do not use the command line regularly will quickly forget about the amazing PowerShell-ing that you did to try and make their lives easier. +Then there are are other problems, like working out the best way to give end users permissions to use your function when they aren’t administrators. Do you give them remote desktop access to a server and only provide a PowerShell session? Setup PowerShell Web Access? Configure a restricted endpoint? I thought the point of this module was to make your life easier, not make things harder! +These problems are what an open source tool called **Jenkins** can solve for you. Traditionally used by developers to automate their build process, it can be leveraged to wrap web interfaces, job tracking and scheduling around the PowerShell scripts you worked so hard on. +The below image shows what a Jenkins build looks like. In this basic example, the the build creates a text file on a remote machine by using PowerShell Remoting and the **Set-Content** CmdLet**. **The parameters for these commands can be entered into the form, and will be passed to your PowerShell script via variables. +![jenkins](https://powershell.org/wp-content/uploads/2015/06/jenkins.png) +To find out how to start leveraging Jenkins in your environment, take a look at the below blog posts: + + * [Part 1 - Installing Jenkins, Configuring Basic Security, The PowerShell Plugin, Creating Jobs](http://bit.ly/PSJenkins1) + * [Part 2 - Using SSL on the Web Interface, Configuring PowerShell Remoting, How to Pass Credentials to Jobs](http://bit.ly/PSJenkins2) diff --git a/content/articles/2015/06/creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation/index.md b/content/articles/2015/06/creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation/index.md new file mode 100644 index 000000000..0eea9c7a6 --- /dev/null +++ b/content/articles/2015/06/creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2015-06-04-creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation/ +title: Creating a small footprint, base image Part 4 | Bringing it all together with automation +authors: + - David Jones +date: "2015-06-05T04:07:16+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/06/creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation/ +--- + +In this entry I combing all I covered into a set of scripts to automate the process of creating a small footprint VHDX base image and a WIM to use a sorce that is fully patched. And I added a script to update the files on a regular basis. +Check it out and let me know what you think. +[Creating a small footprint, base image Part 4 | Bringing it all together with automation][1] + + [1]: https://bladefirelight.wordpress.com/2015/06/05/creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation/ diff --git a/content/articles/2015/06/decorating-powershell-objects/index.md b/content/articles/2015/06/decorating-powershell-objects/index.md new file mode 100644 index 000000000..58a4995cc --- /dev/null +++ b/content/articles/2015/06/decorating-powershell-objects/index.md @@ -0,0 +1,41 @@ +--- +url: /articles/2015-06-22-decorating-powershell-objects/ +title: Decorating PowerShell Objects +authors: + - pscookiemonster +date: "2015-06-22T12:44:21+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/06/decorating-powershell-objects/ +--- + +Ever wonder how PowerShell seems to know how to format objects? When you run + + +`Get-ChildItem +`or + + +`Get-WmiObject +`, you only see a few key properties, but a wealth of other information is available through commands like + + +`Select-Object +`and + + +`Get-Member +`. + +Have you ever written a PowerShell function that you nearly always pipe to + + +`Format-Table +`? Wouldn't it be nice to specify some default properties and force them into a table? + +Stop by for [a quick hit on how to decorate your PowerShell objects][1] with type names and formatting, including a re-usable tool to abstract out some of the details. + +Cheers! + + [1]: http://bit.ly/DecoratePSObjects diff --git a/content/articles/2015/06/dont-start-learning-powershell/index.md b/content/articles/2015/06/dont-start-learning-powershell/index.md new file mode 100644 index 000000000..9717e1673 --- /dev/null +++ b/content/articles/2015/06/dont-start-learning-powershell/index.md @@ -0,0 +1,31 @@ +--- +url: /articles/2015-06-07-dont-start-learning-powershell/ +title: "DON'T Start Learning PowerShell?!?!?" +authors: + - Don Jones +date: "2015-06-07T16:13:59+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/06/dont-start-learning-powershell/ +--- + +Jason Helmick and I were recently up in Redmond recording a Microsoft Virtual Academy series entitled, "Building Your Datacenter One DSC Resource at a Time." While we were there, we decided to film a tongue-in-cheek promo for the series that started with the premise that, "if you haven't already learned PowerShell, you missed the bus." Obviously, there's a bit more to the story. + + + +First, watch the video at https://www.youtube.com/watch?v=kuzFUI5Id0g … + +Second, notice that _we specifically encourage people to learn DSC. _Hmm... are there any pre-requisite technologies for learning DSC? + +Maybe, learning PowerShell ? + +We were really speaking to the folks who've been procrastinating on PowerShell for the past half-decade or more, because we _really do believe_ that DSC is a great, and often easier, way to actually learn PowerShell. Sometimes, PowerShell is tough to get into simply because you don't have a task to tackle. DSC gives you one - a practical application of PowerShell that lets you dive in from a different angle. + +_Obviously, _we think learning PowerShell is important, _**or we wouldn't have built our careers around the technology**. _But we know it can be tough to get started in - and every year that passes makes it harder to get started, as new features are added. But DSC represents a bit of a fresh start, and an opportunity to get into PowerShell on the ground floor, from a somewhat different direction. + +Some folks got really ticked when we basically said, "if you haven't started learning PowerShell by now, then it's too late," but seemed to miss the massive encouragement we gave for learning DSC.  + +And no, we don't _really_ think that it's too late to start in PowerShell if you haven't, already. I'm forever reminding people that there's this thing called a "birth rate" in the world, which means there'll always be new people coming into the industry and starting from scratch. I've spent a massive amount of effort producing materials to help those newcomers, and I certainly don't think that "entry level" just stopped in 2015! + +But... if you've been putting it off, maybe take a new look at PowerShell from the DSC perspective. It's different, I promise - and it's not at all like programming as you get started. It's a neat way to leverage, and kind of abstract, the massive investment that's been made in PowerShell since 2006, and might be just the thing to win you over to the Shell Side. diff --git a/content/articles/2015/06/i-need-your-powershell-stories/index.md b/content/articles/2015/06/i-need-your-powershell-stories/index.md new file mode 100644 index 000000000..7d27b0167 --- /dev/null +++ b/content/articles/2015/06/i-need-your-powershell-stories/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2015-06-30-i-need-your-powershell-stories/ +title: I need YOUR PowerShell Stories +authors: + - Adam Bertram +date: "2015-06-30T18:57:25+00:00" +categories: + - News +aliases: + - /2015/06/i-need-your-powershell-stories/ +--- + +We all love PowerShell and we all probably have some very entertaining stories about a situation where it really saved our butts (or caused problems). Either way, we can all tell some kind of interesting story around a memorable moment you had with PowerShell or automation in general.  I'd love to hear about them. + +I'm looking for a short story anywhere from a few paragraphs to an entire article if you want.  The more detail the better. What kind of situation were you in? Were you under a deadline and PowerShell saved the day?  Did automation backfire in your face and you blew up your whole datacenter?  I want to know about it! + +If you have any stories around PowerShell please send them to me by contacting me via [my blog's contact page](http://www.adamtheautomator.com/get-ahold-of-me/).  I will be editing and collecting them all up soon and putting them all into a community eBook here on [powershell.org](https://powershell.org/) as well as my blog. If you don't want your name attached to the story let me know. + +**The deadline for submissions is 7/31/15.** + +I look forward to reading your contributions! + +- [Adam Bertram][1] + + [1]: http://www.adamtheautomator.com diff --git a/content/articles/2015/06/major-changes-to-dsc-pull-server-configuration-ids/index.md b/content/articles/2015/06/major-changes-to-dsc-pull-server-configuration-ids/index.md new file mode 100644 index 000000000..79c977bfb --- /dev/null +++ b/content/articles/2015/06/major-changes-to-dsc-pull-server-configuration-ids/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2015-06-02-major-changes-to-dsc-pull-server-configuration-ids/ +title: Major Changes to DSC Pull Server Configuration IDs +authors: + - Don Jones +date: "2015-06-02T13:45:09+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/06/major-changes-to-dsc-pull-server-configuration-ids/ +--- + +Configuration IDs - Globally Unique Identifiers, or GUIDs, that DSC nodes use to identify themselves to a pull server - have always been a limiting factor in DSC design and architecture. In the April 2015 preview of WMF5, however, Microsoft has completely overhauled Configuration IDs. If you're working with DSC, this is must-have information. + + + +For the official write-up, see http://blogs.msdn.com/b/powershell/archive/2015/05/29/how-to-register-a-node-with-a-dsc-pull-server.aspx?utm_content=bufferd9bce&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer. +In a nutshell: + + * Nodes can now be assigned a human-meaningful AgentID. This is unique per node, and allows the node to uniquely identify itself to the pull server for reporting purposes, regardless of what configuration the node is pulling. + * Configuration IDs are no longer GUIDs, but are instead human-readable strings. This means your MOF filenames on the pull server can now be meaningful and easier to identify. It also means it's easier to track which configuration a node is pulling. + * A new RegistrationKey acts as a password between the node and the pull server, making it harder for a bad actor to pull configuration files. Now that configuration MOFs have more meaningful text names, and not hard-to-guess GUIDs, this provides an extra layer of protection. The registration key is set in the node's meta config, and in the web.config file of the pull server. + +These changes should make it MUCH easier for nodes to share configurations (especially partials), and help eliminate the hassle of tracking which node had which GUID. In fact, these changes can actually reduce the need for certain DSC tooling (that we've never gotten anyway) to track node-to-configuration mappings. diff --git a/content/articles/2015/06/mississippi-powershell-user-group-virtual-meeting-june-9th-2015/index.md b/content/articles/2015/06/mississippi-powershell-user-group-virtual-meeting-june-9th-2015/index.md new file mode 100644 index 000000000..2e9d05882 --- /dev/null +++ b/content/articles/2015/06/mississippi-powershell-user-group-virtual-meeting-june-9th-2015/index.md @@ -0,0 +1,36 @@ +--- +url: /articles/2015-06-08-mississippi-powershell-user-group-virtual-meeting-june-9th-2015/ +title: Mississippi PowerShell User Group Virtual Meeting – June 9th 2015 +authors: + - Mike F Robbins +date: "2015-06-08T13:46:23+00:00" +aliases: + - /2015/06/mississippi-powershell-user-group-virtual-meeting-june-9th-2015/ +--- + +Join us virtually on Tuesday, June 9th at 8:30pm Central Time when PowerShell MVP Trevor Sullivan will present +_**“Creating Object-Oriented Scripts using PowerShell Classes”**_ +. + + +During this deep, technical discussion, we will take a look at PowerShell classes, and then authoring PowerShell Desired State Configuration (DSC) Resource using PowerShell v5 classes. We’ll also explore leveraging PowerShell DSC on Microsoft Azure infrastructure (IaaS) virtual machines using the Azure VM DSC Extension. This session assumes some previous knowledge of PowerShell & DSC, so make sure you’re familiar with the basics ahead of time! + + +**About Trevor + ** +Trevor Sullivan is an 11 year veteran in the IT industry, and a multi-year recipient of the Microsoft Most Valuable Professional (MVP) award for Windows PowerShell automation. With 8 years of automation experience with PowerShell, and 3 years of experience working with the Microsoft Azure public cloud, Trevor is uniquely equipped to offer cost and process efficiency enhancements to nearly any area of the business. Trevor is a passionate community member, and seeks to spread awareness and knowledge about various technical solutions to business problems through a variety of social media channels. You can find out more about Trevor at [http://trevorsullivan.net](http://trevorsullivan.net/) +and  +[http://twitter.com/pcgeek86](http://twitter.com/pcgeek86) +. + + +Register via +[EventBrite](http://mspsug.eventbrite.com/) +to receive the URL for this virtual meeting.  +[Click here](http://mspsug.com/2015/06/02/mspsug-virtual-meeting-creating-object-oriented-scripts-using-powershell-classes-on-tuesday-june-9th-at-830pm-cdt/) + to be redirected to the original post of this article on the +[Mississippi PowerShell User Group](http://mspsug.com/) +website which contains additional information about the meeting including the system requirements to attend. + + +µ diff --git a/content/articles/2015/06/nyc-powershell-usergroup-meets-on-june-8th/index.md b/content/articles/2015/06/nyc-powershell-usergroup-meets-on-june-8th/index.md new file mode 100644 index 000000000..e4e5b5fa3 --- /dev/null +++ b/content/articles/2015/06/nyc-powershell-usergroup-meets-on-june-8th/index.md @@ -0,0 +1,60 @@ +--- +url: /articles/2015-06-04-nyc-powershell-usergroup-meets-on-june-8th/ +title: NYC Powershell Usergroup meets on June 8th +authors: + - Sunny Chakraborty +date: "2015-06-04T18:47:58+00:00" +aliases: + - /2015/06/nyc-powershell-usergroup-meets-on-june-8th/ +--- + +Continuing from our May meeting, Tome will be presenting a beginner’s track on Powershell covering String manipulations, Functions and Powershell Scripts. +We also have Powershell MVP Doug Finke, who will be covering the new components as part of the Powershell V5.0 release, including PSPM, Classes and Convert-String. +**AGENDA:** +**Tome Tanasovski**: +String manipulation + + * Counting, splitting, uppercasing/lowercasing, etc. + * Format operator + * -split, -join + * -match, -replace + * Select-String + * Secure strings + +Scripts and functions + + * Principles + * Execution policies + * Passing arguments and parameters + * Scoping + +**Bio** +Tome is an executive for a market-leading global financial services firm in New York City where he focuses on automation, private cloud, and distributed computing. He is the founder and leader of the New York City PowerShell User group, a blogger, and speaks regularly at conferences and user groups. In 2011 he became a cofounder of the NYC Techstravaganza, coauthored the Windows PowerShell Bible, and received the title of Honorary Scripting Guy from the Hey Scripting Guy! blog. Tome has also received the MVP award from Microsoft for the last five years in Windows PowerShell. +**Blog**: +**Twitter**: +**Doug Finke:** + + * What’s new in Powershell V5 + * Covers Package Management, object oriented constructs with the new _Class_ keyword + * ConvertFrom-String, and Convert-String. + +**Bio** +Doug Finke, author of “PowerShell for Developers”, 7 time MVP recipient and an international professional speaker. Doug works at Start-Automating, a company that builds advanced PowerShell tools, provides PowerShell training and PowerShell consulting. You can catch up with Doug at his blog Development in a Blink at . +Pizza is being sponsored by SAPIEN, Makers of PowerShell Studio and Primal Script +[![SapienLogo3](https://powershell.org/wp-content/uploads/2015/06/SapienLogo3.png)](http://www.sapien.com) +6pm - 6:30 - Pizza and catching up +6:30 - 7:15 – Tome Tanasovski. +7:15 - 7:45 – Doug Finke. +8ish - ?? - Drinks at Beer Authority (next to Port Authority) +You must RSVP via Event Brite in order to attend: [Register Here](https://www.eventbrite.com/e/nyc-powershell-ug-tome-tanasovski-doug-finke-powershell-v5-pspm-classes-and-powershell-fundamentals-tickets-17221745705)! +[![EventBriteLogoEventBriteLogo](https://powershell.org/wp-content/uploads/2015/06/EventBriteLogo.png)](https://www.eventbrite.com/e/nyc-powershell-ug-tome-tanasovski-doug-finke-powershell-v5-pspm-classes-and-powershell-fundamentals-tickets-17221745705) +**Meeting Date:** +Monday, June 08, 2015 - 18:00 - 20:00 +**Location** +Microsoft - Times Square - 6th Floor +11 Times Square +New York, NY 10018 +United States +See map: [Google Maps][1] + + [1]: https://www.google.com/maps/place/11+Times+Square,+New+York,+NY+10036/@40.7567203,-73.9896494,17z/data=!3m1!4b1!4m2!3m1!1s0x89c258534f8455ad:0x55d4588f7b23a524 diff --git a/content/articles/2015/06/philadelphia-powershell-user-group-meeting-july-7th-2015/index.md b/content/articles/2015/06/philadelphia-powershell-user-group-meeting-july-7th-2015/index.md new file mode 100644 index 000000000..b4fcb6081 --- /dev/null +++ b/content/articles/2015/06/philadelphia-powershell-user-group-meeting-july-7th-2015/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2015-06-16-philadelphia-powershell-user-group-meeting-july-7th-2015/ +title: Philadelphia PowerShell User Group Meeting – July 7th 2015 +authors: + - John Mello +date: "2015-06-17T01:30:48+00:00" +aliases: + - /2015/06/philadelphia-powershell-user-group-meeting-july-7th-2015/ +--- + +Join us Tuesday, July 7th when PhillyPosh members [John Mello](https://twitter.com/Iczer1) and [TJ Turner](https://twitter.com/techguytj) will be presenting. John will be giving a presentation on the new ConvertFrom-String cmdlet in the PowerShell V5 preview. Afterwards TJ Turner will be giving a presentation entitled "What's in your toolbox?”. + +Please [ +register +][1] if you plan to attend in person or online. The meeting URL to join us remotely will be included in your Eventbrite registration confirmation. + +[![Eventbrite - PhillyPoSH July 7th 2015](https://www.eventbrite.com/custombutton?eid=17420823151)](http://www.eventbrite.com/e/phillyposh-july-7th-2015-tickets-17420823151?ref=ebtnebregn) + + [1]: https://www.eventbrite.com/e/phillyposh-july-7th-2015-tickets-17420823151 diff --git a/content/articles/2015/06/powershell-org-inc-2015-shareholder-meeting-roundup/index.md b/content/articles/2015/06/powershell-org-inc-2015-shareholder-meeting-roundup/index.md new file mode 100644 index 000000000..860e5e56f --- /dev/null +++ b/content/articles/2015/06/powershell-org-inc-2015-shareholder-meeting-roundup/index.md @@ -0,0 +1,31 @@ +--- +url: /articles/2015-06-30-powershell-org-inc-2015-shareholder-meeting-roundup/ +title: PowerShell.org, Inc. 2015 Shareholder Meeting Roundup +authors: + - Don Jones +date: "2015-06-30T17:55:23+00:00" +categories: + - Announcements +aliases: + - /2015/06/powershell-org-inc-2015-shareholder-meeting-roundup/ +--- + +I wanted to provide a quick wrap-up of the Annual Shareholder Meeting that we just concluded. We had a quorum of shareholder votes present online or by proxy, and we made some important decisions that I want to share with the community overall. + +One, we voted to amend the organization's Articles of Incorporation and Bylaws to make some important structural changes. These are absolutely in line with our original _intent_ for the organization, and reflect how we've actually done things, but now they're "law." The first was to remove any legal possibility of corporate funds being paid out to shareholders; all corporate funds must be used only for corporate programs and operating expenses. We also voted that, in the event the corporation is completely dissolved, any remaining assets and proceeds will be donated to a 501(c)(3) charity. + +The bigger news is that we also voted to, if necessary, cancel all shares held by the corporation's owners - with no financial consideration - and re-incorporate as a nonprofit corporation. That means everyone who's invested time and money into PowerShell.org would get no money back, yet would lose their ownership of it. That's likely to be a necessary step for us to achieve tax-free status, which is something we'd very much like to do moving forward. We would still have a Board of Directors, and would likely form a volunteer Community Council to help advise on program directions and other matters of governance. Legally, under US nonprofit rules, the Directors could not be paid for their service as Directors - which is exactly how we've always done things. + +We also announced that Steve Murawski will be joining the Board as our sixth Director. Steve's been instrumental in moving the community forward on DSC, and plays an important role in connecting the community to the DSC product team members, so we're pleased to have him. + +Director Dave Wyatt, known for his work on Pester, will be working on a PowerShell.org Continuous Integration service. The theory is that you submit your code to an open-source repo, and the CI service automatically runs your Pester tests on the code. If the code passes, your code is packaged and made available for production use in a repository (similar to PowerShellGallery.com, perhaps, and potentially _that_ repository depending on Microsoft's directions). + +Our other big announcement was a 2016 plan to launch a DevOps-focused education program designed for young people and young entrants to the IT field. This program will combine self-study online training with live mentorship, and lead to as many as nine entry-level certification titles by its conclusion. Anyone will be welcome to join the program on an a-la-carte basis, meaning you could simply follow it on your own, skip the exams, or whatever. However, in partnership with vendor sponsors to be announced, we hope to provide two full-ride scholarships to the program. One will be a general scholarship, and the other will be a "Diversity in Tech" scholarship reserved for members of groups that are presently underrepresented in the industry. The goal of the program will be to take a recent high school graduate, or someone with similar education, and provide them the skills and knowledge needed to successfully apply for an entry-level job (such as Help Desk Technician), with a focus on pointing their career in a DevOps direction. + +As you can see, our community is coming together into a significant force, and these major programs are one reason we'd like to pursue nonprofit status - doing so will not only remove our own tax burden and leave more money for programs, but also potentially make donations to the organization tax-deductible for the donor.  + +All of this on top of two annual Summit events, a revamped website, the re-imagined Scripting Games, our information-packed TechLetter, and our newly launched TechSession webinars. We've got a lot going on, and it couldn't be done without the ample and able help of our many volunteers, and the support of our wonderful community. Thank you - our most exciting years appear to be ahead of us! + +Slide deck: [Shareholder Meeting][1] + + [1]: https://powershell.org/wp-content/uploads/2015/06/Shareholder-Meeting.pptx diff --git a/content/articles/2015/06/powershell-org-where-weve-been-our-new-look-where-were-going/index.md b/content/articles/2015/06/powershell-org-where-weve-been-our-new-look-where-were-going/index.md new file mode 100644 index 000000000..03412829f --- /dev/null +++ b/content/articles/2015/06/powershell-org-where-weve-been-our-new-look-where-were-going/index.md @@ -0,0 +1,69 @@ +--- +url: /articles/2015-06-08-powershell-org-where-weve-been-our-new-look-where-were-going/ +title: "PowerShell.org: Where We've Been, Our New Look, Where We're Going" +authors: + - Don Jones +date: "2015-06-08T18:29:11+00:00" +categories: + - Announcements +aliases: + - /2015/06/powershell-org-where-weve-been-our-new-look-where-were-going/ +--- + +PowerShell.org has come a long way, both spiritually and physically, since our inception in September of 2012. Let's look at some screen grabs from the [Internet Archive][1], and take a stroll through our history. + + + +## Before PowerShell.org + +Not long after PowerShell's product launching 2006, I convinced my employer at the time, SAPIEN Technologies, as well as Quest Software, Dell, and Microsoft to help fund the launch of a new PowerShell community. Creatively named PowerShellCommunity.org, it was a DotNetNuke site, launched around 2007. + + +The idea was to create something central that could serve as a jumping-off point to the rest of the PowerShell community. Criticized by some for the "toilet bowl water" color scheme (it was changed to a blue version in 2009), it saw moderate success. Unfortunately, for a variety of reasons, it never really caught on. + +Back in 2007, PowerShell.org didn't look even that nice. + + +That was before I acquired the PowerShell.org domain name, in fact. But after speaking with some of the PowerShell product team members, myself and the other PowerShell.org founders (including Kirk Munro, Richard Siddaway, and Jeff Hicks) knew we needed a standalone, independent entity in order to accomplish some of what we wanted. So I purchased the PowerShell.org name, and we started getting a new site ready. + +## An Org is Born: 2012 + + +And so in 2012, PowerShell.org was born. As of March 2013, it had a pretty basic look. At that time, our front page led to the different, distinct applications that made up the website - primarily the forums, along with pages for the Scripting Games and PowerShell Summit. We'd moved quickly, taking on the Games and starting the Summit at the behest of Microsoft. Our little community was starting to chug along, based largely on the selfless efforts of its early volunteers. We had strong support from some early, dedicated sponsors, and we started to make an impact right away. Although there are a number of incredible PowerShell resources online, they were a bit scattered. The friendliness of Q&A forums, in particular, was pretty variable. We wanted to offer a friendly starting point in the community, and then help guide people to the other offerings that were out there. + +## Settling In: 2014 + + +Yeah, we were a little rough-looking back then. But by a year later, we'd started to refine our look. Our new "metro" logo and a cleaner look went along with our integration into a single platform for everything. As you can see, we'd started to make big strides in supporting local user groups, and welcomed the PowerScripting Podcast (started in 2006) to our site. We'd finished our first PowerShell Summit, and in March 2014 were getting ready for our second one - and our first European Summit, later that year. Our dream of helping to foster community was coming true - we just had to keep plugging at it. + +## More Community: 2015 + + +Fast forward a year... Now, we've got more user groups featured! More volunteers authoring articles! And we've launched our DSC Hub, providing quick access to new ebooks, a GitHub repo, and learning resources. By March 2015, we've got three PowerShell Summit events under our belts, and three Scripting Games events. We've got our first North American Summit outside Washington coming up in Charlotte, and are looking ahead to our second European Summit in Stockholm. We're welcoming 150,000 visitors a month to the site, and we've launched a series of TechSession webinars. We've got a TechLetter newsletter with a dozen issues published, and almost a dozen free ebooks authored by members of the community. Our site look hasn't changed much, but we're doing a lot more with it. + +But there was still some valid criticism. The site wasn't very small-screen friendly. Posting code in the forums was a little touch-and-go. Major elements like the Summit, our free ebooks, and the incredible work done by our volunteer authors were still kind of buried. + +## A New Us: 2015 + + +One last leap forward in time - about a year and 3 months, to June 2015. In other words, we're in the present, and PowerShell.org is ready to continue moving forward. + +Our new look is fresher, cleaner, and more modern. We're doing more to highlight the great work being done by the community, with a formal Articles area for our volunteer writers, better exposure of the forums, and a fully-responsive theme that's small-screen friendly. Our forums have a great new code colorizer, and supports pasting of Gist snippets simply by adding the URL to the post. Forums posts can now even be marked as "resolved," to help future generations better identify answers when they come searching. + +But beyond our look, I feel that we've accomplished _so much_ in terms of fostering a true community. + + * Our volunteers take on everything from writing articles, editing the newsletter, producing ebooks, running the website, and organizing webinars. And we're always looking for more, especially writers, so chime in! + * We've successfully produced four PowerShell Summit events globally, with a fifth on the way this September, and 2016 already in planning. + * We're back with a new edition of the Scripting Game this summer, in what we believe will be a long-term-sustainable format that offers fun and challenge. + * Our TechSession webinars are getting traction, and we're starting to build out a reliable monthly schedule of free educational offerings. + * Our free ebooks have been downloaded more than 50,000 times, making them a collective set of bestsellers by any calculation. + * We're helping support almost two dozen independent user groups by giving them a space to publish their meeting notes, meeting announcements, and other details. + * The PowerScripting Podcast continues to draw thousands of listeners to each episode, and we're proud to offer them some space from which to do it, along with financial support. + +I'm proudest of the fact that _I'm not doing most of these things _- you, in the community, are. You're helping answer questions in the forums, you're driving demand for the PowerShell Summit, and you're writing resources for our DSC Repository. PowerShell.org is achieving exactly what its founders always intended: providing a gathering place for community, because we know that once you all have a place to come together, you'll do amazing things. + +It's been an exciting three years since we began, and I can't wait to see where you take us next. + + + + [1]: http://archive.org diff --git a/content/articles/2015/06/the-scripting-games-heres-whats-happening/index.md b/content/articles/2015/06/the-scripting-games-heres-whats-happening/index.md new file mode 100644 index 000000000..835daf585 --- /dev/null +++ b/content/articles/2015/06/the-scripting-games-heres-whats-happening/index.md @@ -0,0 +1,81 @@ +--- +url: /articles/2015-06-29-the-scripting-games-heres-whats-happening/ +title: "The Scripting Games: Here's What's Happening" +authors: + - Don Jones +date: "2015-06-29T15:11:27+00:00" +categories: + - Scripting Games +aliases: + - /2015/06/the-scripting-games-heres-whats-happening/ +--- + +I know a lot of folks have been wondering about when the next Scripting Games will be. It's a complicated answer... so bear with me for a minute while I unburden my soul to you. If you prefer to just skip the explanations, you can skip a bit to see what we're doing, part 1. + +## **The Background** + +I'm not sure how long Microsoft's Scripting Guys ran The Scripting Games, but it goes back at least to 2006. Back then, the focus was on VBScript, it wasn't until a year or so later that a parallel PowerShell track was started, and another year or two before VBScript was discontinued. The Games back then were... well, _games._ They weren't always terribly real-world, but they were fun, and they made you think. + +In 2013, Last Scripting Guy Standing, Ed Wilson, turned the Games over to PowerShell.org. Ed was, to put it bluntly, exhausted. Coming up with nine events in two tracks, let alone grading the thousands of entries, wrangling the assistant judges, begging for prizes - it was a couple of months out of his life, during which he was still expected to do his full-time job. So we stepped in, mindful of the trust he was placing in us, to take over and keep the tradition alive. + +We've tried some variations on the Games, but two things became abundantly clear: + +1. The real value people like in the Games is getting the individual expert feedback and scoring. + +2. The one thing we simply can't feasibly provide is individual expert feedback and scoring. + +Seriously, we'd go out and recruit a couple of dozen judges, but it's just mind-numbing to look through entry after entry after entry after you've already put in a full day of work at your job. YOU wouldn't want to do it. So in the end, it'd always be the same 4-5 stalwarts who slaved away for 40 or more hours - not kidding - to make sure everyone got a grade and a comment. It's just insane. None of us who've done it for a few years ever wants to do it again, even if it's the one thing that would save us from our robotic conquerors. We can't handle it. + +We tried to do community scoring and that was a huge non-popular-thing-to-do. People wanted "the experts" giving feedback, not some schmuck from the next cube over. Which we understand, but it doesn't mean we can physically deliver what people are after. + +## **What We Thought About Trying** + +So we thought about a Games where we went back to focusing on puzzles. Believe me, the original Scripting Guys weren't reviewing, grading, and commenting on every submission. Most entries went in via e-mail, and they picked the ones they thought were winners. But the Games evolved to the point where people expected that individual feedback. + +So when we shared our draft plans with a few folks, their knee-jerk reaction was universally, "WTF?!??" They struggled with the idea of a Games that didn't include individual feedback. And once we started being honest with ourselves, we could appreciate the value in that, and how people would react when the Games eliminating the judging. + +But we still can't do the individual judging. There just aren't enough experts with enough time. We've all got 50-hour a week jobs just like you do, and we're talking THOUSANDS of submissions that we're supposed to do instead of hanging out with our friends and families.  + +So... there we were. Kind of stuck between a rock and a hard place. + +## **Here's What We're Doing, Part 1** + +We're going to pivot the Scripting Games into a monthly event, sort of. Each month, we'll publish a puzzle. They won't all necessarily be real-world, but they'll all be designed to make you think about something important. We'll try to describe _why_ it's important, too, since in some cases it won't be super-obvious. You'll get a full month to work on your entry, and you'll be encouraged to post it (we'll provide posting instructions).  + +We're encouraging user groups to occasionally or regularly make the monthly puzzle a part of their meetings. We're encouraging them to publicize when they're doing so, and if they allow virtual visitors, then you'll have the opportunity to share your solution with a group of peers, work on a solution together, and give each other feedback in real-time. That's a hugely valuable exercise, by the way, and I encourage everyone to take advantage of the opportunity if they can. You don't work in this field alone - start to make some friends and colleagues, even if they're across the globe. + +The following month, we'll post a new puzzle. We'll also post a wrap-up for the preceding month's puzzle. In it, we'll offer a sample solution and an explanation for it. When possible, we'll offer Celebrity Participant solutions, often from members of the PowerShell team or from other MVPs. And, when we have volunteers willing to do so, we'll post a "stream of consciousness" article that shares how that person tackled the problem and came to their solution. Finally, we'll include some analysis of the entries people posted, including things we especially liked, and things we didn't like so much. + +All of that should provide the learning opportunity that the Games were originally created for. You'll have to use some critical thinking, some out-of-the-box skills, and some cleverness. You'll get to see how other people approached the problem, and gain some new perspective. No, you won't get an individual score or commentary - but this isn't a certification exam, and it isn't intended as a personal benchmark for YOU. It's a way for us to all learn together. + +And, best of all, the Scripting Games' monthly puzzle will create an opportunity for the Games to resurface on The Scripting Guy's blog, as Ed has offered to run the monthly puzzles. + +## **Here's What Else We're Doing, Part 2** + +We haven't given up on the idea of an annual, fast-paced event that includes individual feedback. It's going to have to be a new set of volunteers who tackle that, though, and we have a few people thinking about it. I imagine it'll be a larger-scale challenge, so that you can exercise several sets of skills and knowledge and once, and get feedback on something that's perhaps more real-world than a puzzle. I can't offer any timelines or promises on this; it's a huge undertaking, and we're still running ideas around. Heck, if you think you have a solution, share them in Web Site Feedback forum on PowerShell.org.  + +However, if you offer an solution, be prepared to volunteer to implement it. What we don't want are, "here's what I'd like YOU do to, and I'll just sit back and consume that." "Solutions," for us, are PEOPLE, not ideas. I myself am not a community, nor are my fellow PowerShell.org Board members. ALL OF US are a community - so if this is something the community wants, the community has to pull together to build it out. + +## **A User Group CALL TO ACTION** + +Do you run or participate in a PowerShell User Group? Well, today's your lucky day. First - why not make the monthly Scripting Games puzzle a part of your user group meetings? Invite remote visitors to come along for the ride - increase participation by putting code front and center. + +And here's a special offer just for user groups: We'll be publishing the monthly puzzles on the beginning of the month (likely the first Saturday). As a user group, you can send your best join submission right to Ed Wilson, The Scripting Guy. He'll select the most noteworthy user group submissions, publish them, and comment on it, raising visibility for your group and its members. He'll also publish selected excerpts that he finds noteworthy from other user group entries. Caveats, here: only the registered user group leader will be able to submit the group's entry. So if you're not listing your user group on PowerShell.org, consider doing so. + +So now there's a HUGE reason to get involved with a user group, since it's another opportunity for you to work on code together, and have that code published in one of the highest-profile PowerShell blogs in existence!  + +And to sweeten that pot even more - the user group that has the most entries selected over the year will be eligible for a grand prize, courtesy of PowerShell.org. You see (and this was all Ed's idea), we really want to give people more reasons to create, run, and participate in user groups. They're really the best way to make community happen. It all starts at a local level, even if you're attending remotely. + +## **Here's Something YOU Can Do To Help** + +Offer to write the monthly puzzle. Seriously. Drop a line to Admin over here at PowerShell.org, and include an RTF (not Word, please) document with your monthly puzzle. You'll get credit, and you'll be giving back to the community that's supported you as you learned PowerShell. Do it for the children. + +## **Here's Something Else YOU Can Do** + +We've heard over and over that expert reviews are valuable to people. You know, you can probably have an expert review without having a Scripting Games. Get together with a handful of colleagues, and invite your favorite PowerShell expert to a Code Review Hour. Have some code ready for them, and do a Skype screen-share or something and let them pick apart what you've done. PAY THEM. Offer $100 or $200 an hour, which is a going rate depending on the level of expertise you're getting. You and your friends can pool your funds. Heck, with five people offering $20 each, you've got $100, right? And if that expert review is truly valuable to you - well, "valuable" means you can put a value on it, and $100 an hour ain't much. + +If PowerShell.org can do something to facilitate these, like helping you contact interested experts, let me know in the Web Site Feedback forum, and I'll figure something out. + +## **In the Meantime** + +So while you're waiting on that first Scripting Games, Monthly Edition (expect it in July), start thinking of the kinds of puzzles you'd like to see. Ones that make people think, even if they don't necessarily have one-and-only-one correct answer. Don't just CONSUME community, help CREATE it by offering to write one of the monthly Puzzlers. And start thinking how you, and we, all together, can do a better job AS A COMMUNITY of providing peer code reviews, code feedback, and other elements. I look forward to your ideas. diff --git a/content/articles/2015/06/trust-but-verify/index.md b/content/articles/2015/06/trust-but-verify/index.md new file mode 100644 index 000000000..14566a6af --- /dev/null +++ b/content/articles/2015/06/trust-but-verify/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2015-06-08-trust-but-verify/ +title: Trust, but Verify +authors: + - pscookiemonster +date: "2015-06-09T00:12:33+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/06/trust-but-verify/ +--- + +The PowerShell code you write can turn up in interesting places. Production services might rely on it. Your co-workers might take a peak and borrow ideas from it. You might decide to share it online. Someone might see your code online and use it in their own solutions. + +[Hit the link][1] for a quick bit on how we can help create more reliable, consistent, and secure solutions. Simplified to one line: always ask yourself "what could go wrong?" + +What do you think? Is this over the top? Do you have any funny or awe-inspiring-train-wreck stories that resulted from assumptions around PowerShell or other code? + +I've been lucky so far. My scariest moment? A while back, I was testing some code against a test server or two with [Invoke-Parallel][2]. Oops! The code to pull test systems hit a bug, and pulled all computer accounts. A number of domain controllers were hit before I could press ctrl+c. After recovering from a minor heart attack, I realized the code was benign, quickly fixed the bug, and broke the bad habit of running with a high-privilege account. + +Cheers! + + + [1]: http://ramblingcookiemonster.github.io/Trust-but-Verify/ + [2]: https://github.com/RamblingCookieMonster/Invoke-Parallel diff --git a/content/articles/2015/06/verified-effective-self-assessment/index.md b/content/articles/2015/06/verified-effective-self-assessment/index.md new file mode 100644 index 000000000..93c3861f6 --- /dev/null +++ b/content/articles/2015/06/verified-effective-self-assessment/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2015-06-02-verified-effective-self-assessment/ +title: VERIFIED EFFECTIVE Self-Assessment +authors: + - Don Jones +date: "2015-06-02T23:36:16+00:00" +categories: + - Announcements +aliases: + - /2015/06/verified-effective-self-assessment/ +--- + +We've had a number of people ask about a self-assessment for their PowerShell Toolmaking skills. We've decided to publish one, just once, in July. Here's how to get it. + + + +The self-assessment will be published as a _very_ long article in our July 2015 TechLetter. That means, to get it, you'll need to [subscribe to the newsletter][1] prior to that date. Don't worry, we use that e-mail list _only_ for the newsletter, and you can always bail out and unsubscribe later, if you like. +So sign up prior to July 2015. This issue will be made available in our back-issue page by November 2015, in case you've run across this in what is currently the future. + + [1]: https://powershell.org/newsletter/ diff --git a/content/articles/2015/06/walkthrough-an-example-of-how-i-write-powershell-functions/index.md b/content/articles/2015/06/walkthrough-an-example-of-how-i-write-powershell-functions/index.md new file mode 100644 index 000000000..d028b6ba1 --- /dev/null +++ b/content/articles/2015/06/walkthrough-an-example-of-how-i-write-powershell-functions/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2015-06-19-walkthrough-an-example-of-how-i-write-powershell-functions/ +title: "Walkthrough: An example of how I write PowerShell functions" +authors: + - Mike F Robbins +date: "2015-06-19T14:59:15+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/06/walkthrough-an-example-of-how-i-write-powershell-functions/ +--- + +A couple of days ago I posted a blog article titled "[PowerShell function: *Test-ConsoleColor* provides a visual demonstration of the foreach scripting construct](http://mikefrobbins.com/2015/06/17/powershell-function-test-consolecolor-provides-a-visual-demonstration-of-the-foreach-scripting-construct/)" and today I thought I would walk you through that function step by step since it's what I consider to be a well written PowerShell function. + +It starts out by using the [#Requires](https://technet.microsoft.com/en-us/library/hh847765.aspx) statement to require at least PowerShell version 3 or it won't run. It also requires that the [PowerShell Community Extensions](https://pscx.codeplex.com/) module be installed since it uses a function from that module and continuing without it only leads to errors: + + +`#Requires -Version 3.0 -Modules Pscx +`The function is then declared using a [Pascal case name](https://msdn.microsoft.com/en-us/library/dd878270(v=vs.85).aspx#SD02) that uses an [approved verb](https://msdn.microsoft.com/en-us/library/ms714428(v=vs.85).aspx) along with a [singular noun](https://msdn.microsoft.com/en-us/library/dd878270(v=vs.85).aspx#SD01). [Comment based help](https://technet.microsoft.com/en-us/library/hh847834.aspx) is provided just inside the function declaration. This isn't the only location where comment based help can be specified at, but it's my preferred location for it. + +[Click here](http://mikefrobbins.com/2015/06/19/walkthrough-an-example-of-how-i-write-powershell-functions/) + to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article. + + +µ diff --git a/content/articles/2015/06/why-remoting-vs-ssh-isnt-even-a-thing/index.md b/content/articles/2015/06/why-remoting-vs-ssh-isnt-even-a-thing/index.md new file mode 100644 index 000000000..0467487c6 --- /dev/null +++ b/content/articles/2015/06/why-remoting-vs-ssh-isnt-even-a-thing/index.md @@ -0,0 +1,47 @@ +--- +url: /articles/2015-06-09-why-remoting-vs-ssh-isnt-even-a-thing/ +title: "Why Remoting vs. SSH Isn't Even a Thing" +authors: + - Don Jones +date: "2015-06-09T21:13:04+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/06/why-remoting-vs-ssh-isnt-even-a-thing/ +--- + +As you've probably read, Microsoft [recently announced][1] that they're getting on board with [SSH][2], and that they've plans to, in some future-and-unspecified version of Windows, include a default SSH server and client. Some folks have taken to the Twittersphere rejoicing this decision, even though I suspect they've no idea why Microsoft is doing it. Others have suggested that this is the downfall of Remoting (management via [WS-MAN][3]), because who would want that when you've got SSH? + +And so now I have to write this. + +First of all, let's speculate - with some objectivity - why Microsoft is getting involved with SSH at all. My personal belief is that an SSH client is simply massively overdue. Literally every other business-grade operating system on the entire planet comes with a decent command-line SSH client, so for pity's sake, let's get Windows one, too. Being able to reach out to Linux boxes, routers, switches, and all manner of other devices isn't a convenience, it's a necessity. + +The SSH server piece is a little more interesting. My suspicion is that Microsoft wants to further enable management systems that are primarily built for Linux to log into Windows and manage Windows boxes. If you've got Ansible or Salt, for example, then you know that they revolve in part around using SSH to log into nodes and run commands. Fine - Microsoft can enable that on Windows if it'll help. + +But. + +Let's be clear on why making a decision between Remoting and SSH isn't actually a decision. + +SSH is, basically, Telnet*. You send characters to the remote computer, and it sends characters back. It's built entirely around stdin and stdout. On a Unix system, this works beautifully, because at the end of the day everything on Unix is a process, a file, or a folder. It's all text, all the way down to the turtles. SSH is great at accessing text. Now, _text itself _isn't necessarily a wonderful management API, because it requires administrators to become experts at string manipulation and slicing, but in the Unix world that's a de facto skill. In other words, _for the type of management API that Unix uses, SSH is a wonderful data transport mechanism. _ + +(*yes, I know that SSH has evolved tremendously beyond Telnet - but for the purpose of discussing how SSH moves data back and forth, Telnet is a useful analogy. I know SSH does a lot more than just the Telnet-y bits. That's less relevant to my discussion, but thanks to the SSH fans who've pointed it out. I'm simplifying so I can get to the point - I don't regard SSH as bad or weak.) + +Windows, on the other hand, is entirely different. It is based on APIs. Data doesn't move between bits of software as a text stream; it moves as a data structure called an _object. _Windows APIs all assume that you're passing objects back and forth, and text parsing-and-slicing isn't part of the deal. When an API gets input, it expects the computer name to be in the ComputerName property of an input object, not hiding in columns 26 to 46 of a text block. SSH, therefore, is _not_ a good mechanism for transmitting the data structures that Windows uses for management. + +Remoting, on the other hand, _is_ a good mechanism. It has built-in code for serializing objects into XML, and then deserializing them back into objects on the other end. Like SSH, Remoting natively supports encryption. Unlike SSH, which is really just a remote console, Remoting wasn't built with synchronous operations in mind. Remoting is perfectly happy to fire off a command and then wait until the data comes back some time later. Remoting's underlying protocol, WS-Management, as implemented by the WinRM service, is capable of connecting to far more than just PowerShell, too. CIM and OMI, for example, communicate using WS-MAN. So, unlike SSH, Remoting (well, its underlying infrastructure) connects _software endpoints_ for manageability. That's important in Windows, because those endpoints are where we call the APIs we need to get stuff done. + +SSH and Remoting (and WS-MAN) solve different problems. The fact that both solutions involve transmitting encrypted bits across the wire is _literally_ the only thing they have in common. Yes, when you use **Enter-PSSession** to interactively connect to a remote machine, it looks and feels a lot like SSH in how it works. It isn't. It's _entirely and completely_ different, and if you don't know why, you should learn. + +(Briefly, Enter-PSSession doesn't send one character out, and then receive that same character echo back. Your typing occurs entirely inside your _local console_, where you can have rich tools like PSReadLine running. When you hit Enter, what you've typed is transmitted _all at once_ to the remote box. It runs your commands, serializes the results into XML, and sends 'em. Your console deserializes the XML into objects, and _your local formatting system_ takes over to display those objects. SSH assumes a dumb client; Remoting and Enter-PSSession require a smarter client.) + +Remoting and SSH enable different functionality. Neither is better than the other, any more than cars are better than hot tubs. Both have their place, and both have strengths and weaknesses that devolve primarily from the operating system environments in which they were born. Microsoft _is not implementing an SSH server_ because they believe it's the best way to administer Windows; they're doing it to enable some customer scenarios that, previously, were unnecessarily difficult. Rich management of Windows will always be easier to accomplish using Remoting, but if your management solution can only do SSH, at least you'll be able to do what that can do. + +Keep in mind that Microsoft's also provided a reference implementation for WS-MAN running on Linux, because if your solution supports WS-MAN - as Microsoft's do - then it's nice to be able to use that cross-platform. + +Now, another argument is, "my security people won't approve Remoting, but they already approve SSH, so we should just use that." First, your "security" people (and they're clearly anything but secure or people) have also probably allowed RDP for managing servers, which is just dumb. Choosing to use an inappropriate tool just because the organization won't grouse about it suggests that you have H.R. problems. Either someone in "security" should be fired, or you should be applying for new jobs at companies that aren't stupid. SSH wasn't _always_ approved; someone had to understand it, what it did, how it worked, and become comfortable with it. They're going to need to do that with WS-MAN whether they like it or not, because it's _what Microsoft is going to fixate on, exclusively, for proper management of their operating system. _You're not going to be able to properly manage Windows via SSH, trust me. Microsoft investing some time in OpenSSH is not the same as Microsoft investing time to re-architect their entire operating system around Telnet as a management communications protocol. If you don't believe me on that, then you're just being obstinate. Which is fine, but time will prove me right on this. So, if your organization doesn't "like"  Remoting, fix your organization. + +And SSH will be another tool in our toolbox. Hopefully, you'll use it when it's the very best thing to do, and use other tools when _they_ offer the best way to accomplish a particular task. + + [1]: http://blogs.msdn.com/b/powershell/archive/2015/06/03/looking-forward-microsoft-support-for-secure-shell-ssh.aspx + [2]: http://en.wikipedia.org/wiki/Secure_Shell + [3]: http://en.wikipedia.org/wiki/WS-Management diff --git a/content/articles/2015/07/2015-july-scripting-games-puzzle/index.md b/content/articles/2015/07/2015-july-scripting-games-puzzle/index.md new file mode 100644 index 000000000..d3c173b0a --- /dev/null +++ b/content/articles/2015/07/2015-july-scripting-games-puzzle/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2015-07-04-2015-july-scripting-games-puzzle/ +title: 2015-July Scripting Games Puzzle +authors: + - Don Jones +date: "2015-07-04T08:01:13+00:00" +categories: + - Scripting Games +aliases: + - /2015/07/2015-july-scripting-games-puzzle/ +--- + +Our July 2015 puzzler is designed to make you really think about the PowerShell parser. Normally, you can more or less ignore the parser, because if you're typing best-practice, long-form code (no aliases, spell out parameter names, etc), the parser deals really well with everything. But knowing how the parser works is useful, because when you get into tricky syntax, the parser can be harder to work with. So we're going to test the limits of the parser's patience - and your skills! + + + +## **Instructions** + +The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month's puzzle. You can find them all at https://powershell.org/category/announcements/scripting-games/. Many puzzles will include optional challenges, that you can use to really push your skills. + +**To participate**, add your solution to a public Gist (http://gist.github.com; you'll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post.  +**Only post one entry per person. You are not allowed to come back and post corrected or improved versions. If you do, all of your posts will be ignored. **However, remember that you can always go back and edit your Gist. We'll always pull the most recent one when we display it, so there's no need to post multiple entries if you want to make an edit. + + +Don't forget the [main rules and purpose of these monthly puzzles][1], including the fact that you won't receive individual scoring or commentary on your entry. + +**User groups are encouraged to work together** on the monthly puzzles. User group leaders should submit their group's best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most "favorite" entries of the year will win a grand prize from PowerShell.org. + +## + +## **Our Puzzle** + +Write a one-liner that produces the following output (note that property values will be different from computer to computer; that’s fine).  + + +`PSComputerName ServicePackMajorVersion Version  BIOSSerial                                -------------- ----------------------- -------  ----------                                win81                                0 6.3.9600 VMware-56 4d 09 1 71 dd a9 d0 e6 46 9f +`By definition, a one-liner is a single, long command or pipeline that you type, hitting Enter only at the very end. If it wraps to more than one physical line as you’re typing, that’s OK. But, in order to really test your skill with the parser, try to make your one-liner as short as technically possible while still running correctly. + + + +**Challenges:** + +• + +Try to use no more than one semicolon total in the entire one-liner + +• + +Try not to use ForEach-Object or one of its aliases + +• + +Write the command so that it could target multiple computers (no error handling needed) if desired + +• + +Want to go obscure? Feel free to use aliases and whatever other shortcuts you want to produce a teeny-tiny one-liner. + + [1]: https://powershell.org/?p=2574 diff --git a/content/articles/2015/07/2015-july-scripting-games-wrap-up/index.md b/content/articles/2015/07/2015-july-scripting-games-wrap-up/index.md new file mode 100644 index 000000000..788076a00 --- /dev/null +++ b/content/articles/2015/07/2015-july-scripting-games-wrap-up/index.md @@ -0,0 +1,171 @@ +--- +url: /articles/2015-07-29-2015-july-scripting-games-wrap-up/ +title: 2015-July Scripting Games Wrap-Up +authors: + - Don Jones +date: "2015-07-29T17:39:26+00:00" +categories: + - Scripting Games +aliases: + - /2015/07/2015-july-scripting-games-wrap-up/ +--- + +The [July puzzler][1] wasn't intended to break your brain - but it was intended to highlight an extremely important pipeline technique - and to make you think about how PowerShell parses command lines. Let's begin with our Celebrity Entry, from Boe Prox. We think you'll discover some interesting new techniques in this answer - and learn from understanding how he got there. + +# Celebrity Entry + +The 2015 Scripting Games have started and have taken a different route this year in that we are they are running a monthly puzzle vs. the usual format. That being said, I was asked to be a celebrity contestant and put together my solution as well as adding my thoughts (I promise to try and stay on a clear path) and various routes that I took to get to my final solution. + +The event, while seemingly simple, did cause me to spend some time trying to whittle down the number of characters to try and get as few as possible (because shorter code, while harder to read is always fun to write ;)). + +The rules of engagement for this particular puzzle are as follows: + +_Write a one-liner that produces the following output (note that property values will be different from computer to computer; that’s fine). _ + +**_PSComputerName ServicePackMajorVersion Version  BIOSSerial  _** + +_By definition, a one-liner is a single, long command or pipeline that you type, hitting Enter only at the very end. If it wraps to more than one physical line as you’re typing, that’s OK. But, in order to really test your skill with the parser, try to make your one-liner as short as technically possible while still running correctly._ + +That’s not all though, here are some extra pieces to make it a little more challenging; + + * Try to use no more than one semicolon total in the entire one-liner + * Try not to use ForEach-Object or one of its aliases + * Write the command so that it could target multiple computers (no error handling needed) if desired + * Want to go obscure? Feel free to use aliases and whatever other shortcuts you want to produce a teeny-tiny one-liner. + +Now that we have all of this understood, it is time to start looking at how I am going to handle this. + +I know already that I need to look at WMI as my source to pull this information. PSComputername is already available when I use Get-CIMInstance to handle my query. + +The first thing that I need to do is that in order to pull both the **ServicePackMajorVersion** and **Version** I need to use the Cim_OperatingSystem class (it has everything I need from Win32_OperatingSystem, but at fewer characters!), but then I have the BIOSSerial property which happens to exist on the Win32_BIOS class. If I intend to overcome the _only use 1 semicolon_ challenge and also make this a one liner, I need to start thinking of a good workaround. Fortunately, a workaround exists in creating a custom property that will define the BIOSSerial label and then performs a query to the class that returns the serial number. + + +`Get-CIMInstance -Class Cim_OperatingSystem | +Select-Object PSComputername,ServicePackMajorVersion,Version,@{Label='BIOSSerial';Expression={(Get-CIMInstance -Class Win32_BIOS).SerialNumber}} +`This works great and also ensures that I only have a single semicolon to boot! At this point I technically have a submission that works…but it is missing a few things extra that would really meet all of the requirements to include being able to target multiple systems as well as shrinking the code down to its smallest possible size while still retaining its functionality. + +## **Handling Multiple Systems** + +First off is the concept of +allowing for multiple systems + (remember that this was one of the challenge requirements). I wanted something that would be dynamic enough to where I wasn’t hard coding a host file or computer names into the script. + +I thought I could get away with this using Read-Host, but unfortunately for me, it displays everything as a single string, not an array of strings that I had hoped for.  + + +`(Read-Host ' ').GetType().Fullname +`That pretty much threw out one idea that I had until I had the idea of splitting the comma (which would be the common character to use with building a collection of items) if it was used with Read-Host and instantly this is back in the game! I also realized that I just needed to give a single character (that wasn’t a single or double quote) to knock out a couple of characters for the prompt. + + +`(Read-Host .).split(',') +`I almost thought that I had this done until I did a little more research. Sure enough, there is a better approach to be had here in the form of **Echo**, which happens to be an alias for Write-Output. If nothing is supplied to it, it prompts for input and continues to do so until you hit return on an empty line which means…you guessed it…instant collections that can be passed to the command! + +That really knocked down my character count! + +## **Shrinking Cmdlets** + +Obviously, this is where aliases begin to come into play. I start knocking down my cmdlets to get them as small as possible. Get-WMIObject becomes gwmi and Select-Object becomes Select. Next up I can take my custom property and bring Label down to just ‘l’ and then make Expression ‘e’.  Because it was not explicitly mentioned that we would be outputting this to a file or doing anything else with it, I am going to instead use Format-Table, or more appropriately, its alias of **FT** to further reclaim the valuable character count. + + +`FT @{l='BIOSSerial';e={(gcim -Class Win32_BIOS).SerialNumber}} +`As a bonus to this, I am also going to use the smallest possible property names with wildcards to still have the proper display but much fewer characters. + + +`ft PSC*,*aj*,V*,@{n='BIOSSerial';e={(gcim Win32_BIOS).SerialNumber}} +`## **Shrinking Parameters** + +Getting there… Parameters also will sometimes have their own aliases that can be used, so –Computername can become –cn and –Class can be knocked down to –cl without fear of running into the dreaded ambiguous parameter error. But why stop at shortened parameter names when positional parameter can be much more fun while at the same time squeezing out more characters in my attempt to make this as small as possible. Using gwmi, we have the positional parameter for the –Class parameter meaning that we can specific the class first and the cmdlet will process it just as though we specified the parameter name. + +## **Positional Parameter** + +Parameter aliases are nice and all, but if I want to continue to shrink down my command, I need to look at parameters by position. With Get-WMIObject, I only have one option for a positional parameter with –Class (which happens to be as position 0). –Computername is unfortunately not a positional parameter (as shown in the image below) in the way that I can just have it right after –Class. + + +`(Get-Command Get-CimInstance).Parameters.GetEnumerator()|ForEach{ + $Param = $_.Key + $_.Value.Attributes|ForEach{ + If ($_.TypeId -eq [System.Management.Automation.ParameterAttribute]) { + [pscustomobject]@{ + Name=$Param + Position=$_.Position + ParamSet=$_.ParameterSetName + } + } + } +} +`But…it turns out Computername is an accepted value via the pipeline, so now I can go that route and not have to worry about specifying any parameters in my one liner! + +What I ended up with is the following submission (I’ve broke this out at a natural line break for the sake of readability): + + +`echo|gcim cim_operatingsystem| +ft PSC*,*j*,V*,@{n='BIOSSerial';e={(gcim Win32_BIOS).SerialNumber}} +`This one liner is **97** characters in length (woo hoo!) with the various aliases being used, removing any unnecessary white space in between things such as the pipe (|) and commas. I also ensure that the output is exactly what was shown in the example for the event. My victory was short lived however. + +Did you notice what I was missing here in this approach? I didn’t realize this until I was at the end of this article that I was only querying the local system for the BIOS. With that issue, I quickly fixed it (at the cost of more characters) and now have something that comes in at **105 characters** +and + meets the requirements and challenges. + + +`echo|gcim cim_operatingsystem| +ft PSC*,*j*,V*,@{n='BIOSSerial';e={($_.csname|gcim Win32_BIOS).SerialNumber}} +`## **Side Note on Invoke-Command** + +I could have went with Invoke-Command (using icm an alias) but the problem lies with the output object that includes Runspaceid which obviously would not meet the requirement of this puzzle. + +With that, I look forward to seeing what everyone else has put together and learning some awesome ways of accomplishing this puzzle including who can put together an insanely short command that meets all of the design criteria! + +# Official Answer + +While there's no one right way to accomplish this task, our puzzle author obviously has an answer in mind. Here it is: + + +`gwmi win32_operatingsystem | select pscomputername,servicepackmajorversion,version,@{n='BIOSSerial';e={gwmi win32_bios | select -expand serialnumber}} +`This solution doesn't hit all of the additional challenges, but it perhaps makes it clearer to see the most important bit: using a custom property to execute a second query, and extracting the results of that query into the custom property's value. Boe's celebrity solution, above, is a much more concise version of this, and meets many more of the optional challenges! + +# Interesting Submissions + +Stephen Testino had an interesting approach: + + +`gwmi win32_operatingsystem -co @(".") | select *pu*, *j*, v*, @{n="BIOSSerial";e={(gwmi win32_bios -co $_.csname).serialnumber}} +`Here, you're seeing the value in using wildcards with Select-Object. Stephen also saved a little space by not using Select-Object and -ExpandProperty to get the SerialNumber property's contents; instead, he used a parenthetical expression. A but harder to read, perhaps, but more concise in this case. You might argue that the addition of the -ComputerName parameter isn't necessary, since the local computer is already the default; creating a one-element array was also unnecessary because PowerShell would have done that anyway. + +"powershelleanpeoplesfront" offered one of the Invoke-Command approaches we saw: + + +`icm{gwmi cim_operatingsystem|ft psc*,*j*,v*,@{n='BIOSSerial';e={(gwmi win32_bios).SerialNumber}}}-cn . +`Basically the same idea. In this case, Format-Table is being used as an alternate for Select-Object. Within the scope of the puzzle, they're doing the same thing; the only downside to using Format-Table is that the output can't then be piped on to very many other cmdlets. So in a more real-world scenario, Select-Object offers more flexibility. + +Paal had one of the "who cares about the optional challenges?" answers (which is totally fine, as it's a lot easier to read!!!) - a lot of people came up with something similar to this. + + +`# https://powershell.org/2015/07/04/2015-july-scripting-games-puzzle/ +Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName $Computers | Format-Table -AutoSize PSComputerName,ServicePackMajorVersion,Version,@{l="BIOSSerial"; e={(Get-CimInstance -ClassName Win32_BIOS -ComputerName $_.PSComputerName).SerialNumber}} +`Again, note the use of Format-Table. Within the scope of this puzzle, it's fine - but make sure you know why Select-Table can do more or less the same thing, and how it differs from formatting. + +Joshua Wortz used pipeline input to save some space: + + +`@('Comp1','Comp2')|gcim win32_operatingsystem|ft PSC*,*j*,V*,@{N="BIOSSerial";E={(gwmi win32_bios -cn $_.pscomputername).serialnumber}} +`By piping in the computer names, you eliminate the need to manually specify -ComputerName. However, Joshua could have eliminated the **@()** array construct; PowerShell usually treats comma-separated strings as arrays anyway, so you'd reduce your character count by three more that way. With the Win32_OperatingSystem class in particular, you also get a CSName property that could be used instead of PSComputerName, for ad additional reduction in character count. You'll notice that some entries used CSName, probably for that reason. The PSComputerName property wasn't added until PowerShell 3, also. + +Stephen Owen [posted an entry that included his thoughts][2], and that's something _everyone_ is welcome, and encouraged, to do. It's super-useful to everyone in the community to see your thought process as well as your solution! Stephen also had the same learning moment that Boe had, which was that the output of Read-Host is a single string, not the array you need in order to feed the names to a parameter. That's valuable knowledge! Several others, based on their solutions' use of -Split or the Split() method, learned the same thing. + +"kvprasoon" has an absolutely unique approach: + + +`foreach($O in "Win32_operatingsystem","win32_bios"){if($O -eq "win32_bios"){$r+=(gwmi $O|select @{E="Serialnumber";L="BIOS Serialnumber"},Pscomputername,@{E={$r.servicepackmajorversion};L="servicepackmajorversion"},@{E={$R.version};L="version"})} else{[array]$r+=(gwmi $O|select @{E={""};L="Serialnumber"},Pscomputername,servicepackmajorversion,version)};$R[1]} +`I think that's probably _way_ more code than anyone else wrote, and having it as a one-liner makes it pretty tough to read, but it's definitely an interesting approach. I think, though, that this demonstrates how _not_ to use the pipeline in PowerShell. This is really structural code, and it doesn't let PowerShell do most of the work that it's willing to do. But hopefully everyone can learn a little bit by comparing this to some of the more commonly offered patterns, including those I've shared here. For the record, the same user also posted other, better solutions; in the future, we ask folks to post just one submission, to make the read-through a little easier. + +I hope everyone found this puzzle to be fun, a little challenging, and perhaps learned something new. Two notes going forward: + + * **Please post only one solution. **Keep in mind that you can always go back and edit your Gist, and we'll always pull the most recent one, so there's no need to re-post a new solution if you want to change something. + * **Please use Gists, as indicated in the instructions. **That's different from a regular GitHub URL, and it's not the same as just pasting code into a comment.  + +If you're a blogger, you are **more than welcome** to create a blog article about your solution; just add that article's URL to the comment with your Gist URL. + +See you in a little bit with next month's puzzle! + + [1]: https://powershell.org/2015/07/04/2015-july-scripting-games-puzzle/ + [2]: https://gist.github.com/1RedOne/e2a89f1a2ec5413d2c37#file-july-2015-powershell-challenge diff --git a/content/articles/2015/07/_index.md b/content/articles/2015/07/_index.md new file mode 100644 index 000000000..d871daf1b --- /dev/null +++ b/content/articles/2015/07/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from July 2015" +description: "PowerShell.org Articles published in July 2015." +--- diff --git a/content/articles/2015/07/building-a-test-lab-the-basics-part-1-rootca/index.md b/content/articles/2015/07/building-a-test-lab-the-basics-part-1-rootca/index.md new file mode 100644 index 000000000..44d3dc4ee --- /dev/null +++ b/content/articles/2015/07/building-a-test-lab-the-basics-part-1-rootca/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2015-07-15-building-a-test-lab-the-basics-part-1-rootca/ +title: "Building a test lab : The basics Part 1 RootCA" +authors: + - David Jones +date: "2015-07-16T04:16:28+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/07/building-a-test-lab-the-basics-part-1-rootca/ +--- + +Part of building a functional test lab is being able to deal with cattle and not pets. With that in mode I'm writing a series about the script necessary to build a production like lab for testing DSC, and be able to to tear it down and rebuild it with little effort. + +Part 1 is about bootstrapping DSC for the Root CA. and doing so without using plaintext passwords. + +I would welcome some feedback on both my methods and writing style. + +[Building the basics Part 1 | PKI: RootCA][1] + + [1]: https://bladefirelight.wordpress.com/2015/07/16/building-the-basics-part-1-pki-rootca/ diff --git a/content/articles/2015/07/curious-about-powershell-cruise-heres-how-to-learn-more/index.md b/content/articles/2015/07/curious-about-powershell-cruise-heres-how-to-learn-more/index.md new file mode 100644 index 000000000..d2f1bce74 --- /dev/null +++ b/content/articles/2015/07/curious-about-powershell-cruise-heres-how-to-learn-more/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2015-07-24-curious-about-powershell-cruise-heres-how-to-learn-more/ +title: "Curious about PowerShell Cruise? Here's how to learn more." +authors: + - Don Jones +date: "2015-07-24T19:58:17+00:00" +categories: + - Announcements +aliases: + - /2015/07/curious-about-powershell-cruise-heres-how-to-learn-more/ +--- + +I'm stupid-excited about [PowerShell Cruise][1]. Did you know you can register now for just $500, which is fully refundable up to a point? And that doing so NOW gets you awesome amenities like free Internet minutes or liquor packages? Did you know I'm speaking? Did you...  + +Wait. You probably have a ton of questions, especially if you've never cruised. So on Wednesday July 29, at 4pm Pacific, get your answers. Go to https://attendee.gotowebinar.com/register/4206318439550861826 to register for a webinar. I'll host, and I'll be joined by the event organizers, as well as the travel agency that's handling the bookings. There's literally no PowerShell Cruise question these brave souls can't answer. + +Did you know the conference portion of the cruise - the technical conten - will be FREE? Did you know two people can sail for under $1900, inclusive of meals, snacks, and most onboard activities? NO, you did not know, and that's why you need to at least show up and get the facts. We will record the whole thing, too. + +I want to emphasize that this isn't a PowerShell.org event - we are just being as hugely supportive as possible to the bold individuals who are trying to do this thing for their community, at no profit for themselves, and with (probably) more than a few evil eyes from their spouses. So show your love and join the webinar!!! + + [1]: Http://PoshCruise.org diff --git a/content/articles/2015/07/curious-about-the-poshcruise-ask-questions-here/index.md b/content/articles/2015/07/curious-about-the-poshcruise-ask-questions-here/index.md new file mode 100644 index 000000000..90a57ff90 --- /dev/null +++ b/content/articles/2015/07/curious-about-the-poshcruise-ask-questions-here/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2015-07-14-curious-about-the-poshcruise-ask-questions-here/ +title: "Curious About the #PoshCruise? Ask Questions Here." +authors: + - Don Jones +date: "2015-07-14T16:12:57+00:00" +categories: + - Announcements +aliases: + - /2015/07/curious-about-the-poshcruise-ask-questions-here/ +--- + +Jeffrey Langdon, Doug Finke, and untold others are putting together [PoshCruise][1], a PowerShell Cruise Conference. I wanted to make sure everyone knew about it, because it (A) stands to be a lot of run, and (B) offers some special pricing through this month. + +The "conference" itself is free - you just have to pay for your cruise. There'll be presentations (I'm guessing mainly on the "at sea" days of the 7-day trip, although personally I've rented a beach cabana on Great Stirrup Cay and will hold forth on technical topics over tropical cocktails).  + +Cruises can be a pretty good deal in terms of value. NCL, the cruise line, is really clear about [what's included][2] and what's extra. And, unlike many lines, NCL's "Freestyle Cruising" means you're not locked into a schedule for things like meals - you just eat when you want, where you want, in a number of different venues. I plan to inject PowerShell into every possible minute of the cruise - PowerShell in the pool, DSC in the whiskey bar, Toolmaking in the buffet, you name it. + +If you've not cruised before, and are curious about how different stuff works, pop a question into the comments here. I've cruised a _ton, _so I'll do my best to answer - and if something comes up about the PowerShell aspect of the cruise, I'll grab one of the guys to drop an answer here. + +At a per-person price as low as $950 (based on double occupancy), it's amongst the cheapest conferences you'll find. You'll need to factor in airfare to NYC, about $110 in shipboard service charges, but apart from that you don't _have_ to spend any more. That covers your food, beverages like tea and water, and most shipboard activities. Packages can lower the price of alcoholic or soft drinks (especially if you book early, when those packages are either included in the price or are heavily discounted), even. + +So... whatcha wanna know about a PoshCruise? + + [1]: http://poshcruise.org + [2]: https://www.ncl.com/faq/cruise-fare-includes diff --git a/content/articles/2015/07/even-vaguely-considering-powershell-cruise-read-this-right-now/index.md b/content/articles/2015/07/even-vaguely-considering-powershell-cruise-read-this-right-now/index.md new file mode 100644 index 000000000..3fbb01f0e --- /dev/null +++ b/content/articles/2015/07/even-vaguely-considering-powershell-cruise-read-this-right-now/index.md @@ -0,0 +1,37 @@ +--- +url: /articles/2015-07-29-even-vaguely-considering-powershell-cruise-read-this-right-now/ +title: "[UPDATED] Even Vaguely Considering PowerShell Cruise? READ THIS RIGHT NOW." +authors: + - Don Jones +date: "2015-07-29T19:02:14+00:00" +categories: + - Announcements +aliases: + - /2015/07/even-vaguely-considering-powershell-cruise-read-this-right-now/ +--- + +It's no secret that I'm a big fan of next year's [PowerShell Cruise][1] and am excited for the folks who are organizing it. Tonight's [webinar][2] (which they'll post to their YouTube channel) will be a chance for you to learn more. + +But. + +If you've never cruised before, you may not be aware of how the majority of the cruise industry works: + + * Your cruise price includes your room, and is based on two people staying in the room together. + * Your cruise price includes most food on the ship - certain specialty restaurants may charge a la carte like a normal restaurant, or may have a small ($25-ish) per-person charge to dine there. If they have the per-person charge, everything on the menu is  then included at no extra charge. + * Your drinks cost extra - everything but water, tea, and plain coffee in most cases. Even soda is an extra price. + +That's why I want you to think **really really hard** about what I'm going to write next. + +If you **put a deposit down for the cruise before Friday July 31 2015, you can get all beverages included for just $68 extra per person. **That's all your soda. All your drinks (including cocktails up to $15 each). If you plan to have one nice glass of wine per day, and then drink cola, this will pay for itself easily.  + +The deposit is $250 per person, meaning $500 per stateroom. And it's fully refundable - **you can get the entire deposit back** - until April 2016. **So you don't need to make up your mind yet, **but if you don't do the deposit **now** you can't get the cheap drink package. Sure, you could buy it later, but it'll run you another $350 or so per person, I believe.  + +Even if you're planning to take the kids, they can get the drink package too - it'll cover their soft drinks for the entire cruise.  + +So look - I don't want anyone to miss this opportunity just because they... well, _missed_ it. And keep in mind, this is the _first of a kind event, _and there will be swag to prove you were there. So there's a lot of reasons to _at least consider going_ - and if you're considering it, get that deposit in _right now_ so you can score the drink package, at the very least. [Call the travel agency that's handling the bookings][3] (don't e-mail, you want this done _now). _ + +Thank you. This ends the public service announcement. Resume shelling. + + [1]: http://poshcruise.org + [2]: https://t.co/StJPSxbexE + [3]: http://poshcruise.org/booking.html diff --git a/content/articles/2015/07/introduction-to-powershell/index.md b/content/articles/2015/07/introduction-to-powershell/index.md new file mode 100644 index 000000000..0ea6459c8 --- /dev/null +++ b/content/articles/2015/07/introduction-to-powershell/index.md @@ -0,0 +1,85 @@ +--- +url: /articles/2015-07-31-introduction-to-powershell/ +title: Introduction to Powershell +authors: + - Stephen Moore +date: "2015-07-31T11:07:47+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/07/introduction-to-powershell/ +--- + +Hi Guys, + +I'm going to have a PowerShell ramble on a semi regular basis. What prompts me to write here on powershell.org is that I love powershell. I makes my job so much better. I'm an IT Pro and work for a large ish world spanning company. I mostly work with windows servers but get to work with other technology too. Like VMware and Citrix for example. The other thing I want to point out is that I'm not a programer. I don't know VB Script and no one taught me +PowerShell +. There are many people though that helped me on my PowerShell Journey through their books, blogs, postings, and videos.  + +I want to spread the word of PowerShell. I want people to understand that it helps in so many ways. I've learned about wmi, .net classes and all the properties of an AD object. This helps me understand the computers I work with every day. With a GUI these things are under the hood and no one needs to know too much about them. With  +PowerShell you naturally learn about these things as you come across them. Didn't know that you can install VMware tools without having to restart? Well if you use PowerShell there's a switch that stands out that makes it obvious.  It makes life easier. + + +One thing I really love about  +PowerShell is that it is very consistent (well mostly). So once you learn the basics anything else you want to do is kind of the same. I don't need complication. I have so many technologies to learn ( the System Center Suite comes to mind) that I really don't want to waste my time learning where in the GUI Microsoft have hidden what I'm looking for this time. You see, I have always thought computers existed for a reason. To automate things. To do the work for us. To make life easier. We have i7 processors. They are so powerful.. just amazing. So why as an admin would you want to be clicking on menus and buttons. Hit the PowerShell go button and let the computer do all the work. It's liberating! + + +Now I know what some people think. It's too hard. And it is hard. There are people that are so good at powershell that it just blows me away. But what I want to stress is that you don't have to be that good. You can be, but you don't have to be. So take it one step at a time and then it's not so hard. But it's like a snow ball rolling down hill. If you use it your knowledge will grow exponentially. So I want to stress 3 things this week. + +1.   You _can_ learn  +PowerShell. + + +2.    +PowerShell has a shell..... Don't know what a shell is? It's a window into the operating system that lets you communicate with it.  So open PowerShell and start communicating. Always have the shell open. If you want to open the temp folder on C drive. Type invoke-item c:\temp and press enter. Now you think of something to do! One step at a time. If you're not in a hurry try and find out how to do it in powershell. Remember you are just starting out so don't be hard on yourself. + + +3.   Of course  +PowerShell is a scripting language as well. So think of something to automate. Maybe there is a process you have to restart everyday. That old server with the legacy app. Automate it! It will be a great first script. And don't forget that you can use scheduled tasks to help with the automation. And it's not that hard to send an email letting you know it's been done with the send-mail cmdlet. Enjoy. Don't start with something critical. + + + + +I haven't told you specifically how to do things on purpose. There are heaps of books, technet articles and other plog posts. Google is your best friend. (sorry Bing). So today I got an alert from Operations Manager telling me a C drive on a server was running out of space. It wasn't the usual suspects like a large profile or log files etc. I didn't want to look through every folder and I can't use programs like treesize for policy reasons. So I wrote a quick script that looped through all the folders, measured the length of the files, added them together and let me know where the space had gone. I used Google. And I confess I do not understand 100% how the cmdlet for measuring stuff works. You're probably smarter than me so don't worry.  I can worry about that later. I worked out how to use it to do what I wanted. That was enough for today. I got the job done and the Server fixed. I don't know how I would have found the solution without  +PowerShell. In case you are curious the little script looked like this. Open the Powershell ISE. Make sure under view you change it so you can see the scripting pane. Poke around.... explore, you'll find it.  + + + + + +# so this bit gets the names of all the directories and stores them in a Variable called $folders. I know! It's so cool! + + +$folders = Get-ChildItem \\Yourservername\C$\windows -force | where {$_.mode -like "\*d\*"} + + + +#And this bit goes through each one and counts the file lengths adding them together. It prints out the name of the folder followed by how big it is. Powershell is like magic, what can I say. + +foreach ($folder in $folders) + +{ + +$folder.name + +$colItems = (Get-ChildItem "\\ +Yourservername +\C$\windows\$($folder.name)" -Recurse -force | Measure-Object -Property length -Maximum -Minimum -Average -Sum) + +"{0:N2}" -f ($colItems.sum / 1MB) + " MB" + +} + + + +Now there are many different ways to write the same script. For me the important thing is that I understand it. In more permanent or bigger scripts in production make sure you explain each part of the script in detail. # lets you write in the script without powershell reading it when it's running the script. Keep this script. Start a collection of all your scripts. You can safely keep them all in a folder in text files. And always test scripts first!!!. Do not just run them. As a rule of thumb though if the cmdlet is get-..... then you are safe enough. The get- cmdlets just read information and then display it for you. For example get-ADuser -filter \* will just give you a list of all your users in Active Directory. If you use remove-ADuser -filter \* the results will be far more tragic... (Please don't try it!) + + + +Thanks for reading. Comment if you feel you want to. The blogs is titled introduction to +PowerShell. Should be called introduction to blogging....  +It's my first ever blog so sorry if it's a bit rough. I'll write some more PowerShell insights next week. I sincerely hope you start your  +PowerShell journey or continue with it. The rewards are definitely worth it.  + + +Steve diff --git a/content/articles/2015/07/mississippi-powershell-user-group-virtual-meeting-july-14th-2015/index.md b/content/articles/2015/07/mississippi-powershell-user-group-virtual-meeting-july-14th-2015/index.md new file mode 100644 index 000000000..8c4365995 --- /dev/null +++ b/content/articles/2015/07/mississippi-powershell-user-group-virtual-meeting-july-14th-2015/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2015-07-07-mississippi-powershell-user-group-virtual-meeting-july-14th-2015/ +title: Mississippi PowerShell User Group Virtual Meeting – July 14th 2015 +authors: + - Mike F Robbins +date: "2015-07-07T15:19:57+00:00" +aliases: + - /2015/07/mississippi-powershell-user-group-virtual-meeting-july-14th-2015/ +--- + +Join us virtually on Tuesday, July 14th at 8:30pm Central Time when PowerShell MVP Sean Kearney will present “_**Introduction to Windows PowerShell**_”. + +Windows PowerShell is not a difficult system to work with however sometimes, like with anything in life, you stare at it and say “Where do I even start?”. In this session we will do a very simple overview of Windows PowerShell and what it is and how to make it useful at very simple level. It comes directly from a person who had Zero time to learn about any technology in his first IT Job, Windows PowerShell MVP, Sean Kearney. You might not master PowerShell after this session, but you certainly should be a little more comfortable to open up the door and play afterwards. + +Visit the [Mississippi PowerShell User Group][1] website to learn more about Sean and to find out more details about this month’s meeting. + +The Mississippi PowerShell User Group Meetings are held online (via Microsoft Lync) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info][2]” section. + +Register via [EventBrite][3] to receive the URL for this meeting. + +µ + + [1]: http://mspsug.com/2015/06/30/mspsug-virtual-meeting-introduction-to-windows-powershell-on-tuesday-july-14th-at-830pm-cdt/ + [2]: http://mspsug.com/attendee-info/ + [3]: http://mspsug.eventbrite.com/ diff --git a/content/articles/2015/07/nyc-powershell-usergroup-meets-on-july13/index.md b/content/articles/2015/07/nyc-powershell-usergroup-meets-on-july13/index.md new file mode 100644 index 000000000..a6d99026b --- /dev/null +++ b/content/articles/2015/07/nyc-powershell-usergroup-meets-on-july13/index.md @@ -0,0 +1,76 @@ +--- +url: /articles/2015-07-10-nyc-powershell-usergroup-meets-on-july13/ +title: NYC Powershell Usergroup meets on July 13th +authors: + - Sunny Chakraborty +date: "2015-07-10T18:03:27+00:00" +categories: + - Events +aliases: + - /2015/07/nyc-powershell-usergroup-meets-on-july13/ +--- + +We have an exciting line-up for the July Powershell User-Group meeting. +Powershell MVP, Tome Tanasovski will be presenting a beginner’s track on Powershell covering File Management, and Date/Time manipulations. +We also have Powershell MVP Doug Finke, who will be covering Pester. + +**AGENDA:** + +**Tome Tanasovski**: +File management +- Managing paths +- Reading data from a file +- Finding strings in a collection of files +- XML and CSV file manipulation +- Exporting data to an HTML page + +Handling dates and time +- Date and time formatting and custom date formats +- Creating and updating a datetime object +- Date comparison +- Timespan datatype + +**Bio +** Tome is an executive for a market-leading global financial services firm in New York City where he focuses on automation, private cloud, and distributed computing. He is the founder and leader of the New York City PowerShell User group, a blogger, and speaks regularly at conferences and user groups. In 2011, he became a cofounder of the NYC Techstravaganza, coauthored the Windows PowerShell Bible, and received the title of Honorary Scripting Guy from the Hey Scripting Guy! blog. Tome has also received the MVP award from Microsoft for the last five years in Windows PowerShell. +**Blog**: +**Twitter**: + +** +Doug Finke: +** Testing PowerShell Scripts with Pester. +This will be a demo heavy presentation showing how to test scripts and test Modules +- Pester, Why Test, How to Test, Mocks. +- Visual Studio PoshTools Addin + +**Bio** +Doug Finke, author of _PowerShell for Developers_, 7 time MVP recipient and an international professional speaker. Doug works at Start-Automating, a company that builds advanced PowerShell tools, provides PowerShell training and PowerShell consulting. You can catch up with Doug at his blog Development in a Blink at +**Blog:** +**Twitter:**   + +Pizza is being sponsored by SAPIEN, Makers of PowerShell Studio and Primal Script + +[![SapienLogo3](https://powershell.org/wp-content/uploads/2015/06/SapienLogo3.png)][1] + +6 pm - 6:30 - Pizza and catching up +6:30 - 7:15 – Tome Tanasovski. +7:15 - 7:45 – Doug Finke. +8ish - ?? - Drinks at Beer Authority (next to Port Authority) + +You must RSVP via Event Brite in order to attend: [Register Here][2]! + +[![EventBriteLogoEventBriteLogo](https://powershell.org/wp-content/uploads/2015/06/EventBriteLogo.png)][2] + +**Meeting Date:** +Monday, July 13, 2015 - 18:00 - 20:00 + +**Location** + +Microsoft - Times Square - 6th Floor +11 Times Square +New York, NY 10018 +United States +See map: [Google Maps][3] + + [1]: http://www.sapien.com + [2]: https://www.eventbrite.com/e/nyc-powershell-ug-doug-finke-introduction-to-pester-tome-managing-datetime-with-powershellfile-tickets-17726352999 + [3]: https://www.google.com/maps/place/11+Times+Square,+New+York,+NY+10036/@40.7567203,-73.9896494,17z/data=!3m1!4b1!4m2!3m1!1s0x89c258534f8455ad:0x55d4588f7b23a524 diff --git a/content/articles/2015/07/philadelphia-powershell-user-group-meeting-august-6th-2015/index.md b/content/articles/2015/07/philadelphia-powershell-user-group-meeting-august-6th-2015/index.md new file mode 100644 index 000000000..aa61c8dc3 --- /dev/null +++ b/content/articles/2015/07/philadelphia-powershell-user-group-meeting-august-6th-2015/index.md @@ -0,0 +1,51 @@ +--- +url: /articles/2015-07-12-philadelphia-powershell-user-group-meeting-august-6th-2015/ +title: Philadelphia PowerShell User Group Meeting – August 6th 2015 +authors: + - John Mello +date: "2015-07-13T03:40:33+00:00" +aliases: + - /2015/07/philadelphia-powershell-user-group-meeting-august-6th-2015/ +--- + +Join us on Thursday, August 6th when [June Blender][1] will be conducting a hands on lab (in person!) called **Working with Classes in PowerShell** **5.0.** To participate in the lab, bring a laptop (or VM) with PowerShell 5.0, but it's not required! After that, we will review the results of the [ +July Scripting games puzzle +][2].  + +#### About June + + +June Blender is a technology evangelist for SAPIEN Technologies, Inc. +Formerly a Senior Programming Writer at Microsoft Corporation, she is best known for her work with the Windows PowerShell product team from 2006-2012. developing the help system and writing the Get-Help help topics for PowerShell 1.0 – 3.0. In other roles, June wrote content for the Azure Active Directory SDK and Azure PowerShell Help, Windows Driver Kits, Windows Support Tools, and Windows Resource Kits. +She lives in magnificent Escalante, Utah, where she works remotely when she's not out hiking, canyoneering, taking Coursera classes, or convincing lost tourists to try Windows PowerShell. +She is a Windows PowerShell MVP, a PowerShell Hero, an Honorary Scripting Guy, and a frequent contributor to PowerShell.org. Contact her at [ + +juneb@sapien.com + +][3] +and follow her on the +[ + +SAPIEN Blog + +][4] +and on Twitter at +[ + +@juneb_get_help + +](https://twitter.com/juneb_get_help) +. + + +Please [ +register +][5] if you plan to attend in person or online. The meeting URL to join us remotely will be included in your Eventbrite registration confirmation. + +[![Eventbrite - PhillyPosh August 6th 2015 - June Blender](https://www.eventbrite.com/custombutton?eid=17741751055)](http://www.eventbrite.com/e/phillyposh-august-6th-2015-june-blender-tickets-17741751055?ref=ebtnebregn) + + [1]: https://twitter.com/juneb_get_help + [2]: https://powershell.org/2015/07/04/2015-july-scripting-games-puzzle/ + [3]: mailto:juneb@sapien.com + [4]: http://www.sapien.com/blog/ + [5]: https://www.eventbrite.com/e/phillyposh-august-6th-2015-june-blender-tickets-17741751055?ref=ebtn diff --git a/content/articles/2015/07/phillyposh-07072015-meeting-summary-and-presentation-materials/index.md b/content/articles/2015/07/phillyposh-07072015-meeting-summary-and-presentation-materials/index.md new file mode 100644 index 000000000..9ae3003c7 --- /dev/null +++ b/content/articles/2015/07/phillyposh-07072015-meeting-summary-and-presentation-materials/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2015-07-13-phillyposh-07072015-meeting-summary-and-presentation-materials/ +title: PhillyPoSH 07/07/2015 meeting summary and presentation materials +authors: + - John Mello +date: "2015-07-14T00:51:36+00:00" +aliases: + - /2015/07/phillyposh-07072015-meeting-summary-and-presentation-materials/ +--- + +[John Mello](https://twitter.com/Iczer1) gave a presentation entitled “ConvertFrom-String Overview and Examples”. +[A copy of his demo scripts and presentation][1] +are available at our +[GitHub site][2] +. [TJ Turner](https://twitter.com/techguytj)'s presentation "[What's in your Toolbox](http://techguytj.com/whats-in-your-toolbox/)" is available at his [blog](http://techguytj.com/).  +[A recording of this meeting][3] +has been posted to our +[YouTube channel][4] +. + + + [1]: https://github.com/PhillyPoSH/2015-07-ConvertFrom-String + [2]: https://github.com/PhillyPoSH + [3]: https://www.youtube.com/watch?v=GGr3dQRi5nQ + [4]: https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg diff --git a/content/articles/2015/07/powershell-is-for-the-desktop-tech-as-well/index.md b/content/articles/2015/07/powershell-is-for-the-desktop-tech-as-well/index.md new file mode 100644 index 000000000..a32a056a2 --- /dev/null +++ b/content/articles/2015/07/powershell-is-for-the-desktop-tech-as-well/index.md @@ -0,0 +1,64 @@ +--- +url: /articles/2015-07-28-powershell-is-for-the-desktop-tech-as-well/ +title: Powershell IS for the desktop tech as well +authors: + - Brian Bourque +date: "2015-07-29T00:06:26+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/07/powershell-is-for-the-desktop-tech-as-well/ +--- + +Every day some one tends to ask me if there is a simpler way to do task A or B, and the minute I mention PowerShell the response is almost always the same, "yea i have been meaning to learn that but. This really saddens me for 2 reasons,  +1) Because PowerShell can and does make your life simpler  +2) i am already seeing peoples jobs get replaced when they fall behind in the skill and as more and more companies move closer to automation it will only get worse.  + +It saddens me even more so when I see co-workers who i have taken the time to write the scripts to improve the speed of resolution not use them either. then wounder why i am able to fix the same issue in a fraction of the time they have.  + +As you probably guessed from the title i am talking about people in the world of desktop technicians. the , in my opinion, unsung heroes of IT support.  +Powershell is not just for system admins, the local desktop guy can make his life much simpler by scripting out the simple stuff to save you time and money.  +here is an example,  +one of our clients has an issue with network printers getting jammed up if they do not print PDF documents as an image, once I had to do 3 or 4 of these i decided this took to long to fix, since we have to stop the print spooler, delete all the Print jobs and then restart then spooler again, and when you have 20-30 PCs to do this on i am sue you can guess this takes up a lot of our time. so I wrote a script to solve the issue, and it is really simple as well  + + + + +`/** + * function Start-Error49FixV3 +{ + [CmdletBinding()] + [OutputType([int])] + Param + ( + # Enter the Hostname of the Target PC(s) + [Parameter(Mandatory=$true, + ValueFromPipelineByPropertyName=$true, + Position=0)] + [string[]]$Computername + ) + Begin + { + } + Process + { + foreach ($Computer in $Computername) +{ + Invoke-Command -computername $Computer -ScriptBlock {Stop-Service -Displayname "Citrix Print Manager Service"} + Invoke-Command -computername $Computer -ScriptBlock {Stop-Service -Name spooler -force} + Remove-Item -Path \\$Computer\c$\Windows\System32\spool\PRINTERS\* -recurse + Invoke-Command -computername $Computer -ScriptBlock {Start-Service -Displayname "Citrix Print Manager Service"} + Invoke-Command -computername $Computer -ScriptBlock {Start-Service -Name spooler} + Get-Service -Computername $Computer -name Spooler | Select name,status,$Computer | sort $Computer |format-table -AutoSize + Get-Service -Computername $Computer -Displayname "Citrix Print Manager Service" | Select name,status,$Computer | sort $Computer |format-table -AutoSize +} + } + End + { + } +} + */ +`This simple line of Code was able to turn this process from being done after hours to a normall 20 minute fix for most of the clients locations, not only allowing us to get back to other issues faster but also helpinn to make the client happy since they no longer ad to wait a day for the printer to get backup and running. +This is just one example, i could fill up your PC with other even simpler examples but instead i would rather show you. so over the course of the blog I am going to introduce you to a verity of topics from how to right clean code, how to test it safely, and lastly how to get a devops platform discussion into your work place for this so your code can get properly validated and confirmed safe in the environment. +also if you have any questions on anything to do with PowerHhell feel free to drop it in the comments below or e-mail me @ Brian.Bourque@live.com +until next time guys happy scripting diff --git a/content/articles/2015/07/powershell-summit-na-2016-call-for-topics-coming-soon/index.md b/content/articles/2015/07/powershell-summit-na-2016-call-for-topics-coming-soon/index.md new file mode 100644 index 000000000..4f2484a32 --- /dev/null +++ b/content/articles/2015/07/powershell-summit-na-2016-call-for-topics-coming-soon/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2015-07-28-powershell-summit-na-2016-call-for-topics-coming-soon/ +title: PowerShell Summit NA 2016 – call for topics coming soon +authors: + - Richard Siddaway +date: "2015-07-28T15:28:45+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2015/07/powershell-summit-na-2016-call-for-topics-coming-soon/ +--- + +The North American PowerShell Summit 2016 will take place at the +Meydenbauer center in Bellevue WA. on April 4-6 2016. The Summit is a community event, with community based speakers. That means we need **you **to submit sessions. Members of the PowerShell team will be attending, and speaking, as in previous years as will a number of PowerShell MVPs. One of the goals of PowerShell.org is to help build the PowerShell community and that means helping and developing new speakers. You don't have to be an established speaker to present at the Summit - just knowledgeable about your topic and enthusiastic about PowerShell. + + +We'll be posting the official "Call for Topics" next week. This is a warning to get you thinking about topics you can present at the Summit.  Standard sessions are 45 minutes with Q&A though expect discussions to continue over coffee. + +This year we're expecting to be able to cover at least some of the hotel room costs for speakers - more details next week. + +In the mean time - start thinking of those ideas and be ready to submit them when we open up the event site for speaker submissions. Established expert or new-comer - we need your sessions to make the Summit work. We've had 3 excellent NA Summits so far - your session will help make 2016 the best one yet. diff --git a/content/articles/2015/07/rabbitmq-and-powershell/index.md b/content/articles/2015/07/rabbitmq-and-powershell/index.md new file mode 100644 index 000000000..d0a6692e4 --- /dev/null +++ b/content/articles/2015/07/rabbitmq-and-powershell/index.md @@ -0,0 +1,73 @@ +--- +url: /articles/2015-07-07-rabbitmq-and-powershell/ +title: RabbitMQ and PowerShell +authors: + - pscookiemonster +date: "2015-07-07T11:22:36+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/07/rabbitmq-and-powershell/ +--- + +Have you ever needed to communicate between scripts, perhaps running on different servers and in different languages?  Did you use a non-standard "messaging" solution like the file system or a SQL database? Did you try to avoid this and squeeze everything into a monolithic, delicate script? + + + + + + + + + [RabbitMQ](http://ramblingcookiemonster.github.io/RabbitMQ-Intro/) is a solid messaging solution that happens to have a handy REST API and .NET client, which means we can use PowerShell! + + + + + + + + + Wrote a quick hit on setting up a simple RabbitMQ deployment and using PowerShell to manage the solution and send and receive messages. Thanks go to Mariusz Wojcik and Chris Duck for writing and sharing the PowerShell modules that were tweaked for this article. + + + + + + [RabbitMQ and PowerShell](http://ramblingcookiemonster.github.io/RabbitMQ-Intro/) + + + + + + + + + Here's an example showing two independent PowerShell sessions talking to each other over a RabbitMQ server: + + + + + + + + + [![listener-small](https://powershell.org/wp-content/uploads/2015/07/listener-small.gif)](https://powershell.org/wp-content/uploads/2015/07/Listener.gif)[](https://powershell.org/wp-content/uploads/2015/07/Listener.gif) + + + + + + + + + Is this something you could use in your solutions? Hit the link and check it out - pull requests and input would be welcome. + + + + + + + + + Cheers! diff --git a/content/articles/2015/07/want-to-blog-at-powershell-org/index.md b/content/articles/2015/07/want-to-blog-at-powershell-org/index.md new file mode 100644 index 000000000..08e9482ae --- /dev/null +++ b/content/articles/2015/07/want-to-blog-at-powershell-org/index.md @@ -0,0 +1,35 @@ +--- +url: /articles/2015-07-01-want-to-blog-at-powershell-org/ +title: Want to Blog at PowerShell.org? +authors: + - Don Jones +date: "2015-07-01T22:16:52+00:00" +categories: + - Announcements + - News +aliases: + - /2015/07/want-to-blog-at-powershell-org/ +--- + +PowerShell.org was never meant to be a small group of people doing good - it was meant to be a place where _all of us_ can do good for each other. And that's why **everyone is invited to blog here. ** +Yup, even you. +If you'd like blogging permissions added to your account, just e-mail webmaster@ with your site username, and we'll make it so. Now, I do realize that a lot of folks would much rather blog in their own space, and that's totally, 100% cool. But, if you'd like to blog here, we only have a few rules. + +## Your Content is YOUR Content + +If you ever decide you don't want to blog here anymore, we'll be happy to export your articles (in whatever form WordPress supports at the time) and give you that archive. You can then do whatever you want with your content. + +## Minimize Dupli-Blogging + +We ask that, if you post an article here, that you not also post it in a ton of other places. This isn't an "exclusivity" thing at all - it's that search engines like Google "penalize" sites for carrying duplicate content, and that would make it harder for people to find other resources that we offer here. +That said, you're more than welcome to write a post elsewhere, and then write a shorter, "introductory" post here, pointing to your "main" article elsewhere. That's absolutely OK. We just ask that the shorter post you submit here be entirely original - that is, not just an excerpt of your longer post, but something uniquely written for this site. Again - that's just us trying to be square with the Goog. +For example, you might write a quick "tip" article here that offers someone genuine learning value, and then point them to a longer article that includes additional, related material on your own site. + +## That's It + +PowerShell.org is meant to be a service to _you_ and to the entire community. We get over 200,000 hits a month, so we're a pretty decent place for your writing to get more exposure - and to help more people. But we also want to be a respectful player in the community, so aside from the above ground rules, we really don't want to restrict you or ask you to do something that might not be good for _you. _ + +## Well, Also This + +We've also created some generic artwork that you can set as the "Featured Image" for your post. When your post is fresh, it'll cycle through the front page of PowerShell.org in the "carousel" at the top of the page. Having an image makes it a little sexier. Just click "Set featured image" and then choose one of the media items we've provided. You'll find them in the Media Library from December 2015 (there's a drop-down list to filter to that month). +We look forward to hearing from you! diff --git a/content/articles/2015/08/_index.md b/content/articles/2015/08/_index.md new file mode 100644 index 000000000..cb4cfa8c7 --- /dev/null +++ b/content/articles/2015/08/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from August 2015" +description: "PowerShell.org Articles published in August 2015." +--- diff --git a/content/articles/2015/08/abstraction-and-configuration-data/index.md b/content/articles/2015/08/abstraction-and-configuration-data/index.md new file mode 100644 index 000000000..5ee08f988 --- /dev/null +++ b/content/articles/2015/08/abstraction-and-configuration-data/index.md @@ -0,0 +1,45 @@ +--- +url: /articles/2015-08-16-abstraction-and-configuration-data/ +title: Abstraction and Configuration Data +authors: + - pscookiemonster +date: "2015-08-16T20:55:20+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/08/abstraction-and-configuration-data/ +--- + +Modularity and abstraction are a huge benefit in scripting and coding. Which of the following blocks of code are easier to understand? + + +`$SQLConnection = New-Object System.Data.SqlClient.SQLConnection +$SQLConnection.ConnectionString = 'Server=SqlServer1;Database=MyDB;Integrated Security=True;Connect Timeout=15' +$cmd = New-Object system.Data.SqlClient.SqlCommand("SELECT * FROM Table1",$SQLConnection) +$ds = New-Object system.Data.DataSet +$da = New-Object system.Data.SqlClient.SqlDataAdapter($cmd) +[void]$da.fill($ds) +$SQLConnection.Close() +$ds.Tables[0] +`Or... + + +`# +Invoke-Sqlcmd2 -ServerInstance SQLServer1 -Database MyDB -Query 'SELECT * FROM Table1' +`If you aren't a masochist, [the latter][1] probably looks a bit nicer. Oh, and it offers other parameters, error handling, parameterized SQL queries, built in help, and other benefits the .NET code block misses. + +The takeaway? You should be writing or using Advanced Functions and Modules, not monolithic scripts and snippets. Do it for yourself. Do it for anyone who might have to read your code down the line. + +Some modules can benefit from persistent configurations. If you have a module that wraps a REST API, you might want to allow the end user to specify a default URL, rather than specify it every time they run a command. + +This begs the question: what data format should you use? XML? JSON? YAML? INI? + +[This is a quick hit on options for storing configuration data in PowerShell][2]. + +Don't be ashamed. Many of us sysadmins pride ourselves on learning through experience. That doesn't mean you need to re-invent all the wheels. It can be a great learning experience to write your own code and functions, but at the end of the day, there's nothing wrong with finding the best tool for the job, and sticking with it. Developers make a living writing code, yet they all borrow existing libraries. + +Once you start writing modules and advanced functions, be sure to [share them with the community][3]! + + [1]: https://raw.githubusercontent.com/RamblingCookieMonster/PowerShell/master/Invoke-Sqlcmd2.ps1 + [2]: http://ramblingcookiemonster.github.io/PowerShell-Configuration-Data/ + [3]: http://stevenmurawski.com/powershell/2015/8/moving-in-to-open-source diff --git a/content/articles/2015/08/august-2015-scripting-games-puzzle/index.md b/content/articles/2015/08/august-2015-scripting-games-puzzle/index.md new file mode 100644 index 000000000..8708ecef8 --- /dev/null +++ b/content/articles/2015/08/august-2015-scripting-games-puzzle/index.md @@ -0,0 +1,49 @@ +--- +url: /articles/2015-08-01-august-2015-scripting-games-puzzle/ +title: 2015-August Scripting Games Puzzle +authors: + - Don Jones +date: "2015-08-01T13:10:40+00:00" +categories: + - Scripting Games +aliases: + - /2015/08/august-2015-scripting-games-puzzle/ +--- + +Our August 2015 puzzler tests your ability to retrieve data from the Web. If you've never done this before, it can be a real brain-bender - but don't overthink it; experts can probably pull this off in a one-liner if they're using a newer version of PowerShell! + + + +## **Instructions** + +The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month's puzzle. You can find them all at https://powershell.org/category/announcements/scripting-games/. Many puzzles will include optional challenges, that you can use to really push your skills. + +**To participate**, add your solution to a public Gist (http://gist.github.com; you'll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post.  +**Only post one entry per person. You are not allowed to come back and post corrected or improved versions. If you do, all of your posts will be ignored. **However, remember that you can always go back and edit your Gist. We'll always pull the most recent one when we display it, so there's no need to post multiple entries if you want to make an edit. + + +Don't forget the [main rules and purpose of these monthly puzzles][1], including the fact that you won't receive individual scoring or commentary on your entry. + +**User groups are encouraged to work together** on the monthly puzzles. User group leaders should submit their group's best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most "favorite" entries of the year will win a grand prize from PowerShell.org. + +##   + +## **Our Puzzle** + +At www.telize.com/geoip, you'll find a JavaScript Object Notation endpoint. It's public. Your goal is to get PowerShell to display something like the following (because this is based on _your_ IP address, the property values will be different than what's shown here): + + +`longitude latitude continent_code timezone +--------- -------- -------------- -------- +-115.1685 36.2212 NA America/Los_Angeles +`Being able to query information from the Web - often in XML or JavaScript Object Notation - is an important integration skill. PowerShell can actually make it pretty easy. Although this challenge _can_ be solved using a one-liner, you could also go further and write a complete "Get-GeoInformation" function around it. However, keep in mind that a function would not normally (a) limit the data that's output or (b) pre-format the data. Why not? + +**Challenges:** + + * Try to do this in a one-liner, but spell out all command and parameter names. + * Write an advanced function that provides a complete Get-GeoInformation "wrapper" around this endpoint. + * Along with your entry, include the endpoint for another XML or JavaScript Object Notation web service that you think is cool, along with a brief notation of what it does + + + + [1]: https://powershell.org/?p=2574 diff --git a/content/articles/2015/08/continuous-integration-continuous-delivery-and-psdeploy/index.md b/content/articles/2015/08/continuous-integration-continuous-delivery-and-psdeploy/index.md new file mode 100644 index 000000000..9a1eaff2a --- /dev/null +++ b/content/articles/2015/08/continuous-integration-continuous-delivery-and-psdeploy/index.md @@ -0,0 +1,106 @@ +--- +url: /articles/2015-08-08-continuous-integration-continuous-delivery-and-psdeploy/ +title: Continuous Integration, Continuous Delivery, and PSDeploy +authors: + - pscookiemonster +date: "2015-08-08T15:16:01+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +aliases: + - /2015/08/continuous-integration-continuous-delivery-and-psdeploy/ +--- + +Are you starting to use version control at work? Are you being pestered by fellow PowerShell aficionados to start learning version control? Did you catch the PowerShell.org [Crash Course in Version Control](https://powershell.org/event/techsession-a-crash-course-in-version-control-and-git/) and pick up some Git and GitHub experience? Shameless plug, sorry : ) + + + Version control is just the start. What if we want to automate testing? To deploy our files, folders, and other artifacts out to production or other environments? Version control alone offers some nice benefits, but without these extra steps, it might introduce some pain points! + + + Developers have a bit of a head start on some of the interesting ideas and tools that streamline these processes. These will be increasingly important as IT professionals start to rely on version control. Let's take a quick look at a few key concepts. + + +## Continuous Integration + + + Let's pretend we have a PowerShell project called ProjectX. + + + Traditionally, we might check this out of version control, work on it for days on end, and integrate it back into version control once we were done with some major component, or at some arbitrary interval (check in once a day!). + + + With [continuous integration](https://en.wikipedia.org/wiki/Continuous_integration) (CI), we focus on making many small changes, integrating into version control often, rather than only after completing a major task, or at some pointless interval. + + + CI is often associated with running automated unit and integration tests, perhaps with [Pester](https://www.youtube.com/watch?v=SftZCXG0KPA). + + + You can get practical experience with this at home - set up a PowerShell project in GitHub, add some Pester tests, and sign up for AppVeyor - If you need some pointers, hit [the walk through here](http://ramblingcookiemonster.github.io/GitHub-Pester-AppVeyor/). + + + So! What does this look like? I make a change, commit to version control, tests automatically run, validate that I didn't break anything, and [update my view from version control](http://ramblingcookiemonster.github.io/GitHub-For-PowerShell-Projects/#continuous-integration) to let me know the build is passing. + + +## Continuous Deployment + + + Okay! We have our files in version control, and maybe we set up some automatic tests to run when we make a change. There's still a small problem. Will you remember to update the files where they actually live? Will you update those files outside of source control because this process is a pain? Continuous deployment (CD) can help with this. + + + For our purposes, the idea is that you can set up a series of validations, and if everything passes, you deploy to production. + + + While you can certainly involve [more gates](https://en.wikipedia.org/wiki/Continuous_delivery#Principles), you might have CI/CD pipeline that works as follows: + + + * You make a change + * You commit to source control + * Automated tests run + * If the automated tests pass, the deployment runs + + + So, now you don't need to worry about keeping production and other environments in sync with source control - this can all happen automatically! + + + We left out an important bit. What exactly happens with a deployment? + + +## PSDeploy + + + We use [Jenkins](https://powershell.org/2015/06/04/automating-with-jenkins-and-powershell-on-windows/) at work. What if we move to TeamCity? or Bamboo? Or some other solution? [PSDeploy](http://ramblingcookiemonster.github.io/PSDeploy/) is a quick and dirty module to help deployments on your preferred CI/CD platform. + + + Long story short, you have a deployment config file in each project. This spells out what you want to deploy (perhaps files or folders) and where to deploy them. You invoke PSDeploy, and it runs these deployments. + + + A few quick examples: + + + * We have a PowerShell module in version control.  Deployments.yml tells PSDeploy to copy the module to a network share, and a few servers.  Now, any time I commit a change to this module, Jenkins runs some Pester tests, and if they succeed, PSDeploy copies the module out. No extra work for me! + * We have a repository that stores a variety of config files.  Deployments.yml tells PSDeploy to copy these config files out to the various shares and servers that need them.  John Doe, who struggled a bit with version control (imagine forcing them to use Jenkins!) pushes a commit, a few Pester tests run, and we deploy the config files out as needed. + * We have an _everything but the kitchen sink_ repository, containing scheduled task scripts, PowerShell session configuration scripts, and other files. Same deal. Commit to source control, tests run, these files are delivered to their homes. + + + All I need to do in these cases is pick out what to deploy and where to deploy it to; PSDeploy does the rest. I can use the exact same build script for each of these projects, invoking PSDeploy against the deployments.yml. + + + What does this look like in practice? Here's a quick illustration: + + + [![PSDeployFlowSmall](https://powershell.org/wp-content/uploads/2015/08/PSDeployFlowSmall.png)](https://powershell.org/wp-content/uploads/2015/08/PSDeployFlow.png) + + + There are certainly product-specific ways to do this, but if PSDeploy sounds interesting, you can [read more here](http://ramblingcookiemonster.github.io/PSDeploy/). + + +## Next Steps + + + That's about it! If you plan to start using version control, take a look at the concepts and tools that can make your life easier. + + + [GitHub, Pester, and AppVeyor](http://ramblingcookiemonster.github.io/GitHub-Pester-AppVeyor/) are a great free way to get started, but be sure to check out [Dave Wyatt's TechSession on TeamCity and the Build.PowerShell.org](https://powershell.org/event/techsession-discovering-teamcity-and-build-powershell-org/), which will cover a handy new service enabling free continuous integration and delivery for community PowerShell projects. + + + Lastly, I can't help but mention Steven Murawski's great post [on joining the open source community](http://stevenmurawski.com/powershell/2015/8/moving-in-to-open-source). This is a great way to learn, to get involved, and to help others - skim through his post, and definitely consider it! diff --git a/content/articles/2015/08/list-users-logged-on-to-your-machines/index.md b/content/articles/2015/08/list-users-logged-on-to-your-machines/index.md new file mode 100644 index 000000000..0fd7dae0f --- /dev/null +++ b/content/articles/2015/08/list-users-logged-on-to-your-machines/index.md @@ -0,0 +1,233 @@ +--- +url: /articles/2015-08-28-list-users-logged-on-to-your-machines/ +title: List users logged on to your machines +authors: + - Jonas Sommer Nielsen +date: "2015-08-28T11:12:07+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/08/list-users-logged-on-to-your-machines/ +--- + +Password policies are the best 😀 Sometimes they lead to account logouts when someone forgets to logout of a session somewhere on the network though. It might be the TS session they use once a quarter for reporting or maybe you know the feeling when you RDP to a server only to find that it is locked by 2 other admins who forgot to logoff when they left. (Off cause this never happens… we all use PowerShell…) Anyway, this had me searching for a user session somewhere on the network. The worst thing is when my own password expires. I hate when my account ends up being locked. Therefor I made it a rule to just check all servers before I change password. There are multiple ways to do this but of course I tend to go the PowerShell route.  + +## Research + +The originally method I used is from [TechNet gallery][1] + +In short: Get-WmiObject -Class Win32_process + +This basically finds all unique users running processes on the machine. This is cool because it finds everything even stuff running as a service but I'm not convinced it is the most efficient way. + +Checking up with google I find a lot of creative ways to check who is logged on to your box. + +[peetersonline.nl/2008/11/oneliner-get-logged-on-users-with-powershell/][2] gave me the idea to check Win32_LoggedOnUser which seems obvious. + +[![2015-08-28 (1)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-1.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-1.png) + +This looks great and seems to work with Get-CimInstance too though the output is a little different. + +![2015-08-28](https://powershell.org/wp-content/uploads/2015/08/2015-08-28.png) + +[learn-powershell.net/.../Quick-hit-find-currently-logged-on-users/][3] took a little more old-school approach which I kind of like because it's a little rough and forces me to play with my [template based parsing.][4] + + [![2015-08-28 (2)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-2.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-2.png) + +I'm not really sure which method is faster so why not try implementing all 3 in a module and test it out. + +## Sketching + +It's always a good idea to begin by making a sketch of what you're trying to accomplish. + + +`Pseudo code: +Get-ActiveUser -ComputerName [] -Method [Cim,Wmi,Query] +Wanted output: +Username ComputerName +-------- ------------ +TestUser1 Svr3 +TestUser3 Svr3 +DonaldDuck Client2 +`Now I have all the information I need to set up the GitHub repository. + +[github.com/mrhvid/Get-ActiveUser][5] + +## Code + +First of all the parameters I'm interested in are ComputerName and Method. + + +`Param + ( + # Computer name, IP, Hostname + [Parameter(Mandatory=$true, + ValueFromPipelineByPropertyName=$true, + Position=0)] + [String[]] + $ComputerName, + # Choose method, WMI, CIM or Query + [Parameter(Mandatory=$true, + ValueFromPipelineByPropertyName=$true, + Position=1)] + [ValidateSet('WMI','CIM','Query')] + [String] + $Method + ) +`I already have 3 possible Methods in mind so I set ValidateSet with the 3 possibilities. Then I don't have to worry about that input later. + + +`Process + { + switch ($Method) + { + 'WMI' + { + } + 'CIM' + { + } + 'Query' + { + } + } + } +`In the Process part of my function I simply use a switch for the 3 different methods I allowed in the Parameter. + +Now it's basic fill-in-the-blanks. + +### WMI + +My old solution is simpel and works fine. + + +`$WMI = Get-WmiObject -Class Win32_Process -ComputerName $ComputerName -ErrorAction Stop +$ProcessUsers = $WMI.getowner().user | Select-Object -Unique +`[![2015-08-28 (3)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-3.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-3.png) + +But now that I found Win32_LoggedOnUser it seams wrong to do it this way. Lets look at the new idea instead. + +[![2015-08-28 (4)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-4.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-4.png) + +[![gwmi-Wmi32_LoggedOnUser_gm](https://powershell.org/wp-content/uploads/2015/08/gwmi-Wmi32_LoggedOnUser_gm.png)](https://powershell.org/wp-content/uploads/2015/08/gwmi-Wmi32_LoggedOnUser_gm.png) + +This is all the right data but it seems to be in a string format so I'll have to do a little manipulation. This can be done in a million ways. + + +`function Get-MyLoggedOnUsers + { + param([string]$Computer) + Get-WmiObject Win32_LoggedOnUser -ComputerName $Computer | Select Antecedent -Unique | %{“{0}{1}” -f $_.Antecedent.ToString().Split(‘”‘)[1], $_.Antecedent.ToString().Split(‘”‘)[3]} + } +`Peter's aforementioned one-liner didn't seem very reader-friendly to me, which is ok for a one-liner, but I would like it to be a little more readable if possible. + + +`$WMI = (Get-WmiObject Win32_LoggedOnUser).Antecedent +$ActiveUsers = @() +foreach($User in $WMI) { + $StartOfUsername = $User.LastIndexOf('=') + 2 + $EndOfUsername = $User.Length - $User.LastIndexOf('=') -3 + $ActiveUsers += $User.Substring($StartOfUsername,$EndOfUsername) +} +`[![2015-08-28 (5)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-5.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-5.png) + + This seams right 🙂 I'll save the output in $ActiveUsers variable and do the same for CIM and Query. + +### CIM + +Lets try with CIM. + +[![2015-08-28 (6)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-6.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-6.png) + +This looks way more structured. + +[![2015-08-28 (7)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-7.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-28-7.png) + +CIM ends up being an easy to understand one-liner 😀 + + +`$ActiveUsers = (Get-CimInstance Win32_LoggedOnUser -ComputerName $ComputerName).antecedent.name | Select-Object -Unique +`### Query + +Using the good ol' Query.exe I found the [template based parsing discussed earlier][4] very useful. + + +`$Template = @' + USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME +>{USER*:jonas} console 1 Active 1+00:27 24-08-2015 22:22 + {USER*:test} 2 Disc 1+00:27 25-08-2015 08:26 +'@ +$Query = query.exe user +$ActiveUsers = $Query | ConvertFrom-String -TemplateContent $Template | Select-Object -ExpandProperty User +`### Output + +Now I just need to format and output the users in a nice way. I want clean objects with ComputerName and UserName. + + +`# Create nice output format +$UsersComputersToOutput = @() +foreach($User in $ActiveUsers) { + $UsersComputersToOutput += New-Object psobject -Property @{ + ComputerName=$ComputerName; + UserName=$User + } + } +} +# output data +$UsersComputersToOutput +`## Testing + +Now I have a problem. I can't test this as I don't have a bunch of test serveres at my disposal. All my testing has been done against my own Windows 10 box. It's seems that query is a lot faster running locally but WMI/CIM might give a more complete view of what services are running.   + +[![get-activeuser_wmi_highlight](https://powershell.org/wp-content/uploads/2015/08/get-activeuser_wmi_highlight.png)](https://powershell.org/wp-content/uploads/2015/08/get-activeuser_wmi_highlight.png) + +I have a bunch of standard service accounts running that might be nice to remove from the output. Also for this to be useful we will want to run it against a lot of machines. + +[![get-activeuser_query](https://powershell.org/wp-content/uploads/2015/08/get-activeuser_query.png)](https://powershell.org/wp-content/uploads/2015/08/get-activeuser_query.png) + +Combining Get-ActiveUser with [Start-Multithread from last weeks post][6] seems to be working as intended. + + +`Start-Multithread -Script { + param($C) + Get-ActiveUser -ComputerName $C -Method Query + } -ComputerName ::1,Localhost | Out-GridView +`Piping the above to Out-GridView is proberbly my personal favorite way of accomplishing something truly useful. + +[![get-activeuser_query_out-gridview](https://powershell.org/wp-content/uploads/2015/08/get-activeuser_query_out-gridview.png)](https://powershell.org/wp-content/uploads/2015/08/get-activeuser_query_out-gridview.png) + +Now we have all the data in a nice searchable way and it's really easy to check if your user is logged in on some random machine. It also an easy way to check for rouge users on your network. + + + +## Publishing and feedback + +The code is published on [PowerShellGallery][7]. + +Please help me out by testing it for me. I would love to know if this works in the real world 🙂 + + +`# To install Get-ActiveUser +Install-Module Get-ActiveUser +#To install Start-Multithread +Install-Module Start-Multithread +`This should work when you have WMF 5 + installed and on Windows 10 out of the box.  + +As this is my third blogpost ever I would love some feedback. Is there something I could do better or in a better format? Have you used this and for what? Please let me know in the comments 🙂 + + + +#### Contact me + +Twitter [@mrhvid][8] +Web [Jonas.SommerNielsen.dk][9] + + [1]: https://gallery.technet.microsoft.com/scriptcenter/d46b1f3b-36a4-4a56-951b-e37815a2df0c + [2]: http://www.peetersonline.nl/2008/11/oneliner-get-logged-on-users-with-powershell/ + [3]: http://learn-powershell.net/2010/11/01/quick-hit-find-currently-logged-on-users/ + [4]: https://powershell.org/2015/08/12/template-based-parsing-and-progress-bars/ + [5]: https://github.com/mrhvid/Get-ActiveUser + [6]: https://powershell.org/2015/08/20/multithreading-using-jobs/ + [7]: https://www.powershellgallery.com/packages/Get-ActiveUser/ + [8]: https://twitter.com/mrhvid + [9]: http://Jonas.SommerNielsen.dk diff --git a/content/articles/2015/08/mspsug-virtual-meeting-conquering-azure-and-office-365-with-powershell-august-11th-2015/index.md b/content/articles/2015/08/mspsug-virtual-meeting-conquering-azure-and-office-365-with-powershell-august-11th-2015/index.md new file mode 100644 index 000000000..c52c7d35f --- /dev/null +++ b/content/articles/2015/08/mspsug-virtual-meeting-conquering-azure-and-office-365-with-powershell-august-11th-2015/index.md @@ -0,0 +1,28 @@ +--- +url: /articles/2015-08-05-mspsug-virtual-meeting-conquering-azure-and-office-365-with-powershell-august-11th-2015/ +title: "MSPSUG Virtual Meeting: Conquering Azure and Office 365 with PowerShell – August 11th 2015" +authors: + - Mike F Robbins +date: "2015-08-05T14:49:49+00:00" +aliases: + - /2015/08/mspsug-virtual-meeting-conquering-azure-and-office-365-with-powershell-august-11th-2015/ +--- + +Join the Mississippi PowerShell User Group virtually on Tuesday, August 11th at 8:30pm Central Time when SharePoint MVP [Todd Klindt](http://www.toddklindt.com/blog/default.aspx) will present “ +_**Conquering Azure and Office 365 with PowerShell **_ +”. + + +After years and years of anticipation, 2015 might end up actually being the year of the Cloud. With any new technology comes the opportunity to tame it with PowerShell. In this session Todd will give you an overview of the PowerShell options you have when interacting with Office 365 and Azure. He’ll go over how to get them installed in your environment. Then he’ll walk you through getting them connected to Office 365 and Azure and actually doing some work with them. Finally he’ll show you some tricks to get around the limitations. When this session is finished you’ll be armed with all the information you need to fire up PowerShell and wrangle Office 365 and Azure AD into submission. + + +Visit the +[Mississippi PowerShell User Group](http://mspsug.com/2015/08/02/mspsug-virtual-meeting-conquering-azure-and-office-365-with-powershell-on-tuesday-august-11th-at-830pm-cdt/) +website to learn more about Todd and to find out more details about this month’s meeting. + + +The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info](http://mspsug.com/attendee-info/)” section. + +Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this meeting. + +µ diff --git a/content/articles/2015/08/multithreading-using-jobs/index.md b/content/articles/2015/08/multithreading-using-jobs/index.md new file mode 100644 index 000000000..12fad265d --- /dev/null +++ b/content/articles/2015/08/multithreading-using-jobs/index.md @@ -0,0 +1,226 @@ +--- +url: /articles/2015-08-20-multithreading-using-jobs/ +title: Multithreading using jobs +authors: + - Jonas Sommer Nielsen +date: "2015-08-20T10:23:48+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/08/multithreading-using-jobs/ +--- + +Often I have had to check something against all servers or clients. A classic problem and every time I run into the it it's time consuming and running the job multithreaded would be nice. + +A few years back I found a nice little script for multithreading which I have been using quite often. Unfortunately this wasn't a module. And I can't remember where it came from. So this week I set my mind on recreating this as a module and to see if I can publish it on [PowerShell Gallery][1]. + +## **Version control 101** + +I recently watched the [crash course][2] Warren did on youtube a month back and I started out creating a repository for the project. + +[github.com/mrhvid/Start-MultiThread][3] + +I will let the video explain the concept. But I already feel more productive and safe while coding. Only thing left is to get in a process where I commit often or at least when it makes sense. + +## **Idea** + +The original version was just a function I found on google somewhere. It worked fine but it wasn't too handy to load up each time. And the input for the function was for two files, a script and a text file with a list of ComputerNames. + +It would be nice if I could just call it with a list of computer names from whereever. e.g. Get-ADComputer, (Computer1, Computer2, localhost) or (Get-content servers.txt).b + +And for quick oneliners if I need something simple it would be nice to be able to just write the script and not have to save a .ps1 file with the command. + +**Pseudo code**: + + +`Multi-Thread -Script { Test-Connection } -Computers [list of computers] +`## Execution + +First off I needed to figure out a good name. + +Get-Verb lists 98 verbs on my machine. Sadly "multi" is not one of them. After som consideration I chose **"Start"** as a good verb, and **"multithread"** as the noun. + + +`Start-MultiThread +`Sounds fair so I created a new folder with this name and a Start-MultiThread.psm1 file for the module. + +[![Snip](https://powershell.org/wp-content/uploads/2015/08/Snippit.png)](https://powershell.org/wp-content/uploads/2015/08/Snippit.png) + +A snippet for a full advanced function is always a good starting point. I added this to my version control and things are looking good so far. + +[https://github.com/mrhvid/Start-Multithread/...][4] (first upload) + +It already looks way more organized than what I usually come up with. + +### Coding + +Tuesday afternoon I put on my headphones, started banging away on my keyboard and the result was this code + + +`function Start-Multithread +{ + [CmdletBinding(DefaultParameterSetName='Parameter Set 1', + SupportsShouldProcess=$true, + PositionalBinding=$false, + HelpUri = 'https://github.com/mrhvid/Start-MultiThread/', + ConfirmImpact='Medium')] + [Alias()] + [OutputType([String])] + Param + ( + # Command or script to run. Must take ComputerName as argument to make sense. + [Parameter(Mandatory=$true, + ValueFromPipeline=$true, + ValueFromPipelineByPropertyName=$true, + Position=0)] + $Script, + # List of computers to run script against + [Parameter(Mandatory=$true, + ValueFromPipeline=$true, + ValueFromPipelineByPropertyName=$true, + Position=1)] + [String[]] + $Computers, + # Maximum concurrent threads to start + [Parameter(Mandatory=$false, + ValueFromPipeline=$true, + ValueFromPipelineByPropertyName=$true, + Position=2)] + [int] + $MaxThreads = 20 , + # Number of sec to wait after last thred is started. + [Parameter(Mandatory=$false, + ValueFromPipeline=$true, + ValueFromPipelineByPropertyName=$true, + Position=3)] + [int] + $MaxWaitTime = 600, + # Number of Milliseconds to wait if MaxThreads is reached + [Parameter(Mandatory=$false, + ValueFromPipeline=$true, + ValueFromPipelineByPropertyName=$true, + Position=4)] + $SleepTime = 500 + ) + Begin + { + } + Process + { + if ($pscmdlet.ShouldProcess('Target', 'Operation')) + { + $i = 0 + $Jobs = @() + Foreach($Computer in $Computers) { + # Wait for running jobs to finnish if MaxThreads is reached + While((Get-Job -State Running).count -gt $MaxThreads) { + Write-Progress -Id 1 -Activity 'Waiting for existing jobs to complete' -Status "$($(Get-job -State Running).count) jobs running" -PercentComplete ($i / $Computers.Count * 100) + Start-Sleep -Milliseconds $SleepTime + } + # Start new jobs + $i++ + $Jobs += Start-Job -ScriptBlock $Script -ArgumentList $Computer -Name $Computer -OutVariable LastJob + Write-Progress -Id 1 -Activity 'Starting jobs' -Status "$($(Get-job -State Running).count) jobs running" -PercentComplete ($i / $Computers.Count * 100) + } + # All jobs have now been started + # Wait for jobs to finish + While((Get-Job -State Running).count -gt 0) { + $JobsStillRunning = '' + foreach($RunningJob in (Get-Job -State Running)) { + $JobsStillRunning += $RunningJob.Name + } + Write-Progress -Id 1 -Activity 'Waiting for jobs to finish' -Status "$JobsStillRunning" -PercentComplete (($Computers.Count - (Get-Job -State Running).Count) / $Computers.Count * 100) + Start-Sleep -Milliseconds $SleepTime + } + # Output + Get-job | Receive-Job + # Cleanup + Get-job | Remove-Job + } + } + End + { + } +} +`This is by no means final code. (I already made small changes check [GitHub][5] for latest code). But the outline started to look good. + +The Foreach just runs through the list of computers supplied and for each one starts a new job with the script code and the ComputerName as argument.   + +To make sure the throttle limit is kept I have a small While loop that checks the number of running jobs and just sleeps until it falls under $MaxThreads limit. + +When all jobs are started it's just a matter of waiting for all jobs to finish. (It would be wise to add a timer here and kill hanging jobs after some time) + +And lastly I just output all the results. + +### Testing + + [![2015-08-19 (6)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-6.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-6.png) + + This looks great but unfortunately it fails to receive the computername. + +[![2015-08-19 (7)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-7.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-7.png) + +It does run the code once for each computer but it asks for a computername each time which kind of defeats the point. + +Good thing we have google and good ol' [Don][6]. + +[![2015-08-19 (8)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-8.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-8.png) + +Adding a parameter() block to the script makes it work. + +Clearly there's still a lot to be done here. + +### Publishing + +But creating modules is only really fun if you can share them with others. And this is where I'm beginning to love PowerShell v5. It turns out it's quite simpel to do this. + +[PowerShellGallery.com][7] describes this. After signing up it's a one-liner. + + +`PS> Publish-Module -Name -NuGetApiKey +`You need to create a manifest for your module first. + +Now I have my module published and it has it's own page on the internet WUUHU + +[www.powershellgallery.com/packages/Start-Multithread][8] + +Cool as that might seem the really cool stuff comes next. + +### Installing on a new machine + +This requires WMF 5 or newer. Aka. Windows 10 works out of the box. Try it out from your elevated powershell promt. + +![2015-08-19 (9)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-9.png) + +The module is available from the standard PSGallery repository. And installing it on your machine is as simpel as piping this to Install-Module + +[![2015-08-19 (10)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-10.png)](https://powershell.org/wp-content/uploads/2015/08/2015-08-19-10.png) + +Now you can try out the module on your own machine. Promission to be impressed.  + +## Help make it better + +This module is not flawless so if you have any ideas feel free to get on your [GitHub][5] and submit changes 🙂 + +My idea is to keep it simple and try to follow some good practices e.g. as described in [Learn PowerShell Toolmaking in a Month of Lunches][9]. + + + + + +#### Contact me + +Twitter [@mrhvid][10] +Web [Jonas.SommerNielsen.dk][11] + + [1]: https://www.powershellgallery.com/ + [2]: https://www.youtube.com/watch?v=wmPfDbsPeZY + [3]: https://github.com/mrhvid/Start-MultiThread + [4]: https://github.com/mrhvid/Start-Multithread/commit/9355446aae85c9f23abe07481edc3ec84d487fe4 + [5]: https://github.com/mrhvid/Start-Multithread + [6]: https://powershell.org/forums/topic/passing-parameter-to-start-job/ + [7]: https://www.powershellgallery.com/packages/upload + [8]: https://www.powershellgallery.com/packages/Start-Multithread/ + [9]: http://www.manning.com/jones4/ + [10]: https://twitter.com/mrhvid + [11]: http://Jonas.SommerNielsen.dk diff --git a/content/articles/2015/08/philadelphia-powershell-user-group-meeting-september-3rd-2015-with-max-trinidad/index.md b/content/articles/2015/08/philadelphia-powershell-user-group-meeting-september-3rd-2015-with-max-trinidad/index.md new file mode 100644 index 000000000..c2042d5ee --- /dev/null +++ b/content/articles/2015/08/philadelphia-powershell-user-group-meeting-september-3rd-2015-with-max-trinidad/index.md @@ -0,0 +1,42 @@ +--- +url: /articles/2015-08-17-philadelphia-powershell-user-group-meeting-september-3rd-2015-with-max-trinidad/ +title: Philadelphia PowerShell User Group Meeting – September 3rd 2015 with Max Trinidad +authors: + - John Mello +date: "2015-08-18T01:11:05+00:00" +aliases: + - /2015/08/philadelphia-powershell-user-group-meeting-september-3rd-2015-with-max-trinidad/ +--- + +Join us on Thursday, September 3rd when [ +Maximo Trinidad +][1] will be giving a talk called a "**Creating a SQL Server Database Report with PowerShell**". As describe by Maximo: This is a deep dive on how to create a SQL Server report using PowerShell and SMO. At the same time, you will learn how to create and work with PowerShell objects, scriptblocks, formatting properties, and generating output results. We'll be looking into creating a report to identify database properties irregularities. This will be a good start to help begin documenting your SQL Server on the network. + + + + +**About Maximo Trinidad** + + + + +Maximo Trinidad (Florida Aka – Mr. PowerShell) hails from Puerto Rico and have been working with computers since 1979. Throughout his many years, he has worked with SQL Server Technologies, and provided support to Windows Servers/Client Systems, Microsoft Cloud and Virtualization Technologies. Maximo has also been a Microsoft PowerShell MVP since 2009 and MVP SAPIEN Technologies 2015.  You can find him speaking in most at most of the SQLSaturday, IT Pro and .NET camps events around the Florida’s State.  He is also the founder of the Florida PowerShell User Group which meets every 3rd Thursday evening of the month. +Follow him on [ +Twitter +][2] and on his [ +blog +][3]! + +Please [ +register +][4] if you plan to attend in person or online. **PLEAE NOTE THE NEW LOCATION!** The meeting URL to join us remotely will be included in your Eventbrite registration confirmation. + + + + +[![Eventbrite - PhillyPosh September 3rd 2015 - Max Trinidad](https://www.eventbrite.com/custombutton?eid=18198473123)](http://www.eventbrite.com/e/phillyposh-september-3rd-2015-max-trinidad-tickets-18198473123?ref=ebtnebregn) + + [1]: https://twitter.com/juneb_get_help + [2]: https://twitter.com/MaxTrinidad + [3]: http://www.maxtblog.com/ + [4]: https://www.eventbrite.com/e/phillyposh-september-3rd-2015-max-trinidad-tickets-18198473123 diff --git a/content/articles/2015/08/powershell-summit-north-america-2016-call-for-topics/index.md b/content/articles/2015/08/powershell-summit-north-america-2016-call-for-topics/index.md new file mode 100644 index 000000000..d186beab0 --- /dev/null +++ b/content/articles/2015/08/powershell-summit-north-america-2016-call-for-topics/index.md @@ -0,0 +1,400 @@ +--- +url: /articles/2015-08-03-powershell-summit-north-america-2016-call-for-topics/ +title: PowerShell Summit North America 2016 – Call for Topics +authors: + - Richard Siddaway +date: "2015-08-03T16:39:58+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2015/08/powershell-summit-north-america-2016-call-for-topics/ +--- + +** + +PowerShell Summit NA 2016 – Call for Topics + +** + + + + +The PowerShell Summit is the number one conference where PowerShell enthusiasts gather and learn from each other in fast-paced, knowledge packed presentations. PowerShell experts from all over the world including MVP’s, Guru’s, community leaders and PowerShell team members, will once again join together for a few days in Bellevue, WA. to discuss and learn about maximizing PowerShell in the workplace. If you want to share your PowerShell expertise or story, then this is your official call to submit presentations for selection! + + + + + +PowerShell Summit North America 2016 will be held 4-6 April in the Meydenbauer center, Bellevue WA. + + + + + +** + +Topic Areas – What we are looking for + +** + + + + +We are looking for 45-minute presentations covering a wide aspect of PowerShell expertise. We have two main topic areas that may assist you in building an abstract. + + + + + +PowerShell Internals – A deep look into the inside workings of PowerShell and practical solutions that are built from them. These presentations are typically more directed to the PowerShell development community that is building extensions and solutions relating to PowerShell. + + + + + +PowerShell Features Deep Dive – These presentations are a deep look into configuring and working with PowerShell features and capabilities such as Remoting, Desired State Configuration and more. These presentations tend to be more IT Pro focused. + + + + + +We are open to presentations across the entire ecosystem that has been built around PowerShell; so don’t hesitate to send an abstract for your particular area of expertise. This includes Microsoft platforms and products that have PowerShell-based management tools as well as 3rd parties such as VMware. New topics will be preferred over recycling of older topics – look to see what’s new in PowerShell 5.0 and use the questions on PowerShell.org to spot areas of confusion that could supply a good session for the Summit. + + + + + +_ + +We may consider double length sessions, but only in exceptional cases. Please contact us – + +_[_ + +summit@powershell.org + +_][1]_ + + – with your idea before spending too much time developing such a session. + +_ + + + + +** + + What kind of sessions get selected? + +** + + + + +We’re looking for sessions that go beyond – way beyond – “beginner.” If you want to see examples of the depth we’re looking for use the recordings on the PowerShell.org Youtube channel from the PowerShell Summit Europe 2014, or PowerShell Summit NA 2015 as a guide. We look for an abstract that’s compelling and makes us salivate to see your session – so spend time writing a punchy abstract! We want sessions that offer real-world usability combined with “wow, nobody talks about THAT” awesomeness. If in doubt aim high, very high. Remember, Summit sessions are recorded, so if you’ve previously presented a topic at a Summit, we’re less likely to choose it for another Summit. We want sessions that are challenging, and that ideally present things that simply aren’t explained or documented elsewhere. New modules, new techniques, and crazy approaches are all welcome. Discussion-format sessions are great, too, especially if you plan to turn them into a community deliverable (like a “best practices for writing DSC Resources” session that gets turned into a free e-guide later). Think community, deep dive, engaging, and amazing as keywords. We want attendees to finish each day with information leaking… just a little bit… out their eyeballs. Help us make it happen. + + + + + +_ + +If you have any doubts about the suitability of a particular session please contact us - + +_[_ + +summit@powershell.org + +_][1]_ + + – we’re always happy to discuss proposed sessions. + +_ + + + + +We do have some goals for speaker selection, too. We obviously have, and appreciate, the great involvement we get from the product team. We aim to have a certain number of sessions from well-known members of the community, simply because they’re well-known for a reason – they do a great job! But we also set aside slots for newcomers who’ve never presented before, or who’ve maybe only presented once or twice before – the audience will judge you on content not style. We want to create opportunities for more folks to become engaged and active in our community, and the Summit is a great way to do that. + + + + + +We aren’t looking for soft-skills sessions, like “how to get a new user group running,” although contact us via email (summit@powershell.org) if you’d like to do something like that as an extra evening thing after the main content wraps for the day. + + + + + +Please note all sessions are to be delivered in English. Presenter will provide all equipment needed to deliver session(s), including a laptop or other computer. Presenter must be able to provide video by means of HDMI, DVI-D, or DisplayPort connectors – VGA is **NOT** supported. Presenter must be able to manually select an appropriate screen resolution for video output. Typically, 1024×768 or 1280×720 are preferred. + + + + + +** + +How to submit abstracts of presentations + +** + + + + +Presentations will be 45-minutes in length and the submission should include the following: + + + + + +Presentation Title + + + + + +Presentation abstract – a description of the presentation and the topics covered. 250 words or less and suitable for marketing. + + + + + + + + + + +Go to + +[ +https://eventloom.com/event/register/PSNA16/Speaker?preregister=1 +](https://eventloom.com/event/register/PSNA16/Speaker?preregister=1) + +. + + + + + + + + +This is the only valid URL for pre-registration. Provide your e-mail address, password, and confirm password. You’re creating a new account, even if you’ve attended past Summit events. + + + + + + + ** + +DO NOT ATTEMPT TO REGISTER FOR THE SUMMIT AS AN ATTENDEE AT THIS STAGE – WE WILL BE OPENING REGISTRATION IN NOVEMBER 2015. ANY NON-SPEAKER REGISTRATIONS WILL BE DELETED. + +** + + + + + + + + +Click Abstracts on the top menu + + + + + + + + +Click SUBMIT ABSTRACT + + + + + + + + +Enter Title and Description. + + + + + + + + +Click SUBMIT + + + + + + + + +Provide a title and description; descriptions must be 50-250 words. Set the Status to “Ready to Review” when you are ready to send your session to us for consideration. + + + + + + + + +To return to the site at a later time, go to + +[ +https://eventloom.com/event/login/PSNA16 +](https://eventloom.com/event/login/PSNA16) + + + + + + + + +Click Log In. You can then re-visit Abstracts. + + + + + + + + +Note that you must set your abstract status to **Ready for Review** or we won’t see it. If you leave it in **Pending, **it won’t be considered. + + + + + + + + +You can submit multiple presentations in the same topic area or for different ones. Be aware that even though the session length is 45 minutes we prefer to have at least 10 minutes set aside for questions. Summit presentations are intense and intimate often with plenty of audience interaction. You must expect questions and discussions. This is not a “lecture to the audience” event. Also because of the session length, generally co-presenters are unnecessary, but that is not a requirement. + + + + + + + ** + +Presentation submission deadline – When you should send it by + +** + + + + + + + + +Start sending your presentation submissions immediately! The selection committee will start selecting presentations as soon as they arrive so you don’t want to miss out. The last day we will accept presentation submissions will be **Thursday 1 October 2015**. This is a **hard** deadline – no sessions will be accepted after this date. + + + + + + + ** + +When you will know you’ve been selected + +** + + + + + + + + +The selection committee will start reviewing submissions immediately and begin the selection process. You will be informed if one or more of your presentations have been selected and notified by Thursday 15 October 2015. + + + + + + + + +You will need to log back onto the event site and complete your registration with the code we will provide in the notification email. This will have to occur before 31 October 2015 so that we have a completed agenda in time for attendee registration. + + + + + + + + +Speakers, with accepted sessions, will be given free admission to the event, including attendance at all official Summit activities. However, AWPP membership is not included. Speakers may not bring guests to the day sessions or evening events. We have a limited budget, and the number of speakers selected will be partially governed by that budget. + + + + + + + + +Pre-registering does not guarantee you a place at the event. Pre-registration is until 1 October 2015. Final session selections will be made by 15 October 2015, and you will be notified of accepted/unaccepted sessions. + + + + + + + + +If at least two sessions are accepted, you will be asked to immediately make a reservation at our speaker hotel. You will be given our group code, and we will directly pay for up to 3 nights’ lodging. Any additional nights are your responsibility as are travel and other costs. + + + + + + + + + +If any sessions are accepted, you will be asked to immediately complete your Summit registration using a free promotional code. If you do not complete your registration by 1 November 2015, then we will assume you do not wish to present and your sessions will be cancelled, and the slots offered to another speaker. + + + + + + + + + +If no sessions are accepted, then your pre-registration will be deleted. Beginning 1 November 2015 and through 4 March 2016, you are welcome to create a new account and register as a standard attendee on a space-available basis. + + + + + + + + + +The final agenda will be announced and posted on PowerShell.Org on, or about, Sunday 1 November 2015. + + + + + + + + +We look forward to your submissions and your help in making PowerShell Summit North America 2016 the most valuable IT/Dev conference of the year building on and surpassing the previous Summits! + + + + + + + [1]: mailto:summit@powershell.org diff --git a/content/articles/2015/08/techsession-webinar-the-top-10-considerations-when-writing-powershell-advanced-functions/index.md b/content/articles/2015/08/techsession-webinar-the-top-10-considerations-when-writing-powershell-advanced-functions/index.md new file mode 100644 index 000000000..e220fcd72 --- /dev/null +++ b/content/articles/2015/08/techsession-webinar-the-top-10-considerations-when-writing-powershell-advanced-functions/index.md @@ -0,0 +1,27 @@ +--- +url: /articles/2015-08-26-techsession-webinar-the-top-10-considerations-when-writing-powershell-advanced-functions/ +title: "TechSession Webinar: The Top 10 Considerations When Writing #PowerShell Advanced Functions" +authors: + - Mike F Robbins +date: "2015-08-26T14:52:40+00:00" +categories: + - Announcements + - Events + - Training +aliases: + - /2015/08/techsession-webinar-the-top-10-considerations-when-writing-powershell-advanced-functions/ +--- + +On Wednesday, September 2nd at 2pm EDT (1pm CDT), I’ll be presenting the September TechSession Webinar for PowerShell.org. The topic for this month's session is: “[The Top 10 Considerations When Writing PowerShell Advanced Functions](https://powershell.org/event/techsession-the-top-10-considerations-when-writing-powershell-advanced-functions/)”. + +Here’s what you can expect from my presentation: + +There are lots of things to consider when writing an advanced function in PowerShell depending on what the function will be designed to accomplish, what operating system and PowerShell versions it will be written for, and who will be using it. During this session, PowerShell MVP Mike F Robbins will walk you through the top 10 items that he takes into consideration along with his thought process when creating advanced functions in PowerShell. We’ll briefly discuss comment based help, parameters, parameter validation, pipeline input, and error handling. This will NOT be a deep dive into any one of these topics as the focus of this session will be on writing advanced functions to maximize code reusability by minimizing static values. Prior experience with PowerShell is recommended. + +Registration URL: [https://attendee.gotowebinar.com/register/39900545688014338](https://attendee.gotowebinar.com/register/39900545688014338) + +Who am I? + +Mike F Robbins is a Microsoft MVP on Windows PowerShell and a SAPIEN Technologies MVP. He is a co-author of Windows PowerShell TFM 4th Edition and is a contributing author of a chapter in the PowerShell Deep Dives book. Mike has written guest blog articles for the Hey, Scripting Guy! Blog, PowerShell Magazine, and PowerShell.org. He is the winner of the advanced category in the 2013 PowerShell Scripting Games. Mike is also the leader and co-founder of the [Mississippi PowerShell User Group](http://mspsug.com/). He blogs at [mikefrobbins.com](http://mikefrobbins.com/) and can be found on twitter [@mikefrobbins](http://twitter.com/mikefrobbins). + +µ diff --git a/content/articles/2015/08/template-based-parsing-and-progress-bars/index.md b/content/articles/2015/08/template-based-parsing-and-progress-bars/index.md new file mode 100644 index 000000000..f49641248 --- /dev/null +++ b/content/articles/2015/08/template-based-parsing-and-progress-bars/index.md @@ -0,0 +1,206 @@ +--- +url: /articles/2015-08-12-template-based-parsing-and-progress-bars/ +title: Template based parsing and progress bars +authors: + - Jonas Sommer Nielsen +date: "2015-08-12T22:54:37+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/08/template-based-parsing-and-progress-bars/ +--- + +Working with wifi I have often needed to do a survey of the surroundings, and therefor I loved that windows 7 (maybe even Vista) introduced more advanced netsh with wifi support. + +There’s a lot of useful information but it might be nice to have a more graphical overview. The thing is that a text blob like this is not very handy to work with. + +[![image1](https://powershell.org/wp-content/uploads/2015/08/image1.png)](https://powershell.org/wp-content/uploads/2015/08/image1.png) + +Some time late last year I heard a guy from the powershell team on the Powerscripting podcast talk about ConvertFrom-String and the new template based parsing. And it occurred to me that you can combine this with a simple powershell progress bar (write-progress) to give a visual representation of signal strength. + +**Why not try it out** + +Ps> help ConvertFrom-String -[online][1] + +[![Help_ConvertFrom-String](https://powershell.org/wp-content/uploads/2015/08/Help_ConvertFrom-String.png)](https://powershell.org/wp-content/uploads/2015/08/Help_ConvertFrom-String.png) + +This looks straight forward. + + +`$TemplateSSID = @' +Interface name : Wi-Fi +There are 9 networks currently visible. +SSID 1 : {SSID*:My Movies 5G} + Network type : Infrastructure + Authentication : WPA2-Personal + Encryption : CCMP + BSSID 1 : bc:ae:c5:eb:59:8c + Signal : {SIGNAL:88}% + Radio type : 802.11n + Channel : 36 + Basic rates (Mbps) : 6 12 24 + Other rates (Mbps) : 9 18 36 48 54 +SSID 3 : {SSID*:blackbox} + Network type : Infrastructure + Authentication : WPA2-Personal + Encryption : CCMP + BSSID 1 : c8:be:19:aa:98:a4 + Signal : {SIGNAL:41}% + Radio type : 802.11n + Channel : 2 + Basic rates (Mbps) : 1 2 5.5 11 + Other rates (Mbps) : 6 9 12 18 24 36 48 54 +SSID 4 : {SSID*:Greenbox} + Network type : Infrastructure + Authentication : WPA2-Personal + Encryption : CCMP + BSSID 1 : 20:c9:d0:28:fb:05 + Signal : {SIGNAL:60}% + Radio type : 802.11n + Channel : 1 + Basic rates (Mbps) : 1 2 5.5 11 + Other rates (Mbps) : 6 9 12 18 24 36 48 54 + BSSID 2 : 20:c9:d0:28:fb:06 + Signal : 40% + Radio type : 802.11n + Channel : 100 + Basic rates (Mbps) : 6 12 24 + Other rates (Mbps) : 9 18 36 48 54 +'@ +$Netsh = netsh.exe wlan show networks mode=bssid +$Netsh | ConvertFrom-String -TemplateContent $TemplateSSID +`Executing the the above code resulted in + +[![testoutput1](https://powershell.org/wp-content/uploads/2015/08/testoutput1.png)](https://powershell.org/wp-content/uploads/2015/08/testoutput1.png) + +This looks great. The data is structured nicely in a easy to use form. + +Now lets combine that with a progress bar. We need a while loop to keep the progress bar alive and a one second sleep timer is probably a good idea. + + +`while ($true) { + $Netsh = netsh.exe wlan show networks mode=bssid + $Networks = $Netsh | ConvertFrom-String -TemplateContent $TemplateSSID + $i = 0 + foreach($Network in $Networks) { + Write-Progress -Id $i -Activity $Network.SSID -PercentComplete $Network.SIGNAL + $i++ + } + Start-Sleep -Seconds 1 +} +`The essential part is just a foreach looping through the networks objects. We use Write-Progress with parameters SIGNAL strength as PercentComplete and SSSID as Activity. + +[![ise progress bars](https://powershell.org/wp-content/uploads/2015/08/image3.png)](https://powershell.org/wp-content/uploads/2015/08/image3.png) + +It looks great in ISE and even works in the shell + +[![shell progress](https://powershell.org/wp-content/uploads/2015/08/image4.png)](https://powershell.org/wp-content/uploads/2015/08/image4.png) + +How cool is that? + +The bright reader might have spotted an obvious flaw in the first template. It doesn’t handle networks with multiple radios e.g. a network with both a 2.4 ghz and 5 ghz and same ssid. And all the other nice information from netsh is simply ignored. + +**Second try** + + +`$TemplateSSID = @' +Interface name : Wi-Fi +There are 9 networks currently visible. +{NETWORK*:SSID 1 : {SSID:My Movies 5G} + Network type : Infrastructure + Authentication : WPA2-Personal + Encryption : CCMP + {BSSID*:BSSID 1 : {MAC:bc:ae:c5:eb:59:8c} + Signal : {SIGNAL:88}% + Radio type : 802.11n + Channel : {CHANNEL:36} + Basic rates (Mbps) : 6 12 24 + Other rates (Mbps) : 9 18 36 48 54}} +{NETWORK*:SSID 3 : {SSID:blackbox} + Network type : Infrastructure + Authentication : WPA2-Personal + Encryption : CCMP + {BSSID*:BSSID 1 : {MAC:c8:be:19:aa:98:a4} + Signal : {SIGNAL:41}% + Radio type : 802.11n + Channel : {CHANNEL:2} + Basic rates (Mbps) : 1 2 5.5 11 + Other rates (Mbps) : 6 9 12 18 24 36 48 54}} +{NETWORK*:SSID 4 : {SSID:Greenbox} + Network type : Infrastructure + Authentication : WPA2-Personal + Encryption : CCMP + {BSSID*:BSSID 1 : {MAC:20:c9:d0:28:fb:05} + Signal : {SIGNAL:60}% + Radio type : 802.11n + Channel : {CHANNEL:1} + Basic rates (Mbps) : 1 2 5.5 11 + Other rates (Mbps) : 6 9 12 18 24 36 48 54} + {BSSID*:BSSID 2 : {MAC:20:c9:d0:28:fb:06} + Signal : {SIGNAL:40}% + Radio type : 802.11n + Channel : {CHANNEL:100} + Basic rates (Mbps) : 6 12 24 + Other rates (Mbps) : 9 18 36 48 54}} +'@ +$Netsh = netsh.exe wlan show networks mode=bssid +$Networks = $Netsh | ConvertFrom-String -TemplateContent $TemplateSSID +$Networks +`There's a bit more markup here, and I admit it took me a few tries to get my head around the nested data structure. Look more closely at SSID 4 above, and how this have 2 BSSID's, because of this they are marked with a *. + +Now $Networks contain a little more complicated data structure + +[![testoutput2](https://powershell.org/wp-content/uploads/2015/08/testoutput2.png)](https://powershell.org/wp-content/uploads/2015/08/testoutput2.png) + +Though if we dive into it                              + +[![testoutput3](https://powershell.org/wp-content/uploads/2015/08/testoutput3.png)](https://powershell.org/wp-content/uploads/2015/08/testoutput3.png) + +It does look more like what we saw first. But with more info. And we can even dig into TDC-TC network and see each channel. + +[![testoutput4](https://powershell.org/wp-content/uploads/2015/08/testoutput4.png)](https://powershell.org/wp-content/uploads/2015/08/testoutput4.png) + +A slightly modified loop + + +`while ($true) { + $Netsh = netsh.exe wlan show networks mode=bssid + $Networks = $Netsh | ConvertFrom-String -TemplateContent $TemplateSSID + $i = 0 + foreach($Network in $Networks) { + Write-Progress -Id $i -Activity $Network.network.SSID + $i++ + } + Start-Sleep -Seconds 1 +} +`And the percentage complete is a sub object. So we will need another loop to go through every BSSID attached to the SSID + + +`while ($true) { + $Netsh = netsh.exe wlan show networks mode=bssid + $Networks = $Netsh | ConvertFrom-String -TemplateContent $TemplateSSID + $i = 0 + foreach($Network in $Networks) { + foreach($bssid in $Network.NETWORK.bssid) { + Write-Progress -id $i -Activity $Network.network.SSID -Status "Channel: $($bssid.CHANNEL) MAC: $($bssid.MAC)" -PercentComplete $bssid.SIGNAL + $i++ + } + } + Start-Sleep -Seconds 1 +} +`The main thing here is of course using the template based parsing. It took me a few tries to figure it out, but it’s cool when it works and might be very useful in many other situations. The progress is just a hack that makes the presentation a little more fun. + +**References** + + * + * + * + +#### Contact me + +Twitter [@mrhvid][2] +Web [Jonas.SommerNielsen.dk][3] + + [1]: https://technet.microsoft.com/library/dn807178(v=wps.640).aspx + [2]: https://twitter.com/mrhvid + [3]: http://Jonas.SommerNielsen.dk diff --git a/content/articles/2015/08/test-it-new-iisadministration-module/index.md b/content/articles/2015/08/test-it-new-iisadministration-module/index.md new file mode 100644 index 000000000..850aa5f76 --- /dev/null +++ b/content/articles/2015/08/test-it-new-iisadministration-module/index.md @@ -0,0 +1,28 @@ +--- +url: /articles/2015-08-17-test-it-new-iisadministration-module/ +title: "TEST IT: New IISAdministration Module" +authors: + - Don Jones +date: "2015-08-17T17:35:08+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/08/test-it-new-iisadministration-module/ +--- + +It's no secret that Microsoft's WebAdministration module isn't universally loved. It's functionality isn't deep, and it doesn't play well in the PowerShell pipeline. There are also a number of things in it that run really slowly, making bulk administration a pain. + +Last week, [Baris Caglar announced that Windows 10 contains a new IISAdministration module][1], which is a rough draft of what is hoped to be a final module in Windows Server 2016. **If you use IIS, get hold of this and start testing so the team can get feedback.** Note that this is a _feature of Windows 10; _I haven't yet been able to test and see if file-copying it to another version of Windows will work or not (if you try, please post your results in a comment). The module seems to rely heavily on the [IIS Administration .NET class][2], going so far as giving you easy access to an instance of it so you can code against it directly for whatever the module itself doesn't offer. + +IIS as a product is in a weird place, because it no longer has a dedicated sub-team within the Windows Server team (at least, it didn't last I checked). That's made it difficult for anyone at Microsoft to produce a better administration module, since nobody really "owned" the product as their daily job, and nobody was available to be tasked with PowerShell improvements. Hopefully this new module is a step in the right direction at last. + +Some of what we still don't know: + + * Will this be released under an open-source license, perhaps posted on GitHub where others can contribute? + * Is the Win2016 release a for-sure on finalizing this module, or is that more a target? How will subsequent releases be made available? + * Can this be made available for downlevel operating systems? The .NET class in question has been around since IIS7, so it seems in theory that the code would run on older versions of Windows. + +Unfortunately, because Microsoft's IIS.NET blog system doesn't seem to do well with handling spam 😉 I'm not sure asking the author there will produce any answers - but let's try! + + [1]: http://blogs.iis.net/bariscaglar/iisadministration-powershell-cmdlets-new-feature-in-windows-10-server-2016 + [2]: https://msdn.microsoft.com/en-us/library/microsoft.web.administration.servermanager(v=vs.90).aspx diff --git a/content/articles/2015/08/the-start-sharing-challenge/index.md b/content/articles/2015/08/the-start-sharing-challenge/index.md new file mode 100644 index 000000000..9049cee74 --- /dev/null +++ b/content/articles/2015/08/the-start-sharing-challenge/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2015-08-10-the-start-sharing-challenge/ +title: The Start Sharing Challenge +authors: + - Adam Bertram +date: "2015-08-10T15:55:25+00:00" +categories: + - Announcements +aliases: + - /2015/08/the-start-sharing-challenge/ +--- + +I'm back from [Techmentor Redmond 2015][1] which was my first public speaking talk ever. It went great. I met a ton of great people and really enjoyed myself. When speaking to IT pros one of the questions I typically ask them is "**Are you blogging or sharing your knowledge?**". 9 times out of 10 I get a big, fat no. Why? It's because they feel like they have nothing to share. They feel like no one would be interested in their ho-hum, mundane life as an IT guy. I always followup that comment with "How do you know?" which ultimately results in a shrug. You don't know that your life isn't interesting and can teach others something. **Why are you making the decision for others?** You've acquired lots of knowledge in your career. Don't be stingy! Share it! +As a personal challenge to you, I have a copy of Don Jones' and Jeff Hicks' [Learn PowerShell Toolmaking in a Month of Lunches][2] book. If you don't have a blog today, start one. If you do and haven't blogged in awhile, dust it off and start writing again. The first one to contact me on my blog [Adam, The Automator][3] with a link to their blog with at least 5 good posts will win the book. Don't try to sneak those piddly little one paragraph posts by me just to get a free book! Minimum post length is 500 words. +You have nothing to lose but perhaps a few hours of your time and some further opportunities in your career. Give back and you will be rewarded. +P.S. Did you know I used to blog about selling used books on Amazon? Talk about a niche topic. At it's peak it was getting over 1,000 readers/day. Now, don't you think IT is just a wee bit bigger than that? If I can blog about selling used books and get 1,000 readers/day you can spend just an hour a week writing a blog post about your IT experiences and you _will_ help more people than you think. + + [1]: https://techmentorevents.com/Home.aspx + [2]: http://www.manning.com/jones4/ + [3]: http://adamtheautomator.com diff --git a/content/articles/2015/08/what-are-variables-anyway/index.md b/content/articles/2015/08/what-are-variables-anyway/index.md new file mode 100644 index 000000000..57122c265 --- /dev/null +++ b/content/articles/2015/08/what-are-variables-anyway/index.md @@ -0,0 +1,67 @@ +--- +url: /articles/2015-08-07-what-are-variables-anyway/ +title: What are variables anyway… +authors: + - Stephen Moore +date: "2015-08-07T09:03:51+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/08/what-are-variables-anyway/ +--- + +Fellow Admins. + +A quick chat if you're new to variables. + +So if you're like me and don't know any other programing/scripting language then all this PowerShell stuff is a bit daunting. So to help, this articles is on +PowerShell Variables. The thing is that Variables in PowerShell are very important. I'm assuming you know what a cmdlet is? The very basic underlying tools that make powershell work. They are like powershell building blocks or bricks in a PowerShell wall. For example, get-aduser gets a list of all the users in AD and includes a few details like SID, name and distinguished name. So that little cmdlet gets all that information, and more once you learn to manipulate it. If cmdlets are the bricks then Variables are the mortar. They hold all this information you have gathered together and let you save and pick and choose what you want. + + +Let's stick with get-aduser as an example. By the way, it's available if you have the AD module installed on your server. It will work out of the box if you try it on a domain controller but you can install it on other servers so you don't have to log  into your DC. The reason it's a good example is that if you have a thousand users then you get 1000 entries in your list when you use the get-ADuser cmdlet. Thats a lot of information and it may take some time for the cmdlet to finish running. Say you want just the names that start with P. And you also want to look at the users who were created in the last week. And you also want to see their email address. This is what a Variable is for. You run the cmdlet once, collecting all the user information, and then you have the information sitting there to use in anyway you want for as often as you want. There is a lot to learn about Variables but the most import thing is you understand the idea. So look at this... + +$ADusers = get-ADuser + +Powershell uses the $ sign to denote a variable. So these are variables. $servers, $comp, $process, and $Itdoesntmatterwhatthenameis. They are just containers - thats it!  And just like any bucket or plastic box you can put a label on it that is anything you like. But it must start with a $ so  +PowerShell knows it's a container. There is a cmdlet called new-variable for creating variables which you can explore but the easiest way is using the = sign. So now all the users in the domain are stored in the variable $ADusers. Let use another example. Say we wanted to work with services. We could use the get-service cmdlet and get a list of all the services on our machine. And if we want to work with them we can store them in a variable. Like this. $myservices = Get-service. So now if we enter $myservices in powershell and press enter, all the services gathered by the get-service cmdlet are listed. + + +[![Services](https://powershell.org/wp-content/uploads/2015/08/Services.png)](https://powershell.org/wp-content/uploads/2015/08/Services.png) + + + +Now we get to work with a variable. Quite a lot of information is in our variable and we want to get some out. This is where we can use a thing called a pipeline. It is a big thing in  +PowerShell. I'm not sure about other languages but for powershell it's like a production line. So we could do something like this. $myservices  | where {$_.name -like "*spool*"}.  That straight up and down bar is like a pipe from one part of the line to the next. They are a bit like filters.  So we have all this information in our variable but we only want to look at the print service. And worse I can't remember what the name of the print service is. Something about spool... No problem though because we told PowerShell to get something* like "*spool" and I'm sure I'll recognise it. + + +So lets have a look at what happens when we run the line of script. + +[![SpoolerSVC](https://powershell.org/wp-content/uploads/2015/08/SpoolerSVC.png)](https://powershell.org/wp-content/uploads/2015/08/SpoolerSVC.png) + +You can do all kinds of things now you have all that information in the variable. We just extract what we want. Maybe you think to yourself...I wonder how many running services I have? Or how many are not running. Don't be concerned with the code you see here, as if you're beginning it is hard to get a handle on it all at once. The point is that the Variable has all this information stored and we can get it out. Variables are great if not essential in scripts as the script can do all these things once it collects the information for the Variable at the beginning.  + +![statuscount](https://powershell.org/wp-content/uploads/2015/08/statuscount.png) + +There is something else about Variables that is really important to understand in PowerShell. And I have to say it took me quite a while to "get it". PowerShell is an Object Orientated language.  It is very important to understand and deserves a blog post in it's own right. It's like saying it's a 3 dimensional language instead of a 2 dimensional language. So when we create a variable we are not just holding a word or a string we are holding an object. And objects are exciting! Because they hold heaps of information (properties)  and another another thing called methods. All of this is inside the variable. In the example above the "name" spooler is a property. It's like naming anything. Like a car. The cars name is Ford. But the method is drive, for example. There (hopefully) is also a method for stop. In our PowerShell example the method is count and the property we are looking for is status. Some properties have properties...like "running". It can get complex. The thing is all this is in a variable and all of it you can access bit by bit when and how you want it. + +In other languages variables have to be declared. There are lots of kinds of variables but PowerShell is smart enough to automatically work out what kind of variable it should be looking at. So declaring a variable is usually not needed. The problem in Powershell is that most of the time the automatic part works well .... so well sometimes I forget that variables can be declared. Sometimes the script just doesn't work like you thought it would. It turns out you need to declare the variable. And sometimes you want to because there are some juicy methods you want to get to. Image you want to work with a date. 12/05/15. So you put it in a variable called $date. $date = "12/05/15". Remember we talked about methods. Methods are things we can do. By the way that date is just some writing. It's basic. What PowerShell thinks is, that it's a sting. Like this: [string]$date. That's how you can declare a variable in PowerShell. Use [] and the appropriate syntax. If you want to work with numbers [int]$date and PowerShell knows you want to work with numbers. In out case we want to work with a date. So we declare our variable. [datetime]$date. There is a very cool cmdlet called get-member that shows all the properties and methods (and other things) in a variable. Check this out. This is what _$date | get-member_  gives us when we don't declare the variable. + +[![stringmethod](https://powershell.org/wp-content/uploads/2015/08/stringmethod.png)](https://powershell.org/wp-content/uploads/2015/08/stringmethod.png) + + + +All those methods let you do things to the content of the variable. Like _toupper_. That will make all the letters capital. Or _replace_. Lets you replace letter or words in a string stored in the variable. But we don't want that! We want to work with our date! Now check this out... [datetime]$date | get-member + +![datemethods](https://powershell.org/wp-content/uploads/2015/08/datemethods.png) + +It's totally different. There's all those juicy properties like _month,minute_ and _dayofyear_. And cool methods like _todatetime_, and _tolongdatestring_. So now that we have made available _tolongdatestring_ we can use it like this_. _Our 12/05/15 has become Saturday, 5 December 2015. If we hadn't declared our variable we wouldn't have been able to do that. + +[![tolongdate2](https://powershell.org/wp-content/uploads/2015/08/tolongdate2.png)](https://powershell.org/wp-content/uploads/2015/08/tolongdate2.png) + +Hopefully if you didn't know what those $ sign things were you now have a better idea. Oh and that . in the .count or .tolongdatestring is so cool. I had no idea when I was starting out and you should try looking up . on the internet. That . is like a short cut to get into the variables and access methods or properties. $myservice.name, $myservice.status, and $myservice.displayname will give just those properties.  All that complexity is yours to play with, explore and use once it's stored in a variable.  + +Keep practicing, PowerShell is the best thing since Windows. + + + +Steve diff --git a/content/articles/2015/09/_index.md b/content/articles/2015/09/_index.md new file mode 100644 index 000000000..ed9a66af6 --- /dev/null +++ b/content/articles/2015/09/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from September 2015" +description: "PowerShell.org Articles published in September 2015." +--- diff --git a/content/articles/2015/09/automate-enabling-and-disabling-lync-skype-for-business-users/index.md b/content/articles/2015/09/automate-enabling-and-disabling-lync-skype-for-business-users/index.md new file mode 100644 index 000000000..7f1545426 --- /dev/null +++ b/content/articles/2015/09/automate-enabling-and-disabling-lync-skype-for-business-users/index.md @@ -0,0 +1,27 @@ +--- +url: /articles/2015-09-23-automate-enabling-and-disabling-lync-skype-for-business-users/ +title: Automate enabling and disabling Lync / Skype for Business users +authors: + - Steve Parankewich +date: "2015-09-23T21:30:58+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +aliases: + - /2015/09/automate-enabling-and-disabling-lync-skype-for-business-users/ +--- + +Hello PowerShell.org community, + +This is my first post here at PowerShell.org, and I have a goal of posting tips, tricks, articles, and solutions once a week. My first exposure to scripting was on my x486 computer. I would always create .bat files to launch my DOS based games from the root folder. I learned complex scripting through the use of VB Script, automating the roll out and updating of Windows 2000 desktops and servers. I quickly transitioned to PowerShell as my preferred scripting language upon its release. I use PowerShell on a daily basis to administer Windows Server, SQL Server, Exchange, Lync / Skype for Business, Citrix XenApp / XenDesktop, Office 365, and Dell Active Roles Server. I have very much enjoyed watching the progression and adoption of PowerShell as the default scripting language. I hope my posts will be useful to other administrators around the world. + +Today's post deals with automatically enabling and disabling users for Lync / Skype for Business. I kept the script examples simple so that they are easy to understand. If you would like a complex scenario tackled, simply comment on the blog and I will post the solution. + +Head on over to [PowerShellBlogger.com][1] for a full breakdown of enabling and disabling Lync / Skype for Business users locally or remotely. + +Best Regards, +Steve Parankewich +Twitter: [powershellblog][2] + + [1]: http://powershellblogger.com/?p=111 + [2]: http://twitter.com/powershellblog diff --git a/content/articles/2015/09/basic-exchange-monitoring/index.md b/content/articles/2015/09/basic-exchange-monitoring/index.md new file mode 100644 index 000000000..07b4d359b --- /dev/null +++ b/content/articles/2015/09/basic-exchange-monitoring/index.md @@ -0,0 +1,31 @@ +--- +url: /articles/2015-09-01-basic-exchange-monitoring/ +title: Basic Exchange Monitoring +authors: + - Matt Laird +date: "2015-09-02T01:32:03+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks + - Tools +aliases: + - /2015/09/basic-exchange-monitoring/ +--- + +Hello Powershell.org!  This is the first time I've posted for anyone outside of my own powershell blog site [PowerShellMasters.com](http://www.powershellmasters.com) and I just want to thank PowerShell.org for everything they do for our community.  I think most of you would agree that this site is one of the best PowerShell sites out there today and I am grateful for the opportunity to reach so many PowerShell people.  OK enough with the touchy-feely stuff. 🙂 + +If you've been a Sys Admin for any extended time then you've probably had your fair share of run-ins with Exchange.  Whether you are a full-time Exchange Admin or just doing it as part of your "other duties" I think we all know you have to keep an eye on this system or it can get away from you!   + +Now there are dozens of monitoring solution out there that can help us monitor our Exchange environments and the are great especially in detailed reports.  But who has time to pour over screen after screen of stats?  I wrote the script [Exchange_Basic_Monitor.ps1](http://powershellmasters.com/scripts/) because I wanted a simple one-page report to check each morning when I get to the office.  There's nothing fancy or overly complicated about this script, but it will definitely let you know where you stand with your Exchange environment.  If you want to read more about this script just follow the link below.  When you are done make sure to come back and check out some more of [PowerShell.org](http://www.powershell.org)'s site. + + +**[Exchange 2013: Basic Monitoring](http://powershellmasters.com/2015/09/exchange-2013-basic-monitoring/)** + + +Like I said I'm pretty new to this whole blogging thing, but so far it's been really fun (and a little theraputic too!).  If you have some comments, questions or advice I'm happy to hear it.  Thanks for reading and I hope everyone likes the article. + + + +Thanks + +Matt diff --git a/content/articles/2015/09/call-for-topics-extended-powershell-and-devops-global-summit-2016/index.md b/content/articles/2015/09/call-for-topics-extended-powershell-and-devops-global-summit-2016/index.md new file mode 100644 index 000000000..3dc3efb94 --- /dev/null +++ b/content/articles/2015/09/call-for-topics-extended-powershell-and-devops-global-summit-2016/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2015-09-13-call-for-topics-extended-powershell-and-devops-global-summit-2016/ +title: "Call for Topics Extended: PowerShell and DevOps Global Summit 2016" +authors: + - Don Jones +date: "2015-09-14T06:56:16+00:00" +categories: + - PowerShell Summit +aliases: + - /2015/09/call-for-topics-extended-powershell-and-devops-global-summit-2016/ +--- + +In light of our recent [announcement regarding the future of PowerShell Summit][1], we are extending the call for topics to the end of October, 2015. + +We invite speakers to re-visit their existing proposals and indicate the desired length of their session. For example, simply add "[45min]" to the session abstract if you feel your session is suitable for our traditional 45-minute time slot. Or, indicate an alternative of [90min] or [120min].  + +We also are broadening the scope of the event to include a variety of DevOps-focused topics. We welcome sessions on DevOps practices, tooling, and technologies. + +Topics on any technology centered on the PowerShell Language Specification are also welcome, including cross-platform DSC, PowerShell on operating systems other than Windows, and so on. + +With our expanded focus and renewed commitment to deep-dive, DevOps-flavored information, we hope that you'll take the time to propose a session for this wonderful new event! Please [follow the instructions on the original call for topics][2], with the new deadline and topical focus in mind. + + [1]: https://powershell.org/2015/09/13/future-of-powershell-summit-in-europe-and-north-america/ + [2]: https://powershell.org/2015/08/03/powershell-summit-north-america-2016-call-for-topics/ diff --git a/content/articles/2015/09/convert-iso-and-wim-to-vhd-with-a-module/index.md b/content/articles/2015/09/convert-iso-and-wim-to-vhd-with-a-module/index.md new file mode 100644 index 000000000..f8e3dc675 --- /dev/null +++ b/content/articles/2015/09/convert-iso-and-wim-to-vhd-with-a-module/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2015-09-28-convert-iso-and-wim-to-vhd-with-a-module/ +title: Convert ISO and WIM to VHD with a module +authors: + - David Jones +date: "2015-09-29T04:24:03+00:00" +categories: + - Tools +aliases: + - /2015/09/convert-iso-and-wim-to-vhd-with-a-module/ +--- + +Convert-WindowsImage.ps1 is a very popular method to create VHD's with. However it's not a module, and in it's current form cant be added to one. + +So I have started a new project on GitHub called WindowsImageTools and posted the results to the [PowerShell Gallery][1]. + +It has a few functions so far. Convert-Wim2Vhd, to do the work,  and New-UnattendXml because it hate having to edit XML to make minor changes. The resulting XML is universal in that it works on both 32 and 64 bit and will do a silent install (currently on Volume Media only). Then it auto-logs on the Admin and run a PowerShell script to kick off what ever you need bootstrapped (like DSC) + +To find out more. take look at the details over on [my blog about WindowImageTools][2] (and Yaks) or the [GitHub repo][3] + + [1]: https://www.powershellgallery.com/packages/WindowsImageTools/ + [2]: https://bladefirelight.wordpress.com/2015/09/29/shaving-the-yak-leads-me-to-create-new-module-windowsimagetools/ + [3]: https://github.com/BladeFireLight/WindowsImageTools diff --git a/content/articles/2015/09/devops-a-practical-example/index.md b/content/articles/2015/09/devops-a-practical-example/index.md new file mode 100644 index 000000000..e3ef18574 --- /dev/null +++ b/content/articles/2015/09/devops-a-practical-example/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2015-09-11-devops-a-practical-example/ +title: "DevOps: A Practical Example" +authors: + - Don Jones +date: "2015-09-11T11:22:12+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/09/devops-a-practical-example/ +--- + +If you look at DevOps as a means of removing hurdles between coders and users, there's almost no better real-world, practical example than Amazon Elastic Beanstalk. If you're not familiar with EBS, look into it - it's kinda cool. + +EBS isn't suitable for every situation, to be sure. It's mainly useful for Linux VMs, running Web sites, in fact, which isn't 100% of your workloads. But the _idea_ is pretty awesome. Developers store their code in a source control repo - ideally, Git. Along with their code - and this is the cool bit - they include a configuration file. This file can list things like environment variables, packages (installed from repos using NPM, RHL, YUM, etc), and so on. + +When you recycle the application, EBS spins up new VMs _and configures them on the fly to match your configuration file. _It then shuts down any currently running machines.  + +So the deal is, _the developer_ specifies the machine configuration - and they can do that in a test silo. All the code, _including the configuration directives, _live in Git. So when it's working in test, you just point the production silo at the same Git repo, and SHAZAM! application is up and running. Nobody manually configures anything. Change the app? No problem - just check in the code and recycle the application, and the new code - and its configuration - is live. + +The "ops" portion of the scenario, in other words, is completely automated. Amazon has automated all the bits that sit between a developer and deployed code. Amazon's back end magic reads that configuration document and uses it to configure 1-to-infinity virtual machines as directed. Nobody has to do anything manual. The "server," in the form of a VM, just becomes another software element. "Infrastructure as code," if you will. + +Gosh, what could Microsoft do to compete with that in Azure? What could _you_ do, in your "private cloud," to provide similar capabilities? + +Hmm... 🙂 diff --git a/content/articles/2015/09/find-location-of-locked-out-accounts/index.md b/content/articles/2015/09/find-location-of-locked-out-accounts/index.md new file mode 100644 index 000000000..db57fd413 --- /dev/null +++ b/content/articles/2015/09/find-location-of-locked-out-accounts/index.md @@ -0,0 +1,34 @@ +--- +url: /articles/2015-09-08-find-location-of-locked-out-accounts/ +title: Find Location of Locked Out Accounts +authors: + - Matt Laird +date: "2015-09-08T11:16:45+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks + - Tools +aliases: + - /2015/09/find-location-of-locked-out-accounts/ +--- + +# I'm Locked Out, Help! + +If you've been a sys admin for more than a week you've probably heard this..."I'm locked-out, help!".  Normally the user has made their way to your cube and is impatiently tapping their foot waiting for you to magically solve there problem.  So you find their account, reset their password and everything is right with the world...Or is it?  Two minutes later they show up again because their account was locked-out before they even got back to their desk.  Now what do you do? + +There are several ways to go about finding this information, some MUCH better than others.  Since we are all PowerShell people (or at least stayed at a Holiday Inn Express) that will be our method of choice.  If you want to read more click on the link below, but if you just want to get to the script you can follow this link to my [downloads page][1]. + +As always make sure once you've checked us out over at [PowerShellMasters.com][2] to head back here to read more awesome PowerShell posts on [PowerShell.org][3]. + +**[Find Location of Locked Out Accounts][4]** + +If you have some comments, questions or advice I'm happy to hear it.  Thanks for reading and I hope everyone likes the article. + +Thanks + +Matt + + [1]: http://powershellmasters.com/scripts/ + [2]: http://powershellmasters.com + [3]: https://powershell.org + [4]: http://powershellmasters.com/2015/07/find-location-of-locked-out-accounts/ diff --git a/content/articles/2015/09/find-stale-accounts-in-active-directory/index.md b/content/articles/2015/09/find-stale-accounts-in-active-directory/index.md new file mode 100644 index 000000000..943c747ad --- /dev/null +++ b/content/articles/2015/09/find-stale-accounts-in-active-directory/index.md @@ -0,0 +1,33 @@ +--- +url: /articles/2015-09-12-find-stale-accounts-in-active-directory/ +title: Find Stale Accounts in Active Directory +authors: + - Matt Laird +date: "2015-09-12T16:02:38+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/09/find-stale-accounts-in-active-directory/ +--- + +# **Find Stale Accounts in Active Directory** + +Everyone who has managed Active Directory knows that keeping it free of "stale" accounts is a tough task.  Typically no one cares about this until it’s time for the Microsoft True Up.  Then we’ve got to hustle to get rid of all these unused accounts before we have to pay for them again!  Pre-PowerShell it was tough because well... you didn't have POWERSHELL!  Now the hardest part about finding these accounts is defining what stale means to your company.  There is no right or wrong answer to this question, but there are some things that we can check to help lead us to an optimal answer.  You can read the rest of this article by clicking on the link below.  While you are there check out some of my other posts, the [script repository][1] and the [resource page][2]. + +**[Find Stale Accounts in Active Directory][3]** + +As always make sure once you've checked us out over at [PowerShellMasters.com][4] to head back here to read more awesome PowerShell posts on [PowerShell.org][5]. + +If you have some comments, questions or advice I'm happy to hear it.  Thanks for reading and I hope everyone likes the article. + +Thanks + +Matt + + + + [1]: http://powershellmasters.com/scripts/ + [2]: http://powershellmasters.com/resources/ + [3]: http://powershellmasters.com/2015/07/find-stale-accounts-in-active-directory/ + [4]: http://powershellmasters.com + [5]: https://powershell.org diff --git a/content/articles/2015/09/future-of-powershell-summit-in-europe-and-north-america/index.md b/content/articles/2015/09/future-of-powershell-summit-in-europe-and-north-america/index.md new file mode 100644 index 000000000..9e1f542a7 --- /dev/null +++ b/content/articles/2015/09/future-of-powershell-summit-in-europe-and-north-america/index.md @@ -0,0 +1,86 @@ +--- +url: /articles/2015-09-13-future-of-powershell-summit-in-europe-and-north-america/ +title: Future of PowerShell Summit in Europe and North America +authors: + - Don Jones +date: "2015-09-14T06:49:02+00:00" +categories: + - PowerShell Summit +aliases: + - /2015/09/future-of-powershell-summit-in-europe-and-north-america/ +--- + +As we kick off PowerShell Summit Europe 2015, I wanted to share some decisions we've made regarding the future of the event. + +When we first launched PowerShell Summit in 2013, our goal was to be the spiritual successor of the former “PowerShell Deep Dive” events held as part of Quest’s The Experts Conference (TEC) event. Dell’s acquisition of Quest eliminated TEC, and PowerShell.org worked with the PowerShell product team to create the Summit. + +It’s important to understand that Microsoft has never financially supported PowerShell Summit, except for sending team members to participate and present. Microsoft wanted to ensure the Summit would continue even if Microsoft itself got distracted in one year – something which does happen – and establishing the event as independent and financially secure was a critical part of the vision. For the first two years, that meant Summit’s expenses were charged to the organizers’ personal credit cards, and then paid back once registration fees came in. With a budget of around $75,000 per year, it was a significant commitment. + +Our expansion to Europe in 2014 was an attempt to make the content more readily accessible to a larger audience. Europe 2014 was also the first event where we recorded and posted all of the session content, using equipment funded entirely by members of the community. Although smaller, due to exchange rates, higher taxes, and higher overall expenses, Europe still runs a budget close to that of its US counterpart. + +The format of the Summit – 45-minute session blocks – was established at the Deep Dive as a way to present a variety of content, force a tight topical scope, and provide ample time for both Q&A and mingling. + +After completing both 2015 events – in North America and Europe – we decided to sit down and take a look at Summit, think back to its original goals, and see if we were still doing the best job we could to meet those goals. It’s been an interesting conversation, and we have some decisions to share. + + + +**PowerShell Summit Europe** + +First, we at PowerShell.org will not be proceeding with a PowerShell Summit Europe event in 2016. The two Europe Summits that we’ve held so far have been successful, but they involve many times the level of work as the North American event, mainly because everyone running the thing is eight or nine time zones away from where it’s to be held. We literally, in some cases, don’t speak the language. And, because we rely entirely on the efforts of volunteers, the additional time commitment just isn’t sustainable. It’s also personally expensive, since everyone running the event pays – out of pocket – for their international flights, hotel rooms, and so on. It’s been a big burn for our Board members, in particular. + +There’s also a financial problem with the event itself. After two years, we’ve been able to get the North American event to generate enough profit that the excess income from one year can pay for the deposits on the following year – meaning the event is financially self-sufficient, and people’s personal credit cards are no longer at risk. We’ve not been able to achieve that level of financial independence for the European event, in large part due to our own ignorance of the European market, pricing, business customs, taxes, and so on. That means the European events still require someone’s personal credit card to guarantee deposits and event expenses, and it’s pretty scary for those people. So far, we’ve always paid them back – but it’s a pretty big deal to be carrying tens of thousands of dollars on your own credit card, hoping the event sells out. + +So it isn’t at all that we think Europe somehow doesn’t “deserve” its own event – those of us in the USA just can’t be the ones to organize it. In speaking with several members of the community here in Stockholm during Summit 2015, they agree - the community here is more than able to make an incredible event, and organize and price it according to local needs. + + + +**PowerShell Forum: It’s Time for YOU to Get Involved** + +So we’ve creating an [event planning guide][1]. If you, or someone you know, would like to organize a PowerShell event in your country or region, then we’re more than happy to help. We’ll help promote it, we’ll help you get a registration website set up (the same one that Summit uses), and we’ll connect you with the product team and as many global speakers as we can to help create your content program. Ultimately, we think Europeans can do a much better job at organizing an event in Europe, but we’re happy to help as much as we can. We’ve even reserved a brand name, “PowerShell Forum,” which you’d be welcome to use if you want to. + +In fact, we hope that people inside the US will also want to hold “PowerShell Forum” events in their regions. They should be a great “next step” after a smaller PowerShell Saturday event, and they offer the opportunity to fine-tune the content for that specific area. The PowerShell Summit is meant as an expert-grade, deep-dive event – but PowerShell Forum could address beginners, intermediate users, or whatever is locally needed. We believe the guide we’ve created will help remove a lot of the uncertainty and ambiguity of organizing such an event, enabling more people to “give back to the community” by setting up locally focused and regional conferences. + +Also, know that PowerShell Summit Europe was hardly the only option for Europeans. For years, PowerShell MVP Tobias Weltner has held a mostly German-language PowerShell event that’s well-attended by an enthusiastic and engaged audience. European DevOps Days and TechDays events outnumber the ones held in the US, in some years. If you’re looking for a live event with solid PowerShell content, make sure you’re actually _looking,_ because they’re out there. And, as already mentioned, we hope to work with a lot of people all over the world to help promote locally organized events that feature amazing PowerShell content. Tobias’ work in particular shows that locally organized events can be fantastic, and can in many ways be superior to having us Americans come over and fumble our way through something in an unfamiliar environment. + + + +**Many Forums, One Summit** + +With all that in mind, PowerShell Summit North America will be known as **[PowerShell and DevOps Global Summit][2]** from here on out, beginning with our 2016 event in Bellevue, Washington. We believe that one of the primary benefits of Summit is close contact with a wide swath of the PowerShell team, and so it’s likely that _most_ future Summits will be in the area of Microsoft’s campus. It’s simply easier to fly us all up there than it is to have the product team close up shop and fly somewhere else to meet us. The “DevOps” part of the new name reflects the fact that while PowerShell is an awesome tool, it’s real purpose is to help meet business needs. DevOps – a kind of IT management and operational philosophy – is a business-level need that, in the Microsoft space, PowerShell helps realize. + +We’re also going to be changing the session format of the Summit. Rather than a strict schedule of 45-minute sessions, we’re going to switch things up a bit. We’ll continue to offer space for short sessions, since they’re a great way to cover tightly focused topics. But we’re also going to expand into longer sessions, allowing presenters to truly “dive deep” into the guts of the technology. We’re going to create more opportunities for smaller breakouts, since it’s the discussions and personal interactions that create some of the best value from the Summit. And, aside from preparatory pre-conference sessions offered at additional charge, we’re going to strongly de-emphasize beginner- and even intermediate-level content. There are plenty of educational opportunities elsewhere for beginners, and part of the original mission of the Summit was to help the product team connect with some of PowerShell’s most hardcore users. So you’ll see us pushing the envelope more in terms of session content. + +We’re also going to devote a lot of time and effort toward making Summit more interactive. The “wow” factor of that first year at TEC was the amazing amount of back-and-forth generated in the single, 50-person session room. The information shared, the perspectives gained – that’s all difficult in a 100-person session like we have now. So with a European event no longer consuming so much time and brainpower, we’re going to re-commit to making Summit a more personally engaging event, not just a conference. The community has offered a ton of great ideas in this direction already, and we’re going to start implementing some of them in 2016. We’ll continue to experiment and tweak as a regular part of doing business, evolving the event to meet your needs, and to better connect you to this technology community. + +“Some longer sessions” means “fewer total speakers,” which means we’ll also be able to do a bit more, financially, to help our presenters. Until now, they’ve traveled and housed themselves more or less on their own dime, and we’d like to do a lot more to make it less burdensome. Our goal is to have the best presenters on the planet, and we want to try and reduce the “expense hurdle” as much as possible, so that speaker selection isn’t limited to just those who can easily afford to come. We also have a very specific goal of making room for new presenters, so that everyone in the community can truly participate. + + + +**Facing Facts and Setting Expectations** + +We do realize that a relocation to Bellevue, and the elimination of a European Summit event, will reduce the number of people who can make it to the Summit. We’ve decided we’re okay with that. The Summit was always intended to be a small event, attracting the best and brightest in the industry. If you’re working deeply with PowerShell and its related technologies, then the Summit still offers incredible value – even if you’re traveling from far away. We realize that for someone who isn’t deeply engaged with PowerShell, we may be making Summit a harder prospect – but if you’re not truly, deeply engaged, then Summit might not have been the right event for you. + +To be very clear: we know that there’s a huge need for beginner- and intermediate-level education, and that it needs to be affordable. But Summit _isn’t that event._ We still think Summit is an incredible value, one that – if PowerShell is truly _part of your professional_ – is well worth the expense, even if that involves international travel. + +And what we’re _not_ okay with is for Europeans, or anyone else in the world, to be somehow excluded from the great content that a dedicated PowerShell event offers. But that’s not something we can just _give_ everyone. If you look at the major regions of the world – Asia, Australia, Northern Europe, Southern Europe, South Africa, the list goes on – there’s no way we at a single volunteer organization run by six people can possibly bring content to _everyone._ We just aren’t that wealthy! So everyone is going to have to pitch in and help. If you think an awesome PowerShell event would be a huge success in, say, France, then you’re going to have to be the one to step up and organize it. We will _absolutely help_ in terms of promotion, finding speakers, selecting content, and so on – but this is community, and you only get out of it what you put into it. We’re putting a big effort into this event-planning guide to help you get started, but your success will depend a lot on your own efforts. We want _everyone_ to have the education and interaction that a Summit-style event offers – but _everyone_ is going to have to help make it happen. + +Also, know that we will continue with our tradition of recording session content and posting it, for free, online. We’re looking into adding HD video so that you can see presenters as well as their presentations, although there’s no real way for us to capture the immersive experience of actually attending in person. + + + +**What About Beginners?** + +And if the Summit is going to double-down on deep-dive content, what about newcomers who are still trying to become deeply engaged? Hundreds of training centers across the globe still provide solid PowerShell training from Microsoft’s Official Curriculum catalog and Microsoft’s Courseware Marketplace. Independent conferences – TechMentor, for example – offer a range of PowerShell topics as a regular part of their agenda. Books and video training on entry-level topics are available in abundance. Summit was never really intended as an entry-level event, although we recognize that we’ve strayed a bit into that territory in an attempt to be more accessible to a broader audience. **Our 2016 strategy is really a recommitment to our original concept of serving the PowerShell _professional._** But the individual PowerShell Forum events, PowerShell Saturday events, or other PowerShell conferences you organize – whatever you name them, and wherever you hold them – can definitely help meet the need for beginners. + + + +**Our Path Forward** + +**PowerShell and DevOps Global Summit 2016** will be happening in the same year as PowerShell’s 10th birthday, and so much has changed in that decade. Once-difficult topics like Remoting are – for the deeply engaged – now considered routine. We’ve moved on to higher-layer topics like Desired State Configuration, Continuous Integration and Delivery, cloud-based Workflow, and much more. As a community, we’ve developed best practices and patterns that we share, and we’ve seen Microsoft begin a shift toward open-source releases of key components. Heck, we’ve seen Microsoft move PowerShell technologies to other operating systems – something nobody ever thought would happen “back in the day.” And PowerShell.org has remained a volunteer-run organization that tries to benefit the entire community. We’re evolving Summit, and we’ll continue to do our best to do good works on behalf of the community. + +The Board of PowerShell.org has gone through a lot of soul-searching in writing this document, because we don’t want to anyone to see us as walking away from the European Summit. Instead, we feel that we’ve proven a European event _can_ be successful – and we think it _will_ be successful once our European friends step in and take over. We are all stronger _together_ as a community, especially when we can serve our local communities in more specific and granular ways. We would experience the most profound joy you can imagine if, in a couple of years, there are PowerShell Forum (or whatever they’re named) events throughout Europe… Canada… Africa… Asia… Australia and New Zealand… the United States… everywhere. We would take it as the greatest compliment and achievement if we’ve done nothing more than help people see how to pull it off, and inspire them to dive in and make things happen in their own backyard. + +We hope, if you’ve read all this, that you’re already giving it some thought. + + [1]: http://cdn.powershell.org/wp/wp-content/uploads/2013/07/Making-a-PowerShell-Forum.docx + [2]: https://powershell.org/summit/ diff --git a/content/articles/2015/09/how-to-handle-oauth-from-powershell/index.md b/content/articles/2015/09/how-to-handle-oauth-from-powershell/index.md new file mode 100644 index 000000000..f52d6d940 --- /dev/null +++ b/content/articles/2015/09/how-to-handle-oauth-from-powershell/index.md @@ -0,0 +1,35 @@ +--- +url: /articles/2015-09-25-how-to-handle-oauth-from-powershell/ +title: How to handle oAuth from PowerShell +authors: + - Stephen Owen +date: "2015-09-25T15:35:24+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +aliases: + - /2015/09/how-to-handle-oauth-from-powershell/ +--- + +One of the coolest features of PowerShell is the many tools we have available to work with services on the web, be they SOAP, REST, RPC or even WSDL services.  It's no question, PowerShell makes it very easy to pull down data from any of these places. + +Unfortunately, getting data from a service isn't always as easy as embedding your credentials in a URL. In fact, some services require us to authenticate and ask the user for permission before giving up the goods.  For these, oAuth is the de-facto standard for delegated access.   + +In this blog post today on FoxDeploy.com, we cover an easy method to present a user with an oAuth window to ask for permission, and offer a guide of how to handle the somewhat complicated flow of credentials and URLs needed to delegate permissions, using WordPress as an example.   + +[Using PowerShell and oAuth][1] + +#### Special Thanks + +This post couldn't have happened without contributions by Lee Holmes, [Adam Bertram][2], [Keith Hill][3], [Chris Wu][4], and [Ryan Yates][5] for helping me to understand how to safely store credentials, and for other questions.  Extra thanks go to Adam and Ryan for helping me fact-check the post, and to Chris Wu for his excellent write-up on the '[Hey, Scripting Guy][6]' blog.   + + + +-Stephen + + [1]: http://foxdeploy.com/2015/09/25/using-powershell-and-oauth/ + [2]: http://www.adamtheautomator.com/ + [3]: https://rkeithhill.wordpress.com/ + [4]: https://twitter.com/ps4it + [5]: https://twitter.com/ryanyates1990 + [6]: http://blogs.technet.com/b/heyscriptingguy/archive/2013/07/01/use-powershell-3-0-to-get-more-out-of-windows-live.aspx diff --git a/content/articles/2015/09/mspsug-virtual-meeting-the-art-of-powershell-runspaces-september-8th-2015/index.md b/content/articles/2015/09/mspsug-virtual-meeting-the-art-of-powershell-runspaces-september-8th-2015/index.md new file mode 100644 index 000000000..3c66fef26 --- /dev/null +++ b/content/articles/2015/09/mspsug-virtual-meeting-the-art-of-powershell-runspaces-september-8th-2015/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2015-09-04-mspsug-virtual-meeting-the-art-of-powershell-runspaces-september-8th-2015/ +title: "#MSPSUG Virtual Meeting: The Art of #PowerShell Runspaces – September 8th 2015" +authors: + - Mike F Robbins +date: "2015-09-04T14:58:27+00:00" +aliases: + - /2015/09/mspsug-virtual-meeting-the-art-of-powershell-runspaces-september-8th-2015/ +--- + +Join the Mississippi PowerShell User Group virtually on Tuesday, September 8th at 8:30pm Central Time when PowerShell MVP [Boe Prox](http://learn-powershell.net/) will present “_**The Art of PowerShell Runspaces**_”. + +PowerShell runspaces are a known but little documented area that can help to provide performance improvements in your scripts. Besides just using this for performance gains, you can use this to provide a snappier approach to building GUIs in PowerShell. This presentation will show you examples of using Runspaces, RunspacePools as well as utilizing shared variables that can be viewed and modified in multiple runspaces during runtime. Also being demoed is a module called [PoshRSJob](https://github.com/proxb/PoshRSJob) which provides runspace multhreading in a familiar jobs infrastructure. + +Visit the [Mississippi PowerShell User Group](http://mspsug.com/2015/08/25/mspsug-virtual-meeting-the-art-of-powershell-runspaces-on-tuesday-september-8th-at-830pm-cdt/) website to learn more about Boe and to find out more details about this month’s meeting. + +The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info](http://mspsug.com/attendee-info/)” section. + +Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this meeting. + +Note: It is not necessary to live in Mississippi or join our user group to attend our meetings or present a session for our user group. + +µ diff --git a/content/articles/2015/09/powershell-scheduled-jobs-and-tableau-analytics/index.md b/content/articles/2015/09/powershell-scheduled-jobs-and-tableau-analytics/index.md new file mode 100644 index 000000000..90cf46f69 --- /dev/null +++ b/content/articles/2015/09/powershell-scheduled-jobs-and-tableau-analytics/index.md @@ -0,0 +1,141 @@ +--- +url: /articles/2015-09-21-powershell-scheduled-jobs-and-tableau-analytics/ +title: PowerShell Scheduled Jobs and Tableau analytics +authors: + - Mike Roberts +date: "2015-09-21T18:43:21+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/09/powershell-scheduled-jobs-and-tableau-analytics/ +--- + +Here’s a brief rundown of how we leverage a few Cmdlets from the PSScheduledJob module to manage our Analytics stack. For those of us on the Analytics team at +[ +Pluralsight +][1] +, PowerShell is the lynch-pin which binds our two worlds together. To manage the gaps inherent in all platforms (since one tool would be hard-pressed to cover all areas), we use PowerShell to link the worlds of Data and Analytics (and back). We do this because of its depth and the ease with which we can automate just about anything. + + +[![data_stack](https://powershell.org/wp-content/uploads/2015/09/data_stack.png)](https://powershell.org/wp-content/uploads/2015/09/data_stack.png) + + + + + + + + + + + + + + +All that said, we leverage two Cmdlets extensively: +_ +Register-ScheduledJob +_ +and +_ +New-JobTrigger. +_ +In all, there are: + + +- + +90+ jobs + + +- + +30+ enabled and scheduled + + +- + +2 jobs to manage the metadata + + +- + +1 Tableau workbook that surfaces this data to our team + + +**The ‘How does the job perform’ part: ** + +So, you’ve registered a job which soon becomes about 50 jobs. How do you know if each of them succeeded, how long they took, and whether or not they had errors? What about knowing if one takes 10x longer on one particular day? This is certainly worth investigating and analyzing so that you can react quickly to potential hiccups. The below script will let you do that and is meant to be...wait for it...scheduled. + + +`$jobs = Get-ScheduledJob +foreach ($job in $jobs) { + Get-Job -Name $job.Name -Newest 1 | select -Property @{n='Env';e={"$env:computername"}},@{n='Name';e={$job.name}}, @{n='State';e={$_.State}},@{n='DurationInSec';e={($_.PSEndTime - $_.PSBeginTime).Total Seconds}},@{n='TimeStart';e={$_.PSBeginTime}},@{n='TimeEnd';e={$_.PSEndTime}},@{n='ErrCnt';e={($_.Error).count}},@{n='Date';e={(Get-Date).ToString('yyyy-MM-dd')}} | Export-Csv -Path 'your path' -Delimiter ";" -NoTypeInformation -Append +} +`**The ‘When do these jobs happen’ part:** + +While we didn’t use all the properties in the _Get-ScheduledJob_ cmdlet, we did pull out a few. Mostly, we want duration, error count and start/end times. + + +It’s one thing to have a few scheduled jobs running, but it becomes a different animal altogether when there are over 90 happening throughout the day (and on multiple machines). In order to both tame the chaos and control the inevitable job failures, it is necessary to know about (1) when they happened and (2) what happens +_ +when +_ +they, well, run. + + +Again, the basic assumption is that one has some scripts and/or files with code in them. The scheduled jobs, then, make this easier. Here’s a basic example of the ‘when’ regarding the scheduled jobs. We’re exporting a csv so that we can then consume it in +[ +Tableau +][2] +for analysis and alerting: + + +`$t = New-JobTrigger -Daily -At "8:00PM" -RandomDelay 00:00:30 +Register-ScheduledJob -Name 'Cool Name Here' -ScriptBlock { +$TsJobs = Get-ScheduledJob | select -expand Name +foreach($job in $TsJobs) { + Get-JobTrigger -Name $job | select @{n='Env';e={"$env:computername"}},@{n='Date';e={(Get-Date).ToString('yyyy-MM-dd')}},@{n='JobName';e={$job}},Frequency,@{n='Time';e={([datetime]($_.At)).ToShortTime String()}},@{n='DaysOfWeek';e={$_.DaysOfWeek}},Enabled,RepetitionInterval | export-csv 'your path' -delimiter ";" -NoTypeInformation -Append + } +} -Trigger $t +`For this part, much like above, we use a few properties from the +_ +Get-JobTrigger +_ +cmdlet for the analysis and trending of our jobs (see image below). + + + + +[![schd_job_triggers](https://powershell.org/wp-content/uploads/2015/09/schd_job_triggers.png)](https://powershell.org/wp-content/uploads/2015/09/schd_job_triggers.png) + + + + + + + + + + + + + + + + + +**Summary** + +I have added a ‘Date’ field to both sections so that we can do some historical analysis with the jobs. What’s also important is whenever we have to update software/change things on the servers, we can use this to identify when, during the day, we might have a window to do this, not to mention what jobs would be affected by it. + +With two simple bits, we’re able to get a deeper look into the performance and potential avenues for tuning of our analytics pipeline and the jobs. This type of analysis on the ScheduledJob cmdlets can also be correlated with system performance (eg: logs) and our Analytics infrastructure’s performance and logs. While it’s a unique look at a use case for PowerShell, we find it’s been invaluable at providing the data that might not fit into the domains listed above. In short, it’s a perfect ‘glue’ for each pillar we interact with. + + +In the image below, we’ve put it all together for the ‘Job Performance’ overview. This allows us to narrow in on the job/jobs that might not be performing up to par (or as they have historically). + + +[![data_control_dashboard](https://powershell.org/wp-content/uploads/2015/09/data_control_dashboard.png)](https://powershell.org/wp-content/uploads/2015/09/data_control_dashboard.png) + + [1]: http://www.pluralsight.com/ + [2]: http://www.tableau.com/ diff --git a/content/articles/2015/09/september-2015-scripting-games-puzzle/index.md b/content/articles/2015/09/september-2015-scripting-games-puzzle/index.md new file mode 100644 index 000000000..a044252aa --- /dev/null +++ b/content/articles/2015/09/september-2015-scripting-games-puzzle/index.md @@ -0,0 +1,48 @@ +--- +url: /articles/2015-09-05-september-2015-scripting-games-puzzle/ +title: 20115-September Scripting Games Puzzle +authors: + - Don Jones +date: "2015-09-05T13:26:02+00:00" +categories: + - Scripting Games +aliases: + - /2015/09/september-2015-scripting-games-puzzle/ +--- + +Our September 2015 puzzle is another one-liner, to help get you out of Summer Mood and back into Work Mode. This time, it's a pretty real-world scenario, designed to test your understanding of the pipeline and how data can be manipulated within it. You'll need to really grasp pipeline parameter binding to make this work in the shortest command possible. + + + +## **Instructions** + +The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month's puzzle. You can find them all at https://powershell.org/category/announcements/scripting-games/. Many puzzles will include optional challenges, that you can use to really push your skills. + +**To participate**, add your solution to a public Gist (http://gist.github.com; you'll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post.  +**Only post one entry per person. You are not allowed to come back and post corrected or improved versions. If you do, all of your posts will be ignored. **However, remember that you can always go back and edit your Gist. We'll always pull the most recent one when we display it, so there's no need to post multiple entries if you want to make an edit. + + +Don't forget the [main rules and purpose of these monthly puzzles][1], including the fact that you won't receive individual scoring or commentary on your entry. + +**User groups are encouraged to work together** on the monthly puzzles. User group leaders should submit their group's best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most "favorite" entries of the year will win a grand prize from PowerShell.org. + +## + +## **Our Puzzle** + +You’ve been given a CSV file (named Input.csv) that has a single column, named MACHINENAME. The contents of that column are either computer host names or IP addresses. The computers named run a mix of operating systems, from Windows Server 2003 and Windows XP, up through the newest versions. All have at least PowerShell v2 installed. RPC communications are open between all computers on the network. All computers belong to the same domain. + +Write a command or short script that reads the CSV file, contacts each computer, and retrieves each computer’s textual operating system version (e.g., “Microsoft Windows 8.1 Pro”, not “6.3.9600”). The command or script should output a CSV file, named Output.csv, that has two columns: MACHINENAME and OSVERSION. + +There’s no need to handle errors for machines that aren’t reachable. + + + + + +**Challenges:** + + * Try to do write this as a one-liner, using as few semicolons as possible. + * Try to minimize your use of curly brackets (just for fun) in your answer. + + [1]: https://powershell.org/?p=2574 diff --git a/content/articles/2015/09/speaking-at-powershell-summit-2016-topic-ideas-for-aspiring-speakers/index.md b/content/articles/2015/09/speaking-at-powershell-summit-2016-topic-ideas-for-aspiring-speakers/index.md new file mode 100644 index 000000000..4c914c277 --- /dev/null +++ b/content/articles/2015/09/speaking-at-powershell-summit-2016-topic-ideas-for-aspiring-speakers/index.md @@ -0,0 +1,29 @@ +--- +url: /articles/2015-09-16-speaking-at-powershell-summit-2016-topic-ideas-for-aspiring-speakers/ +title: "Speaking at PowerShell Summit 2016: Topic Ideas for Aspiring Speakers" +authors: + - Don Jones +date: "2015-09-16T08:26:25+00:00" +categories: + - PowerShell Summit +aliases: + - /2015/09/speaking-at-powershell-summit-2016-topic-ideas-for-aspiring-speakers/ +--- + +Our call for topics for **PowerShell and DevOps Global Summit 2016** is open until November 1st, and I thought I'd share some ideas for the kind of 400-level content we're looking for. + +First, to submit abstracts, [pre-register as a speaker candidate][1]. Be sure to fill in the brief demographic information presented, and then add any information for the Attendee Directory that you'd like. When you're done with that, select **Abstracts** from the menu at the tippy-top of the page, and enter your session information. Be sure to include, as the first characters in the abstract, either "[45m]", "[90m]", or "[120m]" as an indication on your desired timeslot - 45, 90, or 120 minutes. Also set your session to "Ready for Review" when you're done. + +Now... for some ideas! Feel free to riff on these and twist them in any direction you think people would find useful. Keep in mind that we're after 400+ level content - deep, deep dives. + + * PowerShell Remoting. Tackle something difficult, like multi-hop authentication, certificate authentication, etc. + * DevOps. Case studies and detailed information into how you've seen DevOps succeed or fail, along with lessons learned. + * Tooling. Bring deep education on tools that can help enable a DevOps way of life. More than just feature overviews - dig deep into exactly how you improved your organization's operations, and what you learned along the way. + * Deeper coding. Using .NET, digging into the depths of CIM, creating scripted classes, diving into workflow - there's a huge universe of advanced, core PowerShell topics that attendees would benefit from. + * Domain-specific topics. Using PowerShell with Azure, O365, System Center, and more - these are all in-demand topics. Keep the coverage deep - beginner content belongs at another event. + * Hacking the shell. Extending the ISE, writing your own tab completion/expansion routines, and more - dig deep into the shell's guts and show people what can be done. + * Practical shell. Help attendees build reporting infrastructure, inventorying systems, and other complete solutions using a PowerShell, DIY approach. + +As you can see, it's a real greenfield. Speakers will be offered 3 nights' hotel accommodations at the Summit, and anyone presenting for more than 45 minutes will be offered an additional honorarium to further offset travel expenses. **Everyone** who has been using the shell for a while has something to offer - so step in and offer! + + [1]: https://eventloom.com/event/register/PSNA16/Speaker?preregister=1 diff --git a/content/articles/2015/09/store-secured-password-in-powershell-script/index.md b/content/articles/2015/09/store-secured-password-in-powershell-script/index.md new file mode 100644 index 000000000..c3cacfedd --- /dev/null +++ b/content/articles/2015/09/store-secured-password-in-powershell-script/index.md @@ -0,0 +1,33 @@ +--- +url: /articles/2015-09-15-store-secured-password-in-powershell-script/ +title: Store Secured Password in PowerShell Script +authors: + - Matt Laird +date: "2015-09-16T00:52:27+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks + - Tools +aliases: + - /2015/09/store-secured-password-in-powershell-script/ +--- + +Automation is awesome, but what if you need to run a script with elevated privileges?   If you are following security best practices then the account you login with most likely doesn't have the required elevated privileges.  Storing your password in plain text in your scripts is no good either.  So what do we do?  There are several options and each has there place, but I'll show you my favorite below.  Check out the full article by clicking on the link below.  While you are there check out some of my other posts, the [script repository][1] and the [resource page][2]. + +**[Store Secured Password in PowerShell Script][3]** + + + +As always make sure once you've checked us out over at [PowerShellMasters.com][4] to head back here to read more awesome PowerShell posts on [PowerShell.org][5]. + +If you have some comments, questions or advice I'm happy to hear it.  Thanks for reading and I hope everyone likes the article. + +Thanks + +Matt + + [1]: http://powershellmasters.com/scripts/ + [2]: http://powershellmasters.com/resources/ + [3]: http://powershellmasters.com/2015/08/store-secured-password-in-powershell-script + [4]: http://powershellmasters.com + [5]: https://powershell.org diff --git a/content/articles/2015/09/take-home-from-powershell-summit-europe/index.md b/content/articles/2015/09/take-home-from-powershell-summit-europe/index.md new file mode 100644 index 000000000..b852df561 --- /dev/null +++ b/content/articles/2015/09/take-home-from-powershell-summit-europe/index.md @@ -0,0 +1,82 @@ +--- +url: /articles/2015-09-17-take-home-from-powershell-summit-europe/ +title: Take home from PowerShell Summit Europe +authors: + - Jonas Sommer Nielsen +date: "2015-09-17T12:25:55+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/09/take-home-from-powershell-summit-europe/ +--- + +WOOHA it's been a great week. + +I sat down last night my brain all fried and tried to compile a list of things to remember from the past week. + +[![PowerShellMagazine - (wallpaper) - KEEP CALM.cdr](https://powershell.org/wp-content/uploads/2015/09/KeepCalmAndLearnPowerShell_1024x768.jpg)][1] + +There is  much focus on "changing the mindset" of the community. Get into the DevOps mindset and become a toolmakers. This is my take-home from the conference. There's no way to summarize all of the conference other than to say: Look forward to the videos on YouTube. + +#### Stuff to read: + + * A great short read about "[Toolmaking][2]" + * [Steven][3] did a [DevOps Reading list][4]. + +### Concepts: + + * **[Iain Brighton][5]'s talk "Man vs Testlab"**. I'm definitely going home and testing his [script][6] He created a script that will do everything from downloading .iso's from Microsoft, Configure Hyper-V, create instances and spawns servers for you. To stand up a entire Testlab following the [Microsoft Lab guides standard][7]. (DC, Server, Non-domain joined server and a client) You can of cause easily change the setup. + * **GitHub** I was amazed by [Hemant Mahawar][8] and [Krishna C Vutukuri][9]'s talk on the way the PowerShell team uses GitHub and how easy it is to contribute to the code today. (Go +get a GitHub account today +! and start learning if you haven't already, and [go here][10] to contribute) + * **PowerShell Gallery** There were multiple talks on the [Gallery][11] and I personally love this. It's nice to hear that the PowerShell Team feels the same way. (See earlier [post][12]) + * **Pester tests** Unfortunately I didn't attend any pester specific talks this time. But it's clear from the general theme that pester is a big part of the DevOps' mindset and the way tools are being developed in the future. + *  Quote [June Blender][13]: _Free! #PowerShell Community Build Server. Runs Pester tests on v2-v5 automatically. Best thing since the pipeline. _ + * **DSC** This is a crucial platform for the future. The ability to use the "Make it so" mindset. To configure and services and prevent drift, this is the documentation of the future. [Getting started][14] + +[![makeitso](https://powershell.org/wp-content/uploads/2015/09/makeitso.png)](https://powershell.org/wp-content/uploads/2015/09/makeitso.png) + +There were tons of other things going on. On a personal note after my trip to [PSUG.dk][15] a few weeks ago where we had a session on [ARM][16] and spend a day creating JSON files by hand by following the schema's on GitHub and had a horrible experience.  [Jeff][17] blew my mind when he demoed roughly the same and noted, off cause we just do: ConvertFrom-Json play with the PowerShell object and ConvertTo-Json back to JSON. He had some really nice examples on how not to do JSON templates, and better ways to generate them. + +And I got really excited when during [Simon][18]'s talk on GitHub, I asked for ISE integration and [Tobias][19] replied from somewhere behind me. + +-_Working on that_. + +Meaning [ISESteroids][20] will have that soon. Happy times 😀 + + + +When all the above is done, I only need to figure out how to get to the next Summit 🙂 + + + + + +#### Contact me + +Twitter [@mrhvid][21] + +Web [Jonas.SommerNielsen.dk][22] + + [1]: http://www.powershellmagazine.com/2011/09/23/powershell-wallpapers/ + [2]: http://www.itskeptic.org/content/important-devops-word-toolmakers + [3]: https://twitter.com/StevenMurawski + [4]: http://stevenmurawski.com/devops-reading-list/index.html + [5]: https://twitter.com/iainbrighton + [6]: https://github.com/iainbrighton/PSHSummit-Man-vs-Testlab + [7]: http://social.technet.microsoft.com/wiki/contents/articles/7807.windows-server-2012-test-lab-guides.aspx + [8]: https://twitter.com/HemantMahawar + [9]: https://github.com/KrishnaV-MSFT + [10]: https://github.com/powershell/ + [11]: http://www.PowerShellGallery.com + [12]: https://powershell.org/2015/09/11/working-with-powershellgallery/ + [13]: https://twitter.com/juneb_get_help + [14]: https://www.microsoftvirtualacademy.com/en-US/training-courses/getting-started-with-powershell-desired-state-configuration-dsc--8672 + [15]: http://www.psug.dk/?p=649 + [16]: https://azure.microsoft.com/en-us/documentation/articles/resource-group-overview/ + [17]: https://twitter.com/JeffWouters + [18]: https://twitter.com/SimonWahlin + [19]: https://twitter.com/TobiasPSP + [20]: http://www.powertheshell.com/isesteroids/ + [21]: https://twitter.com/mrhvid + [22]: http://Jonas.SommerNielsen.dk diff --git a/content/articles/2015/09/use-import-localizeddata-to-internationalize-your-scripts/index.md b/content/articles/2015/09/use-import-localizeddata-to-internationalize-your-scripts/index.md new file mode 100644 index 000000000..dca0ca5fc --- /dev/null +++ b/content/articles/2015/09/use-import-localizeddata-to-internationalize-your-scripts/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2015-09-03-use-import-localizeddata-to-internationalize-your-scripts/ +title: Use Import-LocalizedData to Internationalize your Scripts +authors: + - Adam Platt +date: "2015-09-03T21:13:28+00:00" +categories: + - PowerShell for Developers + - Tutorials +aliases: + - /2015/09/use-import-localizeddata-to-internationalize-your-scripts/ +--- + +Whether you're working with an enterprise client with a global presence or building a tool that you want to share with the world, you may find yourself wanting to build support for multiple languages into your scripts. The Import-LocalizedData Cmdlet is a simple and powerful way to achieve this. I put up a pair of posts about my recent experience with a globalization effort and how we were able to get a lot of functionality with only a few lines of code. + +The first post, [Internationalization with Import-LocalizedData](http://www.plattsoft.net/2015/08/24/internationalization-with-import-localizeddata/), describes the Cmdlet itself, how it works, and how to use it to automatically detect and load the correct language files for display at runtime. This is based on the regional settings of the user under which the PowerShell session is running. + +The second post, [Internationalization with Import-LocalizedData: Part 2](http://www.plattsoft.net/2015/08/27/internationalization-with-import-localizeddata-part-2/), goes into more detail about some research we had to do into what exact regional settings control the language that PowerShell will attempt to use. + +Even if you're not planning to localize your scripts into other languages right now, you should still think about globalizing your code so that it's easy to do if you change your mind, or if someone is kind enough to want to contribute some translations. diff --git a/content/articles/2015/09/where-are-my-fsmo-roles/index.md b/content/articles/2015/09/where-are-my-fsmo-roles/index.md new file mode 100644 index 000000000..2220bda64 --- /dev/null +++ b/content/articles/2015/09/where-are-my-fsmo-roles/index.md @@ -0,0 +1,82 @@ +--- +url: /articles/2015-09-08-where-are-my-fsmo-roles/ +title: Where Are My FSMO Roles? +authors: + - Thomas Rayner +date: "2015-09-08T14:00:21+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +aliases: + - /2015/09/where-are-my-fsmo-roles/ +--- + +Hello, PowerShell people! I've never posted on PowerShell.org before and so I feel as though I owe you a quick introduction before we dive into the tip I'd like to share with you. + +My name is Thomas Rayner and I am a Microsoft MVP for Windows PowerShell. I'm also a systems administrator and degree program instructor. I volunteer a fair bit of time as the President of the Edmonton Microsoft User Group (EMUG). EMUG has a more in depth bio for me on their [About Executive](http://emug.ca/executive/) page in case you want to know more about the person behind the avatar. If you're in the Edmonton area, I strongly recommend [signing up for our mailing list](http://emug.ca/contact-us/) so you can come attend the great events we put on. + +I'm pretty active on Twitter at [@MrThomasRayner](http://twitter.com/MrThomasRayner) and I post bi-weekly on my own blog, [workingsysadmin.com](http://workingsysadmin.com). + +**Ok, tip time!** + +If you're an IT pro of any kind, it would be difficult to not bump into Active Directory from time to time. If you're a reader of PowerShell.org, you most likely administer Active Directory in some capacity. Inevitably, as an AD admin, you're going to find yourself asking "Which server is holding which FSMO role right now?" and "Isn't there a way to do this in PowerShell?". _If you're scratching your head right now wondering what a Flexible Single Master Operation (FSMO) role is, please check out this prerequisite reading: [https://support.microsoft.com/en-us/kb/197132](https://support.microsoft.com/en-us/kb/197132). _ + +Of course there's a way to do this in PowerShell! Let's work through a solution. Firstly, we need to import the Active Directory module. _[Stuck already?](http://blogs.msdn.com/b/rkramesh/archive/2012/01/17/how-to-add-active-directory-module-in-powershell-in-windows-7.aspx)_ + + +`Import-Module ActiveDirectory +`That was easy. Now, let's get digging. There's a cmdlet called Get-ADDomainController which seems like a good place to start since we know our FSMO roles are going to be on Domain Controllers (DC). Let's take a look at what gets returned for each DC. + + +`Get-ADDomainController -Filter * | Select-Object -First 1 | Get-Member + TypeName: Microsoft.ActiveDirectory.Management.ADDomainController +Name MemberType Definition +---- ---------- ---------- +Contains Method bool Contains(string propertyName) +Equals Method bool Equals(System.Object obj) +GetEnumerator Method System.Collections.IDictionaryEnumerator GetEnumerator() +GetHashCode Method int GetHashCode() +GetType Method type GetType() +ToString Method string ToString() +Item ParameterizedProperty Microsoft.ActiveDirectory.Management.ADPropertyValueCollection Item(string propertyName) {get;} +ComputerObjectDN Property System.String ComputerObjectDN {get;} +DefaultPartition Property System.String DefaultPartition {get;} +Domain Property System.String Domain {get;set;} +Enabled Property System.Boolean Enabled {get;} +Forest Property System.String Forest {get;set;} +HostName Property System.String HostName {get;} +InvocationId Property System.Guid InvocationId {get;} +IPv4Address Property System.String IPv4Address {get;set;} +IPv6Address Property System.String IPv6Address {get;set;} +IsGlobalCatalog Property System.Boolean IsGlobalCatalog {get;} +IsReadOnly Property System.Boolean IsReadOnly {get;} +LdapPort Property System.Int32 LdapPort {get;} +Name Property System.String Name {get;set;} +NTDSSettingsObjectDN Property System.String NTDSSettingsObjectDN {get;} +OperatingSystem Property System.String OperatingSystem {get;} +OperatingSystemHotfix Property System.String OperatingSystemHotfix {get;} +OperatingSystemServicePack Property System.String OperatingSystemServicePack {get;} +OperatingSystemVersion Property System.String OperatingSystemVersion {get;} +OperationMasterRoles Property Microsoft.ActiveDirectory.Management.ADPropertyValueCollection OperationMasterRoles {get;} +Partitions Property Microsoft.ActiveDirectory.Management.ADPropertyValueCollection Partitions {get;} +ServerObjectDN Property System.String ServerObjectDN {get;} +ServerObjectGuid Property System.Guid ServerObjectGuid {get;} +Site Property System.String Site {get;set;} +SslPort Property System.Int32 SslPort {get;} +`That's a lot of stuff. We can see if a DC is an RODC, which forest and domain it's in, the OS, its site... and its OperationMasterRoles! Looks like we're in business. The following code just about accomplishes our goal. + + +`Get-ADDomainController -Filter * | +Select-Object -Property Name, OperationMasterRoles +`The above script will get all the DCs in the environment and return the name of the DC and the FSMO roles held. That's great, but, what if you have dozens of DCs and looking at a big list of DCs isn't appealing? There must be a way to get _only _the DCs that actually have FSMO roles, right? + + +`Get-ADDomainController -Filter "OperationMasterRoles -like '*'" | +Select-Object -Property Name, OperationMasterRoles +`Of course there is! We don't even need to pipe our output into another cmdlet like Where-Object because we can simply adjust our filter on which DCs we return in the first place. "OperationMasterRoles -like '*'" translates to "Domain Controllers whose OperationMasterRoles field have a value in them" which doesn't include the DCs whose OperationMasterRoles field are null (because they're not holding any FSMO roles). + +**That's it!** + +Locating your Active Directory FSMO roles is just that easy. + +Thank you, PowerShell.org for letting me post on your blog. I've got tremendous respect and admiration for the people who contribute to this website and the PowerShell community. PowerShell.org is an incredible resource for people of any experience level to improve their skills and learn new things. The world is a better place for having resources like this one. diff --git a/content/articles/2015/09/working-with-powershellgallery/index.md b/content/articles/2015/09/working-with-powershellgallery/index.md new file mode 100644 index 000000000..35c2d4d1b --- /dev/null +++ b/content/articles/2015/09/working-with-powershellgallery/index.md @@ -0,0 +1,149 @@ +--- +url: /articles/2015-09-11-working-with-powershellgallery/ +title: Working with PowershellGallery +authors: + - Jonas Sommer Nielsen +date: "2015-09-11T13:34:23+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/09/working-with-powershellgallery/ +--- + +After my two first posts ([Multithreading using jobs][1], [List users logged on to your machines][2]) where I mentioned [PowershellGallery.com][3] a few times and after [Warren talked about the Gallery a few days ago][4] I felt like digging a little deeper to see if I was actually doing it right. + +So I wrote them an email and this was their reply: + + -------------------------- + + + *"Hi Jonas – The “limited preview” designation on the PowerShell Gallery is because we are doing significant development to the site.* * However, there is nothing about that status which should prevent you from sharing your code. * + + +_A couple of things you will want to consider as you get ready to publish to the Gallery:_ + + * _You will want to scan your modules with PSSCriptAnalyzer (see ), as we scan all modules that have been posted with that tool. Anything flagged as an “error” must be corrected, things flagged as “warnings” should be fixed._ + * _Most submitters have a project site on GitHub, or something of that nature, that they link to from the Gallery. That allows them to get feedback on what they have submitted, & it’s something we would recommend._ + + + *Hope this helps –* * The PowerShell Gallery Operations Team"* + + +  -------------------------- + + + Really nice feedback. To the commandline. + + + [![Install-PSScriptAnalyzer.a](https://powershell.org/wp-content/uploads/2015/09/Install-PSScriptAnalyzer.a.png)](https://powershell.org/wp-content/uploads/2015/09/Install-PSScriptAnalyzer.a.png) + + + Installing the analyser is a breeze, suddenly I have two new commands. Lets try out the analyzer and see what it can do. + + + [![2015-09-10 (1)](https://powershell.org/wp-content/uploads/2015/09/2015-09-10-1.png)](https://powershell.org/wp-content/uploads/2015/09/2015-09-10-1.png) + + + Unfortunately the help on my machine is not updated, but the online version seems to be updated. + + +`help Invoke-ScriptAnalyzer -online +`This goes to the [online version](http://go.microsoft.com/fwlink/?LinkId=525914). Also from the [PowerShell Gallery PSScriptAnalyzer site](http://www.powershellgallery.com/packages/PSScriptAnalyzer/) there is a link to the [Project Site at GitHub.](https://github.com/PowerShell/PSScriptAnalyzer/)  + + + [![ScriptAnalyzer-start-multithread](https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.png)](https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.png) + + + This is kind of neat and it looks like I only have one warning, though 6 times. + + + ***"Cmdlet 'Write-Verbose' has positional parameter. Please use named parameters instead of positional parameters when calling a command."*** + + + Opening the same file in ISE  looking at line 92 and running the script analyser + + + [![ScriptAnalyzer-start-multithread.ise.slim](https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.ise_.slim_.png)](https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.ise_.slim_.png) + + + The help from Write-Verbose tells me that they are referring to the -Message parameter. + + + [![help-write-verbose](https://powershell.org/wp-content/uploads/2015/09/help-write-verbose.png)](https://powershell.org/wp-content/uploads/2015/09/help-write-verbose.png) + + +That looks like a pretty easy fix. Going through the file and fixing the 6 warnings and suddenly there are none left. + +[![ScriptAnalyzer-start-multithread.ise.fixed](https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.ise_.fixed_.png)](https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.ise_.fixed_.png) + +I'm sure the fact that there weren't more errors was mostly due to dumb luck combined with me testing [ISESteroids][5] at the time of writing. (Side note: Try it out. **Install-Module ISESteroids.** It is really AWSOME or quoting Tim Cook; It's AMAZING) ISESteroids is an add-on for ISE which adds some neat stuff like highlighting errors in the code but that's a subject for some other day. Let's just say it saved my behind this time. + +[![github.update](https://powershell.org/wp-content/uploads/2015/09/github.update.png)](https://powershell.org/wp-content/uploads/2015/09/github.update.png) + +Now that really wasn't too bad. To update the code on PowerShellGallery I need to increment the version of the module. This is done in the manifest file .psd1. + +[![update-version](https://powershell.org/wp-content/uploads/2015/09/update-version.png)](https://powershell.org/wp-content/uploads/2015/09/update-version.png) + +Now I can update the module by running the command from the [Publish Module][6] page + + +`PS> Publish-Module -Name -NuGetApiKey +`[![publish-module](https://powershell.org/wp-content/uploads/2015/09/publish-module.png)](https://powershell.org/wp-content/uploads/2015/09/publish-module.png) + +Now the code is accessible to all .... And there was [much rejoicing][7].  + +## Looking a little closer at the ScriptAnalyzer + +Lets see what the help says.  + +#### Invoke-ScriptAnalyzer + +_"Parameter Set: Default_ _Invoke-ScriptAnalyzer [-Path]  [-CustomizedRulePath  ] [- +ExcludeRule  + ] [- +IncludeRule +  ] [-LoggerPath  ] [-Recurse] [- +Severity +  ] [ ]_ + +_Detailed Description_ _Invoke-ScriptAnalyzer starts analyzing one or more specified scripts by using ScriptAnalyzer, evaluating your scripts against a set of best practice measures called rules. ScriptAnalyzer works by evaluating scripts against either all available rules, or against a set of rules that you specify by adding the ExcludeRule or IncludeRule parameters. After ScriptAnalyzer finishes evaluating your scripts, it displays results in the console window."_ + +Looks like IncludeRule and ExcludeRule parameters are straight forward. To get a list of rules and their descriptions Get-ScriptAnalyzerRule is very helpful. + +#### Get-ScriptAnalyzerRule + +Parameter Set: Default Get-ScriptAnalyzerRule [-CustomizedRulePath  ] [-Name  ] [-Severity  ] [ ] + +[![Get-ScriptAnalyzerRule](https://powershell.org/wp-content/uploads/2015/09/Get-ScriptAnalyzerRule.png)](https://powershell.org/wp-content/uploads/2015/09/Get-ScriptAnalyzerRule.png) + +The output gives us much useful information, severity level and a nice description of each rule. + +## More + +PowerShellGallery.org has a nice [GettingStarted][8] page.  + +## ps. + +Remember PowerShell Summit Europe starts Monday. Check out the [Event Schedule][9] and I hope to see you there. If on the other hand you're missing out check out these videos from [PowerShell Summit North America 2015][10]. + + + + + +#### Contact me + +Twitter [@mrhvid][11] +Web [Jonas.SommerNielsen.dk][12] + + [1]: https://powershell.org/2015/08/20/multithreading-using-jobs/ + [2]: https://powershell.org/2015/08/28/list-users-logged-on-to-your-machines/ + [3]: http://www.PowershellGallery.com + [4]: https://powershell.org/2015/09/06/writing-and-publishing-powershell-modules/ + [5]: http://www.powertheshell.com/isesteroids/ + [6]: https://www.powershellgallery.com/packages/upload + [7]: https://www.youtube.com/watch?v=GjjZGyYcH9E + [8]: https://www.powershellgallery.com/pages/GettingStarted + [9]: https://eventmgr.azurewebsites.net/event/home/PSEU15 + [10]: https://www.youtube.com/playlist?list=PLfeA8kIs7CochwcgX9zOWxh4IL3GoG05P + [11]: https://twitter.com/mrhvid + [12]: http://Jonas.SommerNielsen.dk diff --git a/content/articles/2015/09/writing-and-publishing-powershell-modules/index.md b/content/articles/2015/09/writing-and-publishing-powershell-modules/index.md new file mode 100644 index 000000000..1c633fe3a --- /dev/null +++ b/content/articles/2015/09/writing-and-publishing-powershell-modules/index.md @@ -0,0 +1,76 @@ +--- +url: /articles/2015-09-06-writing-and-publishing-powershell-modules/ +title: Writing and Publishing PowerShell Modules +authors: + - pscookiemonster +date: "2015-09-06T20:31:29+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +aliases: + - /2015/09/writing-and-publishing-powershell-modules/ +--- + +Earlier in August [we mentioned](https://powershell.org/2015/08/16/abstraction-and-configuration-data/) that modularity and abstraction are quite helpful. PowerShell modules can help enable these concepts. + + + You might ask "Modules... why can't I just write a function?" There are a number of benefits to bundling your functions into modules: + + + + + * Simplify code organization + * Group related functions together + * Share state between functions, but not with the user + * Re-use "helper functions" that you don't want exposed to the user + * Improve discoverability: +`Find-Module MyModule`Get-Command -Module MyModule +`* Simplify distribution: +`Install-Module MyModule +`Where does that last bullet come from? + + + + +## The PowerShell Gallery + + + If you've worked with Perl, you've probably used [CPAN](https://www.perl.org/about/whitepapers/perl-cpan.html), which archives more than 150,000 modules. Other languages have similar tools, like [PyPI](https://pypi.python.org/pypi) for Python, or [RubyGems](https://rubygems.org/) for Ruby. + + + + + + In the PowerShell world we've had a few community alternatives, but nothing official until late 2014, when Microsoft introduced the [PowerShell Gallery](https://www.powershellgallery.com/). The gallery is still under limited preview, with less than 300 modules published. + + + + + + The PowerShell community can benefit from the PowerShell Gallery through simplified and centralized discovery and distribution. We can find, install, or publish modules with a single command in PowerShell 5. Perhaps some day we will see a vibrant PowerShell community that extends [beyond IT administration](http://ramblingcookiemonster.github.io/PowerShell-Beyond-Administration/). + + + + +## Write and Publish PowerShell Modules + + + Let's help build up the PowerShell Gallery. Do you write PowerShell modules at work or at home? Consider [open sourcing](http://stevenmurawski.com/powershell/2015/8/moving-in-to-open-source) them on GitHub, and publishing them in the PowerShell Gallery! + + + + + + If you're comfortable writing PowerShell functions, but haven't started writing modules, check out [Building a PowerShell Module](http://ramblingcookiemonster.github.io/Building-A-PowerShell-Module), where we walk through the creation and publication of a PowerShell module. + + + + + + Edit: [This follow-up](https://powershell.org/deploying-modules-to-the-powershell-gallery/) shows a simple way to automatically deploy your modules to the gallery. + + + + + + Cheers! diff --git a/content/articles/2015/10/_index.md b/content/articles/2015/10/_index.md new file mode 100644 index 000000000..ee244327b --- /dev/null +++ b/content/articles/2015/10/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from October 2015" +description: "PowerShell.org Articles published in October 2015." +--- diff --git a/content/articles/2015/10/automate-sip-address-and-upn-name-changes-in-lync-skype-for-business/index.md b/content/articles/2015/10/automate-sip-address-and-upn-name-changes-in-lync-skype-for-business/index.md new file mode 100644 index 000000000..e4125414d --- /dev/null +++ b/content/articles/2015/10/automate-sip-address-and-upn-name-changes-in-lync-skype-for-business/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2015-10-12-automate-sip-address-and-upn-name-changes-in-lync-skype-for-business/ +title: Automate Sip Address and UPN name changes in Lync / Skype for Business +authors: + - Steve Parankewich +date: "2015-10-12T18:37:56+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks + - Tutorials +aliases: + - /2015/10/automate-sip-address-and-upn-name-changes-in-lync-skype-for-business/ +--- + +Name changes are a common occurrence in the world of IT and usually the primary concern is the e-mail address. Exchange e-mail address policies will handle this for us but often times the Sip Address and User Principal Name are left behind. I tackle these changes with an automated way of changing the Lync / Skype for Business sip address (also known as sign-in address) and User Principal Name to match the e-mail address. I also include the link to download the Lync / Skype for Business meeting update tool that is required when a Sip Address is changed. Head on over to [PowerShellBlogger.com][1] for the full article. + + [1]: http://powershellblogger.com/?p=164 diff --git a/content/articles/2015/10/command-and-query-separation-in-pester-tests/index.md b/content/articles/2015/10/command-and-query-separation-in-pester-tests/index.md new file mode 100644 index 000000000..b9d1ae778 --- /dev/null +++ b/content/articles/2015/10/command-and-query-separation-in-pester-tests/index.md @@ -0,0 +1,61 @@ +--- +url: /articles/2015-10-18-command-and-query-separation-in-pester-tests/ +title: Command and query separation in Pester tests +authors: + - nohwnd +date: "2015-10-18T19:15:14+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +aliases: + - /2015/10/command-and-query-separation-in-pester-tests/ +--- + +Do you feel that writing tests is confusing, and you often end up with complicated test code? I did too, before I learned about Command-query separation principle (or CQS). This principle lead me to start thinking about data flow directions in tests and in the end I realized there are few basic patterns that I use in my test code over and over. + +## Command-query separation principle + +The command and query separation principle tells us that we should separate commands from queries (duh!). To do that, we first need to learn the difference between a command and query: A command is a function that has an observable side-effect and returns no result. A query is the opposite. A function that has no observable-side effect, and returns a result. +https://gist.github.com/nohwnd/fb5616fb92995555480c +The call to _Set-Variable_ has a side effect of creating a variable named "a" and setting it to value "1". This side effect is clearly observable, because we had no variable _$a_ before the call and now we have one, so _Set-Variable_ must be a command. Also the _Set-Variable_ does not return any output which should be another clue (unless you provide the _-PassThru_ parameter, more on that later). +The other call, the call to _Get-Variable_, has no observable side effect. You could call it once or 100 times and that would have no effect on the value of the _$a_ variable. Plus the Get-Variable returns a result so it must be a query. +PowerShell also gives us another clue whether a function is a command or query with the Verb used for that function. Anything with Set, Add and New verb is supposed to be a command. Anything with Get verb should be a query. +Understanding the difference between commands and queries is important, because data flows through them in opposite directions, and so you need to test them differently. + +### Data flow in commands and queries + +Let's see some (almost) real-life examples of tests that deal with commands and queries, identify the data flow in them, and try to discover some patterns. +https://gist.github.com/nohwnd/f6be402363baa4fb15e7 +In this code the first two functions only act as place-holders for the actual Active Directory cmdlets, feel free to ignore them. The next two functions are more interesting, they are the actual production code that we test - the SUT (System Under Test). Notice that the first function, _New-SalesUser_ is a command, and the second, _Get-SalesUser_ is a query. The most important part are the actual tests, let's have a closer look on each one of them separately. + +### Testing New-SalesUser + +The _New-SalesUser_ is a command, it won't return any value, but it should have an observable side-effect. The side-effect is that a new user is created in the Sales department. The _New-SalesUser_ is not able to do that by itself, instead it delegates the work to the _New-ADUser_ cmdlet. Because we believe that the _New-ADUser_ will do it's work, all we need to test is if it was invoked with the correct parameters, and that's exactly what's happening. +As you can hopefully see the data (input parameters) flow from the input of the _New-SalesUser_ (SUT) towards the internal function _New-ADUser_, we then use the _Assert-MockCalled_ to verify that the internal command was called correctly. I call this the command direction. + +### Testing Get-SalesUser + +The _Get-SalesUser_ is a query. It will return a value and will have no side-effect. We know that the _Get-ADUser_ is a query as well, so the only part that needs testing is whether or not the _FullName_ property was added. To do that we create a mock of the _Get-ADUser_ function that returns an object and set it's _GivenName_ and _Surname_ properties. We run the _Get-SalesUser_ function and check the values of _FullName_ property. +In this case the data go from the internal function Get-ADUser to the output of the _Get-SalesUser_ (SUT), and we use the Should assertion to check if data was processed correctly. I call this the query direction. + +## Command-Query hybrids + +Unfortunately the world of PowerShell is not so black and white as we might like. There are numerous commands that support _-PassThru_ parameter. The _-PassThru_ parameter breaks the clean separation between commands and queries, and so our example function would become a _New-Get-SalesUser_ hybrid. +Such hybrids are a source of confusion and lot of people end up with code like this: +https://gist.github.com/nohwnd/86dc22cede6736c2647c +As you can see both the production code and the tests are simply a merge of the _Get-SalesUser_ and _New-SalesUser_ seen in the previous example. The test no longer tests a single thing. If you take your time and track the flow of the data you should see the both the command and query directions are used, and asserted. +The test still works, but is unnecessarily complex and can fail for at least two different reasons. It would be way better to have two separate simpler tests. One testing the query path of the command and another testing the command path. Such conversion is easily done, all we need to do is take the _Get-SalesUser_ test and change the command to _New-SalesUser_: +https://gist.github.com/nohwnd/31df2ef5686f77f1b910 +The tests were split into two and the _-PassThru_ switch was implemented in the _New-SalesUser_ function. +The first _It_ tests the command part of the function, it does not specify the _-PassThru_ switch and so the _New-SalesUser_ acts as a pure command and is tested like that. +The second _It_ tests the query part of the function, specifying the _-PassThru_ switch, and hitting the mock, which produces no side-effects, in result it acts as a pure query function, and is also tested like one. + +## Are query-command hybrids really that bad? + +No not really. Such hybrids have some useful properties that make PowerShell better. Probably the most useful is that they enable you to combine both queries and commands in a single pipeline. The also enable you to immediately retreive result of your changes and for example print them to screen. +All in all such hybrids are quite useful beasts. The downside unfortunately is that a lot of people unconiously end up with such hybrid, and without seeing the way to split it they start to produce overly-complicated tests. Often copy pasting the code to set up the whole environment, just to assert the result of the "query". Setting up twenty properties on the resulting object just to ignore it while testing the "command". Or worst all of this together. + +## Summary + +Hopefully this article gave you the minimum to tell commands from queries and outlined possible approaches to testing them. You should now be aware of the command query hybrids and be able to identify them even if they don't specify a _-PassThru_ parameter. +Happy coding! diff --git a/content/articles/2015/10/delete-specific-e-mail-or-e-mails-from-all-exchange-mailboxes/index.md b/content/articles/2015/10/delete-specific-e-mail-or-e-mails-from-all-exchange-mailboxes/index.md new file mode 100644 index 000000000..2d9eb0cb1 --- /dev/null +++ b/content/articles/2015/10/delete-specific-e-mail-or-e-mails-from-all-exchange-mailboxes/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2015-10-02-delete-specific-e-mail-or-e-mails-from-all-exchange-mailboxes/ +title: Delete Specific E-Mail or E-Mails From All Exchange Mailboxes +authors: + - Steve Parankewich +date: "2015-10-02T15:27:10+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +aliases: + - /2015/10/delete-specific-e-mail-or-e-mails-from-all-exchange-mailboxes/ +--- + +Well this is week number two in my quest to post an article once a week and I am back with a common request for Exchange administrators. There are a lot of scenarios that bring up a need to remove an e-mail or e-mails from all mailboxes in your environment. Perhaps there was a disgruntled employee, a virus outbreak, or a reply all to the whole company. We all know that the "Retract" button is best effort (yes I still miss GroupWise for that purpose). + +As always we can turn to PowerShell for our scripting needs. The Search-Mailbox command is your best friend for these scenarios. With a simple Get-Mailbox | Search-Mailbox you can take control of all your mailboxes. Be extremely cautious when executing, with great power comes great responsibility. For a full run down on how to accomplish this head on over to [PowerShellBlogger.com][1]. I look forward to seeing everyone again next week! + + [1]: http://powershellblogger.com/?p=117 diff --git a/content/articles/2015/10/desired-state-configuration-beware-of-circular-configurations/index.md b/content/articles/2015/10/desired-state-configuration-beware-of-circular-configurations/index.md new file mode 100644 index 000000000..8bef5dae2 --- /dev/null +++ b/content/articles/2015/10/desired-state-configuration-beware-of-circular-configurations/index.md @@ -0,0 +1,39 @@ +--- +url: /articles/2015-10-14-desired-state-configuration-beware-of-circular-configurations/ +title: Desired State Configuration – Beware Of Circular Configurations +authors: + - Will Anderson +date: "2015-10-14T13:00:37+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/10/desired-state-configuration-beware-of-circular-configurations/ +--- + +Lately, I've been working at converting a lot of my server configuration scripts into DSC configurations.  After all, what better way to learn than by updating your existing methods?  I recently ran into an issue, however, while converting my SCCM Distribution Point deployment script into a config, where the test systems inexplicably began rebooting every thirty minutes or so.  The Local Configuration Manager was configured to reboot if necessary, and these were fresh installs, so I knew that my culprit was most likely in my configuration. + +The config was pretty basic: Put the server into a Core state and uninstall the UI management tools, ensure RDC is installed, install the distribution point prerequisites (IIS, IIS 6 WMI Compatibility, .NET 4.5, etc), and configure some firewall rules.  My original script had always served me well, so I was dumbfounded as to what the problem could be.  I decided to [enable the debug logging](http://blogs.msdn.com/b/powershell/archive/2014/01/03/using-event-logs-to-diagnose-errors-in-desired-state-configuration.aspx) for DSC and see what came up. + + +`Get-WinEvent -LogName "Microsoft-Windows-Dsc/Debug" -ComputerName LWINCM02 -Oldest | Out-Gridview +`When I get the output, I'm seeing a lot of looping around my Remote Differential Compression resource, which ensures that the RDC component is installed.  A further look in the logs showed that the UI Management Tools were also being uninstalled repeatedly.  Hmm... + +[![](https://powershell.org/wp-content/uploads/2015/10/RDCOGV-628x331.jpg)](https://powershell.org/wp-content/uploads/2015/10/RDCOGV.jpg) + +So on another system that isn't receiving the configuration, I decide to run the Install-WindowsFeature command with the WhatIf switch against the RDC component.  Upon the result, I immediately see what my problem is: + +[![RDCInst](https://powershell.org/wp-content/uploads/2015/10/RDCInst-e1444781798166-628x413.jpg)](https://powershell.org/wp-content/uploads/2015/10/RDCInst-e1444781815463.jpg) + +The Remote Differential Component requires the installation of the GUI Management Tools.  Likewise, the uninstallation of these tools results in the removal of the RDC component.  So what was happening was this: + + * GUI Tools are removed by DSC, also removing the RDC component. + * Server reboots. + * GUI tools are verified uninstalled.  RDC component is reinstalled, which reinstalls the GUI Tools. + * Server Reboots. + * Wash.  Rinse.  Repeat. + +I've since removed the GUI tools removal from my configuration, as RDC is a required component for my distribution points, and my configuration is now working flawlessly.  In tracing the root of my problem, I came to realize two very important lessons. + +First, as admins, engineers, and solution providers, we often don't take a very close look at our scripts and what it's really doing behind the scenes if it gives us the result we're looking for.  In the case of my configuration script, I added a line to install the RDC component after removing the UI and tools and didn't look any further into why I had to do this in the first place.  DSC kept me honest in this respect - and gave me a gentle reminder to look a little deeper if something unexpected occurs, rather than slapping a band-aid on it and calling it good. + +Second, it can be very easy to find yourself dealing with a configuration loop if you're altering the state of components that other components in your config rely on.  Be sure to test your configurations, check your logs, and most importantly, make sure you know what you're really configuring when you configure it. diff --git a/content/articles/2015/10/export-subnets-from-active-directory-sites-and-services/index.md b/content/articles/2015/10/export-subnets-from-active-directory-sites-and-services/index.md new file mode 100644 index 000000000..3775a3d50 --- /dev/null +++ b/content/articles/2015/10/export-subnets-from-active-directory-sites-and-services/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2015-10-09-export-subnets-from-active-directory-sites-and-services/ +title: Export Subnets from Active Directory Sites and Services +authors: + - Steve Parankewich +date: "2015-10-10T02:39:20+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +aliases: + - /2015/10/export-subnets-from-active-directory-sites-and-services/ +--- + +I am back this week with a quick write up on how to export your network subnets from Active Directory Sites and Services. Active Directory Sites and Services subnet assignments are important for healthy replication and for location based services to function properly. The need for this information has come across my desk on several occasions. Even a quick print out would be extremely helpful to keep at your desk.  I have included both Windows 7/2008 and Windows 8/2012 methods to ensure everyone is covered. Head on over to [PowerShellBlogger.com][1] for the full article. As always, leave a comment and I will be sure to respond. + + [1]: http://powershellblogger.com/?p=121 diff --git a/content/articles/2015/10/find-any-e-mail-address-or-proxy-address-in-active-directory/index.md b/content/articles/2015/10/find-any-e-mail-address-or-proxy-address-in-active-directory/index.md new file mode 100644 index 000000000..dd9929045 --- /dev/null +++ b/content/articles/2015/10/find-any-e-mail-address-or-proxy-address-in-active-directory/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2015-10-23-find-any-e-mail-address-or-proxy-address-in-active-directory/ +title: Find any E-Mail Address or Proxy Address In Active Directory +authors: + - Steve Parankewich +date: "2015-10-23T16:58:00+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks + - Tutorials +aliases: + - /2015/10/find-any-e-mail-address-or-proxy-address-in-active-directory/ +--- + +I am back this week with some more Exchange and Unified Communications goodness. This is another request I see a lot, someone want's to know where an e-mail address is assigned. This opens up the possibilities of user mailboxes, shared mailboxes, distribution lists, public folders, conference rooms, contacts or resources. I have also seen duplicate e-mail addresses being assigned outside of Exchange causing delivery failures. I take a look at how you can quickly find any e-mail address in your environment along with partial searches of e-mail addresses. The two attributes for e-mail addresses being mail and proxyAddresses. + +I cover finding specific types of proxy addresses such as sip: x500: eum: etc. I also touch briefly on creating a simple function that will accept e-mail addresses as an input to return all of the AD objects that contain it. I cover the search through Active Directory commandlets, including LDAP query syntax, as well as the Exchange commandlets. Head on over to [PowerShellBlogger.com][1] for the full article. + + [1]: http://powershellblogger.com/?p=200 diff --git a/content/articles/2015/10/finding-evil-ldap-queries/index.md b/content/articles/2015/10/finding-evil-ldap-queries/index.md new file mode 100644 index 000000000..deb23570b --- /dev/null +++ b/content/articles/2015/10/finding-evil-ldap-queries/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2015-10-05-finding-evil-ldap-queries/ +title: Finding Evil LDAP Queries +authors: + - pscookiemonster +date: "2015-10-05T14:17:34+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/10/finding-evil-ldap-queries/ +--- + +Have you ever wondered what LDAP queries were hitting your domain controllers? Even outside of fun investigations, it can be insightful to get a sampling of queries hitting your domain controller. The more services you have integrated with Active Directory, the more likely a vendor or sysadmin unwittingly configured their service to produce evil queries. + +Mark Morowczynski from Microsoft wrote a great post on [finding these expensive, inefficient, or long running queries][1] - But something was missing. Screen shots of regedit? If you have more than a handful of domain controllers, enabling and disabling this logging is going to be quite a chore. + +[Here's a quick bit][2] on using PowerShell to enable and disable this logging quickly. Take a peek, you might find some misbehaving applications. + + [1]: http://blogs.technet.com/b/askpfeplat/archive/2015/05/11/how-to-find-expensive-inefficient-and-long-running-ldap-queries-in-active-directory.aspx + [2]: http://ramblingcookiemonster.github.io/Evil-LDAP-Queries/ diff --git a/content/articles/2015/10/join-computer-to-domain-with-specified-computer-name-and-ou/index.md b/content/articles/2015/10/join-computer-to-domain-with-specified-computer-name-and-ou/index.md new file mode 100644 index 000000000..601fbe870 --- /dev/null +++ b/content/articles/2015/10/join-computer-to-domain-with-specified-computer-name-and-ou/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2015-10-30-join-computer-to-domain-with-specified-computer-name-and-ou/ +title: Join Computer to Domain with Specified Computer Name and OU +authors: + - Steve Parankewich +date: "2015-10-30T18:10:55+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks + - Tutorials +aliases: + - /2015/10/join-computer-to-domain-with-specified-computer-name-and-ou/ +--- + +I addressed a reader requested script for my article this week. PowerShell gives you the ability to add computers to Active Directory right from the command line with the built in PowerShell commandlets. This was introduced with PowerShell version 3 and can be used to automate imaging processes or to prompt an agent for the desired computer name and organizational unit. This is useful since a lot of organizations will use specific OUs for computers according to location or department. This allows them to set group policies that apply to those computer accounts accordingly. By default these computer accounts are created in the root Computers OU, but creating an account can be targeted. The highlighted examples should provide you everything you need to tackle that use case. I provide the basics of adding a computer to the domain as well as prompting the user to enter the computer name and location. Head on over to [PowershellBlogger.com][1] for the full write up and thanks for everyone's continued support! + + [1]: http://powershellblogger.com/?p=220 diff --git a/content/articles/2015/10/mspsug-virtual-meeting-using-regular-expressions-with-powershell-october-13th-2015/index.md b/content/articles/2015/10/mspsug-virtual-meeting-using-regular-expressions-with-powershell-october-13th-2015/index.md new file mode 100644 index 000000000..82d37abac --- /dev/null +++ b/content/articles/2015/10/mspsug-virtual-meeting-using-regular-expressions-with-powershell-october-13th-2015/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2015-10-06-mspsug-virtual-meeting-using-regular-expressions-with-powershell-october-13th-2015/ +title: "#MSPSUG Virtual Meeting: Using Regular Expressions with #PowerShell – October 13th 2015" +authors: + - Mike F Robbins +date: "2015-10-06T14:13:57+00:00" +aliases: + - /2015/10/mspsug-virtual-meeting-using-regular-expressions-with-powershell-october-13th-2015/ +--- + +Join the Mississippi PowerShell User Group virtually on Tuesday, October 13th at 8:30pm Central Time when [Timothy Warner](http://twitter.com/TechTrainerTim) will present “_**Pattern Match Like a Pro: Using Regular Expressions with Windows PowerShell**_”. + +Many Windows systems administrators are intimidated with regular expressions due to its seemingly strange, "Unixy" syntax. Take heart! By the end of this session, you'll finally understand how to perform simple and advanced text filtering with RegEx, specifically by leveragine PowerShell's -match operator and Select-String cmdlet. + +Visit the [Mississippi PowerShell User Group](http://mspsug.com/2015/09/22/mspsug-1013-meeting-pattern-match-like-a-pro-using-regular-expressions-with-windows-powershell/) website to learn more about Timothy and to find out more details about this month’s meeting. + +The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info](http://mspsug.com/attendee-info/)” section. + +Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this meeting. + +Note: It is not necessary to live in Mississippi or join our user group to attend our meetings or present a session for our user group. + +µ diff --git a/content/articles/2015/10/october-2015-scripting-games-puzzle/index.md b/content/articles/2015/10/october-2015-scripting-games-puzzle/index.md new file mode 100644 index 000000000..cdf198460 --- /dev/null +++ b/content/articles/2015/10/october-2015-scripting-games-puzzle/index.md @@ -0,0 +1,45 @@ +--- +url: /articles/2015-10-03-october-2015-scripting-games-puzzle/ +title: 2015-October Scripting Games Puzzle +authors: + - Don Jones +date: "2015-10-03T13:31:53+00:00" +categories: + - Scripting Games +aliases: + - /2015/10/october-2015-scripting-games-puzzle/ +--- + +Our October 2015 puzzle might take us beyond the realm of one-liners, but it circles back to the August 2015 theme of retrieving information from the web. This is another scenario that actually has a lot of real-world applications, in that there's a lot of practical uses in the work environment for this technique.  + + + +## **Instructions** + +The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month's puzzle. You can find them all at https://powershell.org/category/announcements/scripting-games/. Many puzzles will include optional challenges, that you can use to really push your skills. + +**To participate**, add your solution to a public Gist (http://gist.github.com; you'll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post.  +**Only post one entry per person. You are not allowed to come back and post corrected or improved versions. If you do, all of your posts will be ignored. **However, remember that you can always go back and edit your Gist. We'll always pull the most recent one when we display it, so there's no need to post multiple entries if you want to make an edit. + + +Don't forget the [main rules and purpose of these monthly puzzles][1], including the fact that you won't receive individual scoring or commentary on your entry. + +**User groups are encouraged to work together** on the monthly puzzles. User group leaders should submit their group's best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most "favorite" entries of the year will win a grand prize from PowerShell.org. + +## + +## **Our Puzzle** + +Write a short script that can retrieve the most recent article headlines from a blog by using the blog’s RSS or Atom feed. You should ideally just display the headlines, but might also choose to display a URL that links to the article, and might display a short excerpt of the article. If the feed contains the full article text, don’t display it – at most, display a short excerpt. + +While you could definitely write this as a one-liner, and might choose to do so as you start, there's real value in turning this into a "Get-RSSFeed" function. To be fair, lots of folks have done this before - but challenge yourself, and try to figure it out without opening a search engine! + + + +**Challenges:** + + * Try to write this to be a PowerShell command (an advanced function) that uses parameters to direct the behavior of the command. + * Try to ensure your script’s output could be easily displayed in an on-screen table, or redirected to a CSV file. + * Try to minimize your use of “raw” .NET classes (e.g., try to use only PowerShell commands as much as possible). + + [1]: https://powershell.org/?p=2574 diff --git a/content/articles/2015/10/testing-powershell-direct-with-windows-server-2016-tp3-hyper-v/index.md b/content/articles/2015/10/testing-powershell-direct-with-windows-server-2016-tp3-hyper-v/index.md new file mode 100644 index 000000000..922108658 --- /dev/null +++ b/content/articles/2015/10/testing-powershell-direct-with-windows-server-2016-tp3-hyper-v/index.md @@ -0,0 +1,88 @@ +--- +url: /articles/2015-10-08-testing-powershell-direct-with-windows-server-2016-tp3-hyper-v/ +title: Testing PowerShell Direct with Windows Server 2016 TP3 Hyper-V +authors: + - Timothy Warner +date: "2015-10-08T14:03:48+00:00" +categories: + - PowerShell for Admins + - Training +aliases: + - /2015/10/testing-powershell-direct-with-windows-server-2016-tp3-hyper-v/ +--- + +Hey there! I  thought we could test [PowerShell Direct][1] together today. Here's the elevator pitch: In Windows Server 2016 and Windows 10, we can send PowerShell commands from the Hyper-V host directly to its corresponding virtual machines (VMs), _**even in the absence of guest VM networking**_. Yeah, that's cool, isn't it? + +What's just as impressive is that PowerShell Direct works _**even if PowerShell remoting is disabled on the guest VM!** _PowerShell Direct also circumvents Windows Firewall. Note that PowerShell Direct requires that commands are sent only from a Hyper-V host to its local VMs. + +Also, PowerShell Direct is supported at this point only by Windows Server 2016 TP3 and Windows 10. That means a Windows Server 2016 TP3 Hyper-V host cannot leverage PowerShell Direct against, say, Windows Server 2012 R2 virtual machines (give the Hyper-V, PowerShell, and Windows Server teams time; I'm sure this will be supported in the future). + +The secret sauce behind PowerShell Direct is [PowerShell Remoting Protocol][2] (MS-PSRP), which used to be called just plain ol' garden variety "PowerShell remoting." + +## The Lab Setup + +In my test lab, I started with a domain controller and Hyper-V host (yeah, I'm combining server roles--what of it?) named **hyperv1.company.pri**. That server's running [Windows Server 2016 Technical Preview 3][3]. + +In Hyper-V I created a single virtual switch named **Internal** that is connected to the host/guest network. Of course, we don't care about the switch fabric because we're going to use PowerShell Direct. + +Next, I built a Windows Server 2016 TP3-based guest VM named **server1** and disabled the network adapter as you can see in the following screenshot. No smoke and mirrors here! + + + [![Our lab is set up and ready to test PowerShell Direct.](https://powershell.org/wp-content/uploads/2015/10/Our-lab-set-up-and-ready-to-test-PowerShell-direct.png)](https://powershell.org/wp-content/uploads/2015/10/Our-lab-set-up-and-ready-to-test-PowerShell-direct.png) + + + + Our lab is set up and ready to test PowerShell Direct. + + + +As a final "sanity check" to ensure the guest VM is as theoretically inaccessible as possible, I blocked access to all remote access session configurations and disabled the Windows Remote Management (WinRM) service by running the following command from within the guest (thanks to PowerShell MVP [Aleksandar Nikolić][4] for clarification on this point): + + +`Disable-PSRemoting -Force +Get-Service -Name WinRM | Stop-Service -Force | Set-Service -StartupType Disabled +`Okay. Let's move onto the next phase of our experiment. + +## Sending Commands to the Guest VM + +Let's obtain the name and globally unique identifier (GUID) of our Windows Server 2016 VM (you'll see why in just a moment): + + +`Get-VM | Select-Object -Property Name, VMid +Name VMId +---- ---- +server1 31d787fe-02cd-4363-b50b-16bc8243fc77 +`PowerShell Direct makes itself manifest by means of two new parameters: + + * VMname + * VMGuid + +Handy, eh? The following two cmdlets support the **-VMname** and **-VMGuid** parameters as of this writing in October 2016: + + * [Enter-PSSession][5] + * [Invoke-Command][6] + +Time to test! Let's start a remote session with the **server1** guest VM by specifying its GUID. Note that you will need: + + * Hyper-V administrative privileges on the host + * Local administrative privileges on the guest + + +`$cred = Get-Credential +Enter-PSSession -VMGuid 31d787fe-02cd-4363-b50b-16bc8243fc77 -Credential $cred +[server1]: PS C:\Users\Administrator\Documents> +`We'll finish by using Invoke-Command to send ad-hoc PowerShell pipelines and entire scripts from host to guest: + + +`Invoke-Command -VMName 'server1' -Credential $cred -ScriptBlock { Get-Service | Where-Object {$_.Status -eq 'Stopped'} } +Invoke-Command -VMName 'server1' -FilePath 'D:\scripts\setup-ip.ps1' -Credential $cred +`## Conclusions + +Convenience is the primary advantage that PowerShell Direct brings to us Hyper-V administrators. We can connect to and fully administer our guest virtual machines regardless of their networking, firewall, or WS-Man state. Thanks for reading, and more power to the shell! + + [1]: http://blogs.technet.com/b/virtualization/archive/2015/05/14/powershell-direct-running-powershell-inside-a-virtual-machine-from-the-hyper-v-host.aspx + [2]: https://msdn.microsoft.com/en-us/library/dd357801.aspx + [3]: https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-technical-preview + [4]: https://twitter.com/alexandair + [5]: https://technet.microsoft.com/en-us/library/hh849707.aspx + [6]: https://technet.microsoft.com/en-us/library/hh849719.aspx diff --git a/content/articles/2015/10/the-jape-challenge/index.md b/content/articles/2015/10/the-jape-challenge/index.md new file mode 100644 index 000000000..3e7084aa0 --- /dev/null +++ b/content/articles/2015/10/the-jape-challenge/index.md @@ -0,0 +1,128 @@ +--- +url: /articles/2015-10-19-the-jape-challenge/ +title: The JAPE challenge +authors: + - Carlo Mancini +date: "2015-10-19T08:58:34+00:00" +categories: + - PowerShell for Developers +aliases: + - /2015/10/the-jape-challenge/ +--- + +I have wanted to write my very own obfuscated e-mail signature for a long time but kept myself from doing it. At the time I thought of all these lines of obfuscated code that people wrote during competitions such as the _International Obfuscated C Code Contest (IOCCC)_ or the _Obfuscated Perl Contest_ as beyond interest. + +Then I started competing in the Scripting Games, and some tasks involved writing Powershell oneliners that required **mastering the use of the pipeline** as a tool to refine what each cmdlet passed to another. Once I added a few aliases to these oneliners - which sometimes happened to involve pretty arcane regular expressions - I often came back with hard-to-read and impossible-to-maintain pieces of Powershell code. But, hey, this was fun! + +So, today I have reviewed my point of view. I have understood that reading and understanding obfuscated code can be an interesting **mental challenge.** And being able to write it is a game I like to play. + +Last week I was writing an [article exploring different ways to implement primality tests in Powershell](http://www.happysysadm.com/2015/10/powershell-gymnastics-prime-numbers.html). In the last part of that article I show how to port to Powershell a powerful Perl onliner that can find prime numbers only by matching strings whose length is not prime. + +This Perl oneliner, originally written by Abigail, is part of a collection of famous **JAPHs** - Usenet posting signatures in the 90s - that will output the text '_Just another Perl Hacker,_' to screen. + +When you have a look at some of these JAPHs (there is a canonical list on CPAN.org), you can see how it can actually be surprisingly difficult to write truly breathtaking obfuscated code. + +Having said all that, I have come up with the idea of starting some kind of similar challenge around Powershell. + +## Write your JAPE + +The challenge consists of writing the most intricate, illegible, awe-inspiring piece of code you can think of, which prints the text '_JUST ANOTHER POWERSHELL ENTHUSIAST,_'. + +Feel free to post your contribution in the comments. The rules are: + + 1. the code has to be carefully formatted to fit into max four lines of max 77 characters each, in the style of a Usenet signature + 2. the comma at the end of the string is mandatory (hey, we are just adding ourselves to the basket!) + 3. letter case in the output is not important, so you can go for pOwErShElL if you feel like it + 4. every JAPE has to be presented in the canonical list format, with a date and author attribution + +Rule 1 can be thrown out of the window in case you want to go artistic, as in this notable Perl JAPH by Kickstart: + + +`#Kickstart from http://www.perlmonks.com/ +#note: a slight valentine variation :) + $LOVE= AMOUR. + true.cards. ecstacy.crush + .hon.promise.de .votion.partners. + tender.truelovers. treasure.affection. +devotion.care.woo.baby.ardor.romancing. +enthusiasm.fealty.fondness.turtledoves. +lovers.sentiment.worship.sweetling.pure +attachment.flowers.roses.promise.poem; + $LOVE=~ s/AMOUR/adore/g; @a=split(//, + $LOVE); $o.= chr (ord($a[1])+6). chr + (ord($a[3])+3). $a[16]. $a[5]. chr + (32). $a[0]. $a[(26+2)]. $a[27]. + $a[5].$a[25]. $a[8].$a[3].chr + (32).$a[29]. $a[8].$a[3]. + $a[62].chr(32).$a[62]. + $a[2].$a[38].$a[4]. + $a[3].'.'; + print + $o; +`Now, the most notable contributions will be added to the **JAPE Hall of Fame** below. + +**Do come up with some interesting piece of 'educational' code, and let's see what creative minds we have here. And remember to have fun!** + +To start with, I have decided, with the consent of the author, that the first JAPE be one by Lee Holmes. Even if it breaks the rule of outputting 'JUST ANOTHER POWERSHELL ENTHUSIAST,', it's probably the first Powershell obfuscated code I have ever seen. Hence the index 0. + +## JAPE Hall of Fame + +Index: $jape[0] - Author: Lee Holmes - Date: June 6th, 2007 + + +`$ofs=""; +'"$(0'+ + '..(0'+ + 'xa*['+ + 'Math'+ + ']::R'+ + 'ound'+ + '([Ma'+ + 'th]:'+ + ':Pi/'+ + '2,1)'+ + ')|%{'+ + '[cha'+ + 'r][i'+ + 'nt]"'+ + '"$($'+ + '("""'+ + '"0$('+ + '1838'+ + '1589'+ + '*726'+ + '371*'+ + '60)$'+ + '(877'+ + '7365'+ + '981*'+ + '263*'+ + '360)'+ + '$(22'+ + '2330'+ + '793*'+ + '1442'+ + '99)$'+ + '(310'+ + '9*37'+ + ') ""'+ '"")[' + '($_*' + '3)..' + +'($_*'+ '3+2)' + '])""' + ' })"'|iex +`Here's my first JAPE as a very basic example to start with. It's a signature block composed of 4 lines of 59 chars. + +Index: $jape[1]  - Author: Carlo - Date: October 9th, 2015 + + +`([regex]::Matches(",{0}S{1}I{2}U{3}T{4}E{5}L{6}E{7}S{8}E{9} +O{10} {11}E{12}T{13}N{14} {15}S{16}J" -f 'T!A$S!H$N! $L!H$R +!W$P!R$H!O$A!T$U'.split('!|$',[System.StringSplitOptions]:: +RemoveEmptyEntries),'.','RightToLeft')|%{$_.value}) -join'' +`References: + + * [http://www.leeholmes.com/blog/2007/06/06/obfuscated-powershell/](http://www.leeholmes.com/blog/2007/06/06/obfuscated-powershell/) + * [http://www.happysysadm.com/2015/10/powershell-gymnastics-prime-numbers.html](http://www.happysysadm.com/2015/10/powershell-gymnastics-prime-numbers.html) + * [http://www.cpan.org/misc/japh](http://www.cpan.org/misc/japh) + * [http://www.happysysadm.com/p/jape.html](http://www.happysysadm.com/p/jape.html) + +Contact me: + + * Twitter [@sysadm2010](https://twitter.com/sysadm2010) diff --git a/content/articles/2015/10/using-package-management-in-windows-powershell-v3/index.md b/content/articles/2015/10/using-package-management-in-windows-powershell-v3/index.md new file mode 100644 index 000000000..3b4377cd9 --- /dev/null +++ b/content/articles/2015/10/using-package-management-in-windows-powershell-v3/index.md @@ -0,0 +1,157 @@ +--- +url: /articles/2015-10-12-using-package-management-in-windows-powershell-v3/ +title: Using Package Management in Windows PowerShell v3 +authors: + - Timothy Warner +date: "2015-10-12T20:48:32+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +aliases: + - /2015/10/using-package-management-in-windows-powershell-v3/ +--- + +Hey now! The [PowerShell team][1] published a preview version of [PackageManagement][2] for Windows PowerShell v3 and v4. As it happens, I have a Windows 7 SP1 box running PowerShell v3--why not run a little experiment? + + +`$PSVersionTable.PSVersion +Major Minor Build Revision +----- ----- ----- -------- +3 0 -1 -1 +`## Preparing the Environment + +You need [.NET Framework 4.5][3] or later, so take care of that prerequisite before you install the following two assets: + + * [Windows Management Framework (WMF) v3][4] + * [PackageManagement PowerShell Modules Preview][2] + +I restarted the computer after each installation just to be safe. + +Before we proceed we also need to relax our Windows 7 client's script execution policy or we won't see the PSModule package provider or the PowerShellGet module: + + +`Set-ExecutionPolicy -ExecutionPolicy Bypass -Force +`As you can see in the following screenshot, installing the PackageManagement Preview also gives us PowerShellGet. By the way, in case you didn't know, we use PowerShellGet to discover, install, and manage PowerShell modules, and we use PackageManagement to discover, install, and manage software packages. + + + [![Modules folder on our Windows 7 workstation](https://powershell.org/wp-content/uploads/2015/10/Modules-folder-on-our-Windows-7-workstation-628x313.png)](https://powershell.org/wp-content/uploads/2015/10/Modules-folder-on-our-Windows-7-workstation.png) + + + + Modules folder on our Windows 7 workstation + + + + + +## Poking Around with the Commands + +Let's do this! Open an administrative PowerShell console examine the PackageManagement commands: + + +`Get-Command -Module PackageManagement | Select-Object -Property Name | Format-Wide -Column 2 +Find-Package Get-Package +Get-PackageProvider Get-PackageSource +Install-Package Register-PackageSource +Save-Package Set-PackageSource +Uninstall-Package Unregister-PackageSource +`In PackageManagement nomenclature, a package provider represents the "conduit" between the local computer and the PackageManagement engine. As a matter of fact, PackageManagement is most often called a package manager manager (no, that's not a typo). + +Next, take a look at the default package providers: + + +`Get-PackageProvider | Select-Object -Property Name | Sort-Object -Property Name +Name +---- +msi +msu +Programs +PSModule +`Your intuition is correct if you think that you can manage locally installed software by working with the **msi, msu,** and **Programs** providers. A single package provider can be associated with one or more package sources (repositories). + + +`Get-PackageSource | Select-Object -Property Name, ProviderName, IsTrusted +Name ProviderName IsTrusted +---- ------------ --------- +PSGallery PSModule False +`The [PowerShell Gallery][5] (PSGallery for short) is a Microsoft-run PowerShell module repository. That's fine, but where are the software packages? That's what PackageManagement package sources are for! + +Microsoft promotes the [Chocolatey package repository][6] as a starting point for PowerShell package management. Please note that Chocolatey is not owned by Microsoft and using Chocolatey packages is at your own risk. + +Moreover, be aware also that setting the **-Trusted** flag on a repository performs no source code validation. Instead, it simply suppresses an "Are you sure?" confirmation sanity check before you install a package. + +All that having been said, let's register Chocolatey as a trusted repo on our Windows 7 workstation, and then verify its installation: + + +`Register-PackageSource -Name Chocolatey -Location http://chocolatey.org/api/v2 -ProviderName PSModule -Trusted -Verbose +Get-PackageSource | Select-Object -Property Name, ProviderName, IsTrusted +Name ProviderName IsTrusted +---- ------------ --------- +PSGallery PSModule False +Chocolatey PSModule True +`I didn't show it in the previous code example, but on first run you'll be prompted to let PowerShell download and install the NuGet provider. [NuGet][7] is a package manager intended for .NET developers and makes it easier to find and install code libraries in Visual Studio. Chocolatey has a dependency on NuGet, so that's why it's required. + +The open-source world seems to love word puns; perhaps you derived a few 'yuk yuks' over the idea of "chocolatey nuget," right? Er, maybe not. 🙂 + +## Installing Some Software + +Well, the great moment has arrived: Let's install some software. How about 7-Zip, the freeware file archiver? Does the Chocolatey repo host a copy of the tool? + + +`Find-Package -Name *7zip* +`I'll spare you the output, but the answer is "Yes, of course." Now that we know the name of the package, we can pipeline the object to **[Install-Package][8].** We'll specify** **the **-Verbose** switch parameter so we see as many "behind the scenes" details as possible: + + +`Find-Package -Name 7zip | Install-Package -Verbose -Force +`Sadly, I learned through bitter experience (as well as by inspecting the **-Verbose** package installation output) that different packages put the executables in different folders. For instance, the Chocolatey [7-Zip][9] package uses the traditional **C:\Program Files**. On the other hand, the Chocolatey [Windows Sysinternals][10] package places its executables in the path **C:\Chocolatey\bin**. Thus, I needed to add this path permanently to my [PATH][11] environment variable to make the Sysinternals utilities easier to use from within PowerShell.  + +Now for the bad news. What I said in the previous paragraph is perfectly valid for PackageManagement under Windows PowerShell v5. However, I was unable to install any packages on my Windows 7 SP1 machine. Strangely, the package installations failed not with a traditional red error message but with the yellow (or green? I'm colorblind) warning message: + + +`WARNING: The module '7zip' cannot be installed or updated because it is not a properly-formed module. +`This is obviously a bug. Either that or I did something stupid on my own on this computer .:) + +## Testing PowerShellGet + +Just for grins, let's use PowerShellGet to install [ISE Steroids][12], my favorite script editor. We'll begin by enumerating the PowerShellGet functions as usual: + + +`Get-Command -Module PowerShellGet | Select-Object -Property Name | Format-Wide -Column 2 +Find-Module Get-InstalledModule +Get-PSRepository Install-Module +Publish-Module Register-PSRepository +Save-Module Set-PSRepository +Uninstall-Module Unregister-PSRepository +Update-Module +`Fun fact: The PowerShellGet functions are simply wrappers for PackageManagement commands. PowerShellGet runs through the PSModule package provider by default. + +Next we'll install the module. Yes, we could use **Find-Module**, but I already know that [Dr. Weltner][13] posted his module to the Gallery: + + +`Install-Module -Name ISESteroids -Verbose -Force +`This time a smile crept across my face when I issued **Start-Steroids** from within my PowerShell v3 ISE and ISE Steroids loaded.  + +## Final Thoughts + +I have two parting thoughts for you. First, the PackageManagement Modules Preview for PowerShell v3 and v4 (wow, say that three times quickly) is indeed a preview release. Therefore, we can always file bug reports on [Microsoft Connect][14] and I'm sure the PowerShell team will validate and correct them. + +Second, any self-respecting business should deploy their own private, internal package and module repositories rather than use public ones like Chocolatey. The best instructions I've found online for building your own package management repository come from PowerShell MVP [Boe Prox][15] in his blog post "[Setting Up a NuGet Feed for Use with OneGet][16]." By the way, OneGet was the original name for what's now called PackageManagement. + +I hope you found this article useful. Let's chat about it in the comments! Thanks for reading and take good care. + + [1]: http://blogs.msdn.com/b/powershell/archive/2015/10/09/package-management-preview-for-powershell-4-amp-3-is-now-available.aspx + [2]: https://www.microsoft.com/en-us/download/details.aspx?id=49186 + [3]: https://www.microsoft.com/en-us/download/details.aspx?id=40779 + [4]: https://www.microsoft.com/en-us/download/details.aspx?id=34595 + [5]: https://www.powershellgallery.com/ + [6]: https://chocolatey.org/ + [7]: https://www.nuget.org/ + [8]: https://docs.nuget.org/consume/package-manager-console-powershell-reference#install-package + [9]: http://www.7-zip.org/ + [10]: https://technet.microsoft.com/en-us/sysinternals/bb545021.aspx + [11]: https://www.wikiwand.com/en/PATH_(variable) + [12]: http://www.powertheshell.com/isesteroids/ + [13]: https://mvp.microsoft.com/en-us/PublicProfile/9199?fullName=Tobias%20Weltner + [14]: https://connect.microsoft.com/PowerShell + [15]: https://mvp.microsoft.com/en-us/PublicProfile/5000355?fullName=Boe%20Prox + [16]: http://learn-powershell.net/2014/04/11/setting-up-a-nuget-feed-for-use-with-oneget/ diff --git a/content/articles/2015/10/win-a-free-4-day-pass-to-powershell-and-devops-summit-2016/index.md b/content/articles/2015/10/win-a-free-4-day-pass-to-powershell-and-devops-summit-2016/index.md new file mode 100644 index 000000000..758e22fe3 --- /dev/null +++ b/content/articles/2015/10/win-a-free-4-day-pass-to-powershell-and-devops-summit-2016/index.md @@ -0,0 +1,31 @@ +--- +url: /articles/2015-10-28-win-a-free-4-day-pass-to-powershell-and-devops-summit-2016/ +title: Win a Free 4-Day Pass to PowerShell and DevOps Summit 2016! +authors: + - Don Jones +date: "2015-10-28T13:56:18+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2015/10/win-a-free-4-day-pass-to-powershell-and-devops-summit-2016/ +--- + +Want to attend the newly expanded, 4-day [PowerShell and DevOps Summit][1] coming to Bellevue, WA in April 2016? Well you can - if you make your own community contribution! + +Our [TechLetter newsletter][2] is looking for articles. And, November is of course [NaNoWriMo][3], the National Novel Writing Month. But we aren't looking for a novel - just newsletter articles! So we'll call it National PowerShell and DevOps Article Writing Month (NaPoshDoArWriMo). Er. Or something. + +Anyway, here's the rules: + + 1. Submit your articles in Word or RTF format, in a ZIP file via email, to "editors" here at PowerShell.org. Please include a plain-text file with copies of any code in your article, as this makes formatting easier. Also include PNG files of any screen shots your article uses. + 2. Your article can be on any PowerShell or DevOps topic. Talk about techniques, challenges you've solved, best practices, or whatever you like. Minimum article length, excluding code, is 1,500 words. Maximum article length, excluding code, is 5,000 words. + 3. The best articles usually tell a story - a problem you ran into, what you tried, what errors you encountered, and what eventually worked. This is true of "best practices" as well - talk about how the practice helped you solve a problem, or will help prevent problems. Provide lots of examples! + 4. You may submit more than one article. Please do so in a separate email for each. In each email, include your name and e-mail address. **Entries are due by the end of November, 2015.** + 5. Our Editors will choose the winning entry and announce it in the January 2016 TechLetter. Editors reserve the right to decline any article they feel is unsuitable, and Editors' decision on the winning article is final. Winners are responsible for any taxes or duties imposed by their local government. Prize does not include travel expenses, lodging, or anything else. Anyone, anywhere, is eligible to win unless prevented or limited by local law. Prize is nontransferable and has no cash value. + +All right. Go to it!!! + + [1]: http://powershellsummit.org + [2]: https://powershell.org/newsletter/ + [3]: http://nanowrimo.org diff --git a/content/articles/2015/11/_index.md b/content/articles/2015/11/_index.md new file mode 100644 index 000000000..8ae6a8f9e --- /dev/null +++ b/content/articles/2015/11/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from November 2015" +description: "PowerShell.org Articles published in November 2015." +--- diff --git a/content/articles/2015/11/atlanta-powershell-users-group-meeting-december-8th-with-june-blender/index.md b/content/articles/2015/11/atlanta-powershell-users-group-meeting-december-8th-with-june-blender/index.md new file mode 100644 index 000000000..1c24faa46 --- /dev/null +++ b/content/articles/2015/11/atlanta-powershell-users-group-meeting-december-8th-with-june-blender/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2015-11-19-atlanta-powershell-users-group-meeting-december-8th-with-june-blender/ +title: "Atlanta PowerShell User's Group Meeting – December 8th with June Blender" +authors: + - Stephen Owen +date: "2015-11-19T15:03:47+00:00" +aliases: + - /2015/11/atlanta-powershell-users-group-meeting-december-8th-with-june-blender/ +--- + +[![PUG wide text](https://powershell.org/wp-content/uploads/2015/11/PUG-wide-text-968x142.png)][1] +**UPDATE: The new venue will not be ready until next months' meeting, so please meet us instead at the Microsoft office in Alpharetta, Microsoft Corporation +1125 Sanctuary Pkwy Ste 300, Alpharetta** +Join us on Tuesday, December 8th when [June Blender][2] will be giving a talk on PowerShell Events!  This will be in our brand-new venue and meeting place, Microsoft's new Innovation Center, in the famous Atlanta Flat Iron building.  Wear your Santa hats for a special door prize! +**About June Blender** +June Blender is a technology evangelist for SAPIEN Technologies, Inc. Formerly a Senior Programming Writer at Microsoft Corporation, she is best known for her work with the Windows PowerShell product team from 2006-2012, developing the help system and writing the Get-Help help topics for PowerShell 1.0 – 3.0. In other roles, June wrote content for the Azure Active Directory SDK and Azure PowerShell Help, Windows Driver Kits, Windows Support Tools, and Windows Resource Kits. She lives in magnificent Escalante, Utah, where she works remotely when she's not out hiking, canyoneering, or convincing lost tourists to try Windows PowerShell. She is a Windows PowerShell MVP, a PowerShell Hero, an Honorary Scripting Guy, and a frequent contributor to PowerShell.org. Contact her at  [ and follow her on the ](http://www.eventbrite.com/e/phillyposh-december-3rd-2015-adam-bertram-tickets-19612925789?ref=ebtnebregn)[SAPIEN Blog][2] and on Twitter at [@juneb_get_help][3] +[Register now on Meetup!][4] +[![MeetUp](https://powershell.org/wp-content/uploads/2015/11/MeetUp.png)][4] + + [1]: http://www.meetup.com/Atlanta-PowerShell-Users-Group/ + [2]: http://www.sapien.com/blog/ + [3]: https://twitter.com/juneb_get_help + [4]: http://www.meetup.com/Atlanta-PowerShell-Users-Group/events/226320634/?a=socialmedia diff --git a/content/articles/2015/11/keeping-windows-powershell-help-up-to-date/index.md b/content/articles/2015/11/keeping-windows-powershell-help-up-to-date/index.md new file mode 100644 index 000000000..866c6b03f --- /dev/null +++ b/content/articles/2015/11/keeping-windows-powershell-help-up-to-date/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2015-11-24-keeping-windows-powershell-help-up-to-date/ +title: Keeping Windows PowerShell Help Up To Date +authors: + - Steve Parankewich +date: "2015-11-24T19:21:37+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks + - Tutorials +aliases: + - /2015/11/keeping-windows-powershell-help-up-to-date/ +--- + +After a two week hiatus I am back this week with a quick write up on how to automate the updating of PowerShell help. Update-Help should be one of the first things typed in PowerShell on a new workstation build. I jump into the topic and demonstrate how to automate the updating of the help files from the Internet or from a local network share. You can view the full article over at [PowerShellBlogger.com][1]. +I look forward to getting another article out to everyone next week and I hope everyone in the US enjoys their long weekend! + + [1]: http://powershellblogger.com/?p=237 diff --git a/content/articles/2015/11/november-2015-scripting-games-puzzle/index.md b/content/articles/2015/11/november-2015-scripting-games-puzzle/index.md new file mode 100644 index 000000000..7b3924141 --- /dev/null +++ b/content/articles/2015/11/november-2015-scripting-games-puzzle/index.md @@ -0,0 +1,63 @@ +--- +url: /articles/2015-11-07-november-2015-scripting-games-puzzle/ +title: 2015-November Scripting Games Puzzle +authors: + - Don Jones +date: "2015-11-07T14:06:18+00:00" +categories: + - Scripting Games +aliases: + - /2015/11/november-2015-scripting-games-puzzle/ +--- + +Our November 2015 puzzle comes from PowerShell.org user [Tim Curwick][1], who created the puzzle based on a challenge he ran across at work. There's nothing more real-world than this! + + + +## **Instructions** + +The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month's puzzle. You can find them all at https://powershell.org/category/announcements/scripting-games/. Many puzzles will include optional challenges, that you can use to really push your skills. + +**To participate**, add your solution to a public Gist (http://gist.github.com; you'll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post.  +**Only post one entry per person. **However, remember that you can always go back and edit your Gist. We'll always pull the most recent one when we display it, so there's no need to post multiple entries if you want to make an edit. + + +Don't forget the [main rules and purpose of these monthly puzzles][2], including the fact that you won't receive individual scoring or commentary on your entry. + +**User groups are encouraged to work together** on the monthly puzzles. User group leaders should submit their group's best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most "favorite" entries of the year will win a grand prize from PowerShell.org. + +##   + +## **Our Puzzle** + +Scripting challenge: Understanding and cleaning up someone else's code + +Below is an actual script that was in production use at a large enterprise client. The script worked as desired, but as you can see, it could benefit from some clean up. There is some old code in there that may have served a function at one time, but no longer does. The original author and several editors donít seem to have understood PowerShell very well, and it is far more complex than it needs to be. + +Your challenge is to replace everything after the Param statement with a single line of code (no semicolons), while retaining all functionality. + +We are not looking for the _shortest_ line. The whole point is to make the code _more readable_. Don't replace unnecessarily complex with unnecessarily cryptic. + +As in real life, you should also add internal documentation in the form of any concise comments about the script or your new code which may be of value to the next person troubleshooting or updating the script. + + +`param([string]$VMNameStr) +$VMs=@() +$VMNames=@() +if($VMNameStr.indexof(",") -gt 0) +{ +$Trace="Found Comma..." +$VMs=$VMNameStr -split "," | %{$_.trim()} +$trace+="Length = $($VMs.length)" +$trace+=$VMs -is [array] +for($i=0;$i -lt $VMs.length;$i++){ +if($VMs[$i] -gt ""){ +set-variable -Name ("vmname" + $i) -value $VMs[$i] +$VMNames+=$VMs[$i] +} +} +} +else{$VMName0=$VMNameStr;$VMNames=$VMName0} +$VMNames +`[1]: http://madwithpowershell.com + [2]: https://powershell.org/?p=2574 diff --git a/content/articles/2015/11/philadelphia-powershell-user-group-meeting-december-3rd-2015-with-adam-bertram/index.md b/content/articles/2015/11/philadelphia-powershell-user-group-meeting-december-3rd-2015-with-adam-bertram/index.md new file mode 100644 index 000000000..3cf8e3e45 --- /dev/null +++ b/content/articles/2015/11/philadelphia-powershell-user-group-meeting-december-3rd-2015-with-adam-bertram/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2015-11-17-philadelphia-powershell-user-group-meeting-december-3rd-2015-with-adam-bertram/ +title: Philadelphia PowerShell User Group Meeting – December 3rd 2015 with Adam Bertram +authors: + - John Mello +date: "2015-11-18T01:24:39+00:00" +aliases: + - /2015/11/philadelphia-powershell-user-group-meeting-december-3rd-2015-with-adam-bertram/ +--- + +Join us on Thursday, December 3rd when [Adam Bertram][1] will be giving a talk called a "**Top 10 PowerShell mistakes** " +**About Adam Bertram** +Adam Bertram is an independent consultant, technical writer, trainer and presenter. Adam specializes in consulting and evangelizing all things IT automation mainly focused around Windows PowerShell. Adam is a Microsoft Windows PowerShell MVP, 2015 [powershell.org][2] PowerShell hero and has numerous Microsoft IT pro certifications. He authors IT pro course content for Pluralsight, is a regular contributor to numerous print and online publications and presents at various user groups and conferences.  You can find Adam at [adamtheautomator.com][1] or on Twitter at [@adbertram][3]. +[![Eventbrite - PhillyPosh December 3rd 2015 - Adam Bertram](https://www.eventbrite.com/custombutton?eid=19612925789)](http://www.eventbrite.com/e/phillyposh-december-3rd-2015-adam-bertram-tickets-19612925789?ref=ebtnebregn) + + [1]: http://adamtheautomator.com + [2]: https://powershell.org + [3]: https://twitter.com/adbertram diff --git a/content/articles/2015/11/powershell-devops-global-summit-2016-info/index.md b/content/articles/2015/11/powershell-devops-global-summit-2016-info/index.md new file mode 100644 index 000000000..1b4f4d319 --- /dev/null +++ b/content/articles/2015/11/powershell-devops-global-summit-2016-info/index.md @@ -0,0 +1,42 @@ +--- +url: /articles/2015-11-13-powershell-devops-global-summit-2016-info/ +title: PowerShell + DevOps Global Summit 2016 Info +authors: + - Don Jones +date: "2015-11-13T14:48:49+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2015/11/powershell-devops-global-summit-2016-info/ +--- + +Here's everything that's fit to print regarding Summit 2016, running April 3-4-5-6 in Bellevue, WA! You can also download: [Brochure-PowerShell and DevOps Summit 2016][1] to share with your boss and team. + +## Registration + +Registration for Summit will open December 1, 2015, and run through March 1, 2016. [Visit the registration website for more details][2]. Registration will be limited to about 200 attendees. Initially, we will only offer registration for a 4-day event, which includes full-day pre-conference sessions on April 3rd, 2016. On February 1st, 2016, we will open any remaining space for 3-day registration. + +## Agenda + +The registration website will list the complete agenda, which is subject to change, so be sure to check the website often. The agenda will be online prior to December 1, 2015.  + +## Session Streaming/Recording + +We will **not** be live-streaming sessions - the cost for sufficient bandwidth is prohibitive. We **will** be recording the two main session rooms on April 4-5-6. We **will not** be recording the full-day sessions on April 3rd, nor will we be recording the "extra" sessions in the third session room throughout the week (we only have enough equipment to record two rooms, and the third room will not be in use all the time). + +[Pluralsight][3] has agreed to sponsor the event, and will be recording HD video and high-quality audio of our speakers in the two main session rooms. They'll be using that, along with our traditional screen captures, to produce an enhanced set of session recordings. Those recordings will be made available to all of their subscribers, and all Summit attendees will received free access to the enhanced recordings. For non-attendees, our basic screen-capture recordings will be made available free of charge on our [YouTube channel][4], just as in the past. + +## Special Events + +We'll have several special evening events throughout the conference. Most importantly, Tuesday afternoon will feature an all-hands-on-deck address by Microsoft Technical Fellow Jeffrey Snover, followed by "lightning demos" from members of the WMF product team. After that, we'll move directly into a meet-and-greet reception (kindly sponsored by [SAPIEN][5]) where we've invited the entire product team to come talk to you. Stay tuned for further announcements on special events. + +## Hotel + +We do not have an official arrangement with any hotel. You'll find several hotels near the Meydenbauer Center in downtown Bellevue, including the Red Lion Inn, Hilton, Courtyard by Marriott, and others. You're welcome to stay where you like. Please note that parking **is not free** at the Center, so we do not recommend a rental car. Lyft/Uber are generally available, as are taxis, and several hotels are within a reasonable walking distance (~15min).  + + [1]: https://powershell.org/wp-content/uploads/2015/11/Brochure-PowerShell-and-DevOps-Summit-2016-copy.pdf + [2]: https://eventloom.com/event/home/PSNA16 + [3]: http://pluralsight.com + [4]: http://youtube.com/powershellorg + [5]: http://sapien.com diff --git a/content/articles/2015/11/powershell-devops-global-summit-2016-the-agenda/index.md b/content/articles/2015/11/powershell-devops-global-summit-2016-the-agenda/index.md new file mode 100644 index 000000000..a5736dd7c --- /dev/null +++ b/content/articles/2015/11/powershell-devops-global-summit-2016-the-agenda/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2015-11-14-powershell-devops-global-summit-2016-the-agenda/ +title: PowerShell + DevOps Global Summit 2016 – the agenda +authors: + - Richard Siddaway +date: "2015-11-14T18:50:03+00:00" +categories: + - PowerShell Summit +aliases: + - /2015/11/powershell-devops-global-summit-2016-the-agenda/ +--- + +We've finalised the agenda and we're starting to publish session information on the web site at + +https://eventloom.com/event/login/PSNA16 + +There are a handful of sessions on the site at present. The rest will be added over the next week or so. + +Keep checking back to see who's been added. + +Registration opens 1 December 2015 diff --git a/content/articles/2015/11/summit-2016-call-for-topics-is-closed/index.md b/content/articles/2015/11/summit-2016-call-for-topics-is-closed/index.md new file mode 100644 index 000000000..fb73203a1 --- /dev/null +++ b/content/articles/2015/11/summit-2016-call-for-topics-is-closed/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2015-11-01-summit-2016-call-for-topics-is-closed/ +title: Summit 2016 – Call for topics is closed +authors: + - Richard Siddaway +date: "2015-11-01T12:27:11+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2015/11/summit-2016-call-for-topics-is-closed/ +--- + +The Call for Topics for the 2016 Summit is now closed. We've had an amazing number of top quality submissions. We'd like to thank everyone who took the time to submit a proposal for a session at the Summit. We'll be working through the submissions over the next few days as we put the agenda together for what looks to be a superb Summit. + +We'll publish the schedule as soon as we can.  + +Once we have the agenda finalised we'll let you know. diff --git a/content/articles/2015/11/the-popular-week-of-powershell-blogging-is-back-psblogweek/index.md b/content/articles/2015/11/the-popular-week-of-powershell-blogging-is-back-psblogweek/index.md new file mode 100644 index 000000000..ec1e6a3f7 --- /dev/null +++ b/content/articles/2015/11/the-popular-week-of-powershell-blogging-is-back-psblogweek/index.md @@ -0,0 +1,37 @@ +--- +url: /articles/2015-11-30-the-popular-week-of-powershell-blogging-is-back-psblogweek/ +title: "The Popular Week of PowerShell Blogging is back! #PSBlogWeek" +authors: + - Adam Bertram +date: "2015-11-30T14:00:28+00:00" +categories: + - Announcements +aliases: + - /2015/11/the-popular-week-of-powershell-blogging-is-back-psblogweek/ +--- + +Back by popular demand is the week-long coordination of blog posts on a single PowerShell topic known as [#PSBlogWeek][1]! This week, 5 hand-picked bloggers will be writing informative content around the topic of logging. +The daily schedule for this week is as follows: +Monday (Jason Wasser [@wasserja][2]) - [Building Readable Text Log Files][3] +Tuesay (Thom Schumacher [@driberif][4]) - [Slicing and Dicing Text Log Files][5] +Wednesday (Jaap Brasser [@jaap_brasser][6]) - [PowerShell Logging in the Windows Event Log][7] +Thursday (Adam Platt [@platta][8]) - [Reading Events from Event Logs][9] +Friday - (Adam Bertram [@adbertram][10]) - [Building Logs for CMTrace][11] +A big thanks to June Blender ([@juneb_get_help][12]) for her help in editing these posts. +If you'd like to download an eBook containing a nicely laid out compilation of all the content provided this week, head over to [adamtheautomator.com][13] to snag a copy. Feel free to share it wherever you'd like. Consider it public domain. +If you missed our last #PSBlogWeek, download the eBook to bone up on [everything you need to know about PowerShell advanced functions][14]. + + [1]: https://twitter.com/hashtag/PSBlogWeek?src=hash + [2]: https://twitter.com/wasserja + [3]: http://mrautomaton.com/2015/11/30/psblogweek-building-readable-text-log-files/ + [4]: https://twitter.com/driberif + [5]: https://crshnbrn66.wordpress.com/2015/11/30/slicing-and-dicing-log-files/ + [6]: https://twitter.com/jaap_brasser + [7]: http://www.jaapbrasser.com/psblogweek-powershell-logging-in-the-windows-event-log + [8]: https://twitter.com/platta + [9]: http://www.plattsoft.net/2015/12/03/reading-the-event-log-with-windows-powershell + [10]: https://www.twitter.com/adbertram + [11]: http://www.adamtheautomator.com/building-logs-for-cmtrace-powershell/ + [12]: https://twitter.com/juneb_get_help + [13]: http://www.adamtheautomator.com/psblogweek-ebook + [14]: https://powershell.org/wp-content/uploads/2015/11/PowerShell-Blog-Week-Advanced-Functions-Bertram-Blender-Cat-Hicks-Prox1.pdf diff --git a/content/articles/2015/12/_index.md b/content/articles/2015/12/_index.md new file mode 100644 index 000000000..b74c587cb --- /dev/null +++ b/content/articles/2015/12/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from December 2015" +description: "PowerShell.org Articles published in December 2015." +--- diff --git a/content/articles/2015/12/a-real-world-devops-implementation-and-food-for-thought/index.md b/content/articles/2015/12/a-real-world-devops-implementation-and-food-for-thought/index.md new file mode 100644 index 000000000..570597ced --- /dev/null +++ b/content/articles/2015/12/a-real-world-devops-implementation-and-food-for-thought/index.md @@ -0,0 +1,27 @@ +--- +url: /articles/2015-12-03-a-real-world-devops-implementation-and-food-for-thought/ +title: A Real-World DevOps Implementation – and Food for Thought +authors: + - Don Jones +date: "2015-12-03T21:02:23+00:00" +categories: + - DevOps + - PowerShell for Admins +aliases: + - /2015/12/a-real-world-devops-implementation-and-food-for-thought/ +--- + +Want to see what a real-world, functional, production-grade DevOps environment looks like? +Look no further than Amazon Web Services' Elastic Beanstalk (EBS). EBS is a neat combination of their EC2 IaaS product, S3 storage, and some DevOps magic. From a working perspective, it goes something like this: + + 1. Developer checks code into Git. A portion of this code is actually a set of EBS directives, outlining changes that need to be made to the base operating environment. This can include things like setting environment variables, installing packages, and so on. + 2. Someone indicates that what's in GitHub is ready for release. You can do this by pushing a button in your AWS console, or by making a call to AWS' REST APIs. It's pretty easy to automat this step. + 3. AWS spins up virtual machines, and reads the EBS directives to get that environment configured the way it's supposed to be. The code is loaded from Git into the VMs. The VMs are registered with AWS' load balancer, and whatever old VMs were running are de-registered and destroyed. Poof, your app is up and running. + +This model accomplishes the basic goal of DevOps, which is to shorten the path between developers and users. So where's the "Ops" role in all this? Amazon did it. Their contribution to ops was to create all the automation necessary to make these steps happen. And the beauty of this model is that it supports tiered environments. For example, the above three steps might serve to spin up a testing environment, where you then run automated tests to validate the code. If the code validates, it's pushed into a production tier - all automatically - running on a separate EBS application. So from check-in to in-production is entirely automated, and the process can be performed consistently every single time. +Now... what would this look like in a Windows world? +In Step 1, imagine that instead of a set of EBS configuration directives - which are just text files - your developers create DSC configurations. Yes, the developers. After all, they're the ones who are coding for the environment, so that DSC configuration documents what they need the environment to look like. You might have a second DSC configuration that documents corporate standards for security, manageability, and so on. Whatever. +Step 3 might be Microsoft Azure Pack or System Center Virtual Machine Manager, told - perhaps via an SMA automation script - to spin up the new VMs from a base OS image. The DSC configurations are run to produce a MOF, which is injected into the new VM. The developer's code is deployed to the VM. The VM is registered with DNS and perhaps a load balancer, which provide access to it. +There are a couple of important details that I've glossed over a bit. Jeffrey Snover is fond saying, "treat servers like cattle, not pets." But servers by their nature have to have a few unique pieces of information, right? Well... yes and no. For all I know, cows make up names for themselves. I just don't care. Take IP addresses, for example. You shouldn't be assigning static IP addresses to servers; your DHCP system should be highly available, fault tolerant, and set up to handle servers. As you spin up a new VM, you can obviously have it register itself with DNS, so the IP address is mapped to a hostname. And speaking of that hostname - you as a human never need to know it. Or you shouldn't. Windows will make up a host name for itself as the VM spins up, and you can - through your automation scripts - capture that host name. That lets you set up DNS CNAME records, a load balancer, or whatever else. The point is that while the server may have made up a name for itself, you don't care. Nobody will ever address that server by its host name - they'll use an abstraction, like a load-balanced name, or a CNAME, or something else. Your automation scripts handle the mapping for you. When a VM is spun down, automation de-registers the dying host's name from whatever, closing the lifecycle loop. +Interestingly, you could probably do this exact model, today, with a huge number of applications in your environment. Why bother? I mean, this model makes sense in web apps where you're constantly spinning up and destroying VMs, but what about the majority of your apps that just run all the time without change? Well, this same model could spin them up in a disaster recovery scenario. Or in testing environments, which are constantly re-created to provide "clean" tests. Yes, it's a lot of _investment_ up front to make it all work, but once it's set up it just runs itself. +And that's what DevOps looks like. diff --git a/content/articles/2015/12/december-2015-scripting-games-puzzle/index.md b/content/articles/2015/12/december-2015-scripting-games-puzzle/index.md new file mode 100644 index 000000000..179c7cf3a --- /dev/null +++ b/content/articles/2015/12/december-2015-scripting-games-puzzle/index.md @@ -0,0 +1,63 @@ +--- +url: /articles/2015-12-05-december-2015-scripting-games-puzzle/ +title: 2015-December Scripting Games Puzzle +authors: + - Don Jones +date: "2015-12-05T16:33:35+00:00" +categories: + - Scripting Games +aliases: + - /2015/12/december-2015-scripting-games-puzzle/ +--- + +Our December 2015 puzzle comes from PowerShell.org board member Jeff Hicks, who wanted to share a little holiday fun for the season. + + +## **Instructions** + +The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month's puzzle. You can find them all at https://powershell.org/category/announcements/scripting-games/. Many puzzles will include optional challenges, that you can use to really push your skills. +**To participate**, add your solution to a public Gist (http://gist.github.com; you'll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post.  +**Only post one entry per person. **However, remember that you can always go back and edit your Gist. We'll always pull the most recent one when we display it, so there's no need to post multiple entries if you want to make an edit. + +Don't forget the [main rules and purpose of these monthly puzzles][1], including the fact that you won't receive individual scoring or commentary on your entry. +**User groups are encouraged to work together** on the monthly puzzles. User group leaders should submit their group's best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most "favorite" entries of the year will win a grand prize from PowerShell.org. + +## **Our Puzzle** + +The 12 Days of PowerShell! It is that time of year again. Time to think about sugar plums, nutcrackers and PowerShell. Well, maybe we think about that last one all year long. Because I am a giving kind of guy, I thought I‘d give you a PowerShell present. I like to think my present is one that continues to give as it involves learning. I have a small set of challenges that shouldn’t be too difficult, should be fun and in the end educational. +In PowerShell, and I think the ISE might work best for this, create this here-string. + + +`$list = @" +1 Partridge in a pear tree +2 Turtle Doves +3 French Hens +4 Calling Birds +5 Golden Rings +6 Geese a laying +7 Swans a swimming +8 Maids a milking +9 Ladies dancing +10 Lords a leaping +11 Pipers piping +12 Drummers drumming +"@ +`The variable $list is technically a single string with a length of 226. Using $list, see if you can solve these questions or challenges. I have written these in such a way that the solutions build on earlier answers. + + 1. Split $list into a collection of entries, as you typed them, and sort the results by length. As a bonus, see if you can sort the length without the number. + 2. Turn each line into a custom object with a properties for Count and Item. + 3. Using your custom objects, what is the total number of all bird-related items? + 4. What is the total count of all items? + +For those of you who have been extra good this year, I have a bonus challenge (or maybe you’ll think it is a lump of coal). Some people interpret The 12 Days of Christmas cumulatively. That is, on day 1 your true love got 1 item. On the second day, your true love got 2 turtle doves AND a partridge in a pair tree. This is in addition to the previous day’s presents. If you were to manually plot this in PowerShell you might do: + + +`$t = 0 +$t += 1 +$t += 1+2 +$t += 1+2+3 +`… +But you should be more elegant. Using PowerShell what is the total number of cumulative gifts? + + + [1]: https://powershell.org/?p=2574 diff --git a/content/articles/2015/12/microsofts-brave-new-world-needs-version-numbers/index.md b/content/articles/2015/12/microsofts-brave-new-world-needs-version-numbers/index.md new file mode 100644 index 000000000..ae349c888 --- /dev/null +++ b/content/articles/2015/12/microsofts-brave-new-world-needs-version-numbers/index.md @@ -0,0 +1,34 @@ +--- +url: /articles/2015-12-28-microsofts-brave-new-world-needs-version-numbers/ +title: "Microsoft's Brave New World Needs Version Numbers" +authors: + - Don Jones +date: "2015-12-28T19:21:23+00:00" +categories: + - News + - PowerShell for Admins +aliases: + - /2015/12/microsofts-brave-new-world-needs-version-numbers/ +--- + +In Microsoft's brave new world of agile, more-frequent software releases, including numerous pre-release cycles... Microsoft needs to rethink the way it communicates versioning. +Windows Management Framework (WMF) v5 has, for me, been pretty much the perfect example of what _not_ to do, and the perfect example of Microsoft still shoehorning itself into old nomenclature that no longer fills the bill. I know a bunch of folks on the PowerShell team are probably still trying to figure out what works, too, so this isn't meant to be a hammer-on-'em post, but WMF5's lifecycle was, from a versioning perspective, pretty hellish. +We had several "technology preview" releases, which were simply named after their month of release. April 2015. November. Whatever. It was really difficult from within the product - e.g., via $PSVersionTable - to tell which one you were running, which made helping people difficult. None of these were supported in production until the "WMF5 Production Preview" released in late 2015, and in December we got "RTM" code. RTM means "Released to Manufacturing," which is kind of absurd as a milestone, because there's literally zero actual manufacturing going on. It's just a word Microsoft is used to using. Windows 10 shipped with a production-supported version of WMF5, but it still wasn't "final," meaning RTM WMF is better than what shipped with the RTM OS. God willing, what ships in Windows Server 2016 will be v5.1 or something, because if we get yet another 5.0 release folks are going to start throwing up their hands and quitting. +Now that Microsoft's all lovey-huggy with open source and Linux and stuff, can we just copy what those guys do? +Every time you release code, increment the version number. It's that simple. There's no "production preview," there's just "5.3." And you maintain a list of what's supported in production. If 5.3 isn't a production milestone, fine - say so. But it's still a real version, because it was released unto the world. The next release is 5.4. Then 5.5. And maybe 5.6 is supported in production, but once 5.7 is out, 5.6 remains supported for only 90 days. Or whatever. Just have a list of what's supported, and increment the version number every time you release it. 5.8 might only last a week before someone finds some heinous bug and releases 5.9 - that's fine. After that comes 5.10, and then 5.11, and so on. +6.0 is the first release of a major new evolution in the product, and it's probably a "preview" release. 6.1 will be a bit better, with fewer bugs and more features nailed down, but it won't be until maybe 6.5 that we get a "supported in production" release. +All of this is a **lot easier to keep track of** than vague "version" numbers like "April 2016 Production Preview." +And while we're at it, let's have a Get-PSVersionInfo cmdlet. It can wrap around the existing $PSVersionTable variable, of course, but it can also ping a web service on Microsoft.com to tell you what the _latest_ version is, what the _latest supported_ version is, and whether or not your current version is supported in production. OMG, that would be _wonderful. _ + + +`PS C:\> Get-PSVersionInfo +Name Value +---- ------ +PSVersion 5.8 +ProductionOK False +LatestPSVersion 6.0 +LatestProductionPSVer 5.9 +`This tells me that I have 5.8, and it isn't supported in production at this time. I can get 5.9, which is supported in production, although there's a newer 6.0 which obviously isn't supported in production. +So please. [Vote for this on UserVoice][1]. + + [1]: https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11226561-version-numbering-for-all-releases diff --git a/content/articles/2015/12/my-favorite-dsc-feature-suggestions-on-uservoice-upvote/index.md b/content/articles/2015/12/my-favorite-dsc-feature-suggestions-on-uservoice-upvote/index.md new file mode 100644 index 000000000..75f1c853e --- /dev/null +++ b/content/articles/2015/12/my-favorite-dsc-feature-suggestions-on-uservoice-upvote/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2015-12-28-my-favorite-dsc-feature-suggestions-on-uservoice-upvote/ +title: My Favorite DSC Feature Suggestions on UserVoice (upvote!) +authors: + - Don Jones +date: "2015-12-28T19:35:27+00:00" +categories: + - PowerShell for Admins +aliases: + - /2015/12/my-favorite-dsc-feature-suggestions-on-uservoice-upvote/ +--- + +Hopefully, you're aware that Microsoft is moving to UserVoice for accepting feature requests and bugs. [DSC in particular has 30-odd suggestions at present][1], and I thought I'd run through some of my fav's. Log in and up-vote the ones you like, or add comments to expand the discussion! + + * [Add Maintenance Windows Awareness to DSC/LCM][2]. This is one of mine, but it came from several customer suggestions. + * [Change the Pull Server database to SQL Server][3]. Broadly, this is a great idea. In theory, you should be able to modify the web.config file and direct it to a SQL Server already, but nobody knows the database schema that the pull server expects. + * [Refactor the LCM's validation logic][4]. This is another of mine, and it's crucial. Right now, only the LCM can validate multiple partial configs and tell you if there's a validation problem like a duplicate key. This means our only possible point of failure is the target node, which is the worst possible place for that to be. Factoring the logic out would let us built a pull server that could combine multiple configurations _server-side, _and spit out a combined, pre-validated MOF for the target to consume. We could also use the configuration logic to manually combine and validate MOFs in a test or RSoP mode, perhaps with a cmdlet. + +There's plenty more - have a look, vote for ones you like, and add your own suggestions! And there's a lot more besides DSC in there - see anything that you think is important? + + [1]: https://windowsserver.uservoice.com/forums/301869-powershell/category/148047-desired-state-configuration-dsc + [2]: https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11088780-add-maintenance-window-awareness-to-dsc-lcm + [3]: https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11088516-change-from-edb-file-to-sql-server-database-for-de + [4]: https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11088813-enable-proactive-validation-of-partial-configurati diff --git a/content/articles/2015/12/powershell-editor-services-hack-week-dec-6-13/index.md b/content/articles/2015/12/powershell-editor-services-hack-week-dec-6-13/index.md new file mode 100644 index 000000000..633d64f80 --- /dev/null +++ b/content/articles/2015/12/powershell-editor-services-hack-week-dec-6-13/index.md @@ -0,0 +1,70 @@ +--- +url: /articles/2015-12-03-powershell-editor-services-hack-week-dec-6-13/ +title: Join us for the PowerShell Editor Services Hack Week, Dec 6-13! +authors: + - David Wilson +date: "2015-12-03T15:59:08+00:00" +categories: + - Announcements + - PowerShell for Developers + - Tools +aliases: + - /2015/12/powershell-editor-services-hack-week-dec-6-13/ +--- + +Do you wish your favorite editor had better PowerShell editing support?  Do you have a great idea for a new feature for the PowerShell extension in Visual Studio Code?  We’re dedicating next week, **December 6th through 13th** (Sunday through next Sunday), to hacking together on new features to enable better PowerShell support in any editor! +Here’s the plan: +**On Sunday, December 6th at 11AM-12PM PST (7-8PM GMT)** I’ll host a [Crowdcast event][1] to give an overview of PowerShell Editor Services, the PowerShell extension for VS Code, and other general ideas for contributions that people can make.  Participants can join to ask questions and discuss potential ideas so that we can get the ball rolling. +Once hacking has started, we’ll hang out together in the #editors channel of the [PowerShell Slack Community][2] so that everyone can get help on their contributions.  We’ll be using these discussions to help flesh out documentation about these projects using the [GitHub Wiki][3].  Every question asked will be helpful so don’t be shy! +On the week following our hacktivities, I’ll release new builds of PowerShell Editor Services and the Visual Studio Code extension containing our collective efforts.  I’ll also post a follow-up report here on PowerShell.org with details about all the contributions that were made in this time. + +### Ways to Contribute + +There are many places where you can contribute even if you don’t have time to write code.  Here are some ideas: +**Improve PowerShell Editor Services** + + * Write and review documentation for the .NET and JSON APIs + * Help provide good PowerShell script examples for validating language intelligence features + * Add language features support for files in a PowerShell module project ([issue #11][4]) + * Add language feature support for PowerShell classes ([issue #14][5]) + * Check out the [help wanted issue label][6] for more ideas! + +**Improve the PowerShell extension for Visual Studio Code** + + * Create new VS Code “command” features which provide helpful functionality for PowerShell + * File bugs for cool features you’d like to see or examples of things that don’t work well yet + * Help improve syntax highlighting for PowerShell code (issues [#26][7] and [#52][8]) + * Add features or fix bugs with the [help wanted issue label][9] + +**Add new editor integrations for PowerShell Editor Services** + + * [Sublime Text][10] + * [Atom][11] + * [Emacs][12] + * [Vim][13] + * … any other editor you’re interested in! + + * Use any of these projects during the hack week and provide feedback! + +### Want to participate? + +If you're interested in participating, check out the [PowerShell Editor Services Hack Week wiki page][14] and add your name to the participants list. I’ll be tracking the latest details about the event there next week.  Don’t forget to RSVP for the [Crowdcast event][1] to be reminded when it begins. +Looking forward to hacking with you all next week! +David Wilson [@daviwil +][15] Software Engineer at Microsoft + + [1]: https://www.crowdcast.io/e/pseditorhackweek1215 + [2]: http://slack.poshcode.org/ + [3]: https://github.com/PowerShell/PowerShellEditorServices/wiki + [4]: https://github.com/PowerShell/PowerShellEditorServices/issues/11 + [5]: https://github.com/PowerShell/PowerShellEditorServices/issues/14 + [6]: https://github.com/PowerShell/PowerShellEditorServices/labels/help-wanted + [7]: https://github.com/PowerShell/vscode-powershell/issues/26 + [8]: https://github.com/PowerShell/PowerShellEditorServices/issues/52 + [9]: https://github.com/PowerShell/vscode-powershell/labels/help-wanted + [10]: https://github.com/SublimeText/PowerShell + [11]: https://github.com/jugglingnutcase/language-powershell + [12]: https://github.com/jschaf/powershell.el + [13]: https://github.com/PProvost/vim-ps1 + [14]: https://github.com/PowerShell/PowerShellEditorServices/wiki/PowerShell-Editor-Services-Hack-Week---Dec-2015 + [15]: https://twitter.com/daviwil diff --git a/content/articles/2015/12/powershell-news-roundup-theres-been-a-lot-of-it/index.md b/content/articles/2015/12/powershell-news-roundup-theres-been-a-lot-of-it/index.md new file mode 100644 index 000000000..e59333cc0 --- /dev/null +++ b/content/articles/2015/12/powershell-news-roundup-theres-been-a-lot-of-it/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2015-12-21-powershell-news-roundup-theres-been-a-lot-of-it/ +title: "PowerShell News Roundup (There's Been a Lot of it)" +authors: + - Don Jones +date: "2015-12-21T18:37:50+00:00" +categories: + - Announcements +aliases: + - /2015/12/powershell-news-roundup-theres-been-a-lot-of-it/ +--- + +There've been so many under-the-radar announcements and news bits about PowerShell, that I thought it'd be worth a quick start-of-the-week, pre-holiday roundup. +First off, the big news is that **[Windows Management Framework v5 has been released to manufacturing (RTM)][1]. **Not that there's any real "manufacturing" anymore, but this means we've hit the milestone where it's "done." Now, if Microsoft is smart, whatever WMF ships with Win2016 will be "5.1" or something, so we can all keep track of what's what. Fingers crossed on that. +Next, and you may have missed this, **Microsoft is moving away from Connect and over to UserVoice** for many products, and [PowerShell is now amongst them][2]. Spread the word on this, because feedback is super-important, the team _actually does listen, _and UserVoice is now where it'll happen. +In the continuing move to open source, the PowerShell team **[released a bunch of their tests on GitHub][3]. **These are some of the tests they use to test PowerShell itself, and the ability for everyone to now contribute to those means the team can produce more error free code for us. This is a big deal, and proves this isn't your grandfather's Microsoft anymore. +The **[DSC Documentation has also been open sourced][4], **meaning we can all finally contribute to that. Yeah, we all know Microsoft should be producing their own docs - and they are - but this lets us correct errors, add examples and expansions, and fill in the gaps Microsoft may have to leave. They're not a bundle of infinite resources, after all, and this finally lets us help each other in a more effective way. +The **[PowerShell + DevOps Global Summit 2016][5]** is about 1/3 sold-out. Currently, only 4-day registration is available. In February, we'll begin offering any remaining seats for 3-day attendance as well as 4-day. We don't recommend waiting much longer, because when we hit most people's new fiscal year next month, it'll be downhill to "sold out" again. Remember that registration cuts off at the beginning of March 2016, too. +Finally, **the Scripting Games puzzles** continue to be posted at the start of each month (usually the first Saturday). We're actively looking for a moderator to take over the process of collecting puzzle submissions from the community, coordinating puzzle and solution posting, and reviewing community submissions for noteworthy ones to call out. If you're interested, drop an e-mail to admin here at PowerShell.org. We already have content for January and February 2016, and are also looking for puzzle submissions. Drop an e-mail if you'd like to contribute a puzzle and a solution. +Happy Holidays from everyone here at PowerShell.org, and we wish you all the best in the coming new year! + + [1]: http://blogs.msdn.com/b/powershell/archive/2015/12/16/windows-management-framework-wmf-5-0-rtm-is-now-available.aspx + [2]: http://blogs.msdn.com/b/powershell/archive/2015/12/14/improving-the-powershell-feedback-experience-with-uservoice.aspx + [3]: http://blogs.msdn.com/b/powershell/archive/2015/12/07/powershell-tests-released-on-github.aspx + [4]: http://blogs.msdn.com/b/powershell/archive/2015/11/03/the-new-home-of-dsc-documentation.aspx + [5]: http://powershellsummit.org diff --git a/content/articles/2015/12/powershell-orgs-nonprofit-status/index.md b/content/articles/2015/12/powershell-orgs-nonprofit-status/index.md new file mode 100644 index 000000000..04460d788 --- /dev/null +++ b/content/articles/2015/12/powershell-orgs-nonprofit-status/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2015-12-29-powershell-orgs-nonprofit-status/ +title: "PowerShell.org's Nonprofit Status" +authors: + - Don Jones +date: "2015-12-29T15:11:16+00:00" +categories: + - Announcements +aliases: + - /2015/12/powershell-orgs-nonprofit-status/ +--- + +We learned today that The DevOps Collective, Inc., (the company that officially owns and runs PowerShell.org, the PowerShell + DevOps Global Summit, etc.) was accepted by the US Treasury as a 501(c)(3) public charity. +That means that the company is quite literally owned by the American public now, and run by its Board of Directors. No human or business entity owns the company and its assets, which is exactly our intent. Further, no human or business entity can profit from the company, which is also our exact intent. Regardless of who's running it, it's now big-time illegal for any Director (for example) to just partake of the organization's money. Previously, it was merely unethical, but completely legal, as the company was technically for-profit. So we're right where we want to be. +Donations to the corporation are now tax-deductible, charitable contributions. However, a _donation_ is when you get nothing of value in return; unfortunately, Summit registration fees - since Summit itself is of considerable material value - are _not_ charitable contributions. Your registration is likely still deductible as a business expense (namely, education, along with your travel expenses), something you or your organization's accountants should determine. Sponsorships - given that sponsors don't receive anything of material value from us - are considered deductible contributions in most cases. +I'm very proud to have brought the organization to this point, and I want to point out that it's due in part to Microsoft's own recent activities, such as bringing Core CLR, the WS-MAN stack, DSC client, and other bits to non-Windows operating systems, as well as their progress in open sourcing so many critical pieces. Those activities - and our expanding focus on DevOps in general - have taken us away from being an organization that supports a commercial product (MS Windows) to a much broader organization that was qualified for this beneficial status. I also want to offer a big shout-out to my fellow Directors, and especially Jason Helmick, who put in a lot of work with our own accountants to get this all in order for the IRS. +For the organization itself, it means our main revenue activity - Summit - is now nontaxable for us. That means we get to keep all of our money to spend on organizational operating expenses, instead of losing some of it to taxes. That gives us a 15-25% boost in being able to operate our TeamCity public build server, this very website, our TechSession webinars, and other activities. This new status also, I believe, places us firmly on a path toward long-term existence. PowerShell.org is now, in a very binding legal way, something _we all own, _and something it's on all of us to continue growing and supporting. +Thank you for that support, and Happy New Year! diff --git a/content/articles/2015/12/recap-of-the-dec-2015-powershell-editor-services-hack-week/index.md b/content/articles/2015/12/recap-of-the-dec-2015-powershell-editor-services-hack-week/index.md new file mode 100644 index 000000000..007f3b16e --- /dev/null +++ b/content/articles/2015/12/recap-of-the-dec-2015-powershell-editor-services-hack-week/index.md @@ -0,0 +1,56 @@ +--- +url: /articles/2015-12-15-recap-of-the-dec-2015-powershell-editor-services-hack-week/ +title: Recap of the Dec 2015 PowerShell Editor Services Hack Week +authors: + - David Wilson +date: "2015-12-16T01:30:17+00:00" +categories: + - Events + - PowerShell for Developers + - Tools +aliases: + - /2015/12/recap-of-the-dec-2015-powershell-editor-services-hack-week/ +--- + +Thanks to all those who participated in the PowerShell Editor Services Hack Week last week!  Much progress was made on fixing bugs and adding new features to both [PowerShell Editor Services][1] and the [PowerShell extension for Visual Studio Code][2].  Here's a quick summary of the contributions that were made during the week: +**Variable Display Improvements in the Debugger** +[Keith Hill][3] made many great improvements to how we display variable contents in the Visual Studio Code debugger.  First of all, he added support for variable scopes other than just "Local" as we had before.  You can now inspect variables from both the Global and Script scopes.  You will also see a special "Auto" section which filters the set of variables down to those that were defined in the current scope.  This is really helpful for quickly checking the state of the variables in your functions! +[![keith_auto](https://powershell.org/wp-content/uploads/2015/12/keith_auto.png)](https://powershell.org/wp-content/uploads/2015/12/keith_auto.png) +He also added greatly improved the variable value display for collections such as arrays and dictionaries and also objects which implement the ToString() method in .NET.  You will now see much greater detail for these variables in the debugger: +[![keith_vars](https://powershell.org/wp-content/uploads/2015/12/keith_vars.png)](https://powershell.org/wp-content/uploads/2015/12/keith_vars.png) +**New Expand Aliases Command** +[Doug Finke][4] contributed a new "Expand Aliases" command which searches your script file or selection for the use of cmdlet aliases.  For any alias it finds, it replaces the text with the full command name.  This is helpful for developers who want to quickly write out scripts using aliases but resolve them to their command names before committing to source control. +Here's a GIF of the feature in action (click to play!): +[![Demo of Expand Alias in VS Code](https://powershell.org/wp-content/uploads/2015/12/vscodeExpandAlias2-628x360.gif)](https://powershell.org/wp-content/uploads/2015/12/vscodeExpandAlias2.gif) +**Sublime Text Editor Integration** +Work on the integration of PowerShell Editor Services in Sublime Text has progressed quite well this week.  The basic protocol implementation is now working, enabling language features to be integrated over time.  I've also implemented basic file management support so that opened files are sent to Editor Services for syntax checking and semantic analysis.  From this point it's just a matter of integrating the language features of PowerShell Editor Services into Sublime's UI using its [plugin API][5]. +Check out the current code in the [editor-services branch of my fork][6] of the PowerShell Sublime Text package.  Once this effort is stable enough for an initial release, I'll be submitting a PR back to the [original PowerShell Sublime Text package repo][7] and future work will continue there. +**Atom Editor Integration** +Some work was started on an integration with the Atom editor but it was quickly determine that Atom's APIs for language features were to sparse to make quick progress.  However, with the experience gained from the Sublime Text integration, future work on the Atom integration should be much easier.  Expect to see more effort in this area in the first half of 2016. +**Miscellaneous Improvements** + + * [Mateusz Świetlicki][8] improved the "Run Selection" command so that it will run the line that the user's cursor is sitting on if there is no text selection + * The default set of Script Analyzer rules used for semantic analysis has been reduced to provide helpful hints without giving too much feedback.  (In the future the rule set will be completely configurable.) + * A set of bugs around code completion text replacements were fixed so that using IntelliSense no longer eats your code 🙂 + +**New Releases** +As promised, I've prepared new releases of both PowerShell Editor Services and the PowerShell extension for Visual Studio Code which contain all of the contributions made during these week.  The new NuGet packages for PowerShell Editor Services have been released on NuGet today (see the following changelog link).  The Visual Studio Code extension will be released once a publishing issue has been resolved. +Here are the changelog entries for both releases: + + * [PowerShell Editor Services 0.3.0][9] + * [PowerShell for Visual Studio Code 0.3.0][10] + +**Looking Ahead** +Overall I am very impressed with the work that we accomplished this week even though there wasn't a large amount of contributors.  My guess is that PowerShell fans would feel more comfortable contributing by writing PowerShell rather than C#.  I've got some ideas on how to make this possible in the future so keep an eye out for another Hack Week next year! +Thanks again to all the contributors and to all the users of these projects! + + [1]: https://github.com/PowerShell/PowerShellEditorServices + [2]: https://github.com/PowerShell/vscode-powershell + [3]: https://twitter.com/r_keith_hill + [4]: https://twitter.com/dfinke + [5]: http://www.sublimetext.com/docs/3/api_reference.html + [6]: https://github.com/daviwil/SublimePowerShell/tree/editor-services + [7]: https://github.com/SublimeText/PowerShell + [8]: https://github.com/mswietlicki + [9]: https://github.com/PowerShell/PowerShellEditorServices/blob/master/CHANGELOG.md#030 + [10]: https://github.com/PowerShell/vscode-powershell/blob/master/CHANGELOG.md#030 diff --git a/content/articles/2015/_index.md b/content/articles/2015/_index.md new file mode 100644 index 000000000..02fcac4e3 --- /dev/null +++ b/content/articles/2015/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from 2015" +description: "PowerShell.org Articles published in 2015." +--- diff --git a/content/articles/2016-01-02-january-2016-scripting-games-puzzle.md b/content/articles/2016-01-02-january-2016-scripting-games-puzzle.md deleted file mode 100644 index 5257b846b..000000000 --- a/content/articles/2016-01-02-january-2016-scripting-games-puzzle.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: 2016-January Scripting Games Puzzle -authors: - - Don Jones -date: "2016-01-02T15:00:01+00:00" -categories: - - Scripting Games -aliases: - - /2016/01/january-2016-scripting-games-puzzle/ ---- - -Our January 2016 puzzle comes from MVP Adam Bertram. We're actively interested in receiving Scripting Games puzzles from members of the community - submit yours, along with an official solution, to us at admin@ via email! - - -## **Instructions** - -The Scripting Games are a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month's puzzle. You can find them all at https://powershell.org/category/announcements/scripting-games/. Many puzzles will include optional challenges, that you can use to really push your skills. -**To participate**, add your solution to a public Gist (http://gist.github.com; you'll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the Gist URL from your browser window and paste it, by itself, as a comment of this post.  -**Only post one entry per person. **However, remember that you can always go back and edit your Gist. We'll always pull the most recent one when we display it, so there's no need to post multiple entries if you want to make an edit. Just edit the original Gist and we'll see your changes shortly. - -Don't forget the [main rules and purpose of these monthly puzzles][1], including the fact that you won't receive individual scoring or commentary on your entry. -**User groups are encouraged to work together** on the monthly puzzles. User group leaders should submit their group's best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most "favorite" entries of the year will win a grand prize from PowerShell.org. - -## **Our Puzzle** - -Server uptime is the lifeblood of system administrators. We strive on it, get addicted to it..we need…more server uptime! Don't you think something as addictive and important as server uptime be measured?  How do we know we're getting our uptime fix?  As that famous quote goes, "Reality does not exist until it's measured.".  Let's measure it not only for our own sake but also to give a pretty report to our manager with all those whizbang, doohickey Excel juju that they love to see! -For this month's challenge, I want you to create a PowerShell function that you can remotely point to a Windows server to see how long it has been up for. Here's an example of what it should output. -![image001](https://powershell.org/wp-content/uploads/2015/12/image001.png) -Requirements: -1.     Support pipeline input so that you can pipe computer names directly to it. -2.     Process multiple computer names at once time and output each computer's stats with each one being a single object. -3.     It should not try to query computers that are offline. If an offline computer is found, it should write a warning to the console yet still output an object but with Status of OFFLINE. -4.     If the function is not able to find the uptime it should show ERROR in the Status field. -5.     If the function is able to get the uptime, it should show 'OK' in the Status field. -6.     It should include the time the server started up and the uptime in days (rounded to 1/10 of a day) -7.     If no ComputerName is passed, it should default to the local computer. - -Bonus: -1.     The function should show a MightNeedPatched property of $true ONLY if it has been up for more than 30 days (rounded to 1/10 of a month).  If it has been up for less than 30 days, MightNeedPatched should be $false. - - [1]: https://powershell.org/?p=2574 diff --git a/content/articles/2016-01-07-get-last-reboot-or-computer-up-time-with-powershell.md b/content/articles/2016-01-07-get-last-reboot-or-computer-up-time-with-powershell.md deleted file mode 100644 index 367254f2c..000000000 --- a/content/articles/2016-01-07-get-last-reboot-or-computer-up-time-with-powershell.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Get Last Reboot or Computer Up Time With PowerShell -authors: - - Steve Parankewich -date: "2016-01-07T14:20:24+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -aliases: - - /2016/01/get-last-reboot-or-computer-up-time-with-powershell/ ---- - -Hey everyone, hope you had a great 2015 and I am back with I hope to be weekly updates for everyone at PowerShell.org. I wrote up a quick article on how to retrieve the last reboot time or the current up time for any local or remote computer. I also include a function that can be used to query remote computers as well. There may be a situation where you want to determine whether you take action depending on the last reboot time, or you may simply want it to be displayed for debugging or logging purposes. -You can check out the full article over on [PowerShellBlogger.com][1]. - - - [1]: http://powershellblogger.com/?p=248 diff --git a/content/articles/2016-01-08-mspsug-virtual-meeting-avoiding-version-chaos-in-a-multi-version-powershell-world-jan-12th.md b/content/articles/2016-01-08-mspsug-virtual-meeting-avoiding-version-chaos-in-a-multi-version-powershell-world-jan-12th.md deleted file mode 100644 index f6dc1cf68..000000000 --- a/content/articles/2016-01-08-mspsug-virtual-meeting-avoiding-version-chaos-in-a-multi-version-powershell-world-jan-12th.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "MSPSUG Virtual Meeting: Avoiding Version Chaos in a Multi-Version #PowerShell World – Jan 12th" -authors: - - Mike F Robbins -date: "2016-01-08T14:39:43+00:00" -aliases: - - /2016/01/mspsug-virtual-meeting-avoiding-version-chaos-in-a-multi-version-powershell-world-jan-12th/ ---- - -Join the Mississippi PowerShell User Group virtually on Tuesday, January 12th 2016 at 8:30pm Central Time when PowerShell MVP [June Blender](http://twitter.com/juneb_get_help) will present “_**PowersHELL: Avoiding Version Chaos in a Multi-Version PowerShell World**_”. -Beginning in Windows PowerShell 5.0, you can install multiple versions of the same module on the same computer; even in the same directory. Open source and PowerShellGet have revolutionized the availability of modules and Windows PowerShell 5.0+ will be continuously updated with Windows. The result is a myriad of interlocking parts with far more potential for conflicts in name, version, and functionality. Are we fated for the old "DLL Hell?" In this talk, I'll present the problem, describe some mitigating strategies, warn about their limitations, and provide a roadmap for version sanity. -Visit the [Mississippi PowerShell User Group](http://mspsug.com/2016/01/05/mspsug-january-2016-meeting-powershell-avoiding-version-chaos-in-a-multi-version-world/) website to learn more about June and to find out more details about this month’s meeting. -The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info](http://mspsug.com/attendee-info/)” section. -Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this meeting. -Note: It is not necessary to live in Mississippi or join our user group to attend our meetings or present a session for our user group. -µ diff --git a/content/articles/2016-01-11-atlpug-01-19-2016.md b/content/articles/2016-01-11-atlpug-01-19-2016.md deleted file mode 100644 index 27d816f12..000000000 --- a/content/articles/2016-01-11-atlpug-01-19-2016.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Atlanta PowerShell User's Group Meeting – January 19th 'Let's win the scripting games!'" -authors: - - Stephen Owen -date: "2016-01-11T18:25:02+00:00" -aliases: - - /2016/01/atlpug-01-19-2016/ ---- - -Kicking off in our new venue, we'll be tackling this month's PowerShell.org monthly scripting games challenge! Prizes are given to the group with the best answers over the year, so let's try our best! Have an idea or want to cover a topic? Let us know my messaging Mark Schill or myself (Stephen Owen) -[Here's the link to the puzzle for this month][1]. I would recommend that you look it over, and begin thinking of how you might approach it. However, let's let everyone have a chance to answer the puzzle and work through it as a team 🙂 -[Register now on Meetup!![MeetUp](https://powershell.org/wp-content/uploads/2015/11/MeetUp.png)][2] - - [1]: https://powershell.org/2016/01/02/january-2016-scripting-games-puzzle/ - [2]: http://www.meetup.com/Atlanta-PowerShell-Users-Group/events/227807680/ diff --git a/content/articles/2016-01-11-new-boston-powershell-user-group.md b/content/articles/2016-01-11-new-boston-powershell-user-group.md deleted file mode 100644 index b680218be..000000000 --- a/content/articles/2016-01-11-new-boston-powershell-user-group.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: New Boston PowerShell User Group -authors: - - Steve Parankewich -date: "2016-01-11T15:39:08+00:00" -categories: - - Announcements - - PowerShell for Admins -aliases: - - /2016/01/new-boston-powershell-user-group/ ---- - -Its a new year with new goals and I hope to provide even more assistance and value to the PowerShell community in 2016. I have created a new Boston based PowerShell user group and will be working hard on creating sessions as frequently and regularly as possible. If you are in the greater Boston or New England area please join the user group. If we have any Microsoft employees or PowerShell MVPs visiting the Boston area in the future, we would love to have you deliver a session. I have arranged booking of a room in the Microsoft Technology Center located at Kendall Square, 255 Main Street, Cambridge, MA 02142 when required. I will also look into offering the meetings over Skype for Business if possible. -Check out and join the Boston PowerShell User Group here: diff --git a/content/articles/2016-01-14-improve-delivery-of-powershell-tools-or-version-controlled-files.md b/content/articles/2016-01-14-improve-delivery-of-powershell-tools-or-version-controlled-files.md deleted file mode 100644 index d4973b925..000000000 --- a/content/articles/2016-01-14-improve-delivery-of-powershell-tools-or-version-controlled-files.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Improve Delivery of PowerShell Tools or Version Controlled Files -authors: - - Steve Parankewich -date: "2016-01-14T17:04:54+00:00" -categories: - - DevOps - - PowerShell for Admins - - Tips and Tricks - - Tools - - Training - - Tutorials -aliases: - - /2016/01/improve-delivery-of-powershell-tools-or-version-controlled-files/ ---- - -I am back this week with a quick how-to article on delivering, installing, or launching version controlled files. In the past I ran into problems when having administrators launch my PowerShell tools from a network share. The performance was slow when launching it across the WAN, and the file would often be locked when I tried to replace it with a newer version. I came up with a solution to the problem by using none other than PowerShell. -The solution dips into all kinds of PowerShell techniques including local environment variables, getting text file contents, file version checking and even shortcut (.lnk) creation. If you are also a user of Sapien's PowerShell Studio, then definitely give this one a read. Check out the solution over on [PowerShellBlogger.com][1]. - - [1]: http://powershellblogger.com/?p=275 diff --git a/content/articles/2016-01-18-using-local-functions-remotely-in-an-existing-scriptblock.md b/content/articles/2016-01-18-using-local-functions-remotely-in-an-existing-scriptblock.md deleted file mode 100644 index b2f9a3aca..000000000 --- a/content/articles/2016-01-18-using-local-functions-remotely-in-an-existing-scriptblock.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Using Local Functions in a Scriptblock with Existing Code -authors: - - timpringle -date: "2016-01-18T15:14:03+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks -aliases: - - /2016/01/using-local-functions-remotely-in-an-existing-scriptblock/ ---- - -When you are wanting to run code remotely, it's common to do this via the use of **Invoke-Command** (though other options exist, such as through **Start-Job** for example). The biggest downfall to date i've found with remoting is the lack of an option to combine the use of your local functions within a _ScriptBlock_ that has other code in it. As an example, the following is not possible: - - -`function Add ($param1, $param2) -{ -$param1 + $param2 -} -function Multiply($param1,$param2) -{ -$param1 * $param2 -} -Invoke-Command -ComputerName $env:COMPUTERNAME -ScriptBlock { -$addResult = Add $args[0] $args[1] -$multiplyResult = Multiply $args[0] $args[1] -Write-Output "The result of the addition was : $addResult" -Write-Output "The result of the multiplication was : $multiplyResult" -} -ArgumentList 3, 2 -`However, there is a way to achieve this type of operation, and make as many local functions as you want available to be used and combined with other code in your _ScriptBlock_. You can find the full article at [powershell.amsterdam](http://www.powershell.amsterdam/2015/11/09/using-local-functions-on-remote-computers/). diff --git a/content/articles/2016-01-22-create-windows-shortcuts-or-favorites-with-powershell.md b/content/articles/2016-01-22-create-windows-shortcuts-or-favorites-with-powershell.md deleted file mode 100644 index c356d880e..000000000 --- a/content/articles/2016-01-22-create-windows-shortcuts-or-favorites-with-powershell.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Create Windows Shortcuts or Favorites With PowerShell -authors: - - Steve Parankewich -date: "2016-01-22T16:37:59+00:00" -categories: - - DevOps - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks - - Tutorials -aliases: - - /2016/01/create-windows-shortcuts-or-favorites-with-powershell/ ---- - -Creating windows shortcuts are usually done through the New Shortcut Wizard, MSI files, Group Policy Objects, or even a simple file copy. Shortcut files are .lnk files that Microsoft Windows uses for shortcuts to local files while .url is used for destinations such as web sites. As we all are aware, the .lnk filename extension is hidden in Windows Explorer even when "Hide extensions for known file types" is unchecked in File Type options. The reason for this is the NeverShowExt string value in HKEY_CLASSES_ROOT\lnkfile. Shortcuts are also displayed with a curled arrow overlay icon. The IsShortcut string value causes the arrow to be displayed. -For a full run down on creating shortcuts and favorites with PowerShell head over to [PowerShellBlogger.com][1]. - - [1]: http://powershellblogger.com/?p=301 diff --git a/content/articles/2016-01-28-powershell-devops-global-summit-2016-registration-status.md b/content/articles/2016-01-28-powershell-devops-global-summit-2016-registration-status.md deleted file mode 100644 index 1c987b11b..000000000 --- a/content/articles/2016-01-28-powershell-devops-global-summit-2016-registration-status.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: PowerShell + DevOps Global Summit 2016 Registration Status -authors: - - Don Jones -date: "2016-01-28T18:09:54+00:00" -categories: - - PowerShell Summit -aliases: - - /2016/01/powershell-devops-global-summit-2016-registration-status/ ---- - -A quick status update on Summit: - - * We're currently past our 50% registration point. Right now, only 4-day registrations are available. Register at https://eventloom.com/event/home/PSNA16. - * In just a few days, on February 1st, we'll open all remaining seats for both 3- and 4-day registrations (same registration URL). - * Registration ends during the first week of March. At that time, we'll review the situation, and may be able to open additional seats. However, the price will go up a bit. Our absolute final date for registrations will be March 20th. - -So you've got about 3 days before 3-day registration opens, and from there about a month to sign up. After that, if we have additional space or can make additional space, we'll open more seats - but the price **will** be higher. -If you're attending, don't forget to head over to http://www.zazzle.com/collections/powershell_devops_global_summit_2016-119347973985746667 to pick up an official conference t-shirt, hat, coffee mug, or notebook to bring with you! We also have commemorative tiles available, and will offer a new one each year for you to collect. diff --git a/content/articles/2016-01-28-using-powershell-to-enable-chatops-on-windows.md b/content/articles/2016-01-28-using-powershell-to-enable-chatops-on-windows.md deleted file mode 100644 index 2336071db..000000000 --- a/content/articles/2016-01-28-using-powershell-to-enable-chatops-on-windows.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Using PowerShell to enable ChatOps on Windows -authors: - - Matthew Hodgkins -date: "2016-01-28T14:31:19+00:00" -categories: - - DevOps - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks - - Tools - - Tutorials -aliases: - - /2016/01/using-powershell-to-enable-chatops-on-windows/ ---- - -ChatOps is a term used to describe bringing development or operations work that is already happening in the background into a common chat room. It involves having everyone in the team in a single chat room, then bringing tools into the room so everyone can automate, collaborate and see how automation is used to solve problems. In doing so, you are unifying the communication about what work gets done and have a history of it happening. -ChatOps can be supplemented with the use of tools or scripts exposed using a chat bot. Users in the chat room can talk to the bot and have it take actions on their behalf, some examples of this may be: - - * Checking the status of a Windows Service - * Finding out who is on call via the PagerDuty API - * Querying a server via WMI to see how much disk space is available - -Bots can also be a great way to expose functionality to low-privledged users such as help desk staff, without having to create web interfaces or forms. -If you want more details on the concept of ChatOps, I recommend watching **[ChatOps, a Beginners Guide][1] **presented by [Jason Hand][2]. -A popular toolset for ChatOps is [Slack][3] as the chat client, and [Hubot][4] as the bot. In this post we will use Slack and Hubot together with a PowerShell module I’ve written called [PoshHubot][5]. The module will handle installation and basic administration of Hubot. From there, we will integrate Hubot with PowerShell so we can perform some ChatOps in the Microsoft ecosystem. -Continue reading over at [hodgkins.io][6] - - [1]: https://www.youtube.com/watch?v=F8Vfoz7GeHw - [2]: https://twitter.com/jasonhand - [3]: https://slack.com/ - [4]: https://hubot.github.com/ - [5]: https://github.com/MattHodge/PoshHubot - [6]: http://bit.ly/PSHubot diff --git a/content/articles/2016-01-29-using-powershell-to-make-azure-automation-graphical-runbooks-part-1.md b/content/articles/2016-01-29-using-powershell-to-make-azure-automation-graphical-runbooks-part-1.md deleted file mode 100644 index 241de5658..000000000 --- a/content/articles/2016-01-29-using-powershell-to-make-azure-automation-graphical-runbooks-part-1.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Using PowerShell to make Azure Automation Graphical Runbooks – Part 1 -authors: - - timpringle -date: "2016-01-29T15:52:51+00:00" -aliases: - - /2016/01/using-powershell-to-make-azure-automation-graphical-runbooks-part-1/ ---- - -Microsoft recently released another extension for Azure Automation developers, this time in the form of the Microsoft Azure Automation Graphical Authoring SDK. -This SDK allows developers to make and edit graphic runbooks for using in Azure Automation. Although the examples given are in C#, it's possible to apply the same methodologies to develop them in PowerShell with the accompanying SDK mentioned above. -You can read the first article of this series on creating these Graphical Runbooks at [powershell.amsterdam](http://www.powershell.amsterdam/2016/01/29/using-powershell-to-make-azure-automation-graphical-runbooks-part-1/) diff --git a/content/articles/2016-02-02-connect-to-all-office-365-services-with-powershell.md b/content/articles/2016-02-02-connect-to-all-office-365-services-with-powershell.md deleted file mode 100644 index cb05c8d03..000000000 --- a/content/articles/2016-02-02-connect-to-all-office-365-services-with-powershell.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Connect to all Office 365 Services with PowerShell -authors: - - Steve Parankewich -date: "2016-02-02T18:50:40+00:00" -categories: - - DevOps - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks - - Tools - - Tutorials -aliases: - - /2016/02/connect-to-all-office-365-services-with-powershell/ ---- - -If you are not on Office 365 or have a tenant set up with Microsoft yet, now is the time to reserve your tenant name! With utilizing Office 365, a lot of administration is only available from a PowerShell session. There is a mix of outdated information on what you actually need to install and execute in order to connect to all of the Office 365 services. As a result, I accumulated and wrote up the current download requirements and commands to connect and administer every Office 365 service from one PowerShell session. I hope this saves everyone a lot of time and effort! -Head over to [PowerShellBlogger.com][1] to read the full article [here][1]. - - [1]: http://wp.me/p7al1Q-53 diff --git a/content/articles/2016-02-02-powershellsummit-org-registration-status-for-2-feb-2016-also-recordings.md b/content/articles/2016-02-02-powershellsummit-org-registration-status-for-2-feb-2016-also-recordings.md deleted file mode 100644 index 73665e2fd..000000000 --- a/content/articles/2016-02-02-powershellsummit-org-registration-status-for-2-feb-2016-also-recordings.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: PowerShellSummit.org Registration Status for 2-Feb-2016 (also, recordings) -authors: - - Don Jones -date: "2016-02-02T14:43:52+00:00" -categories: - - PowerShell Summit -aliases: - - /2016/02/powershellsummit-org-registration-status-for-2-feb-2016-also-recordings/ ---- - -OK, here's a quick update of where we're at with registration for [PowerShell + DevOps Global Summit 2016][1]. -We'd originally scheduled 150 seats for the April event, inclusive of speakers. Yesterday (1st Feb) we opened 3-day sales (previously, only 4-day seats had been available), and are now at 126 total attendees. So we've got 24 seats of our original space remaining. -The venue assures us that we can accommodate at least another 25 people, possible as many as 50 more. So we're working with them to make that happen - in the meantime, **I strongly recommend you register soon** if you plan to attend. It looks like, no matter what, we'll be in a sellout situation again this year. -Now, keep in mind that we've greatly expanded the event this year. We're running three full-day pre-conference workshops (that's what you get for the extra day in the 4-day pass). We're having an informal gathering on Sunday evening (after the pre-cons) at the Courtyard Downtown Bellevue, a bar crawl Monday night, and a reception with the WMF team on Tuesday evening. In addition to two tracks of content, we have a third track which will run some extra-long sessions (although not all day). We're also welcoming the WMF team on Tuesday after lunch for a "State of the Shell" address by two of the main team leaders, followed by "Lightning Demos" from a variety of team members. It's a lot of content. -As always, we'll be recording _most_ of the sessions. Basically, the pre-con sessions won't be recorded, nor will the extra-long "bonus" sessions in the third track (we only have two sets of recording gear). All of what we do record will go on YouTube as usual. However, this year, [Pluralsight][2] will be on-hand with camera crews in our two main rooms, and they'll be producing recordings that include screen capture as well as live video of the speakers. Those "better" recordings will go into the Pluralsight library, and everyone attending in person will receive free access to those even if you don't have a subscription. For anyone not attending, you can either access our screen-caps on YouTube for free, or use a Pluralsight subscription to access the nicer videos. This is an experiment with Pluralsight and we appreciate their support! -Oh, and we'll also be offering Verified Effective exams (no computer required!) on Wednesday, to anyone who's interested (no advance registration required). -Anyway, as you can see, it's going to be a busy-busy-busy Summit, and it's looking firmly to be a sellout, even if we're able to secure the extra space at the venue. So **register right the heck now** if you plan to attend. If you're just now getting around to talking the boss into it - well, honestly, you shoulda started back in November ;). At $950 for the 3-day pass, though, this is probably the best educational deal you or your company will ever find, and more than a few people see enough value to pay their own way every year. -So I hope we'll see you there! - - [1]: http://powershellsummit.org - [2]: http://pluralsight.com diff --git a/content/articles/2016-02-03-microsoft-powershell-team-panel-twin-cities-february-meeting.md b/content/articles/2016-02-03-microsoft-powershell-team-panel-twin-cities-february-meeting.md deleted file mode 100644 index 8a48d2e96..000000000 --- a/content/articles/2016-02-03-microsoft-powershell-team-panel-twin-cities-february-meeting.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Microsoft PowerShell team panel – Twin Cities February meeting -authors: - - Tim Curwick -date: "2016-02-04T00:21:21+00:00" -categories: - - Events -aliases: - - /2016/02/microsoft-powershell-team-panel-twin-cities-february-meeting/ ---- - -Ever wonder just what the heck the Microsoft PowerShell team was thinking? Come find out! -Keith Bankston is the senior program manager for PowerShell. Mark Gray is the senior program manager for DSC. Michael Greene is the program manager responsible for understanding customer feedback and getting it into PowerShell. -Join us for a panel discussion where they will answer all of our questions about PowerShell and we in turn will answer their questions about how we use PowerShell and how we would like to use it in the future. -Target North Campus -7300 Oak Grove Parkway -Brooklyn Park, MN -This is a secure facility. [RSVP][1] with full name is required. If you do not use your full name on meetup, please email us your full name. Park in the guest lot to the west of the complex. Check in with security with photo ID. You will be escorted to the meeting room. -Food and networking begin at 4:30. The main meeting will run from 5 to 7. - - [1]: http://www.meetup.com/Twin-Cities-PowerShell-User-Group/events/228593479/ diff --git a/content/articles/2016-02-03-using-powershell-to-make-azure-automation-graphical-runbooks-part-2.md b/content/articles/2016-02-03-using-powershell-to-make-azure-automation-graphical-runbooks-part-2.md deleted file mode 100644 index 5366d6482..000000000 --- a/content/articles/2016-02-03-using-powershell-to-make-azure-automation-graphical-runbooks-part-2.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Using PowerShell to make Azure Automation Graphical Runbooks – Part 2 -authors: - - timpringle -date: "2016-02-04T07:08:25+00:00" -aliases: - - /2016/02/using-powershell-to-make-azure-automation-graphical-runbooks-part-2/ ---- - -The [previous article](http://www.powershell.amsterdam/2016/01/29/using-powershell-to-make-azure-automation-graphical-runbooks-part-1/) in this series covered the release of the Microsoft Azure Automation Graphical Authoring SDK, and began to outline some of the classes used and, where possible, the visible elements they relate to in the Azure portal itself. -This second part of the series focuses on probably the most time consuming and challenging part of scripting these runbooks, those to do with Activities. -You can read the full article at [www.powershell.amsterdam](http://www.powershell.amsterdam/2016/02/03/using-powershell-to-make-azure-automation-graphical-runbooks-part-2/) diff --git a/content/articles/2016-02-05-mspsug-feb-9th-virtual-meeting-intro-into-the-powershell-ise-git-pspester-onedrive.md b/content/articles/2016-02-05-mspsug-feb-9th-virtual-meeting-intro-into-the-powershell-ise-git-pspester-onedrive.md deleted file mode 100644 index 5afc43877..000000000 --- a/content/articles/2016-02-05-mspsug-feb-9th-virtual-meeting-intro-into-the-powershell-ise-git-pspester-onedrive.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "MSPSUG Feb 9th Virtual Meeting: Intro into the #PowerShell ISE, #Git, #PSPester & #OneDrive" -authors: - - Mike F Robbins -date: "2016-02-05T15:01:11+00:00" -aliases: - - /2016/02/mspsug-feb-9th-virtual-meeting-intro-into-the-powershell-ise-git-pspester-onedrive/ ---- - -Join the Mississippi PowerShell User Group virtually on Tuesday, February 9th 2016 at 8:30pm Central Time when [Ryan Yates](http://twitter.com/ryanyates1990) will be presenting an “_**Intro session to Teaching the IT Pro how to Dev with ISE, Git, Pester & OneDrive**_”. -With the amount of additional technologies needed to optimise the efficency of writing PowerShell this can seem very overwelming to someone new to PowerShell and could even put them completely off following an efficency optimised script creation workflow. So in this session I will be Demoing a way of working that can help users progress into Test Driven Development with the Help of a module that adds additional functionality to PowerShell ISE to make this easier to work with. -Visit the [Mississippi PowerShell User Group](http://mspsug.com/2016/01/26/mspsug-february-2016-virtual-meeting-intro-into-the-powershell-ise-git-pester-onedrive/) website to learn more about Ryan and to find out more details about this month’s meeting. -The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info](http://mspsug.com/attendee-info/)” section. -Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this meeting. -Note: It is not necessary to live in Mississippi or join our user group to attend our meetings or present a session for our user group. -µ diff --git a/content/articles/2016-02-06-2016-february-scripting-games-puzzle.md b/content/articles/2016-02-06-2016-february-scripting-games-puzzle.md deleted file mode 100644 index 32e468f35..000000000 --- a/content/articles/2016-02-06-2016-february-scripting-games-puzzle.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: 2016-February Scripting Games Puzzle -authors: - - Don Jones -date: "2016-02-06T15:07:55+00:00" -categories: - - Scripting Games -aliases: - - /2016/02/2016-february-scripting-games-puzzle/ ---- - -Although we have a couple of puzzles queued up, we'll be taking a brief break for the month of February 2016. So, no puzzle this month! -However, **we are in need of puzzles, including sample solutions and explanations. **This is a community effort, so if you've never contributed - now's a great time to start! Drop an email to admin@ this domain. Include a ZIP file with your puzzle, solution, and explanation - all in plain-text files, please. You can include screen shots, as needed, as PNG files. -We're also in need of a Games Master, who can collect monthly puzzles, queue them up for publishing, and scan reader submissions for noteworthy entries. Drop an e-mail if you're interested. -Belong to a user group? Why not spend some time in your next meeting coming up with a puzzle or two that your group can submit? Make them easy or tricky, fun or devilish - it's up to you. A user group could also collectively take on the Games Master role, giving you an important activity (reviewing entries and queuing them for publishing) at each monthly group meeting. -Become a contributor, and help keep this highly visible part of the PowerShell community up and running! diff --git a/content/articles/2016-02-16-planning-for-powershelldevops-global-summit-2017-need-your-opinion.md b/content/articles/2016-02-16-planning-for-powershelldevops-global-summit-2017-need-your-opinion.md deleted file mode 100644 index db78b3e61..000000000 --- a/content/articles/2016-02-16-planning-for-powershelldevops-global-summit-2017-need-your-opinion.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Planning for PowerShell+DevOps Global Summit 2017… Need Your Opinion -authors: - - Don Jones -date: "2016-02-16T17:35:31+00:00" -categories: - - PowerShell Summit -aliases: - - /2016/02/planning-for-powershelldevops-global-summit-2017-need-your-opinion/ ---- - -So, we're already doing some planning for the 2017, 2018, and 2019 events. Because, you know. We do that around here ;). -One thing we're considering is an option to lock-in venue pricing for that three-year period, helping to ensure we can keep our pricing at around $950 for a 3-day event. Doing so requires a hotel room block lock-in as well. On the plus side, that'll lock in hotel pricing for 3 years too, which is great in terms of affordability and predictability. It's scary, because we're committing to paying for those rooms whether people sleep in 'em or not. Another upside is bringing all or most attendees together into one hotel, along with our speakers. -So what we're considering is opening 2017 registration by only offering packages of either 3 or 4 days (it'll be your pick) which are _inclusive of your hotel room. _This would be at a Marriott property, and we could provide receipts/invoices that showed the conference/travel expense breakout, if you needed. So up front, you'd only be able to buy that complete package. The package would also likely include something like a Sunday night meet 'n' greet at the hotel - again, only open to people staying there. -Closer to the event, say in the 60 days before, we'd open registration to ticket-only sales, for however many seats we had remaining. -This is obviously an unabashed attempt to reduce risk by "forcing" people into the hotel package. Realizing that some people might not be able to book "inclusive" packages due to company policies, we'd try to also offer an option where you could buy just a ticket early-on, but were required to book your room in our block. Honestly, this is all about making sure we fill the block. -Our feeling is that a 3-day package would be around $1500 including hotel (3 nights), and you'd have the option of booking on additional nights if you wanted to. it'd be about $2300 for a 4-day/4-night package, if we do the pre-con day again (which is likely as it's been our most popular option for 2016). -Another advantage of having our rates and dates locked in so far out is that we could let attendees put down a (refundable) deposit for 2017, 2018, and/or 2019 - locking in your seat before registration even opens, so you don't have to worry about hitting the website at midnight sharp the day sales open ;). Now that we're a nonprofit, collecting that in advance is much more do-able. -Anyway... we'd like some input from the community. Take [a quick, one-question poll][1] to tell us what you think. - - [1]: http://polldaddy.com/poll/9312274/ diff --git a/content/articles/2016-02-18-convert-vba-macros-to-powershell-for-microsoft-office-automation.md b/content/articles/2016-02-18-convert-vba-macros-to-powershell-for-microsoft-office-automation.md deleted file mode 100644 index 841138815..000000000 --- a/content/articles/2016-02-18-convert-vba-macros-to-powershell-for-microsoft-office-automation.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Convert VBA Macros To PowerShell for Microsoft Office Automation -authors: - - Steve Parankewich -date: "2016-02-18T14:46:34+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks - - Tools - - Training - - Tutorials -aliases: - - /2016/02/convert-vba-macros-to-powershell-for-microsoft-office-automation/ ---- - -There is a lot of documentation out there for interacting with Microsoft Office including Outlook, Excel, Word, etc with Visual Basic for Applications (VBA). A lot of time you may only be able to find VBA examples. VBA's require template files to be sent to the desktop and are a real hassle when trying to automate across multiple machines. -There are not many A to B examples of translating VBA to PowerShell so I took a problem I had solved in the past and presented the before and after. Hopefully it will provide enough information to allow others to convert VBA code into PowerShell for their scenarios. -You can check out the full article on [PowerShellBlogger.com][1]. - - - - [1]: http://wp.me/p7al1Q-5f diff --git a/content/articles/2016-02-18-last-chance-for-powershellsummit-org-registration.md b/content/articles/2016-02-18-last-chance-for-powershellsummit-org-registration.md deleted file mode 100644 index 76b13f82f..000000000 --- a/content/articles/2016-02-18-last-chance-for-powershellsummit-org-registration.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Last Chance for PowerShellSummit.org Registration -authors: - - Don Jones -date: "2016-02-18T18:52:02+00:00" -categories: - - PowerShell Summit -aliases: - - /2016/02/last-chance-for-powershellsummit-org-registration/ ---- - -Here's a sort of last call: Registration ends on March 1st, 2016, giving you just about ten days from today (Feb 18th). Additionally, we've got just around 24 seats remaining. About 5 of those are available as 3-day seats, and about 19 as 4-day seats. We'll try and slide that availability around so you're not forced into one or the other, but this is basically last call for attendees either way. Hope we'll see you there! diff --git a/content/articles/2016-02-19-im-not-a-developer.md b/content/articles/2016-02-19-im-not-a-developer.md deleted file mode 100644 index 26cd1a822..000000000 --- a/content/articles/2016-02-19-im-not-a-developer.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: "I'm Not A Developer" -authors: - - pscookiemonster -date: "2016-02-19T12:57:33+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/02/im-not-a-developer/ ---- - -Are you intimidated by scripting? Does PowerShell seem too much like programming to you? You aren't a developer, why should you learn this mumbo jumbo? -It turns out, PowerShell is quite easy to get started with. Can you run ipconfig? Do you know how to give someone instructions? You could probably pick up the PowerShell basics in a month of lunches or so. -Don't believe me? [I spent a few minutes to compare a simple task in four languages](http://ramblingcookiemonster.github.io/PowerShell-Is-Too-Hard/). PowerShell is a single, easy to understand command. Python is two lines and starts to include some syntax like .(). -We won't even look at the C example here, but check out this C# code that simply reads and prints out the content of a file: - - -`// Modified with suggestions from Anton. -// Better ways to do this, but, I'm not a developer ; ) -using System; -using System.IO; -class ReadFromFile -{ - static void Main() - { - foreach(string s in File.ReadAllLines(@"C:\file.txt")) - { - Console.WriteLine(s); - } - } -} -`You can get a feel for what's going on, and there are many ways to skin a cat, but let's compare this to PowerShell: - - -`Get-Content C:\file.txt -`This was one example among many. Read or write a CSV, execute a SQL query, create a VM, kick off an AzureRM template, modify an AD user, the list goes on. All of these are individual PowerShell commands, that handle a whole bunch of code behind the scenes, giving you simple, task-based commands. -This lets you worry about the actual problem you are trying to solve, not the nitty gritty programming details. Have you ever had to write your own [sorting code](http://www.sorting-algorithms.com/), rather than just using  - - -`Sort-Object -`? -Come join the fun, you'll save yourself time and effort, and help out your team and organization in the process. Learn PowerShell. -Cheers! diff --git a/content/articles/2016-02-25-a-study-in-powershell-scripting-a-beginners-guide-part-i.md b/content/articles/2016-02-25-a-study-in-powershell-scripting-a-beginners-guide-part-i.md deleted file mode 100644 index 14adfc3ea..000000000 --- a/content/articles/2016-02-25-a-study-in-powershell-scripting-a-beginners-guide-part-i.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: A study in Powershell Scripting – A beginners Guide Part I -authors: - - WeiYen Tan -date: "2016-02-25T11:27:42+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/02/a-study-in-powershell-scripting-a-beginners-guide-part-i/ ---- - -I thought I would post my learning experiences as a person that has very little programming background. Don did say in one of the TechEd's a few  years ago that even a beginner could share their experiences with others. So I thought that I should contribute with the approach that I use to write my scripts so that other people starting to begin their Powershell adventure could benefit. -The scenario in this case is to do with three Active Directory security groups and synchronizing with a master Active Directory security group. -Link to blog post [here][1]. - - [1]: http://weiyentanitjournal.com/index.php/2016/01/31/a-study-in-learning-powershell-part-1/ diff --git a/content/articles/2016-02-26-a-study-in-powershell-scripting-part-2.md b/content/articles/2016-02-26-a-study-in-powershell-scripting-part-2.md deleted file mode 100644 index 98e10d16c..000000000 --- a/content/articles/2016-02-26-a-study-in-powershell-scripting-part-2.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: A study in Powershell scripting – A beginners guide Part 2 -authors: - - WeiYen Tan -date: "2016-02-26T21:54:50+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/02/a-study-in-powershell-scripting-part-2/ ---- - -In this post I elaborate the steps that I went through to build the function to extract users into alphabetical order. I talk about the problems I face and how I resolved them. -I also post snippets of my code that I used so that new people can see how I wrote it. -I'm hoping that this help the new people that are out there. -Biggest tip in the post is what the secret sauce is on how to pass results from one cmdlet to another. As always always pleased to know people's thoughts. -Link [here][1]. - - [1]: http://weiyentanitjournal.com/index.php/2016/02/26/a-study-in-learning-powershell-part-2/ diff --git a/content/articles/2016-03-01-powershellsummit-org-registration-status-extension.md b/content/articles/2016-03-01-powershellsummit-org-registration-status-extension.md deleted file mode 100644 index 23ded8b09..000000000 --- a/content/articles/2016-03-01-powershellsummit-org-registration-status-extension.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: PowerShellSummit.org Registration Status & Extension -authors: - - Don Jones -date: "2016-03-01T21:09:19+00:00" -categories: - - PowerShell Summit -aliases: - - /2016/03/powershellsummit-org-registration-status-extension/ ---- - -So, we have 3 seats left, which isn't much - and we contacted our venue, and they said they they'd let us bring in those people more last-minute (in terms of us setting food and space requirements), but there's a small uncharge of $100 per person. So those last three seats are on sale at PowerShellSummit.org, through the morning of March 11th, and the new pricing should go into effect sometime tonight. In the meantime, if you happen to show up and the lower price is still there, go for it. But... only three seats. Good luck! diff --git a/content/articles/2016-03-02-official-powershell-devops-global-summit-2016-agenda-now-available.md b/content/articles/2016-03-02-official-powershell-devops-global-summit-2016-agenda-now-available.md deleted file mode 100644 index 96b750fc3..000000000 --- a/content/articles/2016-03-02-official-powershell-devops-global-summit-2016-agenda-now-available.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Official PowerShell + DevOps Global Summit 2016 Agenda Now Available -authors: - - Don Jones -date: "2016-03-02T22:17:48+00:00" -categories: - - PowerShell Summit -aliases: - - /2016/03/official-powershell-devops-global-summit-2016-agenda-now-available/ ---- - -The agenda is available on the [official event page][1]! Please note that this is subject to change, but we'll update that same copy so you can just refer to it. We'll have handouts on site, but we recommend having an **offline copy** of the PDF, or your own printout, as a backup. It's worth reviewing this in advance, so you can start planning your own personal agenda. Don't forget that the registration site (https://eventloom.com/event/home/PSNA16) allows you to set your own personal agenda (after logging in), and provides a mobile-friendly view at the event. - - [1]: https://powershell.org/summit/ diff --git a/content/articles/2016-03-03-microsoft-automation-platforms-twin-cities-march-meeting.md b/content/articles/2016-03-03-microsoft-automation-platforms-twin-cities-march-meeting.md deleted file mode 100644 index 3222be3a0..000000000 --- a/content/articles/2016-03-03-microsoft-automation-platforms-twin-cities-march-meeting.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Microsoft automation platforms – Twin Cities March meeting -authors: - - Tim Curwick -date: "2016-03-03T13:02:50+00:00" -aliases: - - /2016/03/microsoft-automation-platforms-twin-cities-march-meeting/ ---- - -[Twin Cities PowerShell Automation Group][1] meeting Tuesday, March 8, 2016, at the [Microsoft Technology Center][2] in Edina, MN. -Come and learn about the road map for Microsoft’s automation platforms, System Center Orchestrator, Service Management Automation and Azure Automation. Ryan Andorfer will cover the road map for these three products and then dive into how to utilize Azure Automation in the cloud and on premises for both process and configuration automation in an enterprise setting, including strategies around code management, PowerShell Module development and PowerShell DSC management. -Ryan ran the IT-Automation team for General Mills for 6 years, was a Cloud and Datacenter MVP for 3 years and is now a Microsoft Technology Solutions Professional. -This is a secure facility. **[RSVP][3] with full name is required.** If you do not use your full name on meetup, please email us your full name. [Please RSVP at][3] -Food and networking starts at 4:30. The presentations will start at 5 PM. We'll keeping talking until 7 PM. - - [1]: http://www.meetup.com/Twin-Cities-PowerShell-User-Group/ - [2]: https://maps.google.com/maps?f=q&hl=en&q=3601+76th+St+W%3B+Suite+600%2C+Edina%2C+MN%2C+us - [3]: http://www.meetup.com/Twin-Cities-PowerShell-User-Group/events/229312191/ diff --git a/content/articles/2016-03-05-2016-march-scripting-games-puzzle.md b/content/articles/2016-03-05-2016-march-scripting-games-puzzle.md deleted file mode 100644 index a431ad2e1..000000000 --- a/content/articles/2016-03-05-2016-march-scripting-games-puzzle.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: 2016-March Scripting Games Puzzle -authors: - - Don Jones -date: "2016-03-05T14:55:49+00:00" -categories: - - Scripting Games -aliases: - - /2016/03/2016-march-scripting-games-puzzle/ ---- - -Our March 2016 puzzle comes from Carlo Mancini. We're actively interested in receiving Scripting Games puzzles from members of the community - submit yours, along with an official solution, to us at admin@ via email! - - -## **Instructions** - -The Scripting Games are a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month's puzzle. You can find them all at https://powershell.org/category/announcements/scripting-games/. Many puzzles will include optional challenges, that you can use to really push your skills. -**To participate**, add your solution to a public Gist (http://gist.github.com; you'll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the Gist URL from your browser window and paste it, by itself, as a comment of this post.  -**Only post one entry per person. **However, remember that you can always go back and edit your Gist. We'll always pull the most recent one when we display it, so there's no need to post multiple entries if you want to make an edit. Just edit the original Gist and we'll see your changes shortly. - -Don't forget the [main rules and purpose of these monthly puzzles][1], including the fact that you won't receive individual scoring or commentary on your entry. -**User groups are encouraged to work together** on the monthly puzzles. User group leaders should submit their group's best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most "favorite" entries of the year will win a grand prize from PowerShell.org. - -## **Our Puzzle** - -Our Puzzle this month comes in a "Beginner" and "Advanced" variety. Indicate in a code comment which one you're shooting for. And, you're welcome to submit one entry apiece for Beginner and Advanced, if you like. These are a bit tricky - be sure to read carefully! -There's a ZIP file with some sample filenames to help you practice and test your solution - this is applicable to both versions of the puzzle: -[FileShare](https://powershell.org/wp-content/uploads/2016/03/FileShare.zip) - -### Diacritics: The Beginner Version - -You are a server administrator for an international company with four branch back-offices in Western Europe (France, Norway, Italy and Germany). People at these sites store their files (invoices, receipts, customer complaints, as well as internal documents) on a central file server located in the United States. -Since these back-office people have keyboards with a different layout from English QWERTY, they are able to save files with diacritical marks in their names on your central file server. -It seems that your corporate backup routine has problems with these files and your backup tools hangs. -Your boss has tasked you with finding precisely what kind of filenames interfere with the backup routine. After some time spent investigating the Unicode standard, you discover that this is a common problem in these European countries, and you find out that the culprits are, the ß used in German, the å, æ, ø used in Nordic languages, the é, é, ì and ò used in Italian, the ç used in French and, in general, all letters which are part of the Latin-1 Supplement character block. -Unhappy with the situation, your boss has asked you to run a script against your file server to identify all the files whose names have letters (not symbols nor numbers) in that character block and return the following information: -•                The name of the file -•                The containing folder -•                The time of creation -•                The date of the last modification -•                The size of the file -An acceptable output for this task is shown in the following image. -![image001](https://powershell.org/wp-content/uploads/2016/02/image001.png) -Design Points -·       Do not return files with other Latin symbols or numbers (like ©, ¼, ½, ÷) in their names. -·       Assume that the appropriate ports are opened on your file server. -·       Assume that Powershell Remoting is enabled on your file server. -·       Use the simplest command that will work and feel free to write a one-liner if you able to. -·       Display the output to the screen; you do not need to write to a text file. - -### **Diacritics: The Advanced Version** - -Thanks to your reputation of Powershell guru, you have been hired by a fast growing international company with four branch back-offices in Western Europe (France, Norway, Italy and Germany). People at these sites store their files (invoices, receipts, customer complaints, as well as internal documents) on a central file server located in the United States. -Since these back-office people have keyboards with a different layout from English QWERTY, they are able to save files with diacritical marks in their names on your central file server. -It seems that your corporate backup routine has problems with these files and your backup tools hangs. -Your boss has tasked you with finding what kind of filenames interfere with the backup routine. After some time spent investigating the Unicode standard, you discover that this is a common problem in these European countries, and you find out that the culprits are, the ß used in German, the å, æ, ø used in Nordic languages, the é, é, ì and ò used in Italian, the ç used in French and, in general, all letters which are part of the Latin-1 Supplement character block. -Unhappy with that situation, and confident with your Powershell skills, your boss has asked you to setup a scheduled task that runs every Saturday night on your central file server which call a function that extracts a list of all the filenames which have letters (not symbols nor numbers) in that character block and send them to him by e-mail. -The e-mail must include the following information: -•                The name of the file -•                The containing folder -•                The time of creation -•                The date of the last modification -•                The size of the file -The e-mail should be sent every two weeks on Saturday 11PM. -An acceptable output for this task is shown in the following images. -![image001](https://powershell.org/wp-content/uploads/2016/02/image001-1.png) - -![image002](https://powershell.org/wp-content/uploads/2016/02/image002.png) - -![image003](https://powershell.org/wp-content/uploads/2016/02/image003.png) -Design Points - - * Your boss says you should provide two scripts: - * One which leverages Powershell Remoting to create the Scheduled task on the file server with the appropriate job trigger. Your boss challenges you to this to be a one-liner. - * One that contains the Get-Diacritic function that identifies the filenames with diacritic marks and e-mails the report. - * The function Get-Diacritic must generate a CSV file containing the mentioned information. The CSV file should by default be named yyyyMMdd_FileNamesWithDiacritics.csv (where yyyyMMdd represents the current year, month and day) and be stored in the system temp folder. - * No CSV report must be generated if the count of filenames with diacritic marks is null. - * The size of the retrieved files should be presented in a readable format followed by the most appropriate unit (i.e. 1.2MB, or 500Kb). - * You can assume that you have the required permissions to remotely access the File Server. - * Appropriate parameter validation and error handling must be put in place. - -### **About the author of this scenario:** - -Carlo Mancini has been working as a system administrator for over 15 years and on PowerShell since its first release in 2007. -He is one of the winners of the 2013 PowerShell Scripting Games and is currently employed by one of the largest European IT companies where he is in charge of maintaining and administering both the physical and virtual architecture. -Carlo is also a technical speaker of renown at conferences around Europe and was awarded with the Microsoft MVP Award for Powershell in 2013 and 2014. -He is involved on many technical forums as well as on his blog, [happysysadm.com][2]. - - [1]: https://powershell.org/?p=2574 - [2]: http://happysysadm.com diff --git a/content/articles/2016-03-07-calling-all-scripting-games-puzzles.md b/content/articles/2016-03-07-calling-all-scripting-games-puzzles.md deleted file mode 100644 index 7a99526fe..000000000 --- a/content/articles/2016-03-07-calling-all-scripting-games-puzzles.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Calling all Scripting Games Puzzles! -authors: - - Don Jones -date: "2016-03-07T22:25:25+00:00" -categories: - - Scripting Games -aliases: - - /2016/03/calling-all-scripting-games-puzzles/ ---- - -Have you been enjoying our monthly Scripting Games puzzles? Want to keep them going? -Then it's time to **jump in and contribute!** PowerShell.org is a community site, which means it only works when community makes it work! So come up with your Scripting Games puzzles (you've [seen the different kinds][1] we've done)! Your submission should include: - - * The puzzle itself. This can include a narrative, example output you want people to achieve, etc. - * The solution (in code form, and it's fine if you put this on GitHub or in a Gist too), along with a narrative of how and why the solution achieves the goal(s). - -Ideally, we'd love it if you could also review some of the entries for your puzzle and provide some commentary on ones that you found noteworthy. -Submit your puzzle to Dan Iverson, our newly minted GamesMaster, via email to gamesmaster@ (and you should be able to figure out our domain name, as you're on our site, right?). We're looking for an April puzzle and beyond! For months where we have no entry, we'll post a "taking a break" at the top of the month, just so you know. -Don't let us down! Personally, I'd love for this to become enough of a thing that we can start awarding not only top entrants (I _have_ been tracking entries each month), but top _puzzle authors_ - and maybe invite them to a PowerShell Summit where we'll do a live Scripting Games event one evening! But it only happens if _**you**_ help make it happen! - - [1]: https://powershell.org/category/announcements/scripting-games/ diff --git a/content/articles/2016-04-02-2016-march-scripting-games-wrap-up.md b/content/articles/2016-04-02-2016-march-scripting-games-wrap-up.md deleted file mode 100644 index 805f2c607..000000000 --- a/content/articles/2016-04-02-2016-march-scripting-games-wrap-up.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: 2016-March Scripting Games Wrap-Up -authors: - - Don Jones -date: "2016-04-02T15:04:22+00:00" -categories: - - Scripting Games -aliases: - - /2016/04/2016-march-scripting-games-wrap-up/ ---- - -Carlo really put a brain-twister out for our [March 2016 Puzzle][1]. Also, as a note, we're eagerly awaiting submissions of next month's puzzle, so don't delay in handing that in. [Here's how you can contribute to the community's favorite scripting game][2]. - -## Official Solution - -It's probably easiest just to share his solutions as actual script files, so here's both the Beginner and Advanced versions that he provided, as a ZIP: -[Solutions](https://powershell.org/wp-content/uploads/2016/02/Solutions.zip) -Carlo also provided some notes on his thinking: -Just a precision concerning the regex: the idea I had was to 'force' competitors to think in terms of Unicode categories and block ranges (unknown concept to most I bet). -Without digging, some people could come up with an expression like this, which is NOT what we want: - - -`[char]$_ -match '[^\x20-\x7E]' -`My idea is to force inclusion of latin chars (hence {IsLatin-1Supplement}) which are letters {L}, then progressively exclude all numbers {N}, all punctuation characters {P}, all symbols {S} and all separators {Z}. -A proper use of the \p (in lowercase) and \P (in uppercase) constructs to force inclusion and exclusion is essential here: - - -`[char]$_ -match "(?=\p{IsLatin-1Supplement})(?=\p{L})(?=\P{N})(?=\P{P})(?=\P{S})(?=\P{Z})") -`Did you follow his thinking? How's you do? - - [1]: https://powershell.org/2016/03/05/2016-march-scripting-games-puzzle/ - [2]: https://powershell.org/2016/02/06/2016-february-scripting-games-puzzle/ diff --git a/content/articles/2016-04-13-powershell-devops-global-summit-videos-online.md b/content/articles/2016-04-13-powershell-devops-global-summit-videos-online.md deleted file mode 100644 index b3bd5f18b..000000000 --- a/content/articles/2016-04-13-powershell-devops-global-summit-videos-online.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: PowerShell + DevOps Global Summit Videos Online -authors: - - Don Jones -date: "2016-04-13T22:04:24+00:00" -categories: - - PowerShell Summit -aliases: - - /2016/04/powershell-devops-global-summit-videos-online/ ---- - -The session recordings are [now online][1]! We did miss a few of the videos. The few 2-hour sessions scheduled in Room 406 were not recorded (and weren't planned to be; we only have two sets of recording equipment, although for 2017 we're adding a third set). And, we had a couple that had video problems on-site and weren't recordable. We hope you'll appreciate that our priority on-site is to provide a great experience for the people who were there, and stopping everything to make sure we get a recording isn't always practical. As always, recordings are on a best-effort basis. As far as we know, we missed one of Matt Graeber's sessions, Lee Holmes' session, and the Microsoft general session from Kenneth Hansen and Angel Cavelo. -A new experiment this year should come online by July 2016. Pluralsight showed up with two film crews, and captured live HD video, and audio right from the speakers' mic, in rooms 404 and 405, which were our main session rooms. Those recordings, which will combine the live video with our screen captures, will be available in the Pluralsight library for all Pluralsight subscribers. Registered attendees of the event will receive free access to those as well, by means of a "slice" of the Pluralsight library. -Note that last-minute registration transferees will _not_ be automatically included in that, as we'll be sending the library information to the originally registered person. In addition, for attendees who did not provide complete contact information (like, if someone else registered you), the notification will go to the contact information we _do_ have. We don't have the ability to update that list at this point, sorry. - - [1]: https://www.youtube.com/playlist?list=PLfeA8kIs7Coc1Jn5hC4e_XgbFUaS5jY2i diff --git a/content/articles/2016-04-15-the-unicode-powershell-module.md b/content/articles/2016-04-15-the-unicode-powershell-module.md deleted file mode 100644 index a5fa97bb6..000000000 --- a/content/articles/2016-04-15-the-unicode-powershell-module.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: The Unicode PowerShell module -authors: - - Carlo Mancini -date: "2016-04-15T11:25:19+00:00" -categories: - - PowerShell for Developers - - Tools -aliases: - - /2016/04/the-unicode-powershell-module/ ---- - -After authoring last month scripting games puzzle, which involved some scripting around the Unicode standard, I decided to have some fun and write a **PowerShell module** which interacts directly with the online **Unicode Database** (UCD) to retrieve the main properties of characters. -![poshunicode](https://powershell.org/wp-content/uploads/2016/04/poshunicode-628x453.png) - - - - - - - - - - -Using this module you will be able to retrieve the following information for a single char or for every char in a given string: -- Glyph name -- General category -- Unicode script -- Unicode block -- Unicode version (or age) -- Decimal value -- Hex value -Here's a few sample outputs you can get from using the functions in the UnicodeInfo module: - - -`Get-Unicodeinfo '$' - Glyph : $ - Decimal value : 36 - Hexadecimal value : U+0024 - General Category : CurrencySymbol - Unicode name : DOLLAR SIGN - Unicode script : Common - Unicode block : BasicLatin - Unicode version : 1.1`Get-Unicodeinfo 'Powershell!' | Format-Table -Glyph Decimal value Hexadecimal value General Category Unicode name Unicode script Unicode block Unicode - version - ----- ------------- ----------------- ---------------- ------------ -------------- ------------- ---------- - P 80 U+0050 UppercaseLetter LATIN CAPITAL LETTER P Latin BasicLatin 1.1 - o 111 U+006F LowercaseLetter LATIN SMALL LETTER O Latin BasicLatin 1.1 - w 119 U+0077 LowercaseLetter LATIN SMALL LETTER W Latin BasicLatin 1.1 - e 101 U+0065 LowercaseLetter LATIN SMALL LETTER E Latin BasicLatin 1.1 - r 114 U+0072 LowercaseLetter LATIN SMALL LETTER R Latin BasicLatin 1.1 - s 115 U+0073 LowercaseLetter LATIN SMALL LETTER S Latin BasicLatin 1.1 - h 104 U+0068 LowercaseLetter LATIN SMALL LETTER H Latin BasicLatin 1.1 - e 101 U+0065 LowercaseLetter LATIN SMALL LETTER E Latin BasicLatin 1.1 - l 108 U+006C LowercaseLetter LATIN SMALL LETTER L Latin BasicLatin 1.1 - l 108 U+006C LowercaseLetter LATIN SMALL LETTER L Latin BasicLatin 1.1 - ! 33 U+0021 OtherPunctuation EXCLAMATION MARK Common BasicLatin 1.1`160..170 | % { - Get-Unicodeinfo ([char]$_) } | - Where 'General Category' -eq "CurrencySymbol" | - Format-Table -Glyph Decimal value Hexadecimal value General Category Unicode name Unicode script Unicode block Unicode version - ----- ------------- ----------------- ---------------- ------------ -------------- ------------- --------------- -¢ 162 U+00A2 CurrencySymbol CENT SIGN Common Latin-1Supplement 1.1 -£ 163 U+00A3 CurrencySymbol POUND SIGN Common Latin-1Supplement 1.1 -¤ 164 U+00A4 CurrencySymbol CURRENCY SIGN Common Latin-1Supplement 1.1 -¥ 165 U+00A5 CurrencySymbol YEN SIGN Common Latin-1Supplement 1.1 -`Before you dive into the code, head over to the blog post I wrote describing each and every one of these properties, how some of them are accessible directly from the .NET framework, and how other less known but still relevant can be extracted from the UCD and integrated to the resulting object: -[http://www.happysysadm.com/2016/04/working-with-unicode-scripts-blocks-and.html](http://www.happysysadm.com/2016/04/working-with-unicode-scripts-blocks-and.html) -The UnicodeInfo module is available on Github: -[https://github.com/happysysadm/UnicodeInfo](https://github.com/happysysadm/UnicodeInfo) -The module is for sure 'Work-In-Progress' so if you find yourself willing to collaborate, you are very welcome to do so! diff --git a/content/articles/2016-04-18-a-study-in-powershell-scripting-a-beginners-guide-part-3.md b/content/articles/2016-04-18-a-study-in-powershell-scripting-a-beginners-guide-part-3.md deleted file mode 100644 index 7dd4971e3..000000000 --- a/content/articles/2016-04-18-a-study-in-powershell-scripting-a-beginners-guide-part-3.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: A study in Powershell scripting – A beginners guide Part 3 -authors: - - WeiYen Tan -date: "2016-04-18T12:28:02+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/04/a-study-in-powershell-scripting-a-beginners-guide-part-3/ ---- - -Here is the long awaited post of my third installment of where I revisit my script and provide some explanation as to why I did the things I did in regards to synchronizing Active directory groups. -As always feedback is welcome. -Link is [here][1] - - [1]: http://weiyentanitjournal.com/index.php/2016/04/18/a-study-in-powershell-scripting-part-3/ diff --git a/content/articles/2016-04-20-help-get-the-word-out-on-the-getgoing-program-scholarship.md b/content/articles/2016-04-20-help-get-the-word-out-on-the-getgoing-program-scholarship.md deleted file mode 100644 index edec04a27..000000000 --- a/content/articles/2016-04-20-help-get-the-word-out-on-the-getgoing-program-scholarship.md +++ /dev/null @@ -1,206 +0,0 @@ ---- -title: "Help Get the Word Out on the 'GetGoing' Program & Scholarship" -authors: - - Will Anderson -date: "2016-04-20T16:00:44+00:00" -categories: - - DevOps - - News -aliases: - - /2016/04/help-get-the-word-out-on-the-getgoing-program-scholarship/ ---- - -![PowerShellPodcast](https://powershell.org/wp-content/uploads/2015/12/PowerShellPodcast.png)A couple of weeks ago, DevOps Collective (PowerShell.org's parent non-profit organization) [announced the availability](https://devopscollective.org/2016/04/04/announcing-the-getgoing-it-ops-education-program-scholarship/) of the 'GetGoing' IT Ops Education Program and Scholarship. -For those of you who may not have yet heard, DevOps Collective and Pluralsight have partnered together to create a modern 'turnkey' curriculum that brings together mapped courses, recommended hands-on experiences, and live mentoring to prepare people for the real-world of IT Operations.  With this initiative, they've offered up to full-ride scholarships for 2016.  Applications for the scholarship have opened, and applications will be taken in until May 15th. -Now that the way has been paved, it's our turn as members of the community to get the word out; and doing so might be easier than you think! -_**Contact Your Local School Districts**_ -I recently reached out to my hometown public school district, and was immediately met with enthusiasm from the local superintendent and their Science, Guidance, and Counseling departments.  It only takes a quick email with some bullet points on the program to get the conversation initiated.  I've included the text of my initial correspondence for you to use as a guide to help you on your way. -Contacting your school district is -*easy* -.  A quick search online for your district can get your to their website with contact info, often including the email addresses for the district superintendent and other office officials that can help!  Send them a [copy of the brochure](https://devopscollective.files.wordpress.com/2016/04/getgoing-program-guide.pdf) to help them get informed of the initiative. -_**Use Your Social Media Skills**_ -Get the conversation going on social media!  Talk to your followers; speak out to local educational organizations; and make them aware of this awesome new program! -_**Inform Your User Groups**_ -Get your user groups in on the action.  Enlist the greater community to get the word out faster!  Together we can canvas an even larger area and get more people interested! -_**Get Involved**_ -Offer to become a mentor.  We all know that the best way to learn is from real world experiences.  We, as a community, have this vast repository of practical knowledge that no book can effectively provide.  We, as a collective resource, can help to bring a new generation of administrators, engineers, and architects into this world already prepared to take on DevOps, Agile IT, and more! -If you need a hand getting started, feel free to contact me at **webmaster at powershell.org**.  Now let's _**#GetGoing**_ ourselves, and make this happen! -Here's my initial contact email that you can use to fit your own story: -_Greetings [Contact Name],_ - - - *I hope this email finds you well.* - - - - - - - - - - *My name is [Your Name Here].  I'm a native to [City], IT Consultant, and an industry/community leader in Cloud and Datacenter Management.  I teach PowerShell for free to people in the community that have an interest in the technology at user groups in [location[s]].* - - - - - - - - - - - *I also do volunteer work for the DevOps Collective; a 501(c)(3) organization that is dedicated to creating conversations, improving connections between practitioners, and further develop the DevOps state of the art.* - - - - - - - - - - - *Recently, DevOps Collective announced the new “GetGoing” IT Ops Education Program & Scholarship.  More on the program can be [researched here](https://devopscollective.org/2016/04/04/announcing-the-getgoing-it-ops-education-program-scholarship/), but I thought I'd offer some of the bullet points on the major educational objectives that form the basis of the program:* - - - - - - - - - - - - - - - *Core understanding of business IT environments, including the various components that commonly form the business technology infrastructure.* - - - - - *Basic networking essentials, including client configuration and troubleshooting.* - - - - - *Essentials of business technology security.* - - - - - *Essentials for technology troubleshooting, including methodologies and patterns.* - - - - - *Essentials of virtualization technologies.* - - - - - *Help desk essential skills, including Microsoft Office basics, customer interaction, ticketing systems, and process-following.* - - - - - *Desktop support essentials.* - - - - - *Server support essentials.* - - - - - *Windows client operating system fundamentals, including client and server administration fundamentals.* - - - - - *Windows PowerShell fundamentals, including the use of PowerShell for core help desk tasks.* - - - - - *Fundamentals of Microsoft-based databases, collaboration, and messaging technologies.* - - - - - - - - - - - - - - - *Finally, DevOps Collective has partnered with Pluralsight to offer two full-ride scholarships.  One is a general availability scholarship, and the second is a diversity scholarship being offered to groups that underrepresented in IT in the United States.  The scholarship has a total value of approximately $11,000 dollars and includes:* - - - - - - - - - - - - - - - - - *Full access to a Pluralsight turnkey curriculum, giving you all the education the model curriculum specifies.* - - - - - *A paid mentor, who will check-in weekly with each student.* - - - - - *Paid-for hands-on experiences, including Azure time, predesigned hands-on labs, and even a build-it-yourself kit PC that students get to keep.* - - - - - *Practice tests, knowledge checks, and other supplemental materials.* - - - - - *Paid-for certification exams – students only pay if they need to re-take a test.* - - - - - - - - - - - - - - - - - *As a leader in the IT community with strong ties the -[city] -, I feel that this is an important conversation that we need to have for the children of the city.  I grew up [your story].  I have enjoyed much success in my career in Information Technology, and I would love to see today's [school district] students empowered to become tomorrow's technology successes.* - - - - - - - - - - - *Please feel free to contact me if you have any questions.* - - - - - - - - - - - *Best Regards,* diff --git a/content/articles/2016-04-20-keeping-it-simple-line-breaks-in-powershell.md b/content/articles/2016-04-20-keeping-it-simple-line-breaks-in-powershell.md deleted file mode 100644 index f10e3d126..000000000 --- a/content/articles/2016-04-20-keeping-it-simple-line-breaks-in-powershell.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Keeping it simple – Line breaks in PowerShell -authors: - - Jacob Moran -date: "2016-04-20T23:18:07+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/04/keeping-it-simple-line-breaks-in-powershell/ ---- - -Trying to get your code to look good when reading it later can be tricky -For line breaks in function scripts, there are two out-of-the-box options: -First, you can break a line _after the pipe key_, which is an elegant and easy-to-read approach. -Second, you can arbitrarily break a line with a _back tick_ mark, which you will find left of the number 1 on a standard US keyboard. -**It looks like this: ` ** -But did you know that the back tick is a hack? -The back tick ` means, “literally interpret the next character,” or also said, escape the following character.” -For example, you might want to literally reference a quotation mark “ in a path name, but because it’s inside “” for strings, you need to literally interpret it: “`”PATH`”” – it’s hard to see, but squint. -But here’s another takeaway: if you use the back tick to create a line break, make sure there’s no space after it; otherwise, the space – not the carriage return – will be the escaped, literal character! -So here's are some examples of what works and what doesn't: -First, no line breaks - works like a charm, but if we add a few more pipes and parameters this could get ugly. - - - [![](https://1.bp.blogspot.com/-YhA2DFvuvJ0/VxgKrXR9-iI/AAAAAAAACpI/mxnNdjgJHnsJdBm5CJcDIlH0MZFU14SPgCLcB/s640/psbreaks1.jpg)](https://1.bp.blogspot.com/-YhA2DFvuvJ0/VxgKrXR9-iI/AAAAAAAACpI/mxnNdjgJHnsJdBm5CJcDIlH0MZFU14SPgCLcB/s1600/psbreaks1.jpg) - - -Next we have an example with a line break after the pipe, also functioning normally - - - [![](https://4.bp.blogspot.com/--yAWo97K86g/VxgKrQ1vGQI/AAAAAAAACpA/rU1Ufre9k5kIX0uHOGromWmrHM9lvBWlACLcB/s640/psbreaks2.jpg)](https://4.bp.blogspot.com/--yAWo97K86g/VxgKrQ1vGQI/AAAAAAAACpA/rU1Ufre9k5kIX0uHOGromWmrHM9lvBWlACLcB/s1600/psbreaks2.jpg) - - - Here we see the line break before the pipe, and the script fails - - - [![](https://3.bp.blogspot.com/-Ws06dXUMVcY/VxgKrQbqwMI/AAAAAAAACpE/Gv7ug-qwjeA8HyxfnK7jV0S7DI0zO6nPACLcB/s640/psbreaks3.jpg)](https://3.bp.blogspot.com/-Ws06dXUMVcY/VxgKrQbqwMI/AAAAAAAACpE/Gv7ug-qwjeA8HyxfnK7jV0S7DI0zO6nPACLcB/s1600/psbreaks3.jpg) - - - In this sample we use the tick immediately followed by a return. If we wanted to we could insert these ticks numerous times, before each parameter, for example - - -  [![](https://4.bp.blogspot.com/-E0dteWkhckg/VxgKr6uTTWI/AAAAAAAACpM/p_Qm4KDNuuoivzH61YGi5ul04sno3bGUwCLcB/s640/psbreaks4.jpg)](https://4.bp.blogspot.com/-E0dteWkhckg/VxgKr6uTTWI/AAAAAAAACpM/p_Qm4KDNuuoivzH61YGi5ul04sno3bGUwCLcB/s1600/psbreaks4.jpg) - - - Finally we see the effect of using the back tick AND A SPACE before the carriage return - this one is tricky to find when troubleshooting, so don't let it happen to you! - - - [![](https://2.bp.blogspot.com/-VifS3zKujEs/VxgKrwPG4FI/AAAAAAAACpQ/Ytct-gqOnJUbigd84aSFoV-xB--6h2OTwCLcB/s640/psbreaks5.jpg)](https://2.bp.blogspot.com/-VifS3zKujEs/VxgKrwPG4FI/AAAAAAAACpQ/Ytct-gqOnJUbigd84aSFoV-xB--6h2OTwCLcB/s1600/psbreaks5.jpg) - - -A special thanks to Sarah Wischmeyer for the introductory comments on this one! -Keep your scripts snappy! -[![](https://4.bp.blogspot.com/-VLGIBDlOUUk/UzrUDRXA08I/AAAAAAAABCI/y25G69eJcXExhjHjBEa4OZvklXQdv5GuACKgB/s1600/MBLogo4.png)](http://majorbacon.blogspot.com/) diff --git a/content/articles/2016-04-22-verified-effective-exam-results.md b/content/articles/2016-04-22-verified-effective-exam-results.md deleted file mode 100644 index 256babd8e..000000000 --- a/content/articles/2016-04-22-verified-effective-exam-results.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Verified Effective Exam Results -authors: - - Don Jones -date: "2016-04-22T16:14:26+00:00" -categories: - - PowerShell Summit -aliases: - - /2016/04/verified-effective-exam-results/ ---- - -We've uploaded the results of the Verified Effective: PowerShell Toolmaker exam, which was administered at the recent PowerShell + DevOps Global Summit 2016. Note that this exam has, for a couple of years now, been available only as an on-site, in-person, proctored experience - we do not offer online delivery. -We had our best pass rate ever - about 20%. That said, nobody hit 100%. I had actually done a pre-con, full-day session on the very topic being tested - writing advanced functions - and had more than a few folks tell me that the session wasn't as "advanced" as they wanted. Notwithstanding, 80% of the people who took the test didn't pass (and I wasn't the one grading the tests, either, so it's not just spite!). Unfortunately, a lot of us _think_ we're "advanced," but in fact are missing a lot of details. In some cases, having reviewed the graded tests, folks are missing some of the basics. -If you took the test, head over to [VerifiedEffective.org][1] and enter your candidate ID to see if you passed. I want to stress that I personally don't have access to the graded tests with names attached - I only have anonymized copies. -We're not going to offer the exam again at Summit 2017. We're considering making some schedule changes that won't accommodate the time and space and personnel needed to administer the exam and - to be frank - I think _education_ would benefit a lot of people more than a test. Whether we offer the test again in future years hasn't yet been decided, although I'll share our general feelings at the end of this article. -In fact, with that "education" in mind, I'm going to break a rule. I'm going to post the entire exam packet, exactly as it was given to the attendees who took the exam. I did something similar after PowerShell Summit Europe 2015, but this is the _exact_ exam packet. Go ahead - give yourself an hour to finish the test, and then check back here. I'll wait. -[Exam](https://powershell.org/wp-content/uploads/2016/04/Exam.docx) - - - -All done? Now I'm going to break another rule and go through the exam. I'm going to point out a bunch of stuff that people got wrong, although _just because you did or did not get these things wrong does not mean you did or did not pass, _if you were one of the folks who took this at Summit. This is an amalgamation of comments. So _do not_ drop into comments all angry that you "should have passed" because you think you did perfectly based on my comments in this article. If you didn't pass, you didn't pass for at least a couple of good reasons, and no, I'm not going to ask the scoring panel to go over your exam with you personally. We don't have the tests with names on them anymore, anyway. -So. -The first thing people ran across is the fact that the function in the exam clearly has comment-based help, but when run in the transcript no help appeared. _No_ help. Not even the auto-generated help, _which should have been a clue. _The problem is the blank line between the end of the help block and the **function** keyword _[NB: Dave Wyatt points out that this was fixed in v5; it's irrelevant for the exam scoring because you were not expected to fix it anyway]_. PowerShell _(in v4, at least, which is obviously what was used to create the transcript) _chokes on this and abandons all hope. _You were not expected to fix this, _because it was like this in the transcript - and your goal was to make the function look as needed to reproduce the transcript. Some (most) folks deleted the comment block. But do me a favor - paste this function into a script, omit the comment block, and see what PowerShell does when you ask for help. Is that what's shown in the transcript? Only two left it alone, recognizing the problem for what it was. "But that's tricky!" you might say. No, it isn't - not if you know the details of how this technology works. The _technology_ may be tricky, but knowing those ins and outs is what sets you apart as an expert. However, nobody failed solely because they suggested deleting the comment block - the goal of this article is to point out what was going on, not describe the ways in which people failed or passed. -Now for the parameter block, which caused more grief than almost anything else. - - -`Param( - [Parameter(ValueFromPipelineByPropetyName=$True)] - [string[]]$ComputerName, - [ValidateSet('Cim','Wmi')] - [string]$Protocol = 'Cim' - ) -`Most everyone recognized that **ValueFromPipeline** needed to be added; very few struck **ByPropertyName**. It's fine; it doesn't hurt to have it there and nothing in the transcript suggested it was wrong. -There is no need to add **[Parameter()]** to the second parameter. However, that **[ValidateSet()]** really caused a lot of variation in the responses. The transcript clearly shows **Dcom** as one value, so **Wmi** is clearly wrong. While the transcript does not show any other value _being passed to the parameter, _it _clearly_ shows **Wsman** as the "default" value - this is in the verbose output when the command is first run. Ergo, if Wsman is the default, then it must also be part of the validation set, not Cim. This is the kind of deductive reasoning that makes you a good debugger. -Many people correctly pointed out that **[CmdletBinding()]** is missing, which is required to enable the built-in -Verbose parameter. Some folks wrote entire If() block to test for -Verbose, which _is not the right thing to do. [NB: Dave Wyatt points out that the -Verbose parameter would be implied by including [Parameter()], which is fine; I checked with the scoring panel and nobody was docked for not specifying [CmdletBinding()]. It's the If() construct that was unnecessary.]_ -Several people insisted on adding a **BEGIN{}** and **END{}** block. These are unnecessary _to reproducing the transcript. _Advanced functions work fine without them, even in pipeline input mode. - - -`if ($Protocol -eq 'Dcom') { - $opt = New-CimSessionOption -Protocol Dcom - } else { - $opt = New-CimSessionOption -Protocol Wsman - } -`Many folks made extensive changes to that section. However, _according to the transcript, _the If() block is correct. It's the ValidateSet() that was wrong. Some folks felt that **-Protocol $protocol** could have removed the need for the whole If() block. That's fine, and the opinion wasn't counted against you, but the goal was to _reproduce the transcript_, not to simply simplify the code. -Now for the main chunk. - - -`try { - $session = New-CimSession -SessionOption $opt ` - -ComputerName $Comp - $os = Get-CimInstance -CimSession $session ` - -ClassName Win32_OperatingSystem - $disk = Get-CimInstance -CimSession $session ` - -ClassName Win32_Volume ` - -Filter "Name = 'C:\\'" - $props = @{'ComputerName' = $Computername - 'OSVersion' = $os.version - 'SPVersion' = $os.ServicePackMajorVersion - 'CDiskSize' = $disk.Capacity - 'CDiskFree' = $disk.FreeSpace} - New-Object -TypeName PSObject ` - -Property $props - } catch { - Write-Error "Failed to connect to $comp" - } -`Ignoring the annoying backticks, which were there only to make this fit onto a printed sheet of paper, nearly _everyone missed the lack of **-ErrorAction** on **New-CimSession. **_Without that, the entire Try/Catch block doesn't work. That's a fairly grievous oversight. -Others added in a slew of **Write-Verbose** statements to duplicate what was in the transcript. Problem is, if you'd added **[CmdletBinding()]**, most of the verbosity in the transcript came from New-CimSession and Get-CimInstance, because running the function with -Verbose "passes down" the verbose instruction to cmdlets within the function. That's important to know as a Toolmaker. Other added **-Verbose** to the end of all the **Get-CimInstance** commands, which is clearly wrong, since those did not _always_ produce verbose output. -Many folks, by the way, caught that **Write-Error** should have been **Write-Warning. **Many also added #end comments to the construct closing brackets. Unnecessary, as there was no instruction to modify the script to conform with any particular set of practices, but it didn't count against you. Most caught the replacement of **$comp** with **$computername** in the **$props** hash table. Several insisted on saving the new object to a variable and then writing it with **Write-Output**; that's unnecessary but didn't count against them. -A couple of folks insisted on saving the new object to a variable, and then writing that variable to the pipeline _after the end of the Catch block. _If you follow the logic, you'll see the problems that will produce. It's wrong. Others pointed out that the new object variable would have to be set to $null at the end of the ForEach construct. It doesn't. Not if you're doing it right. -_Several_ folks unnecessarily asked for the order of the hash table to be different, to match the output of the transcript. Because an unordered hash table is used, PowerShell won't respect the order shown in the script, and what's in the transcript is what you actually get. Changing the order of the hash table in the code won't necessarily have any effect on the output. Again, this is an important thing to know if you're going to be expert-level in Toolmaking. -A few folks pointed out that Get-CimInstance would require a -Namespace. It doesn't, because we're querying the default namespace. Others somewhat inexplicably crossed out the **-ClassName** parameter, so I'm not sure how the script would be expected to work that way. -I want to emphasize that _I have not covered every single grade point from the exam - _only the major things that I noticed as I reviewed the already-graded packets. I reviewed those without people's names attached, too, so I can't even tell you who did what, which is as it should be. -Now, for the good news. Pass or fail, most people got the _gist_ of the thing. Some people were probably just freaked out about taking an exam, and flubbed a few bits they might ordinarily get right. A couple of people got time-pressured, and that can cause screwups. So know that, even if you didn't pass, _you were probably close. _And there's a massively legitimate position that you can't easily test this kind of skill without throwing in all kinds of off-topic stresses and complications. Fortunately, this isn't a certification exam, you're not going to lose your job if you didn't pass, and you didn't pay a dime to try (the exam was free to all attendees). And I want to emphasize that _nobody_ got it 100% right. There were, I think, 11 errors, and you needed to find 8 of them to pass. So it was easy to fall just on one side or the other of that line. -If there's a takeaway, it's that _there's always room to learn more. _If you made one of the silly mistakes, or missed -ErrorAction, it might well simply be because of the nature of this experience, not because you didn't know better. In which case - awesome. But I'm pretty sure everyone "legitimately" missed at least one important thing, or added something unnecessary in the belief that it was required - and if you can make this a learning experience, then you'll at least grow as a professional. -So, on to the future of this thing. This whole exam idea was started because Microsoft simply refuses to do a certification, and people wanted _some_ kind of measuring stick for their skills. Thing is, _any_ kind of exam (and perhaps Microsoft recognizes this?) tosses unrelated factors into the soup, and you get people failing just because of the nature of the exam. They tense up. They stress out. They overthink it. They start looking for "tricks" and second-guessing themselves. Whatever it is, the yardstick itself becomes a problem, perhaps more of a problem than what it was trying to solve. So for now, at least, we're not going to pursue this any further. I do recognize the need to measure yourself against a standard, and I recognize the value that can have in the workplace. But we're seeing that the testing process (and we've tried this in four different processes in an attempt to combat this) is artificial, and introduces too many extraneous variables to be, I think, a super-accurate standard. So for now, we don't feel our best value as an organization is to pursue this at the moment. Instead, we're going to focus on education. -Perhaps in some months the new Scripting Games can take on the role of giving you a task like this one - one with a more defined "answer." A way for you to test yourself against a standard, just for your own satisfaction and edification. As always, we're open to suggestions (especially suggestions that come with an offer to _actually implement the suggestion, _since we're not gifted with any more free time than you are) on how we can help the community better serve itself and meet its needs. -In the meantime, thanks for your support. - - [1]: http://verifiedeffective.org diff --git a/content/articles/2016-04-26-scripting-games-may-2016-ad-puzzle.md b/content/articles/2016-04-26-scripting-games-may-2016-ad-puzzle.md deleted file mode 100644 index 7a915f0a0..000000000 --- a/content/articles/2016-04-26-scripting-games-may-2016-ad-puzzle.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Scripting Games May 2016 AD Puzzle -authors: - - i255d -date: "2016-04-27T02:32:52+00:00" -categories: - - Scripting Games -aliases: - - /2016/04/scripting-games-may-2016-ad-puzzle/ ---- - -I love working in AD (Active Directory) with PowerShell. I find that I have had to really dig in to learn some of the syntax nuances that you need to understand to really mine data and change configurations within Active Directory. This puzzle reflects the kind of situation that people have to deal with in PowerShell everyday. I am interested to see what kinds of approaches each of you will take, this is a real chance to learn more of the diversity of methods that can be used in Active Directory with PowerShell. -This month Bartek Bielawski has submitted two puzzles, I am going to post the beginner to medium one first and then the advanced one next month. This is going to be a real learning opportunity. Keep the puzzles coming in, Mike F. Robbinson has submitted one recently too, so you can look forward to that in a couple of months. -Here we go: -During an internal IT audit of rights on your file server it was discovered that certain group had rights to the share used by finance and HR with sensitive data and the main question is: who was able to access these files because of that. When it happens you are attending a conference (surprise, surprise) and can’t really do anything remotely. That doesn’t stop your boss from calling you and asking for help. All she wants is a list of all users that are members of that group. The problem is that this group suffers from snow-ball effect and has multiple nested groups, that contain nested groups, that contain nested… -You respond with “use Get-ADGroupMember -Recursive” but your boss complains, that when she tried to use it, she just got some red text on her screen with information, that common delete is not recognized. You roll your eyes and eventually decide to write a short script and send it over e-mail. Luckily, you have sandbox domain controller running on your laptop, so testing your code is not that difficult. As you are in the middle of an interesting talk, you try to make it as simple and minimalistic as possible. You also decide not to try any other tools that require something to be installed on a computer running the code. One call from the boss is enough. -Design goals: -- Solution has to be quick. Don’t waste time on producing nice, informative error messages. -Your boss won’t read them anyway -- Try to use a solution that requires least testing possible -- Writing simple function could be nice, but if you manage to get it done in two lines, or even one – just do it -- You are limited to build-in functionality only. diff --git a/content/articles/2016-04-29-documenting-your-powershell-api-solved.md b/content/articles/2016-04-29-documenting-your-powershell-api-solved.md deleted file mode 100644 index 58bab69ca..000000000 --- a/content/articles/2016-04-29-documenting-your-powershell-api-solved.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Documenting your PowerShell API–solved! -authors: - - msorens -date: "2016-04-29T22:01:52+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks - - Tools - - Tutorials -aliases: - - /2016/04/documenting-your-powershell-api-solved/ ---- - -Long has it been known how to easily document your PowerShell source code simply by embedding properly formatted documentation comments right along side your code, making maintenance relatively painless... - -![Sample Doc-Comments for PowerShell source](https://powershell.org/wp-content/uploads/2016/04/ps-doc-comment-sample.png) -But if you advanced to writing your PowerShell cmdlets in C#, you have largely been on your own, either hand-crafting MAML files or using targeted MAML editors far removed from your source code. **But not anymore.** With the advent of Chris Lambrou's open-source **XmlDoc2CmdletDoc**, the world has been righted upon its axis once more: it allows instrumenting your C# source with doc-comments just like any other C# source: -![csharp doc-comment sample](https://powershell.org/wp-content/uploads/2016/04/csharp-doc-comment-sample-628x422.png) -All of the above provides fuel for Get-Help, i.e. providing help one cmdlet at a time. But we are a civilized people; we also need a web-based version of our full custom PowerShell API. That is, a hierarchical and indexed set of Get-Help pages for all the cmdlets in our module. For this task, my own open-source effort, **DocTreeGenerator**, nicely fills the gap, requiring very little beyond the doc-comments described above to do the complete job. -I have written extensively on using both XmlDoc2CmdletDoc and DocTreeGenerator, and just this week, released a one-page wallchart that shows how all the pieces work together: -![doc wallchart thumbnail](https://powershell.org/wp-content/uploads/2016/04/doc-wallchart-thumbnail-628x409.png) -Here's the link to get you started on this fun journey: -[Unified Approach to Generating Documentation for PowerShell Cmdlets][1] - - [1]: https://www.simple-talk.com/sysadmin/powershell/unified-approach-to-generating-documentation-for-powershell-cmdlets/ diff --git a/content/articles/2016-05-04-get-your-stickers.md b/content/articles/2016-05-04-get-your-stickers.md deleted file mode 100644 index 4074ea650..000000000 --- a/content/articles/2016-05-04-get-your-stickers.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: GET YOUR STICKERS!!! (AND WALLPAPERS!!!) (AND INTERNATIONAL STICKERS!!!) -authors: - - Don Jones -date: "2016-05-04T21:02:45+00:00" -categories: - - Announcements -aliases: - - /2016/05/get-your-stickers/ ---- - -[![STICKERS!](https://powershell.org/wp-content/uploads/2016/05/IMG_2867-628x471.jpg)](https://powershell.org/wp-content/uploads/2016/05/IMG_2867.jpg) -OK, we finally have a huge batch of PowerShell.org and DevOpsCollective.org laptop stickers! These are great, heavy-duty, _removable_ stickers for laptop and every day use. Here's how you can get yours - **follow these instructions carefully!** - -## United States - -First, this offer is only valid until July 1st, 2016. After that, you'll have to attend PowerShell + DevOps Global Summit, our Ignite "PowerShell Community Happy Hour" event, or someplace else where we're in-person to get a sticker. Sorry for the deadline - I'm just not in the full-time sticker distribution business. -To get your sticker, send a **business-sized Self-Addressed, Stamped Envelope** to Don Jones, 7582 Las Vegas Blvd S, Suite 503, Las Vegas NV 89123. The return envelope should include your address in both the "main" and "return address" positions. - - * For one of each sticker, just use a Forever stamp. - * If you run a user group, you may ask for 10 of each sticker. Your return envelope will need two Forever stamps. - -Please, no multiple requests, no special requests, make this easy on me ;). The number of stamps on the return envelope will tell me how many stickers to enclose; if you're requesting for a user group, please write the user group name on the back of the return envelope. If you have a giant user group, just get in touch with me first and we can try to figure something out. - - -## International - -You'll have to buy them yourself, but it's not expensive in most countries. [DevOps Collective][1] merchandise and [PowerShell.org merchandise][2] is available through RedBubble, which manufactures in numerous countries and offers inexpensive shipping to many. Note that we don't control the pricing or the manufacturing, here. These are not the cheapest (about $3 each) because they're produced on-demand, but it's an option! - - -## Wallpaper - -And if nothing else, enjoy this... (click for link to full-size version) -[![collective-org-wallpaper](https://powershell.org/wp-content/uploads/2016/05/collective-org-wallpaper-628x353.png)](https://powershell.org/wp-content/uploads/2016/05/collective-org-wallpaper.png) - - - [1]: http://www.redbubble.com/people/devopscollectiv/works/21792888-devops-collective - [2]: http://www.redbubble.com/people/devopscollectiv/works/21792909-powershell-org-logo diff --git a/content/articles/2016-05-08-mspsug-may-10th-virtual-meeting-acceptance-testing-powershell-dsc-with-test-kitchen.md b/content/articles/2016-05-08-mspsug-may-10th-virtual-meeting-acceptance-testing-powershell-dsc-with-test-kitchen.md deleted file mode 100644 index 1ba34eb99..000000000 --- a/content/articles/2016-05-08-mspsug-may-10th-virtual-meeting-acceptance-testing-powershell-dsc-with-test-kitchen.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "MSPSUG May 10th Virtual Meeting: Acceptance Testing PowerShell DSC with Test-Kitchen" -authors: - - Mike F Robbins -date: "2016-05-09T01:06:51+00:00" -aliases: - - /2016/05/mspsug-may-10th-virtual-meeting-acceptance-testing-powershell-dsc-with-test-kitchen/ ---- - -Join the Mississippi PowerShell User Group virtually on Tuesday, May 10th 2016 at 8:30pm Central Time when Microsoft MVP [Steven Murawski](https://twitter.com/StevenMurawski) will be presenting "_**Acceptance Testing Desired State Configuration with Test-Kitchen**_". -DSC is awesome, but only if the resources and configurations do what you want them to do.  How do you know? If you are relying on DSC to tell you when it didn’t do the right thing, you are in for a world of hurt.  Configuration management is the world of “trust but verify” and Test-Kitchen gives you a common framework for testing your resources and configurations and use Pester to validate that your servers end up in the state you expect. -Visit the [Mississippi PowerShell User Group](http://mspsug.com/2016/04/29/mspsug-may-2016-virtual-meeting-acceptance-testing-dsc-with-test-kitchen/) website to learn more about Steven and to find out more details about this month’s meeting. -The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info](http://mspsug.com/attendee-info/)” section. -Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this meeting. -Note: It is not necessary to live in Mississippi or join our user group to attend our meetings or present a session for our user group. -µ diff --git a/content/articles/2016-05-09-your-feedback-wanted-new-ebook-hosting-for-powershell-org.md b/content/articles/2016-05-09-your-feedback-wanted-new-ebook-hosting-for-powershell-org.md deleted file mode 100644 index cd5620bc3..000000000 --- a/content/articles/2016-05-09-your-feedback-wanted-new-ebook-hosting-for-powershell-org.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Your feedback wanted! New eBook Hosting for PowerShell.org -authors: - - Don Jones -date: "2016-05-09T13:28:43+00:00" -categories: - - Books -aliases: - - /2016/05/your-feedback-wanted-new-ebook-hosting-for-powershell-org/ ---- - -After dealing with numerous problems from PenFlip (where our free ebooks are currently located), we've decided to try two new hosting providers: GitBook and LeanPub. -Both of these are, or can be, based on Git/GitHub, which means the Markdown text of the book will always be open-sourced and available. Both offer conversion into PDF, MOBI, and EPUB formats, so you can download whichever you want. Both enable us to update the books at any time. Both are relatively easy to use; GitBook provides a moderately better writing experience since they provide a native app that kind of hides the Git-i-ness, but it's not a huge deal. More or less the same thing could be assembled for LeanPub if we wanted. -They do their formatting slightly differently, so it's worth looking at each to see which you like better. We don't have a ton of control over their formatting, so what you see in these tests is what you get. -LeanPub offers two key differences: - - * While we can and will continue to make the books available for free, we can also suggest a purchase price, and then actually let readers set a purchase price. This would enable donations to DevOpsCollective.org. - * Readers who "buy" the book (even for free) can register to receive email updates when a new version is produced. This _does_ mean you have to register using an e-mail address to download any book, even if you're not paying for it. We know some people get twitchy about providing contact info. - -We're going to use **one** of these new solutions, and we'd like your feedback. Try them both, if you can - we've converted _Creating HTML Reports in PowerShell_ over to both so that you can do a side-by-side comparison and see how they produce their various formats. Provide any feedback in the comments, below! -[The LeanPub Version][1] • [The GitBook Version][2] - -**UPDATE: **At least two folks have found that they can't access GitBook from their corporate network, which is concerning. Please indicate in the comments if that's a problem for you, too. -**UPDATE: **We're playing with GitHub. Both GitBook and LeanPub support it, and we're thinking we may be able to publish to both locations automagically, so people can choose the one that they like best. It looks like LeanPub will only generate a "Preview" when we push to GitHub, and we have to go in and manually "Publish" that latest version, but there may be a way to automate that. - - [1]: https://leanpub.com/creatinghtmlreportsinwindowspowershell - [2]: https://www.gitbook.com/book/devopscollective/creating-html-reports-in-powershell diff --git a/content/articles/2016-05-16-dutch-powershell-user-group-opens-its-doors-on-slack.md b/content/articles/2016-05-16-dutch-powershell-user-group-opens-its-doors-on-slack.md deleted file mode 100644 index 6cce9260f..000000000 --- a/content/articles/2016-05-16-dutch-powershell-user-group-opens-its-doors-on-slack.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Dutch PowerShell User Group opens its doors on Slack -authors: - - Jaap Brasser -date: "2016-05-16T13:07:17+00:00" -aliases: - - /2016/05/dutch-powershell-user-group-opens-its-doors-on-slack/ ---- - -In the past few weeks there has been a flurry of activity in the [DuPSUG][1] organization. We have been working on organizing the first PowerShell Saturday in the Netherlands and we recently also opened our doors on Slack, with our [DuPSUG slack][2] initiative. -On Slack we will provide a platform on which we will share our content and provide another platform for our members and PowerShell enthusiasts worldwide to interact with the Dutch scripting community. If you are interested in participating in our events, either as a participant or perhaps at future events as a speaker, fill please out the following form: -[DuPSUG Slack Registration][3] - - [1]: http://www.dupsug.com - [2]: https://dupsug.slack.com/ - [3]: http://goo.gl/forms/6La00HMeK7 diff --git a/content/articles/2016-05-19-boston-psug-kick-off-meeting-tomorrow.md b/content/articles/2016-05-19-boston-psug-kick-off-meeting-tomorrow.md deleted file mode 100644 index 3103e0178..000000000 --- a/content/articles/2016-05-19-boston-psug-kick-off-meeting-tomorrow.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Boston PSUG Kick Off Meeting Tomorrow -authors: - - Steve Parankewich -date: "2016-05-19T23:05:43+00:00" -categories: - - Announcements -aliases: - - /2016/05/boston-psug-kick-off-meeting-tomorrow/ ---- - -Hello fellow PowerShell enthusiasts. I have been missing for a few months with a new child that has occupied most of my extra time! I look forward to get back in the blogging gear soon. -I just wanted to send out a note that we are hosting our first kick off meeting for the Boston PowerShell User Group at the Microsoft MTC in Kendall Square Cambridge, MA.  Here are the two topics that will be delivered via [Matt Nelson][1] and [Will Schroeder][2]. -_Offensive Active Directory With PowerShell_ -Active Directory has been covered from a system administration aspect for as long as it has existed. However, much less information exists on how adversaries abuse and backdoor AD, leaving many defenders blind to the attacks being executed in their own environment. We'll cover Active Directory from an offensive perspective, illustrating ways that attackers move through Windows networks with ease. PowerView (the PowerShell domain enumeration tool) will be highlighted, including how to use it for local administrator enumeration, domain trust hopping, user hunting, ACL auditing, and more. -_Building an Empire With PowerShell_ -Over the past few years, attackers have started to realize that the same aspects of PowerShell that make it an excellent Windows automation solution also make it an ideal attack platform. The Empire project aims to bring together various offensive projects into a fully-functional malware agent (written purely in PowerShell) that can be used offensively by red teams and used to train blue teams to defend against these types of attacks. -Hope anyone local can make it. Sign up is live over at Meetup.com: - - [1]: https://twitter.com/enigma0x3 - [2]: https://twitter.com/harmj0y diff --git a/content/articles/2016-05-19-making-awesome-dashboards-from-windows-performance-counters.md b/content/articles/2016-05-19-making-awesome-dashboards-from-windows-performance-counters.md deleted file mode 100644 index 34c81e104..000000000 --- a/content/articles/2016-05-19-making-awesome-dashboards-from-windows-performance-counters.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Making Awesome Dashboards from Windows Performance Counters -authors: - - Matthew Hodgkins -date: "2016-05-19T18:25:55+00:00" -categories: - - DevOps - - Tools - - Tutorials -aliases: - - /2016/05/making-awesome-dashboards-from-windows-performance-counters/ ---- - -Having an understanding of your systems performance is a crucial part of running IT infrastructure. -If a user comes to us and says _"why is my application running slowly?"_, where do we start? Is it their machine? Is it the database server? Is it the file server? -The first thing we usually do is open up perfmon.exe and take a look at some performance counters. You then see the CPU on the database server is 100% and think _ "was the CPU always at 100% or did this issue just start today? Was it something I changed? If only I could see what was happening at this time yesterday when the application was running fine!". _It might take you a few hours to find the performance issue on your infrastructure, and you are probably going to need to open up perfmon.exe on a couple of other systems. There is a better way! -What if you could turn your Windows performance counters into dashboards that look like this? How much time would you save? -![Full Hyper-V Dashboard](https://hodgkins.io/images/posts/influxdb_grafana_windows/fulldashboard.png) -Using a combination of the open source tools **InfluxDB** to store the performance counter data, **Grafana **to graph the data and the **Telegraf** agent to collect Windows performance counters, you will be a master of your metrics in no time! -Read the detailed walk through over at [hodgkins.io](https://hodgkins.io/windows-metric-dashboards-with-influxdb-and-grafana) diff --git a/content/articles/2016-05-21-getting-complex-more-line-breaks-in-powershell.md b/content/articles/2016-05-21-getting-complex-more-line-breaks-in-powershell.md deleted file mode 100644 index be6a3e28b..000000000 --- a/content/articles/2016-05-21-getting-complex-more-line-breaks-in-powershell.md +++ /dev/null @@ -1,422 +0,0 @@ ---- -title: Getting complex – More line breaks in Powershell -authors: - - Tim Curwick -date: "2016-05-21T20:09:16+00:00" -categories: - - Tips and Tricks -aliases: - - /2016/05/getting-complex-more-line-breaks-in-powershell/ ---- - -This is a follow up to Jacob Moran's article [Keeping it simple - Line breaks in PowerShell][1]. -I am strongly in the pro backtick camp, but I won't get into that debate here. Instead, I'll cover more of the common ground between the two camps. -In addition to after a pipe, there are many, many more places where you can put in a line break without a backtick and without breaking your code. -As a rule of thumb, any spot where the syntax unambiguously must be followed by something more, you can break the line. -As an extreme example, this: - - - - - - - - -$A - -= - -1 - -, - -1 - -+ - -1 - -, - -3 - - -$B - -= - @(  -"a" - -, - -"b" - -, - -"c" - ) - If (  -$A - -[ - -2 - -] - -. -ToString()  --eq - -$B - -[ - -2 - -] - -. -Length  --or - ( -Get-Date -) -. -Date -. -DayOfWeek  --eq - -'Tuesday' - ) {  -[pscustomobject] -@{ Name  -= - -"x" - } } - - - - - - - -Can be written like this: - - - - - - - - -$A - -= - -1 - -, - - -1 - -+ - - -1 - -, - - -3 - - - - - - - -$B - -= - @( - -"a" - - -"b" - - -"c" - - ) - - - - - - -If - ( - -$A - -[ - - -2 - - -] - -. - - ToString( - )  --eq - - -$B - -[ - - -2 - - -] - -. - - Length  --or - - ( - -Get-Date - - ) -. - - Date -. - - DayOfWeek  --eq - - -'Tuesday' - - ) - { - -[ - pscustomobject] -@{ - Name  -= - - -"x" - - } - } - - - - - - - -That example is, of course, silly. -But combine judicious use of the line break with appropriate horizontal whitespace, and you can turn this: - - - - - - - - -If - (  -$SourceFile1 - -. -Length  -/ - -1Gb - --gt - -$MaxSizeGB - --and - (  -$SourceFile1 - -. -FullName  --like - -"*\Accounting\*" - --or - -$SourceFile1 - -. -FullName  --like - -"*\Finance\*" - ) ) - { - -$Destination - -= - -$SourceFile1 - -. -FullName -. -Replace(  -$SourceShare - -, - -$DestinationShare - ) -. -Replace(  -'\Accounting\' - -, - -'\ACC\' - ) -. -Replace(  -'\Accounting\' - -, - -'\FIN\' - ) - } - - - - - - - -Into this: - - - - - - - - -If - (  -$SourceFile1 - -. -Length  -/ - -1Gb - --gt - -$MaxSizeGB - --and - - -     (  - -$SourceFile1 - -. -FullName  --like - -"*\Accounting\*" - --or - - -       $SourceFile1 - -. -FullName  --like - -"*\Finance\*" - ) ) - -    { - - -    $Destination - -= - -$SourceFile1 - -. -FullName -. - - -                    Replace(  - -$SourceShare - -, - -$DestinationShare - ) -. - - -                    Replace(  - -'\Accounting\' - -, - -'\ACC\' - ) -. - - -                    Replace(  - -'\Accounting\' - -, - -'\FIN\' - ) - -    } - - - - - - - - - [1]: https://powershell.org/2016/04/20/keeping-it-simple-line-breaks-in-powershell/ diff --git a/content/articles/2016-05-22-practical-powershell-unit-testing.md b/content/articles/2016-05-22-practical-powershell-unit-testing.md deleted file mode 100644 index 3ebfca1ac..000000000 --- a/content/articles/2016-05-22-practical-powershell-unit-testing.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Practical PowerShell Unit-Testing -authors: - - msorens -date: "2016-05-22T20:44:14+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks - - Tools - - Tutorials -aliases: - - /2016/05/practical-powershell-unit-testing/ ---- - -By the time you are using PowerShell to automate an increasing amount of your system administration, database maintenance, or application-lifecycle work, you will likely come to the realization that PowerShell is indeed a first-class programming language and, as such, you need to treat it as such. That is, you need to do development in PowerShell just as you would with other languages, and in particular to increase robustness and decrease maintenance cost with **unit tests** and--dare I say--**test-driven development** (TDD). I put together several articles on getting started with unit tests and TDD in PowerShell using [Pester][1], the leading test framework for PowerShell. This series introduces you to Pester and provides what I like to call "tips from the trenches" on using it most effectively, along with a gentle prodding towards a TDD style. -Part 1: [Getting Started with the Pester Framework][2] -Starting with the ubiquitous "Hello, World", this introduces Pester, showing how to execute tests, how to start writing tests, and the anatomy of a test. -Part 2: [Mock Objects and Parameterized Test Cases][3] -To be able to create true unit tests, you need to be able to isolate your functions and modules to be able to focus on the component under test; mocks provide great support for doing that. Another topic of "power" unit tests is making them parameterizable, i.e. being able to run several scenarios through a single test simply by providing different inputs. -Part 3: [Validating Data and Call History][4] -The final part of this series provides a "how-to" for several other key parts of Pester: how to validate data, how to determine if something was called appropriately, and how to address a particular challenge with Pester, validating arrays. I've included a library for array validation to supplement Pester. -For a more general treatment of unit tests, I refer you to Roy Osherove's canonical text on the subject, [The Art of Unit Testing][5]. -![... you wanted to know about Unit Testing in .NET | Coding in .NET](https://images.duckduckgo.com/iu/?u=http%3A%2F%2Fcoding-in.net%2Fblog%2Fwp-content%2Fuploads%2FArtOf%C2%B5UnitTesting.jpg&f=1) - - [1]: https://github.com/pester/Pester - [2]: http://www.simple-talk.com/sysadmin/powershell/practical-powershell-unit-testing-getting-started/ - [3]: http://www.simple-talk.com/sysadmin/powershell/practical-powershell-unit-testing-mock-objects/ - [4]: http://www.simple-talk.com/sysadmin/powershell/practical-powershell-unit-testing-checking-program-flow/ - [5]: http://artofunittesting.com/ diff --git a/content/articles/2016-05-24-slack-and-powershell.md b/content/articles/2016-05-24-slack-and-powershell.md deleted file mode 100644 index 84ebc95fb..000000000 --- a/content/articles/2016-05-24-slack-and-powershell.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Slack and PowerShell -authors: - - pscookiemonster -date: "2016-05-24T12:51:46+00:00" -categories: - - DevOps - - PowerShell for Admins -aliases: - - /2016/05/slack-and-powershell/ ---- - -Having a platform that enables [ChatOps][1] can be a game changer.  You can quickly see changes, alerts, build status, discussions, emergency chats, and more, all in a single, searchable interface.  If you can sift through the gifs. -Bots are a hot topic these days, and and it's well worth checking out Matt Hodgkins bit [on integrating PowerShell with Hubot][2].  Bots are a great alternative to trying to spin up a web front end for PowerShell. -On top of bots, systems like Slack often offer a [wealth of integrations][3], allowing you to hook into systems like Nagios, PagerDuty, GitHub, Trello, and many others. -Occasionally, you might have something that doesn't integrate natively.  Maybe you want to integrate Slack messages into your SCOM command notification channel, your CI/CD build process, orchestration system, configuration management systems, or even ad hoc scripts. -If you're using Slack, check out the [Slack API methods][4], or [an incoming webhook][5].  With the API in particular, you can do some handy stuff! -If you like the idea of re-usable tools and abstraction, check out [PSSlack][6], a PowerShell module that we're starting to build out, which can simplify sending messages, searching messages, and more. -[![pslack](https://powershell.org/wp-content/uploads/2016/05/pslack.png)][6] - - [1]: https://www.youtube.com/watch?v=F8Vfoz7GeHw - [2]: https://hodgkins.io/chatops-on-windows-with-hubot-and-powershell - [3]: https://slack.com/apps - [4]: https://api.slack.com/methods - [5]: https://api.slack.com/incoming-webhooks - [6]: http://ramblingcookiemonster.github.io/PSSlack/ diff --git a/content/articles/2016-06-06-my-devops-dsc-camp-detailed-agenda.md b/content/articles/2016-06-06-my-devops-dsc-camp-detailed-agenda.md deleted file mode 100644 index 2903687ed..000000000 --- a/content/articles/2016-06-06-my-devops-dsc-camp-detailed-agenda.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: My DevOps (DSC) Camp Detailed Agenda -authors: - - Don Jones -date: "2016-06-06T19:59:59+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/06/my-devops-dsc-camp-detailed-agenda/ ---- - -If you're deep into DSC and delving into DevOps, then my summer "Camp" event is probably meant for you - and now there's a detailed agenda, overall agenda, and full event brochure. This is a really limited event - under 20, including product team participants, and we're down to just a few seats left. - -> - -> [DevOps and DSC Camp Detailed Agenda](https://donjones.com/2016/06/06/devops-and-dsc-camp-detailed-agenda/) -> diff --git a/content/articles/2016-06-06-request-for-topics.md b/content/articles/2016-06-06-request-for-topics.md deleted file mode 100644 index 5648f5536..000000000 --- a/content/articles/2016-06-06-request-for-topics.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Request for Topics -authors: - - Richard Siddaway -date: "2016-06-06T09:33:30+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2016/06/request-for-topics/ ---- - -Putting on an event like the PowerShell and DevOps Global Summit involves a lot of planning. We started the planning process for the 2017 Summit BEFORE the 2016 Summit started! - - -We have to work so far in advance that we’re taking guesses at the topics that will be of high interest next April – remember that we fix the agenda 6 months before the actual Summit. - - -Part of the process of creating the agenda is that we publish a ‘Call for Proposals’ where we ask potential speakers to submit session proposals. We then use those proposals as the basis of the agenda. Session proposals can be taken as they are or we may suggest changes to the speaker to ensure a more cohesive agenda. - - -Our aim in all of this is to provide relevant, high-level sessions that will keep the Summit as a ‘must attend’ event for the PowerShell community. - - -This year we’re asking for your help. - - -We’d like you to suggest topic areas that you’d like to see at the Summit. This is NOT a call for specific session proposals (that will come in August) or a request for particular speakers to talk about a topic but a request for topics. For instance: - - - * -We had some feedback from attendees at the 2016 Summit that a deep session on remoting would be of interest. - - * -The last few Summits we’ve had a lot of material on DSC – is it too much or do you want more in specific areas? - - * -Security is a highly important topic – do you want more? Is there a particular security aspect that should be covered? - - * -PowerShell is a very broad topic – are there areas such as Workflows, Jobs, Events, Remoting, CIM, Package Management where you’d like more? - - * -DevOps is another broad area -do you want sessions on dealing with specific technologies such as Chef, Puppet, Octopus, Source Control and anything else that enables your DevOps processes? - - -This list isn’t meant to be exhaustive – just a number of suggestions to start you thinking about the subject areas you’d like to see at the Summit. - - -We’ll summarise the topic areas that are requested in the information supplied to potential speakers in the Call for Proposals document. - - -Please use the comment facility to reply. If you need to supply further information you can use the standard Summit email address of Summit at PowerShell dot org. - - -The PowerShell Summit has become a premier event in the calendar of the PowerShell community. This is your opportunity to help shape next year’s Summit into the event you want to see. - - -Thank you. diff --git a/content/articles/2016-06-09-5-tips-for-writing-dsc-resources-in-powershell-5.md b/content/articles/2016-06-09-5-tips-for-writing-dsc-resources-in-powershell-5.md deleted file mode 100644 index bb87dd0f4..000000000 --- a/content/articles/2016-06-09-5-tips-for-writing-dsc-resources-in-powershell-5.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: 5 Tips for Writing DSC Resources in PowerShell 5 -authors: - - Matthew Hodgkins -date: "2016-06-09T18:44:00+00:00" -categories: - - DevOps - - PowerShell for Developers - - Tips and Tricks - - Tools -aliases: - - /2016/06/5-tips-for-writing-dsc-resources-in-powershell-5/ ---- - -PowerShell 5 brought class based DSC Resources, which majorly simplifies the process of writing custom DSC resources. -During my time working on some custom resources, I developed some tips a long the way which should save you some time and pain during your DSC journey. -The tips cover: - - * Structuring your class based DSC Resources - * Making it easier to get IntelliSense based on your DSC resources without constantly copying them into the module path - * Using PowerShell ISE IntelliSense when writing DSC configuration - * Troubleshooting resources which aren't being exposed correctly from your DSC Module - * Testing classed based resources with Pester - -Head over to  to take a look at the tips. diff --git a/content/articles/2016-06-10-mspsug-june-14th-virtual-meeting-pester-the-tester-powershell-bugs-beware.md b/content/articles/2016-06-10-mspsug-june-14th-virtual-meeting-pester-the-tester-powershell-bugs-beware.md deleted file mode 100644 index 037c1d2ba..000000000 --- a/content/articles/2016-06-10-mspsug-june-14th-virtual-meeting-pester-the-tester-powershell-bugs-beware.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "MSPSUG June 14th Virtual Meeting: Pester the Tester PowerShell Bugs Beware!" -authors: - - Mike F Robbins -date: "2016-06-10T15:47:52+00:00" -categories: - - Events -aliases: - - /2016/06/mspsug-june-14th-virtual-meeting-pester-the-tester-powershell-bugs-beware/ ---- - -Join the Mississippi PowerShell User Group virtually on Tuesday, June 14th 2016 at 8:30pm Central Time when Microsoft MVP [Robert Cain](https://twitter.com/arcanecode) will be presenting “**_Pester the Tester: PowerShell Bugs Beware!_**”. -So you’ve been developing PowerShell for a while, or perhaps you’re taking over maintenance of an existing set of scripts. It would be great to get extra confidence in your scripts through testing, but how? You’re in luck, there’s a new module in town, Pester! -Pester is a friendly testing framework designed for testing your PowerShell scripts and modules. In this session you’ll be introduced to Pester. You’ll see how to use Pester to uncover bugs, as well as using it for test driven development. Make your own PowerShell more robust through the use of Pester. Kill those PowerShell bugs, dead! -Visit the [Mississippi PowerShell User Group](http://mspsug.com/2016/05/31/mspsug-june-2016-virtual-meeting-pester-the-tester-powershell-bugs-beware/) website to learn more about Robert and to find out more details about this month’s meeting. -The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info](http://mspsug.com/attendee-info/)” section. -Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this meeting. -Note: It is not necessary to live in Mississippi or join our user group to attend our meetings or present a session for our user group. -µ diff --git a/content/articles/2016-06-11-complete-guide-to-powershell-punctuation.md b/content/articles/2016-06-11-complete-guide-to-powershell-punctuation.md deleted file mode 100644 index 0aea7b778..000000000 --- a/content/articles/2016-06-11-complete-guide-to-powershell-punctuation.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Complete Guide to PowerShell Punctuation -authors: - - msorens -date: "2016-06-11T22:57:55+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks - - Training -aliases: - - /2016/06/complete-guide-to-powershell-punctuation/ ---- - -Quick as you can, can you explain what each of these different parentheses-, brace-, and bracket-laden expressions does? - - -`${save-items} -${C:tmp.txt} -$($x=1;$y=2;$x;$y) -(1,2,3 -join '*') -(8 + 4)/2 -$hashTable.ContainsKey($x) -@(1) -@{abc='hello'} -{param($color="red"); "color=$color"} -$hash['blue'] -[Regex]::Escape($x) -[int]"5.2" -`When you're reading someone else's PowerShell code, you will come across many of these constructs, and more. And you know how challenging it can be to search for punctuation on the web (symbolhound.com not withstanding) ! -That is why I put together a reference chart containing all of PowerShell's symbology on one page. making it much easier when you need to look up a PowerShell symbol as you read code--or to browse for the right construct when you are writing code. -![PowerShell Punctuation wall chart](https://powershell.org/wp-content/uploads/2016/06/punctuation_thumbnail-300x152.png) -Download the **Complete Guide to PowerShell Punctuation** wallchart from [here][1]. - - [1]: https://www.simple-talk.com/sysadmin/powershell/the-complete-guide-to-powershell-punctuation/ diff --git a/content/articles/2016-06-13-help-me-test-ssl-on-powershell-org.md b/content/articles/2016-06-13-help-me-test-ssl-on-powershell-org.md deleted file mode 100644 index 2ebcdc2af..000000000 --- a/content/articles/2016-06-13-help-me-test-ssl-on-powershell-org.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Help Me Test SSL on PowerShell.org -authors: - - Don Jones -date: "2016-06-13T14:02:17+00:00" -categories: - - Announcements -aliases: - - /2016/06/help-me-test-ssl-on-powershell-org/ ---- - -I'd appreciate your help in testing HTTPS/SSL here on PowerShell.org. Right now, it's "voluntary," meaning you have to explicitly ask for . If you have any problems, please note them in a comment on this article. -Some notes and known problems: - - * Most pages will not show the "lock" address bar icon in your browser, because we're delivering mixed content. For example, the site logo is being hardcoded as http:// by some Javascript in our theme, which I need to sort out. - * _Your_ connection will be to CloudFlare, which is who issued the certificate you'll see. We've also SSL'd the traffic between them and our server using a DigiCert SSL certificate. We're also going to enable client certificate authentication, so our server will only deliver content to CloudFlare, which then delivers it to you. That's ahead. - -I _think_ we can solve the mixed-content problem by forcing HTTPS, which is easy, but I want to make sure it's otherwise working before taking that step. We already have a WordPress plugin in place that's rewriting http:// or https:// with just // in URLs, but there're a couple of places where that plugin isn't able to help, and that's why we're delivering mixed content still. -I'll point out that this is _mainly_ a bonus-points project; because almost everyone logs into the site using an external account, we don't store many passwords (and thus don't transmit them in the clear or otherwise). We don't store or transmit any other personally identifiable information. Still, SSL has some other benefits, and it shouldn't _hurt_ to have it on, so we're giving it a shot. -Thanks! - -## UPDATES 15 June 2016 - - * The Lock icon in browser address bars should be working; we've fixed the mixed-content issues I've found. - * We're forcing HTTPS. - * We use CloudFlare; you're getting SSL from you to them, and they're getting (forced) SSL from them to us. - * We're getting an "A" from SSLLabs and SecurityHeaders.io - thanks for that suggestion, Paal. CloudFlare doesn't let us implement _every_ security header yet, but we've got most of the recommended ones. diff --git a/content/articles/2016-06-20-high-level-designing-your-powershell-command-set.md b/content/articles/2016-06-20-high-level-designing-your-powershell-command-set.md deleted file mode 100644 index 745d1dc4c..000000000 --- a/content/articles/2016-06-20-high-level-designing-your-powershell-command-set.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: "High-Level: Designing Your PowerShell Command Set" -authors: - - Don Jones -date: "2016-06-20T10:27:41+00:00" -categories: - - PowerShell for Developers -aliases: - - /2016/06/high-level-designing-your-powershell-command-set/ ---- - -So you've decided to write a bunch of commands to help automate the administration of ____. Awesome! Let's try and make sure you get off on the right path, with this high-level overview of command design. - -## Start with an inventory - -You'll need to start by deciding _what commands to write, _and an inventory is often the best way to begin. Start by inventorying your nouns. For example, suppose you're writing a command set for some internal order-management system. You probably have nouns like Customer, Employee, Order, OrderItem, CustomerAddress, and so on. Write 'em all down in an Excel spreadsheet, one noun per row. -Then inventory your verbs. For each noun, what can you do with it? For example, you can probably create orders, so a New-Order command will be needed. Make a "New" column in your spreadsheet, and put an "X" in the row next to the Order noun. However, you probably can't _remove_ an order from the system, so although your spreadsheet might have a "Remove" column to cover things like Remove-Employee, that column won't get an "X" in the Order row. Orders might be voidable, though, so what's a good verb for that?  has the official verb list, but there's no "Void" or "Cancel" that seems appropriate. Don't go making up new verbs!!! Instead, it might be that Set-Order could be the answer, enabling approved changes to orders, including cancelling them (but retaining the record). -Finally, pick a prefix for your nouns. If your order system is named "Order Awesomeness," then maybe OAwe is a good noun prefix, as in Set-OAweOrder. The prefix will help keep your command names from bumping up against other people's, so making sure that noun prefix is pretty unique... is pretty important. - -## Design individual commands - -Now it's time to start designing individual commands. This is usually a kind of iterative process, meaning you'll go back and change your mind, expand, and so on a few times before you're done. -Start by _writing examples of how each command will be used_ to accomplish whatever tasks you'll be accomplishing. Save these examples, too - they should become examples in your commands' help files. Write as many examples as possible, covering as many situations and needs as you can think of. Enlist users to help. -As you write the examples, try to pay attention to the following: - - * Parameter names should be consistent across the commands. If order objects have an ID, and you need to be able to specify it, then it should be something like -OrderId every time. Don't use -OrderId on some commands and -Id on thers. Also pay attention to what the underlying software objects' property names are. For example, if customer names are exposed through a CustNameFirst and CustNameLast property, consider using those as corresponding parameter names, or at least as parameter name aliases. - * Start thinking about which parameters are going to be mandatory. - * Give some thought to different ways that commands might be used, and start denoting those as different parameter sets. - -This kind of example-based specification will help you think through how you want the commands to work, and it may highlight cases where you need more commands, where commands may need to be combined, and so on. - -## Sketch out your help files - -Believe it or not, it's not a bad idea to start drafting out your help files at this point. Define parameter sets, parameters, and examples. Briefly describe what each parameter is for - you can always make the language nicer and more formal later, so just a brief draft should work at this point. This kind of forces you to think through how your commands will work, and how other people will end up approaching them. It also gives you a good start on writing documentation! "Documentation as specification" helps a lot of people write specs that can end up being repurposed as docs, killing two birds with one stone. - -## Define expected results - -Go back to your examples, and provide some examples of the results you'd expect to see if you actually ran those commands as shown in your examples. This helps you to start defining the tests that you'll run against your code. "For this command, we should get this output" is exactly what testing is all about. "This command should generate this error, this command should do this," and so on. - -## Start coding - -With some good design work out of the way, you can start coding. Not just your commands, mind you, but also the Pester tests you'll use to validate those commands. Code 'em at the same time, if you like, and use those tests in unit testing as you work. diff --git a/content/articles/2016-06-24-heres-what-youve-missed-at-powershell-org-and-whats-coming.md b/content/articles/2016-06-24-heres-what-youve-missed-at-powershell-org-and-whats-coming.md deleted file mode 100644 index 1f828c6c5..000000000 --- a/content/articles/2016-06-24-heres-what-youve-missed-at-powershell-org-and-whats-coming.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: "Here's What You've Missed at PowerShell.org (and what's coming)" -authors: - - Don Jones -date: "2016-06-24T17:19:59+00:00" -categories: - - Announcements -aliases: - - /2016/06/heres-what-youve-missed-at-powershell-org-and-whats-coming/ ---- - -We've been making a ton of improvements at PowerShell.org... if you haven't visited in a while, it might be worth a stop by. -**First, **if you're hitting any of the links below and getting a 404, the most common culprit seems to be an over-zealous corporate proxy cache. Try clearing it, or doing a Shift+Reload in your browser. Confirm by visiting from a non-proxied network, like at home. -Our [eBooks][1] page has a bunch of new content, and our books are now available in PDF, MOBI, and EPUB from two providers (LeanPub and GitBook). You can also read books online in HTML. -Site members now have an extensive profile that you can complete, and doing so is one step on our short [Welcome Aboard! mission][2] that will earn you a new "Welcome!" badge on the site. It's one of many new [achievements you can earn][3] for participating in the community in a variety of ways. -And have you seen our new [videos][4]? In addition to tons of YouTube videos that include workshops, tutorials, and Summit recordings, we also have started new short-subject, structured learning series - entire courses that even award a certificate of completion when you're done! -But there's much more we can do to help you connect with community, so we're taking a quick survey. Here's some of what we can enable: - - * **Friend Connections. **Kinda like Facebook, enabling you to track on-site activity of the people you "follow." - * **Private Messages. **Just what it says - everyone would have a mailbox inside PowerShell.org. - * **Activity Streams. **Similar to a Twitter or Facebook feed, a way of seeing site activity (with its own RSS). Threaded comments, @mentions, and email notifications, too. - * **User Groups. **The ability to create in-site groups with their own discussion forum, activity stream, and shared content. - * **REST API. **A way of communicating with WordPress via REST calls, to retrieve or check content. - -[Visit the survey to let us know][5] which ones you'd want, or don't care about. -And drop a comment below if there's something else you'd like to see or share! - - [1]: /learning/ - [2]: https://powershell.org/mission/welcome-aboard/ - [3]: https://powershell.org/achievements/ - [4]: /learning/ - [5]: http://674004.polldaddy.com/s/powershell-org-features diff --git a/content/articles/2016-06-27-to-ping-or-not-to-ping-the-powershell-way.md b/content/articles/2016-06-27-to-ping-or-not-to-ping-the-powershell-way.md deleted file mode 100644 index ead1202f4..000000000 --- a/content/articles/2016-06-27-to-ping-or-not-to-ping-the-powershell-way.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: To ping or not to ping..The PowerShell way -authors: - - Graham Beer -date: "2016-06-27T20:29:29+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/06/to-ping-or-not-to-ping-the-powershell-way/ ---- - -As this is my first blog here, here’s a bit about me. I’m a current lead SCCM Admin in the UK, and have found this great enjoyment for PowerShell in the last 18 months. I’ve started my own blog, , to share my passion. The chance to blog on Powershell.org was too exciting not to do! -The inspiration for this blog came from a forum post on Powershell.org that I helped contributed on. The question asked was, how to display the name of failed ping, i.e. $computer is offline. -There were some great responses, the one I most liked which I slightly amended into a function was: - - -`function test-ping { $args | % {[pscustomobject]@{online = test-connection $_ -Count 1 -quiet;computername = $_}} } -`The simplicity and power is brilliant. (Credit to Dan Potter!) -I expanded on this and came up with a way to use the results in several different ways. All this by the power of advanced functions. -I have two advanced functions 'ValueFromPipeline' and 'ValidateSet' in this script: -1. **'ValueFromPipeline'** gives the capability to pass more than one object to our script. Perfect for passing one or many devices. -Other than the message "Online: PC1", I wanted to be able to use the ping status to pass to another cmdlet, collate all online or offline devices and display the results in a table. -2. Using **'ValidateSet'** I could define my options, "Online","Offline" and "ObjectTable". But by not setting the parameter to mandatory, you don’t have to use the additional options. -To continue using the ping response, I needed to hold them somewhere. I did this by creating an empty array in the Begin block and append each ping response to it. -Regardless of what option I choose, if any, the below block of code will always run: - - -`$device| foreach { - if (Test-Connection $_ -Count 1 -Quiet) { - if(-not($GetObject)){write-host -ForegroundColor green "Online: $_ "} - $Hash = $Hash += @{Online="$_"} - }else{ - if(-not($GetObject)){write-host -ForegroundColor Red "Offline: $_ "} - $Hash = $Hash += @{Offline="$_"} - } - } -`Devices in the variable, $device, will each be 'pinged' then passed through a 'if' statement depending on offline or online status and get added into the $hash array variable. -**DISCLAIMER:** I should apologies to Don here for killing the puppies with write-host. I wanted to just push out some colored output to the host only! -Before I go any further, let me briefly explain how I am 'pinging' the devices. I am using the cmdlet 'Test-Connection'. The synopsis on 'get-help' for test-connection states, 'Sends ICMP echo request packets ("pings") to one or more computers.' A nice feature of this cmdlet is the '-quiet' syntax. This is cool as it gives a Boolean result (True or False) of the 'ping' status. By adding a '-count' as well I can limit the number of times I request a connection check. Now I can pass as many devices through the pipeline to my function and get an online or offline message pretty quickly. -The second half of the script only runs if you add the '$getObject' option from the function. The use of the 'validateSet' allows me to make sure the three options I defined are used only. -The data collected in the $hash array variable is passed through a foreach statement and creates customobjects. The final part is use of a 'Switch'. Depending on what was chosen in the $getObject parameter is the output at the end of the script. -The advantage to this switch is I can pass all the online PC's to something else via the pipeline. For example, an AD group or a deployment collection: - - -`'PC1','PC2' | Get-PingStatus -GetObject Online | # pass to another cmdlet -`Capture the 'online' PC's to a variable and use: - - -`$Online = 'PC1','PC2' | Get-PingStatus -GetObject Online -`Or if you need to report back a list of PC's which are either on or offline in an object group: - - -`'PC1','PC2', 'PC3','PC4 | Get-PingStatus -GetObject objectTable -DeviceName Online offline ----------- ------ ------- -pc4 Online -pc1 Offline -pc2 Offline -pc3 Offline -`Again this script has great flexibility in how you pass the device objects. -Say you have a list of PC's in a txt for CSV file, you can use Get-content and pipe it to Get-PingStatus: - - -`get-content pcs.csv | Get-PingStatus -`NOTE: -The use of the $Global: variable allowed me to use $Global:Objects once the script has complete. Just something I thought could be useful. The $Script: variable would have worked fine should I not want to use the variable outside the script. -I hope you've enjoyed my blog and I welcome any comments. I've posted the script on GitHub should you wish to download. - -The full script: - - -`Function Get-PingStatus - { - param( - [Parameter(ValueFromPipeline=$true)] - [string]$device, - [validateSet("Online","Offline","ObjectTable")] - [String]$getObject - ) -begin{ - $hash = @() - } -process{ - $device| foreach { - if (Test-Connection $_ -Count 1 -Quiet) { - if(-not($GetObject)){write-host -ForegroundColor green "Online: $_ "} - $Hash = $Hash += @{Online="$_"} - }else{ - if(-not($GetObject)){write-host -ForegroundColor Red "Offline: $_ "} - $Hash = $Hash += @{Offline="$_"} - } - } - } -end { - if($GetObject) { - $Global:Objects = $Hash | foreach { [PSCustomObject]@{ - DeviceName = $_.Values| foreach { "$_" } - Online = $_.Keys| where {$_ -eq "Online"} - offline = $_.Keys| where {$_ -eq "Offline"} - } - } - Switch -Exact ($GetObject) - { - 'Online' { $Global:Objects| where 'online'| select -ExpandProperty DeviceName } - 'Offline' { $Global:Objects| where 'offline'| select -ExpandProperty DeviceName } - 'ObjectTable' { return $Global:Objects } - } - } - } -} -` diff --git a/content/articles/2016-07-01-finding-powershell-sessions-at-conferences-and-events.md b/content/articles/2016-07-01-finding-powershell-sessions-at-conferences-and-events.md deleted file mode 100644 index 0c268ff92..000000000 --- a/content/articles/2016-07-01-finding-powershell-sessions-at-conferences-and-events.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Finding PowerShell Sessions At Conferences and Events -authors: - - pscookiemonster -date: "2016-07-01T13:20:03+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/07/finding-powershell-sessions-at-conferences-and-events/ ---- - -### The Current State - -So! If you visit the [PowerShell.org events][1] page, you'll find a bevy of PowerShell-focused events, from local PowerShell user groups to global PowerShell conferences. -What you won't find, yet, is a list of PowerShell related sessions at the many other conferences and user groups you might consider attending. -Maybe you'd like to find PowerShell oriented sessions at non-PowerShell user groups and mini conferences like SQL Saturdays, VMUGs, Azure User Groups, Security BSides, DevOpsDays, etc.  These are great small events that can build your knowledge, help you meet local folks in a particular field, and often provide provide you with some free food. -Beyond these, there are plenty of summits and conferences that have a strong PowerShell track, or even just a handful of awesome PowerShell sessions, that might be worth knowing about. LISA, DerbyCon, MMS, WinOps, TechMentor, and many more. -How do you find these events?  There isn't a solid option today, but hopefully we can change that.  Before we go further though, why is this even helpful? - -### Why? - -This might be silly, but I tend to gravitate towards PowerShell oriented sessions at non-PowerShell-focused events.  If someone is using PowerShell to work with a particular technology, chances are they will be good folks to learn from. -On top of this, your local user group leaders would have details on folks they could potentially ping and enlist for an in-person session, or even just an informal geek dinner. -Finally, it might help you find events worth attending.  If you want a comprehensive list of tech conferences and events, there isn't really a solid directory, let alone one what will help you find PowerShell oriented sessions. - -### What Can I Do? - -If you think this would be worthwhile, you can help make it happen! -Are you giving a PowerShell oriented session?  Is it on PowerShell.org's event page? Go ahead and [add it][2]! Try to keep in line with their policy of including nonprofit, not-for-profit, or otherwise noncommercial events, but thankfully most tech events fit the bill. -Here's a quick example: - - * _Event Name_: Event Name: Session title - * _When_: Specific start and stop time for the one session - * _Where_: Address for the event - * _Details_: Abstract for the session, ideally mentioning who will be presenting - -Once you've filled it out, it might [look like this][3]. -If you know of a session that isn't listed, feel free to pester the presenter and to point them at this post - the earlier they get it on the calendar, the better!  If you have the session details and can't get in touch with the presenter, feel free to add the session yourself. -Cheers! - - - [1]: https://powershell.org/events/ - [2]: https://powershell.org/events/submit-event/ - [3]: https://powershell.org/events/lisa16-release-pipelines-in-microsoft-ecosystems/ diff --git a/content/articles/2016-07-11-mspsug-july-12th-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module.md b/content/articles/2016-07-11-mspsug-july-12th-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module.md deleted file mode 100644 index 8ef93da25..000000000 --- a/content/articles/2016-07-11-mspsug-july-12th-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "MSPSUG July 12th Virtual Meeting: Exploring SQLPS, the SQL Server PowerShell Module" -authors: - - Mike F Robbins -date: "2016-07-11T18:21:52+00:00" -categories: - - Events -aliases: - - /2016/07/mspsug-july-12th-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module/ ---- - -Join the Mississippi PowerShell User Group virtually on Tuesday, July 12th 2016 at 8:30pm Central Time when [Mike Fal](https://twitter.com/Mike_Fal) will be presenting “_**Exploring SQLPS, the SQL Server PowerShell Module**_”. -A big hurdle for using PowerShell and SQL Server together is the SQLPS module. Both old and new users of PowerShell don’t completely understand its capabilities. In this session, we’ll talk about the cmdlets you may not know about, tricks to save time using the provider, and even a few gotchas on how the provider works that can save you some time and energy. When we’re finished, you will have a deeper understanding of how you can use SQL Server and PowerShell together. -Visit the [Mississippi PowerShell User Group](http://mspsug.com/2016/07/11/mspsug-july-2016-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module/) website to learn more about Mike and to find out more details about this month’s meeting. -The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info](http://mspsug.com/attendee-info/)” section. -Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this meeting. -Note: It is not necessary to live in Mississippi or join our user group to attend our meetings or present a session for our user group. -µ diff --git a/content/articles/2016-07-23-every-pithy-witticism-begins-with-quotation-marks.md b/content/articles/2016-07-23-every-pithy-witticism-begins-with-quotation-marks.md deleted file mode 100644 index ff3bdfb68..000000000 --- a/content/articles/2016-07-23-every-pithy-witticism-begins-with-quotation-marks.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Every pithy witticism begins with quotation marks -authors: - - msorens -date: "2016-07-23T22:56:52+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks - - Tutorials -aliases: - - /2016/07/every-pithy-witticism-begins-with-quotation-marks/ ---- - -**"To be or not to be".** Without getting into a debate over whether Shakespeare was musing about being a logician, suffice to say that in writing prose, the rules of _when_ and _how_ to use quotation marks are relatively clear. In PowerShell, not so much. Sure, there is an [about_Quoting_Rules][1] documentation page, and that is a good place to start, but that barely covers half the topic. It assumes you need quotes and then helps you appreciate some of the factors to consider when choosing single quotes or double quotes. -But do you _need_ quotes? Remember PowerShell is a shell/command language so "obviously" you can do things like this: - - -`PS> Delete-Item C:\tmp\foobar.txt -PS> Get-ChildItem *.log -PS> Get-Process svchost, conhost, powershell -`It would certainly be cumbersome if you needed to quote each of those arguments, so PowerShell was designed well, in that respect. -But what if you ran the same commands just slightly differently? - - -`PS> "C:\tmp\foobar.txt" | Delete-Item -PS> "*.log" | Get-ChildItem -`Here you _must_ use quotation marks or you will suffer the wrath of a terminating error from the PowerShell host most certainly! -Those are just a couple of the many examples I consider in [When to Quote in PowerShell][2]. Accompanying the full article, I also included a wallchart that condenses all the article's salient points into a single-page reference. Here's a fragment of the wallchart: -![Guide to PowerShell Quoting wall chart](https://powershell.org/wp-content/uploads/2016/07/quoting_thumbnail-300x198.png) -Read the article and download the wallchart [here][2]. - - [1]: https://technet.microsoft.com/en-us/library/hh847740.aspx - [2]: https://www.simple-talk.com/sysadmin/powershell/when-to-quote-in-powershell/ diff --git a/content/articles/2016-07-27-deploying-modules-to-the-powershell-gallery.md b/content/articles/2016-07-27-deploying-modules-to-the-powershell-gallery.md deleted file mode 100644 index d2a2f37b1..000000000 --- a/content/articles/2016-07-27-deploying-modules-to-the-powershell-gallery.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: Deploying Modules to the PowerShell Gallery -authors: - - pscookiemonster -date: "2016-07-27T00:38:35+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/07/deploying-modules-to-the-powershell-gallery/ ---- - -So! We've talked about [continuous integration and deployment with PSDeploy][1], the [importance of abstraction][2], and a bit on [how and why to write and publish PowerShell modules][3]. -It's time to combine these ingredients with a quick, real-world walk through on _automatically publishing your PowerShell modules to the PowerShell Gallery_.  If you want a full run-down showing how to deploy PSDeploy with PSDeploy, [hit the link][4]; otherwise, we'll pick up the [PSStackExchange module][5] where we left off, and drop in some continuous integration and deployment goodness! - -### Is everything in order? - -First things first, what do we already have? - - * A GitHub account, with a repo containing [a PowerShell module][6] - * A [PowerShell Gallery][7] account ([register an existing Microsoft account][8]) - * Our [PowerShell Gallery API Key][9] - -That's about it!  This is all you need to start automatically publishing to the PowerShell Gallery. - -### Manual steps - -There's one manual step to take - we'll use AppVeyor's [secure variables][10] feature to encrypt our PowerShell Gallery API key under our AppVeyor account. -Chris Wahl has [a quick hit with instructions][11].  Long story short? Click your AppVeyor account drop down, Encrypt data.  Paste in your API key and Encrypt!  Copy out the resulting encrypted value. -Okay, now what do we do with it? - -### Drop in the scaffolding! - -We're going to download four files and substitute in our encrypted data.  You could use the code below with a few substitutions to add automated deployments to your PowerShell modules: - - -`# Create a folder, clone PSStackExchange, browse to that repo -# Substitute in values for your own module as desired -$Repo = 'C:\sc\PSStackExchange\' -mkdir C:\sc -cd C:\sc -git clone https://github.com/RamblingCookieMonster/PSStackExchange.git -cd $Repo -# We're in the repo! Download 4 scaffolding files: -$wc = New-Object System.Net.WebClient -'https://raw.githubusercontent.com/RamblingCookieMonster/PSDeploy/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/appveyor.yml', -'https://raw.githubusercontent.com/RamblingCookieMonster/PSDeploy/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/build.ps1', -'https://raw.githubusercontent.com/RamblingCookieMonster/PSDeploy/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/psake.ps1', -'https://raw.githubusercontent.com/RamblingCookieMonster/PSDeploy/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/deploy.psdeploy.ps1' | - ForEach-Object { - $File = Join-Path $Repo ($_ -split "/")[-1] - $wc.DownloadFile( $_, $File ) - } -# Replace my encrypted NuGetApiKey with yours! -$YourKey = 'SomeEncryptedKeyFromAppVeyor' # <<<<<< Replace this with your encrypted data from AppVeyor <<<<<< -$AppVeyorPath = Join-Path $Repo appveyor.yml -$AppVeyorContent = Get-Content $AppVeyorPath -Raw -Set-Content $AppVeyorPath -Value $AppVeyorContent.replace('secure: oqMFzG8F65K5l572V7VzlZIWU7xnSYDLtSXECJAAURrXe8M2+BAp9vHLT+1h1lR0', "secure: $YourKey") -# Commit your changes, push them to GitHub, and you're good to go! -`I made these changes, pushed to GitHub with !Deploy in my commit message, and voila!  AppVeyor [ran the build][12], and PSStackExchange [was updated][13] in the gallery! - -### Wait, what does this all mean? - -So! Every time I make a change to PSStackExchange going forward, I have the option to say _!Deploy_ anywhere in my commit message.  When that happens, my changes run through Pester tests in AppVeyor, and are automatically pushed to the PowerShell Gallery in the unlikely event that I didn't make a mistake. - - * Someone submits a bug report and I have a fix to add?  Automatically !Deploy - * Someone submits a pull request with an awesome new feature?  Automatically !Deploy - * I discover I've made a terrible mistake and need to re-write something?  Automatically !Deploy - * I'm literally too lazy to run a single command, with a key I could serialize using the DPAPI?  !Deploy - -Okay, to be fair, this pipeline borrows from the PowerShell team and [deploys developer builds to AppVeyor][14] regardless of whether you say !Deploy. -More specifically: - - * AppVeyor reads the [appveyor.yml][15], which tells it to run the build.ps1 - * The [build.ps1][16] downloads a few modules, sets some build variables, and runs psake.ps1 - * [Psake.ps1][17] includes our steps to test via Pester, build via BuildHelpers (bump the module version, etc.), and deploy via PSDeploy - * [Deploy.psdeploy.ps1][18] tells PSDeploy what to deploy, and includes some gates - for example, only deploy the master branch to the PowerShell gallery - -That's about it! - -### Takeaways - -Three quick takeaways: -(1) Each of the components in this pipeline, and the pipeline itself are open source:  [psake][19], [Pester][20], [PSDeploy][21], and [BuildHelpers][22].  Feel free to contribute ideas, bug reports, tests, documentation, code, and the like. -(2) It goes without saying, but do consider writing modules, [open sourcing][23] them, and publishing them to the PowerShell Gallery - ideally automatically with something like the process we just walked through! -(3) This is a great way to get your feet wet with [release pipelines][24] for infrastructure.  You might have different tests, and you might deploy systems and services rather than modules, but ultimately: - - * You're pushing changes to source control - * You have a build system that watches this, and... - * Runs a suite of tests - * Perhaps "builds" some artifacts you need - * Pushes out your changes.  Perhaps to production - -Cheers! - - [1]: https://powershell.org/continuous-integration-continuous-delivery-and-psdeploy/ - [2]: https://powershell.org/abstraction-and-configuration-data/ - [3]: https://powershell.org/writing-and-publishing-powershell-modules/ - [4]: http://ramblingcookiemonster.github.io/PSDeploy-Inception/ - [5]: https://github.com/RamblingCookieMonster/PSStackExchange/tree/db1277453374cb16684b35cf93a8f5c97288c41f/PSStackExchange - [6]: https://github.com/RamblingCookieMonster/PSStackExchange/tree/db1277453374cb16684b35cf93a8f5c97288c41f - [7]: https://www.powershellgallery.com/ - [8]: https://www.powershellgallery.com/users/account/LogOn?returnUrl=%2F - [9]: https://www.powershellgallery.com/account - [10]: https://www.appveyor.com/docs/build-configuration#secure-variables - [11]: http://wahlnetwork.com/2016/07/19/encrypting-environmental-variables-with-appveyor/ - [12]: https://ci.appveyor.com/project/RamblingCookieMonster/psstackexchange/build/1.0.4 - [13]: https://www.powershellgallery.com/packages/PSStackExchange/1.0.3 - [14]: http://psdeploy.readthedocs.io/en/latest/Example-AppVeyorModule-Deployment/ - [15]: https://github.com/RamblingCookieMonster/PSDeploy/blob/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/appveyor.yml - [16]: https://github.com/RamblingCookieMonster/PSDeploy/blob/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/build.ps1 - [17]: https://github.com/RamblingCookieMonster/PSDeploy/blob/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/psake.ps1 - [18]: https://github.com/RamblingCookieMonster/PSDeploy/blob/master/deploy.psdeploy.ps1 - [19]: https://github.com/psake/psake - [20]: https://github.com/pester/Pester - [21]: https://github.com/RamblingCookieMonster/PSDeploy/ - [22]: https://github.com/RamblingCookieMonster/BuildHelpers - [23]: http://www.themacro.com/articles/2016/05/why-the-best-give-away/ - [24]: http://aka.ms/trpm diff --git a/content/articles/2016-08-01-powershell-and-devops-global-summit-2017-call-for-topics.md b/content/articles/2016-08-01-powershell-and-devops-global-summit-2017-call-for-topics.md deleted file mode 100644 index b4c5b619b..000000000 --- a/content/articles/2016-08-01-powershell-and-devops-global-summit-2017-call-for-topics.md +++ /dev/null @@ -1,176 +0,0 @@ ---- -title: "PowerShell and DevOps Global Summit 2017: Call for Topics" -authors: - - Richard Siddaway -date: "2016-08-01T11:09:22+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2016/08/powershell-and-devops-global-summit-2017-call-for-topics/ ---- - -The PowerShell and DevOps Global Summit is the number one conference where PowerShell enthusiasts gather and learn from each other in fast-paced, knowledge packed presentations. PowerShell, and DevOps, experts from all over the world including MVP’s, community leaders and PowerShell team members, will once again join together for a few days in Bellevue, WA. to discuss and learn about maximizing PowerShell in the workplace. - - - It's also the place to explore and further your knowledge of DevOps principles and practices in a Windows environment. It's a place to make new connections, learn new techniques, and offer something to your peers and colleagues. If you want to share your PowerShell or DevOps expertise, then this is your official call to submit presentations for selection! - - - The PowerShell and DevOps Global Summit 2017 will be returning to the Meydenbauer center, Bellevue WA on 9-12 April 2017. - - -## **TOPIC AREAS– What we are looking for** - - - We are looking for presentations in a number of areas. The bulk of our sessions follow our now traditional 45-minute format. These sessions cover a wide aspect of PowerShell and DevOps expertise. Your proposed session should fit into one of the following areas: - - - * PowerShell Internals – A deep look into the inside workings of PowerShell and practical solutions that are built from them. These presentations are typically more directed to the PowerShell development community that is building extensions and solutions relating to PowerShell. - * PowerShell Features Deep Dive – These presentations are a deep look into configuring and working with PowerShell features and capabilities such as Remoting, Desired State Configuration and more. These presentations tend to be more IT Pro focused. - * DevOps in Practice – A deep dive into putting the DevOps principles into practice. PowerShell may be a part of DevOps in your organization or you may be using other tools. Presentations should focus on what you’re doing and how you’re doing it. - - - We are open to presentations across the entire ecosystem that has been built around PowerShell or the various DevOps tools. Don’t hesitate to send an abstract for your particular area of expertise. This includes Microsoft platforms and products that have PowerShell-based management tools as well as third party products. - - - New topics will be preferred over the recycling of older topics – look to see what’s new in PowerShell 5.0 and use the questions on PowerShell.org to spot areas that could supply a good session for the Summit. However, we are still open to sessions on ‘older’ topics that address areas of great confusion or uncertainty. - - - We have a very limited number agenda slots available for double length sessions. These are reserved for experienced speakers that are delving into depths of a topic. Recent Summit’s have had sessions on security, containers on Windows, Azure automation and PowerShell based screen scraping. Please contact us – summit@powershell.org – with your idea before spending too much time developing such a session. - - - On Sunday 9 April we will have six 3 hour sessions available. These should cover either foundational topics that will either bring attendees up to speed in a particular area or be a very deep dive into an advanced topic. Again, these are reserved for experienced speakers so please contact us – summit@powershell.org – with your idea before spending too much time developing such a session. - - - Also on Sunday we’re looking to present half day workshops – Function review and DSC Resource review. Bring your code and get expert analysis and feedback together with help solving your problems in these areas. We’re looking for PowerShell and DSC experts to run these sessions. Please contact us – summit@powershell.org – if you could run such a session. - - -## ** What kind of sessions get selected?** - -We’re looking for sessions that go beyond – way beyond – ‘beginner’.  This is an ‘experts’ level conference and we expect the session to reflect that. -If you want to see examples of the depth we’re looking for use the recordings on the PowerShell.org Youtube channel from last year’s PowerShell and DevOps Global Summit as a guide. - - - We look for an abstract that’s compelling and makes us want to see your session – so spend time writing a punchy abstract! We want sessions that offer real-world usability combined with ‘WOW, nobody talks about THAT’ awesomeness. - - - We want to see the code. Don’t just talk about it – this is a PowerShell summit not a PowerPoint Summit. If your session isn’t predominately demonstrations its probably not right for the Summit. - - - Summit presentations are intense and intimate often with plenty of audience interaction. You must expect questions and discussions. This is not a “lecture to the audience” event. Also because of the session length, generally co-presenters are unnecessary, but that is not a requirement. - AIM HIGH, VERY HIGH. - - - Remember, Summit sessions are recorded, so if you’ve previously presented a topic at a Summit, we’re less likely to choose it for another Summit. - - - We want sessions that are challenging, and that ideally present things that simply aren’t explained or documented elsewhere. New modules, new techniques, and crazy approaches are all welcome. Discussion-format sessions are great, too, especially if you plan to turn them into a community deliverable (like a “best practices for writing DSC Resources” session that gets turned into a free e-guide later). Think community, deep dive, engaging, and amazing as keywords. We want attendees to finish each day with information leaking… just a little bit… out their eyeballs. Help us make it happen. - - - If you are going to be presenting about a module you’ve created don’t just show it in use. Show the code! Show how you solved the problem! What issues did you have and how did you do to overcome them? - - - You are more likely to be accepted as a speaker if you have multiple sessions we can accept. We have a very limited speaker budget and to maximize value to attendees we need to keep our costs down. We can do this if speakers present multiple sessions. They don’t have to be on the same topic – its better if they aren’t. - - - To give you some ideas we’ve conducted a survey of topics potential attendees would like to see covered: - - - * DevOps tools and practices - * DevOps on Windows - * Source control - * Testing – pester, OVF, TDD etc. - * Metrics and measurements in DevOps - * PowerShell next generation - * JEA - * Exchange web services - * System Center – SCSM, SCCM - * PowerShell + SQL Server - * Software Inventory logging - * More DSC – specially to enable WinOps - - - If you have any doubts about the suitability of a particular session, please contact us - summit@powershell.org – we’re always happy to discuss proposed sessions. - - - We do have some goals for speaker selection, too. We obviously have, and appreciate, the great involvement we get from the product team. We aim to have a certain number of sessions from well-known members of the community, simply because they’re well-known for a reason – they do a great job! But we also set aside slots for newcomers who’ve never presented before, or who’ve maybe only presented once or twice before – the audience will judge you on content not style. We want to create opportunities for more folks to become engaged and active in our community, and the Summit is a great way to do that. - - - We aren’t looking for soft-skills sessions, like “how to get a new user group running,” although contact us via email (summit@powershell.org) if you’d like to do something like that as an extra evening thing after the main content wraps for the day. - - - Please note all sessions are to be delivered in English. Presenter will provide all equipment needed to deliver session(s), including a laptop or other computer. Presenter must be able to provide video by means of HDMI, DVI-D, or DisplayPort connectors – VGA is NOT supported. Presenter must be able to manually select an appropriate screen resolution for video output. Typically, 1024×768 or 1280×720 are preferred. - - - Internet connectivity is available in the conference center but bandwidth is limited. If you rely on connecting to the cloud for your sessions then consider recording any demonstrations as a contingency. - - -## **How to submit abstracts of presentations** - -Presentations will be 45-minutes in length and the submission should include the following: - - - * Presentation Title - * Presentation abstract – a description of the presentation and the topics covered. 250 words or less and suitable for marketing. - - - Go to https://www.eventloom.com/event/register/summit2017/Speaker?preregister=1. Notice that you'll get a certificate error if you don't use the "www" at the front. - - - This is the only valid URL for pre-registration. Provide and confirm your e-mail address, name and other required details. You’re creating a new account, even if you’ve attended past Summit events. - - - **DO NOT ATTEMPT TO REGISTER FOR THE SUMMIT AS AN ATTENDEE AT THIS STAGE – WE WILL BE OPENING REGISTRATION IN NOVEMBER 2016. ANY NON-SPEAKER REGISTRATIONS WILL BE DELETED AT THAT TIME.** - - - * Click Abstracts on the top menu - * Click SUBMIT ABSTRACT - * Enter Title and Description. - * Click SUBMIT - * Provide a title and description; descriptions must be 50-250 words. Set the Status to “Ready to Review” when you are ready to send your session to us for consideration. - - - To return to the site at a later time, go to https://www.eventloom.com/event/login/summit2017 - Click Log In. You can then re-visit Abstracts. - - - Note that you must set your abstract status to Ready for Review or we won’t see it. If you leave it in Pending, it won’t be considered. - - - You can submit multiple presentations in the same topic area or for different ones. Be aware that even though the session length is 45 minutes we prefer to have at least 10 minutes set aside for questions. - - -## **Presentation submission deadline – When you should send it by** - - - Start sending your presentation submissions immediately! The selection committee will start selecting presentations as soon as they arrive so you don’t want to miss out. The last day we will accept presentation submissions will be Sunday 2 October 2016. This is a hard deadline – NO sessions will be accepted after this date. - - -## **When you will know you’ve been selected** - - - The selection committee will start reviewing submissions immediately and begin the selection process. You will be informed if one or more of your presentations have been selected and notified by Monday 10 October 2016. - - - You will need to log back onto the event site and complete your registration with the code we will provide in the notification email. This will have to occur before 23 October 2016 so that we have a completed agenda in time for attendee registration. - - - We will notify all potential speakers by 23 October 2016 if their sessions haven’t been accepted. - - - Speakers, with accepted sessions, will be given free admission to the event, including attendance at all official Summit activities. Speakers may not bring guests to the day sessions or evening events. We have a limited budget, and the number of speakers selected will be governed by that budget. - - - All speakers will receive a stipend of $400 per session (more for the longer Sunday sessions) to assist with travelling and accommodation expenses. - - - Pre-registering as a speaker does not guarantee you a place at the event. If any sessions are accepted, you will be asked to immediately complete your Summit registration using a free promotional code. If you do not complete your registration by 23 October 2016, then we will assume you do not wish to present and your sessions will be cancelled, and the slots offered to another speaker. - - - If no sessions are accepted, then your pre-registration will be deleted. Beginning 1 November 2016 and through 3 March 2017, you are welcome to create a new account and register as a standard attendee on a space-available basis. - - - The final agenda will be announced and posted on PowerShell.Org on, or about, Tuesday 1 November 2016. - - - We look forward to your submissions and your help in making PowerShell and DevOps Global Summit 2017 the most valuable IT/Dev conference of the year building on and surpassing the previous Summits! diff --git a/content/articles/2016-08-08-what-are-your-known-problems-solved-in-dsc.md b/content/articles/2016-08-08-what-are-your-known-problems-solved-in-dsc.md deleted file mode 100644 index 173f72f4d..000000000 --- a/content/articles/2016-08-08-what-are-your-known-problems-solved-in-dsc.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "What are your \"known problems\" (solved) in DSC?" -authors: - - Don Jones -date: "2016-08-08T19:32:02+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/08/what-are-your-known-problems-solved-in-dsc/ ---- - -I'm collecting a list of known problems in DSC v5 _that have been solved. _Like the infamous "MI RESULT 12" error that could happen if you upgraded from prerelease v5 to production preview. I'm going to document these in "The DSC Book," including in its free sample version, to help preserve these things in one place. -Again - these need to be _solved_ problems. Just drop as much description as you can into a comment here, and feel free to link to the fix, or to a discussion thread on the problem. -And please - pass this around. If you've never had a chance to contribute to "the community" before, now's a great time. Even if it's a problem that you know doesn't exist in the _current_ v5 release, let's please just document its former existence. -Thanks! diff --git a/content/articles/2016-08-11-a-date-with-powershell.md b/content/articles/2016-08-11-a-date-with-powershell.md deleted file mode 100644 index 23ddbd45e..000000000 --- a/content/articles/2016-08-11-a-date-with-powershell.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: A date with PowerShell -authors: - - Graham Beer -date: "2016-08-11T20:42:40+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks - - Tools - - Tutorials -aliases: - - /2016/08/a-date-with-powershell/ ---- - -At the beginning of July, we welcomed our 3rd son into the world. As days past my wife and I would say, "wow, he's 11 days old. Can you believe it?!". I'm sure parents out there are relating to this! -This gave me an idea for a fun script that would get your age in years, months and days, tell you how many days until your birthday and your star sign. -I wanted date of birth passed to the function as 'dd/MM/yy'. To keep to this format, I’m using the 'ValidatePattern' Advanced Parameter with a Regular Expression (Regex). The regular expression, "^(0[1-9]|[12]\d|3[01])/(0[1-9]|1[0-2])/(\d{2})$", will only allow a date in the format of 01/01/16, for example. -Briefly, here is regex syntax I used in some of the expression: -^ Start of string -( .. ) Capturing group -(0[1-9] Match two digits that make up the day. This accepts numbers from 01 to 09 -| Acts like a Boolean OR. -/d match any digital character -[12] match any character in the set -/ used to divide the date numbers -{2} Exactly two times -$ End of string -Now that my function parameter variable $Bday has a date, its passed to get-date to be converted from a string to a date. The date in variable $cDate will look like this, '01 January 2016 00:00:00'. The next line in the code will use todays date and subtract the date passed in $cDate variable. The $diff variable will contain the following data which we will use to get our age in years, months and days: -Days : 212 -Hours : 12 -Minutes : 40 -Seconds : 20 -Milliseconds : 533 -Ticks : 183624205335135 -TotalDays : 212.528015434184 -TotalHours : 5100.67237042042 -TotalMinutes : 306040.342225225 -TotalSeconds : 18362420.5335135 -TotalMilliseconds : 18362420533.5135 -I've contained this first part in our Begin block. The Process block does the main code. -Now I need to get my age in Years, Months and Days. This is where the [math] data type is used. I'm using the 'Truncate' property as I don't want to do anything fancy like round up my numbers. Adding the .typename of Days to my $diff variable and dividing by $daysInYear variable I can get my age in years. -The next two, months and days required a tweak to the algorithm. -I ended up using a maths term called a 'Mod'. Now I’m not talking about youth culture and style in the sixties (Mods and rockers anyone ??), but the Modulus Math Operator. Basically the Modulus Operator returns the remainder when the first number is divided by the second. So for example: -1 mod 3 = 1 (or 1 % 3 = 1) -2 mod 3 = 2 -3 mod 3 = 0 -4 mod 3 = 1 -The operator sign used is % for Modulus. Not to be confused for the alias of foreach in PowerShell. For days in a month, I used the average of 30. -I thought it would be fun to add the star sign as well. I was after something that could tell me, "is this date in this date range?". One of the properties of 'get-date' is DayOfYear. -Finding if a number is in a range is pretty straight forward, For example: - - -`5 -in 1..10 -`Which gives a Boolean result. -Now if I convert my date ranges into days of the year then I can match the day of the year I was born against the ranges of days for star signs. I've used a switch statement to check against multiple conditions. Within a scriptblock I’ve asked if the value I’m passing is 'in' the array of dates for each star sign. The match will return the star sign and is held in the $starSign variable. -The Final part of the process block is to work out how many days until your next birthday. By capturing the current date, formatting the date of birth by removing the year born, adding the current year and finally subtract the amended date of birth against the current date. Phew! -This will leave a number of days until your next birthday. The 'if' statement is added if your birthday has already happened at the time of the code, it simply reverses the sum to give a positive number. -The end block displays the three captured results to the host. -I hope you have enjoyed this post and can see the many options possible for dates in PowerShell. -Feel free to download the script from my GitHub [https://github.com/Gbeer7/Get-Age.git](https://github.com/Gbeer7/Get-Age.git) - - -`function Get-age { - param( - [Parameter(Mandatory=$true, - HelpMessage="Date must be written as dd/mm/yy", - Position=0)] - [ValidatePattern("^(0[1-9]|[12]\d|3[01])/(0[1-9]|1[0-2])/(\d{2})$")] - [string]$Bday - ) -Begin { - # use 'get-date' to convert '$Bday' Variable - $cDate = (get-date -Date $Bday) - # from today's date subtract birth date - $diff = (Get-Date).Subtract($cDate) -} -Process { - # Work out Years, months and days - [int]$daysInYear = '365' - [int]$averageMonth = '30' - # years - $totalYears = [math]::Truncate( $($diff.Days) / $daysInYear ) - $totalMonths = [math]::Truncate( $($diff.Days) % $daysInYear / $averageMonth ) - # days - $remainingDays = [math]::Truncate( $($diff.Days) % $daysInYear % $averageMonth ) - # Your star sign - $thisYear = (get-date).Year - $starSign = - switch ($cDate.DayOfYear) { - { $_ -in @( ((get-date 22/12/$thisYear).DayOfYear)..365; 0..((get-date 19/01/$thisYear).DayOfYear) ) } { "Capricorn" } - { $_ -in @( ((get-date 20/01/$thisYear).DayOfYear)..((get-date 18/02/$thisYear).DayOfYear) ) } { "Aquarius" } - { $_ -in @( ((get-date 19/02/$thisYear).DayOfYear)..((get-date 20/03/$thisYear).DayOfYear) ) } { "Pisces" } - { $_ -in @( ((get-date 21/03/$thisYear).DayOfYear)..((get-date 19/04/$thisYear).DayOfYear) ) } { "Aries" } - { $_ -in @( ((get-date 20/04/$thisYear).DayOfYear)..((get-date 20/05/$thisYear).DayOfYear) ) } { "Taurus" } - { $_ -in @( ((get-date 21/05/$thisYear).DayOfYear)..((get-date 20/06/$thisYear).DayOfYear) ) } { "Gemini" } - { $_ -in @( ((get-date 21/06/$thisYear).DayOfYear)..((get-date 22/07/$thisYear).DayOfYear) ) } { "Cancer" } - { $_ -in @( ((get-date 23/07/$thisYear).DayOfYear)..((get-date 22/08/$thisYear).DayOfYear) ) } { "Leo" } - { $_ -in @( ((get-date 23/08/$thisYear).DayOfYear)..((get-date 22/09/$thisYear).DayOfYear) ) } { "Virgo" } - { $_ -in @( ((get-date 23/09/$thisYear).DayOfYear)..((get-date 22/10/$thisYear).DayOfYear) ) } { "Libra" } - { $_ -in @( ((get-date 23/10/$thisYear).DayOfYear)..((get-date 21/11/$thisYear).DayOfYear) ) } { "Scorpio" } - { $_ -in @( ((get-date 22/10/$thisYear).DayOfYear)..((get-date 21/12/$thisYear).DayOfYear) ) } { "Sagittarius" } - } - # Work out how many days until birthday - $now = [DateTime]::Now - $dm = get-date $Bday -UFormat "%m/%d/" - $Days = [Datetime]($dm + $now.Year) – $Now - # If birthday has happened this year change sum - if (!($Days -ge 0)) { $Days = $now - [Datetime]($dm + $now.Year) } -} -End { - # display - "`nYou are {0} year(s), {1} month(s) and {2} day(s)" -f $totalYears, $totalMonths, $remainingDays - "Your Star sign is: " + $starSign - # and... - if ($cDate.Year -eq (get-date).Year) { - "You have another $($daysInYear - $diff.Days) days until your birthday" # If you are under 1 years old - } else { - "You have another $($Days.days) days until your birthday" # over the age of 1 - } -} -}# Function End -` diff --git a/content/articles/2016-08-18-faq-powershell-on-linuxmac.md b/content/articles/2016-08-18-faq-powershell-on-linuxmac.md deleted file mode 100644 index 16a5b7063..000000000 --- a/content/articles/2016-08-18-faq-powershell-on-linuxmac.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "FAQ: PowerShell on Linux/Mac" -authors: - - Don Jones -date: "2016-08-18T21:02:51+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/08/faq-powershell-on-linuxmac/ ---- - -_Be sure to check back often, as we'll add to this._ - - -## So does this mean I'll be able to run [add your favorite module name here] on Linux/Mac? - -Likely not. PowerShell on Linux/Mac is, at present, "PowerShell Core," which is a subset of the total _Windows_ PowerShell product. Similar situation to PowerShell on Nano. So any module that requires something outside Core, won't run. -And further, most modules have dependencies on underlying technologies in Windows. The SMBShare module, for example, depends on CIM classes that only exist on Windows. -So many add-in modules _won't, _in fact work on Linux - because they're designed to manage Windows machines. Over time, I'm sure we'll see modules that only run on Linux and/or Mac, because they're tied to dependencies on those operating systems. -Ideally, of course, you can always remote to the OS of your choice and run whatever commands it has. And from [The Register][1]: - -> Vendors with PowerShell libraries for their products will be able to port them to the new Core version, and early examples are AWS (Amazon Web Services) and VMware. Steve Roberts, AWS Software Development Engineer, has shown the AWS Tools for PowerShell running on a Mac; and VMware's Alan Renouf has done a similar demonstration using vSphere PowerCLI. "We’ve got commands that will manage every aspect of vCenter administration already," said Renouf. - - - -## Snover's blog post mentioned Remoting over SSH. So does that mean I can Remote into any Linux box? - -No, not exactly. It's worth understanding, first, how the existing Remoting over WS-MAN works. In Remoting, you type or compose a command on one node. It is packaged into XML, and transmitted as text over the WS-MAN protocol. The receiving node unpackages it, runs the command, and _serializes_ the resulting objects into XML. That XML is sent back, again over WS-MAN (which is based on HTTP), to the originating node. The originating node _deserializes _the XML to recreate the original objects. -Remoting over SSH will work exactly the same way, except that SSH will be used to transmit the XML text back and forth, rather than WS-MAN. This isn't the same as a simple SSH session where you're just sending keystrokes to the remote machine. A "plain" Linux machine's SSH daemon wouldn't know what to do with the XML-packaged traffic used by Remoting. Remoting over SSH will require both nodes to be running PowerShell. SSH isn't the end-game, here; it's merely being used to get text from one place to another. This isn't "PowerShell SSH-ing into a remote machine," either. PowerShell isn't an SSH client or server, in that sense. -Microsoft has already said they plan to release an SSH server and client for Windows. _That_ will get you the plain-Jane SSH interactive sessions that you're used to. SSH, in that scenario, works a lot like encrypted Telnet (it's based on Telnet, after all, as is nearly every other Internet protocol). You press a letter on your keyboard, and it's sent to the remote machine, which then echoes it back to you, so the letter also appears on your local console. When you hit enter to run a command, the text output is sent to your console. "Plain" SSH is a purely text-based thing - while PowerShell's strengths come from its use of objects, rather than text. -So it's important to differentiate, in your mind, "using SSH the way I'm used to" and "Remoting using SSH as a text transport." There's actually precedent for what Remoting is doing: SCP. SCP encodes binary files as a text stream (vaguely like SMTP does), and uses SSH to transmit that text. It's then decoded into the original binary on the other end. But although SCP _uses_ SSH under the hood, we certainly don't think of it as "using SSH" the way we do when we have an interactive SSH login on a remote box. - - [1]: http://www.theregister.co.uk/2016/08/18/microsoft_brings_powershell_to_linux_and_mac_publishes_as_open_source/ diff --git a/content/articles/2016-08-18-powershell-is-open-sourced.md b/content/articles/2016-08-18-powershell-is-open-sourced.md deleted file mode 100644 index 8c4943849..000000000 --- a/content/articles/2016-08-18-powershell-is-open-sourced.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: PowerShell is Open Sourced -authors: - - Richard Siddaway -date: "2016-08-18T16:05:46+00:00" -categories: - - Announcements - - PowerShell for Admins - - PowerShell for Developers -aliases: - - /2016/08/powershell-is-open-sourced/ ---- - -For those of you that have been at PowerShell Summits over the last few years you’ll have heard Jeffrey Snover state that he wanted to take PowerShell to other platforms. - - - Now its happened - - - Jeffrey has announced that an ALPHA release of PowerShell is now available for Linux and Mac.  Currently available for Ubuntu, Centos, Red Hat and Mac OS X with more to come - - - The announcement is at - - - https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/ - - - Also see PowerShell blog - - - https://blogs.msdn.microsoft.com/powershell/2016/08/18/powershell-on-linux-and-open-source-2/ - - - Some  points to note: - - - ISE isn’t available as part of the alphas release but VSCode is available for Linux and Mac giving an consistent editor across the platforms - - - PowerShell remoting will be extended to use Open SSH as well as WSMAN - - - Planned enhancements include: - - - Additional Linux Distros covered – parity with .NET Core. - - - Writing Cmdlets in Python and other languages - - - PSRP over OpenSSH - - - WSMan based remoting to downlevel versions of Windows and WSMan based PSRP on Linux. - - - Editor Services and auto-generated GUI - - - Unix-style wildcard expansion - - - Increasing test code coverage for Windows and Linux editions - - - Continue increasing cmdlet coverage for Linux and Windows - - - REMEMBER this an ALPHA release – there’s still a lot to do and its a open source project so community effort is required - - - Enjoy diff --git a/content/articles/2016-08-19-why-powershell-on-linux-is-such-an-accomplishment.md b/content/articles/2016-08-19-why-powershell-on-linux-is-such-an-accomplishment.md deleted file mode 100644 index fe7a2fed7..000000000 --- a/content/articles/2016-08-19-why-powershell-on-linux-is-such-an-accomplishment.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Why PowerShell on Linux is Such an Accomplishment -authors: - - Don Jones -date: "2016-08-19T15:36:08+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/08/why-powershell-on-linux-is-such-an-accomplishment/ ---- - -Yesterday, Microsoft [announced][1] that Windows PowerShell - which I suppose we'll just call "PowerShell," now - has been open-sourced, with PowerShell Core builds being made available for various Linux distros as well as macOS. -This is a big deal, but not exactly for the reasons you might think. - - -## That .NET Shell Guy - -PowerShell's genesis goes back to 2002 - and even earlier, really - when Jeffrey Snover wrote "[The Monad Manifesto][2]." He was trying to take a top-down approach to solving a long-standing problem with Windows administration, one that VBScript and other approaches had failed to fully address. -Problem was, Snover was proposing an administrative shell, and scripting language, _built on top of the .NET Framework. _That's not inherently a bad thing; tens of thousands of line-of-business applications have been written in .NET, and along with Java, it's probably one of the most popular business software frameworks on the planet. Thing is, Snover was suggesting this at a time when .NET Framework-based projects were failing left and right _inside_ Microsoft. This was in the "Longhorn" timeframe, when projects like WinFS - touted as the very basis of a new generation of Windows - had epically failed to deliver. Microsoft wound up ["decoupling" Longhorn from .NET][3], and now there's this loudmouth running around trying to build a _shell_ on it? -I won't say that Jeffrey was a pariah internally for a period of time, but he certainly had his battles to fight. -And he won. - - -## The PowerShell Era - -Launching in 2006, PowerShell 1.0 was in many ways the "minimal viable product" the team could have shipped. Notably, it lacked Remoting, something which would hold PowerShell back until 2.0 shipped a couple of years later. But Snover and his team, with 1.0, still accomplished the near-unimaginable: they convinced the Exchange Server team to go all-in, and build an almost model implementation of how to use PowerShell for administration. Exchange Server 2007 built its very GUI on top of PowerShell, just as Snover had imagined in his Manifesto. It's perhaps hard to imagine, a decade later, how incredible an accomplishment this was for Microsoft. Exchange Server was very much the flagship product of the time. Pretty much everyone bought Exchange Server, and to make this big a flip was a big deal. -To be sure. the Exchange Server team wasn't without their worries. In fact, the team hedged its bets in a big way. Rather than instrumenting the server directly in PowerShell, the team built an entire abstraction layer, and wrote PowerShell commands _to that. _That way, they reasoned, if this ".NET Shell thing" was a flop, they could rip it out and replace it with something else, and do so fairly quickly. -PowerShell wasn't a flop. - - -## In Lockstep with the Vision - -Few realize it, but every version of PowerShell up to, and including, 4.0 were created in lockstep with the original Manifesto. While each version introduced a bevy of new features, the "headline" feature in each was taken straight from the Manifesto: - - 1. A composable command-line shell and scripting language - 2. Remoting - 3. Workflow - 4. Desired State Configuration - -Snover and the Windows Management Framework (WMF) team - of which PowerShell and its supporting technologies are a part - kept marching firmly in the direction he'd outlined. And that's not to in any way suggest it was a one-man show. Luminaries like Bruce Payette, who led much of the core language development, helped make PowerShell accessible to newcomers and familiar-feeling to programming pros. Guys like Lee Holmes not only helpd move development forward, but more recently gave the shell a stronger security focus. Dozens of unseen and unsung heroes helped make sure PowerShell was meeting the needs of its audience (I'm reminded by one exercise at a Microsoft MVP Summit, where MVPs helped reproduce and categorize filed bugs so that the team could start working through them, and another incident where Program Manager Dan Harman read through _hundreds_ of suggestions in Microsoft Connect to help bring as many of them to life as possible). There are team members who've been with the product for a decade, something that's nigh unheard-of in Microsoft. - - -## The Role of Community - -The team knew at the outset that PowerShell _would_ flop if people weren't using it, and becoming passionate about it. Numerous team members began to engage with the community on a regular basis to help that community come to life. The PowerShell MVPs - honestly, one of the most engaged and critical groups of MVPs within the MVP program - encouraged people to learn the shell, poke at it, and complain about any shortcomings they ran across. This vocal community made a serious impact. An early build of PowerShell 3.0 included a ReadMe file listing some 80-odd new features and changes, _along with the names of the people who'd suggested them. _Snover himself remains a regular conference guest. Payette and Holmes wrote bestselling books. Numerous team members appeared at Microsoft TechEd and Ignite. -And the team supported independent community efforts whenever possible. Managers like Kenneth Hansen, Angel Calvo, Erin Chapple, and more made sure community leaders had access to answers and resources when they needed them (scarce as those resources could be, at times), and the entire team worked to give as much of their time as possible to helping the independent community thrive. Sites like PowerShell.org and PowerShellMagazine.com,  the PowerScripting Podcast, and conferences like PowerShell Conference Asia, PowerShell Conference Europe, and the PowerShell + DevOps Global Summit would have been impossible without the generous support the team gave. -And that community thrived. Perhaps the biggest "wins" came with Advanced Functions (affectionately called "script cmdlets") and Desired State Configuration, where we no longer had to rely on Microsoft to provide us with the tools we needed, but could instead code them up ourselves. -And _that_ was a turning point. - - -## Baby Open Source Steps - -Understand that open source had long been the enemy at Microsoft. The company's attempts to fight back against Linux and establish a Windows-only datacenter created a culture that deeply distrusted open source, and in many ways regarded it as the opposite of what Microsoft was all about. But _many_ within Microsoft regarded open source as a way to better provide customers with what they actually needed, and a way to empower customers to create their own solutions, rather than relying entirely on what Redmond could produce. -The PowerShell team's first step into open source was to simply release the Desired State Configuration Resource Kit on GitHub. It wasn't a big step, as the Kit modules were all script anyway, making the source "open" kind of by default. That happened at almost the same time the company released an open-source (!) Local Configuration Manager implementation for Linux (!!). Satya was in charge now, after all, and he'd made it clear that _Microsoft Loves Linux. _ -Not long after, Desired State Configuration's documentation was open-sourced (!!!) as a set of Markdown (!!!!) documents, allowing anyone to contribute and make corrections. That was quickly followed by _all_ the PowerShell core documentation being open-sourced (!!!!!). Haters gonna hate, of course, and Microsoft was quickly accused by some as simply "taking advantage" of the community for "free bug testing and documentation writing." Which, of course, is the _whole point_ of the OSS movement. Customers were now _empowered. _We didn't have to wait for Microsoft to fix a typo, or file an expensive support incident. We could fork, fix, and submit a PR. -Snover made it clear as far back as 2014 that the open-sourcing of PowerShell itself was "inevitable," although he could never comment on a timeline. The blocker, he felt, was that .NET itself - which PowerShell runs on - was closed-source, making an open-source PowerShell fairly useless. - - -## The Dominoes Begin to Fall - -Of course, Microsoft recently open-sourced .NET Core, bringing it - and things like ASP.NET Core - to Linux and Mac. Suddenly, Snover's "blocker" wasn't a block. Well, kind of. PowerShell needed a lot more than .NET Core. -Except for _PowerShell Core, _which was designed to run on the extremely stripped-down Nano Server version of Windows Server 2016. PowerShell Core ran on .NET Core. .NET Core was open-sourced. -And so, yesterday, PowerShell itself followed into the world of open source. It's [hosted on GitHub][4], for pity's sake, which is about the most non-old-school-Microsoft thing I can imagine. And the first pull requests have already been submitted. -But I want you to look back at where PowerShell has been these past 10+ years. It began as a simple document, and nearly didn't live, thanks to the negative internal feelings on .NET at the time. But it _did_ live, thanks in part to a strong vision, and in part to a passionate team of designers and developers who knew their ".NET shell" would make a difference. Today, PowerShell is deeply embedded into nearly every Microsoft business product, and is becoming more so every day. All of this happened in about the same time it took VBScript to become widely accepted by administrators - but PowerShell, in that time, has come _leagues_ further. - - -## Sure... but on _Linux_??? - -Of course, none of the forgoing in any way explains why PowerShell on Linux (or macOS) makes any sense. These operating systems are inherently text-based, and their existing shells have been getting the job done for decades. So why PowerShell? Why now? -First, I think it's telling that PowerShell on *nix (which includes, for me, macOS, based as it is on BSD) is _respectful. _On Windows, we have Unix-like aliases - ps, ls, and the like - which run PowerShell-equivalent commands. Not on *nix. Run **ps** and you'll get the same **ps** you've always run; ditto with ls, man, and all the others. PowerShell isn't here to trample the commands you know. But it _can_ integrate those commands into its pipeline, feeding them objects-as-text, and consuming the text they output. "Objects" simply being a defined data structure, many familiar Linux command-line compositions can be done more easily and in a more readable sense in PowerShell, since text manipulation is less critical. Command-lines become less fragile, too, since these data structures can remain the same even when the underlying command is updated. Leading up to the release of PowerShell on *nix, I had the opportunity to work with many die-hard Linux admins who, once they agreed to keep an open mind, started to really appreciate what PowerShell could do for them. -And don't forget that _Microsoft Loves Linux. _Having a single shell experience, and cross-platform shell connectivity, makes it easier to run Windows and Linux _together. _It'll make it easier to manage Linux in Microsoft's Azure cloud. It gives us, the IT community, _options, _where before we didn't have any. -And I think, tellingly, PowerShell on *nix represents a sea change at Microsoft. You're no longer being asked to buy into a single-stack solution. Microsoft's happy to let you mix and match as needed. Most importantly, they think you'll use their products - like PowerShell - because _they're the best tool for the job. _In other words, Microsoft's willing to _compete,_ and have you use their products because you choose to, not because you've been locked into them._ _That's a wonderful thing. There's the implied risk of losing the competition, but it's a risk Old Microsoft has tried to mitigate and remove as much as possible. Now, we have the option to use Office wherever we want - not tied to Windows. PowerShell is no longer tied exclusively to Windows. We're seeing that attitude work both ways, too, with Bash on Windows, SSH on Windows, and more. These products can _compete_ for your attention, and that will make them _all_ better products in the long run. -So congratulations to Jeffrey Snover, to all the members of the Windows Management Framework team, and to Microsoft itself. And congratulations to PowerShell itself - and to the global community that brought us to this inevitable new beginning. - - [1]: https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/ - [2]: https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiRtrzc1M3OAhVD7GMKHVe8Cz4QFggcMAA&url=https%3A%2F%2Fwww.gitbook.com%2Fbook%2Fdevopscollective%2Fthe-monad-manifesto-annotated%2Fdetails&usg=AFQjCNEi5p7CeZIrvKWKovnnBb7zLpyCGw&bvm=bv.129759880,d.cGc - [3]: http://www.theregister.co.uk/2005/05/26/dotnet_longhorn/ - [4]: http://github.com/powershell/powershell diff --git a/content/articles/2016-08-21-create-custom-monitors-with-powershell.md b/content/articles/2016-08-21-create-custom-monitors-with-powershell.md deleted file mode 100644 index d786dd410..000000000 --- a/content/articles/2016-08-21-create-custom-monitors-with-powershell.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Create Custom Monitors with PowerShell -authors: - - msorens -date: "2016-08-21T23:44:53+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks - - Tools -aliases: - - /2016/08/create-custom-monitors-with-powershell/ ---- - -Sometimes, as a developer, you want to be be able to keep track of free space on a drive, the size of a log, the load on your CPU, the number of users logged in, etc. With PowerShell, it is typically just a matter of finding the right cmdlet amidst the large (and rapidly growing) pool of cmdlets provided by Microsoft and by third parties. Then you just run _Get-Foo_ to check details about the _foo_ resource. And then you come back 5 minutes later and run it again because you want to see how it changes over time. -But wouldn't it be nice if you could just have it run automatically at regular intervals in a separate window that you could just keep in the corner of your screen? Well, I found the barebones of just such a utility sometime ago (authored by Marc van Orsouw,  aka ‘thePowerShellGuy’). His original post is no longer available, but I expanded upon his code and, over time, added features, bug fixes, and enhancements, making it more useful and more user-friendly. Here are a few screenshots of the Monitor Factory in action. -_Monitor the size of a database_ - - -`Start-Monitor -AsJob {`Invoke-Sqlcmd 'DBCC SQLPERF(logspace)' |`Select-Object 'Database Name','Log Size (MB)','Log Space Used (%)',HasErrors`} -`![Database Size Monitor](https://powershell.org/wp-content/uploads/2016/08/monitor-db-size-1.jpg) -_Monitor drives on a system_ -![Drive Capacity Monitor](https://powershell.org/wp-content/uploads/2016/08/monitor-file-size-1.jpg) -_Monitor longest running DB queries_ -![Long-runnning DB Query Monitor](https://powershell.org/wp-content/uploads/2016/08/monitor-queries-1.jpg) -[Build Your Own Resource Monitor in a Jiffy][1] reveals how quick and easy it is to get started with the Monitor Factory. - - [1]: https://www.simple-talk.com/sysadmin/powershell/build-your-own-resource-monitor-in-a-jiffy/ diff --git a/content/articles/2016-08-22-why-objects-remoting-and-consistency-are-such-a-big-deal-in-powershell.md b/content/articles/2016-08-22-why-objects-remoting-and-consistency-are-such-a-big-deal-in-powershell.md deleted file mode 100644 index 1010fa4f9..000000000 --- a/content/articles/2016-08-22-why-objects-remoting-and-consistency-are-such-a-big-deal-in-powershell.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: "Why \"Objects,\" Remoting, and Consistency are Such a Big Deal in PowerShell" -authors: - - Don Jones -date: "2016-08-22T20:39:49+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/08/why-objects-remoting-and-consistency-are-such-a-big-deal-in-powershell/ ---- - -As PowerShell begins to move into a cross-platform world, it's important to really understand "why PowerShell." What is it, exactly, that sets PowerShell apart? Notice that I do not mean, "what makes it better," because "better" is something you'll have to decide on your own. I just want to look at what makes it _different. _ - - -## It's the Objects - -Folks often say that Linux is a text-based OS, whereas Windows is an object-based OS. That's a convenient simplification, but it isn't exactly accurate. And to understand why PowerShell is different, you need to understand the _actual_ differences - and how Linux and Windows have actually come closer together over the years. -*nix - including Unix, macOS, and Linux - is based on very old concepts. "Old" isn't "bad" at all; much of Linux' current flexibility comes from these old concepts. Core to the Unix ethos is the fact that OS configurations come from text files. There's no Registry, there's no database, it's just text files. Kinda like, um, Windows was, back in the old days, with .ini files (and where do you think the idea for those came from). Text files are super-easy to view, search, modify, and so on. Heck, when I wrote my first Point of Sale system, it was largely text-based, because text files were super-easy for us to troubleshoot remotely, compared to a complex ISAM table structure. -Windows, on the other hand, is an API-based operating system. When you want to query an OS configuration element, you don't just look in a text file - you run code, and query an API. When you need to make a change, you don't just change a text file and hup a daemon - you run code, and submit your changes to an API. -When you need to pass data from one hunk of code to another, you need to have an agreed-upon structure for that data, so that the code on both ends understands the data. These structures are called _objects. _Traditionally, Unix didn't really have structured data. The file format used by Apache for its configuration was different from the format used by Iptables. Which is totally fine, by the way, because those two things never need to talk to each other. But when you start considering all the things the OS can do - users, file permissions, groups, ports, you name it - you started to end up with a lot of different formats. Indeed, the main reason that Unix had (has?) a reputation for being a complex OS to administer is largely because all of its data is scattered hither and yon, and all in different formats. -That's been changing, though. You're starting to see more and more new projects pop up that rely on _structured_ configuration data, often using JavaScript Object Notation (JSON), although in other cases something like XML. This is a big deal for *nix administration. Why? -Traditionally, re-using the output of a Unix command was complex. Output was pure text, sent to your console via the stdout "channel." Commands typically formatted their output for human eyeball consumption, so if you wanted to send that output instead to another command, you had to do a lot of text parsing. "Skip the first two rows of output, and then for each remaining row, go over 32 columns and grab 5 columns worth of text." Or, "skip the first row, and then in each subsequent row, look for text matching this [regex] and return only the matching text." Unix admins tend to _own_ regular expressions for this reason. -But the problem with all that is that your workflow, and your tooling, becomes very version-bound. Nobody can ever improve tools like **ps**, because so many scripts rely on the output being exactly as it is today. Instead, you create entire new versions of those tools - which people then take dependencies on, and which can then never change, unless they provide some backward-compatibility switches to force old-version output. The end result is a highly fragmented landscape of tooling, a very high learning curve for incoming administrators, and a high amount of overhead in automating business processes. -When you code a command-line utility in 1973, it's easy to imagine it'll never need to change. On the other hand, when you start building APIs in the 1990s, it's much more obvious that change will be constant. By passing objects - structured data - between themselves, APIs provide a kind of inbuilt forward-compatibility. If v1 of an API outputs objects that have 10 properties, v2 can easily add five more without breaking anything downstream. Anything consuming those objects won't care if there's extra data, so long as the data it was expecting is all there. Object-based data doesn't have any sense of "ordering," so it doesn't matter if the "first" property is Name or if the "first" property is Size. Consumers refer to properties by name, not by position, and the magic of the API itself makes it all match up. -Objects also lend themselves to hierarchies of data. A computer object can have a Drives property, which can be a collection of Drive objects, which can have a Files property, which is a collection of File objects, and so on. Structured data like XML and JSON handle these hierarchies with ease, as do object-oriented APIs; textual output - which is essentially a flat-file at best - doesn't. -So what sets PowerShell apart from other shells is the fact that its commands pass objects from one to another. When you reach the end of a "chain," or pipeline, of commands, the shell takes what's left and generates textual output suitable for human eyeball consumption. So you get the advantages of a text-based command - easy to read output - and the advantages of working with an API. For example, in PowerShell for Linux, Microsoft ships a command that wraps around the Cron feature. Cron is configured from a text file; Microsoft's command "understands" the text file format, and turns it into objects. That means nobody will ever have to grep/sed/awk that text file again - instead, you can deal with structured data. That's a really good example of taking something PowerShell is good at - objects - and applying it to something Linux is really good at - Cron. It's not forcing Cron to look like the Windows Task Scheduler in any way; it's simply applying a new shell paradigm to an already-solid OS component. -This concept of a shell passing objects - again, just structured data - was unique enough that Microsoft was [granted a patent][1] for it (the patent also includes other innovations). - - -## Remoting - -The parent also touches on _remoting, _which was equally innovative. Yes, I know that Unix has _forever_ had the ability to log into a remote machine, first using things like Telnet, later SSH, and even later still more things. But that's _remote logon, _and it's not Remoting. -With remote logon, you're essentially turning your local computer into a dumb terminal for a remote computer, a concept literally as old as computers themselves. It's a 1:1 connection, and it was fine when a given company didn't have more than a few machines. But modern, cloud-based architecture involves _thousands_ of machines, and 1:1 doesn't cut it. Remoting enables 1:many connections - "here is a command; go tell these 1200 computers to run it individually, using their own local resources, and then send me the results - as objects." Going forward, PowerShell can use either WS-MAN or SSH as the low-level transport for that conversation, but the protocol isn't important. It's the idea of running one command _locally, _piping that output to another command _which runs remotely, _and then taking _that_ output and piping it to yet more commands that run _locally. _This mixing-and-matching of computing resources and runtime locations is _huge. _ - - -## Consistency - -And finally, the one argument that's the toughest to make. Plenty of *nix admins, and plenty of old-school MS-DOS command-line admins, take great pride in their mastery of obscure command-line syntax. It sets them apart from lesser humans, provides a veneer of job security, and proves their dominance of their field. -Unfortunately, it's bad for the planet. -Look, maybe your country is in fine economic shape (_ahem, _Norway), but here in the United States we have a fairly precarious hold on Biggest Economy in the World. We aren't a manufacturing powerhouse. We basically have two experts: information technology and Hollywood, and we're sometimes sorry about the latter. But for our economy to thrive in this century, we need all hands on deck when it comes to IT. That means a high barrier of entry, and the need to memorize arbitrary and obscure syntax, ain't gonna cut it. Computing is hard enough without making it artificially more obscure through syntax. - - -`chmod ugo+rwx sample.sh -`Yeah, see, that's too hard to teach a 12-year-old. - - -`Set-FilePermission -FileName sample.sh -Permissions Read,Write,Execute -Principal User,Group,Others -Action Add -`See, you still need to know _what's going on_ in both cases, but the syntax is much easier to read and understand without having to look it up. The command syntax becomes less obscure, and more self-documenting. More maintainable. Obviously, this is just a bogus example, but it illustrates the _pattern_ of PowerShell - meaningful command names, meaningful parameter names, and meaningful parameter value enumerations. And I use _meaningful_ in the correct way, as in, "full of meaning." -PowerShell still allows for a shorthand syntax, if you're just in a hurry - - - -`sfp sample.sh -p r,w,x -for u,g,o -a add -`- but you're not forced into it, and it's easier to figure out what those things mean (again, this is a bogus example meant to show the shell's syntax pattern, not an actual run-able command). - -## So... that's the big deal - -And so that's what makes PowerShell _different. _It's not going to obviate Bash on Linux anytime soon, although it's happy to let you run your same old text-based commands, and even integrate their output as best it can into its object-based pipeline. But at least now, anyone approaching PowerShell for the first time can understand _what makes it different, _and decide for themselves if they think that's worth an investment to learn to use PowerShell well. - - [1]: http://appft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PG01&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.html&r=1&f=G&l=50&s1=%2220050091201%22.PGNR.&OS=DN/20050091201&RS=DN/20050091201 diff --git a/content/articles/2016-08-23-microsoft-did-what.md b/content/articles/2016-08-23-microsoft-did-what.md deleted file mode 100644 index 6f9ec9e4b..000000000 --- a/content/articles/2016-08-23-microsoft-did-what.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Microsoft did WHAT? -authors: - - Missy Januszko -date: "2016-08-23T01:51:05+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/08/microsoft-did-what/ ---- - -Unless you’ve been living under a rock for the last couple of days, you already know that Microsoft announced last Thursday that the shell/scripting language formerly known as “Windows Powershell” is now supported on Linux and MacOS and that Powershell has been open-sourced. And for days, thoughts of “how can I use this?” or “I wonder if ‘x’ will be supported” have been flying through the minds of every system architect as we internally grapple with the possibilities of what could be, while at the same time trying to understand Microsoft’s motivation for this radical change. -Only the change isn’t so surprising if you think about the changes that Microsoft has been making leading up to this announcement. Separating Powershell Desktop Edition and Core Edition in WMF 5.1. Announcing SQL Server on Linux – after all, IT professionals are going to need a way to administer that SQL instance and it isn’t going to be through a GUI. Supporting Powershell on Linux seemed like a logical next step. -But it is likely just a step along the road to heterogeneous system management. Microsoft Technical Fellow and Powershell inventor Jeffrey Snover isn’t at all secretive over the fact that the vision is built upon Microsoft’s Operations Management Suite (OMS), a suite of automation and management tools that needs to be able to configure, control, manage, monitor, and self-heal a workload that runs anywhere and on any operating system. -From the perspective of a system architect that isn’t typically on the bleeding edge of technology, I am still extremely excited over this announcement. Why? The possibilities seem endless. For one, applications that run on either Windows or Linux or a combination of the two can now be configured by the same language, or maybe even the same set of well-designed scripts. Second, the possibility of using Desired State Configuration (DSC), or third-party tooling such as Chef or Puppet in conjunction with DSC, means I can keep \*all\* servers in compliance with their configurations using the same tooling. Third, what Devops engineer wouldn’t love having spent a few years learning a scripting language like Powershell only to have its reach extended to other platforms? This change invariably makes us more valuable to the company by being able to take on additional management responsibilities by using the skills we already have. It can then lead to even more cross-platform learnings and opportunities. I definitely plan to learn more about Linux and how I can help build cross-platform tools. If you have similar interests, here are some great resources to get you started! - - -I haven’t even scratched the surface of thinking about all of the ways I want to take advantage of Powershell on Linux, and I have lots of exploring to do to find out what can or can’t be done – but the energy of the entire Powershell community over these changes certainly carries over to me as well. I’m excited to find out what is possible, to build what may not have been possible, and to contribute back to the Powershell community. So kudos to you, “new Microsoft”, for energizing the entire community of Powershell enthusiasts. I can’t wait to see what’s next. diff --git a/content/articles/2016-08-24-heres-another-reason-to-contribute.md b/content/articles/2016-08-24-heres-another-reason-to-contribute.md deleted file mode 100644 index a5a0b465c..000000000 --- a/content/articles/2016-08-24-heres-another-reason-to-contribute.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Here's Another Reason to Contribute" -authors: - - Don Jones -date: "2016-08-24T11:30:14+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/08/heres-another-reason-to-contribute/ ---- - -[Jason Helmick][1] and I were talking last night, and we got onto the topic of expertise and respect. Kind of, "once someone really gets to that expert level, and they surpass their teacher in knowledge, you really respect them." I disagreed, and said, "no, I respect them the minute they start contributing to the world, and helping others." -We all, at some stage, get "outsider syndrome," where we think everyone else is so much smarter than us, that we've nothing of value to contribute. But that's never true. First of all, there's this thing called a "birth rate," meaning there's always new people coming into the field. Second, no matter what your level of expertise, you're _in it, right then._ "Experts" too often forget what it was like to be a beginner; a beginner _knows,_ and can often relate things that another beginner can understand more readily. -Take this [wonderful post by Missy][2] Januszco. Missy probably doesn't consider herself an expert, although she certainly held her own at my recent DevOps Camp. And she certainly wasn't the only one writing about open-source, cross-platform PowerShell Core that week. But she did it from a unique perspective, one that a lot of her readers can probably take a lot from. And she _did it -_ instead of just talking vaguely about giving back someday, she just did, and did it well. -PowerShell.org isn't a curated newsfeed for a select few; its _yours_. So if you don't have your own place to publish and share, email webmaster@ and let us set you up to write. Whenever you solve some problem, conquer some gotcha, or have a perspective on the latest PowerShell news, share. You **definitely** have something to offer. - - [1]: http://Http://twitter.com/thejasonhelmick - [2]: https://powershell.org/2016/08/23/microsoft-did-what/ diff --git a/content/articles/2016-08-26-ultimate-powershell-prompt-customization-and-git-setup-guide.md b/content/articles/2016-08-26-ultimate-powershell-prompt-customization-and-git-setup-guide.md deleted file mode 100644 index a27b91a13..000000000 --- a/content/articles/2016-08-26-ultimate-powershell-prompt-customization-and-git-setup-guide.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Ultimate PowerShell Prompt Customization and Git Setup Guide -authors: - - Matthew Hodgkins -date: "2016-08-26T05:25:27+00:00" -categories: - - Tips and Tricks - - Tutorials -aliases: - - /2016/08/ultimate-powershell-prompt-customization-and-git-setup-guide/ ---- - -Do you spend hours a day in PowerShell? Switching back and forth between PowerShell windows getting you down? Have you ever wanted "Quake" mode for your terminal? -If we are going to spend so much time in PowerShell, we may as well make it pretty. -![](https://hodgkins.io/images/posts/windows_git/sexy_powershell_prompt.png) -Check out the [Ultimate PowerShell Prompt Customization and Git Setup Guide][1] for how to: - - * Install and customize ConEmu - * Enable Quake Mode for your terminal - * Setup your PowerShell Profile - * Install and use Posh-Git - * Generate and use SSH Keys with GitHub - * Squash Git commits - - [1]: https://hodgkins.io/ultimate-powershell-prompt-and-git-setup diff --git a/content/articles/2016-09-02-unit-testing-is-pestering-the-hell-out-of-me.md b/content/articles/2016-09-02-unit-testing-is-pestering-the-hell-out-of-me.md deleted file mode 100644 index 48351656a..000000000 --- a/content/articles/2016-09-02-unit-testing-is-pestering-the-hell-out-of-me.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Unit Testing is “Pestering” the Hell Out Of Me -authors: - - Missy Januszko -date: "2016-09-02T17:31:14+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/09/unit-testing-is-pestering-the-hell-out-of-me/ ---- - -About a week or two before Devops Camp, the attendees were asked how much experience they had using Pester, because another attendee was preparing a discussion on Pester and wanted to gauge the other attendees’ comfort level. Learning Pester had been on my to-do list for a while, but I had procrastinated on it for far longer than I intended. I answered “Beginner” - although “complete and utter newbie” would have been more accurate - and I vowed to spend some quality time looking at Pester before arriving at camp. -There are some really great resources out there devoted to Pester, from beginner to intermediate to way-over-my-head. I read articles and watched videos. And I understood, in a conceptual kind of way, how to use Pester. Describe, Context, It, Mock, Assert-MockCalled – I understood what these things were used for. The examples made sense. I was ready to move on to trying it myself. But here is where I stumbled and recovered, and I would like your feedback and opinions on my discoveries. -I took a piece of code I was currently working on and decided that a small function in that code was the perfect function to attempt my first unit test on. I mean, it was the tiniest little function - 7 lines of code! What could possibly be easier? Right? -Boy, was I wrong. The struggle IS real. -In a nutshell, my function really is 7 lines – an If/Else statement and a For-loop – and inside each is an external call to an Active Directory cmdlet. Those would definitely need to be mocked. After all, we know or assume that Set-ADAccountControl and Set-ADObject do what they are supposed to. I was stumped at where to even start because after mocking these external calls – there isn’t actually anything left to the code! -Even after a wise person told me that “This probably isn’t a great example of a “Pester 101” example”, I was still determined to figure out how to write a Pester test to test this function, but I needed to set aside my thoughts of “I can’t figure out how to write a Pester test for this” and instead, start with “Figure out how to write a unit test for this.” My brain freeze wasn’t about Pester – it was about unit testing. What do I need to test? My next step was to do some reading up on general unit testing concepts. -I’m not opposed to buying a book on testing concepts, but I wanted some quick answers and not a research project just to get me started. I turned to “Dr. Google” and I found some useful definitions, both formal and informal, on what unit testing really is. But it wasn’t until I found a comment buried deep in a StackExchange forum post that I realized what my next steps were. - -**Red-Green-Refactor-Repeat** -**Red:** Write a test that fails. -**Green:** Write the simplest code that makes the test pass. For the first pass, don’t handle edge cases, just enough to make the test pass. -**Refactor:** Clean up the code and optimize if necessary. Make sure the test still passes. -**Repeat:** Now think about handling those edge cases and repeat the previous steps with tests, then code, to handle them. -The entire thread can be found here and the detailed explanation of the Red-Green-Refactor-Repeat concept in the comments is definitely worth a read: - - -When I started thinking about writing this article, I knew that I was struggling with the concept of unit testing and I had planned to include the code that I was looking to test as part of the blog. After doing the reading to try to wrap my brain around the concepts, I changed my approach. I’ve decided to scrap the original version of this code and try to use the above approach to re-develop the function instead. I plan to blog about my journey through this process in a future post. -Until then, I’d like to initiate a dialog with you, the readers: How do you approach unit testing? What is your thought process? What do you feel is important or not important to include in a unit test? diff --git a/content/articles/2016-09-06-nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas.md b/content/articles/2016-09-06-nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas.md deleted file mode 100644 index d4209ad68..000000000 --- a/content/articles/2016-09-06-nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Nearing Last Call for PowerShell Summit Topic Proposals (+ Topic Ideas!) -authors: - - Don Jones -date: "2016-09-06T14:04:52+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/09/nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas/ ---- - -Remember that our [Call for Topics is still open][1] until the end of September, if you'd like to submit. And, from our Summit Alumni Slack channel, here are a few things people said they'd like to see... - - * I would love to see a session on what it takes to build a PKI infrastructure in support of PowerShell operations ( stuff liked passing creds with DSC ) - this is something glossed over all the time as if it is not a big deal but I think it can be quite challenging for a lot of people to implement. - * Writing for Performance: Tips and Tricks to Write Faster Code - * Compiled cmdlets - how to create them and why you might want to (this got a **lot** of thumbs-up) - * Open source PowerShell hackathon.  Either one multi-hour (2, 3, 4?) window where people can break into groups and work on some open source PowerShell extension, or two sessions, one at the beginning of the event and one at the end.  The one at the beginning the presenters/organizers provide a set of possible project ideas to work on, and people interested can sign up/vote for projects which creates groups.  The one at the end gives groups an opportunity to share/demo what they produced.  Having a room where people can gather to work on it would be cool.  These don't have to be big projects.  They could be small things, like knocking off one or more issues for an open source project.  The end goal is to have a pull request submitted or a new project posted in GitHub or a new module submitted in the Gallery. _Now, to be clear, this isn't a session - but you can definitely propose it. We have some longer time slots on Wednesday for panels, and this might be something you could do then. _ - * examples of real world DSC usage - that was a comment I heard from a number of folks this year - * Practical Pipelines. ( Illustrate that release pipelines aren't just for DevOps-practicing shops, or public-facing software ) - * Build plans (and tools, like psake) - * Module design best practices (lots of thumbs-up on this one) - * Working with Open Source Projects (as a Contributor) - * Working with Open Source Projects (as a Maintainer) - * Applying Agile Software Development Methodologies to PowerShell - * Using for . (assumption: someone writes the equivalent of inspec wrapped around Pester) - -And if you read the above carefully, you'll notice that **we do also have some space for afternoon panels on Wednesday - so if there's a group discussion you'd like to lead, propose it! **Just be clear in the description you submit that you're proposing a panel. It'll be up to you to recruit panel members, which you can do on-site. We'll announce panels in need of panelists and direct them to you. - - [1]: https://powershell.org/2016/08/01/powershell-and-devops-global-summit-2017-call-for-topics/ diff --git a/content/articles/2016-09-19-powershell-devops-global-summit-2017-preview.md b/content/articles/2016-09-19-powershell-devops-global-summit-2017-preview.md deleted file mode 100644 index 13793cc46..000000000 --- a/content/articles/2016-09-19-powershell-devops-global-summit-2017-preview.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: PowerShell + DevOps Global Summit 2017 Preview -authors: - - Don Jones -date: "2016-09-19T19:55:14+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/09/powershell-devops-global-summit-2017-preview/ ---- - -As a quick reminder, our [Call for Topics is still open][1] for a few more days! Summ. Summit is very much intended to be a kind of mega-user group, not a "conference," so don't assume all the "professional" speakers have taken up all the speaking slots. We want **you** to participate! -In the meantime, while we're waiting on the content committee to select topics and before registration opens in early November, I wanted to offer a peek at what we're planning. - -## Deep Dive Day - -Sunday is now a formal "full day" of Summit, rather than a "pre-con" day. That means we'll be presenting both Intermediate and Advanced content, including an opportunity for you to dig into the new open-source PowerShell GitHub repo, learn about the layout of the code, review what the community's been up to with that code, and more. Sunday will also offer two Lab opportunities, one for Advanced Functions and one for DSC Resources. You'll be able to wander in at will, and share some of _your work_ with a domain expert, who'll offer critique and advice. We'll also have some pre-done scenarios, in case you'd like to try your hand and test your skills. The full four-day pass is expected to cost $1500, and will be the first opened for registration in November (3-day is expected to be $950 or $975, and will open in January or February). - -## All Together Now - -Monday (the first day you can attend on a 3-day pass) will feature an opening keynote by myself, a full session with ShellFather Jeffrey Snover, an update on PowerShell from team leaders, and our now-famous Lightning Demos from various developers on the team. We'll finish the day with a grand reception, where you can mix and mingle with everyone you've seen, and enjoy some quality food and beverages. - -## Breakout! - -All day Tuesday, as well as Wednesday morning, we'll feature our usual 45-minute breakout sessions on a huge variety of deep topics. We'll be covering DSC, pull servers, JEA, best practices, security, and SO much more, including sessions delivered by members of the PowerShell product team. We've got a full three tracks - more than last year! - of content planned. - -## Par-ti-ci-pa-tion - -We've noticed that Wednesday afternoons can drag a bit - so after lunch, we're going to roll out some great snacks and drinks. Wednesday afternoon will get more interactive, with a variety of Community Lightning Demos (sign up on site with the moderator), panel discussions, focus groups, and more. - -## On The Air - -We've expanded and refined our session recording capabilities, and you can expect better audio, as well as screen-capture recordings for every session (barring technical difficulties), something we haven't been previously able to do with this much content. All sessions are made available on YouTube within a couple of weeks of the event's conclusion (we do not live-stream, and we won't be posting sessions instantly each day). - -## Networking - -It ain't just for routers and switches - Summit remains dedicated to providing plenty of face time with your fellow PowerShell and DevOps enthusiasts. We'll offer additional evening fun (anyone interested in a trip to the Microsoft Museum one evening? We're looking into it), side rooms for breakout conversations, and of course we encourage everyone to _participate_ in breakout sessions by offering comments and asking questions. - -## Extra Bits - -2017 will be the Fifth Anniversary of Summit, and so we're bringing along some extra swag and collectible opportunities. If you attended in 2016, bring your 1-inch button to wear around your badge lanyard and show your alumni status (we'll have 2017 buttons, too). Some merchandise will only be available as an advance purchase, so watch PowerShell.org for details; other merch might be available on-site, but in very limited quantities, so be sure to get that 4-day pass! - -## Mark Your Calendars - -Sunday-Wednesday passes will open for registration the first week of November, 2016; we expect Monday-Wednesday passes to become available in January or February. As always, registration is limited to about 200 attendees (plus our speakers and the product team members), so _don't delay. _Because registrations are nonrefundable, we do not maintain a waitlist, and we fully expect to sell out - as we have every year. - - - [1]: https://powershell.org/2016/09/06/nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas/ diff --git a/content/articles/2016-09-22-changing-of-the-guard-at-powershell-org.md b/content/articles/2016-09-22-changing-of-the-guard-at-powershell-org.md deleted file mode 100644 index 588613f8c..000000000 --- a/content/articles/2016-09-22-changing-of-the-guard-at-powershell-org.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Changing of the Guard at PowerShell.org -authors: - - Don Jones -date: "2016-09-22T14:47:30+00:00" -categories: - - Announcements -aliases: - - /2016/09/changing-of-the-guard-at-powershell-org/ ---- - -It's a bit of a sad day at The DevOps Collective, which is the nonprofit that runs PowerShell.org. One of our Board of Directors members, Dave Wyatt, will be stepping down from his Director position this week. He wants to focus on his personal life a bit more, although he's still going to be responsible for our public Build Service, and he's going to continue contributing to the Pester project, so the community isn't losing him entirely. Dave's been a huge help, and a huge inspiration, at PowerShell.org, and he'll be greatly missed. -But our sadness is balanced by some happy news, too, as PowerShell.org Webmaster Will Anderson has agreed to fill Dave's seat. Will has brought a great enthusiasm to our team of volunteers, is also a PowerShell MVP, and also resides in Canada. Will's responsible for most of the photography you'll see in the upcoming PowerShell + DevOps Global Summit 2017 brochure, and he's been a great help in keeping PowerShell.org's website up and running. -So please join me in wishing our outgoing Director all the best, and in welcoming Will to the Board! diff --git a/content/articles/2016-09-22-powershell-happenings-at-ignite-2016.md b/content/articles/2016-09-22-powershell-happenings-at-ignite-2016.md deleted file mode 100644 index eeff2fe5f..000000000 --- a/content/articles/2016-09-22-powershell-happenings-at-ignite-2016.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: PowerShell Happenings at Ignite 2016 -authors: - - Don Jones -date: "2016-09-22T15:27:46+00:00" -categories: - - Announcements -aliases: - - /2016/09/powershell-happenings-at-ignite-2016/ ---- - -With Ignite fast-approaching, here's what's up - and this is intended to be a "community post," meaning I'd love it if you could add your own PowerShell At Ignite notes in the comments, including sessions you're looking forward to! -On **Sunday evening, **while not officially a PowerShell event, a lot of PowerShell glitterati will be at [The Krewe's][1] annual gathering from 8pm. -On **Monday evening, **the Atlanta PowerShell User Group is kindly hosting a [meet-and-greet][2] with myself, Jeff Hicks, and Jason Helmick. We promise to be educational; registration required (but free). -**Tuesday evening** is the PowerShell Community Happy Hour (from 4-7; [tickets required)][3], including many of the in-attendance team members, most of the PowerShell.org Board, and a bunch of super Shell enthusiasts. We'll have PowerShell.org and The DevOps Collective laptop stickers! -**Wednesday, **I'm looking forward to [PowerShell Unplugged][4] with Jeffrey Snover and I, from 9 to 9:45am. This is nearly always hilarious and fun. Then, from 10-10:30, Jeffrey, Jason Helmick, and I will be signing books and handing out laptop stickers at the Ignite Bookstore. Finally, from 11-11:30, I'll be signing FREE! books at the [Conversational Geek][5] booth (#571) (who have some [amazing scavenger hunt prizes][6]). -And of course, please stop by the [Pluralsight][7] booth to say hi, pick up some swag, register your company for a free pilot subscription, and whatnot. -So... what're YOU looking forward to next week? - - [1]: https://twitter.com/thekrewe?lang=en - [2]: https://www.meetup.com/Atlanta-PowerShell-Users-Group/events/233394410/ - [3]: https://www.eventbrite.com/e/powershell-community-happy-hour-2016-tickets-26667369821 - [4]: https://myignite.microsoft.com/sessions/3112 - [5]: http://conversationalgeek.com/ - [6]: https://twitter.com/convgeek - [7]: http://pluralsight.com diff --git a/content/articles/2016-09-27-recap-of-dupsug-powershell-saturday-2016.md b/content/articles/2016-09-27-recap-of-dupsug-powershell-saturday-2016.md deleted file mode 100644 index 7c4ed3ca0..000000000 --- a/content/articles/2016-09-27-recap-of-dupsug-powershell-saturday-2016.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Recap of DuPSUG PowerShell Saturday 2016 -authors: - - Jaap Brasser -date: "2016-09-27T07:28:04+00:00" -categories: - - Events -aliases: - - /2016/09/recap-of-dupsug-powershell-saturday-2016/ ---- - -Last weekend we hosted our second PowerShell Saturday, this time the event was hosted by IPsoft in Amsterdam. During this event members of the Dutch PowerShell User Group gathered together to view a number of presentations and to engage in lively discussions on the various new developments in the PowerShell world. -For more information about PowerShell Saturday, the Dutch PowerShell User Group or the slides and code used in the presentations please head over to the recap blog post here: -[Recap of Dutch PowerShell Saturday September 2016][1] - - [1]: http://www.jaapbrasser.com/recap-of-dutch-powershell-saturday-september-2016/ diff --git a/content/articles/2016-10-03-call-for-topics-summit-closed-but-european-conference-open.md b/content/articles/2016-10-03-call-for-topics-summit-closed-but-european-conference-open.md deleted file mode 100644 index 728ce7867..000000000 --- a/content/articles/2016-10-03-call-for-topics-summit-closed-but-european-conference-open.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Call for topics – Summit closed but European conference open -authors: - - Richard Siddaway -date: "2016-10-03T08:57:49+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2016/10/call-for-topics-summit-closed-but-european-conference-open/ ---- - -The deadline for the submission of proposals for the 2017 has passed. We are NOT taking any new submissions. if you’ve been in communication regarding a submission thats fine its still under consideration and I’ll be in touch. - - - On the positive side the call for speakers for the European PowerShell conference has opened - http://www.powertheshell.com/psconfeu/ diff --git a/content/articles/2016-10-04-a-practical-guide-for-using-regex-in-powershell.md b/content/articles/2016-10-04-a-practical-guide-for-using-regex-in-powershell.md deleted file mode 100644 index 4ea99b2f0..000000000 --- a/content/articles/2016-10-04-a-practical-guide-for-using-regex-in-powershell.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: A Practical Guide for Using Regex in PowerShell -authors: - - Duffney -date: "2016-10-04T00:49:59+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks - - Tutorials -aliases: - - /2016/10/a-practical-guide-for-using-regex-in-powershell/ ---- - -Regular Expressions is often referred to as wizardry or magic and for that reason I stayed away from it for most of my career. I used it only when I had to and most of the time just reused examples that I found online. There's nothing wrong with that of course, but I never took the time to learn it. I thought it was reserved for the elite. Turns out that it's not that complicated and that I had been using it for years without knowing it. -In an effort to shorten the learning curve for others and to show you the value of learning regular expression I've written a blog post titled [A Practical Guide for Using Regex in PowerShell][1]. It will walk you through how to use regular expression in PowerShell and gives you a glimpse into how powerful regular expression is. -Below is an example of how to use regular expression to extract a user's name from their distinguished name in Active Directory. To learn more check out this [blog post][1]. -![matches](https://powershell.org/wp-content/uploads/2016/10/matches-1.png) -Topics Covered - - * -match operator - * -match operator with regular expression metacharacters - * -notmatch with where-object - * -replace operator - * -split operator - * Select-String - * Switch Statements - * Regex Object - - [1]: http://duffney.io/APracticalGuideforUsingRegexinPowerShell diff --git a/content/articles/2016-10-11-dsc-configurationdata-blocks-in-a-world-of-cattle.md b/content/articles/2016-10-11-dsc-configurationdata-blocks-in-a-world-of-cattle.md deleted file mode 100644 index d8ca1d30b..000000000 --- a/content/articles/2016-10-11-dsc-configurationdata-blocks-in-a-world-of-cattle.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: DSC ConfigurationData Blocks in a World of Cattle -authors: - - Don Jones -date: "2016-10-11T21:01:59+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/10/dsc-configurationdata-blocks-in-a-world-of-cattle/ ---- - -As you may know, Jeffrey Snover and I have, for some time, been on a "servers are cattle, not pets" kick. Meaning, servers shouldn't be special, individualized snowflakes. They should be, in many regards, appliances. One dies, you eat it and make another. They don't have names - that you know of. They don't have IP addresses - that you know of. Oh, I mean, they _have_ them, but you don't know them and don't care. -Anyway, one thing that came up in a recent conversation related to DSC's ConfigurationData blocks. Have a [look at the MSDN documentation][1] and tell me what you see. -Go on, I'll wait. -You see **NodeName. **But damnit, if servers are cattle and cattle don't have (known) names, what the dude is NodeName all about? -Well, for one, it was a poor choice on the team's part. I'd have called it - and this is giving away the punchline - **NodeRole. **Imagine that your "NodeName" was "SalesAppWebServerRole." When you run your configuration script, you get a MOF named SalesAppWebServerRole.mof, right? Which you then checksum and load onto a pull server. And when you're spinning up a new server to host that role, you tell its LCM to grab the ConfigurationName "SalesAppWebServerRole." -The server, when spinning up, makes up a name for itself. Charming, right? Cows think they have names. Sweet. Don't care. It gets an IP address for itself, partially from DHCP of course, and partially by making up the other necessary IPv6 stuff (oh, and IPv6 is a thing now, so get on board). -Then, presumably, it runs to the pull server, grabs the MOF, and starts a consistency check. During which, presumably, _it registers some known name with DNS or load balancer or something. _Now you know it's "name!" Or the name you want to call it by, at least. Also presumably, your load balancer knows to remove or suspend the entry if the host stops responding, and to periodically scavenge stale records (remember, the node's own LCM will make sure its entry gets put back, on the next consistency check run). So if the node dies and you spin up a new one, the rest of the affected infrastructure - DNS, load balancers, what have you - clean themselves up automatically (and DSC could be involved in that process, too). -Anyway... the point is that ConfigurationData blocks can absolutely be used for cattle farms, not just for pet shops. "NodeName" is a misleading setting, but if you think of it as a role, which could be applied to multiple actual machines, then it makes a lot more sense that way. - - [1]: https://msdn.microsoft.com/en-us/powershell/dsc/configdata diff --git a/content/articles/2016-10-12-no-easy-button-for-configuration-management.md b/content/articles/2016-10-12-no-easy-button-for-configuration-management.md deleted file mode 100644 index 635d0c5ac..000000000 --- a/content/articles/2016-10-12-no-easy-button-for-configuration-management.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "No \"Easy\" Button for Configuration Management" -authors: - - Missy Januszko -date: "2016-10-12T00:18:44+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/10/no-easy-button-for-configuration-management/ ---- - -A discussion in one of my Slack channels caught my eye today around someone’s reflections in a github repo regarding DSC. The posted comment that introduced the link was titled “DSC from a newbie perspective”, and I thought “Oh? I’m a newbie too, I wonder if we’re thinking the same things.” -A little history is probably needed on my “newbie” status with DSC. I went to the Tech Mentor conference in March, where I spent most of my time in sessions learning DSC. I was hooked, but knew I needed much more in-depth training to make it something that would be useful to me in the real world. So I set a goal of learning DSC in depth about 4 months, so that I could attend DevOps Camp in August, and be able to converse intelligently about DSC, Configuration Management, and DevOps in general. And with some help from friend and mentor Jason Helmick along with blood, sweat, tears, and 10-15 extra hours a week spent on just DSC, I made it to DevOps Camp and managed to follow along and join in the discussions. -I’ve got about 6 months of DSC experience under my belt at this point, but I still consider myself a “newbie” in the grand scheme, so I fell hook, line, and sinker to go check out the comments here: - -I’m not an expert in Chef, so I won’t comment on the comparisons between the two. But while two weeks may be long enough to do a quick comparison between a product you know something about (in his case, Chef) and a product you are vetting against it (DSC), it isn’t nearly enough time to come to a conclusion like “DSC is too immature to even consider as a stopgap”. -Reading on, the reasons for liking/hating DSC seem to be the reasons for hating/liking Chef. Not wanting others to need to deal with learning Ruby was mentioned as a plus for DSC.  But it also seems like the poster wanted or expected DSC to be easy so that folks didn’t have to learn Chef, and was disappointed that it wasn’t. -There’s no “easy” button - if there really were an easy button for automation and configuration management, we’d have all the resources ever wanted neatly packaged and consumable, but the building of the platform and the tooling surrounding the platform takes time, people, and effort. So build and submit a High Quality Resource Module, or fork and fix some of the “awful error tracking”.  Some of these comments and feedback are really quite legit – but the points that need to be made and worked on are lost under the lamenting that DSC doesn’t have an Easy button. diff --git a/content/articles/2016-10-13-apologies-for-the-delay.md b/content/articles/2016-10-13-apologies-for-the-delay.md deleted file mode 100644 index f91a1040d..000000000 --- a/content/articles/2016-10-13-apologies-for-the-delay.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Apologies for the delay -authors: - - Richard Siddaway -date: "2016-10-13T12:35:22+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2016/10/apologies-for-the-delay/ ---- - -Due to unforeseen circumstances we're a bit late getting out notifications of the sessions accepted for the 2017 Summit. -Apologies to everyone who submitted sessions. -We hope to have the notifications out in the next few days diff --git a/content/articles/2016-10-14-be-an-azure-consultant-for-powershell-org.md b/content/articles/2016-10-14-be-an-azure-consultant-for-powershell-org.md deleted file mode 100644 index 663de54b9..000000000 --- a/content/articles/2016-10-14-be-an-azure-consultant-for-powershell-org.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Be an Azure Consultant for PowerShell.org! -authors: - - Don Jones -date: "2016-10-14T22:14:54+00:00" -categories: - - Announcements -aliases: - - /2016/10/be-an-azure-consultant-for-powershell-org/ ---- - -So, after our nearly-2-day outage, which was due to a still-not-fully-explained Apache fail, we're looking to make some changes. We need to migrate PowerShell.org to a different Azure subscription anyway, so this is a good time to change the kind of service we're using. -First, using Azure is non-negotiable. If your expert opinion is to use something else, please just don't ;). **Update: **This might be changing. AWS could be an option. -Second, our current environment is a classic VM running CentOS 6 (yeah, it's old), WordPress, and MySQL. WordPress and MySQL are also non-negotiable, this isn't about switching CMSs or anything. We use VaultPress for to-the-minute backups, but their restore process is a beast and has never been easy or reliable. -What we WANT is the ability to more or less push a button and re-deploy the entire site from backup, ideally automated through some OMS trigger that senses when the site has crashed. -Now, some caveats. - - * Our budget is $200/mo. We take about 150k-200k visitors per month, and WordPress is a reasonably demanding piece of software. We have about 500MB in files and about 300MB (currently) in data, and we grow about 75-ish MB a year. - * We would ideally like the data backups to be distinct from the site itself. That is, if we could simply kill an old server and deploy a new one, and then drop the data onto it (all automatically), that'd be ideal. This is distinct from simply backing up an entire VM image, since the OS, files, and data would all be one chunk. - * It'd be lovely if, instead of having to patch and upgrade the OS, we can just kill the current server, deploy a new one with all the new hotness in versions, and drop the data on it. - * The more of this that lives in Azure (e.g., Backups), the more likely - we feel - we'll be able to automate this entire kill-and-deploy process in OMS or something. - -Staying on Linux is fine. It also isn't a pre-req. WordPress (and MySQL, since WordPress doesn't play well with much else) are the main requirements. We'd like to be on a modern (6+) version of PHP, as well. -**Update: **So, let me outline the kind of thing we're thinking. So far we've gotten a lot of suggestions on which OS to use, or which DB to use, and that wasn't really the question so much as the architecture. For example: - - 1. Run a small, on-demand staging instance where patches (WordPress and plugins) are applied to the site. The site's folder is under Git, and after applying updates and testing, we push to a private (because configs contain passwords) GitHub repo. This instance isn't backed up - the important bits are in GitHub. - 2. Use ____ to deploy the actual instance(s) that people will use. This deployment is a la Elastic Beanstalk, where you just push a base OS image and it sucks down your GitHub repo to populate the files of the site. Again, not backed up - GitHub is the backup. - 3. Except for the WordPress Uploads folder, which you redirect to another, simpler instance that serves these as static files. This is a bit complex, because WordPress needs file-based access to this for uploading, while it also needs to be exposed as a web server for downloading. Simple backups to ensure we have copies of the files handy, and we don't need to retain a backup history because there's no code that could break and need to be rolled back. - 4. Data lives on a distinct hosted RDBMS. That's probably MySQL, as it's what's supported with WordPress. We're aware of Namiproject, but unless that's moving in lockstep with the base WP releases and is 100% guaranteed to work with all the plugins we need.... The RDBMS is backed up separately. - -A concern with #4 in Azure is that they only offer this (for MySQL) through ClearDb, and I've seen latency and persistency problems. I'm ideally wanting everything hosted in one datacenter/region to reduce that problem. And I'm aware of Namiproject, but we have something a bit more complex than a stock WP install, so someone's going to have to _convince_ me that SQL Server's a safe choice. -So... any suggestions for a full-stack? Please, be serious and complete - if your suggestion is, "just run VMs," that's not helpful and it'll likely be deleted. But if you've got ideas for a mix of services that you think will do the job - by all means, please, speak up! diff --git a/content/articles/2016-10-18-pitfalls-of-the-pipeline.md b/content/articles/2016-10-18-pitfalls-of-the-pipeline.md deleted file mode 100644 index 2e9dbe530..000000000 --- a/content/articles/2016-10-18-pitfalls-of-the-pipeline.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Pitfalls of the Pipeline -authors: - - msorens -date: "2016-10-18T21:43:10+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks - - Tools - - Tutorials -aliases: - - /2016/10/pitfalls-of-the-pipeline/ ---- - -Pipelining is an important concept in PowerShell. Though the idea did not originate with PowerShell (you can find it used decades earlier in Unix, for example), PowerShell does provide the unique advantage of being able to pipeline not just text, but first-class .NET objects. -Pipelining has several advantages: - - * It helps to conserve memory resources. Say you want to modify text in a huge file. Without a pipeline you might read the huge file into memory, modify the appropriate lines, and write the file back out to disk. If it is large enough you might not even have enough memory to read the whole thing. - * It can substantially improve _actual_ performance. Commands in a pipeline are run concurrently-even if you have only a single processor, because when one process blocks, for example, while reading a large chunk of your file, then another process in the pipeline can do a unit of work in the meantime. - * It can have a significant effect on your end-user experience, enhancing the _perceived_ performance dramatically. If your end-user executes a sequence of commands that takes 60 seconds, then until 60 seconds has elapsed he/she would see nothing without pipelining, whereas output could start appearing almost immediately with pipelining. - -PowerShell provides a variety of techniques for using pipelining but it is all to easy to do it wrong, so you think you are pipelining but in fact you are not. In my article [Ins and Outs of the PowerShell Pipeline][1], I discuss the most common things that can trip you up with implementing pipelining and how to avoid them. - - [1]: https://www.simple-talk.com/sysadmin/powershell/ins-and-outs-of-the-powershell-pipeline/ diff --git a/content/articles/2016-10-18-powershell-devops-global-summit-2017-session-acceptance.md b/content/articles/2016-10-18-powershell-devops-global-summit-2017-session-acceptance.md deleted file mode 100644 index 8b69f5e63..000000000 --- a/content/articles/2016-10-18-powershell-devops-global-summit-2017-session-acceptance.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "PowerShell + DevOps Global Summit 2017: Session Acceptance" -authors: - - Don Jones -date: "2016-10-18T17:53:20+00:00" -categories: - - PowerShell Summit -aliases: - - /2016/10/powershell-devops-global-summit-2017-session-acceptance/ ---- - -We're in the process of emailing speaker invitations to those whose sessions were accepted for the 2017 agenda. **Please check your email and promptly follow the instructions to complete registration. ** -In the event that a speaker is unable to confirm their invitation in time, we will move on to other speakers and sessions - that's why, if you haven't presently received an invitation, you still might. Once we've confirmed everyone, we'll send out notices to any speakers who were not selected, so that you're in the loop. We do appreciate your patience as we work through this process. -Registration will open November 1st, and a **draft** brochure is available at http://PowerShellSummit.org. This brochure does include session highlights that may not have been confirmed, so they're still subject to change. The Registration link at PowerShellSummit.org will show you the current confirmed agenda. -For speakers who were regretfully declined, you'll be able to register on November 1st. In the event we have a late speaker dropout - which happens - we may contact you about jumping in as a speaker after all, at which time we'll sort out the finances if you've paid for your registration, typically offering a full refund of your registration fee. -You'll notice that Summit has become a full 4-day event - we're unsure, at this point, if 3-day passes will be offered or not. We won't make that decision until February 2017, assuming any space remains by that point. So we hope you'll consider joining us for the full 4-day event, including new hands-on experiences on Sunday, a wider variety of deep-dive half-day sessions on Sunday, attendee-driven "Side Sessions" on Tuesday and Wednesday, and an amazing lineup for Monday. diff --git a/content/articles/2016-10-20-re-subscribe-to-new-forums-topic-notifications.md b/content/articles/2016-10-20-re-subscribe-to-new-forums-topic-notifications.md deleted file mode 100644 index b8c8efd88..000000000 --- a/content/articles/2016-10-20-re-subscribe-to-new-forums-topic-notifications.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Re-Subscribe to New Forums Topic Notifications -authors: - - Don Jones -date: "2016-10-20T23:00:43+00:00" -categories: - - Announcements -aliases: - - /2016/10/re-subscribe-to-new-forums-topic-notifications/ ---- - -Hello, PowerShellers! -During our migration and some of the inevitable database resets involved, many of you who were receiving notifications for new forums topics no longer are. You'll need to re-subscribe. -To do so, simply visit the Forums page, click through to the forum(s) of your choice, and poke the "Subscribe" link that's towards the upper-left-ish of the page. If all you see is an "Unsubscribe" link, then you're already good to go. -Thanks again for everyone who routinely jumps in to offer friendly, helpful advice in the forums!!! diff --git a/content/articles/2016-10-25-powershell-devops-global-summit-2017-agenda.md b/content/articles/2016-10-25-powershell-devops-global-summit-2017-agenda.md deleted file mode 100644 index 0fa4e54e4..000000000 --- a/content/articles/2016-10-25-powershell-devops-global-summit-2017-agenda.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: PowerShell & DevOps Global Summit 2017 agenda -authors: - - Richard Siddaway -date: "2016-10-25T10:00:07+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2016/10/powershell-devops-global-summit-2017-agenda/ ---- - -The agenda for next year's Summit is almost complete - we've notified all speakers as to whether their sessions have been accepted or not. If you haven't received your notification please check your spam/junk mail. -We have a small number of sessions yet to publish - mainly around possible focus groups on the Wednesday afternoon. -To view the agenda go to the Summit event site - from https://powershell.org/summit/ click on the Brochure and registration link. -Registration opens 1 November 2016. diff --git a/content/articles/2016-11-01-registration-is-now-open.md b/content/articles/2016-11-01-registration-is-now-open.md deleted file mode 100644 index fa4b30b60..000000000 --- a/content/articles/2016-11-01-registration-is-now-open.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Registration is now open -authors: - - Richard Siddaway -date: "2016-11-01T11:30:36+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2016/11/registration-is-now-open/ ---- - -Registration for the 2017 PowerShell and DevOps Global Summit is now open.  Click on Summit and follow the links to register diff --git a/content/articles/2016-11-01-the-flavors-of-windows-containers.md b/content/articles/2016-11-01-the-flavors-of-windows-containers.md deleted file mode 100644 index 9f85c568c..000000000 --- a/content/articles/2016-11-01-the-flavors-of-windows-containers.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: The Flavors of Windows Containers -authors: - - Don Jones -date: "2016-11-01T16:59:01+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/11/the-flavors-of-windows-containers/ ---- - -I had a wonderful conversation with some team members around Windows Containers generally, and they had some very cool analogies that I don't think have been publicized enough. There's some good technical detail, too, which I think is worth understanding as we move into this brave new world of containerization. - - - -First, let's just quickly review our oldest kind of "container," the virtual machine. I'm going to generalize a bit here, so that what I'm writing is true for any kind of VM. Essentially, a virtual machine is a very rigidly scoped process. The host computer, via software known as a hypervisor, emulates all of the services that a real, physical computer would provide. The hypervisor pretends to be a network card, a BIOS, a CPU, RAM, and so on. Upon that virtual hardware runs a normal off-the-shelf operating system, which in turn runs whatever software you want. Now, that description is true of an old-time virtualization situation. In reality, modern hypervisors take a variety of approaches to help improve the performance of that situation. For example, CPUs are rarely _emulated, _per se; instead, the hypervisor manages thread scheduling on the physical CPUs, and more or less exposes them directly to the VM. Kinda; I'm simplifying a bit. Hyper-V also uses _synthetic_ hardware versus _emulated_ hardware for many devices, which again reduces overhead and improves performance. -Now let's move on to containers, which - for the purposes of a simple explanation - can be a Linux container or a Windows Server container. Notice that I'm not using the word "Docker," here, because Docker is a container _management_ solution, really, and can manage both Linux containers and Windows containers. A container is not a virtual machine, in any way, shape, or form. There's no emulated or synthesized hardware. Instead, a container is just a normal application running as a normal process. In the operating system's process list, this application is essentially marked "this is a container." That special "marker" causes some bits of the operating system to behave a little differently. For example, when the application asks the OS to write to a file on disk, or (on Windows) to a registry key, the OS "intercepts" that call and instead writes the data to an area that belongs just to that application. Any read requests first check that private area, so the application gets the data it expects. Read requests that can't be fulfilled by the private area are directed back to the "main" file system (or registry, or whatever), so the application "believes" it is running all by itself on a full computer. The practical upshot of this is that the application can't change anything in the "common" OS, although the application doesn't realize that. Deleting the container removes everything the application has done. Honestly, this technique - in the form of read/write filters - has been around _forever. _Virtuozzo has been doing this in hosted environments for years, Windows Embedded had similar filtering functionality, and even Microsoft App-V works on largely similar principles. The difference with containers is that the filtering happens at the kernel level of the OS, so it's much more efficient and managed. -But it isn't foolproof. Containers do not represent an impenetrable barrier between processes, meaning it's possible for one application to access another's data, potentially hog processing resources, etc. So in cases where you're dealing with super-sensitive data (for example), containers might not be acceptable. -Thus, Microsoft's "Hyper-V Container," which sits somewhere between a full VM and a zero-VM container. Basically a Hyper-V Container _is_ a virtual machine, just like the Hyper-V VMs you know and love. The difference is that, when you ask Windows to spin up one of these containers, it inserts a trimmed-down version of the Windows OS and kernel. Many of the API calls within the container are handled instead by the host OS. The result is a "lighter" VM that imposes a bit less overhead, especially given Hyper-Vs use of synthesized hardware. But _data_ remains _within _the VM, imposing the rigid boundary around the VM that we're used to. One VM cannot access the contents of another (except via well-defined channels like file sharing or other port-based communications), and so you get a more managed security barrier. You also get faster spin-up time - not as fast as a "normal" container, but faster than a "normal" VM. -It's worth understanding all of these different execution models. None of them are always right or wrong; they're all tools in an increasingly varied tool belt, allowing us to right-size our execution environment to the task at hand. diff --git a/content/articles/2016-12-05-powershell-gotchas.md b/content/articles/2016-12-05-powershell-gotchas.md deleted file mode 100644 index a361a8d33..000000000 --- a/content/articles/2016-12-05-powershell-gotchas.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: PowerShell Gotchas -authors: - - msorens -date: "2016-12-05T00:28:59+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks - - Tutorials -aliases: - - /2016/12/powershell-gotchas/ ---- - -You can certainly find a number of articles around that present PowerShell pitfalls that can easily trip you up if you are not careful. I took a different approach in my three-part series, _A Plethora of PowerShell Pitfalls_. -The first two parts are presented in quiz format, together covering the top 10 "gotchas". They will help you test your awareness to see if you even realized the danger and did not know you've been skirting those traps for awhile. After you've had an opportunity to consider the conundrums presented, I then go into detailed explanations for why they happen and how to fix them. -The third and final part is a compendium of all the common "gotchas" that I put together after reviewing all the other lists out there. The more than 35 entries in the list cover, I believe, a good 98% of the issues you would likely encounter. Yes, there are more esoteric pitfalls as well, but I ran out of web page... 🙂 -Part 1: [Pesky Parameter Problems][1] -Part 2: [A Portion of Potential Puzzles][2] -Part 3: [The Compendium][3] - - - [1]: https://www.simple-talk.com/sysadmin/powershell/a-plethora-of-powershell-pitfalls/ - [2]: https://www.simple-talk.com/sysadmin/powershell/a-plethora-of-powershell-pitfalls-part-2/ - [3]: https://www.simple-talk.com/sysadmin/powershell/the-poster-of-the-plethora-of-powershell-pitfalls/ diff --git a/content/articles/2016-12-15-the-key-to-understanding-powershell-on-windows-or-linux.md b/content/articles/2016-12-15-the-key-to-understanding-powershell-on-windows-or-linux.md deleted file mode 100644 index 25a7deca2..000000000 --- a/content/articles/2016-12-15-the-key-to-understanding-powershell-on-windows-or-linux.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: The Key to Understanding PowerShell – on Windows or Linux -authors: - - Don Jones -date: "2016-12-15T15:22:12+00:00" -categories: - - PowerShell for Admins -aliases: - - /2016/12/the-key-to-understanding-powershell-on-windows-or-linux/ ---- - -I've listened to a few of my Windows-friendly compatriots attempting to explain PowerShell to their Linux colleagues, and it hasn't always gone well. The problem, I think, is that a lot of Windows folks don't actually know why PowerShell exists in the first place. Let me explain. - - - -PowerShell _does not exist to automate administrative tasks. _Re-read that a few times until it really sinks in. You see, you start going at the Linux guys with this "automation" argument, and they're all like, "yeah, man, we've had that for always." The existence of PowerShell on Linux makes no sense if the point of PowerShell is simply automation. In fact, PowerShell _as an automation mechanism_ also _makes no sense on Windows. _Keep in mind that all PowerShell does is built on WMI/CIM and .NET Framework; there was nothing stopping you from using those things in the first place. You didn't _need_ PowerShell. -The point of PowerShell is that .NET Framework is a terrible surface for systems administrators. Getting anything done correctly in .NET requires you to _write an application_ of some size, compile it, and run it. .NET wasn't designed with ad-hoc, system-level "scripting" in mind; it's an application development framework. An empty .NET project starts with dozens of lines of code and configuration; that's the bare minimum to even start writing code. For admins, it's too much. Heck, it's sometimes too much for _developers, _which is why some of them like PowerShell as a ".NET immediate window" so much - they can just bang out a one-liner, hit Enter, and get results. -I'll argue that all operating systems rely on APIs for command-and-control. If you want to tell Windows to shut down, you need an API to do it. In modern times, that API comes via WMI/CIM or .NET, for the most part. In Linux, if you want to configure Apache to listen to a different port, you need an API. That API comes in the form of a text file. I'll also argue that, from a systems administration perspective, all APIs suck. In Windows, you're forced to learn this vast and complex .NET Framework, which is only marginally consistent within itself, and which requires a (relative) ton of code to make do anything. In Linux, you're forced to learn regular expressions and text parsing, along with a bunch of poorly-interconnected command-line tools that have improbable names invented by Dungeons & Dragons geeks in the 1960s and 1970s. "Grep," as an API for systems administration, was never a good idea - it's just what got the job done when your main configuration surface was a bunch of text files. -The _**entire point of PowerShell**_ is nothing more, nor less, than to wrap a more-consistent, _administrator-friendly_ API around those other sucky APIs. PowerShell is an abstraction layer, and that's it. Do you know how to conquer up a ServiceController reference in .NET, and ask it to restart a surface? Me neither, nor do I care to learn - I'll just run Restart-Service, which does all that under the hood. Do you know how to pull a daemon list on Linux, retrieve just the httpd daemon, and restart it? You might, but I don't, and I don't care to learn that either - I'll run Restart-Daemon (which will exist someday, I swear it). -On Windows, PowerShell doesn't replace .NET. We all know that. It makes .NET easier for an admin to use in the context of administration. On Linux, PowerShell doesn't replace grepsedawk and all the text files - it simply makes them easier, and more consistent, to use for administration. The point of PowerShell is that it allows us to deal in deterministic data structures (objects) without having to be text-parsing experts. It wraps poorly designed underlying APIs into something with a consistent, admin-focused surface. That's it. -PowerShell does not posit that, on Linux, grepsedawk is a bad idea. PowerShell simply suggests that those tools, and their friends, are a lot harder to learn and use than they should be. PowerShell's value-add is not automation - you can do that without PowerShell. PowerShell's value-add is _better productivity as you automate, _and that's something anyone should be able to wrap their minds around. diff --git a/content/articles/2016-12-19-update-tug-the-open-source-dsc-pull-server.md b/content/articles/2016-12-19-update-tug-the-open-source-dsc-pull-server.md deleted file mode 100644 index de28b5f7d..000000000 --- a/content/articles/2016-12-19-update-tug-the-open-source-dsc-pull-server.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "UPDATE / Tug: The Open-Source DSC Pull Server" -authors: - - Don Jones -date: "2016-12-19T17:25:49+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -aliases: - - /2016/12/update-tug-the-open-source-dsc-pull-server/ ---- - -If you haven't taken a look at [Tug][1], now's a great time. Eugene Bekker has been doing a ton of heavy lifting, taking my .NET Core proof-of-concept code and turning it into a formal ASP.NET MVC project. - - - -Tug is nominally cross-platform. Basically, it's n ASP.NET Core application that can run under any Web server that supports ASP.NET Core, which includes Windows, Windows Nano Server, and even Linux. Tug knows the DSC protocol, so it receives requests from Local Configuration Managers (LCMs) on DSC target nodes. -Tug has no "brains" to deal with those request, though. Instead, it implements a provider layer, and calls upon a provider to deal with requests. A very simple provider is currently implemented, which runs PowerShell commands in response to LCM requests. So, short story, if you can write a PowerShell advance function, you can make your pull server behave in whatever way you want. Store data in SQL Server, if you like, for example. -Because of some hitches in .NET Core 1.0, that run-PowerShell-commands trick doesn't work well. so to do that you really have to target full .NET, which limits you to running Pull server on Windows Server or Windows Server Core. That should be fine for most folks. -But you can also write Tug providers in full .NET - meaning you can use (say) EF Framework to manipulate target node data. -Presently, Tug doesn't implement the Report Server functionality - it's stubbed out, and that's coming next. And if you're thinking, "will Tug be able to __\__," the answer is, "yes - if you write a provider layer that lets it do ____, which can include writing PowerShell commands (functions) that do ____." Tug isn't intended to lock you into one operational mode. Do you want to store client data in SQL Server, and assemble MOFs on-the-fly? You can program Tug to do that. Do you want to store everything in XML files? You an program Tug to do that. Want to use client certificate authentication for nodes? You can program Tug to do that. Because everyone wants something a little different from their Pull server, Tug's designed to let you code up whatever model you prefer. -Tug's an open-source project on GitHub, licensed under MIT, which means you can use it for whatever you want. We've got a [brainstorming document][2] with ideas, and if you'd like to contribute, that's a place to start. **And please, contribute. **If you can't, but you follow someone in the community who might be able to, please draw their attention to the project. - - [1]: https://github.com/powershellorg/tug - [2]: https://github.com/PowerShellOrg/tug/blob/master/TODO.md diff --git a/content/articles/2016/01/_index.md b/content/articles/2016/01/_index.md new file mode 100644 index 000000000..a99668ffb --- /dev/null +++ b/content/articles/2016/01/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from January 2016" +description: "PowerShell.org Articles published in January 2016." +--- diff --git a/content/articles/2016/01/atlpug-01-19-2016/index.md b/content/articles/2016/01/atlpug-01-19-2016/index.md new file mode 100644 index 000000000..15a406636 --- /dev/null +++ b/content/articles/2016/01/atlpug-01-19-2016/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2016-01-11-atlpug-01-19-2016/ +title: "Atlanta PowerShell User's Group Meeting – January 19th 'Let's win the scripting games!'" +authors: + - Stephen Owen +date: "2016-01-11T18:25:02+00:00" +aliases: + - /2016/01/atlpug-01-19-2016/ +--- + +Kicking off in our new venue, we'll be tackling this month's PowerShell.org monthly scripting games challenge! Prizes are given to the group with the best answers over the year, so let's try our best! Have an idea or want to cover a topic? Let us know my messaging Mark Schill or myself (Stephen Owen) +[Here's the link to the puzzle for this month][1]. I would recommend that you look it over, and begin thinking of how you might approach it. However, let's let everyone have a chance to answer the puzzle and work through it as a team 🙂 +[Register now on Meetup!![MeetUp](https://powershell.org/wp-content/uploads/2015/11/MeetUp.png)][2] + + [1]: https://powershell.org/2016/01/02/january-2016-scripting-games-puzzle/ + [2]: http://www.meetup.com/Atlanta-PowerShell-Users-Group/events/227807680/ diff --git a/content/articles/2016/01/create-windows-shortcuts-or-favorites-with-powershell/index.md b/content/articles/2016/01/create-windows-shortcuts-or-favorites-with-powershell/index.md new file mode 100644 index 000000000..5d23afc75 --- /dev/null +++ b/content/articles/2016/01/create-windows-shortcuts-or-favorites-with-powershell/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2016-01-22-create-windows-shortcuts-or-favorites-with-powershell/ +title: Create Windows Shortcuts or Favorites With PowerShell +authors: + - Steve Parankewich +date: "2016-01-22T16:37:59+00:00" +categories: + - DevOps + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks + - Tutorials +aliases: + - /2016/01/create-windows-shortcuts-or-favorites-with-powershell/ +--- + +Creating windows shortcuts are usually done through the New Shortcut Wizard, MSI files, Group Policy Objects, or even a simple file copy. Shortcut files are .lnk files that Microsoft Windows uses for shortcuts to local files while .url is used for destinations such as web sites. As we all are aware, the .lnk filename extension is hidden in Windows Explorer even when "Hide extensions for known file types" is unchecked in File Type options. The reason for this is the NeverShowExt string value in HKEY_CLASSES_ROOT\lnkfile. Shortcuts are also displayed with a curled arrow overlay icon. The IsShortcut string value causes the arrow to be displayed. +For a full run down on creating shortcuts and favorites with PowerShell head over to [PowerShellBlogger.com][1]. + + [1]: http://powershellblogger.com/?p=301 diff --git a/content/articles/2016/01/get-last-reboot-or-computer-up-time-with-powershell/index.md b/content/articles/2016/01/get-last-reboot-or-computer-up-time-with-powershell/index.md new file mode 100644 index 000000000..d86aee6f0 --- /dev/null +++ b/content/articles/2016/01/get-last-reboot-or-computer-up-time-with-powershell/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2016-01-07-get-last-reboot-or-computer-up-time-with-powershell/ +title: Get Last Reboot or Computer Up Time With PowerShell +authors: + - Steve Parankewich +date: "2016-01-07T14:20:24+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +aliases: + - /2016/01/get-last-reboot-or-computer-up-time-with-powershell/ +--- + +Hey everyone, hope you had a great 2015 and I am back with I hope to be weekly updates for everyone at PowerShell.org. I wrote up a quick article on how to retrieve the last reboot time or the current up time for any local or remote computer. I also include a function that can be used to query remote computers as well. There may be a situation where you want to determine whether you take action depending on the last reboot time, or you may simply want it to be displayed for debugging or logging purposes. +You can check out the full article over on [PowerShellBlogger.com][1]. + + + [1]: http://powershellblogger.com/?p=248 diff --git a/content/articles/2016/01/improve-delivery-of-powershell-tools-or-version-controlled-files/index.md b/content/articles/2016/01/improve-delivery-of-powershell-tools-or-version-controlled-files/index.md new file mode 100644 index 000000000..cb190f490 --- /dev/null +++ b/content/articles/2016/01/improve-delivery-of-powershell-tools-or-version-controlled-files/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2016-01-14-improve-delivery-of-powershell-tools-or-version-controlled-files/ +title: Improve Delivery of PowerShell Tools or Version Controlled Files +authors: + - Steve Parankewich +date: "2016-01-14T17:04:54+00:00" +categories: + - DevOps + - PowerShell for Admins + - Tips and Tricks + - Tools + - Training + - Tutorials +aliases: + - /2016/01/improve-delivery-of-powershell-tools-or-version-controlled-files/ +--- + +I am back this week with a quick how-to article on delivering, installing, or launching version controlled files. In the past I ran into problems when having administrators launch my PowerShell tools from a network share. The performance was slow when launching it across the WAN, and the file would often be locked when I tried to replace it with a newer version. I came up with a solution to the problem by using none other than PowerShell. +The solution dips into all kinds of PowerShell techniques including local environment variables, getting text file contents, file version checking and even shortcut (.lnk) creation. If you are also a user of Sapien's PowerShell Studio, then definitely give this one a read. Check out the solution over on [PowerShellBlogger.com][1]. + + [1]: http://powershellblogger.com/?p=275 diff --git a/content/articles/2016/01/january-2016-scripting-games-puzzle/index.md b/content/articles/2016/01/january-2016-scripting-games-puzzle/index.md new file mode 100644 index 000000000..de6f7ede6 --- /dev/null +++ b/content/articles/2016/01/january-2016-scripting-games-puzzle/index.md @@ -0,0 +1,42 @@ +--- +url: /articles/2016-01-02-january-2016-scripting-games-puzzle/ +title: 2016-January Scripting Games Puzzle +authors: + - Don Jones +date: "2016-01-02T15:00:01+00:00" +categories: + - Scripting Games +aliases: + - /2016/01/january-2016-scripting-games-puzzle/ +--- + +Our January 2016 puzzle comes from MVP Adam Bertram. We're actively interested in receiving Scripting Games puzzles from members of the community - submit yours, along with an official solution, to us at admin@ via email! + + +## **Instructions** + +The Scripting Games are a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month's puzzle. You can find them all at https://powershell.org/category/announcements/scripting-games/. Many puzzles will include optional challenges, that you can use to really push your skills. +**To participate**, add your solution to a public Gist (http://gist.github.com; you'll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the Gist URL from your browser window and paste it, by itself, as a comment of this post.  +**Only post one entry per person. **However, remember that you can always go back and edit your Gist. We'll always pull the most recent one when we display it, so there's no need to post multiple entries if you want to make an edit. Just edit the original Gist and we'll see your changes shortly. + +Don't forget the [main rules and purpose of these monthly puzzles][1], including the fact that you won't receive individual scoring or commentary on your entry. +**User groups are encouraged to work together** on the monthly puzzles. User group leaders should submit their group's best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most "favorite" entries of the year will win a grand prize from PowerShell.org. + +## **Our Puzzle** + +Server uptime is the lifeblood of system administrators. We strive on it, get addicted to it..we need…more server uptime! Don't you think something as addictive and important as server uptime be measured?  How do we know we're getting our uptime fix?  As that famous quote goes, "Reality does not exist until it's measured.".  Let's measure it not only for our own sake but also to give a pretty report to our manager with all those whizbang, doohickey Excel juju that they love to see! +For this month's challenge, I want you to create a PowerShell function that you can remotely point to a Windows server to see how long it has been up for. Here's an example of what it should output. +![image001](https://powershell.org/wp-content/uploads/2015/12/image001.png) +Requirements: +1.     Support pipeline input so that you can pipe computer names directly to it. +2.     Process multiple computer names at once time and output each computer's stats with each one being a single object. +3.     It should not try to query computers that are offline. If an offline computer is found, it should write a warning to the console yet still output an object but with Status of OFFLINE. +4.     If the function is not able to find the uptime it should show ERROR in the Status field. +5.     If the function is able to get the uptime, it should show 'OK' in the Status field. +6.     It should include the time the server started up and the uptime in days (rounded to 1/10 of a day) +7.     If no ComputerName is passed, it should default to the local computer. + +Bonus: +1.     The function should show a MightNeedPatched property of $true ONLY if it has been up for more than 30 days (rounded to 1/10 of a month).  If it has been up for less than 30 days, MightNeedPatched should be $false. + + [1]: https://powershell.org/?p=2574 diff --git a/content/articles/2016/01/mspsug-virtual-meeting-avoiding-version-chaos-in-a-multi-version-powershell-world-jan-12th/index.md b/content/articles/2016/01/mspsug-virtual-meeting-avoiding-version-chaos-in-a-multi-version-powershell-world-jan-12th/index.md new file mode 100644 index 000000000..b003b355f --- /dev/null +++ b/content/articles/2016/01/mspsug-virtual-meeting-avoiding-version-chaos-in-a-multi-version-powershell-world-jan-12th/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2016-01-08-mspsug-virtual-meeting-avoiding-version-chaos-in-a-multi-version-powershell-world-jan-12th/ +title: "MSPSUG Virtual Meeting: Avoiding Version Chaos in a Multi-Version #PowerShell World – Jan 12th" +authors: + - Mike F Robbins +date: "2016-01-08T14:39:43+00:00" +aliases: + - /2016/01/mspsug-virtual-meeting-avoiding-version-chaos-in-a-multi-version-powershell-world-jan-12th/ +--- + +Join the Mississippi PowerShell User Group virtually on Tuesday, January 12th 2016 at 8:30pm Central Time when PowerShell MVP [June Blender](http://twitter.com/juneb_get_help) will present “_**PowersHELL: Avoiding Version Chaos in a Multi-Version PowerShell World**_”. +Beginning in Windows PowerShell 5.0, you can install multiple versions of the same module on the same computer; even in the same directory. Open source and PowerShellGet have revolutionized the availability of modules and Windows PowerShell 5.0+ will be continuously updated with Windows. The result is a myriad of interlocking parts with far more potential for conflicts in name, version, and functionality. Are we fated for the old "DLL Hell?" In this talk, I'll present the problem, describe some mitigating strategies, warn about their limitations, and provide a roadmap for version sanity. +Visit the [Mississippi PowerShell User Group](http://mspsug.com/2016/01/05/mspsug-january-2016-meeting-powershell-avoiding-version-chaos-in-a-multi-version-world/) website to learn more about June and to find out more details about this month’s meeting. +The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info](http://mspsug.com/attendee-info/)” section. +Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this meeting. +Note: It is not necessary to live in Mississippi or join our user group to attend our meetings or present a session for our user group. +µ diff --git a/content/articles/2016/01/new-boston-powershell-user-group/index.md b/content/articles/2016/01/new-boston-powershell-user-group/index.md new file mode 100644 index 000000000..208293009 --- /dev/null +++ b/content/articles/2016/01/new-boston-powershell-user-group/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2016-01-11-new-boston-powershell-user-group/ +title: New Boston PowerShell User Group +authors: + - Steve Parankewich +date: "2016-01-11T15:39:08+00:00" +categories: + - Announcements + - PowerShell for Admins +aliases: + - /2016/01/new-boston-powershell-user-group/ +--- + +Its a new year with new goals and I hope to provide even more assistance and value to the PowerShell community in 2016. I have created a new Boston based PowerShell user group and will be working hard on creating sessions as frequently and regularly as possible. If you are in the greater Boston or New England area please join the user group. If we have any Microsoft employees or PowerShell MVPs visiting the Boston area in the future, we would love to have you deliver a session. I have arranged booking of a room in the Microsoft Technology Center located at Kendall Square, 255 Main Street, Cambridge, MA 02142 when required. I will also look into offering the meetings over Skype for Business if possible. +Check out and join the Boston PowerShell User Group here: diff --git a/content/articles/2016/01/powershell-devops-global-summit-2016-registration-status/index.md b/content/articles/2016/01/powershell-devops-global-summit-2016-registration-status/index.md new file mode 100644 index 000000000..1ba0d4be5 --- /dev/null +++ b/content/articles/2016/01/powershell-devops-global-summit-2016-registration-status/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2016-01-28-powershell-devops-global-summit-2016-registration-status/ +title: PowerShell + DevOps Global Summit 2016 Registration Status +authors: + - Don Jones +date: "2016-01-28T18:09:54+00:00" +categories: + - PowerShell Summit +aliases: + - /2016/01/powershell-devops-global-summit-2016-registration-status/ +--- + +A quick status update on Summit: + + * We're currently past our 50% registration point. Right now, only 4-day registrations are available. Register at https://eventloom.com/event/home/PSNA16. + * In just a few days, on February 1st, we'll open all remaining seats for both 3- and 4-day registrations (same registration URL). + * Registration ends during the first week of March. At that time, we'll review the situation, and may be able to open additional seats. However, the price will go up a bit. Our absolute final date for registrations will be March 20th. + +So you've got about 3 days before 3-day registration opens, and from there about a month to sign up. After that, if we have additional space or can make additional space, we'll open more seats - but the price **will** be higher. +If you're attending, don't forget to head over to http://www.zazzle.com/collections/powershell_devops_global_summit_2016-119347973985746667 to pick up an official conference t-shirt, hat, coffee mug, or notebook to bring with you! We also have commemorative tiles available, and will offer a new one each year for you to collect. diff --git a/content/articles/2016/01/using-local-functions-remotely-in-an-existing-scriptblock/index.md b/content/articles/2016/01/using-local-functions-remotely-in-an-existing-scriptblock/index.md new file mode 100644 index 000000000..dcebb4671 --- /dev/null +++ b/content/articles/2016/01/using-local-functions-remotely-in-an-existing-scriptblock/index.md @@ -0,0 +1,32 @@ +--- +url: /articles/2016-01-18-using-local-functions-remotely-in-an-existing-scriptblock/ +title: Using Local Functions in a Scriptblock with Existing Code +authors: + - timpringle +date: "2016-01-18T15:14:03+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks +aliases: + - /2016/01/using-local-functions-remotely-in-an-existing-scriptblock/ +--- + +When you are wanting to run code remotely, it's common to do this via the use of **Invoke-Command** (though other options exist, such as through **Start-Job** for example). The biggest downfall to date i've found with remoting is the lack of an option to combine the use of your local functions within a _ScriptBlock_ that has other code in it. As an example, the following is not possible: + + +`function Add ($param1, $param2) +{ +$param1 + $param2 +} +function Multiply($param1,$param2) +{ +$param1 * $param2 +} +Invoke-Command -ComputerName $env:COMPUTERNAME -ScriptBlock { +$addResult = Add $args[0] $args[1] +$multiplyResult = Multiply $args[0] $args[1] +Write-Output "The result of the addition was : $addResult" +Write-Output "The result of the multiplication was : $multiplyResult" +} -ArgumentList 3, 2 +`However, there is a way to achieve this type of operation, and make as many local functions as you want available to be used and combined with other code in your _ScriptBlock_. You can find the full article at [powershell.amsterdam](http://www.powershell.amsterdam/2015/11/09/using-local-functions-on-remote-computers/). diff --git a/content/articles/2016/01/using-powershell-to-enable-chatops-on-windows/index.md b/content/articles/2016/01/using-powershell-to-enable-chatops-on-windows/index.md new file mode 100644 index 000000000..6f1ee46c6 --- /dev/null +++ b/content/articles/2016/01/using-powershell-to-enable-chatops-on-windows/index.md @@ -0,0 +1,35 @@ +--- +url: /articles/2016-01-28-using-powershell-to-enable-chatops-on-windows/ +title: Using PowerShell to enable ChatOps on Windows +authors: + - Matthew Hodgkins +date: "2016-01-28T14:31:19+00:00" +categories: + - DevOps + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks + - Tools + - Tutorials +aliases: + - /2016/01/using-powershell-to-enable-chatops-on-windows/ +--- + +ChatOps is a term used to describe bringing development or operations work that is already happening in the background into a common chat room. It involves having everyone in the team in a single chat room, then bringing tools into the room so everyone can automate, collaborate and see how automation is used to solve problems. In doing so, you are unifying the communication about what work gets done and have a history of it happening. +ChatOps can be supplemented with the use of tools or scripts exposed using a chat bot. Users in the chat room can talk to the bot and have it take actions on their behalf, some examples of this may be: + + * Checking the status of a Windows Service + * Finding out who is on call via the PagerDuty API + * Querying a server via WMI to see how much disk space is available + +Bots can also be a great way to expose functionality to low-privledged users such as help desk staff, without having to create web interfaces or forms. +If you want more details on the concept of ChatOps, I recommend watching **[ChatOps, a Beginners Guide][1] **presented by [Jason Hand][2]. +A popular toolset for ChatOps is [Slack][3] as the chat client, and [Hubot][4] as the bot. In this post we will use Slack and Hubot together with a PowerShell module I’ve written called [PoshHubot][5]. The module will handle installation and basic administration of Hubot. From there, we will integrate Hubot with PowerShell so we can perform some ChatOps in the Microsoft ecosystem. +Continue reading over at [hodgkins.io][6] + + [1]: https://www.youtube.com/watch?v=F8Vfoz7GeHw + [2]: https://twitter.com/jasonhand + [3]: https://slack.com/ + [4]: https://hubot.github.com/ + [5]: https://github.com/MattHodge/PoshHubot + [6]: http://bit.ly/PSHubot diff --git a/content/articles/2016/01/using-powershell-to-make-azure-automation-graphical-runbooks-part-1/index.md b/content/articles/2016/01/using-powershell-to-make-azure-automation-graphical-runbooks-part-1/index.md new file mode 100644 index 000000000..1c5391bdd --- /dev/null +++ b/content/articles/2016/01/using-powershell-to-make-azure-automation-graphical-runbooks-part-1/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2016-01-29-using-powershell-to-make-azure-automation-graphical-runbooks-part-1/ +title: Using PowerShell to make Azure Automation Graphical Runbooks – Part 1 +authors: + - timpringle +date: "2016-01-29T15:52:51+00:00" +aliases: + - /2016/01/using-powershell-to-make-azure-automation-graphical-runbooks-part-1/ +--- + +Microsoft recently released another extension for Azure Automation developers, this time in the form of the Microsoft Azure Automation Graphical Authoring SDK. +This SDK allows developers to make and edit graphic runbooks for using in Azure Automation. Although the examples given are in C#, it's possible to apply the same methodologies to develop them in PowerShell with the accompanying SDK mentioned above. +You can read the first article of this series on creating these Graphical Runbooks at [powershell.amsterdam](http://www.powershell.amsterdam/2016/01/29/using-powershell-to-make-azure-automation-graphical-runbooks-part-1/) diff --git a/content/articles/2016/02/2016-february-scripting-games-puzzle/index.md b/content/articles/2016/02/2016-february-scripting-games-puzzle/index.md new file mode 100644 index 000000000..3a564e54f --- /dev/null +++ b/content/articles/2016/02/2016-february-scripting-games-puzzle/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2016-02-06-2016-february-scripting-games-puzzle/ +title: 2016-February Scripting Games Puzzle +authors: + - Don Jones +date: "2016-02-06T15:07:55+00:00" +categories: + - Scripting Games +aliases: + - /2016/02/2016-february-scripting-games-puzzle/ +--- + +Although we have a couple of puzzles queued up, we'll be taking a brief break for the month of February 2016. So, no puzzle this month! +However, **we are in need of puzzles, including sample solutions and explanations. **This is a community effort, so if you've never contributed - now's a great time to start! Drop an email to admin@ this domain. Include a ZIP file with your puzzle, solution, and explanation - all in plain-text files, please. You can include screen shots, as needed, as PNG files. +We're also in need of a Games Master, who can collect monthly puzzles, queue them up for publishing, and scan reader submissions for noteworthy entries. Drop an e-mail if you're interested. +Belong to a user group? Why not spend some time in your next meeting coming up with a puzzle or two that your group can submit? Make them easy or tricky, fun or devilish - it's up to you. A user group could also collectively take on the Games Master role, giving you an important activity (reviewing entries and queuing them for publishing) at each monthly group meeting. +Become a contributor, and help keep this highly visible part of the PowerShell community up and running! diff --git a/content/articles/2016/02/_index.md b/content/articles/2016/02/_index.md new file mode 100644 index 000000000..653f44ea3 --- /dev/null +++ b/content/articles/2016/02/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from February 2016" +description: "PowerShell.org Articles published in February 2016." +--- diff --git a/content/articles/2016/02/a-study-in-powershell-scripting-a-beginners-guide-part-i/index.md b/content/articles/2016/02/a-study-in-powershell-scripting-a-beginners-guide-part-i/index.md new file mode 100644 index 000000000..d84820e07 --- /dev/null +++ b/content/articles/2016/02/a-study-in-powershell-scripting-a-beginners-guide-part-i/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2016-02-25-a-study-in-powershell-scripting-a-beginners-guide-part-i/ +title: A study in Powershell Scripting – A beginners Guide Part I +authors: + - WeiYen Tan +date: "2016-02-25T11:27:42+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/02/a-study-in-powershell-scripting-a-beginners-guide-part-i/ +--- + +I thought I would post my learning experiences as a person that has very little programming background. Don did say in one of the TechEd's a few  years ago that even a beginner could share their experiences with others. So I thought that I should contribute with the approach that I use to write my scripts so that other people starting to begin their Powershell adventure could benefit. +The scenario in this case is to do with three Active Directory security groups and synchronizing with a master Active Directory security group. +Link to blog post [here][1]. + + [1]: http://weiyentanitjournal.com/index.php/2016/01/31/a-study-in-learning-powershell-part-1/ diff --git a/content/articles/2016/02/a-study-in-powershell-scripting-part-2/index.md b/content/articles/2016/02/a-study-in-powershell-scripting-part-2/index.md new file mode 100644 index 000000000..660f29b07 --- /dev/null +++ b/content/articles/2016/02/a-study-in-powershell-scripting-part-2/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2016-02-26-a-study-in-powershell-scripting-part-2/ +title: A study in Powershell scripting – A beginners guide Part 2 +authors: + - WeiYen Tan +date: "2016-02-26T21:54:50+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/02/a-study-in-powershell-scripting-part-2/ +--- + +In this post I elaborate the steps that I went through to build the function to extract users into alphabetical order. I talk about the problems I face and how I resolved them. +I also post snippets of my code that I used so that new people can see how I wrote it. +I'm hoping that this help the new people that are out there. +Biggest tip in the post is what the secret sauce is on how to pass results from one cmdlet to another. As always always pleased to know people's thoughts. +Link [here][1]. + + [1]: http://weiyentanitjournal.com/index.php/2016/02/26/a-study-in-learning-powershell-part-2/ diff --git a/content/articles/2016/02/connect-to-all-office-365-services-with-powershell/index.md b/content/articles/2016/02/connect-to-all-office-365-services-with-powershell/index.md new file mode 100644 index 000000000..114e87c81 --- /dev/null +++ b/content/articles/2016/02/connect-to-all-office-365-services-with-powershell/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2016-02-02-connect-to-all-office-365-services-with-powershell/ +title: Connect to all Office 365 Services with PowerShell +authors: + - Steve Parankewich +date: "2016-02-02T18:50:40+00:00" +categories: + - DevOps + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks + - Tools + - Tutorials +aliases: + - /2016/02/connect-to-all-office-365-services-with-powershell/ +--- + +If you are not on Office 365 or have a tenant set up with Microsoft yet, now is the time to reserve your tenant name! With utilizing Office 365, a lot of administration is only available from a PowerShell session. There is a mix of outdated information on what you actually need to install and execute in order to connect to all of the Office 365 services. As a result, I accumulated and wrote up the current download requirements and commands to connect and administer every Office 365 service from one PowerShell session. I hope this saves everyone a lot of time and effort! +Head over to [PowerShellBlogger.com][1] to read the full article [here][1]. + + [1]: http://wp.me/p7al1Q-53 diff --git a/content/articles/2016/02/convert-vba-macros-to-powershell-for-microsoft-office-automation/index.md b/content/articles/2016/02/convert-vba-macros-to-powershell-for-microsoft-office-automation/index.md new file mode 100644 index 000000000..0bcef39ec --- /dev/null +++ b/content/articles/2016/02/convert-vba-macros-to-powershell-for-microsoft-office-automation/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2016-02-18-convert-vba-macros-to-powershell-for-microsoft-office-automation/ +title: Convert VBA Macros To PowerShell for Microsoft Office Automation +authors: + - Steve Parankewich +date: "2016-02-18T14:46:34+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks + - Tools + - Training + - Tutorials +aliases: + - /2016/02/convert-vba-macros-to-powershell-for-microsoft-office-automation/ +--- + +There is a lot of documentation out there for interacting with Microsoft Office including Outlook, Excel, Word, etc with Visual Basic for Applications (VBA). A lot of time you may only be able to find VBA examples. VBA's require template files to be sent to the desktop and are a real hassle when trying to automate across multiple machines. +There are not many A to B examples of translating VBA to PowerShell so I took a problem I had solved in the past and presented the before and after. Hopefully it will provide enough information to allow others to convert VBA code into PowerShell for their scenarios. +You can check out the full article on [PowerShellBlogger.com][1]. + + + + [1]: http://wp.me/p7al1Q-5f diff --git a/content/articles/2016/02/im-not-a-developer/index.md b/content/articles/2016/02/im-not-a-developer/index.md new file mode 100644 index 000000000..23c888cd9 --- /dev/null +++ b/content/articles/2016/02/im-not-a-developer/index.md @@ -0,0 +1,44 @@ +--- +url: /articles/2016-02-19-im-not-a-developer/ +title: "I'm Not A Developer" +authors: + - pscookiemonster +date: "2016-02-19T12:57:33+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/02/im-not-a-developer/ +--- + +Are you intimidated by scripting? Does PowerShell seem too much like programming to you? You aren't a developer, why should you learn this mumbo jumbo? +It turns out, PowerShell is quite easy to get started with. Can you run ipconfig? Do you know how to give someone instructions? You could probably pick up the PowerShell basics in a month of lunches or so. +Don't believe me? [I spent a few minutes to compare a simple task in four languages](http://ramblingcookiemonster.github.io/PowerShell-Is-Too-Hard/). PowerShell is a single, easy to understand command. Python is two lines and starts to include some syntax like .(). +We won't even look at the C example here, but check out this C# code that simply reads and prints out the content of a file: + + +`// Modified with suggestions from Anton. +// Better ways to do this, but, I'm not a developer ; ) +using System; +using System.IO; +class ReadFromFile +{ + static void Main() + { + foreach(string s in File.ReadAllLines(@"C:\file.txt")) + { + Console.WriteLine(s); + } + } +} +`You can get a feel for what's going on, and there are many ways to skin a cat, but let's compare this to PowerShell: + + +`Get-Content C:\file.txt +`This was one example among many. Read or write a CSV, execute a SQL query, create a VM, kick off an AzureRM template, modify an AD user, the list goes on. All of these are individual PowerShell commands, that handle a whole bunch of code behind the scenes, giving you simple, task-based commands. +This lets you worry about the actual problem you are trying to solve, not the nitty gritty programming details. Have you ever had to write your own [sorting code](http://www.sorting-algorithms.com/), rather than just using  + + +`Sort-Object +`? +Come join the fun, you'll save yourself time and effort, and help out your team and organization in the process. Learn PowerShell. +Cheers! diff --git a/content/articles/2016/02/last-chance-for-powershellsummit-org-registration/index.md b/content/articles/2016/02/last-chance-for-powershellsummit-org-registration/index.md new file mode 100644 index 000000000..fe93479bd --- /dev/null +++ b/content/articles/2016/02/last-chance-for-powershellsummit-org-registration/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2016-02-18-last-chance-for-powershellsummit-org-registration/ +title: Last Chance for PowerShellSummit.org Registration +authors: + - Don Jones +date: "2016-02-18T18:52:02+00:00" +categories: + - PowerShell Summit +aliases: + - /2016/02/last-chance-for-powershellsummit-org-registration/ +--- + +Here's a sort of last call: Registration ends on March 1st, 2016, giving you just about ten days from today (Feb 18th). Additionally, we've got just around 24 seats remaining. About 5 of those are available as 3-day seats, and about 19 as 4-day seats. We'll try and slide that availability around so you're not forced into one or the other, but this is basically last call for attendees either way. Hope we'll see you there! diff --git a/content/articles/2016/02/microsoft-powershell-team-panel-twin-cities-february-meeting/index.md b/content/articles/2016/02/microsoft-powershell-team-panel-twin-cities-february-meeting/index.md new file mode 100644 index 000000000..485d982b3 --- /dev/null +++ b/content/articles/2016/02/microsoft-powershell-team-panel-twin-cities-february-meeting/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2016-02-03-microsoft-powershell-team-panel-twin-cities-february-meeting/ +title: Microsoft PowerShell team panel – Twin Cities February meeting +authors: + - Tim Curwick +date: "2016-02-04T00:21:21+00:00" +categories: + - Events +aliases: + - /2016/02/microsoft-powershell-team-panel-twin-cities-february-meeting/ +--- + +Ever wonder just what the heck the Microsoft PowerShell team was thinking? Come find out! +Keith Bankston is the senior program manager for PowerShell. Mark Gray is the senior program manager for DSC. Michael Greene is the program manager responsible for understanding customer feedback and getting it into PowerShell. +Join us for a panel discussion where they will answer all of our questions about PowerShell and we in turn will answer their questions about how we use PowerShell and how we would like to use it in the future. +Target North Campus +7300 Oak Grove Parkway +Brooklyn Park, MN +This is a secure facility. [RSVP][1] with full name is required. If you do not use your full name on meetup, please email us your full name. Park in the guest lot to the west of the complex. Check in with security with photo ID. You will be escorted to the meeting room. +Food and networking begin at 4:30. The main meeting will run from 5 to 7. + + [1]: http://www.meetup.com/Twin-Cities-PowerShell-User-Group/events/228593479/ diff --git a/content/articles/2016/02/mspsug-feb-9th-virtual-meeting-intro-into-the-powershell-ise-git-pspester-onedrive/index.md b/content/articles/2016/02/mspsug-feb-9th-virtual-meeting-intro-into-the-powershell-ise-git-pspester-onedrive/index.md new file mode 100644 index 000000000..1a9dee482 --- /dev/null +++ b/content/articles/2016/02/mspsug-feb-9th-virtual-meeting-intro-into-the-powershell-ise-git-pspester-onedrive/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2016-02-05-mspsug-feb-9th-virtual-meeting-intro-into-the-powershell-ise-git-pspester-onedrive/ +title: "MSPSUG Feb 9th Virtual Meeting: Intro into the #PowerShell ISE, #Git, #PSPester & #OneDrive" +authors: + - Mike F Robbins +date: "2016-02-05T15:01:11+00:00" +aliases: + - /2016/02/mspsug-feb-9th-virtual-meeting-intro-into-the-powershell-ise-git-pspester-onedrive/ +--- + +Join the Mississippi PowerShell User Group virtually on Tuesday, February 9th 2016 at 8:30pm Central Time when [Ryan Yates](http://twitter.com/ryanyates1990) will be presenting an “_**Intro session to Teaching the IT Pro how to Dev with ISE, Git, Pester & OneDrive**_”. +With the amount of additional technologies needed to optimise the efficency of writing PowerShell this can seem very overwelming to someone new to PowerShell and could even put them completely off following an efficency optimised script creation workflow. So in this session I will be Demoing a way of working that can help users progress into Test Driven Development with the Help of a module that adds additional functionality to PowerShell ISE to make this easier to work with. +Visit the [Mississippi PowerShell User Group](http://mspsug.com/2016/01/26/mspsug-february-2016-virtual-meeting-intro-into-the-powershell-ise-git-pester-onedrive/) website to learn more about Ryan and to find out more details about this month’s meeting. +The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info](http://mspsug.com/attendee-info/)” section. +Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this meeting. +Note: It is not necessary to live in Mississippi or join our user group to attend our meetings or present a session for our user group. +µ diff --git a/content/articles/2016/02/planning-for-powershelldevops-global-summit-2017-need-your-opinion/index.md b/content/articles/2016/02/planning-for-powershelldevops-global-summit-2017-need-your-opinion/index.md new file mode 100644 index 000000000..f26d49b5c --- /dev/null +++ b/content/articles/2016/02/planning-for-powershelldevops-global-summit-2017-need-your-opinion/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2016-02-16-planning-for-powershelldevops-global-summit-2017-need-your-opinion/ +title: Planning for PowerShell+DevOps Global Summit 2017… Need Your Opinion +authors: + - Don Jones +date: "2016-02-16T17:35:31+00:00" +categories: + - PowerShell Summit +aliases: + - /2016/02/planning-for-powershelldevops-global-summit-2017-need-your-opinion/ +--- + +So, we're already doing some planning for the 2017, 2018, and 2019 events. Because, you know. We do that around here ;). +One thing we're considering is an option to lock-in venue pricing for that three-year period, helping to ensure we can keep our pricing at around $950 for a 3-day event. Doing so requires a hotel room block lock-in as well. On the plus side, that'll lock in hotel pricing for 3 years too, which is great in terms of affordability and predictability. It's scary, because we're committing to paying for those rooms whether people sleep in 'em or not. Another upside is bringing all or most attendees together into one hotel, along with our speakers. +So what we're considering is opening 2017 registration by only offering packages of either 3 or 4 days (it'll be your pick) which are _inclusive of your hotel room. _This would be at a Marriott property, and we could provide receipts/invoices that showed the conference/travel expense breakout, if you needed. So up front, you'd only be able to buy that complete package. The package would also likely include something like a Sunday night meet 'n' greet at the hotel - again, only open to people staying there. +Closer to the event, say in the 60 days before, we'd open registration to ticket-only sales, for however many seats we had remaining. +This is obviously an unabashed attempt to reduce risk by "forcing" people into the hotel package. Realizing that some people might not be able to book "inclusive" packages due to company policies, we'd try to also offer an option where you could buy just a ticket early-on, but were required to book your room in our block. Honestly, this is all about making sure we fill the block. +Our feeling is that a 3-day package would be around $1500 including hotel (3 nights), and you'd have the option of booking on additional nights if you wanted to. it'd be about $2300 for a 4-day/4-night package, if we do the pre-con day again (which is likely as it's been our most popular option for 2016). +Another advantage of having our rates and dates locked in so far out is that we could let attendees put down a (refundable) deposit for 2017, 2018, and/or 2019 - locking in your seat before registration even opens, so you don't have to worry about hitting the website at midnight sharp the day sales open ;). Now that we're a nonprofit, collecting that in advance is much more do-able. +Anyway... we'd like some input from the community. Take [a quick, one-question poll][1] to tell us what you think. + + [1]: http://polldaddy.com/poll/9312274/ diff --git a/content/articles/2016/02/powershellsummit-org-registration-status-for-2-feb-2016-also-recordings/index.md b/content/articles/2016/02/powershellsummit-org-registration-status-for-2-feb-2016-also-recordings/index.md new file mode 100644 index 000000000..a842b9f47 --- /dev/null +++ b/content/articles/2016/02/powershellsummit-org-registration-status-for-2-feb-2016-also-recordings/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2016-02-02-powershellsummit-org-registration-status-for-2-feb-2016-also-recordings/ +title: PowerShellSummit.org Registration Status for 2-Feb-2016 (also, recordings) +authors: + - Don Jones +date: "2016-02-02T14:43:52+00:00" +categories: + - PowerShell Summit +aliases: + - /2016/02/powershellsummit-org-registration-status-for-2-feb-2016-also-recordings/ +--- + +OK, here's a quick update of where we're at with registration for [PowerShell + DevOps Global Summit 2016][1]. +We'd originally scheduled 150 seats for the April event, inclusive of speakers. Yesterday (1st Feb) we opened 3-day sales (previously, only 4-day seats had been available), and are now at 126 total attendees. So we've got 24 seats of our original space remaining. +The venue assures us that we can accommodate at least another 25 people, possible as many as 50 more. So we're working with them to make that happen - in the meantime, **I strongly recommend you register soon** if you plan to attend. It looks like, no matter what, we'll be in a sellout situation again this year. +Now, keep in mind that we've greatly expanded the event this year. We're running three full-day pre-conference workshops (that's what you get for the extra day in the 4-day pass). We're having an informal gathering on Sunday evening (after the pre-cons) at the Courtyard Downtown Bellevue, a bar crawl Monday night, and a reception with the WMF team on Tuesday evening. In addition to two tracks of content, we have a third track which will run some extra-long sessions (although not all day). We're also welcoming the WMF team on Tuesday after lunch for a "State of the Shell" address by two of the main team leaders, followed by "Lightning Demos" from a variety of team members. It's a lot of content. +As always, we'll be recording _most_ of the sessions. Basically, the pre-con sessions won't be recorded, nor will the extra-long "bonus" sessions in the third track (we only have two sets of recording gear). All of what we do record will go on YouTube as usual. However, this year, [Pluralsight][2] will be on-hand with camera crews in our two main rooms, and they'll be producing recordings that include screen capture as well as live video of the speakers. Those "better" recordings will go into the Pluralsight library, and everyone attending in person will receive free access to those even if you don't have a subscription. For anyone not attending, you can either access our screen-caps on YouTube for free, or use a Pluralsight subscription to access the nicer videos. This is an experiment with Pluralsight and we appreciate their support! +Oh, and we'll also be offering Verified Effective exams (no computer required!) on Wednesday, to anyone who's interested (no advance registration required). +Anyway, as you can see, it's going to be a busy-busy-busy Summit, and it's looking firmly to be a sellout, even if we're able to secure the extra space at the venue. So **register right the heck now** if you plan to attend. If you're just now getting around to talking the boss into it - well, honestly, you shoulda started back in November ;). At $950 for the 3-day pass, though, this is probably the best educational deal you or your company will ever find, and more than a few people see enough value to pay their own way every year. +So I hope we'll see you there! + + [1]: http://powershellsummit.org + [2]: http://pluralsight.com diff --git a/content/articles/2016/02/using-powershell-to-make-azure-automation-graphical-runbooks-part-2/index.md b/content/articles/2016/02/using-powershell-to-make-azure-automation-graphical-runbooks-part-2/index.md new file mode 100644 index 000000000..28455a2a6 --- /dev/null +++ b/content/articles/2016/02/using-powershell-to-make-azure-automation-graphical-runbooks-part-2/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2016-02-03-using-powershell-to-make-azure-automation-graphical-runbooks-part-2/ +title: Using PowerShell to make Azure Automation Graphical Runbooks – Part 2 +authors: + - timpringle +date: "2016-02-04T07:08:25+00:00" +aliases: + - /2016/02/using-powershell-to-make-azure-automation-graphical-runbooks-part-2/ +--- + +The [previous article](http://www.powershell.amsterdam/2016/01/29/using-powershell-to-make-azure-automation-graphical-runbooks-part-1/) in this series covered the release of the Microsoft Azure Automation Graphical Authoring SDK, and began to outline some of the classes used and, where possible, the visible elements they relate to in the Azure portal itself. +This second part of the series focuses on probably the most time consuming and challenging part of scripting these runbooks, those to do with Activities. +You can read the full article at [www.powershell.amsterdam](http://www.powershell.amsterdam/2016/02/03/using-powershell-to-make-azure-automation-graphical-runbooks-part-2/) diff --git a/content/articles/2016/03/2016-march-scripting-games-puzzle/index.md b/content/articles/2016/03/2016-march-scripting-games-puzzle/index.md new file mode 100644 index 000000000..617486824 --- /dev/null +++ b/content/articles/2016/03/2016-march-scripting-games-puzzle/index.md @@ -0,0 +1,91 @@ +--- +url: /articles/2016-03-05-2016-march-scripting-games-puzzle/ +title: 2016-March Scripting Games Puzzle +authors: + - Don Jones +date: "2016-03-05T14:55:49+00:00" +categories: + - Scripting Games +aliases: + - /2016/03/2016-march-scripting-games-puzzle/ +--- + +Our March 2016 puzzle comes from Carlo Mancini. We're actively interested in receiving Scripting Games puzzles from members of the community - submit yours, along with an official solution, to us at admin@ via email! + + +## **Instructions** + +The Scripting Games are a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month's puzzle. You can find them all at https://powershell.org/category/announcements/scripting-games/. Many puzzles will include optional challenges, that you can use to really push your skills. +**To participate**, add your solution to a public Gist (http://gist.github.com; you'll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the Gist URL from your browser window and paste it, by itself, as a comment of this post.  +**Only post one entry per person. **However, remember that you can always go back and edit your Gist. We'll always pull the most recent one when we display it, so there's no need to post multiple entries if you want to make an edit. Just edit the original Gist and we'll see your changes shortly. + +Don't forget the [main rules and purpose of these monthly puzzles][1], including the fact that you won't receive individual scoring or commentary on your entry. +**User groups are encouraged to work together** on the monthly puzzles. User group leaders should submit their group's best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most "favorite" entries of the year will win a grand prize from PowerShell.org. + +## **Our Puzzle** + +Our Puzzle this month comes in a "Beginner" and "Advanced" variety. Indicate in a code comment which one you're shooting for. And, you're welcome to submit one entry apiece for Beginner and Advanced, if you like. These are a bit tricky - be sure to read carefully! +There's a ZIP file with some sample filenames to help you practice and test your solution - this is applicable to both versions of the puzzle: +[FileShare](https://powershell.org/wp-content/uploads/2016/03/FileShare.zip) + +### Diacritics: The Beginner Version + +You are a server administrator for an international company with four branch back-offices in Western Europe (France, Norway, Italy and Germany). People at these sites store their files (invoices, receipts, customer complaints, as well as internal documents) on a central file server located in the United States. +Since these back-office people have keyboards with a different layout from English QWERTY, they are able to save files with diacritical marks in their names on your central file server. +It seems that your corporate backup routine has problems with these files and your backup tools hangs. +Your boss has tasked you with finding precisely what kind of filenames interfere with the backup routine. After some time spent investigating the Unicode standard, you discover that this is a common problem in these European countries, and you find out that the culprits are, the ß used in German, the å, æ, ø used in Nordic languages, the é, é, ì and ò used in Italian, the ç used in French and, in general, all letters which are part of the Latin-1 Supplement character block. +Unhappy with the situation, your boss has asked you to run a script against your file server to identify all the files whose names have letters (not symbols nor numbers) in that character block and return the following information: +•                The name of the file +•                The containing folder +•                The time of creation +•                The date of the last modification +•                The size of the file +An acceptable output for this task is shown in the following image. +![image001](https://powershell.org/wp-content/uploads/2016/02/image001.png) +Design Points +·       Do not return files with other Latin symbols or numbers (like ©, ¼, ½, ÷) in their names. +·       Assume that the appropriate ports are opened on your file server. +·       Assume that Powershell Remoting is enabled on your file server. +·       Use the simplest command that will work and feel free to write a one-liner if you able to. +·       Display the output to the screen; you do not need to write to a text file. + +### **Diacritics: The Advanced Version** + +Thanks to your reputation of Powershell guru, you have been hired by a fast growing international company with four branch back-offices in Western Europe (France, Norway, Italy and Germany). People at these sites store their files (invoices, receipts, customer complaints, as well as internal documents) on a central file server located in the United States. +Since these back-office people have keyboards with a different layout from English QWERTY, they are able to save files with diacritical marks in their names on your central file server. +It seems that your corporate backup routine has problems with these files and your backup tools hangs. +Your boss has tasked you with finding what kind of filenames interfere with the backup routine. After some time spent investigating the Unicode standard, you discover that this is a common problem in these European countries, and you find out that the culprits are, the ß used in German, the å, æ, ø used in Nordic languages, the é, é, ì and ò used in Italian, the ç used in French and, in general, all letters which are part of the Latin-1 Supplement character block. +Unhappy with that situation, and confident with your Powershell skills, your boss has asked you to setup a scheduled task that runs every Saturday night on your central file server which call a function that extracts a list of all the filenames which have letters (not symbols nor numbers) in that character block and send them to him by e-mail. +The e-mail must include the following information: +•                The name of the file +•                The containing folder +•                The time of creation +•                The date of the last modification +•                The size of the file +The e-mail should be sent every two weeks on Saturday 11PM. +An acceptable output for this task is shown in the following images. +![image001](https://powershell.org/wp-content/uploads/2016/02/image001-1.png) + +![image002](https://powershell.org/wp-content/uploads/2016/02/image002.png) + +![image003](https://powershell.org/wp-content/uploads/2016/02/image003.png) +Design Points + + * Your boss says you should provide two scripts: + * One which leverages Powershell Remoting to create the Scheduled task on the file server with the appropriate job trigger. Your boss challenges you to this to be a one-liner. + * One that contains the Get-Diacritic function that identifies the filenames with diacritic marks and e-mails the report. + * The function Get-Diacritic must generate a CSV file containing the mentioned information. The CSV file should by default be named yyyyMMdd_FileNamesWithDiacritics.csv (where yyyyMMdd represents the current year, month and day) and be stored in the system temp folder. + * No CSV report must be generated if the count of filenames with diacritic marks is null. + * The size of the retrieved files should be presented in a readable format followed by the most appropriate unit (i.e. 1.2MB, or 500Kb). + * You can assume that you have the required permissions to remotely access the File Server. + * Appropriate parameter validation and error handling must be put in place. + +### **About the author of this scenario:** + +Carlo Mancini has been working as a system administrator for over 15 years and on PowerShell since its first release in 2007. +He is one of the winners of the 2013 PowerShell Scripting Games and is currently employed by one of the largest European IT companies where he is in charge of maintaining and administering both the physical and virtual architecture. +Carlo is also a technical speaker of renown at conferences around Europe and was awarded with the Microsoft MVP Award for Powershell in 2013 and 2014. +He is involved on many technical forums as well as on his blog, [happysysadm.com][2]. + + [1]: https://powershell.org/?p=2574 + [2]: http://happysysadm.com diff --git a/content/articles/2016/03/_index.md b/content/articles/2016/03/_index.md new file mode 100644 index 000000000..16ad36c9a --- /dev/null +++ b/content/articles/2016/03/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from March 2016" +description: "PowerShell.org Articles published in March 2016." +--- diff --git a/content/articles/2016/03/calling-all-scripting-games-puzzles/index.md b/content/articles/2016/03/calling-all-scripting-games-puzzles/index.md new file mode 100644 index 000000000..7f3601179 --- /dev/null +++ b/content/articles/2016/03/calling-all-scripting-games-puzzles/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2016-03-07-calling-all-scripting-games-puzzles/ +title: Calling all Scripting Games Puzzles! +authors: + - Don Jones +date: "2016-03-07T22:25:25+00:00" +categories: + - Scripting Games +aliases: + - /2016/03/calling-all-scripting-games-puzzles/ +--- + +Have you been enjoying our monthly Scripting Games puzzles? Want to keep them going? +Then it's time to **jump in and contribute!** PowerShell.org is a community site, which means it only works when community makes it work! So come up with your Scripting Games puzzles (you've [seen the different kinds][1] we've done)! Your submission should include: + + * The puzzle itself. This can include a narrative, example output you want people to achieve, etc. + * The solution (in code form, and it's fine if you put this on GitHub or in a Gist too), along with a narrative of how and why the solution achieves the goal(s). + +Ideally, we'd love it if you could also review some of the entries for your puzzle and provide some commentary on ones that you found noteworthy. +Submit your puzzle to Dan Iverson, our newly minted GamesMaster, via email to gamesmaster@ (and you should be able to figure out our domain name, as you're on our site, right?). We're looking for an April puzzle and beyond! For months where we have no entry, we'll post a "taking a break" at the top of the month, just so you know. +Don't let us down! Personally, I'd love for this to become enough of a thing that we can start awarding not only top entrants (I _have_ been tracking entries each month), but top _puzzle authors_ - and maybe invite them to a PowerShell Summit where we'll do a live Scripting Games event one evening! But it only happens if _**you**_ help make it happen! + + [1]: https://powershell.org/category/announcements/scripting-games/ diff --git a/content/articles/2016/03/microsoft-automation-platforms-twin-cities-march-meeting/index.md b/content/articles/2016/03/microsoft-automation-platforms-twin-cities-march-meeting/index.md new file mode 100644 index 000000000..cdc1be676 --- /dev/null +++ b/content/articles/2016/03/microsoft-automation-platforms-twin-cities-march-meeting/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2016-03-03-microsoft-automation-platforms-twin-cities-march-meeting/ +title: Microsoft automation platforms – Twin Cities March meeting +authors: + - Tim Curwick +date: "2016-03-03T13:02:50+00:00" +aliases: + - /2016/03/microsoft-automation-platforms-twin-cities-march-meeting/ +--- + +[Twin Cities PowerShell Automation Group][1] meeting Tuesday, March 8, 2016, at the [Microsoft Technology Center][2] in Edina, MN. +Come and learn about the road map for Microsoft’s automation platforms, System Center Orchestrator, Service Management Automation and Azure Automation. Ryan Andorfer will cover the road map for these three products and then dive into how to utilize Azure Automation in the cloud and on premises for both process and configuration automation in an enterprise setting, including strategies around code management, PowerShell Module development and PowerShell DSC management. +Ryan ran the IT-Automation team for General Mills for 6 years, was a Cloud and Datacenter MVP for 3 years and is now a Microsoft Technology Solutions Professional. +This is a secure facility. **[RSVP][3] with full name is required.** If you do not use your full name on meetup, please email us your full name. [Please RSVP at][3] +Food and networking starts at 4:30. The presentations will start at 5 PM. We'll keeping talking until 7 PM. + + [1]: http://www.meetup.com/Twin-Cities-PowerShell-User-Group/ + [2]: https://maps.google.com/maps?f=q&hl=en&q=3601+76th+St+W%3B+Suite+600%2C+Edina%2C+MN%2C+us + [3]: http://www.meetup.com/Twin-Cities-PowerShell-User-Group/events/229312191/ diff --git a/content/articles/2016/03/official-powershell-devops-global-summit-2016-agenda-now-available/index.md b/content/articles/2016/03/official-powershell-devops-global-summit-2016-agenda-now-available/index.md new file mode 100644 index 000000000..01e3efb44 --- /dev/null +++ b/content/articles/2016/03/official-powershell-devops-global-summit-2016-agenda-now-available/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2016-03-02-official-powershell-devops-global-summit-2016-agenda-now-available/ +title: Official PowerShell + DevOps Global Summit 2016 Agenda Now Available +authors: + - Don Jones +date: "2016-03-02T22:17:48+00:00" +categories: + - PowerShell Summit +aliases: + - /2016/03/official-powershell-devops-global-summit-2016-agenda-now-available/ +--- + +The agenda is available on the [official event page][1]! Please note that this is subject to change, but we'll update that same copy so you can just refer to it. We'll have handouts on site, but we recommend having an **offline copy** of the PDF, or your own printout, as a backup. It's worth reviewing this in advance, so you can start planning your own personal agenda. Don't forget that the registration site (https://eventloom.com/event/home/PSNA16) allows you to set your own personal agenda (after logging in), and provides a mobile-friendly view at the event. + + [1]: https://powershell.org/summit/ diff --git a/content/articles/2016/03/powershellsummit-org-registration-status-extension/index.md b/content/articles/2016/03/powershellsummit-org-registration-status-extension/index.md new file mode 100644 index 000000000..7a558a785 --- /dev/null +++ b/content/articles/2016/03/powershellsummit-org-registration-status-extension/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2016-03-01-powershellsummit-org-registration-status-extension/ +title: PowerShellSummit.org Registration Status & Extension +authors: + - Don Jones +date: "2016-03-01T21:09:19+00:00" +categories: + - PowerShell Summit +aliases: + - /2016/03/powershellsummit-org-registration-status-extension/ +--- + +So, we have 3 seats left, which isn't much - and we contacted our venue, and they said they they'd let us bring in those people more last-minute (in terms of us setting food and space requirements), but there's a small uncharge of $100 per person. So those last three seats are on sale at PowerShellSummit.org, through the morning of March 11th, and the new pricing should go into effect sometime tonight. In the meantime, if you happen to show up and the lower price is still there, go for it. But... only three seats. Good luck! diff --git a/content/articles/2016/04/2016-march-scripting-games-wrap-up/index.md b/content/articles/2016/04/2016-march-scripting-games-wrap-up/index.md new file mode 100644 index 000000000..d0b1e6dc2 --- /dev/null +++ b/content/articles/2016/04/2016-march-scripting-games-wrap-up/index.md @@ -0,0 +1,33 @@ +--- +url: /articles/2016-04-02-2016-march-scripting-games-wrap-up/ +title: 2016-March Scripting Games Wrap-Up +authors: + - Don Jones +date: "2016-04-02T15:04:22+00:00" +categories: + - Scripting Games +aliases: + - /2016/04/2016-march-scripting-games-wrap-up/ +--- + +Carlo really put a brain-twister out for our [March 2016 Puzzle][1]. Also, as a note, we're eagerly awaiting submissions of next month's puzzle, so don't delay in handing that in. [Here's how you can contribute to the community's favorite scripting game][2]. + +## Official Solution + +It's probably easiest just to share his solutions as actual script files, so here's both the Beginner and Advanced versions that he provided, as a ZIP: +[Solutions](https://powershell.org/wp-content/uploads/2016/02/Solutions.zip) +Carlo also provided some notes on his thinking: +Just a precision concerning the regex: the idea I had was to 'force' competitors to think in terms of Unicode categories and block ranges (unknown concept to most I bet). +Without digging, some people could come up with an expression like this, which is NOT what we want: + + +`[char]$_ -match '[^\x20-\x7E]' +`My idea is to force inclusion of latin chars (hence {IsLatin-1Supplement}) which are letters {L}, then progressively exclude all numbers {N}, all punctuation characters {P}, all symbols {S} and all separators {Z}. +A proper use of the \p (in lowercase) and \P (in uppercase) constructs to force inclusion and exclusion is essential here: + + +`[char]$_ -match "(?=\p{IsLatin-1Supplement})(?=\p{L})(?=\P{N})(?=\P{P})(?=\P{S})(?=\P{Z})") +`Did you follow his thinking? How's you do? + + [1]: https://powershell.org/2016/03/05/2016-march-scripting-games-puzzle/ + [2]: https://powershell.org/2016/02/06/2016-february-scripting-games-puzzle/ diff --git a/content/articles/2016/04/_index.md b/content/articles/2016/04/_index.md new file mode 100644 index 000000000..1f4ff2311 --- /dev/null +++ b/content/articles/2016/04/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from April 2016" +description: "PowerShell.org Articles published in April 2016." +--- diff --git a/content/articles/2016/04/a-study-in-powershell-scripting-a-beginners-guide-part-3/index.md b/content/articles/2016/04/a-study-in-powershell-scripting-a-beginners-guide-part-3/index.md new file mode 100644 index 000000000..fb83c8dc8 --- /dev/null +++ b/content/articles/2016/04/a-study-in-powershell-scripting-a-beginners-guide-part-3/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2016-04-18-a-study-in-powershell-scripting-a-beginners-guide-part-3/ +title: A study in Powershell scripting – A beginners guide Part 3 +authors: + - WeiYen Tan +date: "2016-04-18T12:28:02+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/04/a-study-in-powershell-scripting-a-beginners-guide-part-3/ +--- + +Here is the long awaited post of my third installment of where I revisit my script and provide some explanation as to why I did the things I did in regards to synchronizing Active directory groups. +As always feedback is welcome. +Link is [here][1] + + [1]: http://weiyentanitjournal.com/index.php/2016/04/18/a-study-in-powershell-scripting-part-3/ diff --git a/content/articles/2016/04/documenting-your-powershell-api-solved/index.md b/content/articles/2016/04/documenting-your-powershell-api-solved/index.md new file mode 100644 index 000000000..3b4bdb2e4 --- /dev/null +++ b/content/articles/2016/04/documenting-your-powershell-api-solved/index.md @@ -0,0 +1,28 @@ +--- +url: /articles/2016-04-29-documenting-your-powershell-api-solved/ +title: Documenting your PowerShell API–solved! +authors: + - msorens +date: "2016-04-29T22:01:52+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks + - Tools + - Tutorials +aliases: + - /2016/04/documenting-your-powershell-api-solved/ +--- + +Long has it been known how to easily document your PowerShell source code simply by embedding properly formatted documentation comments right along side your code, making maintenance relatively painless... + +![Sample Doc-Comments for PowerShell source](https://powershell.org/wp-content/uploads/2016/04/ps-doc-comment-sample.png) +But if you advanced to writing your PowerShell cmdlets in C#, you have largely been on your own, either hand-crafting MAML files or using targeted MAML editors far removed from your source code. **But not anymore.** With the advent of Chris Lambrou's open-source **XmlDoc2CmdletDoc**, the world has been righted upon its axis once more: it allows instrumenting your C# source with doc-comments just like any other C# source: +![csharp doc-comment sample](https://powershell.org/wp-content/uploads/2016/04/csharp-doc-comment-sample-628x422.png) +All of the above provides fuel for Get-Help, i.e. providing help one cmdlet at a time. But we are a civilized people; we also need a web-based version of our full custom PowerShell API. That is, a hierarchical and indexed set of Get-Help pages for all the cmdlets in our module. For this task, my own open-source effort, **DocTreeGenerator**, nicely fills the gap, requiring very little beyond the doc-comments described above to do the complete job. +I have written extensively on using both XmlDoc2CmdletDoc and DocTreeGenerator, and just this week, released a one-page wallchart that shows how all the pieces work together: +![doc wallchart thumbnail](https://powershell.org/wp-content/uploads/2016/04/doc-wallchart-thumbnail-628x409.png) +Here's the link to get you started on this fun journey: +[Unified Approach to Generating Documentation for PowerShell Cmdlets][1] + + [1]: https://www.simple-talk.com/sysadmin/powershell/unified-approach-to-generating-documentation-for-powershell-cmdlets/ diff --git a/content/articles/2016/04/help-get-the-word-out-on-the-getgoing-program-scholarship/index.md b/content/articles/2016/04/help-get-the-word-out-on-the-getgoing-program-scholarship/index.md new file mode 100644 index 000000000..967ef8c3b --- /dev/null +++ b/content/articles/2016/04/help-get-the-word-out-on-the-getgoing-program-scholarship/index.md @@ -0,0 +1,207 @@ +--- +url: /articles/2016-04-20-help-get-the-word-out-on-the-getgoing-program-scholarship/ +title: "Help Get the Word Out on the 'GetGoing' Program & Scholarship" +authors: + - Will Anderson +date: "2016-04-20T16:00:44+00:00" +categories: + - DevOps + - News +aliases: + - /2016/04/help-get-the-word-out-on-the-getgoing-program-scholarship/ +--- + +![PowerShellPodcast](https://powershell.org/wp-content/uploads/2015/12/PowerShellPodcast.png)A couple of weeks ago, DevOps Collective (PowerShell.org's parent non-profit organization) [announced the availability](https://devopscollective.org/2016/04/04/announcing-the-getgoing-it-ops-education-program-scholarship/) of the 'GetGoing' IT Ops Education Program and Scholarship. +For those of you who may not have yet heard, DevOps Collective and Pluralsight have partnered together to create a modern 'turnkey' curriculum that brings together mapped courses, recommended hands-on experiences, and live mentoring to prepare people for the real-world of IT Operations.  With this initiative, they've offered up to full-ride scholarships for 2016.  Applications for the scholarship have opened, and applications will be taken in until May 15th. +Now that the way has been paved, it's our turn as members of the community to get the word out; and doing so might be easier than you think! +_**Contact Your Local School Districts**_ +I recently reached out to my hometown public school district, and was immediately met with enthusiasm from the local superintendent and their Science, Guidance, and Counseling departments.  It only takes a quick email with some bullet points on the program to get the conversation initiated.  I've included the text of my initial correspondence for you to use as a guide to help you on your way. +Contacting your school district is +*easy* +.  A quick search online for your district can get your to their website with contact info, often including the email addresses for the district superintendent and other office officials that can help!  Send them a [copy of the brochure](https://devopscollective.files.wordpress.com/2016/04/getgoing-program-guide.pdf) to help them get informed of the initiative. +_**Use Your Social Media Skills**_ +Get the conversation going on social media!  Talk to your followers; speak out to local educational organizations; and make them aware of this awesome new program! +_**Inform Your User Groups**_ +Get your user groups in on the action.  Enlist the greater community to get the word out faster!  Together we can canvas an even larger area and get more people interested! +_**Get Involved**_ +Offer to become a mentor.  We all know that the best way to learn is from real world experiences.  We, as a community, have this vast repository of practical knowledge that no book can effectively provide.  We, as a collective resource, can help to bring a new generation of administrators, engineers, and architects into this world already prepared to take on DevOps, Agile IT, and more! +If you need a hand getting started, feel free to contact me at **webmaster at powershell.org**.  Now let's _**#GetGoing**_ ourselves, and make this happen! +Here's my initial contact email that you can use to fit your own story: +_Greetings [Contact Name],_ + + + *I hope this email finds you well.* + + + + + + + + + + *My name is [Your Name Here].  I'm a native to [City], IT Consultant, and an industry/community leader in Cloud and Datacenter Management.  I teach PowerShell for free to people in the community that have an interest in the technology at user groups in [location[s]].* + + + + + + + + + + + *I also do volunteer work for the DevOps Collective; a 501(c)(3) organization that is dedicated to creating conversations, improving connections between practitioners, and further develop the DevOps state of the art.* + + + + + + + + + + + *Recently, DevOps Collective announced the new “GetGoing” IT Ops Education Program & Scholarship.  More on the program can be [researched here](https://devopscollective.org/2016/04/04/announcing-the-getgoing-it-ops-education-program-scholarship/), but I thought I'd offer some of the bullet points on the major educational objectives that form the basis of the program:* + + + + + + + + + + + + + - + *Core understanding of business IT environments, including the various components that commonly form the business technology infrastructure.* + + + - + *Basic networking essentials, including client configuration and troubleshooting.* + + + - + *Essentials of business technology security.* + + + - + *Essentials for technology troubleshooting, including methodologies and patterns.* + + + - + *Essentials of virtualization technologies.* + + + - + *Help desk essential skills, including Microsoft Office basics, customer interaction, ticketing systems, and process-following.* + + + - + *Desktop support essentials.* + + + - + *Server support essentials.* + + + - + *Windows client operating system fundamentals, including client and server administration fundamentals.* + + + - + *Windows PowerShell fundamentals, including the use of PowerShell for core help desk tasks.* + + + - + *Fundamentals of Microsoft-based databases, collaboration, and messaging technologies.* + + + + + + + + + + + + + + + *Finally, DevOps Collective has partnered with Pluralsight to offer two full-ride scholarships.  One is a general availability scholarship, and the second is a diversity scholarship being offered to groups that underrepresented in IT in the United States.  The scholarship has a total value of approximately $11,000 dollars and includes:* + + + + + + + + + + + + + + + - + *Full access to a Pluralsight turnkey curriculum, giving you all the education the model curriculum specifies.* + + + - + *A paid mentor, who will check-in weekly with each student.* + + + - + *Paid-for hands-on experiences, including Azure time, predesigned hands-on labs, and even a build-it-yourself kit PC that students get to keep.* + + + - + *Practice tests, knowledge checks, and other supplemental materials.* + + + - + *Paid-for certification exams – students only pay if they need to re-take a test.* + + + + + + + + + + + + + + + + + *As a leader in the IT community with strong ties the +[city] +, I feel that this is an important conversation that we need to have for the children of the city.  I grew up [your story].  I have enjoyed much success in my career in Information Technology, and I would love to see today's [school district] students empowered to become tomorrow's technology successes.* + + + + + + + + + + + *Please feel free to contact me if you have any questions.* + + + + + + + + + + + *Best Regards,* diff --git a/content/articles/2016/04/keeping-it-simple-line-breaks-in-powershell/index.md b/content/articles/2016/04/keeping-it-simple-line-breaks-in-powershell/index.md new file mode 100644 index 000000000..6d134ac71 --- /dev/null +++ b/content/articles/2016/04/keeping-it-simple-line-breaks-in-powershell/index.md @@ -0,0 +1,55 @@ +--- +url: /articles/2016-04-20-keeping-it-simple-line-breaks-in-powershell/ +title: Keeping it simple – Line breaks in PowerShell +authors: + - Jacob Moran +date: "2016-04-20T23:18:07+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/04/keeping-it-simple-line-breaks-in-powershell/ +--- + +Trying to get your code to look good when reading it later can be tricky +For line breaks in function scripts, there are two out-of-the-box options: +First, you can break a line _after the pipe key_, which is an elegant and easy-to-read approach. +Second, you can arbitrarily break a line with a _back tick_ mark, which you will find left of the number 1 on a standard US keyboard. +**It looks like this: ` ** +But did you know that the back tick is a hack? +The back tick ` means, “literally interpret the next character,” or also said, escape the following character.” +For example, you might want to literally reference a quotation mark “ in a path name, but because it’s inside “” for strings, you need to literally interpret it: “`”PATH`”” – it’s hard to see, but squint. +But here’s another takeaway: if you use the back tick to create a line break, make sure there’s no space after it; otherwise, the space – not the carriage return – will be the escaped, literal character! +So here's are some examples of what works and what doesn't: +First, no line breaks - works like a charm, but if we add a few more pipes and parameters this could get ugly. + + + [![](https://1.bp.blogspot.com/-YhA2DFvuvJ0/VxgKrXR9-iI/AAAAAAAACpI/mxnNdjgJHnsJdBm5CJcDIlH0MZFU14SPgCLcB/s640/psbreaks1.jpg)](https://1.bp.blogspot.com/-YhA2DFvuvJ0/VxgKrXR9-iI/AAAAAAAACpI/mxnNdjgJHnsJdBm5CJcDIlH0MZFU14SPgCLcB/s1600/psbreaks1.jpg) + + +Next we have an example with a line break after the pipe, also functioning normally + + + [![](https://4.bp.blogspot.com/--yAWo97K86g/VxgKrQ1vGQI/AAAAAAAACpA/rU1Ufre9k5kIX0uHOGromWmrHM9lvBWlACLcB/s640/psbreaks2.jpg)](https://4.bp.blogspot.com/--yAWo97K86g/VxgKrQ1vGQI/AAAAAAAACpA/rU1Ufre9k5kIX0uHOGromWmrHM9lvBWlACLcB/s1600/psbreaks2.jpg) + + + Here we see the line break before the pipe, and the script fails + + + [![](https://3.bp.blogspot.com/-Ws06dXUMVcY/VxgKrQbqwMI/AAAAAAAACpE/Gv7ug-qwjeA8HyxfnK7jV0S7DI0zO6nPACLcB/s640/psbreaks3.jpg)](https://3.bp.blogspot.com/-Ws06dXUMVcY/VxgKrQbqwMI/AAAAAAAACpE/Gv7ug-qwjeA8HyxfnK7jV0S7DI0zO6nPACLcB/s1600/psbreaks3.jpg) + + + In this sample we use the tick immediately followed by a return. If we wanted to we could insert these ticks numerous times, before each parameter, for example + + +  [![](https://4.bp.blogspot.com/-E0dteWkhckg/VxgKr6uTTWI/AAAAAAAACpM/p_Qm4KDNuuoivzH61YGi5ul04sno3bGUwCLcB/s640/psbreaks4.jpg)](https://4.bp.blogspot.com/-E0dteWkhckg/VxgKr6uTTWI/AAAAAAAACpM/p_Qm4KDNuuoivzH61YGi5ul04sno3bGUwCLcB/s1600/psbreaks4.jpg) + + + Finally we see the effect of using the back tick AND A SPACE before the carriage return - this one is tricky to find when troubleshooting, so don't let it happen to you! + + + [![](https://2.bp.blogspot.com/-VifS3zKujEs/VxgKrwPG4FI/AAAAAAAACpQ/Ytct-gqOnJUbigd84aSFoV-xB--6h2OTwCLcB/s640/psbreaks5.jpg)](https://2.bp.blogspot.com/-VifS3zKujEs/VxgKrwPG4FI/AAAAAAAACpQ/Ytct-gqOnJUbigd84aSFoV-xB--6h2OTwCLcB/s1600/psbreaks5.jpg) + + +A special thanks to Sarah Wischmeyer for the introductory comments on this one! +Keep your scripts snappy! +[![](https://4.bp.blogspot.com/-VLGIBDlOUUk/UzrUDRXA08I/AAAAAAAABCI/y25G69eJcXExhjHjBEa4OZvklXQdv5GuACKgB/s1600/MBLogo4.png)](http://majorbacon.blogspot.com/) diff --git a/content/articles/2016/04/powershell-devops-global-summit-videos-online/index.md b/content/articles/2016/04/powershell-devops-global-summit-videos-online/index.md new file mode 100644 index 000000000..e5c9fe8d8 --- /dev/null +++ b/content/articles/2016/04/powershell-devops-global-summit-videos-online/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2016-04-13-powershell-devops-global-summit-videos-online/ +title: PowerShell + DevOps Global Summit Videos Online +authors: + - Don Jones +date: "2016-04-13T22:04:24+00:00" +categories: + - PowerShell Summit +aliases: + - /2016/04/powershell-devops-global-summit-videos-online/ +--- + +The session recordings are [now online][1]! We did miss a few of the videos. The few 2-hour sessions scheduled in Room 406 were not recorded (and weren't planned to be; we only have two sets of recording equipment, although for 2017 we're adding a third set). And, we had a couple that had video problems on-site and weren't recordable. We hope you'll appreciate that our priority on-site is to provide a great experience for the people who were there, and stopping everything to make sure we get a recording isn't always practical. As always, recordings are on a best-effort basis. As far as we know, we missed one of Matt Graeber's sessions, Lee Holmes' session, and the Microsoft general session from Kenneth Hansen and Angel Cavelo. +A new experiment this year should come online by July 2016. Pluralsight showed up with two film crews, and captured live HD video, and audio right from the speakers' mic, in rooms 404 and 405, which were our main session rooms. Those recordings, which will combine the live video with our screen captures, will be available in the Pluralsight library for all Pluralsight subscribers. Registered attendees of the event will receive free access to those as well, by means of a "slice" of the Pluralsight library. +Note that last-minute registration transferees will _not_ be automatically included in that, as we'll be sending the library information to the originally registered person. In addition, for attendees who did not provide complete contact information (like, if someone else registered you), the notification will go to the contact information we _do_ have. We don't have the ability to update that list at this point, sorry. + + [1]: https://www.youtube.com/playlist?list=PLfeA8kIs7Coc1Jn5hC4e_XgbFUaS5jY2i diff --git a/content/articles/2016/04/scripting-games-may-2016-ad-puzzle/index.md b/content/articles/2016/04/scripting-games-may-2016-ad-puzzle/index.md new file mode 100644 index 000000000..082fe40e5 --- /dev/null +++ b/content/articles/2016/04/scripting-games-may-2016-ad-puzzle/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2016-04-26-scripting-games-may-2016-ad-puzzle/ +title: Scripting Games May 2016 AD Puzzle +authors: + - i255d +date: "2016-04-27T02:32:52+00:00" +categories: + - Scripting Games +aliases: + - /2016/04/scripting-games-may-2016-ad-puzzle/ +--- + +I love working in AD (Active Directory) with PowerShell. I find that I have had to really dig in to learn some of the syntax nuances that you need to understand to really mine data and change configurations within Active Directory. This puzzle reflects the kind of situation that people have to deal with in PowerShell everyday. I am interested to see what kinds of approaches each of you will take, this is a real chance to learn more of the diversity of methods that can be used in Active Directory with PowerShell. +This month Bartek Bielawski has submitted two puzzles, I am going to post the beginner to medium one first and then the advanced one next month. This is going to be a real learning opportunity. Keep the puzzles coming in, Mike F. Robbinson has submitted one recently too, so you can look forward to that in a couple of months. +Here we go: +During an internal IT audit of rights on your file server it was discovered that certain group had rights to the share used by finance and HR with sensitive data and the main question is: who was able to access these files because of that. When it happens you are attending a conference (surprise, surprise) and can’t really do anything remotely. That doesn’t stop your boss from calling you and asking for help. All she wants is a list of all users that are members of that group. The problem is that this group suffers from snow-ball effect and has multiple nested groups, that contain nested groups, that contain nested… +You respond with “use Get-ADGroupMember -Recursive” but your boss complains, that when she tried to use it, she just got some red text on her screen with information, that common delete is not recognized. You roll your eyes and eventually decide to write a short script and send it over e-mail. Luckily, you have sandbox domain controller running on your laptop, so testing your code is not that difficult. As you are in the middle of an interesting talk, you try to make it as simple and minimalistic as possible. You also decide not to try any other tools that require something to be installed on a computer running the code. One call from the boss is enough. +Design goals: +- Solution has to be quick. Don’t waste time on producing nice, informative error messages. +Your boss won’t read them anyway +- Try to use a solution that requires least testing possible +- Writing simple function could be nice, but if you manage to get it done in two lines, or even one – just do it +- You are limited to build-in functionality only. diff --git a/content/articles/2016/04/the-unicode-powershell-module/index.md b/content/articles/2016/04/the-unicode-powershell-module/index.md new file mode 100644 index 000000000..23d6b0709 --- /dev/null +++ b/content/articles/2016/04/the-unicode-powershell-module/index.md @@ -0,0 +1,73 @@ +--- +url: /articles/2016-04-15-the-unicode-powershell-module/ +title: The Unicode PowerShell module +authors: + - Carlo Mancini +date: "2016-04-15T11:25:19+00:00" +categories: + - PowerShell for Developers + - Tools +aliases: + - /2016/04/the-unicode-powershell-module/ +--- + +After authoring last month scripting games puzzle, which involved some scripting around the Unicode standard, I decided to have some fun and write a **PowerShell module** which interacts directly with the online **Unicode Database** (UCD) to retrieve the main properties of characters. +![poshunicode](https://powershell.org/wp-content/uploads/2016/04/poshunicode-628x453.png) + + + + + + + + + + +Using this module you will be able to retrieve the following information for a single char or for every char in a given string: +- Glyph name +- General category +- Unicode script +- Unicode block +- Unicode version (or age) +- Decimal value +- Hex value +Here's a few sample outputs you can get from using the functions in the UnicodeInfo module: + + +`Get-Unicodeinfo '$' + Glyph : $ + Decimal value : 36 + Hexadecimal value : U+0024 + General Category : CurrencySymbol + Unicode name : DOLLAR SIGN + Unicode script : Common + Unicode block : BasicLatin + Unicode version : 1.1`Get-Unicodeinfo 'Powershell!' | Format-Table +Glyph Decimal value Hexadecimal value General Category Unicode name Unicode script Unicode block Unicode + version + ----- ------------- ----------------- ---------------- ------------ -------------- ------------- ---------- + P 80 U+0050 UppercaseLetter LATIN CAPITAL LETTER P Latin BasicLatin 1.1 + o 111 U+006F LowercaseLetter LATIN SMALL LETTER O Latin BasicLatin 1.1 + w 119 U+0077 LowercaseLetter LATIN SMALL LETTER W Latin BasicLatin 1.1 + e 101 U+0065 LowercaseLetter LATIN SMALL LETTER E Latin BasicLatin 1.1 + r 114 U+0072 LowercaseLetter LATIN SMALL LETTER R Latin BasicLatin 1.1 + s 115 U+0073 LowercaseLetter LATIN SMALL LETTER S Latin BasicLatin 1.1 + h 104 U+0068 LowercaseLetter LATIN SMALL LETTER H Latin BasicLatin 1.1 + e 101 U+0065 LowercaseLetter LATIN SMALL LETTER E Latin BasicLatin 1.1 + l 108 U+006C LowercaseLetter LATIN SMALL LETTER L Latin BasicLatin 1.1 + l 108 U+006C LowercaseLetter LATIN SMALL LETTER L Latin BasicLatin 1.1 + ! 33 U+0021 OtherPunctuation EXCLAMATION MARK Common BasicLatin 1.1`160..170 | % { + Get-Unicodeinfo ([char]$_) } | + Where 'General Category' -eq "CurrencySymbol" | + Format-Table +Glyph Decimal value Hexadecimal value General Category Unicode name Unicode script Unicode block Unicode version + ----- ------------- ----------------- ---------------- ------------ -------------- ------------- --------------- +¢ 162 U+00A2 CurrencySymbol CENT SIGN Common Latin-1Supplement 1.1 +£ 163 U+00A3 CurrencySymbol POUND SIGN Common Latin-1Supplement 1.1 +¤ 164 U+00A4 CurrencySymbol CURRENCY SIGN Common Latin-1Supplement 1.1 +¥ 165 U+00A5 CurrencySymbol YEN SIGN Common Latin-1Supplement 1.1 +`Before you dive into the code, head over to the blog post I wrote describing each and every one of these properties, how some of them are accessible directly from the .NET framework, and how other less known but still relevant can be extracted from the UCD and integrated to the resulting object: +[http://www.happysysadm.com/2016/04/working-with-unicode-scripts-blocks-and.html](http://www.happysysadm.com/2016/04/working-with-unicode-scripts-blocks-and.html) +The UnicodeInfo module is available on Github: +[https://github.com/happysysadm/UnicodeInfo](https://github.com/happysysadm/UnicodeInfo) +The module is for sure 'Work-In-Progress' so if you find yourself willing to collaborate, you are very welcome to do so! diff --git a/content/articles/2016/04/verified-effective-exam-results/index.md b/content/articles/2016/04/verified-effective-exam-results/index.md new file mode 100644 index 000000000..f5ea7f3fa --- /dev/null +++ b/content/articles/2016/04/verified-effective-exam-results/index.md @@ -0,0 +1,80 @@ +--- +url: /articles/2016-04-22-verified-effective-exam-results/ +title: Verified Effective Exam Results +authors: + - Don Jones +date: "2016-04-22T16:14:26+00:00" +categories: + - PowerShell Summit +aliases: + - /2016/04/verified-effective-exam-results/ +--- + +We've uploaded the results of the Verified Effective: PowerShell Toolmaker exam, which was administered at the recent PowerShell + DevOps Global Summit 2016. Note that this exam has, for a couple of years now, been available only as an on-site, in-person, proctored experience - we do not offer online delivery. +We had our best pass rate ever - about 20%. That said, nobody hit 100%. I had actually done a pre-con, full-day session on the very topic being tested - writing advanced functions - and had more than a few folks tell me that the session wasn't as "advanced" as they wanted. Notwithstanding, 80% of the people who took the test didn't pass (and I wasn't the one grading the tests, either, so it's not just spite!). Unfortunately, a lot of us _think_ we're "advanced," but in fact are missing a lot of details. In some cases, having reviewed the graded tests, folks are missing some of the basics. +If you took the test, head over to [VerifiedEffective.org][1] and enter your candidate ID to see if you passed. I want to stress that I personally don't have access to the graded tests with names attached - I only have anonymized copies. +We're not going to offer the exam again at Summit 2017. We're considering making some schedule changes that won't accommodate the time and space and personnel needed to administer the exam and - to be frank - I think _education_ would benefit a lot of people more than a test. Whether we offer the test again in future years hasn't yet been decided, although I'll share our general feelings at the end of this article. +In fact, with that "education" in mind, I'm going to break a rule. I'm going to post the entire exam packet, exactly as it was given to the attendees who took the exam. I did something similar after PowerShell Summit Europe 2015, but this is the _exact_ exam packet. Go ahead - give yourself an hour to finish the test, and then check back here. I'll wait. +[Exam](https://powershell.org/wp-content/uploads/2016/04/Exam.docx) + + + +All done? Now I'm going to break another rule and go through the exam. I'm going to point out a bunch of stuff that people got wrong, although _just because you did or did not get these things wrong does not mean you did or did not pass, _if you were one of the folks who took this at Summit. This is an amalgamation of comments. So _do not_ drop into comments all angry that you "should have passed" because you think you did perfectly based on my comments in this article. If you didn't pass, you didn't pass for at least a couple of good reasons, and no, I'm not going to ask the scoring panel to go over your exam with you personally. We don't have the tests with names on them anymore, anyway. +So. +The first thing people ran across is the fact that the function in the exam clearly has comment-based help, but when run in the transcript no help appeared. _No_ help. Not even the auto-generated help, _which should have been a clue. _The problem is the blank line between the end of the help block and the **function** keyword _[NB: Dave Wyatt points out that this was fixed in v5; it's irrelevant for the exam scoring because you were not expected to fix it anyway]_. PowerShell _(in v4, at least, which is obviously what was used to create the transcript) _chokes on this and abandons all hope. _You were not expected to fix this, _because it was like this in the transcript - and your goal was to make the function look as needed to reproduce the transcript. Some (most) folks deleted the comment block. But do me a favor - paste this function into a script, omit the comment block, and see what PowerShell does when you ask for help. Is that what's shown in the transcript? Only two left it alone, recognizing the problem for what it was. "But that's tricky!" you might say. No, it isn't - not if you know the details of how this technology works. The _technology_ may be tricky, but knowing those ins and outs is what sets you apart as an expert. However, nobody failed solely because they suggested deleting the comment block - the goal of this article is to point out what was going on, not describe the ways in which people failed or passed. +Now for the parameter block, which caused more grief than almost anything else. + + +`Param( + [Parameter(ValueFromPipelineByPropetyName=$True)] + [string[]]$ComputerName, + [ValidateSet('Cim','Wmi')] + [string]$Protocol = 'Cim' + ) +`Most everyone recognized that **ValueFromPipeline** needed to be added; very few struck **ByPropertyName**. It's fine; it doesn't hurt to have it there and nothing in the transcript suggested it was wrong. +There is no need to add **[Parameter()]** to the second parameter. However, that **[ValidateSet()]** really caused a lot of variation in the responses. The transcript clearly shows **Dcom** as one value, so **Wmi** is clearly wrong. While the transcript does not show any other value _being passed to the parameter, _it _clearly_ shows **Wsman** as the "default" value - this is in the verbose output when the command is first run. Ergo, if Wsman is the default, then it must also be part of the validation set, not Cim. This is the kind of deductive reasoning that makes you a good debugger. +Many people correctly pointed out that **[CmdletBinding()]** is missing, which is required to enable the built-in -Verbose parameter. Some folks wrote entire If() block to test for -Verbose, which _is not the right thing to do. [NB: Dave Wyatt points out that the -Verbose parameter would be implied by including [Parameter()], which is fine; I checked with the scoring panel and nobody was docked for not specifying [CmdletBinding()]. It's the If() construct that was unnecessary.]_ +Several people insisted on adding a **BEGIN{}** and **END{}** block. These are unnecessary _to reproducing the transcript. _Advanced functions work fine without them, even in pipeline input mode. + + +`if ($Protocol -eq 'Dcom') { + $opt = New-CimSessionOption -Protocol Dcom + } else { + $opt = New-CimSessionOption -Protocol Wsman + } +`Many folks made extensive changes to that section. However, _according to the transcript, _the If() block is correct. It's the ValidateSet() that was wrong. Some folks felt that **-Protocol $protocol** could have removed the need for the whole If() block. That's fine, and the opinion wasn't counted against you, but the goal was to _reproduce the transcript_, not to simply simplify the code. +Now for the main chunk. + + +`try { + $session = New-CimSession -SessionOption $opt ` + -ComputerName $Comp + $os = Get-CimInstance -CimSession $session ` + -ClassName Win32_OperatingSystem + $disk = Get-CimInstance -CimSession $session ` + -ClassName Win32_Volume ` + -Filter "Name = 'C:\\'" + $props = @{'ComputerName' = $Computername + 'OSVersion' = $os.version + 'SPVersion' = $os.ServicePackMajorVersion + 'CDiskSize' = $disk.Capacity + 'CDiskFree' = $disk.FreeSpace} + New-Object -TypeName PSObject ` + -Property $props + } catch { + Write-Error "Failed to connect to $comp" + } +`Ignoring the annoying backticks, which were there only to make this fit onto a printed sheet of paper, nearly _everyone missed the lack of **-ErrorAction** on **New-CimSession. **_Without that, the entire Try/Catch block doesn't work. That's a fairly grievous oversight. +Others added in a slew of **Write-Verbose** statements to duplicate what was in the transcript. Problem is, if you'd added **[CmdletBinding()]**, most of the verbosity in the transcript came from New-CimSession and Get-CimInstance, because running the function with -Verbose "passes down" the verbose instruction to cmdlets within the function. That's important to know as a Toolmaker. Other added **-Verbose** to the end of all the **Get-CimInstance** commands, which is clearly wrong, since those did not _always_ produce verbose output. +Many folks, by the way, caught that **Write-Error** should have been **Write-Warning. **Many also added #end comments to the construct closing brackets. Unnecessary, as there was no instruction to modify the script to conform with any particular set of practices, but it didn't count against you. Most caught the replacement of **$comp** with **$computername** in the **$props** hash table. Several insisted on saving the new object to a variable and then writing it with **Write-Output**; that's unnecessary but didn't count against them. +A couple of folks insisted on saving the new object to a variable, and then writing that variable to the pipeline _after the end of the Catch block. _If you follow the logic, you'll see the problems that will produce. It's wrong. Others pointed out that the new object variable would have to be set to $null at the end of the ForEach construct. It doesn't. Not if you're doing it right. +_Several_ folks unnecessarily asked for the order of the hash table to be different, to match the output of the transcript. Because an unordered hash table is used, PowerShell won't respect the order shown in the script, and what's in the transcript is what you actually get. Changing the order of the hash table in the code won't necessarily have any effect on the output. Again, this is an important thing to know if you're going to be expert-level in Toolmaking. +A few folks pointed out that Get-CimInstance would require a -Namespace. It doesn't, because we're querying the default namespace. Others somewhat inexplicably crossed out the **-ClassName** parameter, so I'm not sure how the script would be expected to work that way. +I want to emphasize that _I have not covered every single grade point from the exam - _only the major things that I noticed as I reviewed the already-graded packets. I reviewed those without people's names attached, too, so I can't even tell you who did what, which is as it should be. +Now, for the good news. Pass or fail, most people got the _gist_ of the thing. Some people were probably just freaked out about taking an exam, and flubbed a few bits they might ordinarily get right. A couple of people got time-pressured, and that can cause screwups. So know that, even if you didn't pass, _you were probably close. _And there's a massively legitimate position that you can't easily test this kind of skill without throwing in all kinds of off-topic stresses and complications. Fortunately, this isn't a certification exam, you're not going to lose your job if you didn't pass, and you didn't pay a dime to try (the exam was free to all attendees). And I want to emphasize that _nobody_ got it 100% right. There were, I think, 11 errors, and you needed to find 8 of them to pass. So it was easy to fall just on one side or the other of that line. +If there's a takeaway, it's that _there's always room to learn more. _If you made one of the silly mistakes, or missed -ErrorAction, it might well simply be because of the nature of this experience, not because you didn't know better. In which case - awesome. But I'm pretty sure everyone "legitimately" missed at least one important thing, or added something unnecessary in the belief that it was required - and if you can make this a learning experience, then you'll at least grow as a professional. +So, on to the future of this thing. This whole exam idea was started because Microsoft simply refuses to do a certification, and people wanted _some_ kind of measuring stick for their skills. Thing is, _any_ kind of exam (and perhaps Microsoft recognizes this?) tosses unrelated factors into the soup, and you get people failing just because of the nature of the exam. They tense up. They stress out. They overthink it. They start looking for "tricks" and second-guessing themselves. Whatever it is, the yardstick itself becomes a problem, perhaps more of a problem than what it was trying to solve. So for now, at least, we're not going to pursue this any further. I do recognize the need to measure yourself against a standard, and I recognize the value that can have in the workplace. But we're seeing that the testing process (and we've tried this in four different processes in an attempt to combat this) is artificial, and introduces too many extraneous variables to be, I think, a super-accurate standard. So for now, we don't feel our best value as an organization is to pursue this at the moment. Instead, we're going to focus on education. +Perhaps in some months the new Scripting Games can take on the role of giving you a task like this one - one with a more defined "answer." A way for you to test yourself against a standard, just for your own satisfaction and edification. As always, we're open to suggestions (especially suggestions that come with an offer to _actually implement the suggestion, _since we're not gifted with any more free time than you are) on how we can help the community better serve itself and meet its needs. +In the meantime, thanks for your support. + + [1]: http://verifiedeffective.org diff --git a/content/articles/2016/05/_index.md b/content/articles/2016/05/_index.md new file mode 100644 index 000000000..512dc4551 --- /dev/null +++ b/content/articles/2016/05/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from May 2016" +description: "PowerShell.org Articles published in May 2016." +--- diff --git a/content/articles/2016/05/boston-psug-kick-off-meeting-tomorrow/index.md b/content/articles/2016/05/boston-psug-kick-off-meeting-tomorrow/index.md new file mode 100644 index 000000000..b59b0de23 --- /dev/null +++ b/content/articles/2016/05/boston-psug-kick-off-meeting-tomorrow/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2016-05-19-boston-psug-kick-off-meeting-tomorrow/ +title: Boston PSUG Kick Off Meeting Tomorrow +authors: + - Steve Parankewich +date: "2016-05-19T23:05:43+00:00" +categories: + - Announcements +aliases: + - /2016/05/boston-psug-kick-off-meeting-tomorrow/ +--- + +Hello fellow PowerShell enthusiasts. I have been missing for a few months with a new child that has occupied most of my extra time! I look forward to get back in the blogging gear soon. +I just wanted to send out a note that we are hosting our first kick off meeting for the Boston PowerShell User Group at the Microsoft MTC in Kendall Square Cambridge, MA.  Here are the two topics that will be delivered via [Matt Nelson][1] and [Will Schroeder][2]. +_Offensive Active Directory With PowerShell_ +Active Directory has been covered from a system administration aspect for as long as it has existed. However, much less information exists on how adversaries abuse and backdoor AD, leaving many defenders blind to the attacks being executed in their own environment. We'll cover Active Directory from an offensive perspective, illustrating ways that attackers move through Windows networks with ease. PowerView (the PowerShell domain enumeration tool) will be highlighted, including how to use it for local administrator enumeration, domain trust hopping, user hunting, ACL auditing, and more. +_Building an Empire With PowerShell_ +Over the past few years, attackers have started to realize that the same aspects of PowerShell that make it an excellent Windows automation solution also make it an ideal attack platform. The Empire project aims to bring together various offensive projects into a fully-functional malware agent (written purely in PowerShell) that can be used offensively by red teams and used to train blue teams to defend against these types of attacks. +Hope anyone local can make it. Sign up is live over at Meetup.com: + + [1]: https://twitter.com/enigma0x3 + [2]: https://twitter.com/harmj0y diff --git a/content/articles/2016/05/dutch-powershell-user-group-opens-its-doors-on-slack/index.md b/content/articles/2016/05/dutch-powershell-user-group-opens-its-doors-on-slack/index.md new file mode 100644 index 000000000..56c1e791d --- /dev/null +++ b/content/articles/2016/05/dutch-powershell-user-group-opens-its-doors-on-slack/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2016-05-16-dutch-powershell-user-group-opens-its-doors-on-slack/ +title: Dutch PowerShell User Group opens its doors on Slack +authors: + - Jaap Brasser +date: "2016-05-16T13:07:17+00:00" +aliases: + - /2016/05/dutch-powershell-user-group-opens-its-doors-on-slack/ +--- + +In the past few weeks there has been a flurry of activity in the [DuPSUG][1] organization. We have been working on organizing the first PowerShell Saturday in the Netherlands and we recently also opened our doors on Slack, with our [DuPSUG slack][2] initiative. +On Slack we will provide a platform on which we will share our content and provide another platform for our members and PowerShell enthusiasts worldwide to interact with the Dutch scripting community. If you are interested in participating in our events, either as a participant or perhaps at future events as a speaker, fill please out the following form: +[DuPSUG Slack Registration][3] + + [1]: http://www.dupsug.com + [2]: https://dupsug.slack.com/ + [3]: http://goo.gl/forms/6La00HMeK7 diff --git a/content/articles/2016/05/get-your-stickers/index.md b/content/articles/2016/05/get-your-stickers/index.md new file mode 100644 index 000000000..c63f71b7b --- /dev/null +++ b/content/articles/2016/05/get-your-stickers/index.md @@ -0,0 +1,39 @@ +--- +url: /articles/2016-05-04-get-your-stickers/ +title: GET YOUR STICKERS!!! (AND WALLPAPERS!!!) (AND INTERNATIONAL STICKERS!!!) +authors: + - Don Jones +date: "2016-05-04T21:02:45+00:00" +categories: + - Announcements +aliases: + - /2016/05/get-your-stickers/ +--- + +[![STICKERS!](https://powershell.org/wp-content/uploads/2016/05/IMG_2867-628x471.jpg)](https://powershell.org/wp-content/uploads/2016/05/IMG_2867.jpg) +OK, we finally have a huge batch of PowerShell.org and DevOpsCollective.org laptop stickers! These are great, heavy-duty, _removable_ stickers for laptop and every day use. Here's how you can get yours - **follow these instructions carefully!** + +## United States + +First, this offer is only valid until July 1st, 2016. After that, you'll have to attend PowerShell + DevOps Global Summit, our Ignite "PowerShell Community Happy Hour" event, or someplace else where we're in-person to get a sticker. Sorry for the deadline - I'm just not in the full-time sticker distribution business. +To get your sticker, send a **business-sized Self-Addressed, Stamped Envelope** to Don Jones, 7582 Las Vegas Blvd S, Suite 503, Las Vegas NV 89123. The return envelope should include your address in both the "main" and "return address" positions. + + * For one of each sticker, just use a Forever stamp. + * If you run a user group, you may ask for 10 of each sticker. Your return envelope will need two Forever stamps. + +Please, no multiple requests, no special requests, make this easy on me ;). The number of stamps on the return envelope will tell me how many stickers to enclose; if you're requesting for a user group, please write the user group name on the back of the return envelope. If you have a giant user group, just get in touch with me first and we can try to figure something out. + + +## International + +You'll have to buy them yourself, but it's not expensive in most countries. [DevOps Collective][1] merchandise and [PowerShell.org merchandise][2] is available through RedBubble, which manufactures in numerous countries and offers inexpensive shipping to many. Note that we don't control the pricing or the manufacturing, here. These are not the cheapest (about $3 each) because they're produced on-demand, but it's an option! + + +## Wallpaper + +And if nothing else, enjoy this... (click for link to full-size version) +[![collective-org-wallpaper](https://powershell.org/wp-content/uploads/2016/05/collective-org-wallpaper-628x353.png)](https://powershell.org/wp-content/uploads/2016/05/collective-org-wallpaper.png) + + + [1]: http://www.redbubble.com/people/devopscollectiv/works/21792888-devops-collective + [2]: http://www.redbubble.com/people/devopscollectiv/works/21792909-powershell-org-logo diff --git a/content/articles/2016/05/getting-complex-more-line-breaks-in-powershell/index.md b/content/articles/2016/05/getting-complex-more-line-breaks-in-powershell/index.md new file mode 100644 index 000000000..b44fe19dc --- /dev/null +++ b/content/articles/2016/05/getting-complex-more-line-breaks-in-powershell/index.md @@ -0,0 +1,423 @@ +--- +url: /articles/2016-05-21-getting-complex-more-line-breaks-in-powershell/ +title: Getting complex – More line breaks in Powershell +authors: + - Tim Curwick +date: "2016-05-21T20:09:16+00:00" +categories: + - Tips and Tricks +aliases: + - /2016/05/getting-complex-more-line-breaks-in-powershell/ +--- + +This is a follow up to Jacob Moran's article [Keeping it simple - Line breaks in PowerShell][1]. +I am strongly in the pro backtick camp, but I won't get into that debate here. Instead, I'll cover more of the common ground between the two camps. +In addition to after a pipe, there are many, many more places where you can put in a line break without a backtick and without breaking your code. +As a rule of thumb, any spot where the syntax unambiguously must be followed by something more, you can break the line. +As an extreme example, this: + + + + + + + + +$A + += + +1 + +, + +1 + ++ + +1 + +, + +3 + + +$B + += + @(  +"a" + +, + +"b" + +, + +"c" + ) + If (  +$A + +[ + +2 + +] + +. +ToString()  +-eq + +$B + +[ + +2 + +] + +. +Length  +-or + ( +Get-Date +) +. +Date +. +DayOfWeek  +-eq + +'Tuesday' + ) {  +[pscustomobject] +@{ Name  += + +"x" + } } + + + + + + + +Can be written like this: + + + + + + + + +$A + += + +1 + +, + + +1 + ++ + + +1 + +, + + +3 + + + + + + + +$B + += + @( + +"a" + + +"b" + + +"c" + + ) + + + + + + +If + ( + +$A + +[ + + +2 + + +] + +. + + ToString( + )  +-eq + + +$B + +[ + + +2 + + +] + +. + + Length  +-or + + ( + +Get-Date + + ) +. + + Date +. + + DayOfWeek  +-eq + + +'Tuesday' + + ) + { + +[ + pscustomobject] +@{ + Name  += + + +"x" + + } + } + + + + + + + +That example is, of course, silly. +But combine judicious use of the line break with appropriate horizontal whitespace, and you can turn this: + + + + + + + + +If + (  +$SourceFile1 + +. +Length  +/ + +1Gb + +-gt + +$MaxSizeGB + +-and + (  +$SourceFile1 + +. +FullName  +-like + +"*\Accounting\*" + +-or + +$SourceFile1 + +. +FullName  +-like + +"*\Finance\*" + ) ) + { + +$Destination + += + +$SourceFile1 + +. +FullName +. +Replace(  +$SourceShare + +, + +$DestinationShare + ) +. +Replace(  +'\Accounting\' + +, + +'\ACC\' + ) +. +Replace(  +'\Accounting\' + +, + +'\FIN\' + ) + } + + + + + + + +Into this: + + + + + + + + +If + (  +$SourceFile1 + +. +Length  +/ + +1Gb + +-gt + +$MaxSizeGB + +-and + + +     (  + +$SourceFile1 + +. +FullName  +-like + +"*\Accounting\*" + +-or + + +       $SourceFile1 + +. +FullName  +-like + +"*\Finance\*" + ) ) + +    { + + +    $Destination + += + +$SourceFile1 + +. +FullName +. + + +                    Replace(  + +$SourceShare + +, + +$DestinationShare + ) +. + + +                    Replace(  + +'\Accounting\' + +, + +'\ACC\' + ) +. + + +                    Replace(  + +'\Accounting\' + +, + +'\FIN\' + ) + +    } + + + + + + + + + [1]: https://powershell.org/2016/04/20/keeping-it-simple-line-breaks-in-powershell/ diff --git a/content/articles/2016/05/making-awesome-dashboards-from-windows-performance-counters/index.md b/content/articles/2016/05/making-awesome-dashboards-from-windows-performance-counters/index.md new file mode 100644 index 000000000..f4317f90a --- /dev/null +++ b/content/articles/2016/05/making-awesome-dashboards-from-windows-performance-counters/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2016-05-19-making-awesome-dashboards-from-windows-performance-counters/ +title: Making Awesome Dashboards from Windows Performance Counters +authors: + - Matthew Hodgkins +date: "2016-05-19T18:25:55+00:00" +categories: + - DevOps + - Tools + - Tutorials +aliases: + - /2016/05/making-awesome-dashboards-from-windows-performance-counters/ +--- + +Having an understanding of your systems performance is a crucial part of running IT infrastructure. +If a user comes to us and says _"why is my application running slowly?"_, where do we start? Is it their machine? Is it the database server? Is it the file server? +The first thing we usually do is open up perfmon.exe and take a look at some performance counters. You then see the CPU on the database server is 100% and think _ "was the CPU always at 100% or did this issue just start today? Was it something I changed? If only I could see what was happening at this time yesterday when the application was running fine!". _It might take you a few hours to find the performance issue on your infrastructure, and you are probably going to need to open up perfmon.exe on a couple of other systems. There is a better way! +What if you could turn your Windows performance counters into dashboards that look like this? How much time would you save? +![Full Hyper-V Dashboard](https://hodgkins.io/images/posts/influxdb_grafana_windows/fulldashboard.png) +Using a combination of the open source tools **InfluxDB** to store the performance counter data, **Grafana **to graph the data and the **Telegraf** agent to collect Windows performance counters, you will be a master of your metrics in no time! +Read the detailed walk through over at [hodgkins.io](https://hodgkins.io/windows-metric-dashboards-with-influxdb-and-grafana) diff --git a/content/articles/2016/05/mspsug-may-10th-virtual-meeting-acceptance-testing-powershell-dsc-with-test-kitchen/index.md b/content/articles/2016/05/mspsug-may-10th-virtual-meeting-acceptance-testing-powershell-dsc-with-test-kitchen/index.md new file mode 100644 index 000000000..fbb8a9c2f --- /dev/null +++ b/content/articles/2016/05/mspsug-may-10th-virtual-meeting-acceptance-testing-powershell-dsc-with-test-kitchen/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2016-05-08-mspsug-may-10th-virtual-meeting-acceptance-testing-powershell-dsc-with-test-kitchen/ +title: "MSPSUG May 10th Virtual Meeting: Acceptance Testing PowerShell DSC with Test-Kitchen" +authors: + - Mike F Robbins +date: "2016-05-09T01:06:51+00:00" +aliases: + - /2016/05/mspsug-may-10th-virtual-meeting-acceptance-testing-powershell-dsc-with-test-kitchen/ +--- + +Join the Mississippi PowerShell User Group virtually on Tuesday, May 10th 2016 at 8:30pm Central Time when Microsoft MVP [Steven Murawski](https://twitter.com/StevenMurawski) will be presenting "_**Acceptance Testing Desired State Configuration with Test-Kitchen**_". +DSC is awesome, but only if the resources and configurations do what you want them to do.  How do you know? If you are relying on DSC to tell you when it didn’t do the right thing, you are in for a world of hurt.  Configuration management is the world of “trust but verify” and Test-Kitchen gives you a common framework for testing your resources and configurations and use Pester to validate that your servers end up in the state you expect. +Visit the [Mississippi PowerShell User Group](http://mspsug.com/2016/04/29/mspsug-may-2016-virtual-meeting-acceptance-testing-dsc-with-test-kitchen/) website to learn more about Steven and to find out more details about this month’s meeting. +The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info](http://mspsug.com/attendee-info/)” section. +Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this meeting. +Note: It is not necessary to live in Mississippi or join our user group to attend our meetings or present a session for our user group. +µ diff --git a/content/articles/2016/05/practical-powershell-unit-testing/index.md b/content/articles/2016/05/practical-powershell-unit-testing/index.md new file mode 100644 index 000000000..9f478ecc3 --- /dev/null +++ b/content/articles/2016/05/practical-powershell-unit-testing/index.md @@ -0,0 +1,31 @@ +--- +url: /articles/2016-05-22-practical-powershell-unit-testing/ +title: Practical PowerShell Unit-Testing +authors: + - msorens +date: "2016-05-22T20:44:14+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks + - Tools + - Tutorials +aliases: + - /2016/05/practical-powershell-unit-testing/ +--- + +By the time you are using PowerShell to automate an increasing amount of your system administration, database maintenance, or application-lifecycle work, you will likely come to the realization that PowerShell is indeed a first-class programming language and, as such, you need to treat it as such. That is, you need to do development in PowerShell just as you would with other languages, and in particular to increase robustness and decrease maintenance cost with **unit tests** and--dare I say--**test-driven development** (TDD). I put together several articles on getting started with unit tests and TDD in PowerShell using [Pester][1], the leading test framework for PowerShell. This series introduces you to Pester and provides what I like to call "tips from the trenches" on using it most effectively, along with a gentle prodding towards a TDD style. +Part 1: [Getting Started with the Pester Framework][2] +Starting with the ubiquitous "Hello, World", this introduces Pester, showing how to execute tests, how to start writing tests, and the anatomy of a test. +Part 2: [Mock Objects and Parameterized Test Cases][3] +To be able to create true unit tests, you need to be able to isolate your functions and modules to be able to focus on the component under test; mocks provide great support for doing that. Another topic of "power" unit tests is making them parameterizable, i.e. being able to run several scenarios through a single test simply by providing different inputs. +Part 3: [Validating Data and Call History][4] +The final part of this series provides a "how-to" for several other key parts of Pester: how to validate data, how to determine if something was called appropriately, and how to address a particular challenge with Pester, validating arrays. I've included a library for array validation to supplement Pester. +For a more general treatment of unit tests, I refer you to Roy Osherove's canonical text on the subject, [The Art of Unit Testing][5]. +![... you wanted to know about Unit Testing in .NET | Coding in .NET](https://images.duckduckgo.com/iu/?u=http%3A%2F%2Fcoding-in.net%2Fblog%2Fwp-content%2Fuploads%2FArtOf%C2%B5UnitTesting.jpg&f=1) + + [1]: https://github.com/pester/Pester + [2]: http://www.simple-talk.com/sysadmin/powershell/practical-powershell-unit-testing-getting-started/ + [3]: http://www.simple-talk.com/sysadmin/powershell/practical-powershell-unit-testing-mock-objects/ + [4]: http://www.simple-talk.com/sysadmin/powershell/practical-powershell-unit-testing-checking-program-flow/ + [5]: http://artofunittesting.com/ diff --git a/content/articles/2016/05/slack-and-powershell/index.md b/content/articles/2016/05/slack-and-powershell/index.md new file mode 100644 index 000000000..b75edc3f6 --- /dev/null +++ b/content/articles/2016/05/slack-and-powershell/index.md @@ -0,0 +1,27 @@ +--- +url: /articles/2016-05-24-slack-and-powershell/ +title: Slack and PowerShell +authors: + - pscookiemonster +date: "2016-05-24T12:51:46+00:00" +categories: + - DevOps + - PowerShell for Admins +aliases: + - /2016/05/slack-and-powershell/ +--- + +Having a platform that enables [ChatOps][1] can be a game changer.  You can quickly see changes, alerts, build status, discussions, emergency chats, and more, all in a single, searchable interface.  If you can sift through the gifs. +Bots are a hot topic these days, and and it's well worth checking out Matt Hodgkins bit [on integrating PowerShell with Hubot][2].  Bots are a great alternative to trying to spin up a web front end for PowerShell. +On top of bots, systems like Slack often offer a [wealth of integrations][3], allowing you to hook into systems like Nagios, PagerDuty, GitHub, Trello, and many others. +Occasionally, you might have something that doesn't integrate natively.  Maybe you want to integrate Slack messages into your SCOM command notification channel, your CI/CD build process, orchestration system, configuration management systems, or even ad hoc scripts. +If you're using Slack, check out the [Slack API methods][4], or [an incoming webhook][5].  With the API in particular, you can do some handy stuff! +If you like the idea of re-usable tools and abstraction, check out [PSSlack][6], a PowerShell module that we're starting to build out, which can simplify sending messages, searching messages, and more. +[![pslack](https://powershell.org/wp-content/uploads/2016/05/pslack.png)][6] + + [1]: https://www.youtube.com/watch?v=F8Vfoz7GeHw + [2]: https://hodgkins.io/chatops-on-windows-with-hubot-and-powershell + [3]: https://slack.com/apps + [4]: https://api.slack.com/methods + [5]: https://api.slack.com/incoming-webhooks + [6]: http://ramblingcookiemonster.github.io/PSSlack/ diff --git a/content/articles/2016/05/your-feedback-wanted-new-ebook-hosting-for-powershell-org/index.md b/content/articles/2016/05/your-feedback-wanted-new-ebook-hosting-for-powershell-org/index.md new file mode 100644 index 000000000..4602f2b09 --- /dev/null +++ b/content/articles/2016/05/your-feedback-wanted-new-ebook-hosting-for-powershell-org/index.md @@ -0,0 +1,28 @@ +--- +url: /articles/2016-05-09-your-feedback-wanted-new-ebook-hosting-for-powershell-org/ +title: Your feedback wanted! New eBook Hosting for PowerShell.org +authors: + - Don Jones +date: "2016-05-09T13:28:43+00:00" +categories: + - Books +aliases: + - /2016/05/your-feedback-wanted-new-ebook-hosting-for-powershell-org/ +--- + +After dealing with numerous problems from PenFlip (where our free ebooks are currently located), we've decided to try two new hosting providers: GitBook and LeanPub. +Both of these are, or can be, based on Git/GitHub, which means the Markdown text of the book will always be open-sourced and available. Both offer conversion into PDF, MOBI, and EPUB formats, so you can download whichever you want. Both enable us to update the books at any time. Both are relatively easy to use; GitBook provides a moderately better writing experience since they provide a native app that kind of hides the Git-i-ness, but it's not a huge deal. More or less the same thing could be assembled for LeanPub if we wanted. +They do their formatting slightly differently, so it's worth looking at each to see which you like better. We don't have a ton of control over their formatting, so what you see in these tests is what you get. +LeanPub offers two key differences: + + * While we can and will continue to make the books available for free, we can also suggest a purchase price, and then actually let readers set a purchase price. This would enable donations to DevOpsCollective.org. + * Readers who "buy" the book (even for free) can register to receive email updates when a new version is produced. This _does_ mean you have to register using an e-mail address to download any book, even if you're not paying for it. We know some people get twitchy about providing contact info. + +We're going to use **one** of these new solutions, and we'd like your feedback. Try them both, if you can - we've converted _Creating HTML Reports in PowerShell_ over to both so that you can do a side-by-side comparison and see how they produce their various formats. Provide any feedback in the comments, below! +[The LeanPub Version][1] • [The GitBook Version][2] + +**UPDATE: **At least two folks have found that they can't access GitBook from their corporate network, which is concerning. Please indicate in the comments if that's a problem for you, too. +**UPDATE: **We're playing with GitHub. Both GitBook and LeanPub support it, and we're thinking we may be able to publish to both locations automagically, so people can choose the one that they like best. It looks like LeanPub will only generate a "Preview" when we push to GitHub, and we have to go in and manually "Publish" that latest version, but there may be a way to automate that. + + [1]: https://leanpub.com/creatinghtmlreportsinwindowspowershell + [2]: https://www.gitbook.com/book/devopscollective/creating-html-reports-in-powershell diff --git a/content/articles/2016/06/5-tips-for-writing-dsc-resources-in-powershell-5/index.md b/content/articles/2016/06/5-tips-for-writing-dsc-resources-in-powershell-5/index.md new file mode 100644 index 000000000..285ae5620 --- /dev/null +++ b/content/articles/2016/06/5-tips-for-writing-dsc-resources-in-powershell-5/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2016-06-09-5-tips-for-writing-dsc-resources-in-powershell-5/ +title: 5 Tips for Writing DSC Resources in PowerShell 5 +authors: + - Matthew Hodgkins +date: "2016-06-09T18:44:00+00:00" +categories: + - DevOps + - PowerShell for Developers + - Tips and Tricks + - Tools +aliases: + - /2016/06/5-tips-for-writing-dsc-resources-in-powershell-5/ +--- + +PowerShell 5 brought class based DSC Resources, which majorly simplifies the process of writing custom DSC resources. +During my time working on some custom resources, I developed some tips a long the way which should save you some time and pain during your DSC journey. +The tips cover: + + * Structuring your class based DSC Resources + * Making it easier to get IntelliSense based on your DSC resources without constantly copying them into the module path + * Using PowerShell ISE IntelliSense when writing DSC configuration + * Troubleshooting resources which aren't being exposed correctly from your DSC Module + * Testing classed based resources with Pester + +Head over to  to take a look at the tips. diff --git a/content/articles/2016/06/_index.md b/content/articles/2016/06/_index.md new file mode 100644 index 000000000..1c616aac9 --- /dev/null +++ b/content/articles/2016/06/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from June 2016" +description: "PowerShell.org Articles published in June 2016." +--- diff --git a/content/articles/2016/06/complete-guide-to-powershell-punctuation/index.md b/content/articles/2016/06/complete-guide-to-powershell-punctuation/index.md new file mode 100644 index 000000000..75dd8f461 --- /dev/null +++ b/content/articles/2016/06/complete-guide-to-powershell-punctuation/index.md @@ -0,0 +1,36 @@ +--- +url: /articles/2016-06-11-complete-guide-to-powershell-punctuation/ +title: Complete Guide to PowerShell Punctuation +authors: + - msorens +date: "2016-06-11T22:57:55+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks + - Training +aliases: + - /2016/06/complete-guide-to-powershell-punctuation/ +--- + +Quick as you can, can you explain what each of these different parentheses-, brace-, and bracket-laden expressions does? + + +`${save-items} +${C:tmp.txt} +$($x=1;$y=2;$x;$y) +(1,2,3 -join '*') +(8 + 4)/2 +$hashTable.ContainsKey($x) +@(1) +@{abc='hello'} +{param($color="red"); "color=$color"} +$hash['blue'] +[Regex]::Escape($x) +[int]"5.2" +`When you're reading someone else's PowerShell code, you will come across many of these constructs, and more. And you know how challenging it can be to search for punctuation on the web (symbolhound.com not withstanding) ! +That is why I put together a reference chart containing all of PowerShell's symbology on one page. making it much easier when you need to look up a PowerShell symbol as you read code--or to browse for the right construct when you are writing code. +![PowerShell Punctuation wall chart](https://powershell.org/wp-content/uploads/2016/06/punctuation_thumbnail-300x152.png) +Download the **Complete Guide to PowerShell Punctuation** wallchart from [here][1]. + + [1]: https://www.simple-talk.com/sysadmin/powershell/the-complete-guide-to-powershell-punctuation/ diff --git a/content/articles/2016/06/help-me-test-ssl-on-powershell-org/index.md b/content/articles/2016/06/help-me-test-ssl-on-powershell-org/index.md new file mode 100644 index 000000000..a150f8acf --- /dev/null +++ b/content/articles/2016/06/help-me-test-ssl-on-powershell-org/index.md @@ -0,0 +1,28 @@ +--- +url: /articles/2016-06-13-help-me-test-ssl-on-powershell-org/ +title: Help Me Test SSL on PowerShell.org +authors: + - Don Jones +date: "2016-06-13T14:02:17+00:00" +categories: + - Announcements +aliases: + - /2016/06/help-me-test-ssl-on-powershell-org/ +--- + +I'd appreciate your help in testing HTTPS/SSL here on PowerShell.org. Right now, it's "voluntary," meaning you have to explicitly ask for . If you have any problems, please note them in a comment on this article. +Some notes and known problems: + + * Most pages will not show the "lock" address bar icon in your browser, because we're delivering mixed content. For example, the site logo is being hardcoded as http:// by some Javascript in our theme, which I need to sort out. + * _Your_ connection will be to CloudFlare, which is who issued the certificate you'll see. We've also SSL'd the traffic between them and our server using a DigiCert SSL certificate. We're also going to enable client certificate authentication, so our server will only deliver content to CloudFlare, which then delivers it to you. That's ahead. + +I _think_ we can solve the mixed-content problem by forcing HTTPS, which is easy, but I want to make sure it's otherwise working before taking that step. We already have a WordPress plugin in place that's rewriting http:// or https:// with just // in URLs, but there're a couple of places where that plugin isn't able to help, and that's why we're delivering mixed content still. +I'll point out that this is _mainly_ a bonus-points project; because almost everyone logs into the site using an external account, we don't store many passwords (and thus don't transmit them in the clear or otherwise). We don't store or transmit any other personally identifiable information. Still, SSL has some other benefits, and it shouldn't _hurt_ to have it on, so we're giving it a shot. +Thanks! + +## UPDATES 15 June 2016 + + * The Lock icon in browser address bars should be working; we've fixed the mixed-content issues I've found. + * We're forcing HTTPS. + * We use CloudFlare; you're getting SSL from you to them, and they're getting (forced) SSL from them to us. + * We're getting an "A" from SSLLabs and SecurityHeaders.io - thanks for that suggestion, Paal. CloudFlare doesn't let us implement _every_ security header yet, but we've got most of the recommended ones. diff --git a/content/articles/2016/06/heres-what-youve-missed-at-powershell-org-and-whats-coming/index.md b/content/articles/2016/06/heres-what-youve-missed-at-powershell-org-and-whats-coming/index.md new file mode 100644 index 000000000..f8db204f6 --- /dev/null +++ b/content/articles/2016/06/heres-what-youve-missed-at-powershell-org-and-whats-coming/index.md @@ -0,0 +1,33 @@ +--- +url: /articles/2016-06-24-heres-what-youve-missed-at-powershell-org-and-whats-coming/ +title: "Here's What You've Missed at PowerShell.org (and what's coming)" +authors: + - Don Jones +date: "2016-06-24T17:19:59+00:00" +categories: + - Announcements +aliases: + - /2016/06/heres-what-youve-missed-at-powershell-org-and-whats-coming/ +--- + +We've been making a ton of improvements at PowerShell.org... if you haven't visited in a while, it might be worth a stop by. +**First, **if you're hitting any of the links below and getting a 404, the most common culprit seems to be an over-zealous corporate proxy cache. Try clearing it, or doing a Shift+Reload in your browser. Confirm by visiting from a non-proxied network, like at home. +Our [eBooks][1] page has a bunch of new content, and our books are now available in PDF, MOBI, and EPUB from two providers (LeanPub and GitBook). You can also read books online in HTML. +Site members now have an extensive profile that you can complete, and doing so is one step on our short [Welcome Aboard! mission][2] that will earn you a new "Welcome!" badge on the site. It's one of many new [achievements you can earn][3] for participating in the community in a variety of ways. +And have you seen our new [videos][4]? In addition to tons of YouTube videos that include workshops, tutorials, and Summit recordings, we also have started new short-subject, structured learning series - entire courses that even award a certificate of completion when you're done! +But there's much more we can do to help you connect with community, so we're taking a quick survey. Here's some of what we can enable: + + * **Friend Connections. **Kinda like Facebook, enabling you to track on-site activity of the people you "follow." + * **Private Messages. **Just what it says - everyone would have a mailbox inside PowerShell.org. + * **Activity Streams. **Similar to a Twitter or Facebook feed, a way of seeing site activity (with its own RSS). Threaded comments, @mentions, and email notifications, too. + * **User Groups. **The ability to create in-site groups with their own discussion forum, activity stream, and shared content. + * **REST API. **A way of communicating with WordPress via REST calls, to retrieve or check content. + +[Visit the survey to let us know][5] which ones you'd want, or don't care about. +And drop a comment below if there's something else you'd like to see or share! + + [1]: /learning/ + [2]: https://powershell.org/mission/welcome-aboard/ + [3]: https://powershell.org/achievements/ + [4]: /learning/ + [5]: http://674004.polldaddy.com/s/powershell-org-features diff --git a/content/articles/2016/06/high-level-designing-your-powershell-command-set/index.md b/content/articles/2016/06/high-level-designing-your-powershell-command-set/index.md new file mode 100644 index 000000000..436e376cb --- /dev/null +++ b/content/articles/2016/06/high-level-designing-your-powershell-command-set/index.md @@ -0,0 +1,43 @@ +--- +url: /articles/2016-06-20-high-level-designing-your-powershell-command-set/ +title: "High-Level: Designing Your PowerShell Command Set" +authors: + - Don Jones +date: "2016-06-20T10:27:41+00:00" +categories: + - PowerShell for Developers +aliases: + - /2016/06/high-level-designing-your-powershell-command-set/ +--- + +So you've decided to write a bunch of commands to help automate the administration of ____. Awesome! Let's try and make sure you get off on the right path, with this high-level overview of command design. + +## Start with an inventory + +You'll need to start by deciding _what commands to write, _and an inventory is often the best way to begin. Start by inventorying your nouns. For example, suppose you're writing a command set for some internal order-management system. You probably have nouns like Customer, Employee, Order, OrderItem, CustomerAddress, and so on. Write 'em all down in an Excel spreadsheet, one noun per row. +Then inventory your verbs. For each noun, what can you do with it? For example, you can probably create orders, so a New-Order command will be needed. Make a "New" column in your spreadsheet, and put an "X" in the row next to the Order noun. However, you probably can't _remove_ an order from the system, so although your spreadsheet might have a "Remove" column to cover things like Remove-Employee, that column won't get an "X" in the Order row. Orders might be voidable, though, so what's a good verb for that?  has the official verb list, but there's no "Void" or "Cancel" that seems appropriate. Don't go making up new verbs!!! Instead, it might be that Set-Order could be the answer, enabling approved changes to orders, including cancelling them (but retaining the record). +Finally, pick a prefix for your nouns. If your order system is named "Order Awesomeness," then maybe OAwe is a good noun prefix, as in Set-OAweOrder. The prefix will help keep your command names from bumping up against other people's, so making sure that noun prefix is pretty unique... is pretty important. + +## Design individual commands + +Now it's time to start designing individual commands. This is usually a kind of iterative process, meaning you'll go back and change your mind, expand, and so on a few times before you're done. +Start by _writing examples of how each command will be used_ to accomplish whatever tasks you'll be accomplishing. Save these examples, too - they should become examples in your commands' help files. Write as many examples as possible, covering as many situations and needs as you can think of. Enlist users to help. +As you write the examples, try to pay attention to the following: + + * Parameter names should be consistent across the commands. If order objects have an ID, and you need to be able to specify it, then it should be something like -OrderId every time. Don't use -OrderId on some commands and -Id on thers. Also pay attention to what the underlying software objects' property names are. For example, if customer names are exposed through a CustNameFirst and CustNameLast property, consider using those as corresponding parameter names, or at least as parameter name aliases. + * Start thinking about which parameters are going to be mandatory. + * Give some thought to different ways that commands might be used, and start denoting those as different parameter sets. + +This kind of example-based specification will help you think through how you want the commands to work, and it may highlight cases where you need more commands, where commands may need to be combined, and so on. + +## Sketch out your help files + +Believe it or not, it's not a bad idea to start drafting out your help files at this point. Define parameter sets, parameters, and examples. Briefly describe what each parameter is for - you can always make the language nicer and more formal later, so just a brief draft should work at this point. This kind of forces you to think through how your commands will work, and how other people will end up approaching them. It also gives you a good start on writing documentation! "Documentation as specification" helps a lot of people write specs that can end up being repurposed as docs, killing two birds with one stone. + +## Define expected results + +Go back to your examples, and provide some examples of the results you'd expect to see if you actually ran those commands as shown in your examples. This helps you to start defining the tests that you'll run against your code. "For this command, we should get this output" is exactly what testing is all about. "This command should generate this error, this command should do this," and so on. + +## Start coding + +With some good design work out of the way, you can start coding. Not just your commands, mind you, but also the Pester tests you'll use to validate those commands. Code 'em at the same time, if you like, and use those tests in unit testing as you work. diff --git a/content/articles/2016/06/mspsug-june-14th-virtual-meeting-pester-the-tester-powershell-bugs-beware/index.md b/content/articles/2016/06/mspsug-june-14th-virtual-meeting-pester-the-tester-powershell-bugs-beware/index.md new file mode 100644 index 000000000..b54ff1d6a --- /dev/null +++ b/content/articles/2016/06/mspsug-june-14th-virtual-meeting-pester-the-tester-powershell-bugs-beware/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2016-06-10-mspsug-june-14th-virtual-meeting-pester-the-tester-powershell-bugs-beware/ +title: "MSPSUG June 14th Virtual Meeting: Pester the Tester PowerShell Bugs Beware!" +authors: + - Mike F Robbins +date: "2016-06-10T15:47:52+00:00" +categories: + - Events +aliases: + - /2016/06/mspsug-june-14th-virtual-meeting-pester-the-tester-powershell-bugs-beware/ +--- + +Join the Mississippi PowerShell User Group virtually on Tuesday, June 14th 2016 at 8:30pm Central Time when Microsoft MVP [Robert Cain](https://twitter.com/arcanecode) will be presenting “**_Pester the Tester: PowerShell Bugs Beware!_**”. +So you’ve been developing PowerShell for a while, or perhaps you’re taking over maintenance of an existing set of scripts. It would be great to get extra confidence in your scripts through testing, but how? You’re in luck, there’s a new module in town, Pester! +Pester is a friendly testing framework designed for testing your PowerShell scripts and modules. In this session you’ll be introduced to Pester. You’ll see how to use Pester to uncover bugs, as well as using it for test driven development. Make your own PowerShell more robust through the use of Pester. Kill those PowerShell bugs, dead! +Visit the [Mississippi PowerShell User Group](http://mspsug.com/2016/05/31/mspsug-june-2016-virtual-meeting-pester-the-tester-powershell-bugs-beware/) website to learn more about Robert and to find out more details about this month’s meeting. +The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info](http://mspsug.com/attendee-info/)” section. +Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this meeting. +Note: It is not necessary to live in Mississippi or join our user group to attend our meetings or present a session for our user group. +µ diff --git a/content/articles/2016/06/my-devops-dsc-camp-detailed-agenda/index.md b/content/articles/2016/06/my-devops-dsc-camp-detailed-agenda/index.md new file mode 100644 index 000000000..11e13d0ac --- /dev/null +++ b/content/articles/2016/06/my-devops-dsc-camp-detailed-agenda/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2016-06-06-my-devops-dsc-camp-detailed-agenda/ +title: My DevOps (DSC) Camp Detailed Agenda +authors: + - Don Jones +date: "2016-06-06T19:59:59+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/06/my-devops-dsc-camp-detailed-agenda/ +--- + +If you're deep into DSC and delving into DevOps, then my summer "Camp" event is probably meant for you - and now there's a detailed agenda, overall agenda, and full event brochure. This is a really limited event - under 20, including product team participants, and we're down to just a few seats left. + +> + +> [DevOps and DSC Camp Detailed Agenda](https://donjones.com/2016/06/06/devops-and-dsc-camp-detailed-agenda/) +> diff --git a/content/articles/2016/06/request-for-topics/index.md b/content/articles/2016/06/request-for-topics/index.md new file mode 100644 index 000000000..5fa7adb56 --- /dev/null +++ b/content/articles/2016/06/request-for-topics/index.md @@ -0,0 +1,60 @@ +--- +url: /articles/2016-06-06-request-for-topics/ +title: Request for Topics +authors: + - Richard Siddaway +date: "2016-06-06T09:33:30+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2016/06/request-for-topics/ +--- + +Putting on an event like the PowerShell and DevOps Global Summit involves a lot of planning. We started the planning process for the 2017 Summit BEFORE the 2016 Summit started! + + +We have to work so far in advance that we’re taking guesses at the topics that will be of high interest next April – remember that we fix the agenda 6 months before the actual Summit. + + +Part of the process of creating the agenda is that we publish a ‘Call for Proposals’ where we ask potential speakers to submit session proposals. We then use those proposals as the basis of the agenda. Session proposals can be taken as they are or we may suggest changes to the speaker to ensure a more cohesive agenda. + + +Our aim in all of this is to provide relevant, high-level sessions that will keep the Summit as a ‘must attend’ event for the PowerShell community. + + +This year we’re asking for your help. + + +We’d like you to suggest topic areas that you’d like to see at the Summit. This is NOT a call for specific session proposals (that will come in August) or a request for particular speakers to talk about a topic but a request for topics. For instance: + + + * +We had some feedback from attendees at the 2016 Summit that a deep session on remoting would be of interest. + + * +The last few Summits we’ve had a lot of material on DSC – is it too much or do you want more in specific areas? + + * +Security is a highly important topic – do you want more? Is there a particular security aspect that should be covered? + + * +PowerShell is a very broad topic – are there areas such as Workflows, Jobs, Events, Remoting, CIM, Package Management where you’d like more? + + * +DevOps is another broad area -do you want sessions on dealing with specific technologies such as Chef, Puppet, Octopus, Source Control and anything else that enables your DevOps processes? + + +This list isn’t meant to be exhaustive – just a number of suggestions to start you thinking about the subject areas you’d like to see at the Summit. + + +We’ll summarise the topic areas that are requested in the information supplied to potential speakers in the Call for Proposals document. + + +Please use the comment facility to reply. If you need to supply further information you can use the standard Summit email address of Summit at PowerShell dot org. + + +The PowerShell Summit has become a premier event in the calendar of the PowerShell community. This is your opportunity to help shape next year’s Summit into the event you want to see. + + +Thank you. diff --git a/content/articles/2016/06/to-ping-or-not-to-ping-the-powershell-way/index.md b/content/articles/2016/06/to-ping-or-not-to-ping-the-powershell-way/index.md new file mode 100644 index 000000000..010823b40 --- /dev/null +++ b/content/articles/2016/06/to-ping-or-not-to-ping-the-powershell-way/index.md @@ -0,0 +1,112 @@ +--- +url: /articles/2016-06-27-to-ping-or-not-to-ping-the-powershell-way/ +title: To ping or not to ping..The PowerShell way +authors: + - Graham Beer +date: "2016-06-27T20:29:29+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/06/to-ping-or-not-to-ping-the-powershell-way/ +--- + +As this is my first blog here, here’s a bit about me. I’m a current lead SCCM Admin in the UK, and have found this great enjoyment for PowerShell in the last 18 months. I’ve started my own blog, , to share my passion. The chance to blog on Powershell.org was too exciting not to do! +The inspiration for this blog came from a forum post on Powershell.org that I helped contributed on. The question asked was, how to display the name of failed ping, i.e. $computer is offline. +There were some great responses, the one I most liked which I slightly amended into a function was: + + +`function test-ping { $args | % {[pscustomobject]@{online = test-connection $_ -Count 1 -quiet;computername = $_}} } +`The simplicity and power is brilliant. (Credit to Dan Potter!) +I expanded on this and came up with a way to use the results in several different ways. All this by the power of advanced functions. +I have two advanced functions 'ValueFromPipeline' and 'ValidateSet' in this script: +1. **'ValueFromPipeline'** gives the capability to pass more than one object to our script. Perfect for passing one or many devices. +Other than the message "Online: PC1", I wanted to be able to use the ping status to pass to another cmdlet, collate all online or offline devices and display the results in a table. +2. Using **'ValidateSet'** I could define my options, "Online","Offline" and "ObjectTable". But by not setting the parameter to mandatory, you don’t have to use the additional options. +To continue using the ping response, I needed to hold them somewhere. I did this by creating an empty array in the Begin block and append each ping response to it. +Regardless of what option I choose, if any, the below block of code will always run: + + +`$device| foreach { + if (Test-Connection $_ -Count 1 -Quiet) { + if(-not($GetObject)){write-host -ForegroundColor green "Online: $_ "} + $Hash = $Hash += @{Online="$_"} + }else{ + if(-not($GetObject)){write-host -ForegroundColor Red "Offline: $_ "} + $Hash = $Hash += @{Offline="$_"} + } + } +`Devices in the variable, $device, will each be 'pinged' then passed through a 'if' statement depending on offline or online status and get added into the $hash array variable. +**DISCLAIMER:** I should apologies to Don here for killing the puppies with write-host. I wanted to just push out some colored output to the host only! +Before I go any further, let me briefly explain how I am 'pinging' the devices. I am using the cmdlet 'Test-Connection'. The synopsis on 'get-help' for test-connection states, 'Sends ICMP echo request packets ("pings") to one or more computers.' A nice feature of this cmdlet is the '-quiet' syntax. This is cool as it gives a Boolean result (True or False) of the 'ping' status. By adding a '-count' as well I can limit the number of times I request a connection check. Now I can pass as many devices through the pipeline to my function and get an online or offline message pretty quickly. +The second half of the script only runs if you add the '$getObject' option from the function. The use of the 'validateSet' allows me to make sure the three options I defined are used only. +The data collected in the $hash array variable is passed through a foreach statement and creates customobjects. The final part is use of a 'Switch'. Depending on what was chosen in the $getObject parameter is the output at the end of the script. +The advantage to this switch is I can pass all the online PC's to something else via the pipeline. For example, an AD group or a deployment collection: + + +`'PC1','PC2' | Get-PingStatus -GetObject Online | # pass to another cmdlet +`Capture the 'online' PC's to a variable and use: + + +`$Online = 'PC1','PC2' | Get-PingStatus -GetObject Online +`Or if you need to report back a list of PC's which are either on or offline in an object group: + + +`'PC1','PC2', 'PC3','PC4 | Get-PingStatus -GetObject objectTable +DeviceName Online offline +---------- ------ ------- +pc4 Online +pc1 Offline +pc2 Offline +pc3 Offline +`Again this script has great flexibility in how you pass the device objects. +Say you have a list of PC's in a txt for CSV file, you can use Get-content and pipe it to Get-PingStatus: + + +`get-content pcs.csv | Get-PingStatus +`NOTE: +The use of the $Global: variable allowed me to use $Global:Objects once the script has complete. Just something I thought could be useful. The $Script: variable would have worked fine should I not want to use the variable outside the script. +I hope you've enjoyed my blog and I welcome any comments. I've posted the script on GitHub should you wish to download. + +The full script: + + +`Function Get-PingStatus + { + param( + [Parameter(ValueFromPipeline=$true)] + [string]$device, + [validateSet("Online","Offline","ObjectTable")] + [String]$getObject + ) +begin{ + $hash = @() + } +process{ + $device| foreach { + if (Test-Connection $_ -Count 1 -Quiet) { + if(-not($GetObject)){write-host -ForegroundColor green "Online: $_ "} + $Hash = $Hash += @{Online="$_"} + }else{ + if(-not($GetObject)){write-host -ForegroundColor Red "Offline: $_ "} + $Hash = $Hash += @{Offline="$_"} + } + } + } +end { + if($GetObject) { + $Global:Objects = $Hash | foreach { [PSCustomObject]@{ + DeviceName = $_.Values| foreach { "$_" } + Online = $_.Keys| where {$_ -eq "Online"} + offline = $_.Keys| where {$_ -eq "Offline"} + } + } + Switch -Exact ($GetObject) + { + 'Online' { $Global:Objects| where 'online'| select -ExpandProperty DeviceName } + 'Offline' { $Global:Objects| where 'offline'| select -ExpandProperty DeviceName } + 'ObjectTable' { return $Global:Objects } + } + } + } +} +` diff --git a/content/articles/2016/07/_index.md b/content/articles/2016/07/_index.md new file mode 100644 index 000000000..c0fe1f1c1 --- /dev/null +++ b/content/articles/2016/07/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from July 2016" +description: "PowerShell.org Articles published in July 2016." +--- diff --git a/content/articles/2016/07/deploying-modules-to-the-powershell-gallery/index.md b/content/articles/2016/07/deploying-modules-to-the-powershell-gallery/index.md new file mode 100644 index 000000000..aec697d3c --- /dev/null +++ b/content/articles/2016/07/deploying-modules-to-the-powershell-gallery/index.md @@ -0,0 +1,119 @@ +--- +url: /articles/2016-07-27-deploying-modules-to-the-powershell-gallery/ +title: Deploying Modules to the PowerShell Gallery +authors: + - pscookiemonster +date: "2016-07-27T00:38:35+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/07/deploying-modules-to-the-powershell-gallery/ +--- + +So! We've talked about [continuous integration and deployment with PSDeploy][1], the [importance of abstraction][2], and a bit on [how and why to write and publish PowerShell modules][3]. +It's time to combine these ingredients with a quick, real-world walk through on _automatically publishing your PowerShell modules to the PowerShell Gallery_.  If you want a full run-down showing how to deploy PSDeploy with PSDeploy, [hit the link][4]; otherwise, we'll pick up the [PSStackExchange module][5] where we left off, and drop in some continuous integration and deployment goodness! + +### Is everything in order? + +First things first, what do we already have? + + * A GitHub account, with a repo containing [a PowerShell module][6] + * A [PowerShell Gallery][7] account ([register an existing Microsoft account][8]) + * Our [PowerShell Gallery API Key][9] + +That's about it!  This is all you need to start automatically publishing to the PowerShell Gallery. + +### Manual steps + +There's one manual step to take - we'll use AppVeyor's [secure variables][10] feature to encrypt our PowerShell Gallery API key under our AppVeyor account. +Chris Wahl has [a quick hit with instructions][11].  Long story short? Click your AppVeyor account drop down, Encrypt data.  Paste in your API key and Encrypt!  Copy out the resulting encrypted value. +Okay, now what do we do with it? + +### Drop in the scaffolding! + +We're going to download four files and substitute in our encrypted data.  You could use the code below with a few substitutions to add automated deployments to your PowerShell modules: + + +`# Create a folder, clone PSStackExchange, browse to that repo +# Substitute in values for your own module as desired +$Repo = 'C:\sc\PSStackExchange\' +mkdir C:\sc +cd C:\sc +git clone https://github.com/RamblingCookieMonster/PSStackExchange.git +cd $Repo +# We're in the repo! Download 4 scaffolding files: +$wc = New-Object System.Net.WebClient +'https://raw.githubusercontent.com/RamblingCookieMonster/PSDeploy/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/appveyor.yml', +'https://raw.githubusercontent.com/RamblingCookieMonster/PSDeploy/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/build.ps1', +'https://raw.githubusercontent.com/RamblingCookieMonster/PSDeploy/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/psake.ps1', +'https://raw.githubusercontent.com/RamblingCookieMonster/PSDeploy/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/deploy.psdeploy.ps1' | + ForEach-Object { + $File = Join-Path $Repo ($_ -split "/")[-1] + $wc.DownloadFile( $_, $File ) + } +# Replace my encrypted NuGetApiKey with yours! +$YourKey = 'SomeEncryptedKeyFromAppVeyor' # <<<<<< Replace this with your encrypted data from AppVeyor <<<<<< +$AppVeyorPath = Join-Path $Repo appveyor.yml +$AppVeyorContent = Get-Content $AppVeyorPath -Raw +Set-Content $AppVeyorPath -Value $AppVeyorContent.replace('secure: oqMFzG8F65K5l572V7VzlZIWU7xnSYDLtSXECJAAURrXe8M2+BAp9vHLT+1h1lR0', "secure: $YourKey") +# Commit your changes, push them to GitHub, and you're good to go! +`I made these changes, pushed to GitHub with !Deploy in my commit message, and voila!  AppVeyor [ran the build][12], and PSStackExchange [was updated][13] in the gallery! + +### Wait, what does this all mean? + +So! Every time I make a change to PSStackExchange going forward, I have the option to say _!Deploy_ anywhere in my commit message.  When that happens, my changes run through Pester tests in AppVeyor, and are automatically pushed to the PowerShell Gallery in the unlikely event that I didn't make a mistake. + + * Someone submits a bug report and I have a fix to add?  Automatically !Deploy + * Someone submits a pull request with an awesome new feature?  Automatically !Deploy + * I discover I've made a terrible mistake and need to re-write something?  Automatically !Deploy + * I'm literally too lazy to run a single command, with a key I could serialize using the DPAPI?  !Deploy + +Okay, to be fair, this pipeline borrows from the PowerShell team and [deploys developer builds to AppVeyor][14] regardless of whether you say !Deploy. +More specifically: + + * AppVeyor reads the [appveyor.yml][15], which tells it to run the build.ps1 + * The [build.ps1][16] downloads a few modules, sets some build variables, and runs psake.ps1 + * [Psake.ps1][17] includes our steps to test via Pester, build via BuildHelpers (bump the module version, etc.), and deploy via PSDeploy + * [Deploy.psdeploy.ps1][18] tells PSDeploy what to deploy, and includes some gates - for example, only deploy the master branch to the PowerShell gallery + +That's about it! + +### Takeaways + +Three quick takeaways: +(1) Each of the components in this pipeline, and the pipeline itself are open source:  [psake][19], [Pester][20], [PSDeploy][21], and [BuildHelpers][22].  Feel free to contribute ideas, bug reports, tests, documentation, code, and the like. +(2) It goes without saying, but do consider writing modules, [open sourcing][23] them, and publishing them to the PowerShell Gallery - ideally automatically with something like the process we just walked through! +(3) This is a great way to get your feet wet with [release pipelines][24] for infrastructure.  You might have different tests, and you might deploy systems and services rather than modules, but ultimately: + + * You're pushing changes to source control + * You have a build system that watches this, and... + * Runs a suite of tests + * Perhaps "builds" some artifacts you need + * Pushes out your changes.  Perhaps to production + +Cheers! + + [1]: https://powershell.org/continuous-integration-continuous-delivery-and-psdeploy/ + [2]: https://powershell.org/abstraction-and-configuration-data/ + [3]: https://powershell.org/writing-and-publishing-powershell-modules/ + [4]: http://ramblingcookiemonster.github.io/PSDeploy-Inception/ + [5]: https://github.com/RamblingCookieMonster/PSStackExchange/tree/db1277453374cb16684b35cf93a8f5c97288c41f/PSStackExchange + [6]: https://github.com/RamblingCookieMonster/PSStackExchange/tree/db1277453374cb16684b35cf93a8f5c97288c41f + [7]: https://www.powershellgallery.com/ + [8]: https://www.powershellgallery.com/users/account/LogOn?returnUrl=%2F + [9]: https://www.powershellgallery.com/account + [10]: https://www.appveyor.com/docs/build-configuration#secure-variables + [11]: http://wahlnetwork.com/2016/07/19/encrypting-environmental-variables-with-appveyor/ + [12]: https://ci.appveyor.com/project/RamblingCookieMonster/psstackexchange/build/1.0.4 + [13]: https://www.powershellgallery.com/packages/PSStackExchange/1.0.3 + [14]: http://psdeploy.readthedocs.io/en/latest/Example-AppVeyorModule-Deployment/ + [15]: https://github.com/RamblingCookieMonster/PSDeploy/blob/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/appveyor.yml + [16]: https://github.com/RamblingCookieMonster/PSDeploy/blob/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/build.ps1 + [17]: https://github.com/RamblingCookieMonster/PSDeploy/blob/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/psake.ps1 + [18]: https://github.com/RamblingCookieMonster/PSDeploy/blob/master/deploy.psdeploy.ps1 + [19]: https://github.com/psake/psake + [20]: https://github.com/pester/Pester + [21]: https://github.com/RamblingCookieMonster/PSDeploy/ + [22]: https://github.com/RamblingCookieMonster/BuildHelpers + [23]: http://www.themacro.com/articles/2016/05/why-the-best-give-away/ + [24]: http://aka.ms/trpm diff --git a/content/articles/2016/07/every-pithy-witticism-begins-with-quotation-marks/index.md b/content/articles/2016/07/every-pithy-witticism-begins-with-quotation-marks/index.md new file mode 100644 index 000000000..8aace7864 --- /dev/null +++ b/content/articles/2016/07/every-pithy-witticism-begins-with-quotation-marks/index.md @@ -0,0 +1,35 @@ +--- +url: /articles/2016-07-23-every-pithy-witticism-begins-with-quotation-marks/ +title: Every pithy witticism begins with quotation marks +authors: + - msorens +date: "2016-07-23T22:56:52+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks + - Tutorials +aliases: + - /2016/07/every-pithy-witticism-begins-with-quotation-marks/ +--- + +**"To be or not to be".** Without getting into a debate over whether Shakespeare was musing about being a logician, suffice to say that in writing prose, the rules of _when_ and _how_ to use quotation marks are relatively clear. In PowerShell, not so much. Sure, there is an [about_Quoting_Rules][1] documentation page, and that is a good place to start, but that barely covers half the topic. It assumes you need quotes and then helps you appreciate some of the factors to consider when choosing single quotes or double quotes. +But do you _need_ quotes? Remember PowerShell is a shell/command language so "obviously" you can do things like this: + + +`PS> Delete-Item C:\tmp\foobar.txt +PS> Get-ChildItem *.log +PS> Get-Process svchost, conhost, powershell +`It would certainly be cumbersome if you needed to quote each of those arguments, so PowerShell was designed well, in that respect. +But what if you ran the same commands just slightly differently? + + +`PS> "C:\tmp\foobar.txt" | Delete-Item +PS> "*.log" | Get-ChildItem +`Here you _must_ use quotation marks or you will suffer the wrath of a terminating error from the PowerShell host most certainly! +Those are just a couple of the many examples I consider in [When to Quote in PowerShell][2]. Accompanying the full article, I also included a wallchart that condenses all the article's salient points into a single-page reference. Here's a fragment of the wallchart: +![Guide to PowerShell Quoting wall chart](https://powershell.org/wp-content/uploads/2016/07/quoting_thumbnail-300x198.png) +Read the article and download the wallchart [here][2]. + + [1]: https://technet.microsoft.com/en-us/library/hh847740.aspx + [2]: https://www.simple-talk.com/sysadmin/powershell/when-to-quote-in-powershell/ diff --git a/content/articles/2016/07/finding-powershell-sessions-at-conferences-and-events/index.md b/content/articles/2016/07/finding-powershell-sessions-at-conferences-and-events/index.md new file mode 100644 index 000000000..76e80b0ba --- /dev/null +++ b/content/articles/2016/07/finding-powershell-sessions-at-conferences-and-events/index.md @@ -0,0 +1,45 @@ +--- +url: /articles/2016-07-01-finding-powershell-sessions-at-conferences-and-events/ +title: Finding PowerShell Sessions At Conferences and Events +authors: + - pscookiemonster +date: "2016-07-01T13:20:03+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/07/finding-powershell-sessions-at-conferences-and-events/ +--- + +### The Current State + +So! If you visit the [PowerShell.org events][1] page, you'll find a bevy of PowerShell-focused events, from local PowerShell user groups to global PowerShell conferences. +What you won't find, yet, is a list of PowerShell related sessions at the many other conferences and user groups you might consider attending. +Maybe you'd like to find PowerShell oriented sessions at non-PowerShell user groups and mini conferences like SQL Saturdays, VMUGs, Azure User Groups, Security BSides, DevOpsDays, etc.  These are great small events that can build your knowledge, help you meet local folks in a particular field, and often provide provide you with some free food. +Beyond these, there are plenty of summits and conferences that have a strong PowerShell track, or even just a handful of awesome PowerShell sessions, that might be worth knowing about. LISA, DerbyCon, MMS, WinOps, TechMentor, and many more. +How do you find these events?  There isn't a solid option today, but hopefully we can change that.  Before we go further though, why is this even helpful? + +### Why? + +This might be silly, but I tend to gravitate towards PowerShell oriented sessions at non-PowerShell-focused events.  If someone is using PowerShell to work with a particular technology, chances are they will be good folks to learn from. +On top of this, your local user group leaders would have details on folks they could potentially ping and enlist for an in-person session, or even just an informal geek dinner. +Finally, it might help you find events worth attending.  If you want a comprehensive list of tech conferences and events, there isn't really a solid directory, let alone one what will help you find PowerShell oriented sessions. + +### What Can I Do? + +If you think this would be worthwhile, you can help make it happen! +Are you giving a PowerShell oriented session?  Is it on PowerShell.org's event page? Go ahead and [add it][2]! Try to keep in line with their policy of including nonprofit, not-for-profit, or otherwise noncommercial events, but thankfully most tech events fit the bill. +Here's a quick example: + + * _Event Name_: Event Name: Session title + * _When_: Specific start and stop time for the one session + * _Where_: Address for the event + * _Details_: Abstract for the session, ideally mentioning who will be presenting + +Once you've filled it out, it might [look like this][3]. +If you know of a session that isn't listed, feel free to pester the presenter and to point them at this post - the earlier they get it on the calendar, the better!  If you have the session details and can't get in touch with the presenter, feel free to add the session yourself. +Cheers! + + + [1]: https://powershell.org/events/ + [2]: https://powershell.org/events/submit-event/ + [3]: https://powershell.org/events/lisa16-release-pipelines-in-microsoft-ecosystems/ diff --git a/content/articles/2016/07/mspsug-july-12th-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module/index.md b/content/articles/2016/07/mspsug-july-12th-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module/index.md new file mode 100644 index 000000000..323971f82 --- /dev/null +++ b/content/articles/2016/07/mspsug-july-12th-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2016-07-11-mspsug-july-12th-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module/ +title: "MSPSUG July 12th Virtual Meeting: Exploring SQLPS, the SQL Server PowerShell Module" +authors: + - Mike F Robbins +date: "2016-07-11T18:21:52+00:00" +categories: + - Events +aliases: + - /2016/07/mspsug-july-12th-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module/ +--- + +Join the Mississippi PowerShell User Group virtually on Tuesday, July 12th 2016 at 8:30pm Central Time when [Mike Fal](https://twitter.com/Mike_Fal) will be presenting “_**Exploring SQLPS, the SQL Server PowerShell Module**_”. +A big hurdle for using PowerShell and SQL Server together is the SQLPS module. Both old and new users of PowerShell don’t completely understand its capabilities. In this session, we’ll talk about the cmdlets you may not know about, tricks to save time using the provider, and even a few gotchas on how the provider works that can save you some time and energy. When we’re finished, you will have a deeper understanding of how you can use SQL Server and PowerShell together. +Visit the [Mississippi PowerShell User Group](http://mspsug.com/2016/07/11/mspsug-july-2016-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module/) website to learn more about Mike and to find out more details about this month’s meeting. +The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “[Attendee Info](http://mspsug.com/attendee-info/)” section. +Register via [EventBrite](http://mspsug.eventbrite.com/) to receive the URL for this meeting. +Note: It is not necessary to live in Mississippi or join our user group to attend our meetings or present a session for our user group. +µ diff --git a/content/articles/2016/08/_index.md b/content/articles/2016/08/_index.md new file mode 100644 index 000000000..488bee34b --- /dev/null +++ b/content/articles/2016/08/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from August 2016" +description: "PowerShell.org Articles published in August 2016." +--- diff --git a/content/articles/2016/08/a-date-with-powershell/index.md b/content/articles/2016/08/a-date-with-powershell/index.md new file mode 100644 index 000000000..9ce31891f --- /dev/null +++ b/content/articles/2016/08/a-date-with-powershell/index.md @@ -0,0 +1,123 @@ +--- +url: /articles/2016-08-11-a-date-with-powershell/ +title: A date with PowerShell +authors: + - Graham Beer +date: "2016-08-11T20:42:40+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks + - Tools + - Tutorials +aliases: + - /2016/08/a-date-with-powershell/ +--- + +At the beginning of July, we welcomed our 3rd son into the world. As days past my wife and I would say, "wow, he's 11 days old. Can you believe it?!". I'm sure parents out there are relating to this! +This gave me an idea for a fun script that would get your age in years, months and days, tell you how many days until your birthday and your star sign. +I wanted date of birth passed to the function as 'dd/MM/yy'. To keep to this format, I’m using the 'ValidatePattern' Advanced Parameter with a Regular Expression (Regex). The regular expression, "^(0[1-9]|[12]\d|3[01])/(0[1-9]|1[0-2])/(\d{2})$", will only allow a date in the format of 01/01/16, for example. +Briefly, here is regex syntax I used in some of the expression: +^ Start of string +( .. ) Capturing group +(0[1-9] Match two digits that make up the day. This accepts numbers from 01 to 09 +| Acts like a Boolean OR. +/d match any digital character +[12] match any character in the set +/ used to divide the date numbers +{2} Exactly two times +$ End of string +Now that my function parameter variable $Bday has a date, its passed to get-date to be converted from a string to a date. The date in variable $cDate will look like this, '01 January 2016 00:00:00'. The next line in the code will use todays date and subtract the date passed in $cDate variable. The $diff variable will contain the following data which we will use to get our age in years, months and days: +Days : 212 +Hours : 12 +Minutes : 40 +Seconds : 20 +Milliseconds : 533 +Ticks : 183624205335135 +TotalDays : 212.528015434184 +TotalHours : 5100.67237042042 +TotalMinutes : 306040.342225225 +TotalSeconds : 18362420.5335135 +TotalMilliseconds : 18362420533.5135 +I've contained this first part in our Begin block. The Process block does the main code. +Now I need to get my age in Years, Months and Days. This is where the [math] data type is used. I'm using the 'Truncate' property as I don't want to do anything fancy like round up my numbers. Adding the .typename of Days to my $diff variable and dividing by $daysInYear variable I can get my age in years. +The next two, months and days required a tweak to the algorithm. +I ended up using a maths term called a 'Mod'. Now I’m not talking about youth culture and style in the sixties (Mods and rockers anyone ??), but the Modulus Math Operator. Basically the Modulus Operator returns the remainder when the first number is divided by the second. So for example: +1 mod 3 = 1 (or 1 % 3 = 1) +2 mod 3 = 2 +3 mod 3 = 0 +4 mod 3 = 1 +The operator sign used is % for Modulus. Not to be confused for the alias of foreach in PowerShell. For days in a month, I used the average of 30. +I thought it would be fun to add the star sign as well. I was after something that could tell me, "is this date in this date range?". One of the properties of 'get-date' is DayOfYear. +Finding if a number is in a range is pretty straight forward, For example: + + +`5 -in 1..10 +`Which gives a Boolean result. +Now if I convert my date ranges into days of the year then I can match the day of the year I was born against the ranges of days for star signs. I've used a switch statement to check against multiple conditions. Within a scriptblock I’ve asked if the value I’m passing is 'in' the array of dates for each star sign. The match will return the star sign and is held in the $starSign variable. +The Final part of the process block is to work out how many days until your next birthday. By capturing the current date, formatting the date of birth by removing the year born, adding the current year and finally subtract the amended date of birth against the current date. Phew! +This will leave a number of days until your next birthday. The 'if' statement is added if your birthday has already happened at the time of the code, it simply reverses the sum to give a positive number. +The end block displays the three captured results to the host. +I hope you have enjoyed this post and can see the many options possible for dates in PowerShell. +Feel free to download the script from my GitHub [https://github.com/Gbeer7/Get-Age.git](https://github.com/Gbeer7/Get-Age.git) + + +`function Get-age { + param( + [Parameter(Mandatory=$true, + HelpMessage="Date must be written as dd/mm/yy", + Position=0)] + [ValidatePattern("^(0[1-9]|[12]\d|3[01])/(0[1-9]|1[0-2])/(\d{2})$")] + [string]$Bday + ) +Begin { + # use 'get-date' to convert '$Bday' Variable + $cDate = (get-date -Date $Bday) + # from today's date subtract birth date + $diff = (Get-Date).Subtract($cDate) +} +Process { + # Work out Years, months and days + [int]$daysInYear = '365' + [int]$averageMonth = '30' + # years + $totalYears = [math]::Truncate( $($diff.Days) / $daysInYear ) + $totalMonths = [math]::Truncate( $($diff.Days) % $daysInYear / $averageMonth ) + # days + $remainingDays = [math]::Truncate( $($diff.Days) % $daysInYear % $averageMonth ) + # Your star sign + $thisYear = (get-date).Year + $starSign = + switch ($cDate.DayOfYear) { + { $_ -in @( ((get-date 22/12/$thisYear).DayOfYear)..365; 0..((get-date 19/01/$thisYear).DayOfYear) ) } { "Capricorn" } + { $_ -in @( ((get-date 20/01/$thisYear).DayOfYear)..((get-date 18/02/$thisYear).DayOfYear) ) } { "Aquarius" } + { $_ -in @( ((get-date 19/02/$thisYear).DayOfYear)..((get-date 20/03/$thisYear).DayOfYear) ) } { "Pisces" } + { $_ -in @( ((get-date 21/03/$thisYear).DayOfYear)..((get-date 19/04/$thisYear).DayOfYear) ) } { "Aries" } + { $_ -in @( ((get-date 20/04/$thisYear).DayOfYear)..((get-date 20/05/$thisYear).DayOfYear) ) } { "Taurus" } + { $_ -in @( ((get-date 21/05/$thisYear).DayOfYear)..((get-date 20/06/$thisYear).DayOfYear) ) } { "Gemini" } + { $_ -in @( ((get-date 21/06/$thisYear).DayOfYear)..((get-date 22/07/$thisYear).DayOfYear) ) } { "Cancer" } + { $_ -in @( ((get-date 23/07/$thisYear).DayOfYear)..((get-date 22/08/$thisYear).DayOfYear) ) } { "Leo" } + { $_ -in @( ((get-date 23/08/$thisYear).DayOfYear)..((get-date 22/09/$thisYear).DayOfYear) ) } { "Virgo" } + { $_ -in @( ((get-date 23/09/$thisYear).DayOfYear)..((get-date 22/10/$thisYear).DayOfYear) ) } { "Libra" } + { $_ -in @( ((get-date 23/10/$thisYear).DayOfYear)..((get-date 21/11/$thisYear).DayOfYear) ) } { "Scorpio" } + { $_ -in @( ((get-date 22/10/$thisYear).DayOfYear)..((get-date 21/12/$thisYear).DayOfYear) ) } { "Sagittarius" } + } + # Work out how many days until birthday + $now = [DateTime]::Now + $dm = get-date $Bday -UFormat "%m/%d/" + $Days = [Datetime]($dm + $now.Year) – $Now + # If birthday has happened this year change sum + if (!($Days -ge 0)) { $Days = $now - [Datetime]($dm + $now.Year) } +} +End { + # display + "`nYou are {0} year(s), {1} month(s) and {2} day(s)" -f $totalYears, $totalMonths, $remainingDays + "Your Star sign is: " + $starSign + # and... + if ($cDate.Year -eq (get-date).Year) { + "You have another $($daysInYear - $diff.Days) days until your birthday" # If you are under 1 years old + } else { + "You have another $($Days.days) days until your birthday" # over the age of 1 + } +} +}# Function End +` diff --git a/content/articles/2016/08/create-custom-monitors-with-powershell/index.md b/content/articles/2016/08/create-custom-monitors-with-powershell/index.md new file mode 100644 index 000000000..4a88af23d --- /dev/null +++ b/content/articles/2016/08/create-custom-monitors-with-powershell/index.md @@ -0,0 +1,29 @@ +--- +url: /articles/2016-08-21-create-custom-monitors-with-powershell/ +title: Create Custom Monitors with PowerShell +authors: + - msorens +date: "2016-08-21T23:44:53+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks + - Tools +aliases: + - /2016/08/create-custom-monitors-with-powershell/ +--- + +Sometimes, as a developer, you want to be be able to keep track of free space on a drive, the size of a log, the load on your CPU, the number of users logged in, etc. With PowerShell, it is typically just a matter of finding the right cmdlet amidst the large (and rapidly growing) pool of cmdlets provided by Microsoft and by third parties. Then you just run _Get-Foo_ to check details about the _foo_ resource. And then you come back 5 minutes later and run it again because you want to see how it changes over time. +But wouldn't it be nice if you could just have it run automatically at regular intervals in a separate window that you could just keep in the corner of your screen? Well, I found the barebones of just such a utility sometime ago (authored by Marc van Orsouw,  aka ‘thePowerShellGuy’). His original post is no longer available, but I expanded upon his code and, over time, added features, bug fixes, and enhancements, making it more useful and more user-friendly. Here are a few screenshots of the Monitor Factory in action. +_Monitor the size of a database_ + + +`Start-Monitor -AsJob {`Invoke-Sqlcmd 'DBCC SQLPERF(logspace)' |`Select-Object 'Database Name','Log Size (MB)','Log Space Used (%)',HasErrors`} +`![Database Size Monitor](https://powershell.org/wp-content/uploads/2016/08/monitor-db-size-1.jpg) +_Monitor drives on a system_ +![Drive Capacity Monitor](https://powershell.org/wp-content/uploads/2016/08/monitor-file-size-1.jpg) +_Monitor longest running DB queries_ +![Long-runnning DB Query Monitor](https://powershell.org/wp-content/uploads/2016/08/monitor-queries-1.jpg) +[Build Your Own Resource Monitor in a Jiffy][1] reveals how quick and easy it is to get started with the Monitor Factory. + + [1]: https://www.simple-talk.com/sysadmin/powershell/build-your-own-resource-monitor-in-a-jiffy/ diff --git a/content/articles/2016/08/faq-powershell-on-linuxmac/index.md b/content/articles/2016/08/faq-powershell-on-linuxmac/index.md new file mode 100644 index 000000000..e728747bd --- /dev/null +++ b/content/articles/2016/08/faq-powershell-on-linuxmac/index.md @@ -0,0 +1,34 @@ +--- +url: /articles/2016-08-18-faq-powershell-on-linuxmac/ +title: "FAQ: PowerShell on Linux/Mac" +authors: + - Don Jones +date: "2016-08-18T21:02:51+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/08/faq-powershell-on-linuxmac/ +--- + +_Be sure to check back often, as we'll add to this._ + + +## So does this mean I'll be able to run [add your favorite module name here] on Linux/Mac? + +Likely not. PowerShell on Linux/Mac is, at present, "PowerShell Core," which is a subset of the total _Windows_ PowerShell product. Similar situation to PowerShell on Nano. So any module that requires something outside Core, won't run. +And further, most modules have dependencies on underlying technologies in Windows. The SMBShare module, for example, depends on CIM classes that only exist on Windows. +So many add-in modules _won't, _in fact work on Linux - because they're designed to manage Windows machines. Over time, I'm sure we'll see modules that only run on Linux and/or Mac, because they're tied to dependencies on those operating systems. +Ideally, of course, you can always remote to the OS of your choice and run whatever commands it has. And from [The Register][1]: + +> Vendors with PowerShell libraries for their products will be able to port them to the new Core version, and early examples are AWS (Amazon Web Services) and VMware. Steve Roberts, AWS Software Development Engineer, has shown the AWS Tools for PowerShell running on a Mac; and VMware's Alan Renouf has done a similar demonstration using vSphere PowerCLI. "We’ve got commands that will manage every aspect of vCenter administration already," said Renouf. + + + +## Snover's blog post mentioned Remoting over SSH. So does that mean I can Remote into any Linux box? + +No, not exactly. It's worth understanding, first, how the existing Remoting over WS-MAN works. In Remoting, you type or compose a command on one node. It is packaged into XML, and transmitted as text over the WS-MAN protocol. The receiving node unpackages it, runs the command, and _serializes_ the resulting objects into XML. That XML is sent back, again over WS-MAN (which is based on HTTP), to the originating node. The originating node _deserializes _the XML to recreate the original objects. +Remoting over SSH will work exactly the same way, except that SSH will be used to transmit the XML text back and forth, rather than WS-MAN. This isn't the same as a simple SSH session where you're just sending keystrokes to the remote machine. A "plain" Linux machine's SSH daemon wouldn't know what to do with the XML-packaged traffic used by Remoting. Remoting over SSH will require both nodes to be running PowerShell. SSH isn't the end-game, here; it's merely being used to get text from one place to another. This isn't "PowerShell SSH-ing into a remote machine," either. PowerShell isn't an SSH client or server, in that sense. +Microsoft has already said they plan to release an SSH server and client for Windows. _That_ will get you the plain-Jane SSH interactive sessions that you're used to. SSH, in that scenario, works a lot like encrypted Telnet (it's based on Telnet, after all, as is nearly every other Internet protocol). You press a letter on your keyboard, and it's sent to the remote machine, which then echoes it back to you, so the letter also appears on your local console. When you hit enter to run a command, the text output is sent to your console. "Plain" SSH is a purely text-based thing - while PowerShell's strengths come from its use of objects, rather than text. +So it's important to differentiate, in your mind, "using SSH the way I'm used to" and "Remoting using SSH as a text transport." There's actually precedent for what Remoting is doing: SCP. SCP encodes binary files as a text stream (vaguely like SMTP does), and uses SSH to transmit that text. It's then decoded into the original binary on the other end. But although SCP _uses_ SSH under the hood, we certainly don't think of it as "using SSH" the way we do when we have an interactive SSH login on a remote box. + + [1]: http://www.theregister.co.uk/2016/08/18/microsoft_brings_powershell_to_linux_and_mac_publishes_as_open_source/ diff --git a/content/articles/2016/08/heres-another-reason-to-contribute/index.md b/content/articles/2016/08/heres-another-reason-to-contribute/index.md new file mode 100644 index 000000000..e16793379 --- /dev/null +++ b/content/articles/2016/08/heres-another-reason-to-contribute/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2016-08-24-heres-another-reason-to-contribute/ +title: "Here's Another Reason to Contribute" +authors: + - Don Jones +date: "2016-08-24T11:30:14+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/08/heres-another-reason-to-contribute/ +--- + +[Jason Helmick][1] and I were talking last night, and we got onto the topic of expertise and respect. Kind of, "once someone really gets to that expert level, and they surpass their teacher in knowledge, you really respect them." I disagreed, and said, "no, I respect them the minute they start contributing to the world, and helping others." +We all, at some stage, get "outsider syndrome," where we think everyone else is so much smarter than us, that we've nothing of value to contribute. But that's never true. First of all, there's this thing called a "birth rate," meaning there's always new people coming into the field. Second, no matter what your level of expertise, you're _in it, right then._ "Experts" too often forget what it was like to be a beginner; a beginner _knows,_ and can often relate things that another beginner can understand more readily. +Take this [wonderful post by Missy][2] Januszco. Missy probably doesn't consider herself an expert, although she certainly held her own at my recent DevOps Camp. And she certainly wasn't the only one writing about open-source, cross-platform PowerShell Core that week. But she did it from a unique perspective, one that a lot of her readers can probably take a lot from. And she _did it -_ instead of just talking vaguely about giving back someday, she just did, and did it well. +PowerShell.org isn't a curated newsfeed for a select few; its _yours_. So if you don't have your own place to publish and share, email webmaster@ and let us set you up to write. Whenever you solve some problem, conquer some gotcha, or have a perspective on the latest PowerShell news, share. You **definitely** have something to offer. + + [1]: http://Http://twitter.com/thejasonhelmick + [2]: https://powershell.org/2016/08/23/microsoft-did-what/ diff --git a/content/articles/2016/08/microsoft-did-what/index.md b/content/articles/2016/08/microsoft-did-what/index.md new file mode 100644 index 000000000..3b648773c --- /dev/null +++ b/content/articles/2016/08/microsoft-did-what/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2016-08-23-microsoft-did-what/ +title: Microsoft did WHAT? +authors: + - Missy Januszko +date: "2016-08-23T01:51:05+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/08/microsoft-did-what/ +--- + +Unless you’ve been living under a rock for the last couple of days, you already know that Microsoft announced last Thursday that the shell/scripting language formerly known as “Windows Powershell” is now supported on Linux and MacOS and that Powershell has been open-sourced. And for days, thoughts of “how can I use this?” or “I wonder if ‘x’ will be supported” have been flying through the minds of every system architect as we internally grapple with the possibilities of what could be, while at the same time trying to understand Microsoft’s motivation for this radical change. +Only the change isn’t so surprising if you think about the changes that Microsoft has been making leading up to this announcement. Separating Powershell Desktop Edition and Core Edition in WMF 5.1. Announcing SQL Server on Linux – after all, IT professionals are going to need a way to administer that SQL instance and it isn’t going to be through a GUI. Supporting Powershell on Linux seemed like a logical next step. +But it is likely just a step along the road to heterogeneous system management. Microsoft Technical Fellow and Powershell inventor Jeffrey Snover isn’t at all secretive over the fact that the vision is built upon Microsoft’s Operations Management Suite (OMS), a suite of automation and management tools that needs to be able to configure, control, manage, monitor, and self-heal a workload that runs anywhere and on any operating system. +From the perspective of a system architect that isn’t typically on the bleeding edge of technology, I am still extremely excited over this announcement. Why? The possibilities seem endless. For one, applications that run on either Windows or Linux or a combination of the two can now be configured by the same language, or maybe even the same set of well-designed scripts. Second, the possibility of using Desired State Configuration (DSC), or third-party tooling such as Chef or Puppet in conjunction with DSC, means I can keep \*all\* servers in compliance with their configurations using the same tooling. Third, what Devops engineer wouldn’t love having spent a few years learning a scripting language like Powershell only to have its reach extended to other platforms? This change invariably makes us more valuable to the company by being able to take on additional management responsibilities by using the skills we already have. It can then lead to even more cross-platform learnings and opportunities. I definitely plan to learn more about Linux and how I can help build cross-platform tools. If you have similar interests, here are some great resources to get you started! + + +I haven’t even scratched the surface of thinking about all of the ways I want to take advantage of Powershell on Linux, and I have lots of exploring to do to find out what can or can’t be done – but the energy of the entire Powershell community over these changes certainly carries over to me as well. I’m excited to find out what is possible, to build what may not have been possible, and to contribute back to the Powershell community. So kudos to you, “new Microsoft”, for energizing the entire community of Powershell enthusiasts. I can’t wait to see what’s next. diff --git a/content/articles/2016/08/powershell-and-devops-global-summit-2017-call-for-topics/index.md b/content/articles/2016/08/powershell-and-devops-global-summit-2017-call-for-topics/index.md new file mode 100644 index 000000000..ef95e7767 --- /dev/null +++ b/content/articles/2016/08/powershell-and-devops-global-summit-2017-call-for-topics/index.md @@ -0,0 +1,177 @@ +--- +url: /articles/2016-08-01-powershell-and-devops-global-summit-2017-call-for-topics/ +title: "PowerShell and DevOps Global Summit 2017: Call for Topics" +authors: + - Richard Siddaway +date: "2016-08-01T11:09:22+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2016/08/powershell-and-devops-global-summit-2017-call-for-topics/ +--- + +The PowerShell and DevOps Global Summit is the number one conference where PowerShell enthusiasts gather and learn from each other in fast-paced, knowledge packed presentations. PowerShell, and DevOps, experts from all over the world including MVP’s, community leaders and PowerShell team members, will once again join together for a few days in Bellevue, WA. to discuss and learn about maximizing PowerShell in the workplace. + + + It's also the place to explore and further your knowledge of DevOps principles and practices in a Windows environment. It's a place to make new connections, learn new techniques, and offer something to your peers and colleagues. If you want to share your PowerShell or DevOps expertise, then this is your official call to submit presentations for selection! + + + The PowerShell and DevOps Global Summit 2017 will be returning to the Meydenbauer center, Bellevue WA on 9-12 April 2017. + + +## **TOPIC AREAS– What we are looking for** + + + We are looking for presentations in a number of areas. The bulk of our sessions follow our now traditional 45-minute format. These sessions cover a wide aspect of PowerShell and DevOps expertise. Your proposed session should fit into one of the following areas: + + + * PowerShell Internals – A deep look into the inside workings of PowerShell and practical solutions that are built from them. These presentations are typically more directed to the PowerShell development community that is building extensions and solutions relating to PowerShell. + * PowerShell Features Deep Dive – These presentations are a deep look into configuring and working with PowerShell features and capabilities such as Remoting, Desired State Configuration and more. These presentations tend to be more IT Pro focused. + * DevOps in Practice – A deep dive into putting the DevOps principles into practice. PowerShell may be a part of DevOps in your organization or you may be using other tools. Presentations should focus on what you’re doing and how you’re doing it. + + + We are open to presentations across the entire ecosystem that has been built around PowerShell or the various DevOps tools. Don’t hesitate to send an abstract for your particular area of expertise. This includes Microsoft platforms and products that have PowerShell-based management tools as well as third party products. + + + New topics will be preferred over the recycling of older topics – look to see what’s new in PowerShell 5.0 and use the questions on PowerShell.org to spot areas that could supply a good session for the Summit. However, we are still open to sessions on ‘older’ topics that address areas of great confusion or uncertainty. + + + We have a very limited number agenda slots available for double length sessions. These are reserved for experienced speakers that are delving into depths of a topic. Recent Summit’s have had sessions on security, containers on Windows, Azure automation and PowerShell based screen scraping. Please contact us – summit@powershell.org – with your idea before spending too much time developing such a session. + + + On Sunday 9 April we will have six 3 hour sessions available. These should cover either foundational topics that will either bring attendees up to speed in a particular area or be a very deep dive into an advanced topic. Again, these are reserved for experienced speakers so please contact us – summit@powershell.org – with your idea before spending too much time developing such a session. + + + Also on Sunday we’re looking to present half day workshops – Function review and DSC Resource review. Bring your code and get expert analysis and feedback together with help solving your problems in these areas. We’re looking for PowerShell and DSC experts to run these sessions. Please contact us – summit@powershell.org – if you could run such a session. + + +## ** What kind of sessions get selected?** + +We’re looking for sessions that go beyond – way beyond – ‘beginner’.  This is an ‘experts’ level conference and we expect the session to reflect that. +If you want to see examples of the depth we’re looking for use the recordings on the PowerShell.org Youtube channel from last year’s PowerShell and DevOps Global Summit as a guide. + + + We look for an abstract that’s compelling and makes us want to see your session – so spend time writing a punchy abstract! We want sessions that offer real-world usability combined with ‘WOW, nobody talks about THAT’ awesomeness. + + + We want to see the code. Don’t just talk about it – this is a PowerShell summit not a PowerPoint Summit. If your session isn’t predominately demonstrations its probably not right for the Summit. + + + Summit presentations are intense and intimate often with plenty of audience interaction. You must expect questions and discussions. This is not a “lecture to the audience” event. Also because of the session length, generally co-presenters are unnecessary, but that is not a requirement. + AIM HIGH, VERY HIGH. + + + Remember, Summit sessions are recorded, so if you’ve previously presented a topic at a Summit, we’re less likely to choose it for another Summit. + + + We want sessions that are challenging, and that ideally present things that simply aren’t explained or documented elsewhere. New modules, new techniques, and crazy approaches are all welcome. Discussion-format sessions are great, too, especially if you plan to turn them into a community deliverable (like a “best practices for writing DSC Resources” session that gets turned into a free e-guide later). Think community, deep dive, engaging, and amazing as keywords. We want attendees to finish each day with information leaking… just a little bit… out their eyeballs. Help us make it happen. + + + If you are going to be presenting about a module you’ve created don’t just show it in use. Show the code! Show how you solved the problem! What issues did you have and how did you do to overcome them? + + + You are more likely to be accepted as a speaker if you have multiple sessions we can accept. We have a very limited speaker budget and to maximize value to attendees we need to keep our costs down. We can do this if speakers present multiple sessions. They don’t have to be on the same topic – its better if they aren’t. + + + To give you some ideas we’ve conducted a survey of topics potential attendees would like to see covered: + + + * DevOps tools and practices + * DevOps on Windows + * Source control + * Testing – pester, OVF, TDD etc. + * Metrics and measurements in DevOps + * PowerShell next generation + * JEA + * Exchange web services + * System Center – SCSM, SCCM + * PowerShell + SQL Server + * Software Inventory logging + * More DSC – specially to enable WinOps + + + If you have any doubts about the suitability of a particular session, please contact us - summit@powershell.org – we’re always happy to discuss proposed sessions. + + + We do have some goals for speaker selection, too. We obviously have, and appreciate, the great involvement we get from the product team. We aim to have a certain number of sessions from well-known members of the community, simply because they’re well-known for a reason – they do a great job! But we also set aside slots for newcomers who’ve never presented before, or who’ve maybe only presented once or twice before – the audience will judge you on content not style. We want to create opportunities for more folks to become engaged and active in our community, and the Summit is a great way to do that. + + + We aren’t looking for soft-skills sessions, like “how to get a new user group running,” although contact us via email (summit@powershell.org) if you’d like to do something like that as an extra evening thing after the main content wraps for the day. + + + Please note all sessions are to be delivered in English. Presenter will provide all equipment needed to deliver session(s), including a laptop or other computer. Presenter must be able to provide video by means of HDMI, DVI-D, or DisplayPort connectors – VGA is NOT supported. Presenter must be able to manually select an appropriate screen resolution for video output. Typically, 1024×768 or 1280×720 are preferred. + + + Internet connectivity is available in the conference center but bandwidth is limited. If you rely on connecting to the cloud for your sessions then consider recording any demonstrations as a contingency. + + +## **How to submit abstracts of presentations** + +Presentations will be 45-minutes in length and the submission should include the following: + + + * Presentation Title + * Presentation abstract – a description of the presentation and the topics covered. 250 words or less and suitable for marketing. + + + Go to https://www.eventloom.com/event/register/summit2017/Speaker?preregister=1. Notice that you'll get a certificate error if you don't use the "www" at the front. + + + This is the only valid URL for pre-registration. Provide and confirm your e-mail address, name and other required details. You’re creating a new account, even if you’ve attended past Summit events. + + + **DO NOT ATTEMPT TO REGISTER FOR THE SUMMIT AS AN ATTENDEE AT THIS STAGE – WE WILL BE OPENING REGISTRATION IN NOVEMBER 2016. ANY NON-SPEAKER REGISTRATIONS WILL BE DELETED AT THAT TIME.** + + + * Click Abstracts on the top menu + * Click SUBMIT ABSTRACT + * Enter Title and Description. + * Click SUBMIT + * Provide a title and description; descriptions must be 50-250 words. Set the Status to “Ready to Review” when you are ready to send your session to us for consideration. + + + To return to the site at a later time, go to https://www.eventloom.com/event/login/summit2017 + Click Log In. You can then re-visit Abstracts. + + + Note that you must set your abstract status to Ready for Review or we won’t see it. If you leave it in Pending, it won’t be considered. + + + You can submit multiple presentations in the same topic area or for different ones. Be aware that even though the session length is 45 minutes we prefer to have at least 10 minutes set aside for questions. + + +## **Presentation submission deadline – When you should send it by** + + + Start sending your presentation submissions immediately! The selection committee will start selecting presentations as soon as they arrive so you don’t want to miss out. The last day we will accept presentation submissions will be Sunday 2 October 2016. This is a hard deadline – NO sessions will be accepted after this date. + + +## **When you will know you’ve been selected** + + + The selection committee will start reviewing submissions immediately and begin the selection process. You will be informed if one or more of your presentations have been selected and notified by Monday 10 October 2016. + + + You will need to log back onto the event site and complete your registration with the code we will provide in the notification email. This will have to occur before 23 October 2016 so that we have a completed agenda in time for attendee registration. + + + We will notify all potential speakers by 23 October 2016 if their sessions haven’t been accepted. + + + Speakers, with accepted sessions, will be given free admission to the event, including attendance at all official Summit activities. Speakers may not bring guests to the day sessions or evening events. We have a limited budget, and the number of speakers selected will be governed by that budget. + + + All speakers will receive a stipend of $400 per session (more for the longer Sunday sessions) to assist with travelling and accommodation expenses. + + + Pre-registering as a speaker does not guarantee you a place at the event. If any sessions are accepted, you will be asked to immediately complete your Summit registration using a free promotional code. If you do not complete your registration by 23 October 2016, then we will assume you do not wish to present and your sessions will be cancelled, and the slots offered to another speaker. + + + If no sessions are accepted, then your pre-registration will be deleted. Beginning 1 November 2016 and through 3 March 2017, you are welcome to create a new account and register as a standard attendee on a space-available basis. + + + The final agenda will be announced and posted on PowerShell.Org on, or about, Tuesday 1 November 2016. + + + We look forward to your submissions and your help in making PowerShell and DevOps Global Summit 2017 the most valuable IT/Dev conference of the year building on and surpassing the previous Summits! diff --git a/content/articles/2016/08/powershell-is-open-sourced/index.md b/content/articles/2016/08/powershell-is-open-sourced/index.md new file mode 100644 index 000000000..1d57b31c7 --- /dev/null +++ b/content/articles/2016/08/powershell-is-open-sourced/index.md @@ -0,0 +1,75 @@ +--- +url: /articles/2016-08-18-powershell-is-open-sourced/ +title: PowerShell is Open Sourced +authors: + - Richard Siddaway +date: "2016-08-18T16:05:46+00:00" +categories: + - Announcements + - PowerShell for Admins + - PowerShell for Developers +aliases: + - /2016/08/powershell-is-open-sourced/ +--- + +For those of you that have been at PowerShell Summits over the last few years you’ll have heard Jeffrey Snover state that he wanted to take PowerShell to other platforms. + + + Now its happened + + + Jeffrey has announced that an ALPHA release of PowerShell is now available for Linux and Mac.  Currently available for Ubuntu, Centos, Red Hat and Mac OS X with more to come + + + The announcement is at + + + https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/ + + + Also see PowerShell blog + + + https://blogs.msdn.microsoft.com/powershell/2016/08/18/powershell-on-linux-and-open-source-2/ + + + Some  points to note: + + + ISE isn’t available as part of the alphas release but VSCode is available for Linux and Mac giving an consistent editor across the platforms + + + PowerShell remoting will be extended to use Open SSH as well as WSMAN + + + Planned enhancements include: + + + Additional Linux Distros covered – parity with .NET Core. + + + Writing Cmdlets in Python and other languages + + + PSRP over OpenSSH + + + WSMan based remoting to downlevel versions of Windows and WSMan based PSRP on Linux. + + + Editor Services and auto-generated GUI + + + Unix-style wildcard expansion + + + Increasing test code coverage for Windows and Linux editions + + + Continue increasing cmdlet coverage for Linux and Windows + + + REMEMBER this an ALPHA release – there’s still a lot to do and its a open source project so community effort is required + + + Enjoy diff --git a/content/articles/2016/08/ultimate-powershell-prompt-customization-and-git-setup-guide/index.md b/content/articles/2016/08/ultimate-powershell-prompt-customization-and-git-setup-guide/index.md new file mode 100644 index 000000000..9116cf04c --- /dev/null +++ b/content/articles/2016/08/ultimate-powershell-prompt-customization-and-git-setup-guide/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2016-08-26-ultimate-powershell-prompt-customization-and-git-setup-guide/ +title: Ultimate PowerShell Prompt Customization and Git Setup Guide +authors: + - Matthew Hodgkins +date: "2016-08-26T05:25:27+00:00" +categories: + - Tips and Tricks + - Tutorials +aliases: + - /2016/08/ultimate-powershell-prompt-customization-and-git-setup-guide/ +--- + +Do you spend hours a day in PowerShell? Switching back and forth between PowerShell windows getting you down? Have you ever wanted "Quake" mode for your terminal? +If we are going to spend so much time in PowerShell, we may as well make it pretty. +![](https://hodgkins.io/images/posts/windows_git/sexy_powershell_prompt.png) +Check out the [Ultimate PowerShell Prompt Customization and Git Setup Guide][1] for how to: + + * Install and customize ConEmu + * Enable Quake Mode for your terminal + * Setup your PowerShell Profile + * Install and use Posh-Git + * Generate and use SSH Keys with GitHub + * Squash Git commits + + [1]: https://hodgkins.io/ultimate-powershell-prompt-and-git-setup diff --git a/content/articles/2016/08/what-are-your-known-problems-solved-in-dsc/index.md b/content/articles/2016/08/what-are-your-known-problems-solved-in-dsc/index.md new file mode 100644 index 000000000..e50c9232f --- /dev/null +++ b/content/articles/2016/08/what-are-your-known-problems-solved-in-dsc/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2016-08-08-what-are-your-known-problems-solved-in-dsc/ +title: "What are your \"known problems\" (solved) in DSC?" +authors: + - Don Jones +date: "2016-08-08T19:32:02+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/08/what-are-your-known-problems-solved-in-dsc/ +--- + +I'm collecting a list of known problems in DSC v5 _that have been solved. _Like the infamous "MI RESULT 12" error that could happen if you upgraded from prerelease v5 to production preview. I'm going to document these in "The DSC Book," including in its free sample version, to help preserve these things in one place. +Again - these need to be _solved_ problems. Just drop as much description as you can into a comment here, and feel free to link to the fix, or to a discussion thread on the problem. +And please - pass this around. If you've never had a chance to contribute to "the community" before, now's a great time. Even if it's a problem that you know doesn't exist in the _current_ v5 release, let's please just document its former existence. +Thanks! diff --git a/content/articles/2016/08/why-objects-remoting-and-consistency-are-such-a-big-deal-in-powershell/index.md b/content/articles/2016/08/why-objects-remoting-and-consistency-are-such-a-big-deal-in-powershell/index.md new file mode 100644 index 000000000..edf508160 --- /dev/null +++ b/content/articles/2016/08/why-objects-remoting-and-consistency-are-such-a-big-deal-in-powershell/index.md @@ -0,0 +1,60 @@ +--- +url: /articles/2016-08-22-why-objects-remoting-and-consistency-are-such-a-big-deal-in-powershell/ +title: "Why \"Objects,\" Remoting, and Consistency are Such a Big Deal in PowerShell" +authors: + - Don Jones +date: "2016-08-22T20:39:49+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/08/why-objects-remoting-and-consistency-are-such-a-big-deal-in-powershell/ +--- + +As PowerShell begins to move into a cross-platform world, it's important to really understand "why PowerShell." What is it, exactly, that sets PowerShell apart? Notice that I do not mean, "what makes it better," because "better" is something you'll have to decide on your own. I just want to look at what makes it _different. _ + + +## It's the Objects + +Folks often say that Linux is a text-based OS, whereas Windows is an object-based OS. That's a convenient simplification, but it isn't exactly accurate. And to understand why PowerShell is different, you need to understand the _actual_ differences - and how Linux and Windows have actually come closer together over the years. +*nix - including Unix, macOS, and Linux - is based on very old concepts. "Old" isn't "bad" at all; much of Linux' current flexibility comes from these old concepts. Core to the Unix ethos is the fact that OS configurations come from text files. There's no Registry, there's no database, it's just text files. Kinda like, um, Windows was, back in the old days, with .ini files (and where do you think the idea for those came from). Text files are super-easy to view, search, modify, and so on. Heck, when I wrote my first Point of Sale system, it was largely text-based, because text files were super-easy for us to troubleshoot remotely, compared to a complex ISAM table structure. +Windows, on the other hand, is an API-based operating system. When you want to query an OS configuration element, you don't just look in a text file - you run code, and query an API. When you need to make a change, you don't just change a text file and hup a daemon - you run code, and submit your changes to an API. +When you need to pass data from one hunk of code to another, you need to have an agreed-upon structure for that data, so that the code on both ends understands the data. These structures are called _objects. _Traditionally, Unix didn't really have structured data. The file format used by Apache for its configuration was different from the format used by Iptables. Which is totally fine, by the way, because those two things never need to talk to each other. But when you start considering all the things the OS can do - users, file permissions, groups, ports, you name it - you started to end up with a lot of different formats. Indeed, the main reason that Unix had (has?) a reputation for being a complex OS to administer is largely because all of its data is scattered hither and yon, and all in different formats. +That's been changing, though. You're starting to see more and more new projects pop up that rely on _structured_ configuration data, often using JavaScript Object Notation (JSON), although in other cases something like XML. This is a big deal for *nix administration. Why? +Traditionally, re-using the output of a Unix command was complex. Output was pure text, sent to your console via the stdout "channel." Commands typically formatted their output for human eyeball consumption, so if you wanted to send that output instead to another command, you had to do a lot of text parsing. "Skip the first two rows of output, and then for each remaining row, go over 32 columns and grab 5 columns worth of text." Or, "skip the first row, and then in each subsequent row, look for text matching this [regex] and return only the matching text." Unix admins tend to _own_ regular expressions for this reason. +But the problem with all that is that your workflow, and your tooling, becomes very version-bound. Nobody can ever improve tools like **ps**, because so many scripts rely on the output being exactly as it is today. Instead, you create entire new versions of those tools - which people then take dependencies on, and which can then never change, unless they provide some backward-compatibility switches to force old-version output. The end result is a highly fragmented landscape of tooling, a very high learning curve for incoming administrators, and a high amount of overhead in automating business processes. +When you code a command-line utility in 1973, it's easy to imagine it'll never need to change. On the other hand, when you start building APIs in the 1990s, it's much more obvious that change will be constant. By passing objects - structured data - between themselves, APIs provide a kind of inbuilt forward-compatibility. If v1 of an API outputs objects that have 10 properties, v2 can easily add five more without breaking anything downstream. Anything consuming those objects won't care if there's extra data, so long as the data it was expecting is all there. Object-based data doesn't have any sense of "ordering," so it doesn't matter if the "first" property is Name or if the "first" property is Size. Consumers refer to properties by name, not by position, and the magic of the API itself makes it all match up. +Objects also lend themselves to hierarchies of data. A computer object can have a Drives property, which can be a collection of Drive objects, which can have a Files property, which is a collection of File objects, and so on. Structured data like XML and JSON handle these hierarchies with ease, as do object-oriented APIs; textual output - which is essentially a flat-file at best - doesn't. +So what sets PowerShell apart from other shells is the fact that its commands pass objects from one to another. When you reach the end of a "chain," or pipeline, of commands, the shell takes what's left and generates textual output suitable for human eyeball consumption. So you get the advantages of a text-based command - easy to read output - and the advantages of working with an API. For example, in PowerShell for Linux, Microsoft ships a command that wraps around the Cron feature. Cron is configured from a text file; Microsoft's command "understands" the text file format, and turns it into objects. That means nobody will ever have to grep/sed/awk that text file again - instead, you can deal with structured data. That's a really good example of taking something PowerShell is good at - objects - and applying it to something Linux is really good at - Cron. It's not forcing Cron to look like the Windows Task Scheduler in any way; it's simply applying a new shell paradigm to an already-solid OS component. +This concept of a shell passing objects - again, just structured data - was unique enough that Microsoft was [granted a patent][1] for it (the patent also includes other innovations). + + +## Remoting + +The parent also touches on _remoting, _which was equally innovative. Yes, I know that Unix has _forever_ had the ability to log into a remote machine, first using things like Telnet, later SSH, and even later still more things. But that's _remote logon, _and it's not Remoting. +With remote logon, you're essentially turning your local computer into a dumb terminal for a remote computer, a concept literally as old as computers themselves. It's a 1:1 connection, and it was fine when a given company didn't have more than a few machines. But modern, cloud-based architecture involves _thousands_ of machines, and 1:1 doesn't cut it. Remoting enables 1:many connections - "here is a command; go tell these 1200 computers to run it individually, using their own local resources, and then send me the results - as objects." Going forward, PowerShell can use either WS-MAN or SSH as the low-level transport for that conversation, but the protocol isn't important. It's the idea of running one command _locally, _piping that output to another command _which runs remotely, _and then taking _that_ output and piping it to yet more commands that run _locally. _This mixing-and-matching of computing resources and runtime locations is _huge. _ + + +## Consistency + +And finally, the one argument that's the toughest to make. Plenty of *nix admins, and plenty of old-school MS-DOS command-line admins, take great pride in their mastery of obscure command-line syntax. It sets them apart from lesser humans, provides a veneer of job security, and proves their dominance of their field. +Unfortunately, it's bad for the planet. +Look, maybe your country is in fine economic shape (_ahem, _Norway), but here in the United States we have a fairly precarious hold on Biggest Economy in the World. We aren't a manufacturing powerhouse. We basically have two experts: information technology and Hollywood, and we're sometimes sorry about the latter. But for our economy to thrive in this century, we need all hands on deck when it comes to IT. That means a high barrier of entry, and the need to memorize arbitrary and obscure syntax, ain't gonna cut it. Computing is hard enough without making it artificially more obscure through syntax. + + +`chmod ugo+rwx sample.sh +`Yeah, see, that's too hard to teach a 12-year-old. + + +`Set-FilePermission -FileName sample.sh -Permissions Read,Write,Execute -Principal User,Group,Others -Action Add +`See, you still need to know _what's going on_ in both cases, but the syntax is much easier to read and understand without having to look it up. The command syntax becomes less obscure, and more self-documenting. More maintainable. Obviously, this is just a bogus example, but it illustrates the _pattern_ of PowerShell - meaningful command names, meaningful parameter names, and meaningful parameter value enumerations. And I use _meaningful_ in the correct way, as in, "full of meaning." +PowerShell still allows for a shorthand syntax, if you're just in a hurry - + + +`sfp sample.sh -p r,w,x -for u,g,o -a add +`- but you're not forced into it, and it's easier to figure out what those things mean (again, this is a bogus example meant to show the shell's syntax pattern, not an actual run-able command). + +## So... that's the big deal + +And so that's what makes PowerShell _different. _It's not going to obviate Bash on Linux anytime soon, although it's happy to let you run your same old text-based commands, and even integrate their output as best it can into its object-based pipeline. But at least now, anyone approaching PowerShell for the first time can understand _what makes it different, _and decide for themselves if they think that's worth an investment to learn to use PowerShell well. + + [1]: http://appft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PG01&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.html&r=1&f=G&l=50&s1=%2220050091201%22.PGNR.&OS=DN/20050091201&RS=DN/20050091201 diff --git a/content/articles/2016/08/why-powershell-on-linux-is-such-an-accomplishment/index.md b/content/articles/2016/08/why-powershell-on-linux-is-such-an-accomplishment/index.md new file mode 100644 index 000000000..f2374bf19 --- /dev/null +++ b/content/articles/2016/08/why-powershell-on-linux-is-such-an-accomplishment/index.md @@ -0,0 +1,79 @@ +--- +url: /articles/2016-08-19-why-powershell-on-linux-is-such-an-accomplishment/ +title: Why PowerShell on Linux is Such an Accomplishment +authors: + - Don Jones +date: "2016-08-19T15:36:08+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/08/why-powershell-on-linux-is-such-an-accomplishment/ +--- + +Yesterday, Microsoft [announced][1] that Windows PowerShell - which I suppose we'll just call "PowerShell," now - has been open-sourced, with PowerShell Core builds being made available for various Linux distros as well as macOS. +This is a big deal, but not exactly for the reasons you might think. + + +## That .NET Shell Guy + +PowerShell's genesis goes back to 2002 - and even earlier, really - when Jeffrey Snover wrote "[The Monad Manifesto][2]." He was trying to take a top-down approach to solving a long-standing problem with Windows administration, one that VBScript and other approaches had failed to fully address. +Problem was, Snover was proposing an administrative shell, and scripting language, _built on top of the .NET Framework. _That's not inherently a bad thing; tens of thousands of line-of-business applications have been written in .NET, and along with Java, it's probably one of the most popular business software frameworks on the planet. Thing is, Snover was suggesting this at a time when .NET Framework-based projects were failing left and right _inside_ Microsoft. This was in the "Longhorn" timeframe, when projects like WinFS - touted as the very basis of a new generation of Windows - had epically failed to deliver. Microsoft wound up ["decoupling" Longhorn from .NET][3], and now there's this loudmouth running around trying to build a _shell_ on it? +I won't say that Jeffrey was a pariah internally for a period of time, but he certainly had his battles to fight. +And he won. + + +## The PowerShell Era + +Launching in 2006, PowerShell 1.0 was in many ways the "minimal viable product" the team could have shipped. Notably, it lacked Remoting, something which would hold PowerShell back until 2.0 shipped a couple of years later. But Snover and his team, with 1.0, still accomplished the near-unimaginable: they convinced the Exchange Server team to go all-in, and build an almost model implementation of how to use PowerShell for administration. Exchange Server 2007 built its very GUI on top of PowerShell, just as Snover had imagined in his Manifesto. It's perhaps hard to imagine, a decade later, how incredible an accomplishment this was for Microsoft. Exchange Server was very much the flagship product of the time. Pretty much everyone bought Exchange Server, and to make this big a flip was a big deal. +To be sure. the Exchange Server team wasn't without their worries. In fact, the team hedged its bets in a big way. Rather than instrumenting the server directly in PowerShell, the team built an entire abstraction layer, and wrote PowerShell commands _to that. _That way, they reasoned, if this ".NET Shell thing" was a flop, they could rip it out and replace it with something else, and do so fairly quickly. +PowerShell wasn't a flop. + + +## In Lockstep with the Vision + +Few realize it, but every version of PowerShell up to, and including, 4.0 were created in lockstep with the original Manifesto. While each version introduced a bevy of new features, the "headline" feature in each was taken straight from the Manifesto: + + 1. A composable command-line shell and scripting language + 2. Remoting + 3. Workflow + 4. Desired State Configuration + +Snover and the Windows Management Framework (WMF) team - of which PowerShell and its supporting technologies are a part - kept marching firmly in the direction he'd outlined. And that's not to in any way suggest it was a one-man show. Luminaries like Bruce Payette, who led much of the core language development, helped make PowerShell accessible to newcomers and familiar-feeling to programming pros. Guys like Lee Holmes not only helpd move development forward, but more recently gave the shell a stronger security focus. Dozens of unseen and unsung heroes helped make sure PowerShell was meeting the needs of its audience (I'm reminded by one exercise at a Microsoft MVP Summit, where MVPs helped reproduce and categorize filed bugs so that the team could start working through them, and another incident where Program Manager Dan Harman read through _hundreds_ of suggestions in Microsoft Connect to help bring as many of them to life as possible). There are team members who've been with the product for a decade, something that's nigh unheard-of in Microsoft. + + +## The Role of Community + +The team knew at the outset that PowerShell _would_ flop if people weren't using it, and becoming passionate about it. Numerous team members began to engage with the community on a regular basis to help that community come to life. The PowerShell MVPs - honestly, one of the most engaged and critical groups of MVPs within the MVP program - encouraged people to learn the shell, poke at it, and complain about any shortcomings they ran across. This vocal community made a serious impact. An early build of PowerShell 3.0 included a ReadMe file listing some 80-odd new features and changes, _along with the names of the people who'd suggested them. _Snover himself remains a regular conference guest. Payette and Holmes wrote bestselling books. Numerous team members appeared at Microsoft TechEd and Ignite. +And the team supported independent community efforts whenever possible. Managers like Kenneth Hansen, Angel Calvo, Erin Chapple, and more made sure community leaders had access to answers and resources when they needed them (scarce as those resources could be, at times), and the entire team worked to give as much of their time as possible to helping the independent community thrive. Sites like PowerShell.org and PowerShellMagazine.com,  the PowerScripting Podcast, and conferences like PowerShell Conference Asia, PowerShell Conference Europe, and the PowerShell + DevOps Global Summit would have been impossible without the generous support the team gave. +And that community thrived. Perhaps the biggest "wins" came with Advanced Functions (affectionately called "script cmdlets") and Desired State Configuration, where we no longer had to rely on Microsoft to provide us with the tools we needed, but could instead code them up ourselves. +And _that_ was a turning point. + + +## Baby Open Source Steps + +Understand that open source had long been the enemy at Microsoft. The company's attempts to fight back against Linux and establish a Windows-only datacenter created a culture that deeply distrusted open source, and in many ways regarded it as the opposite of what Microsoft was all about. But _many_ within Microsoft regarded open source as a way to better provide customers with what they actually needed, and a way to empower customers to create their own solutions, rather than relying entirely on what Redmond could produce. +The PowerShell team's first step into open source was to simply release the Desired State Configuration Resource Kit on GitHub. It wasn't a big step, as the Kit modules were all script anyway, making the source "open" kind of by default. That happened at almost the same time the company released an open-source (!) Local Configuration Manager implementation for Linux (!!). Satya was in charge now, after all, and he'd made it clear that _Microsoft Loves Linux. _ +Not long after, Desired State Configuration's documentation was open-sourced (!!!) as a set of Markdown (!!!!) documents, allowing anyone to contribute and make corrections. That was quickly followed by _all_ the PowerShell core documentation being open-sourced (!!!!!). Haters gonna hate, of course, and Microsoft was quickly accused by some as simply "taking advantage" of the community for "free bug testing and documentation writing." Which, of course, is the _whole point_ of the OSS movement. Customers were now _empowered. _We didn't have to wait for Microsoft to fix a typo, or file an expensive support incident. We could fork, fix, and submit a PR. +Snover made it clear as far back as 2014 that the open-sourcing of PowerShell itself was "inevitable," although he could never comment on a timeline. The blocker, he felt, was that .NET itself - which PowerShell runs on - was closed-source, making an open-source PowerShell fairly useless. + + +## The Dominoes Begin to Fall + +Of course, Microsoft recently open-sourced .NET Core, bringing it - and things like ASP.NET Core - to Linux and Mac. Suddenly, Snover's "blocker" wasn't a block. Well, kind of. PowerShell needed a lot more than .NET Core. +Except for _PowerShell Core, _which was designed to run on the extremely stripped-down Nano Server version of Windows Server 2016. PowerShell Core ran on .NET Core. .NET Core was open-sourced. +And so, yesterday, PowerShell itself followed into the world of open source. It's [hosted on GitHub][4], for pity's sake, which is about the most non-old-school-Microsoft thing I can imagine. And the first pull requests have already been submitted. +But I want you to look back at where PowerShell has been these past 10+ years. It began as a simple document, and nearly didn't live, thanks to the negative internal feelings on .NET at the time. But it _did_ live, thanks in part to a strong vision, and in part to a passionate team of designers and developers who knew their ".NET shell" would make a difference. Today, PowerShell is deeply embedded into nearly every Microsoft business product, and is becoming more so every day. All of this happened in about the same time it took VBScript to become widely accepted by administrators - but PowerShell, in that time, has come _leagues_ further. + + +## Sure... but on _Linux_??? + +Of course, none of the forgoing in any way explains why PowerShell on Linux (or macOS) makes any sense. These operating systems are inherently text-based, and their existing shells have been getting the job done for decades. So why PowerShell? Why now? +First, I think it's telling that PowerShell on *nix (which includes, for me, macOS, based as it is on BSD) is _respectful. _On Windows, we have Unix-like aliases - ps, ls, and the like - which run PowerShell-equivalent commands. Not on *nix. Run **ps** and you'll get the same **ps** you've always run; ditto with ls, man, and all the others. PowerShell isn't here to trample the commands you know. But it _can_ integrate those commands into its pipeline, feeding them objects-as-text, and consuming the text they output. "Objects" simply being a defined data structure, many familiar Linux command-line compositions can be done more easily and in a more readable sense in PowerShell, since text manipulation is less critical. Command-lines become less fragile, too, since these data structures can remain the same even when the underlying command is updated. Leading up to the release of PowerShell on *nix, I had the opportunity to work with many die-hard Linux admins who, once they agreed to keep an open mind, started to really appreciate what PowerShell could do for them. +And don't forget that _Microsoft Loves Linux. _Having a single shell experience, and cross-platform shell connectivity, makes it easier to run Windows and Linux _together. _It'll make it easier to manage Linux in Microsoft's Azure cloud. It gives us, the IT community, _options, _where before we didn't have any. +And I think, tellingly, PowerShell on *nix represents a sea change at Microsoft. You're no longer being asked to buy into a single-stack solution. Microsoft's happy to let you mix and match as needed. Most importantly, they think you'll use their products - like PowerShell - because _they're the best tool for the job. _In other words, Microsoft's willing to _compete,_ and have you use their products because you choose to, not because you've been locked into them._ _That's a wonderful thing. There's the implied risk of losing the competition, but it's a risk Old Microsoft has tried to mitigate and remove as much as possible. Now, we have the option to use Office wherever we want - not tied to Windows. PowerShell is no longer tied exclusively to Windows. We're seeing that attitude work both ways, too, with Bash on Windows, SSH on Windows, and more. These products can _compete_ for your attention, and that will make them _all_ better products in the long run. +So congratulations to Jeffrey Snover, to all the members of the Windows Management Framework team, and to Microsoft itself. And congratulations to PowerShell itself - and to the global community that brought us to this inevitable new beginning. + + [1]: https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/ + [2]: https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiRtrzc1M3OAhVD7GMKHVe8Cz4QFggcMAA&url=https%3A%2F%2Fwww.gitbook.com%2Fbook%2Fdevopscollective%2Fthe-monad-manifesto-annotated%2Fdetails&usg=AFQjCNEi5p7CeZIrvKWKovnnBb7zLpyCGw&bvm=bv.129759880,d.cGc + [3]: http://www.theregister.co.uk/2005/05/26/dotnet_longhorn/ + [4]: http://github.com/powershell/powershell diff --git a/content/articles/2016/09/_index.md b/content/articles/2016/09/_index.md new file mode 100644 index 000000000..05838a7b7 --- /dev/null +++ b/content/articles/2016/09/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from September 2016" +description: "PowerShell.org Articles published in September 2016." +--- diff --git a/content/articles/2016/09/changing-of-the-guard-at-powershell-org/index.md b/content/articles/2016/09/changing-of-the-guard-at-powershell-org/index.md new file mode 100644 index 000000000..1c4e31038 --- /dev/null +++ b/content/articles/2016/09/changing-of-the-guard-at-powershell-org/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2016-09-22-changing-of-the-guard-at-powershell-org/ +title: Changing of the Guard at PowerShell.org +authors: + - Don Jones +date: "2016-09-22T14:47:30+00:00" +categories: + - Announcements +aliases: + - /2016/09/changing-of-the-guard-at-powershell-org/ +--- + +It's a bit of a sad day at The DevOps Collective, which is the nonprofit that runs PowerShell.org. One of our Board of Directors members, Dave Wyatt, will be stepping down from his Director position this week. He wants to focus on his personal life a bit more, although he's still going to be responsible for our public Build Service, and he's going to continue contributing to the Pester project, so the community isn't losing him entirely. Dave's been a huge help, and a huge inspiration, at PowerShell.org, and he'll be greatly missed. +But our sadness is balanced by some happy news, too, as PowerShell.org Webmaster Will Anderson has agreed to fill Dave's seat. Will has brought a great enthusiasm to our team of volunteers, is also a PowerShell MVP, and also resides in Canada. Will's responsible for most of the photography you'll see in the upcoming PowerShell + DevOps Global Summit 2017 brochure, and he's been a great help in keeping PowerShell.org's website up and running. +So please join me in wishing our outgoing Director all the best, and in welcoming Will to the Board! diff --git a/content/articles/2016/09/nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas/index.md b/content/articles/2016/09/nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas/index.md new file mode 100644 index 000000000..c7042b4a8 --- /dev/null +++ b/content/articles/2016/09/nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2016-09-06-nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas/ +title: Nearing Last Call for PowerShell Summit Topic Proposals (+ Topic Ideas!) +authors: + - Don Jones +date: "2016-09-06T14:04:52+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/09/nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas/ +--- + +Remember that our [Call for Topics is still open][1] until the end of September, if you'd like to submit. And, from our Summit Alumni Slack channel, here are a few things people said they'd like to see... + + * I would love to see a session on what it takes to build a PKI infrastructure in support of PowerShell operations ( stuff liked passing creds with DSC ) - this is something glossed over all the time as if it is not a big deal but I think it can be quite challenging for a lot of people to implement. + * Writing for Performance: Tips and Tricks to Write Faster Code + * Compiled cmdlets - how to create them and why you might want to (this got a **lot** of thumbs-up) + * Open source PowerShell hackathon.  Either one multi-hour (2, 3, 4?) window where people can break into groups and work on some open source PowerShell extension, or two sessions, one at the beginning of the event and one at the end.  The one at the beginning the presenters/organizers provide a set of possible project ideas to work on, and people interested can sign up/vote for projects which creates groups.  The one at the end gives groups an opportunity to share/demo what they produced.  Having a room where people can gather to work on it would be cool.  These don't have to be big projects.  They could be small things, like knocking off one or more issues for an open source project.  The end goal is to have a pull request submitted or a new project posted in GitHub or a new module submitted in the Gallery. _Now, to be clear, this isn't a session - but you can definitely propose it. We have some longer time slots on Wednesday for panels, and this might be something you could do then. _ + * examples of real world DSC usage - that was a comment I heard from a number of folks this year + * Practical Pipelines. ( Illustrate that release pipelines aren't just for DevOps-practicing shops, or public-facing software ) + * Build plans (and tools, like psake) + * Module design best practices (lots of thumbs-up on this one) + * Working with Open Source Projects (as a Contributor) + * Working with Open Source Projects (as a Maintainer) + * Applying Agile Software Development Methodologies to PowerShell + * Using for . (assumption: someone writes the equivalent of inspec wrapped around Pester) + +And if you read the above carefully, you'll notice that **we do also have some space for afternoon panels on Wednesday - so if there's a group discussion you'd like to lead, propose it! **Just be clear in the description you submit that you're proposing a panel. It'll be up to you to recruit panel members, which you can do on-site. We'll announce panels in need of panelists and direct them to you. + + [1]: https://powershell.org/2016/08/01/powershell-and-devops-global-summit-2017-call-for-topics/ diff --git a/content/articles/2016/09/powershell-devops-global-summit-2017-preview/index.md b/content/articles/2016/09/powershell-devops-global-summit-2017-preview/index.md new file mode 100644 index 000000000..c1f459357 --- /dev/null +++ b/content/articles/2016/09/powershell-devops-global-summit-2017-preview/index.md @@ -0,0 +1,49 @@ +--- +url: /articles/2016-09-19-powershell-devops-global-summit-2017-preview/ +title: PowerShell + DevOps Global Summit 2017 Preview +authors: + - Don Jones +date: "2016-09-19T19:55:14+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/09/powershell-devops-global-summit-2017-preview/ +--- + +As a quick reminder, our [Call for Topics is still open][1] for a few more days! Summ. Summit is very much intended to be a kind of mega-user group, not a "conference," so don't assume all the "professional" speakers have taken up all the speaking slots. We want **you** to participate! +In the meantime, while we're waiting on the content committee to select topics and before registration opens in early November, I wanted to offer a peek at what we're planning. + +## Deep Dive Day + +Sunday is now a formal "full day" of Summit, rather than a "pre-con" day. That means we'll be presenting both Intermediate and Advanced content, including an opportunity for you to dig into the new open-source PowerShell GitHub repo, learn about the layout of the code, review what the community's been up to with that code, and more. Sunday will also offer two Lab opportunities, one for Advanced Functions and one for DSC Resources. You'll be able to wander in at will, and share some of _your work_ with a domain expert, who'll offer critique and advice. We'll also have some pre-done scenarios, in case you'd like to try your hand and test your skills. The full four-day pass is expected to cost $1500, and will be the first opened for registration in November (3-day is expected to be $950 or $975, and will open in January or February). + +## All Together Now + +Monday (the first day you can attend on a 3-day pass) will feature an opening keynote by myself, a full session with ShellFather Jeffrey Snover, an update on PowerShell from team leaders, and our now-famous Lightning Demos from various developers on the team. We'll finish the day with a grand reception, where you can mix and mingle with everyone you've seen, and enjoy some quality food and beverages. + +## Breakout! + +All day Tuesday, as well as Wednesday morning, we'll feature our usual 45-minute breakout sessions on a huge variety of deep topics. We'll be covering DSC, pull servers, JEA, best practices, security, and SO much more, including sessions delivered by members of the PowerShell product team. We've got a full three tracks - more than last year! - of content planned. + +## Par-ti-ci-pa-tion + +We've noticed that Wednesday afternoons can drag a bit - so after lunch, we're going to roll out some great snacks and drinks. Wednesday afternoon will get more interactive, with a variety of Community Lightning Demos (sign up on site with the moderator), panel discussions, focus groups, and more. + +## On The Air + +We've expanded and refined our session recording capabilities, and you can expect better audio, as well as screen-capture recordings for every session (barring technical difficulties), something we haven't been previously able to do with this much content. All sessions are made available on YouTube within a couple of weeks of the event's conclusion (we do not live-stream, and we won't be posting sessions instantly each day). + +## Networking + +It ain't just for routers and switches - Summit remains dedicated to providing plenty of face time with your fellow PowerShell and DevOps enthusiasts. We'll offer additional evening fun (anyone interested in a trip to the Microsoft Museum one evening? We're looking into it), side rooms for breakout conversations, and of course we encourage everyone to _participate_ in breakout sessions by offering comments and asking questions. + +## Extra Bits + +2017 will be the Fifth Anniversary of Summit, and so we're bringing along some extra swag and collectible opportunities. If you attended in 2016, bring your 1-inch button to wear around your badge lanyard and show your alumni status (we'll have 2017 buttons, too). Some merchandise will only be available as an advance purchase, so watch PowerShell.org for details; other merch might be available on-site, but in very limited quantities, so be sure to get that 4-day pass! + +## Mark Your Calendars + +Sunday-Wednesday passes will open for registration the first week of November, 2016; we expect Monday-Wednesday passes to become available in January or February. As always, registration is limited to about 200 attendees (plus our speakers and the product team members), so _don't delay. _Because registrations are nonrefundable, we do not maintain a waitlist, and we fully expect to sell out - as we have every year. + + + [1]: https://powershell.org/2016/09/06/nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas/ diff --git a/content/articles/2016/09/powershell-happenings-at-ignite-2016/index.md b/content/articles/2016/09/powershell-happenings-at-ignite-2016/index.md new file mode 100644 index 000000000..264582eeb --- /dev/null +++ b/content/articles/2016/09/powershell-happenings-at-ignite-2016/index.md @@ -0,0 +1,27 @@ +--- +url: /articles/2016-09-22-powershell-happenings-at-ignite-2016/ +title: PowerShell Happenings at Ignite 2016 +authors: + - Don Jones +date: "2016-09-22T15:27:46+00:00" +categories: + - Announcements +aliases: + - /2016/09/powershell-happenings-at-ignite-2016/ +--- + +With Ignite fast-approaching, here's what's up - and this is intended to be a "community post," meaning I'd love it if you could add your own PowerShell At Ignite notes in the comments, including sessions you're looking forward to! +On **Sunday evening, **while not officially a PowerShell event, a lot of PowerShell glitterati will be at [The Krewe's][1] annual gathering from 8pm. +On **Monday evening, **the Atlanta PowerShell User Group is kindly hosting a [meet-and-greet][2] with myself, Jeff Hicks, and Jason Helmick. We promise to be educational; registration required (but free). +**Tuesday evening** is the PowerShell Community Happy Hour (from 4-7; [tickets required)][3], including many of the in-attendance team members, most of the PowerShell.org Board, and a bunch of super Shell enthusiasts. We'll have PowerShell.org and The DevOps Collective laptop stickers! +**Wednesday, **I'm looking forward to [PowerShell Unplugged][4] with Jeffrey Snover and I, from 9 to 9:45am. This is nearly always hilarious and fun. Then, from 10-10:30, Jeffrey, Jason Helmick, and I will be signing books and handing out laptop stickers at the Ignite Bookstore. Finally, from 11-11:30, I'll be signing FREE! books at the [Conversational Geek][5] booth (#571) (who have some [amazing scavenger hunt prizes][6]). +And of course, please stop by the [Pluralsight][7] booth to say hi, pick up some swag, register your company for a free pilot subscription, and whatnot. +So... what're YOU looking forward to next week? + + [1]: https://twitter.com/thekrewe?lang=en + [2]: https://www.meetup.com/Atlanta-PowerShell-Users-Group/events/233394410/ + [3]: https://www.eventbrite.com/e/powershell-community-happy-hour-2016-tickets-26667369821 + [4]: https://myignite.microsoft.com/sessions/3112 + [5]: http://conversationalgeek.com/ + [6]: https://twitter.com/convgeek + [7]: http://pluralsight.com diff --git a/content/articles/2016/09/recap-of-dupsug-powershell-saturday-2016/index.md b/content/articles/2016/09/recap-of-dupsug-powershell-saturday-2016/index.md new file mode 100644 index 000000000..87c8f6158 --- /dev/null +++ b/content/articles/2016/09/recap-of-dupsug-powershell-saturday-2016/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2016-09-27-recap-of-dupsug-powershell-saturday-2016/ +title: Recap of DuPSUG PowerShell Saturday 2016 +authors: + - Jaap Brasser +date: "2016-09-27T07:28:04+00:00" +categories: + - Events +aliases: + - /2016/09/recap-of-dupsug-powershell-saturday-2016/ +--- + +Last weekend we hosted our second PowerShell Saturday, this time the event was hosted by IPsoft in Amsterdam. During this event members of the Dutch PowerShell User Group gathered together to view a number of presentations and to engage in lively discussions on the various new developments in the PowerShell world. +For more information about PowerShell Saturday, the Dutch PowerShell User Group or the slides and code used in the presentations please head over to the recap blog post here: +[Recap of Dutch PowerShell Saturday September 2016][1] + + [1]: http://www.jaapbrasser.com/recap-of-dutch-powershell-saturday-september-2016/ diff --git a/content/articles/2016/09/unit-testing-is-pestering-the-hell-out-of-me/index.md b/content/articles/2016/09/unit-testing-is-pestering-the-hell-out-of-me/index.md new file mode 100644 index 000000000..137dde4fd --- /dev/null +++ b/content/articles/2016/09/unit-testing-is-pestering-the-hell-out-of-me/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2016-09-02-unit-testing-is-pestering-the-hell-out-of-me/ +title: Unit Testing is “Pestering” the Hell Out Of Me +authors: + - Missy Januszko +date: "2016-09-02T17:31:14+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/09/unit-testing-is-pestering-the-hell-out-of-me/ +--- + +About a week or two before Devops Camp, the attendees were asked how much experience they had using Pester, because another attendee was preparing a discussion on Pester and wanted to gauge the other attendees’ comfort level. Learning Pester had been on my to-do list for a while, but I had procrastinated on it for far longer than I intended. I answered “Beginner” - although “complete and utter newbie” would have been more accurate - and I vowed to spend some quality time looking at Pester before arriving at camp. +There are some really great resources out there devoted to Pester, from beginner to intermediate to way-over-my-head. I read articles and watched videos. And I understood, in a conceptual kind of way, how to use Pester. Describe, Context, It, Mock, Assert-MockCalled – I understood what these things were used for. The examples made sense. I was ready to move on to trying it myself. But here is where I stumbled and recovered, and I would like your feedback and opinions on my discoveries. +I took a piece of code I was currently working on and decided that a small function in that code was the perfect function to attempt my first unit test on. I mean, it was the tiniest little function - 7 lines of code! What could possibly be easier? Right? +Boy, was I wrong. The struggle IS real. +In a nutshell, my function really is 7 lines – an If/Else statement and a For-loop – and inside each is an external call to an Active Directory cmdlet. Those would definitely need to be mocked. After all, we know or assume that Set-ADAccountControl and Set-ADObject do what they are supposed to. I was stumped at where to even start because after mocking these external calls – there isn’t actually anything left to the code! +Even after a wise person told me that “This probably isn’t a great example of a “Pester 101” example”, I was still determined to figure out how to write a Pester test to test this function, but I needed to set aside my thoughts of “I can’t figure out how to write a Pester test for this” and instead, start with “Figure out how to write a unit test for this.” My brain freeze wasn’t about Pester – it was about unit testing. What do I need to test? My next step was to do some reading up on general unit testing concepts. +I’m not opposed to buying a book on testing concepts, but I wanted some quick answers and not a research project just to get me started. I turned to “Dr. Google” and I found some useful definitions, both formal and informal, on what unit testing really is. But it wasn’t until I found a comment buried deep in a StackExchange forum post that I realized what my next steps were. + +**Red-Green-Refactor-Repeat** +**Red:** Write a test that fails. +**Green:** Write the simplest code that makes the test pass. For the first pass, don’t handle edge cases, just enough to make the test pass. +**Refactor:** Clean up the code and optimize if necessary. Make sure the test still passes. +**Repeat:** Now think about handling those edge cases and repeat the previous steps with tests, then code, to handle them. +The entire thread can be found here and the detailed explanation of the Red-Green-Refactor-Repeat concept in the comments is definitely worth a read: + + +When I started thinking about writing this article, I knew that I was struggling with the concept of unit testing and I had planned to include the code that I was looking to test as part of the blog. After doing the reading to try to wrap my brain around the concepts, I changed my approach. I’ve decided to scrap the original version of this code and try to use the above approach to re-develop the function instead. I plan to blog about my journey through this process in a future post. +Until then, I’d like to initiate a dialog with you, the readers: How do you approach unit testing? What is your thought process? What do you feel is important or not important to include in a unit test? diff --git a/content/articles/2016/10/_index.md b/content/articles/2016/10/_index.md new file mode 100644 index 000000000..a122cb1bd --- /dev/null +++ b/content/articles/2016/10/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from October 2016" +description: "PowerShell.org Articles published in October 2016." +--- diff --git a/content/articles/2016/10/a-practical-guide-for-using-regex-in-powershell/index.md b/content/articles/2016/10/a-practical-guide-for-using-regex-in-powershell/index.md new file mode 100644 index 000000000..11b20e69b --- /dev/null +++ b/content/articles/2016/10/a-practical-guide-for-using-regex-in-powershell/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2016-10-04-a-practical-guide-for-using-regex-in-powershell/ +title: A Practical Guide for Using Regex in PowerShell +authors: + - Duffney +date: "2016-10-04T00:49:59+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks + - Tutorials +aliases: + - /2016/10/a-practical-guide-for-using-regex-in-powershell/ +--- + +Regular Expressions is often referred to as wizardry or magic and for that reason I stayed away from it for most of my career. I used it only when I had to and most of the time just reused examples that I found online. There's nothing wrong with that of course, but I never took the time to learn it. I thought it was reserved for the elite. Turns out that it's not that complicated and that I had been using it for years without knowing it. +In an effort to shorten the learning curve for others and to show you the value of learning regular expression I've written a blog post titled [A Practical Guide for Using Regex in PowerShell][1]. It will walk you through how to use regular expression in PowerShell and gives you a glimpse into how powerful regular expression is. +Below is an example of how to use regular expression to extract a user's name from their distinguished name in Active Directory. To learn more check out this [blog post][1]. +![matches](https://powershell.org/wp-content/uploads/2016/10/matches-1.png) +Topics Covered + + * -match operator + * -match operator with regular expression metacharacters + * -notmatch with where-object + * -replace operator + * -split operator + * Select-String + * Switch Statements + * Regex Object + + [1]: http://duffney.io/APracticalGuideforUsingRegexinPowerShell diff --git a/content/articles/2016/10/apologies-for-the-delay/index.md b/content/articles/2016/10/apologies-for-the-delay/index.md new file mode 100644 index 000000000..097a3e9d5 --- /dev/null +++ b/content/articles/2016/10/apologies-for-the-delay/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2016-10-13-apologies-for-the-delay/ +title: Apologies for the delay +authors: + - Richard Siddaway +date: "2016-10-13T12:35:22+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2016/10/apologies-for-the-delay/ +--- + +Due to unforeseen circumstances we're a bit late getting out notifications of the sessions accepted for the 2017 Summit. +Apologies to everyone who submitted sessions. +We hope to have the notifications out in the next few days diff --git a/content/articles/2016/10/be-an-azure-consultant-for-powershell-org/index.md b/content/articles/2016/10/be-an-azure-consultant-for-powershell-org/index.md new file mode 100644 index 000000000..96c7e9f24 --- /dev/null +++ b/content/articles/2016/10/be-an-azure-consultant-for-powershell-org/index.md @@ -0,0 +1,33 @@ +--- +url: /articles/2016-10-14-be-an-azure-consultant-for-powershell-org/ +title: Be an Azure Consultant for PowerShell.org! +authors: + - Don Jones +date: "2016-10-14T22:14:54+00:00" +categories: + - Announcements +aliases: + - /2016/10/be-an-azure-consultant-for-powershell-org/ +--- + +So, after our nearly-2-day outage, which was due to a still-not-fully-explained Apache fail, we're looking to make some changes. We need to migrate PowerShell.org to a different Azure subscription anyway, so this is a good time to change the kind of service we're using. +First, using Azure is non-negotiable. If your expert opinion is to use something else, please just don't ;). **Update: **This might be changing. AWS could be an option. +Second, our current environment is a classic VM running CentOS 6 (yeah, it's old), WordPress, and MySQL. WordPress and MySQL are also non-negotiable, this isn't about switching CMSs or anything. We use VaultPress for to-the-minute backups, but their restore process is a beast and has never been easy or reliable. +What we WANT is the ability to more or less push a button and re-deploy the entire site from backup, ideally automated through some OMS trigger that senses when the site has crashed. +Now, some caveats. + + * Our budget is $200/mo. We take about 150k-200k visitors per month, and WordPress is a reasonably demanding piece of software. We have about 500MB in files and about 300MB (currently) in data, and we grow about 75-ish MB a year. + * We would ideally like the data backups to be distinct from the site itself. That is, if we could simply kill an old server and deploy a new one, and then drop the data onto it (all automatically), that'd be ideal. This is distinct from simply backing up an entire VM image, since the OS, files, and data would all be one chunk. + * It'd be lovely if, instead of having to patch and upgrade the OS, we can just kill the current server, deploy a new one with all the new hotness in versions, and drop the data on it. + * The more of this that lives in Azure (e.g., Backups), the more likely - we feel - we'll be able to automate this entire kill-and-deploy process in OMS or something. + +Staying on Linux is fine. It also isn't a pre-req. WordPress (and MySQL, since WordPress doesn't play well with much else) are the main requirements. We'd like to be on a modern (6+) version of PHP, as well. +**Update: **So, let me outline the kind of thing we're thinking. So far we've gotten a lot of suggestions on which OS to use, or which DB to use, and that wasn't really the question so much as the architecture. For example: + + 1. Run a small, on-demand staging instance where patches (WordPress and plugins) are applied to the site. The site's folder is under Git, and after applying updates and testing, we push to a private (because configs contain passwords) GitHub repo. This instance isn't backed up - the important bits are in GitHub. + 2. Use ____ to deploy the actual instance(s) that people will use. This deployment is a la Elastic Beanstalk, where you just push a base OS image and it sucks down your GitHub repo to populate the files of the site. Again, not backed up - GitHub is the backup. + 3. Except for the WordPress Uploads folder, which you redirect to another, simpler instance that serves these as static files. This is a bit complex, because WordPress needs file-based access to this for uploading, while it also needs to be exposed as a web server for downloading. Simple backups to ensure we have copies of the files handy, and we don't need to retain a backup history because there's no code that could break and need to be rolled back. + 4. Data lives on a distinct hosted RDBMS. That's probably MySQL, as it's what's supported with WordPress. We're aware of Namiproject, but unless that's moving in lockstep with the base WP releases and is 100% guaranteed to work with all the plugins we need.... The RDBMS is backed up separately. + +A concern with #4 in Azure is that they only offer this (for MySQL) through ClearDb, and I've seen latency and persistency problems. I'm ideally wanting everything hosted in one datacenter/region to reduce that problem. And I'm aware of Namiproject, but we have something a bit more complex than a stock WP install, so someone's going to have to _convince_ me that SQL Server's a safe choice. +So... any suggestions for a full-stack? Please, be serious and complete - if your suggestion is, "just run VMs," that's not helpful and it'll likely be deleted. But if you've got ideas for a mix of services that you think will do the job - by all means, please, speak up! diff --git a/content/articles/2016/10/call-for-topics-summit-closed-but-european-conference-open/index.md b/content/articles/2016/10/call-for-topics-summit-closed-but-european-conference-open/index.md new file mode 100644 index 000000000..e57604f8e --- /dev/null +++ b/content/articles/2016/10/call-for-topics-summit-closed-but-european-conference-open/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2016-10-03-call-for-topics-summit-closed-but-european-conference-open/ +title: Call for topics – Summit closed but European conference open +authors: + - Richard Siddaway +date: "2016-10-03T08:57:49+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2016/10/call-for-topics-summit-closed-but-european-conference-open/ +--- + +The deadline for the submission of proposals for the 2017 has passed. We are NOT taking any new submissions. if you’ve been in communication regarding a submission thats fine its still under consideration and I’ll be in touch. + + + On the positive side the call for speakers for the European PowerShell conference has opened - http://www.powertheshell.com/psconfeu/ diff --git a/content/articles/2016/10/dsc-configurationdata-blocks-in-a-world-of-cattle/index.md b/content/articles/2016/10/dsc-configurationdata-blocks-in-a-world-of-cattle/index.md new file mode 100644 index 000000000..1060c58c8 --- /dev/null +++ b/content/articles/2016/10/dsc-configurationdata-blocks-in-a-world-of-cattle/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2016-10-11-dsc-configurationdata-blocks-in-a-world-of-cattle/ +title: DSC ConfigurationData Blocks in a World of Cattle +authors: + - Don Jones +date: "2016-10-11T21:01:59+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/10/dsc-configurationdata-blocks-in-a-world-of-cattle/ +--- + +As you may know, Jeffrey Snover and I have, for some time, been on a "servers are cattle, not pets" kick. Meaning, servers shouldn't be special, individualized snowflakes. They should be, in many regards, appliances. One dies, you eat it and make another. They don't have names - that you know of. They don't have IP addresses - that you know of. Oh, I mean, they _have_ them, but you don't know them and don't care. +Anyway, one thing that came up in a recent conversation related to DSC's ConfigurationData blocks. Have a [look at the MSDN documentation][1] and tell me what you see. +Go on, I'll wait. +You see **NodeName. **But damnit, if servers are cattle and cattle don't have (known) names, what the dude is NodeName all about? +Well, for one, it was a poor choice on the team's part. I'd have called it - and this is giving away the punchline - **NodeRole. **Imagine that your "NodeName" was "SalesAppWebServerRole." When you run your configuration script, you get a MOF named SalesAppWebServerRole.mof, right? Which you then checksum and load onto a pull server. And when you're spinning up a new server to host that role, you tell its LCM to grab the ConfigurationName "SalesAppWebServerRole." +The server, when spinning up, makes up a name for itself. Charming, right? Cows think they have names. Sweet. Don't care. It gets an IP address for itself, partially from DHCP of course, and partially by making up the other necessary IPv6 stuff (oh, and IPv6 is a thing now, so get on board). +Then, presumably, it runs to the pull server, grabs the MOF, and starts a consistency check. During which, presumably, _it registers some known name with DNS or load balancer or something. _Now you know it's "name!" Or the name you want to call it by, at least. Also presumably, your load balancer knows to remove or suspend the entry if the host stops responding, and to periodically scavenge stale records (remember, the node's own LCM will make sure its entry gets put back, on the next consistency check run). So if the node dies and you spin up a new one, the rest of the affected infrastructure - DNS, load balancers, what have you - clean themselves up automatically (and DSC could be involved in that process, too). +Anyway... the point is that ConfigurationData blocks can absolutely be used for cattle farms, not just for pet shops. "NodeName" is a misleading setting, but if you think of it as a role, which could be applied to multiple actual machines, then it makes a lot more sense that way. + + [1]: https://msdn.microsoft.com/en-us/powershell/dsc/configdata diff --git a/content/articles/2016/10/no-easy-button-for-configuration-management/index.md b/content/articles/2016/10/no-easy-button-for-configuration-management/index.md new file mode 100644 index 000000000..cb4e42439 --- /dev/null +++ b/content/articles/2016/10/no-easy-button-for-configuration-management/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2016-10-12-no-easy-button-for-configuration-management/ +title: "No \"Easy\" Button for Configuration Management" +authors: + - Missy Januszko +date: "2016-10-12T00:18:44+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/10/no-easy-button-for-configuration-management/ +--- + +A discussion in one of my Slack channels caught my eye today around someone’s reflections in a github repo regarding DSC. The posted comment that introduced the link was titled “DSC from a newbie perspective”, and I thought “Oh? I’m a newbie too, I wonder if we’re thinking the same things.” +A little history is probably needed on my “newbie” status with DSC. I went to the Tech Mentor conference in March, where I spent most of my time in sessions learning DSC. I was hooked, but knew I needed much more in-depth training to make it something that would be useful to me in the real world. So I set a goal of learning DSC in depth about 4 months, so that I could attend DevOps Camp in August, and be able to converse intelligently about DSC, Configuration Management, and DevOps in general. And with some help from friend and mentor Jason Helmick along with blood, sweat, tears, and 10-15 extra hours a week spent on just DSC, I made it to DevOps Camp and managed to follow along and join in the discussions. +I’ve got about 6 months of DSC experience under my belt at this point, but I still consider myself a “newbie” in the grand scheme, so I fell hook, line, and sinker to go check out the comments here: + +I’m not an expert in Chef, so I won’t comment on the comparisons between the two. But while two weeks may be long enough to do a quick comparison between a product you know something about (in his case, Chef) and a product you are vetting against it (DSC), it isn’t nearly enough time to come to a conclusion like “DSC is too immature to even consider as a stopgap”. +Reading on, the reasons for liking/hating DSC seem to be the reasons for hating/liking Chef. Not wanting others to need to deal with learning Ruby was mentioned as a plus for DSC.  But it also seems like the poster wanted or expected DSC to be easy so that folks didn’t have to learn Chef, and was disappointed that it wasn’t. +There’s no “easy” button - if there really were an easy button for automation and configuration management, we’d have all the resources ever wanted neatly packaged and consumable, but the building of the platform and the tooling surrounding the platform takes time, people, and effort. So build and submit a High Quality Resource Module, or fork and fix some of the “awful error tracking”.  Some of these comments and feedback are really quite legit – but the points that need to be made and worked on are lost under the lamenting that DSC doesn’t have an Easy button. diff --git a/content/articles/2016/10/pitfalls-of-the-pipeline/index.md b/content/articles/2016/10/pitfalls-of-the-pipeline/index.md new file mode 100644 index 000000000..b58fa4e0e --- /dev/null +++ b/content/articles/2016/10/pitfalls-of-the-pipeline/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2016-10-18-pitfalls-of-the-pipeline/ +title: Pitfalls of the Pipeline +authors: + - msorens +date: "2016-10-18T21:43:10+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks + - Tools + - Tutorials +aliases: + - /2016/10/pitfalls-of-the-pipeline/ +--- + +Pipelining is an important concept in PowerShell. Though the idea did not originate with PowerShell (you can find it used decades earlier in Unix, for example), PowerShell does provide the unique advantage of being able to pipeline not just text, but first-class .NET objects. +Pipelining has several advantages: + + * It helps to conserve memory resources. Say you want to modify text in a huge file. Without a pipeline you might read the huge file into memory, modify the appropriate lines, and write the file back out to disk. If it is large enough you might not even have enough memory to read the whole thing. + * It can substantially improve _actual_ performance. Commands in a pipeline are run concurrently-even if you have only a single processor, because when one process blocks, for example, while reading a large chunk of your file, then another process in the pipeline can do a unit of work in the meantime. + * It can have a significant effect on your end-user experience, enhancing the _perceived_ performance dramatically. If your end-user executes a sequence of commands that takes 60 seconds, then until 60 seconds has elapsed he/she would see nothing without pipelining, whereas output could start appearing almost immediately with pipelining. + +PowerShell provides a variety of techniques for using pipelining but it is all to easy to do it wrong, so you think you are pipelining but in fact you are not. In my article [Ins and Outs of the PowerShell Pipeline][1], I discuss the most common things that can trip you up with implementing pipelining and how to avoid them. + + [1]: https://www.simple-talk.com/sysadmin/powershell/ins-and-outs-of-the-powershell-pipeline/ diff --git a/content/articles/2016/10/powershell-devops-global-summit-2017-agenda/index.md b/content/articles/2016/10/powershell-devops-global-summit-2017-agenda/index.md new file mode 100644 index 000000000..9daf9edb2 --- /dev/null +++ b/content/articles/2016/10/powershell-devops-global-summit-2017-agenda/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2016-10-25-powershell-devops-global-summit-2017-agenda/ +title: PowerShell & DevOps Global Summit 2017 agenda +authors: + - Richard Siddaway +date: "2016-10-25T10:00:07+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2016/10/powershell-devops-global-summit-2017-agenda/ +--- + +The agenda for next year's Summit is almost complete - we've notified all speakers as to whether their sessions have been accepted or not. If you haven't received your notification please check your spam/junk mail. +We have a small number of sessions yet to publish - mainly around possible focus groups on the Wednesday afternoon. +To view the agenda go to the Summit event site - from https://powershell.org/summit/ click on the Brochure and registration link. +Registration opens 1 November 2016. diff --git a/content/articles/2016/10/powershell-devops-global-summit-2017-session-acceptance/index.md b/content/articles/2016/10/powershell-devops-global-summit-2017-session-acceptance/index.md new file mode 100644 index 000000000..45702d8eb --- /dev/null +++ b/content/articles/2016/10/powershell-devops-global-summit-2017-session-acceptance/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2016-10-18-powershell-devops-global-summit-2017-session-acceptance/ +title: "PowerShell + DevOps Global Summit 2017: Session Acceptance" +authors: + - Don Jones +date: "2016-10-18T17:53:20+00:00" +categories: + - PowerShell Summit +aliases: + - /2016/10/powershell-devops-global-summit-2017-session-acceptance/ +--- + +We're in the process of emailing speaker invitations to those whose sessions were accepted for the 2017 agenda. **Please check your email and promptly follow the instructions to complete registration. ** +In the event that a speaker is unable to confirm their invitation in time, we will move on to other speakers and sessions - that's why, if you haven't presently received an invitation, you still might. Once we've confirmed everyone, we'll send out notices to any speakers who were not selected, so that you're in the loop. We do appreciate your patience as we work through this process. +Registration will open November 1st, and a **draft** brochure is available at http://PowerShellSummit.org. This brochure does include session highlights that may not have been confirmed, so they're still subject to change. The Registration link at PowerShellSummit.org will show you the current confirmed agenda. +For speakers who were regretfully declined, you'll be able to register on November 1st. In the event we have a late speaker dropout - which happens - we may contact you about jumping in as a speaker after all, at which time we'll sort out the finances if you've paid for your registration, typically offering a full refund of your registration fee. +You'll notice that Summit has become a full 4-day event - we're unsure, at this point, if 3-day passes will be offered or not. We won't make that decision until February 2017, assuming any space remains by that point. So we hope you'll consider joining us for the full 4-day event, including new hands-on experiences on Sunday, a wider variety of deep-dive half-day sessions on Sunday, attendee-driven "Side Sessions" on Tuesday and Wednesday, and an amazing lineup for Monday. diff --git a/content/articles/2016/10/re-subscribe-to-new-forums-topic-notifications/index.md b/content/articles/2016/10/re-subscribe-to-new-forums-topic-notifications/index.md new file mode 100644 index 000000000..4dd949387 --- /dev/null +++ b/content/articles/2016/10/re-subscribe-to-new-forums-topic-notifications/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2016-10-20-re-subscribe-to-new-forums-topic-notifications/ +title: Re-Subscribe to New Forums Topic Notifications +authors: + - Don Jones +date: "2016-10-20T23:00:43+00:00" +categories: + - Announcements +aliases: + - /2016/10/re-subscribe-to-new-forums-topic-notifications/ +--- + +Hello, PowerShellers! +During our migration and some of the inevitable database resets involved, many of you who were receiving notifications for new forums topics no longer are. You'll need to re-subscribe. +To do so, simply visit the Forums page, click through to the forum(s) of your choice, and poke the "Subscribe" link that's towards the upper-left-ish of the page. If all you see is an "Unsubscribe" link, then you're already good to go. +Thanks again for everyone who routinely jumps in to offer friendly, helpful advice in the forums!!! diff --git a/content/articles/2016/11/_index.md b/content/articles/2016/11/_index.md new file mode 100644 index 000000000..b29e73417 --- /dev/null +++ b/content/articles/2016/11/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from November 2016" +description: "PowerShell.org Articles published in November 2016." +--- diff --git a/content/articles/2016/11/registration-is-now-open/index.md b/content/articles/2016/11/registration-is-now-open/index.md new file mode 100644 index 000000000..ed1432775 --- /dev/null +++ b/content/articles/2016/11/registration-is-now-open/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2016-11-01-registration-is-now-open/ +title: Registration is now open +authors: + - Richard Siddaway +date: "2016-11-01T11:30:36+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2016/11/registration-is-now-open/ +--- + +Registration for the 2017 PowerShell and DevOps Global Summit is now open.  Click on Summit and follow the links to register diff --git a/content/articles/2016/11/the-flavors-of-windows-containers/index.md b/content/articles/2016/11/the-flavors-of-windows-containers/index.md new file mode 100644 index 000000000..f129719e9 --- /dev/null +++ b/content/articles/2016/11/the-flavors-of-windows-containers/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2016-11-01-the-flavors-of-windows-containers/ +title: The Flavors of Windows Containers +authors: + - Don Jones +date: "2016-11-01T16:59:01+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/11/the-flavors-of-windows-containers/ +--- + +I had a wonderful conversation with some team members around Windows Containers generally, and they had some very cool analogies that I don't think have been publicized enough. There's some good technical detail, too, which I think is worth understanding as we move into this brave new world of containerization. + + + +First, let's just quickly review our oldest kind of "container," the virtual machine. I'm going to generalize a bit here, so that what I'm writing is true for any kind of VM. Essentially, a virtual machine is a very rigidly scoped process. The host computer, via software known as a hypervisor, emulates all of the services that a real, physical computer would provide. The hypervisor pretends to be a network card, a BIOS, a CPU, RAM, and so on. Upon that virtual hardware runs a normal off-the-shelf operating system, which in turn runs whatever software you want. Now, that description is true of an old-time virtualization situation. In reality, modern hypervisors take a variety of approaches to help improve the performance of that situation. For example, CPUs are rarely _emulated, _per se; instead, the hypervisor manages thread scheduling on the physical CPUs, and more or less exposes them directly to the VM. Kinda; I'm simplifying a bit. Hyper-V also uses _synthetic_ hardware versus _emulated_ hardware for many devices, which again reduces overhead and improves performance. +Now let's move on to containers, which - for the purposes of a simple explanation - can be a Linux container or a Windows Server container. Notice that I'm not using the word "Docker," here, because Docker is a container _management_ solution, really, and can manage both Linux containers and Windows containers. A container is not a virtual machine, in any way, shape, or form. There's no emulated or synthesized hardware. Instead, a container is just a normal application running as a normal process. In the operating system's process list, this application is essentially marked "this is a container." That special "marker" causes some bits of the operating system to behave a little differently. For example, when the application asks the OS to write to a file on disk, or (on Windows) to a registry key, the OS "intercepts" that call and instead writes the data to an area that belongs just to that application. Any read requests first check that private area, so the application gets the data it expects. Read requests that can't be fulfilled by the private area are directed back to the "main" file system (or registry, or whatever), so the application "believes" it is running all by itself on a full computer. The practical upshot of this is that the application can't change anything in the "common" OS, although the application doesn't realize that. Deleting the container removes everything the application has done. Honestly, this technique - in the form of read/write filters - has been around _forever. _Virtuozzo has been doing this in hosted environments for years, Windows Embedded had similar filtering functionality, and even Microsoft App-V works on largely similar principles. The difference with containers is that the filtering happens at the kernel level of the OS, so it's much more efficient and managed. +But it isn't foolproof. Containers do not represent an impenetrable barrier between processes, meaning it's possible for one application to access another's data, potentially hog processing resources, etc. So in cases where you're dealing with super-sensitive data (for example), containers might not be acceptable. +Thus, Microsoft's "Hyper-V Container," which sits somewhere between a full VM and a zero-VM container. Basically a Hyper-V Container _is_ a virtual machine, just like the Hyper-V VMs you know and love. The difference is that, when you ask Windows to spin up one of these containers, it inserts a trimmed-down version of the Windows OS and kernel. Many of the API calls within the container are handled instead by the host OS. The result is a "lighter" VM that imposes a bit less overhead, especially given Hyper-Vs use of synthesized hardware. But _data_ remains _within _the VM, imposing the rigid boundary around the VM that we're used to. One VM cannot access the contents of another (except via well-defined channels like file sharing or other port-based communications), and so you get a more managed security barrier. You also get faster spin-up time - not as fast as a "normal" container, but faster than a "normal" VM. +It's worth understanding all of these different execution models. None of them are always right or wrong; they're all tools in an increasingly varied tool belt, allowing us to right-size our execution environment to the task at hand. diff --git a/content/articles/2016/12/_index.md b/content/articles/2016/12/_index.md new file mode 100644 index 000000000..448b6e265 --- /dev/null +++ b/content/articles/2016/12/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from December 2016" +description: "PowerShell.org Articles published in December 2016." +--- diff --git a/content/articles/2016/12/powershell-gotchas/index.md b/content/articles/2016/12/powershell-gotchas/index.md new file mode 100644 index 000000000..73e961108 --- /dev/null +++ b/content/articles/2016/12/powershell-gotchas/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2016-12-05-powershell-gotchas/ +title: PowerShell Gotchas +authors: + - msorens +date: "2016-12-05T00:28:59+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks + - Tutorials +aliases: + - /2016/12/powershell-gotchas/ +--- + +You can certainly find a number of articles around that present PowerShell pitfalls that can easily trip you up if you are not careful. I took a different approach in my three-part series, _A Plethora of PowerShell Pitfalls_. +The first two parts are presented in quiz format, together covering the top 10 "gotchas". They will help you test your awareness to see if you even realized the danger and did not know you've been skirting those traps for awhile. After you've had an opportunity to consider the conundrums presented, I then go into detailed explanations for why they happen and how to fix them. +The third and final part is a compendium of all the common "gotchas" that I put together after reviewing all the other lists out there. The more than 35 entries in the list cover, I believe, a good 98% of the issues you would likely encounter. Yes, there are more esoteric pitfalls as well, but I ran out of web page... 🙂 +Part 1: [Pesky Parameter Problems][1] +Part 2: [A Portion of Potential Puzzles][2] +Part 3: [The Compendium][3] + + + [1]: https://www.simple-talk.com/sysadmin/powershell/a-plethora-of-powershell-pitfalls/ + [2]: https://www.simple-talk.com/sysadmin/powershell/a-plethora-of-powershell-pitfalls-part-2/ + [3]: https://www.simple-talk.com/sysadmin/powershell/the-poster-of-the-plethora-of-powershell-pitfalls/ diff --git a/content/articles/2016/12/the-key-to-understanding-powershell-on-windows-or-linux/index.md b/content/articles/2016/12/the-key-to-understanding-powershell-on-windows-or-linux/index.md new file mode 100644 index 000000000..89865a0b1 --- /dev/null +++ b/content/articles/2016/12/the-key-to-understanding-powershell-on-windows-or-linux/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2016-12-15-the-key-to-understanding-powershell-on-windows-or-linux/ +title: The Key to Understanding PowerShell – on Windows or Linux +authors: + - Don Jones +date: "2016-12-15T15:22:12+00:00" +categories: + - PowerShell for Admins +aliases: + - /2016/12/the-key-to-understanding-powershell-on-windows-or-linux/ +--- + +I've listened to a few of my Windows-friendly compatriots attempting to explain PowerShell to their Linux colleagues, and it hasn't always gone well. The problem, I think, is that a lot of Windows folks don't actually know why PowerShell exists in the first place. Let me explain. + + + +PowerShell _does not exist to automate administrative tasks. _Re-read that a few times until it really sinks in. You see, you start going at the Linux guys with this "automation" argument, and they're all like, "yeah, man, we've had that for always." The existence of PowerShell on Linux makes no sense if the point of PowerShell is simply automation. In fact, PowerShell _as an automation mechanism_ also _makes no sense on Windows. _Keep in mind that all PowerShell does is built on WMI/CIM and .NET Framework; there was nothing stopping you from using those things in the first place. You didn't _need_ PowerShell. +The point of PowerShell is that .NET Framework is a terrible surface for systems administrators. Getting anything done correctly in .NET requires you to _write an application_ of some size, compile it, and run it. .NET wasn't designed with ad-hoc, system-level "scripting" in mind; it's an application development framework. An empty .NET project starts with dozens of lines of code and configuration; that's the bare minimum to even start writing code. For admins, it's too much. Heck, it's sometimes too much for _developers, _which is why some of them like PowerShell as a ".NET immediate window" so much - they can just bang out a one-liner, hit Enter, and get results. +I'll argue that all operating systems rely on APIs for command-and-control. If you want to tell Windows to shut down, you need an API to do it. In modern times, that API comes via WMI/CIM or .NET, for the most part. In Linux, if you want to configure Apache to listen to a different port, you need an API. That API comes in the form of a text file. I'll also argue that, from a systems administration perspective, all APIs suck. In Windows, you're forced to learn this vast and complex .NET Framework, which is only marginally consistent within itself, and which requires a (relative) ton of code to make do anything. In Linux, you're forced to learn regular expressions and text parsing, along with a bunch of poorly-interconnected command-line tools that have improbable names invented by Dungeons & Dragons geeks in the 1960s and 1970s. "Grep," as an API for systems administration, was never a good idea - it's just what got the job done when your main configuration surface was a bunch of text files. +The _**entire point of PowerShell**_ is nothing more, nor less, than to wrap a more-consistent, _administrator-friendly_ API around those other sucky APIs. PowerShell is an abstraction layer, and that's it. Do you know how to conquer up a ServiceController reference in .NET, and ask it to restart a surface? Me neither, nor do I care to learn - I'll just run Restart-Service, which does all that under the hood. Do you know how to pull a daemon list on Linux, retrieve just the httpd daemon, and restart it? You might, but I don't, and I don't care to learn that either - I'll run Restart-Daemon (which will exist someday, I swear it). +On Windows, PowerShell doesn't replace .NET. We all know that. It makes .NET easier for an admin to use in the context of administration. On Linux, PowerShell doesn't replace grepsedawk and all the text files - it simply makes them easier, and more consistent, to use for administration. The point of PowerShell is that it allows us to deal in deterministic data structures (objects) without having to be text-parsing experts. It wraps poorly designed underlying APIs into something with a consistent, admin-focused surface. That's it. +PowerShell does not posit that, on Linux, grepsedawk is a bad idea. PowerShell simply suggests that those tools, and their friends, are a lot harder to learn and use than they should be. PowerShell's value-add is not automation - you can do that without PowerShell. PowerShell's value-add is _better productivity as you automate, _and that's something anyone should be able to wrap their minds around. diff --git a/content/articles/2016/12/update-tug-the-open-source-dsc-pull-server/index.md b/content/articles/2016/12/update-tug-the-open-source-dsc-pull-server/index.md new file mode 100644 index 000000000..8aedc4289 --- /dev/null +++ b/content/articles/2016/12/update-tug-the-open-source-dsc-pull-server/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2016-12-19-update-tug-the-open-source-dsc-pull-server/ +title: "UPDATE / Tug: The Open-Source DSC Pull Server" +authors: + - Don Jones +date: "2016-12-19T17:25:49+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +aliases: + - /2016/12/update-tug-the-open-source-dsc-pull-server/ +--- + +If you haven't taken a look at [Tug][1], now's a great time. Eugene Bekker has been doing a ton of heavy lifting, taking my .NET Core proof-of-concept code and turning it into a formal ASP.NET MVC project. + + + +Tug is nominally cross-platform. Basically, it's n ASP.NET Core application that can run under any Web server that supports ASP.NET Core, which includes Windows, Windows Nano Server, and even Linux. Tug knows the DSC protocol, so it receives requests from Local Configuration Managers (LCMs) on DSC target nodes. +Tug has no "brains" to deal with those request, though. Instead, it implements a provider layer, and calls upon a provider to deal with requests. A very simple provider is currently implemented, which runs PowerShell commands in response to LCM requests. So, short story, if you can write a PowerShell advance function, you can make your pull server behave in whatever way you want. Store data in SQL Server, if you like, for example. +Because of some hitches in .NET Core 1.0, that run-PowerShell-commands trick doesn't work well. so to do that you really have to target full .NET, which limits you to running Pull server on Windows Server or Windows Server Core. That should be fine for most folks. +But you can also write Tug providers in full .NET - meaning you can use (say) EF Framework to manipulate target node data. +Presently, Tug doesn't implement the Report Server functionality - it's stubbed out, and that's coming next. And if you're thinking, "will Tug be able to __\__," the answer is, "yes - if you write a provider layer that lets it do ____, which can include writing PowerShell commands (functions) that do ____." Tug isn't intended to lock you into one operational mode. Do you want to store client data in SQL Server, and assemble MOFs on-the-fly? You can program Tug to do that. Do you want to store everything in XML files? You an program Tug to do that. Want to use client certificate authentication for nodes? You can program Tug to do that. Because everyone wants something a little different from their Pull server, Tug's designed to let you code up whatever model you prefer. +Tug's an open-source project on GitHub, licensed under MIT, which means you can use it for whatever you want. We've got a [brainstorming document][2] with ideas, and if you'd like to contribute, that's a place to start. **And please, contribute. **If you can't, but you follow someone in the community who might be able to, please draw their attention to the project. + + [1]: https://github.com/powershellorg/tug + [2]: https://github.com/PowerShellOrg/tug/blob/master/TODO.md diff --git a/content/articles/2016/_index.md b/content/articles/2016/_index.md new file mode 100644 index 000000000..3e1bd97c6 --- /dev/null +++ b/content/articles/2016/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from 2016" +description: "PowerShell.org Articles published in 2016." +--- diff --git a/content/articles/2017-01-06-pester-parameters-and-hashtable-fun.md b/content/articles/2017-01-06-pester-parameters-and-hashtable-fun.md deleted file mode 100644 index 475434e7f..000000000 --- a/content/articles/2017-01-06-pester-parameters-and-hashtable-fun.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Pester – Parameters and Hashtable Fun! -authors: - - WeiYen Tan -date: "2017-01-06T07:45:36+00:00" -categories: - - PowerShell for Admins - - Training - - Tutorials -aliases: - - /2017/01/pester-parameters-and-hashtable-fun/ ---- - -I have written a short excerpt on how to pass parameters from an object to a Pester test. I have turned this into a function: Invoke-POVTest. -The function is primarily for operational validation tests, where you might have a single operational test but you need to test multiple cases. (Sorry, I am not quite sure if I described it properly). -I'll be interested in any feedback. - -Link to blog post [here][1]. - - - [1]: https://weiyentanitjournal.com/index.php/2017/01/04/pester-parameters-and-hashtable-fun/ diff --git a/content/articles/2017-01-13-devops-a-career-changer.md b/content/articles/2017-01-13-devops-a-career-changer.md deleted file mode 100644 index cb65fea0b..000000000 --- a/content/articles/2017-01-13-devops-a-career-changer.md +++ /dev/null @@ -1,446 +0,0 @@ ---- -title: "DevOps: A Career Changer" -authors: - - Missy Januszko -date: "2017-01-13T16:02:18+00:00" -categories: - - PowerShell for Admins -aliases: - - /2017/01/devops-a-career-changer/ ---- - -Once upon a time, there was this woman at a TechMentor conference a few years ago, sitting in the front of the room during the “Don and Jason" show, a not-quite-scripted discussion on various “lightning” topics. - - - -The topic at that moment was DevOps, and this woman was asking for advice on being an advocate for DevOps in her company. - - - -Her company had just been acquired, she explained, which meant that the atmosphere was ripe for change, but the culture of the company they had been acquired from was very change-resistant. - - - -Among other questions, she wanted to know the secrets of getting Dev and Ops to not only work together, but get along. - - - -And after a short discussion it was pointed out that “if you feel you can’t affect change on your company, perhaps you should 'change your company'”. - - - -To which she responded, “That will never happen.” - - - -After all, she had been at the same company for nearly 20 years. - - - -The company had been acquired twice, but really, she had been in the same place for nearly half her life. - - - - - - -Yes, that woman is me, and this is the story of how “that will never happen” changed into “happened”. - - - - -I returned to TechMentor in 2016. - - - -I had spent some time in the Desired State Configuration (DSC) classes the previous year, and was astounded by DSC and its capabilities, but I hadn’t done anything with it since taking the classes at the previous conference. - - - -So, once again I sat in the DSC classes and tried to absorb as much material as possible. - - - -The content was different – WMF 5.0 had recently been released, the pull server demo was brand-new, and I began to wonder what I could really do with DSC if I really put some effort into it. - - - -After all, I had some servers that were in need of a technical refresh that year and wondered if it would be possible to use DSC to configure them – both from a technical and a political point of view. - - - - - - -After returning from TechMentor, within a month, I saw a posting for DevOps Camp. - - - - - -“Experts Only”, the brochure read. - - - -I wondered if I could “ramp up” my skills in 4 months enough to attend and not be a lost camper. - - - -I discussed it with a friend who is also a former colleague and fellow PowerShell enthusiast. - - - -“But we’re not experts,” he reminded me. - - - -And I put out the ultimate challenge – “Every year we talk about going to PowerShell Summit, and every year we say the same thing. - - - -‘But we’re not experts!’ - - - -Well, if not now, when? - - - -And how do we get there?” - - - -The gauntlet was thrown, and we went about the daunting task of learning DSC in 4 months. - - - - -I had a full-time job, so I started working on DSC at night. - - - -I watched the MVA videos on the weekends, 1-2 chapters a weekend, and spent the week making up my own labs to go along with whatever chapter of the MVA I was on. - - - -I tried my best to come up with experiments that would not only prove to myself that I understood the material, but that would be useful in my day job. - - - -My friend and I met once a week at a local Starbucks to discuss what we had learned that week, and what stumbling blocks we had come across. - - - - - - -Shortly after, I made the case to research DSC not just for my own learning, but for work use. - - - -I was permitted to work on it during work hours. - - - -I learned, and I stumbled. - - - -I made mistakes and I shed blood. - - - -I picked experiments that were supposed to be code snippets that I could use in “real server configurations” and quickly learned many lessons. - - - -Like how installing WMF 5.0 via DSC is probably the worst first attempt at creating a config. - - - -Or how turning off TLS 1.0 is the worst second attempt, thanks to the fact that the pull server at the time required it to be on. - - - -I went a few rounds with the certificate authority trying to set up a certificate template for encrypting and decrypting credentials in MOF files. - - - -For a long time, the certificate authority won, until finally, at last, I figured out the missing element in the template with the help of newly-updated MSDN documentation. - - - -I did battle with an environmental issue that made my LCM “uncooperative”, and for the record, I lost that battle and the root cause still remains a mystery, though it was likely a combination of certificate revocation policies and ever-changing proxy configurations. - - - -But despite my struggles, I learned valuable lessons from each and every one of them. - - - - - - -I spent two months working on mastering the concepts from the two MVA videos, and due to the environmental issues in the development environment, the second two months building out an “automated” lab that could be built on my laptop – a Dell XPS 13 with 8GB of RAM and 80GB or less of free hard drive space. - - - -I borrowed a USB drive for the server images, and built out a lab with an authoring box, a single DC/Certificate authority, and a pull server, the intent of which was to give me a pristine place to develop configs without getting bogged down in whatever issues I was encountering in the dev environment. - - - - -Then I went to DevOps Camp. - - - -And from my perspective, it was a big success. - - - -I wasn’t lost. - - - -I could follow along with the sessions, and I had a great time learning about the release pipeline and other tools and concepts that would take my DevOps skills and automation to the next level. - - - -Some of my code even got shown during the camp, specifically, in the session on building an automated lab, the config for the DC that I built for my laptop lab was used in the demo. - - - -I returned from DevOps camp full of information and also maybe a little overwhelmed with the things I wanted to try and play with when I returned. - - - -I almost didn’t quite know what to do next. - - - - - - - - -I changed focus a little bit after that. - - - -I wanted to start socializing PowerShell and DSC more. - - - -I wanted to converse with people who were using it in production environments. - - - -I started getting involved in the PowerShell community – writing an occasional blog, meeting members of the PowerShell community and PowerShell team at Ignite, joining some Slack channel discussions, and submitting a few topics for the PowerShell Summit. - - - -And as I was doing these things, I started wondering if I was in the wrong place. - - - -My primary responsibility was infrastructure, specifically Active Directory, and while my newfound passion for DevOps was well-received at work, it felt out of place with my “day job”. - - - - -And then, one day in mid-October, an opportunity presented itself. - - - -It was one that would require me to think, to reflect, and most of all, move out of that comfort zone that 18 months ago I was so adamant that I would never leave. - - - -If I were to act on this opportunity, it would require me to leave my company of 20+ years. - - - -But was I ready? - - - -Would what kept me there all those years continue to keep me there? - - - - -I began to seek out advice. - - - -I spoke to family, friends, colleagues, mentors, and my financial planner. - - - -Most were encouraging, some thought I was nuts. - - - -Sometimes even I thought I was nuts. - - - -Leave my comfort zone? - - - -Leave the people that I had cultivated friendships with inside and outside work? - - - -My former and present co-workers always said that the thing that keeps them there is the people that they work with, and that’s no lie. - - - - - - -The financial planner didn’t think I was nuts, and helped come up with a plan. - - - -I listened intently to any and all advice given by all, but ultimately the decision was mine, and I had to figure out if I had the guts to move on. - - - -Only 18 months ago, I was stating with authority to Don Jones that “That will never happen.” - - - -But yet, now this thing that started out as just wanting to learn more about DSC and DevOps had grown from a spark into a fire. - - - -And the opportunity to change myself and my career was presenting itself on a silver platter. - - - - - - -I made the decision to accept the opportunity – and that’s exactly what it was – an opportunity that I couldn’t pass up. - - - -I doubt that I would have made the same decision had I not spent the last year working on improving my skill set. - - - -My life is about to change in ways I never would have dreamed possible a year ago. - - - -I’m scared shitless of the future, but I’m also eagerly anticipating the next chapter. - - - -I’m excited about all the things that I could possibly do. - - - -I’m jumping off the ledge into the abyss, and hoping for a soft landing. - - - - -My last day is looming as I write this, and I’m filled with constantly-changing emotions. - - - -Saying good-bye to people I have known nearly half my life is HARD. - - - -On those days, I’m sad, after all, they are what has kept me here and sane all these years. - - - -The good part is that I’m not technically going anywhere, so I can see my friends any time I want, just not within the confines of the corporate walls. - - - -The opportunity to keep in touch and socialize is still there. - - - - -But the remainder of the time I’m excited – excited to try something new. - - - -I’ve finally decided to say out loud that I am going to go independent. - - - -It’s risky – I’m relatively unknown, but I have some exciting things to work on, like working on the DSC book and speaking at PowerShell Summit. - - - -I have a backlog of articles to read and videos to watch and will be grateful for the flexibility in my time to do all these things. - - - -I’m nervous about the future but my confidence in my abilities has grown so much over the last year. - - - - -I’m worried about the financial aspects of my decision. - - - -This is probably first and foremost in my mind, but luckily, I have a cushion that makes the risk of making the decision to go independent somewhat less. - - - -It still concerns me, though. - - - -It’s odd not to have to count working hours, or justify or categorize what I spent my time on that day. - - - -If I want to spend two hours writing this article – I can. - - - -I will probably spend the next year just figuring out how to get into a daily routine and making sure that the things on my to-do list get done. - - - - - - -Writing down how I got here has been an interesting trip down memory lane. - - - -I wish I had started writing down my journey when it started, but I recall that it started out with a desire to learn and a challenge to learn for my own personal knowledge. - - - -As I went along, I realized that to be happy and challenged and really expand my knowledge, capabilities, and skills, that it was time to move on. - - - - - - -I leave you with a quote, one that I saw while out Christmas shopping, that rang true for me. - - - - - - -“Do not be afraid of change. - - - -Be afraid of not changing.” diff --git a/content/articles/2017-01-24-community-lightning-demos.md b/content/articles/2017-01-24-community-lightning-demos.md deleted file mode 100644 index e0a86d2d1..000000000 --- a/content/articles/2017-01-24-community-lightning-demos.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Community Lightning Demos -authors: - - Richard Siddaway -date: "2017-01-24T21:07:51+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2017/01/community-lightning-demos/ ---- - -We are continually evolving the content we present at the PowerShell Summit. This year we're bringing back something that was a feature of the early PowerShell Deep Dives and Summits - the Community Lightning Demos. We have a session set aside on Wednesday afternoon for this. Timescales will depend on the number of people wanting to show something. -In the words of PowerShell MVP Warren Frame who's organising this for us: - -> Ever wanted to present at Summit but were unsure if you could? This is your opportunity to present something you've discovered to your peers in the PowerShell community. A code trick, or tip, a new module you've created, an open source module or a feature of a cmdlet that's relatively unknown.. The list goes on and on. Anything PowerShell, or DevOps related that you think is cool and that will interest other people is a suitable topic. We're looking for 5-10 minute demos. Something you've done, discovered, solved or run up against. This is your opportunity to "give back" to our community by sharing your knowledge. Make sure its something you can present from your laptop and that you don't need extensive Internet access. A sign up sheet will be available Sunday, Monday and Tuesday. We just need your name and topic. Who knows you may be asked to present a full session at the following Summit. Some of our best speakers started in the Lightning Demos sessions of past events. - -This is your opportunity to start presenting to a knowledgeable and appreciative audience. In past events we've had some amazing things come to light - things the PowerShell team didn't realise about PowerShell. If you have something to share please consider signing up for this. diff --git a/content/articles/2017-01-28-summit-2017-seats-going-fast.md b/content/articles/2017-01-28-summit-2017-seats-going-fast.md deleted file mode 100644 index e9c731924..000000000 --- a/content/articles/2017-01-28-summit-2017-seats-going-fast.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Summit 2017–seats going fast -authors: - - Richard Siddaway -date: "2017-01-28T20:19:21+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2017/01/summit-2017-seats-going-fast/ ---- - -Seats a the PowerShell Summit -  [https://eventloom.com/event/home/summit2017][1] – are going fast. -We’ve sold over 70% of the seats – they’re current 55 seats left split between 4-day and 3-day passes. The 3-day passes don’t go on sale until 12 February and we’ll be moving 3-day to 4-day as sales happen between now and then. We have a number of sales in the pipeline that will reduce the number of available seats as well. -We are at maximum capacity for the venue – and probably for the event in its present format. -We are expecting a rapid sell off of the remaining seats when open registration of 3-day passes. We don’t maintain any sort of waiting list and when the seats are gone – they’re gone. -If you are thinking of attending the 2017 Summit I’d advise you to get your seat booked quickly – I wouldn’t be at all surprised if we’d sold out by the end of February. - - [1]: https://eventloom.com/event/home/summit2017 "https://eventloom.com/event/home/summit2017" diff --git a/content/articles/2017-02-01-summit-2017-badge-question.md b/content/articles/2017-02-01-summit-2017-badge-question.md deleted file mode 100644 index 17c8b613f..000000000 --- a/content/articles/2017-02-01-summit-2017-badge-question.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Summit 2017 – Badge Question -authors: - - Don Jones -date: "2017-02-01T15:16:52+00:00" -categories: - - PowerShell Summit -aliases: - - /2017/02/summit-2017-badge-question/ ---- - -We're brainstorming ideas to have more professional, collectible attendee badges for Summit, while also reducing time at check-in on-site. If you're attending or have thought about it, please take a moment to answer [this one-question survey][1]. Thanks! - - [1]: http://674004.polldaddy.com/s/powershell-summit-badges diff --git a/content/articles/2017-02-08-summit-2017-agenda-program-guide-online.md b/content/articles/2017-02-08-summit-2017-agenda-program-guide-online.md deleted file mode 100644 index b77546c1c..000000000 --- a/content/articles/2017-02-08-summit-2017-agenda-program-guide-online.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Summit 2017 Agenda & Program Guide Online -authors: - - Don Jones -date: "2017-02-08T19:09:20+00:00" -categories: - - PowerShell Summit -aliases: - - /2017/02/summit-2017-agenda-program-guide-online/ ---- - -We've posted the first draft of the Program Guide, including the Agenda, for PowerShell + DevOps Global Summit 2017. You'll find it linked near the top of the [Registration Page][1]. If you're attending Summit, please check back a few days before the event to download the final version. We'll have some hardcopies on site, but you'll want to have the PDF downloaded to your pocket computer for easy reference. -The Guide includes a bunch of tips and information beyond the Agenda, so we heartily recommend that everyone take the time to peruse its 12 pages of goodness. - - [1]: https://eventloom.com/event/home/summit2017 diff --git a/content/articles/2017-02-09-powershell-summit-2017-sold-out.md b/content/articles/2017-02-09-powershell-summit-2017-sold-out.md deleted file mode 100644 index 06370b3a7..000000000 --- a/content/articles/2017-02-09-powershell-summit-2017-sold-out.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: PowerShell Summit 2017 – sold out -authors: - - Richard Siddaway -date: "2017-02-09T11:41:03+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2017/02/powershell-summit-2017-sold-out/ ---- - -We sold the last seat for the 2017 Summit - https://eventloom.com/event/home/summit2017 yesterday. -If, and its a very big if, more seats become available we'll notify you though the event web site and here on powershell.org diff --git a/content/articles/2017-02-09-you-an-still-get-into-powershell-devops-global-summit-2017.md b/content/articles/2017-02-09-you-an-still-get-into-powershell-devops-global-summit-2017.md deleted file mode 100644 index 46ba1e074..000000000 --- a/content/articles/2017-02-09-you-an-still-get-into-powershell-devops-global-summit-2017.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: You an still get into PowerShell + DevOps Global Summit 2017! -authors: - - Don Jones -date: "2017-02-09T16:04:56+00:00" -categories: - - PowerShell Summit -aliases: - - /2017/02/you-an-still-get-into-powershell-devops-global-summit-2017/ ---- - -After selling out in record time, we've worked with our event venue to rearrange how we're using the space - and, as a result, we've been able to open additional seats for attendees! YAY! Hop on over to the [registration website][1] soon, because these puppies won't last. - - [1]: https://eventloom.com/event/home/summit2017 diff --git a/content/articles/2017-02-16-join-us-in-thanking-ed-teresa-wilson-at-summit-2017.md b/content/articles/2017-02-16-join-us-in-thanking-ed-teresa-wilson-at-summit-2017.md deleted file mode 100644 index 55ad5ac21..000000000 --- a/content/articles/2017-02-16-join-us-in-thanking-ed-teresa-wilson-at-summit-2017.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Join Us in Thanking Ed & Teresa Wilson at Summit 2017 -authors: - - Don Jones -date: "2017-02-16T18:35:52+00:00" -categories: - - PowerShell Summit -aliases: - - /2017/02/join-us-in-thanking-ed-teresa-wilson-at-summit-2017/ ---- - -We're pleased and proud to announce that Microsoft's "The Scripting Guy," Ed Wilson, and the wonderful Scripting Wife, Teresa Wilson, have agreed to join us at PowerShell + DevOps Global Summit 2017 (which as of this writing is almost sold out). They recently announced their retirement, so we wanted to bring them out for one last Summit so we could all wish them a comfortable and relaxed time! This'll likely be one of our last chances to grab a photo and a hug, so be sure to do so! diff --git a/content/articles/2017-02-23-three-seats-left.md b/content/articles/2017-02-23-three-seats-left.md deleted file mode 100644 index 9e6b48003..000000000 --- a/content/articles/2017-02-23-three-seats-left.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Three seats left -authors: - - Richard Siddaway -date: "2017-02-23T10:28:44+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2017/02/three-seats-left/ ---- - -There are currently three (3) seats left for the 2017 PowerShell and DevOps Summit. First come first served - when they gone that's definitely it as we're at capacity. Registration at - https://eventloom.com/event/home/summit2017 diff --git a/content/articles/2017-03-22-community-lightning-demos-call-for-proposals.md b/content/articles/2017-03-22-community-lightning-demos-call-for-proposals.md deleted file mode 100644 index 074e39cae..000000000 --- a/content/articles/2017-03-22-community-lightning-demos-call-for-proposals.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Community Lightning Demos – Call for Proposals -authors: - - pscookiemonster -date: "2017-03-22T15:06:45+00:00" -categories: - - PowerShell Summit -aliases: - - /2017/03/community-lightning-demos-call-for-proposals/ ---- - -If you've been to a PowerShell Summit, chances are you've seen the awesome lightning demos put on by the PowerShell team members. It's a fun format - each team member gives a quick 5-10 minute demo of something they're working on, one after the other. -In a few weeks, the PowerShell + Devops Global Summit will kick off, with a Community Lightning Demo session scheduled for Wednesday afternoon. We're looking for community members like you to sign up and present! Demo something cool that you've written or used - a module, function, tip, trick, etc. - just keep it under 10 minutes. -If it helps, [here's a longer bit](http://ramblingcookiemonster.github.io/Summit-Lightning-Demos/) on the community lightning demos, including an [example demo recording](https://youtu.be/50Z6vEHVgDg). -Sound interesting? Want to jump on stage for a few minutes and show us something fun? [Sign up now](https://goo.gl/forms/Q8C3hBXTANL9oR433)! Not attending the summit? We'll have recordings for presenters who want to be recorded, and ideally, demo content from everyone. -We'll be looking forward to some awesome demos; hope to see you there! diff --git a/content/articles/2017-03-27-powershell-summit-2017-last-minute-updates.md b/content/articles/2017-03-27-powershell-summit-2017-last-minute-updates.md deleted file mode 100644 index 5df8dbdd6..000000000 --- a/content/articles/2017-03-27-powershell-summit-2017-last-minute-updates.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: PowerShell Summit 2017 – Last-Minute Updates -authors: - - Don Jones -date: "2017-03-27T15:50:16+00:00" -categories: - - PowerShell Summit -aliases: - - /2017/03/powershell-summit-2017-last-minute-updates/ ---- - -Some quick updates as we prepare for Summit in a couple of weeks... - - - * Be sure to keep an eye on the [Summit Forums][1], where you're welcome to ask questions and offer advice. Folks who find themselves unable to attend last-minute often post registration transfer offers there as well. - * Watch the [Summit News Feed][2] for announcements and late-breaking news. We will also have morning announcements at 8:30am in the breakfast rooms on Sunday, Tuesday, and Wednesday - don't miss those, as we have few other ways to communicate late-breaking changes to you. - * When you arrive on-site, [grab the latest Agenda PDF][3] for your mobile device. We've had some last-minute schedule changes that will be reflected therein, and we'll add what we know about scheduled Side Sessions and so forth. We will have printed agendas on site, but due to printing lead times, they'll have one or two out-of-date pieces of info. We are endeavoring to keep that site's electronic schedule updated, as well, so it's also a good place to check. - * Make sure you get on the Alumni mailing list - look for information on-site. - -Because folks keep asking, **yes**, we do record all **breakout sessions,** barring any technical difficulties, and post the recordings on our YouTube channel. We do not live-stream, nor do we record general sessions, side sessions, or other non-breakout content. That's why you wanna be there on-site - and http://PowerShellSummit.org has already been updated with preliminary information for our 2018 event. - - [1]: https://powershell.org/forums/forum/powershell-summit/ - [2]: http://bit.ly/PSHSummitNews - [3]: https://eventloom.com/event/home/summit2017 diff --git a/content/articles/2017-04-01-submit-questions-for-ask-me-anything-with-jeffrey-snover.md b/content/articles/2017-04-01-submit-questions-for-ask-me-anything-with-jeffrey-snover.md deleted file mode 100644 index 14bd50bcd..000000000 --- a/content/articles/2017-04-01-submit-questions-for-ask-me-anything-with-jeffrey-snover.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Submit Questions for \"Ask Me Anything\" with Jeffrey Snover" -authors: - - Don Jones -date: "2017-04-01T11:47:45+00:00" -categories: - - PowerShell Summit -aliases: - - /2017/04/submit-questions-for-ask-me-anything-with-jeffrey-snover/ ---- - -In just a week, we'll be holding a live "Ask Me Anything" with Jeffrey Snover at PowerShell + DevOps Global Summit 2017. Now's a great time to Help us queue up questions - drop yours in the comments below! -We'll be doing our level best to record the session, although it will not be live-streamed. We'll post the recording and let everyone know where it is a week or so after the event. -**UPDATE: **We're no longer taking new questions. Thanks to everyone who submitted, and we'll see you at Summit (where we'll be taking more questions live). diff --git a/content/articles/2017-04-05-final-agenda.md b/content/articles/2017-04-05-final-agenda.md deleted file mode 100644 index 035e3069f..000000000 --- a/content/articles/2017-04-05-final-agenda.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Final agenda -authors: - - Richard Siddaway -date: "2017-04-05T10:14:34+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2017/04/final-agenda/ ---- - -We've had to move a few sessions around for various reasons. -The online agenda at shows the current final agenda. -Please check the agenda carefully to ensure you don't miss any sessions diff --git a/content/articles/2017-04-06-do-anything-in-one-line-of-powershell.md b/content/articles/2017-04-06-do-anything-in-one-line-of-powershell.md deleted file mode 100644 index b2737a7b7..000000000 --- a/content/articles/2017-04-06-do-anything-in-one-line-of-powershell.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Do Anything in One Line of PowerShell -authors: - - msorens -date: "2017-04-06T21:30:23+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks - - Tools -aliases: - - /2017/04/do-anything-in-one-line-of-powershell/ ---- - -PowerShell provides a tremendous boon to productivity for computer professionals of all types. But, you have to admit: it can be a bit daunting to get up to speed! Indeed, as someone who has a fair amount of experience using it, I still find myself having to look up how to do things--frequently. So I started keeping track of the recipes I was using the most. And came up with a list of 400 or so, published in 4 parts. - - * [Part 1: Help, Syntax, Display and Files][1] - * [Part 2: Variables, Parameters, Properties, and Objects][2] - * [Part 3: Collections, Hashtables, Arrays and Strings][3] - * [Part 4: Accessing, Handling and Writing Data][4] - -Though I actually wrote these a couple years back they are certainly still relevant today, just covering a bit less of the ever-expanding PowerShell universe of discourse! -(Note that at the end of each web article listed above is a link to download it as a PDF that is more tidily formatted.) - - [1]: http://www.simple-talk.com/sysadmin/powershell/powershell-one-liners-help,-syntax,-display-and--files/ - [2]: http://www.simple-talk.com/sysadmin/powershell/powershell-one-liners-variables,-parameters,-properties,-and-objects/ - [3]: http://www.simple-talk.com/sysadmin/powershell/powershell-one-liners--collections,-hashtables,-arrays-and-strings/ - [4]: http://www.simple-talk.com/sysadmin/powershell/powershell-one-liners--accessing,-handling-and-writing-data-/ diff --git a/content/articles/2017-04-13-post-summit-note.md b/content/articles/2017-04-13-post-summit-note.md deleted file mode 100644 index e3aba3faf..000000000 --- a/content/articles/2017-04-13-post-summit-note.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Post-Summit Note -authors: - - Don Jones -date: "2017-04-13T21:30:54+00:00" -categories: - - PowerShell Summit -aliases: - - /2017/04/post-summit-note/ ---- - -A quick note: We experienced some massive equipment failures this year, almost to the point where we were starting to seriously question our life choices. The end result is that we don't have as many session recordings as we'd hoped. Jason will be going through what we _do_ have over the next week, splicing together what we can, and posting it to the YouTube channel. We appreciate everyone's patience and understanding. diff --git a/content/articles/2017-04-14-powershell-saturday-booster-program.md b/content/articles/2017-04-14-powershell-saturday-booster-program.md deleted file mode 100644 index 3df3a1bfa..000000000 --- a/content/articles/2017-04-14-powershell-saturday-booster-program.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: PowerShell Saturday Booster Program -authors: - - Don Jones -date: "2017-04-14T16:23:29+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2017/04/powershell-saturday-booster-program/ ---- - -As announced at PowerShell + DevOps Global Summit 2017, we're preparing a "PowerShell Saturday Booster Program" to help launch and support local one-day events. Please visit  to take a look at our draft materials, and use GitHub's "Issues" feature to submit questions, suggestions for additional content, requests for clarification, and so on. We'll continue to build this out, but want to make sure we're doing so in a way that makes sense to the community. Thanks for your input! Our goal is to have this up and running by the end of June, 2017. diff --git a/content/articles/2017-04-17-serve-on-the-board-of-powershell-org.md b/content/articles/2017-04-17-serve-on-the-board-of-powershell-org.md deleted file mode 100644 index db34ffa2c..000000000 --- a/content/articles/2017-04-17-serve-on-the-board-of-powershell-org.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Serve on the Board of PowerShell.org! -authors: - - Don Jones -date: "2017-04-17T13:59:56+00:00" -categories: - - Announcements -aliases: - - /2017/04/serve-on-the-board-of-powershell-org/ ---- - -The DevOps Collective (the nonprofit that owns PowerShell.org) is organized into two main governing bodies. Our Directors - myself, Christopher Gannon, Jason Helmick, Jeffery Hicks, Richard Siddaway, and Will Anderson - run the organization on a day-to-day. On Board, which we're now forming, consists of stakeholders who help advise us on directions, priorities, and so on. We want our Board to be diverse, and include representation from industry as well as community. This is a fairly convention nonprofit governance setup; you'll find, for example, many Chambers of Commerce organized this way. -"Community" has been the bit we've struggled with, and so we've decided to simply put it _to_ the community to help come up with an answer. We'd like two "at-large" seats, filled by community members on a rotating (annual) basis. The responsibilities are not huge: mainly, we'll have a virtual meeting once or twice a year to cover our current activities and discuss priorities. On an ongoing basis, the Board is also a way for outside concerns to have a voice within the organization. -For our community seats, we want people who are actively _engaged_ with the community on a daily basis. We want to know what's happening out there with the people who actually use PowerShell, and who are participating in DevOps. We want to be aware of what's going on in the OSS world, and where we, as an organization, might be able to assist. -So if that's you, reach out to me. Drop an email to DonJ (and the domain is listed right in the address bar of your browser right now). If you know of someone, please reach out to _them_ and have them send me an email. I'd like to know a bit about you, how you're present in the community on an ongoing basis, and some ideas you have for what The DevOps Collective should be focusing its time and funding on (especially educationally, as that's our main mission). -I look forward to hearing from you! diff --git a/content/articles/2017-04-21-colecting-certificates-form-an-enterprise-ca-for-use-with-dsc.md b/content/articles/2017-04-21-colecting-certificates-form-an-enterprise-ca-for-use-with-dsc.md deleted file mode 100644 index d2f0a98db..000000000 --- a/content/articles/2017-04-21-colecting-certificates-form-an-enterprise-ca-for-use-with-dsc.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Colecting Certificates form an Enterprise CA for use with DSC -authors: - - David Jones -date: "2017-04-21T16:29:24+00:00" -categories: - - DevOps - - PowerShell for Admins - - Tools -aliases: - - /2017/04/colecting-certificates-form-an-enterprise-ca-for-use-with-dsc/ ---- - -In a domain environment auto enrollment can be used to get create unique certificates for each node that can be used with DSC.  The problem is getting the public cert to the machine that creates the DSC MOF files. I wrote a module last year to collect them directly form the Enterprise CA. If it interests you take a look  diff --git a/content/articles/2017-04-21-powershell-and-devops-global-summit-recap.md b/content/articles/2017-04-21-powershell-and-devops-global-summit-recap.md deleted file mode 100644 index 1c7df9910..000000000 --- a/content/articles/2017-04-21-powershell-and-devops-global-summit-recap.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: PowerShell and DevOps Global Summit Recap -authors: - - Missy Januszko -date: "2017-04-21T19:57:12+00:00" -categories: - - PowerShell for Admins -aliases: - - /2017/04/powershell-and-devops-global-summit-recap/ ---- - -Now that I’m recovered from the 2017 PowerShell and DevOps Global Summit, I just wanted to take a moment and talk about my experiences at the conference. It was my first time attending this conference and it was also my first time speaking. Both “firsts” contributed to a range of emotions throughout the long and exhausting week. - - -I came in to Seattle late Friday night and expected to go straight to the hotel and to bed. Being from Eastern Daylight Time makes for a long day and late night when your expected hotel arrival time is 10pm local time (or 1AM your time). However, PowerShell friends and community members, some of whom I knew from previous conferences and some of whom I was just meeting for the first time, greeted me. Some stayed up and waited for me to arrive – even with an already-closed hotel bar and many respective time zone differences. They greeted me with an overwhelming sense of community and friendship, and that was a defining moment that I’ll never forget. Even though I was exhausted, I found myself staying up for a couple more hours chatting with folks who were already there. - - -Saturday was a do-my-own-thing kind of day. My intent of being there a day early was to try to relax and not fret about the upcoming presentation the next day, but also try to review the presentation a bit with my co-presenter Jason Helmick. I tried to stay stress-free by working out – I am an avid Crossfitter and there is a Crossfit box within walking distance of the hotel, so I got a workout in and a lot of coffee via the Starbucks in the hotel. Had a quiet dinner with a fellow DevOps Camper and also met another attendee who was sitting next to us at the sushi place. A couple glasses of wine later, I was ready to retire to get ready for the next day. - - -Sunday, of course, began very early with heart palpitations and equipment checks. I have a brand new laptop, and while I may be good at PowerShell, I’m technologically challenged when it comes to hooking up my new laptop to the projection equipment. - - - -Plus there’s some recording equipment in there too, so I hand my laptop and a bunch of cables to other really smart people and they get it all hooked up. - - - -All I can think of is “in an hour you will be standing up here talking for 3 hours”, and I should mention here that Jeffrey Snover himself is not only in the building, but has taken up shop in a seat in our session. I’m cool, calm and collected, of course! - - -After breakfast, Jason opens the show by talking first about teaching DSC, then about our Autolab project, which is a source of pride for me. He then segues into my portion of the presentation, which includes configuration data tricks, and developing your own resources using script, function-based, and class-based resources. After a short break, we talk about Pull, Tug, and reporting with DSCEA. Many of my demos don’t work – even though I had just run through them less than a week ago – and I realize why. If you’ve ever seen a talk by Sami Laiho, you know the rule - you need to sacrifice a Nano server to the demo gods to have a successful demo, and I’ve forgotten this simple rule. - - -After the morning session I get to revert back to being an attendee somewhat. - - - -Don Jones is presenting the afternoon session on Pester, and while I think my name and a couple of others were on the agenda for this session along with Don, Don is Don, and presents an enlightening session on the use of Pester. I end the day with my friends taking me out to dinner to celebrate completion of my first speaking session and more wine and socialization with the PowerShell community members hanging out at the hotel bar. - - -On Monday, the day started off with Don’s keynote presentation and Ask Me Anything with Jeffrey Snover. I got to sit next to the Scripting Wife, who, along with the Scripting Guy, were both called up to the stage and honored for their many contributions to the PowerShell Community. There are so many fun people to meet and converse with at this conference. The one thing I did have a hard time with was names – and later did I realize that I “knew” a lot of people from their twitter or slack handles and never really actually knew their real names. - - - -(Yes, you, @bladefirelight.) - - - -The “Ask Me Anything” session was interesting and entertaining, and it’s always fun to hear about Jeffrey’s favorite open-source project (VSCode and Pester), anticipated uses of classes and PowerShell on Linux. Nothing shocked me more than having my upcoming PKI session mentioned by Jeffrey during the AMA though!! - - -And then the time change and lack of sleep started to hit me. I took a quick nap in the afternoon and returned in time for the PowerShell Team’s lightning demos to give me a glimpse into what was coming next in PowerShell. After that I mingled and got to talk to members of the PowerShell team during the welcome reception. - - -Fast-forward to Tuesday, it’s the day I’ve been looking forward to the most, but also the most nerve-wracking, because it’s the day of my PKI presentation. In the morning I attended the session of the three fairies/furries/furies, which was a more impromptu session discussing less-than-optimal practices in PowerShell usage. - - - -After a session on using PowerShell on Linux, my nerves were getting the best of me and I took a break and had some informal conversation with people outside the sessions. I did attend part of the Chocolatey session in the afternoon and I wish I had been able to pay attention enough to that session, but at that point, I stopped trying to absorb new information and just mentally rehearsed from that point until I went on. I am disappointed that I didn’t get to see “The Path to a DSC Resource Module” and the PowerShell Team session on security so here’s hoping there may be recordings of those sessions! - - -The show went great. I may have forgotten half my intro (you’d never know!) but other than that I was pleased with the presentation and even more entertained by the follow-up discussions I had afterwards. And many of them were “hey, we’re really glad to see that everyone struggles from time to time on how to solve something with DSC.” - - - -I also received some interesting feedback on how to make my session better and I’m always open to constructive criticism. After that I think I was mentally shot, but still managed to go out and enjoy Tuesday night’s social event and more wine-drinking at the hotel. - - -Then Wednesday came and with it, the sheer exhaustion of the previous days caught up with me. I wanted to sleep in, but I also really wanted to see Ashley’s session on the Kerberos Double Hop problem since that bit me a lot during development of the PKI code. After that early morning session, I just hung out and talked to people rather than attending formal sessions, and I enjoyed answering people’s questions – everything from my career story to questions about PKI to questions about how to solve particular problems they have with DSC. - - - -For my last session, I participated in a panel discussion on Introducing DevOps to your Organization with Steve Murawski and Jason Helmick. - - - -And while I know the challenges my former organization faced, it was refreshing to hear questions from others about different challenges and discuss potential solutions. - - -So now the big question: - - - -Would I return to the PowerShell and DevOps Global Summit again next year? The answer is a big “hell yes”. Will I speak again? Absolutely. I’d like to thank every one of the attendees for giving me a warm welcome into the PowerShell community as a member and a speaker. It was the non-judgmental atmosphere that is perfect for a first-time speaker. How about you? Are YOU interested in speaking but are afraid to try? Do it. Submit a session. Sign up for the Community Lightning Demos and show something you’re working on. Don’t be afraid and give it a try, since this conference open and welcoming to everyone in the community. diff --git a/content/articles/2017-05-04-announcing-the-powershell-saturday-booster-program.md b/content/articles/2017-05-04-announcing-the-powershell-saturday-booster-program.md deleted file mode 100644 index 8194e9e08..000000000 --- a/content/articles/2017-05-04-announcing-the-powershell-saturday-booster-program.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Announcing the PowerShell Saturday Booster Program -authors: - - Don Jones -date: "2017-05-04T15:53:48+00:00" -categories: - - PowerShell for Admins -aliases: - - /2017/05/announcing-the-powershell-saturday-booster-program/ ---- - -We're pleased to announce general availability of our PowerShell Saturday Booster Program, as announced at PowerShell + DevOps Global Summit 2017. The goal of this program is to help enthusiasts build sustainable one-day, small-format technical events worldwide. We can provide organizing advice and assistance, help managing finances, and so on. -Full details at . diff --git a/content/articles/2017-05-09-powershell-team-day-at-it-transformation-event.md b/content/articles/2017-05-09-powershell-team-day-at-it-transformation-event.md deleted file mode 100644 index eb0f3cb9b..000000000 --- a/content/articles/2017-05-09-powershell-team-day-at-it-transformation-event.md +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: PowerShell Team Day at IT Transformation Event -authors: - - Don Jones -date: "2017-05-09T15:39:29+00:00" -categories: - - DevOps - - Events -aliases: - - /2017/05/powershell-team-day-at-it-transformation-event/ ---- - -At the upcoming ["IT Transformation" event in Orlando][1] this month (still time left to register!), members of the PowerShell team will be leading a full-day workshop that's pretty much a don't-miss (and no, it isn't being recorded). Here's the schedule: - - - - - Time - - - - Speaker - - - - Title - - - - - - 09:00am-10:00am - - - - Jeffrey Snover - - - - Observations on Modern IT Practices and Organization Culture - - - - - - 10:00am-10:15am - - - - break - - - - - - 10:15am-12:00pm - - - - Michael Greene - - - - The Release Pipeline Model - - - - - - 12:00pm-01:00pm - - - - lunch - - - - - - 01:00pm-02:45pm - - - - Michael Greene - - - - Instructor Led Hands-On Lab: Constructing a pipeline for PowerShell Modules using Visual Studio Team Services. - - - - - - 03:00pm-04:00pm - - - - Timothy Warner - - - - Introduction to Azure Automation DSC - - - - - - 04:00pm-05:00pm - - - - Jeffrey Snover - - - - Closing thoughts and AMA - - - - -Personally, I'm super-excited. I'll be presenting a full-day workshop myself (the day before), along with a couple of breakout sessions and a keynote with Jeffrey Snover. -Hope to see you there! - - [1]: https://www.devintersection.com/#!/Sharepoint-Office365-Conference diff --git a/content/articles/2017-06-22-taking-powershell-to-the-next-level.md b/content/articles/2017-06-22-taking-powershell-to-the-next-level.md deleted file mode 100644 index b45398523..000000000 --- a/content/articles/2017-06-22-taking-powershell-to-the-next-level.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Taking Powershell to the next level -authors: - - Nick Rimmer -date: "2017-06-22T13:30:58+00:00" -categories: - - Training -aliases: - - /2017/06/taking-powershell-to-the-next-level/ ---- - -I recently decided to 'up my game' with powershell and go beyond the simple scripts I've rolled out in the past. -So I simply want to share with you, the path I took to enhance my skills (inc. alot of practice) -**Books:** -[Learn Powershell In A Month of Lunches][1] -[Learn Powershell Toolmaking in a month of Lunches][2] -[Windows Powershell In Action 3rd Edition][3] -**Online:** -[Advanced Tools And Scripting with Powershell 3.0 Jump Start][4] -[Writing Powershell Powershell DSC Resources And Configuration][5] -[Demo Code][6] - - - [1]: https://www.manning.com/books/learn-windows-powershell-in-a-month-of-lunches-second-edition - [2]: https://www.manning.com/books/learn-powershell-toolmaking-in-a-month-of-lunches - [3]: https://www.manning.com/books/windows-powershell-in-action-third-edition - [4]: https://mva.microsoft.com/en-US/training-courses/advanced-tools-scripting-with-powershell-30-jump-start-8277?l=WOWaGUWy_8604984382 - [5]: http://channel9.msdn.com/events/Ignite/2015/BRK4452 - [6]: https://www.powershellgallery.com/packages/nDemos_BRK4452/1.0 diff --git a/content/articles/2017-07-03-topics-for-powershell-summit-2018.md b/content/articles/2017-07-03-topics-for-powershell-summit-2018.md deleted file mode 100644 index 345653040..000000000 --- a/content/articles/2017-07-03-topics-for-powershell-summit-2018.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Topics for PowerShell Summit 2018 -authors: - - Richard Siddaway -date: "2017-07-03T18:54:52+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2017/07/topics-for-powershell-summit-2018/ ---- - -The planning for Summit 2018 has started – to be honest it started before Summit 2017 opened. We’ve reached the stage where we need to start thinking about the broad topics for PowerShell Summit 2018. -What do you want to hear about? Not the session titles, content and speakers but the broad areas of content you want us to include. We can’t actually promise to cover everything requested because we’re dependent on whats submitted when we open our call for topics towards the end of the month. -Looking at the agenda for Summit 2017 we had these very broad groups -PowerShell tool making -DSC and DSC resources -PowerShell Github repository -PowerShell v6 -Remoting -Testing - Pester -Azure -PowerShell Functions -JEA -PowerShell v6 -PowerShell on Linux -PowerShell modules -Regular Expessions -MSDeploy -PKI -Powershell Jobs, Workflows and runspaces -Nano server -PowerShell cmdlets - compiled and script -Are there any we should drop? Is there a topic we should include – this far out we can commission a specific expert speaker to cover a topic if required. This is your opportunity to help shape Summit 2018. Let us know what you think diff --git a/content/articles/2017-07-25-using-powershell-azure-automation-and-oms-part-i.md b/content/articles/2017-07-25-using-powershell-azure-automation-and-oms-part-i.md deleted file mode 100644 index 6588d26d0..000000000 --- a/content/articles/2017-07-25-using-powershell-azure-automation-and-oms-part-i.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Using PowerShell, Azure Automation, and OMS – Part I -authors: - - Will Anderson -date: "2017-07-25T14:00:01+00:00" -categories: - - PowerShell for Admins -aliases: - - /2017/07/using-powershell-azure-automation-and-oms-part-i/ ---- - -Microsoft's Operations Management Suite provides some exceptional tools for monitoring and maintaining your environments in both the cloud and in your datacenter.  One of it's best features, however, is its ability to leverage the tools that you've already developed to perform tasks and remediate issues using PowerShell, Azure Automation Runbooks, and OMS Alert triggers.  In this series, we'll be discussing how you can configure these tools to take care of problems in your own environment.  Today, we'll be talking about how you can take your own PowerShell Modules and upload them to Azure Automation. -**Creating The Azure Automation Account** -In order to create the Azure Automation Account, you'll need to have create the automation account object in the target resource group, and the ability to create an AzureRunAs account in AzureAD.  It's also important to be mindful that not every Azure region has the Microsoft.Automation resource provider registered to it, so you'll want the resource group to exist in the appropriate locale.  You can check this with the Get-AzureRmResourceProvider cmdlet: - - -`Get-AzureRmResourceProvider -ProviderNamespace 'Microsoft.Automation' -`![](https://powershell.org/wp-content/uploads/2017/07/1-AutomationLocation-300x158.png) -For our purposes, we'll be deploying a resource group to East US 2.  Once the resource group has been created, we'll use New-AzureRmAutomationAccount - - -`$BaseName = 'testautoacct' -$Location = 'eastus2' -$ResGrp = New-AzureRmResourceGroup -Name $BaseName -Location $Location -Verbose -$AutoAcct = New-AzureRmAutomationAccount -ResourceGroupName $ResGrp.ResourceGroupName -Name ($BaseName + $Location) -Location $ResGrp.Location -`It's good to note that while -Verbose is available for New-AzureRmAutomationAccount, it will not return any verbose output. -![](https://powershell.org/wp-content/uploads/2017/07/2-CreateAccount-300x63.png) -**Creating A Blob Container in AzureRM** -Now that we have our automation account created, we can begin uploading our modules to be available for Azure Automation to use.  In order to do so, we'll need to create a blob store that we can upload our modules to so that the Azure Automation Account can import them; unlike in the Azure UI, you cannot currently upload your modules directly from your local machine, so you'll need to supply a URI for Azure Automation to access. -Another 'gotcha' is that there is no AzureRm cmdlet for creating a blob container, or for uploading content to that container, so you'll need to do so using the Azure storage commands and passing the Storage Context Key from AzureRM to Azure.  Here is how you can create the storage account, get the storage account key, create a context, and pass it to Azure: - - -`$Stor = New-AzureRmStorageAccount -ResourceGroupName $ResGrp.ResourceGroupName -Name modulestor -SkuName Standard_LRS -Location $ResGrp.Location -Kind BlobStorage -AccessTier Hot -Add-AzureAccount -$Subscription = ((Get-AzureSubscription).where({$PSItem.SubscriptionName -eq 'LastWordInNerd'})) -Select-AzureSubscription -SubscriptionName $Subscription.SubscriptionName -Current -$StorKey = (Get-AzureRmStorageAccountKey -ResourceGroupName $Stor.ResourceGroupName -Name $Stor.StorageAccountName).where({$PSItem.KeyName -eq 'key1'}) -$StorContext = New-AzureStorageContext -StorageAccountName $Stor.StorageAccountName -StorageAccountKey $StorKey.Value -`Once we've run our storage commands, you'll have captured the storage context object like so: -![](https://powershell.org/wp-content/uploads/2017/07/3-StorageContext-300x105.png) -Now that we've got access to our AzureRm storage account in Azure, we can now create our blob container: - - -`$Container = New-AzureStorageContainer -Name 'modules' -Permission Blob -Context $StorContext -Permission Blob -`![](https://powershell.org/wp-content/uploads/2017/07/4-BlobContainer-300x86.png) -\*NOTE\* - I have my container permission set to Blob, which makes this directory publicly available.  At some time in the near future, I'll walk you through how you can use SAS Tokens to access secure blobs at runtime.  Just be mindful of this if you use this code in production. -**Upload to a Blob Container** -Now we can finally upload our modules to the blob store, and register them in Azure Automation!  What we're going to do here is take our custom module, compress it into a .zip file, and then use the Set-AzureStorageBlobContent cmdlet to ship it up to our blob store.  Once the content is shipped, we use the $Blob.ICloudBlob.Uri.AbsoluteUri to feed the New-AzureRmAutomationModule the URI required for the ContentLink parameter. - - -`$ModuleLoc = 'C:\Scripts\Presentations\OMSAutomation\Modules\' -$Modules = Get-ChildItem -Directory -Path $ModuleLoc - ForEach ($Mod in $Modules){ - Compress-Archive -Path $Mod.PSPath -DestinationPath ($ModuleLoc + '\' + $Mod.Name + '.zip') -Force - } -$ModuleArchive = Get-ChildItem -Path $ModuleLoc -Filter "*.zip" -ForEach ($Mod in $ModuleArchive){ - $Blob = Set-AzureStorageBlobContent -Context $StorContext -Container $Container.Name -File $Mod.FullName -Force -Verbose - New-AzureRmAutomationModule -ResourceGroupName $ResGrp.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -Name ($Mod.Name).Replace('.zip','') -ContentLink $Blob.ICloudBlob.Uri.AbsoluteUri -} -`![](https://powershell.org/wp-content/uploads/2017/07/5-UploadModule-300x65.png) -Now that we've done all that, we can validate that we have our module in Azure Automation through the UI: -![](https://powershell.org/wp-content/uploads/2017/07/6-Validate-300x282.png) -Now that we've uploaded our modules into Azure Automation, we can start using them to perform tasks in Azure.  Next week, we'll look at how we'll be getting more familiar with configuring runbooks and take a closer look at the input data that OMS can pass along to them. -**Part I - Azure Automation Account Creation and Adding Modules** -[Part II - Configuring Azure Automation Runbooks And Understanding Webhook Data][1] -Part III - Utilizing Webhook Data in Functions and Validate Results - Coming Soon! - - [1]: https://powershell.org/2017/08/01/using-powershell-azure-automation-and-oms-part-ii/ diff --git a/content/articles/2017-08-01-76318-2.md b/content/articles/2017-08-01-76318-2.md deleted file mode 100644 index e74191460..000000000 --- a/content/articles/2017-08-01-76318-2.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: PowerShell and DevOps Global Summit 2018 – Call for Topics -authors: - - Richard Siddaway -date: "2017-08-01T09:49:30+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2017/08/76318-2/ ---- - -The PowerShell and DevOps Global Summit 2018 will be returning to the Meydenbauer center, Bellevue WA on 9-12 April 2018. PowerShell, and DevOps, experts from all over the world, including PowerShell team members, will once again join together to discuss and learn about maximizing PowerShell in the workplace in fast-paced, knowledge packed presentations. The Summit's also the place to explore and further your knowledge of DevOps principles and practices in a Windows environment, make new connections, learn new techniques, and offer something to your peers and colleagues. If you want to share your PowerShell or DevOps expertise, then this is your official call to submit presentations for selection! - -# Topic Areas:  What we are looking for - -The bulk of our sessions follow our now traditional 45-minute format. These sessions cover a wide aspect of PowerShell and DevOps expertise. Your proposed session should fit into one of the following areas: - - * PowerShell Internals - A deep look into the inside workings of PowerShell and practical solutions that are built from them. - * PowerShell Features Deep Dive - These presentations are a deep look into configuring and working with PowerShell features and capabilities. - * DevOps in Practice - A deep dive into putting the DevOps principles into practice. Presentations should focus on what you're doing and how you're doing it. - -We are open to presentations across the entire ecosystem that has been built around PowerShell or the various DevOps tools. This includes Microsoft platforms and products that have PowerShell-based management tools as well as third party products.  New topics will be preferred over the recycling of older topics. However, we are still open to sessions on 'older' topics that address areas of great confusion or uncertainty. -We have a number agenda slots available for double length sessions. These sessions delve into the depths of a topic covering areas that need more than 45 minutes. - -#  What kind of sessions get selected? - -AIM HIGH, VERY HIGH - We're looking for technical sessions that go beyond - way beyond - 'beginner'. This is an 'experts' level conference and we expect the session to reflect that. We want attendees to finish each day with information leaking ... just a little bit ... out their eyeballs. We may accept some intermediate level sessions but please talk to us before spending a lot of time developing such a session. -We look for an abstract that's compelling and makes us want to see your session - so spend time writing a great abstract! We want sessions that offer real-world usability combined with "WOW, nobody talks about THAT" awesomeness. We want to see the code. Don't just talk about it - this is a PowerShell summit not a PowerPoint Summit. If your session isn't predominately demonstrations its probably not right for the Summit. -Summit presentations are intense and intimate often with plenty of audience interaction. You must expect questions and discussions. This is not a "lecture to the audience" event. -_If you have any doubts about the suitability of a particular session, please contact us -_ [_summit@powershell.org_][1] _- we're always happy to discuss proposed sessions._ -Please note all sessions are to be delivered in English. Presenter will provide all equipment needed to deliver session(s), including a laptop or other computer. Presenter must be able to provide video by means of HDMI, DVI-D, or DisplayPort connectors - VGA is NOT supported. Presenter must be able to manually select an appropriate screen resolution for video output. Typically, 1024x768 or 1280x720 are preferred. -Internet connectivity is available in the conference center but bandwidth is limited. If you rely on connecting to the cloud for your sessions then consider recording any demonstrations as a contingency. - -# How to submit abstracts of presentations - -Go to - -Click Speak at PowerShell and DevOps Global Summit 2018 (scroll down to find the big green button at bottom right) -Login using Twitter, Facebook or one of the other options. -Complete the form. The name field will show your email address. If you could ensure your full name is in the Bio field this will make communication easier. -Click submit -Please contact summit At PowerShell dot org if you have any issues or problems. - -# Presentation submission deadline: When you should send it by - -Start submitting your presentation submissions immediately! The selection committee will start selecting presentations as soon as they arrive so you don't want to miss out. The last day we will accept presentation submissions will be **Sunday 1 October 2017**. This is a hard deadline - **NO** sessions will be accepted after this date. - -# When you will know you've been selected - -You will be informed if one or more of your presentations have been selected and notified by Wednesday 11 October 2017. Your notification email will include any further actions you need to take. We will notify all potential speakers by 23 October 2017 if their sessions haven't been accepted. -Speakers, with accepted sessions, will be given free admission to the event, including attendance at all official Summit activities. Speakers may not bring guests to the day sessions or evening events. We have a limited budget, and the number of speakers selected will be governed by that budget. -All speakers will receive a stipend, $400 for a 45-minute session and $800 for a double session, to assist with travelling and accommodation expenses. -The final agenda will be announced and posted on PowerShell.Org on, or about, Wednesday 1 November 2017. -We look forward to your submissions and your help in making PowerShell and DevOps Global Summit 2018 the most valuable IT/Dev conference of the year building on and surpassing the previous Summits! - - [1]: mailto:summit@powershell.org diff --git a/content/articles/2017-08-01-powershell-devops-global-summit-scholarship-program.md b/content/articles/2017-08-01-powershell-devops-global-summit-scholarship-program.md deleted file mode 100644 index 122ce2111..000000000 --- a/content/articles/2017-08-01-powershell-devops-global-summit-scholarship-program.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: PowerShell + DevOps Global Summit Scholarship Program -authors: - - Thomas Malkewitz -date: "2017-08-01T00:00:43+00:00" -categories: - - Announcements - - Events - - News - - PowerShell Summit - - Training -aliases: - - /2017/08/powershell-devops-global-summit-scholarship-program/ ---- - -Automation and scripting has become a major part of IT in recent years.  And PowerShell has played a giant role in the progression of that.  Every year, the wonderful people at PowerShell.org put on the PowerShell + DevOps Global Summit, that always produces outstanding results from amazing speakers and attendees. - - -As many of you in IT know, convincing your manager to attend conferences usually depends on a few key factors: Cost and budget, content, and sometimes, experience or seniority in the company.  And unfortunately, that last one may be a deciding factor far too often.  This year, PowerShell.org is making it a priority to help extend, not only the content and knowledge that comes with attending the PowerShell + DevOps Global Summit, but also the experience that comes along with it.   - - -PowerShell.org is looking for a few driven, over achieving PowerShell-ers, that may still yet be all too  -_ -green -_ -in their company or role in IT to convince their superiors to send them to the [PowerShell + DevOps Global Summit](http://powershellsummit.org).  To be considered for this scholarship, **we are particularly looking for individuals that would be considered part of a group which is "under represented" in the IT industry as a whole**, including women, underrepresented minorities, and so on.  So, if you're the IT Director, or the Senior Systems Architect, this opportunity is not for you; however, if you are in those roles, and you know a real go-getter that has shown you some cool stuff they have done with PowerShell, please point them to this opportunity. - -It's also worth noting that this specifically isn't for people in the situation of, "yeah, I do this stuff all the time and my employer should totally send me and they totally aren't." We're looking more for, "I'm working way above my pay grade and this might help give me the jump I need to get to a better place in life." That's the kind of thing you'll have to help us understand about you in your application. This scholarship isn't just to take a burden off your employer or net you a free trip to Redmond; it's to help someone raise themselves in life. - - -## Applying - - -If you feel you fit the bill for this scholarship, you need to convince us!  We want to hear why you are the Chosen One.  So, if you’d like to be considered for the opportunity you will need to write an essay that demonstrates your passion for PowerShell and automation.  When constructing your essay, please use the following guidelines: - - -- - -Demonstrate an intermediate or better understanding of PowerShell,  Scripting, and ToolMaking (If you’ve read Don Jones’ *Learn PowerShell in a Month of Lunches*, you should be fine). - - -- - -Include specifics.  Site specific example on how you have used PowerShell to save your company a bunch of money, or how you’ve done something amazing. - - -- - -Include examples.  We DO NOT want a submission that is just a script, but please include some clever snippets that you are proud of. - - -- - -Have you shared your work, or made it reusable?  Please include information on how we can find it if you have.  The PowerShell Community is one of the best ones around, and we all love sharing code. - - -- - -Be thorough.  We don’t have a hard word count,  but remember, the best essay wins! - - -- - Assure us that, should you be awarded this opportunity, you've spoken with your employer and getting the time off won't be a problem. - - - - -## How We'll Decide - -- - -Applications can be submitted [HERE](https://docs.google.com/forms/d/e/1FAIpQLScyiEszj9GzVwkNBUOMatlL2kbFwgoRXelWHiaTwlCb8Pkqtg/viewform) (Google account required to apply). - - -- - -We will be accepting applications from Friday, September 1st 2017 until Sunday, October 1st 2017. - - -- - -The winner(s) will be selected based on the quality of their essay and the enthusiasm it conveys (make us want to keep reading).  Again, we are not looking for the seasoned PowerShell veteran that has been to the Summit the past four years, but the help desk analyst that has been using a collection of tools and scripts they created that is allowing them to be four times as productive. - - -- - -The winner(s) will be chosen by a panel of four judges who are all very active members in the PowerShell community. - - -- - -The winner(s) will be announced Wednesday, November 1st 2017 on PowerShell.org - - - - -## What Awardees Receive - -- - -Up to $500 in airfare. - - -- - -Four hotel room nights. - - -- - -Full admission to the PowerShell + DevOps Global Summit. diff --git a/content/articles/2017-08-01-using-powershell-azure-automation-and-oms-part-ii.md b/content/articles/2017-08-01-using-powershell-azure-automation-and-oms-part-ii.md deleted file mode 100644 index 09cced2c6..000000000 --- a/content/articles/2017-08-01-using-powershell-azure-automation-and-oms-part-ii.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Using PowerShell, Azure Automation, and OMS – Part II -authors: - - Will Anderson -date: "2017-08-01T14:00:46+00:00" -categories: - - PowerShell for Admins -aliases: - - /2017/08/using-powershell-azure-automation-and-oms-part-ii/ ---- - -So last time we learned how to upload our custom modules into Azure Automation so we can start using them in Azure Automation Runbooks.  This week we're going to take a look at configuring a runbook to see what kind of data we can ingest from OMS Webhook data, and how we can leverage that data to pass into our functions. -**Creating the Runbook Script** -So first off, let's talk about basic runbooks and running them against objects in Azure.  As previously discussed, when your automation account is created, it creates with it an AzureRunAsAccount.  This account is configured to act on behalf of the user that has access to the automation account and the runbooks in order to perform the runbook task.  In order to leverage this account, you need to invoke it in the runbook itself.  You can actually find an example of this snippet in the AzureAutomationTutorialScript runbook in your automation account. - - -`$connectionName = "AzureRunAsConnection" -try -{ - # Get the connection "AzureRunAsConnection " - $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName - "Logging in to Azure..." - Add-AzureRmAccount ` - -ServicePrincipal ` - -TenantId $servicePrincipalConnection.TenantId ` - -ApplicationId $servicePrincipalConnection.ApplicationId ` - -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint -} -catch { - if (!$servicePrincipalConnection) - { - $ErrorMessage = "Connection $connectionName not found." - throw $ErrorMessage - } else{ - Write-Error -Message $_.Exception - throw $_.Exception - } -} -`So now that we've got our opening snippet, we'll add that into a new .ps1 script file in our preferred integrated scripting environment tool and get to work. -Now, in order to be able to ingest data from an OMS Alert, we need to be able to pass the data to our Azure Automation runbook.  In order to do so, we only need to add a $WebHookData parameter to the runbook and specify the data type as object. - - -`Param ( - [Parameters()][object]$WebHookData -) -`Now, we need to convert that data from a JSON object into something readable in our output.  Webhook data is presented with three primary datasets - WebhookName, RequestHeader, and RequestBody.  WebhookName, obviously is the name of the incoming webhook.  RequestHeader is a hash table containing all of the header data for the incoming requestion.  And finally, RequestBody is the body of the incoming request.  This is where the data we want to parse will reside.  Specifically, it will reside under the SearchResults property of the RequestHeader dataset. - - -`$WebhookData.WebhookName - $WebhookData.RequestHeader - $WebhookData.RequestBody -`So let's configure our runbook to display the incoming data to examine what we have to play with. - - -`$SearchResults = (ConvertFrom-Json $WebhookData.RequestBody).SearchResults.value -$SearchResults -`**Publish the Runbook** -Now, we'll go ahead and save our script as a .ps1 file and upload it to our automation account with the Import-AzureRmAutomationRunbook cmdlet. - - -`Import-AzureRmAutomationRunbook -Path 'C:\Scripts\Presentations\OMSAutomation\ExampleRunbookScript.ps1' -Name WebhookNSGRule -Type PowerShell -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -Published -`And now we can see our return. -![](https://powershell.org/wp-content/uploads/2017/07/7-ImportRunbook-300x150.png) -And if we check through the UI, we can see a brand-new, shiny runbook sitting in our automation account!  Now, we can configure a basic alert to monitor in OMS. -**Create an Alert** -For the purposes of this example, I've create a couple of virtual machines with network security group rules for HTTP:80 and RDP:3389 accepting connections from anywhere.  I do not recommend doing this for a production virtual machine.  /endDisclaimer -As you can well expect, these machines are throwing MaliciousIP traffic alerts in Operations Management Suite's console: -![](https://powershell.org/wp-content/uploads/2017/07/8.5-AlertUI-3-300x298.png) -So if we click on the MaliciousIP flag, it'll take us to the Log Search screen.  This includes the query data that we can use for the alert.  However, you'll want to clean up the query data a bit to generalize it.  In this example, the query is specific to the country that is displayed in the given flag.  But if we remove the country specific portion of the query, it'll allow us to cast a wider net and get data on potentially malicious traffic from any given country. - - -`Canned Query: -MaliciousIP=* AND (RemoteIPCountry=* OR MaliciousIPCountry=*) AND (((Type=WireData AND Direction=Outbound) OR (Type=WindowsFirewall AND CommunicationDirection=SEND) OR (Type=CommonSecurityLog AND CommunicationDirection=Outbound)) OR (Type=W3CIISLog OR Type=DnsEvents OR (Type = WireData AND Direction!= Outbound) OR (Type=WindowsFirewall AND CommunicationDirection!=SEND) OR (Type = CommonSecurityLog AND CommunicationDirection!= Outbound))) (RemoteIPCountry="People's Republic of China" OR MaliciousIPCountry="People's Republic of China") -Modified Query: -MaliciousIP=* AND (RemoteIPCountry=* OR MaliciousIPCountry=*) AND (((Type=WireData AND Direction=Outbound) OR (Type=WindowsFirewall AND CommunicationDirection=SEND) OR (Type=CommonSecurityLog AND CommunicationDirection=Outbound)) OR (Type=W3CIISLog OR Type=DnsEvents OR (Type = WireData AND Direction!= Outbound) OR (Type=WindowsFirewall AND CommunicationDirection!=SEND) OR (Type = CommonSecurityLog AND CommunicationDirection!= Outbound))) -`![](https://powershell.org/wp-content/uploads/2017/07/9-ConfigureQuery-1-300x136.jpg) -After testing our query to make sure it's valid, we can now hit the alert button and configure the alert.  Here you'll need to give it an alert name, a schedule, and number of results before it triggers the alert.  You'll also want to select the Runbook option under actions and select the test runbook we created.  Then we hit save, and wait for our alert to trigger and the runbook to fire. -![](https://powershell.org/wp-content/uploads/2017/07/10-ConfigureAlert-300x193.jpg) -And as you can see, I didn't have to wait long: -![](https://powershell.org/wp-content/uploads/2017/07/11-RunbookFired-300x240.jpg) -**Validate our Data** -If we click on one of the completed instances, and navigate to the output blade, we can now see the data we're receiving from our triggered alert.  This particular data shows that inbound traffic from Colombia is attempting an RDP connection to my virtual machine.  With the inbound IP Address and target system name, we now have enough data to be able to create a full-blown auto-remediation solution. - - -`Logging in to Azure... -Environments Context ------------- ------- -{[AzureCloud, AzureCloud], [AzureChinaCloud, AzureChinaCloud], [AzureUSGovernment, AzureUSGovernment]} Microsoft.Azur... -Computer : server1 -MG : 00000000-0000-0000-0000-000000000001 -ManagementGroupName : AOI-cb0eefe8-b88f-47ce-ae91-dbc46df99751 -SourceSystem : OpsManager -TimeGenerated : 2017-07-21T12:17:37.45Z -SessionStartTime : 2017-07-21T12:16:52Z -SessionEndTime : 2017-07-21T12:16:52Z -LocalIP : 10.119.192.10 -LocalSubnet : 10.119.192.0/21 -LocalMAC : 00-0d-3a-03-ea-a6 -LocalPortNumber : 3389 -RemoteIP : 200.35.53.121 -RemoteMAC : 12-34-56-78-9a-bc -RemotePortNumber : 4935 -SessionID : 10.119.192.10_3389_200.35.53.121_4935_2184_2017-07-21T12:16:52.000Z -SequenceNumber : 0 -SessionState : Listen -SentBytes : 20 -ReceivedBytes : 40 -TotalBytes : 60 -ProtocolName : TCP -IPVersion : IPv4 -SentPackets : 1 -ReceivedPackets : 2 -Direction : Inbound -ApplicationProtocol : RDP -ProcessID : 888 -ProcessName : C:\Windows\System32\svchost.exe -ApplicationServiceName : ms-wbt-server -LatencyMilliseconds : 116 -LatencySamplingTimeStamp : 2017-07-21T12:16:52Z -LatencySamplingFailureRate : 0.0% -MaliciousIP : 200.35.53.121 -IndicatorThreatType : Botnet -Confidence : 75 -Severity : 2 -FirstReportedDateTime : 2017-07-20T20:10:32Z -LastReportedDateTime : 2017-07-21T11:25:11.0661909Z -IsActive : true -ReportReferenceLink : https://interflowinternal.azure-api.net/api/reports/download/generic/webbot.json -RemoteIPLongitude : -75.88 -RemoteIPLatitude : 8.77 -RemoteIPCountry : Colombia -id : 149270bc-74fc-13d0-34a9-3fd665a457b2 -Type : WireData -__metadata : @{Type=WireData; TimeGenerated=2017-07-21T12:17:37.45Z} -`It's a long road, and we're almost there!  Next week, I'll take you through my process of modifying my module to directly ingest webhook data, and how we can take our OMS queries and deploy them to other Operations Management Suite solutions using PowerShell.  See you then! -[Part I - Azure Automation Account Creation and Adding Modules][1] -**Part II - Configuring Azure Automation Runbooks And Understanding Webhook Data** -Part III - Utilizing Webhook Data in Functions and Validate Results - Coming Soon! - - [1]: https://powershell.org/2017/07/25/using-powershell-azure-automation-and-oms-part-i/ diff --git a/content/articles/2017-08-08-summit-agenda-process.md b/content/articles/2017-08-08-summit-agenda-process.md deleted file mode 100644 index 908c09a8b..000000000 --- a/content/articles/2017-08-08-summit-agenda-process.md +++ /dev/null @@ -1,158 +0,0 @@ ---- -title: Summit agenda process -authors: - - Richard Siddaway -date: "2017-08-08T11:31:35+00:00" -categories: - - PowerShell Summit -aliases: - - /2017/08/summit-agenda-process/ ---- - -There’s been a lot of discussion on the Summit Slack channel around people proposing sessions for the 2018 Summit. I thought an explanation of how we put the agenda together would be useful for anyone thinking about submitting sessions. - - -First off though – if you’re thinking about submitting a session for the 2018 Summit then JUST DO IT! We are reserving a number of sessions for new speakers, as we always do. One of our goals for the Summit is to nurture the next generation of speakers. What better way to learn to speak about PowerShell than in front of the world’s greatest PowerShell audience. There is a balancing act between nurturing new speakers and having “big name” established speakers that we know will help draw an audience to the Summit. - - - -The call for topics - -[https://powershell.org/2017/08/01/76318/](https://powershell.org/2017/08/01/76318/) - -- explains what we’re looking for and the mechanics of submitting a session. This year it’s easier than ever and the site we are using facilitates two-way communication with the potential speaker so that we can help them fine tune their proposal. - - -Once you’ve submitted the proposal we get an email containing the title and the text. Within a few days (at most) you’ll start to get feedback even if it’s just a thank you for submitting if there’s nothing we think should be changed. We may start an extended dialog depending on the submission and what we actually need. - - -Well before we open the call for topics we’ll have decided the structure of the Summit – the 2018 structure was done immediately after the 2017 Summit! I’m not giving full details at this stage but we’ll have a mixture of standard 45-minute sessions and double length sessions. The exact mix will depend on the sessions that are submitted. That structure tells me how many sessions I need. From that number, I’ll subtract those that the PowerShell team will use and the time we need for the Community Lightning Demos (yes, they are returning in 2018) and any other activities. That gives me the number of sessions I need. - - - - A second consideration is budget. We’d love to have each session done by a separate speaker but that costs the Summit in terms of free admission, food etc. So, we have a budget which constrains the number of speakers we can sensibly accommodate without making the Summit too expensive for attendees. Again, this is a balancing act between diversity of speakers and the cost to attendees. - - - -Having determined the number of speakers and the number of sessions required I’ll start thinking about which topics will be of most interest in April 2018. We set the agenda in October 2017 so we’re guessing to a certain degree.  We look for sessions that meet one or more of these criteria: - - -· - - -A currently hot topic - - - -· - - -A new feature in PowerShell that attendees may not have had the time to investigate - - - -· - - -A topic that is causing a lot of questions on the forums - - - -· - - -A topic that we’ve not seen before - - - -· - - -A new module – as long as the code is explained -  that solves a problem or makes life easier - - - -· - - -A deep dive into an aspect of the PowerShell language or engine - - - -· - - -New techniques for using PowerShell - - - -· - - -Best practices - - - -· - - -DevOps – usually practical based “how I did X” - - - -· - - -What I learned doing “Y” and how that helps you - - - -· - - -How the session fits with other sessions we’re thinking of using - - - -· - - -It’s a positive session. Session proposals that dwell on, and just enumerate, the shot-comings of a particular aspect of PowerShell are extremely unlike to be accepted. If you turn that round and show how to overcome those issues – that’s a positive session. - - - -· - - -Do we think the speaker understands the topic well enough to present an authorative session? This is often base on the abstract of the proposal which is why we say it’s got to get our attention. - - - -· - - -Is it a session that can be presented as the same time as the PowerShell team or other “big name” is speaking so we can balance attendees across the rooms. - - - -Other criteria may apply depending on circumstances. - - -Once, we’ve got a number of sessions available we’ll start to circulate the details amongst the people helping put the agenda together asking for feedback on the session proposals. In some cases, this will become feedback to the proposer and we’ll work with the potential speaker to refine the proposal. This process has started. - - -When the call for topics has closed I’ll go through the proposed sessions and create a first pass of the agenda. This first pass is circulated to a small number of people who can comment, suggest alternative sessions, move sessions around and generally rework the agenda as required. When we’re happy we’ll notify the speakers and publish the agenda. If your sessions weren’t accepted we'll let you know. - - -Then we keep our fingers crossed that we’ve got it right and people will want to attend the Summit based on the agenda. - - -2018 will be our biggest Summit ever so we need more speakers. The information in this – especially the criteria used when thinking about sessions – should help you put together a proposal that will catch our eye. - - -If you’re in the slightest doubt about whether to submit sessions – JUST DO IT. If you want to discuss ideas then leave a comment, email me or join the Summit Slack channel #speaking-ideas where you can get feedback from people in a similar situation. - - -You are the future of Summit and we need you to submit those proposals. - - -Hope to see you (speaking) at the 2018 Summit. diff --git a/content/articles/2017-08-08-using-powershell-azure-automation-and-oms-part-iii.md b/content/articles/2017-08-08-using-powershell-azure-automation-and-oms-part-iii.md deleted file mode 100644 index a1caf6695..000000000 --- a/content/articles/2017-08-08-using-powershell-azure-automation-and-oms-part-iii.md +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: Using PowerShell, Azure Automation, and OMS – Part III -authors: - - Will Anderson -date: "2017-08-08T14:00:43+00:00" -categories: - - PowerShell for Admins -aliases: - - /2017/08/using-powershell-azure-automation-and-oms-part-iii/ ---- - -It's been a long road, but we're almost there!  A couple of weeks ago we looked at how we can create an Azure Automation Account and add our own custom modules to the solution to be used in Azure Automation.  Last week, we took a deeper dive into configuring a runbook to take in webhook data from an alert using Microsoft's Operations Management Suite.  Then we looked into the data itself to see how we can leverage it against our runbook to fix problems for us on the fly. -This week, we're going to modify an existing function to use that webhook data directly. -**Building on Webhook Data** -We could actually build our logic directly into the runbook to parse the webhook data and then pass the formatted information to our function that we've made available in Azure.  But I prefer to keep my runbooks as simple as possible and do the heavy lifting in my function.  This makes the runbook look a little bit cleaner, and allows me to minimize my code management a little more.  Also, Azure Automation Runbooks, as of this writing, don't play nicely with parameter sets in them, so I might as well pass my data along to a command that does. -Originally, I had built a one-liner that allowed me to create an NSG rule on the fly to block and incoming traffic from a specific IPAddress.  It was a fairly simple command.  But today, we're going to make it a little more robust, and give it the ability to use webhook data.  Here's my original code: - - -`Function Set-AzureRmNSGMaliciousRule { - [cmdletbinding()] - Param( - [Parameter(Mandatory=$true)][string]$ComputerName, - [Parameter(Mandatory=$true)][string]$IPAddress - ) - $ResGroup = (Get-AzureRmResource).where({$PSItem.Name -eq $Sys}) - $VM = Get-AzureRmVM -ResourceGroupName $ResGroup.ResourceGroupName -Name $Sys - $VmNsg = (Get-AzureRmNetworkSecurityGroup -ResourceGroupName $VM.ResourceGroupName).where({$PSItem.NetworkInterfaces.Id -eq $VM.NetworkProfile.NetworkInterfaces.Id}) - $Priority = ($VmNsg.SecurityRules) | Where-Object -Property Priority -LT 200 | Select-Object -Last 1 - If ($Priority -eq $null){ - $Pri = 100 - } - Else { - $Pri = ($Priority + 1) - } - $Name = ('BlockedIP_' + $IPAddress) - $NSGArgs = @{ - Name = $Name - Description = ('Malicious traffic from ' + $IPAddress) - Protocol = '*' - SourcePortRange = '*' - DestinationPortRange = '*' - SourceAddressPrefix = $IPAddress - DestinationAddressPrefix = '*' - Access = 'Deny' - Direction = 'Inbound' - Priority = $Pri - } - $VmNsg | Add-AzureRmNetworkSecurityRuleConfig @NSGArgs | Set-AzureRmNetworkSecurityGroup -} -`I want to keep my mandatory parameters for my original one-liner solution in-case I need to do something tactically.  So we'll go ahead and split the parameters for on-prem vs. webhook into different parameter sets.  As webhook data is formatted as a JSON object, we'll need to specify the data type for the WebhookData parameter as object. - - -`Param( - [Parameter(ParameterSetName='ConsoleInput')][string]$ComputerName, - [Parameter(ParameterSetName='ConsoleInput')][string]$MaliciousIP, - [Parameter(ParameterSetName='WebhookInput")][object]$WebhookData - ) -`Now, we're going to add some logic to parse out the data that we're looking to use: - - -`If($PSCmdlet.ParameterSetName -eq 'WebhookInput'){ - $SearchResults = (ConvertFrom-Json $WebhookData.RequestBody).SearchResults.value - Write-Output ("Target computer is " + $SearchResults.Computer) - Write-Output ("Malicious IP is " + $SearchResults.RemoteIP) - $ComputerName = (($SearchResults.Computer).split(' ') | Select-Object -First 1) - $MaliciousIP = (($SearchResults.RemoteIP).split(' ') | Select-Object -First 1) - } - If ($ComputerName -like "*.*"){ - $Sys = $ComputerName.Split('.') | Select-Object -First 1 - } - Else { - $Sys = $ComputerName - } -`You'll notice that I'm doing some string formatting with our data here.  Webhook data can concatenate multiple alerts together and separate the array by using spaces, so we're splitting that up and grabbing the first entry for each input we need.  The additional splitting on the ComputerName is to accomodate for systems that are domain joined, as Azure isn't necessarily aware of a system's FQDN.  Mind you, this is a rough example, and continuously growing; So as my use cases evolve, so will my code. -Now that we have our data formatted, we can update our module and upload it to our Azure Automation Account using the same process outlined in Part I, but with the -Force parameter added so we can overwrite the existing instance. - - -`Param( - [Parameter(Mandatory=$true)] - [object]$WebhookData -) -$connectionName = "AzureRunAsConnection" -try -{ - # Get the connection "AzureRunAsConnection " - $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName - "Logging in to Azure..." - Add-AzureRmAccount ` - -ServicePrincipal ` - -TenantId $servicePrincipalConnection.TenantId ` - -ApplicationId $servicePrincipalConnection.ApplicationId ` - -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint -} -catch { - if (!$servicePrincipalConnection) - { - $ErrorMessage = "Connection $connectionName not found." - throw $ErrorMessage - } else{ - Write-Error -Message $_.Exception - throw $_.Exception - } -} -Set-AzureRmNSGMaliciousRule -WebHookData $WebhookData -`Now, in a few minutes, our runbook should trigger and we can monitor the result. - - -`$Job = (Get-AzureRmAutomationJob -RunbookName WebhookNSGRule -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName) -$Job[0] | Select-Object -Property * -ResourceGroupName : mms-eus -AutomationAccountName : testautoaccteastus2 -JobId : 339601cd-14e9-4002-8fcd-7d2008726445 -CreationTime : 7/24/2017 10:11:43 AM -04:00 -Status : Completed -StatusDetails : -StartTime : 7/24/2017 10:12:21 AM -04:00 -EndTime : 7/24/2017 10:13:31 AM -04:00 -Exception : -LastModifiedTime : 7/24/2017 10:13:31 AM -04:00 -LastStatusModifiedTime : 1/1/0001 12:00:00 AM +00:00 -JobParameters : {} -RunbookName : WebhookNSGRule -HybridWorker : -StartedBy : -`We can start digging into the outputs of the runbook after completion to gather a little more data. - - -`$Job = (Get-AzureRmAutomationJob -RunbookName WebhookNSGRule -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName) -$JobOut = Get-AzureRmAutomationJobOutput -Id $Job[0].JobId -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -ForEach ($JobCheck in $JobOut){ - $JobCheck.Summary -} -PS C:\WINDOWS\system32> ForEach ($JobCheck in $JobOut){ - $JobCheck.Summary -} -Logging in to Azure... -Target computer is server1 server1 server1 -Malicious IP is 183.129.160.229 183.129.160.229 -Target system is server1 -Incoming MaliciousIP is 183.129.160.229 -Creating rule... -`And now if I check against my system, we will see that OMS is auto-generating rules for us! - - -`$VM = (Get-AzureRmResource).where({$PSItem.Name -like 'server1'}) -$Machine = Get-AzureRmVM -ResourceGroupName $VM[0].ResourceGroupName -Name $VM[0].Name -$NSG = (Get-AzureRmNetworkSecurityGroup -ResourceGroupName $Machine.ResourceGroupName).where({$PSItem.NetworkInterfaces.Id -eq $Machine.NetworkProfile.NetworkInterfaces.Id}) -(Get-AzureRmNetworkSecurityRuleConfig -NetworkSecurityGroup $NSG[0]).where({$PSItem.Name -like "BlockedIP_*"}) -Name : BlockedIP_206.190.36.45 -Id : /subscriptions/f2007bbf-f802-4a47-9336-cf7c6b89b378/resourceGroups/test/providers/Microsoft.Network/networkSecurityGroups/server1nsgeus2domain - Controller/securityRules/BlockedIP_206.190.36.45 -Etag : W/"279e0fee-05c6-43ef-b897-19f927dd9a40" -ProvisioningState : Succeeded -Description : Auto-Generated rule - OMS detected malicious traffic from 206.190.36.45 -Protocol : * -SourcePortRange : * -DestinationPortRange : * -SourceAddressPrefix : 206.190.36.45 -DestinationAddressPrefix : * -Access : Deny -Priority : 100 -Direction : Inbound -Name : BlockedIP_183.129.160.229 -Id : /subscriptions/f2007bbf-f802-4a47-9336-cf7c6b89b378/resourceGroups/test/providers/Microsoft.Network/networkSecurityGroups/server1nsgeus2domain - Controller/securityRules/BlockedIP_183.129.160.229 -Etag : W/"279e0fee-05c6-43ef-b897-19f927dd9a40" -ProvisioningState : Succeeded -Description : Auto-Generated rule - OMS detected malicious traffic from 183.129.160.229 -Protocol : * -SourcePortRange : * -DestinationPortRange : * -SourceAddressPrefix : 183.129.160.229 -DestinationAddressPrefix : * -Access : Deny -Priority : 101 -Direction : Inbound -`After letting my system go for about 24 hours, my OMS Alert triggered the runbook an additional five times.  Each time generating an additional network security group rule in response to traffic that OMS had recognized as potentially malicious, and thus remediating my problem while I slept. -![](https://powershell.org/wp-content/uploads/2017/07/12-NSG-300x48.jpg) -Using a monitoring tool that can tightly integrate with your automation tools is a necessity in the age of the Cloud.  I hope you enjoyed this series and find it to be useful! -[Part I - Azure Automation Account Creation and Adding Modules][1] -Part II - Configuring Azure Automation Runbooks And Understanding Webhook Data -**Part III - Utilizing Webhook Data in Functions and Validate Results** - - [1]: https://powershell.org/2017/07/25/using-powershell-azure-automation-and-oms-part-i/ diff --git a/content/articles/2017-08-23-psblogweek-is-back.md b/content/articles/2017-08-23-psblogweek-is-back.md deleted file mode 100644 index aa9d54ab3..000000000 --- a/content/articles/2017-08-23-psblogweek-is-back.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "#PSBlogWeek is Back!" -authors: - - Adam Bertram -date: "2017-08-23T17:49:39+00:00" -categories: - - Announcements -aliases: - - /2017/08/psblogweek-is-back/ ---- - -I've decided to bring #PSBlogWeek back! Brush off those PowerShell blogs and grease up those typing fingers....wait..don't do that but at least stretch a little bit. If you'd like to write a great article on PowerShell on your blog to help contribute great content and get yourself some notoriety, #PSBlogWeek is how it's done. -For full details, head over to [my blog][1] where I've outlined everything or head directly over to [psblogweek.com][2] for full details! - - - [1]: http://www.adamtheautomator.com/psblogweek-powershell-blogging-entire-week/ - [2]: http://www.psblogweek.com diff --git a/content/articles/2017-08-25-powershell-2-0-deprecation.md b/content/articles/2017-08-25-powershell-2-0-deprecation.md deleted file mode 100644 index f86f11c55..000000000 --- a/content/articles/2017-08-25-powershell-2-0-deprecation.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: PowerShell 2.0 deprecation -authors: - - Richard Siddaway -date: "2017-08-25T10:29:17+00:00" -categories: - - Announcements - - News -aliases: - - /2017/08/powershell-2-0-deprecation/ ---- - -PowerShell 2.0 is being deprecated - see the PowerShell Team [blog][1] for full details - - [1]: https://blogs.msdn.microsoft.com/powershell/2017/08/24/windows-powershell-2-0-deprecation/ diff --git a/content/articles/2017-09-02-powershell-and-devops-summit-2018-session-acceptance.md b/content/articles/2017-09-02-powershell-and-devops-summit-2018-session-acceptance.md deleted file mode 100644 index 9c7dab9f7..000000000 --- a/content/articles/2017-09-02-powershell-and-devops-summit-2018-session-acceptance.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: PowerShell and DevOps Summit 2018 – session acceptance -authors: - - Richard Siddaway -date: "2017-09-02T11:21:32+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2017/09/powershell-and-devops-summit-2018-session-acceptance/ ---- - -We have started the acceptance process for the sessions to be presented at the 2018 Summit. Those currently accepted sessions are listed in the [brochure][1] -The deadline for submissions still remains as 2 October 2017 -We'll probably be formally accepting a number of other sessions during September BUT the bulk of the agenda won't be finalised until after the deadline closes. -You still have plenty of time to get your submissions into the system. The earlier you do so the more time we have to help you refine the submission. - - [1]: https://cdn-powershell.pressidium.com/wp-content/uploads/2017/09/2018-Brochure.pdf diff --git a/content/articles/2017-09-13-the-future-of-powershells-desired-state-configuration.md b/content/articles/2017-09-13-the-future-of-powershells-desired-state-configuration.md deleted file mode 100644 index d14db47b6..000000000 --- a/content/articles/2017-09-13-the-future-of-powershells-desired-state-configuration.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "The Future of PowerShell's Desired State Configuration" -authors: - - Don Jones -date: "2017-09-13T15:28:06+00:00" -categories: - - PowerShell for Admins -aliases: - - /2017/09/the-future-of-powershells-desired-state-configuration/ ---- - -Microsoft [recently published a "Future of DSC" post][1] that I thought deserved some independent commentary. - - - -Something to bear in mind is that the existing, open-source "DSC for Linux" was not authored by the PowerShell team. It was written by Microsoft's Unix Services team, and it doesn't currently offer the exact functionality of the Windows implementation. So some of this announcement is the PowerShell team actually "taking on" DSC for other platforms. -This includes a new Local Configuration Manager (LCM) for PowerShell Core, which implies it'll run anywhere PowerShell core does - Linux, macOS, and so on - as well as Windows, since PowerShell Core can run on Windows, too. It no longer requires the complex-to-install OMI stack, and it supports DSC resources written in PowerShell, Python scripts, and C/C++. -Now, it's important to note that this is a pre-release announcement, and the plans may not survive engagement. That's means the situation is still fluid, and it's probably a bit early to start making plans. This is a situation to _monitor,_ not _act upon,_ at this date. -This does mean that, if plans play out as they are now, _everything about DSC today will probably change a lot._ There will be new commands to replace things like Start-DscConfiguration. But some things won't change: the Pull Server protocol, for example, will be supported by DSC Core (this is easy to do as the protocol isn't complex and is all REST-based), so the existing Pull Server and Azure Automation DSC will still work. -The upside to all of this - and Microsoft's intent, from what I can tell - is to converge on a single code base for DSC, and make all platforms "first class citizens." Today's DSC - what the team calls "DSC for Windows PowerShell" or "Windows Management Framework (WMF) version of DSC" - is at a dead-end. They're not going to delete it, but they're going to focus development on DSC Core. _That_ has implications. It means that, in order to move forward, any custom resources you write and use need to use native C/C++, PowerShell 6 scripts, or commands that are supported under .NET Standard 2.0. WMI is right out, although it'll be interesting to see if the team maintains that stance, or chooses to make WMI available on Windows but not on Linux (which would break the "same code running everywhere" philosophy they're currently aimed at). -The native Pull server's future appears to be unknown. I'm not sure that's a bad thing; it's presented nowadays as "sample code," and it's always been a problematic and minimally-useful chunk of code. I wish more people were looking at [Tug][2], which is an open-source Pull Server framework that you can code up (in PowerShell or .NET) to act however you want. It comes with a simple implementation that more or less mimics the native Pull Server, without the Jet database engine dependency (fun story: Jet/EBD was chosen because the team could get it working on Nano, and now Nano isn't ever going to be used for that purpose as it's been repositioned as a "container OS"). If more people invested in Tug, DSC would be a lot better off overall. -My thoughts? -Overall, "yay" for "same functionality on all platforms." The potential need to rewrite a crapload of DSC resources, and possibly losing WMI (if I'm reading this right), is a big "boo," and might push people away from an already-fragile relationship with DSC. "Boo" also to another re-do of DSC (v4 to v5 was not immaterial), making it feel like Microsoft didn't really have a good long-term vision for the technology to begin with (and indeed, some of the architectural problems in v5, like how partial configurations work, further suggest a lack of vision). DSC Core may be a chance for Microsoft to re-think past approaches and fix mistakes, so "yay" if they do that along the way. -Predominantly, though, a big "boo" to a continued lack of tooling. I get that DSC is an "under the hood" technology latter, but like zero other teams at Microsoft have, at this point, helped pile any kind of tooling on top of it. It's like we have the Chef engine or Puppet engine, but not of the tooling that makes those things true _solutions._ -Taking off my Microsoft fanboy hat, I can see it being difficult for a CIO to take a strong dependency on DSC at this point. We're aiming for its third iteration, which _will_ break backward compatibility and, in some ways, reduce functionality. Microsoft still can't produce a production-viable on-prem pull server, and doesn't seem interested in doing so. We still don't have any kind of management tooling (in part, I think, to the continued shitshow that is the System Center "strategy" these days), so DSC remains a highly do-it-yourself endeavor. Not every organization is going to be comfortable with that. I do think Tug - again, with some do-it-yourself investment - can make DSC vastly more intelligent and powerful (you can, for example, code it to assemble MOFs on-the-fly, extract configuration fragments from a database, or literally anything else you might want), but people in the Microsoft space are used to prepackaged solutions that just install and go. -I like the "write once, run anywhere" promise; that's what .NET was supposed to be all about when Microsoft stepped away from Java back in the day. I get how DSC Core, _for VMs running in Azure,_ may be a first-class citizen for dynamic, declarative configurations, and how that all leads nicely to a DevOps style footing. For on-prem, DSC is going to continue to be challenging for people who aren't accustomed to a lot of DIY, and who are trying to take hard and long-lasting dependencies on a configuration technology. - - [1]: https://blogs.msdn.microsoft.com/powershell/2017/09/12/dsc-future-direction-update/ - [2]: https://github.com/PowerShellOrg/tug diff --git a/content/articles/2017-09-25-using-azure-desired-state-configuration-part-i.md b/content/articles/2017-09-25-using-azure-desired-state-configuration-part-i.md deleted file mode 100644 index e02d9b477..000000000 --- a/content/articles/2017-09-25-using-azure-desired-state-configuration-part-i.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Using Azure Desired State Configuration – Part I -authors: - - Will Anderson -date: "2017-09-25T14:00:45+00:00" -categories: - - PowerShell for Admins -aliases: - - /2017/09/using-azure-desired-state-configuration-part-i/ ---- - -I've been wanting to do this series for a while, and with some of the recent changes in Azure Automation DSC, I feel like we can now do a truly complete series.  So let's get started! -Compliance is hard as it is.  And as companies start moving more workloads into the cloud, they struggle with compliance even more so.  Many organizations are moving to Infrastructure-as-a-Service for a multitude of reasons (both good and bad).  As these workloads become more numerous, IT departments are struggling with keeping up with auditing and management needs.  Desired State Configuration, as we all know, can provide a path to not only configuring your environments as they deploy as new workloads, but can maintain compliancy, and give you rich reporting. -Yes.  Rich reporting from Desired State Configuration, out of the box.  You read it right.  You can get rich graphical reporting out of Azure Automation Desired State Configuration out of the box.  And you can even use it on-prem! -![](https://powershell.org/wp-content/uploads/2017/08/Compliance-300x200.jpg) -In this series, we're going to be discussing the push and pull methods for Desired State Configuration in Azure.  We'll be going over some of the 'gotchas' that you have to keep in mind while deploying your configurations in the Azure environment.  And we'll be talking about how we can use hybrid workers to manage systems on-prem using the same tools. -**Push vs. Pull** -Desired State Configuration, like a datacenter implementation, can be handled via push or pull method.  Push method in Azure does not give you reporting, but allows you to deploy your configurations to a new or existing environment.  These configurations, and the modules necessary to perform the configuration, are stored in a private blob that you create, and then the Azure Desired State Configuration extension can be assigned that package.  It is then downloaded to the target machine, decompressed, modules installed, and the configuration .mof file generated locally on the system. -Pull method fully uses the capabilities of the Azure Automation Account for storing modules, configurations, and .mof compilations to deploy to systems.  The target DSC nodes are registered and monitored through the Azure Automation Account and reporting is generated and made available through the UI.  This reporting can also be forwarded to [OMS Log Analytics][1] for dashboarding and alerting purposes (which, as we discussed in [my previous series][2], can be used with Azure Automation Runbooks for auto-remediation). -**Pros and Cons to Each** -So let's talk about some of the upsides and downsides to each method.  These may affect your decisions as you architect your DSC solution. - - * _Pricing_ - Azure DSC is essentially free.  Azure Automation DSC is free for Azure nodes, while there is a cost associated with managed on-prem nodes.  This charged per month and is dependent on how often the machines are checking in.  You can get more information on the particulars [here][3]. - * _Reporting_ - If you're looking for rich reporting, Azure Automation DSC is definitely the way to go.  You can still get statuses from your Azure DSC nodes via PowerShell, but this leaves the onus on you to format that data and make it look pretty.  We'll be taking a look at how we can do this a bit later. - * _Flexibility_ - Azure Automation DSC allows you to use modules stored in your Azure Automation Account.  If you wish to use a new module, you simply add that module, update your configuration file, and recompile.  With Azure DSC, you need to repackage your configuration with all of the modules, re-publish them, and re-push them to your target machines. - * _Side-by-Side Module Versioning Tolerance_ - Currently, Azure DSC actually has an advantage over Azure Automation DSC in this respect.  You cannot currently have multiple module versions in your module repository.  So if you're using Automation DSC and calling the same DSC resources in multiple configs, they need to all be on that same module version. - * _On-Prem Management Capabilities_ - Azure Automation DSC has the ability to manage on-prem virtual machines, either directly or via Hybrid Workers.  This gives you the ability to manage all of your virtual machines and monitor their configuration status from a single pane of glass.  Azure DSC does not have this capability. - * _Managing Systems in AWS_ - Yes.  You can also manage your virtual machines in AWS using the AWS DSC Toolkit via Azure Automation DSC! - -So that's the overview of what we're going to be talking about through this series.  Tomorrow, we'll be getting into how to add configurations into Azure Automation DSC and compiling your configs. - - [1]: https://docs.microsoft.com/en-us/azure/automation/automation-dsc-diagnostics - [2]: https://powershell.org/2017/07/25/using-powershell-azure-automation-and-oms-part-i/ - [3]: https://azure.microsoft.com/en-us/pricing/details/automation/ diff --git a/content/articles/2017-09-26-using-azure-desired-state-configuration-part-ii.md b/content/articles/2017-09-26-using-azure-desired-state-configuration-part-ii.md deleted file mode 100644 index 64dce9df4..000000000 --- a/content/articles/2017-09-26-using-azure-desired-state-configuration-part-ii.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Using Azure Desired State Configuration – Part II -authors: - - Will Anderson -date: "2017-09-26T14:00:21+00:00" -categories: - - PowerShell for Admins -aliases: - - /2017/09/using-azure-desired-state-configuration-part-ii/ ---- - -Today we're going to be talking about adding configurations to your Azure Automation Account.  In this article, we'll be discussing special considerations that we need to take into account when uploading our configurations.  Then we'll talk about compiling the configurations into Managed Object Format (.mof) files, which we'll be able to use to assign to our systems. -**Things to Consider** -When building configurations for Azure DSC (or anything where we are pulling pre-created .mof files from), there are some things that we need to keep in mind. -_Don't embed PowerShell scripts in your configurations._ - I spent a lot of time cleaning up my own configurations when learning Azure Automation DSC.  When configurations are compiled, they're done so on a virtual machine hidden under the covers and can cause some unexpected behaviours.  Some of the issues that I ran into were: - - * Using environment variables like $env:COMPUTERNAME - This actually caused me a lot of headaches when I started building systems that were being joined to a domain.  The name of the instance that _compiles_ the .mof will be used for $env:COMPUTERNAME instead of the target computer name and you'll be banging your head on the table wondering what happened.  Some of the resources that have been published in the gallery have been updated to use a 'localhost' option as a computer name input, such as xActiveDirectory.  This takes care of a lot of those headaches. - * Using Parenthetical Commands to establish values - Using something like Get-NetAdapter in a parenthetical argument to get a network adapter of your target system and pass the needed values on to your DSC Resource Providers won't work for the same reasons as above.  In this instance, I received a vague error indicating that I was passing an invalid property, and took a little bit of time before I understood what was going on. - * I also ran into an issue with compiling a configuration because I had been using Set-Item to configure the WSMan maxEnvelopeSize in my configs because they can get really big.  The error that I received was that WSMan wasn't installed on the machine.  It took me a bit to realize that this was because the machine compiling the .mof didn't have WSMan running on the box and it was blowing up on the config. - -Instead, if you need to run PowerShell scripts ahead of your deployment, you can use the custom script extension to perform those tasks in Azure, or just put the script into your image on-prem.  There is one exception to this, and that's what we'll be talking about next. -_Leverage Azure Automation Credential storage where possible_ - Passing credentials in as a parameter can cause all kinds of issues. - - * First and foremost, anyone that is building or deploying those configurations will know those credentials. - * Second of all, it brings the possibility of someone tripping over the keyboard and entering a credential in improperly. - -Allowing Azure Automation to tap the credential store during .mof compilation allows to credentials to stay in a secured bubble through the entire process.  To pass a credential from Azure Automation to your config, you need to modify the configuration.  Simply call Get-AutomationPSCredential to a variable inside your configuration, and then set that variable wherever those credentials are required.  Like so: - - -`$AdminCreds = Get-AutomationPSCredential -Name $AdminName - Node ($AllNodes.Where{$_.Role -eq "WebServer"}).NodeName - { - JoinDomain DomainJoin - { - DependsOn = "[WindowsFeature]RemoveUI" - DomainName = $DomainName - Admincreds = $Admincreds - RetryCount = 20 - RetryIntervalSec = 60 - } - } -`Azure Automation under the covers will authenticate to the Credentials store with the RunAs account, and then pass those credentials as PSCredential to your DSC resource provider. -_Stop Using localhost (or a specific computer name) as the Node Name_ - Azure Automation DSC allows you to use genericized, but meaningful names to configurations instead of just assigning things to localhost.  So now you can use webServer, or domainController, or something that describes the role instead of a machine name.  This makes it much easier to decide which configuration should go to what machine. -![](https://powershell.org/wp-content/uploads/2017/09/roles-267x300.jpg) -**Upload The Configuration** -So much like in my previous series on Azure Automation and OMS, we're going to upload our DSC resources to our Automation Account's modules directory.  This requires getting the automation account, zipping up our local module files, sending them to a blob store, and importing those modules from the blob store.  I've sectioned out the code into different regions to better break it down for your own purposes. - - -`#region GetAutomationAccount -$AutoResGrp = Get-AzureRmResourceGroup -Name 'mms-eus' -$AutoAcct = Get-AzureRmAutomationAccount -ResourceGroupName $AutoResGrp.ResourceGroupName -#endregion -#region compress configurations - Set-Location C:\Scripts\Presentations\AzureAutomationDSC\ResourcesToUpload - $Modules = Get-ChildItem -Directory - ForEach ($Mod in $Modules){ - Compress-Archive -Path $Mod.PSPath -DestinationPath ((Get-Location).Path + '\' + $Mod.Name + '.zip') -Force - } -#endregion -#region Access blob container -$StorAcct = Get-AzureRmStorageAccount -ResourceGroupName $AutoAcct.ResourceGroupName -Add-AzureAccount -$AzureSubscription = ((Get-AzureSubscription).where({$PSItem.SubscriptionName -eq $Sub.Name})) -Select-AzureSubscription -SubscriptionName $AzureSubscription.SubscriptionName -Current -$StorKey = (Get-AzureRmStorageAccountKey -ResourceGroupName $StorAcct.ResourceGroupName -Name $StorAcct.StorageAccountName).where({$PSItem.KeyName -eq 'key1'}) -$StorContext = New-AzureStorageContext -StorageAccountName $StorAcct.StorageAccountName -StorageAccountKey $StorKey.Value -$Container = Get-AzureStorageContainer -Name ('modules') -Context $StorContext -#endregion -#region upload zip files -$ModulesToUpload = Get-ChildItem -Filter "*.zip" -ForEach ($Mod in $ModulesToUpload){ - $Blob = Set-AzureStorageBlobContent -Context $StorContext -Container $Container.Name -File $Mod.FullName -Force - New-AzureRmAutomationModule -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -Name ($Mod.Name).Replace('.zip','') -ContentLink $Blob.ICloudBlob.Uri.AbsoluteUri -} -#endregion -`Once we've uploaded our files, we can monitor them to ensure that they've imported successfully via the UI, or by using the Get-AzureRmAutomationModule command. -![](https://powershell.org/wp-content/uploads/2017/09/ModuleImport-300x109.jpg) - - -`PS C:\Scripts\Presentations\AzureAutomationDSC\ResourcesToUpload> Get-AzureRmAutomationModule -Name LWINConfigs -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountNa -me -ResourceGroupName : mms-eus -AutomationAccountName : testautoaccteastus2 -Name : LWINConfigs -IsGlobal : False -Version : 1.0.0.0 -SizeInBytes : 5035 -ActivityCount : 1 -CreationTime : 9/13/2017 9:56:10 AM -04:00 -LastModifiedTime : 9/13/2017 9:57:26 AM -04:00 -ProvisioningState : Succeeded -`**Compile the Configuration** -Once we've uploaded our modules, we can then upload and compile our configuration.  For this, we'll use the Import-AzureRmAutomationDscConfiguration command.  But before we do, there's two things to note when formatting a configuration for deployment to Azure Automation DSC. - - * The configuration name has to match the name of the configuration file.  So if your configuration is called SqlServerConfig, your config file has to be called SqlServerConfig.ps1. - * The sourcepath parameter errors out with an 'invalid argument specified' error if you use a string path.  Instead, it works if you use (Get-Item).FullName - -We'll be casting this command to a variable, as we'll be using it later on when we compile the configuration.  You'll also want to use the publish parameter to publish the configuration after importation, and if you're overwriting a configuration you'll want to leverage the force parameter. - - -`$Config = Import-AzureRmAutomationDscConfiguration -SourcePath (Get-Item C:\Scripts\Presentations\AzureAutomationDSC\TestConfig.ps1).FullName -AutomationAccountName $AutoAcct.AutomationAccountName -ResourceGroupName $AutoAcct.ResourceGroupName -Description DemoConfiguration -Published -Force -`![](https://powershell.org/wp-content/uploads/2017/09/ConfigPublished-300x97.jpg) -Now that our configuration is published, we can compile it.  So let's add our parameters and configuration data: - - -`$Parameters = @{ - 'DomainName' = 'lwinerd.local' - 'ResourceGroupName' = $AutoAcct.ResourceGroupName - 'AutomationAccountName' = $AutoAcct.AutomationAccountName - 'AdminName' = 'lwinadmin' -} -$ConfigData = -@{ - AllNodes = - @( - @{ - NodeName = "*" - PSDscAllowPlainTextPassword = $true - }, - @{ - NodeName = "webServer" - Role = "WebServer" - } - @{ - NodeName = "domainController" - Role = "domaincontroller" - } - ) -} -`You'll notice that I have PSDscAllowPlainTextPassword set to true for all of my nodes.  This is to allow the PowerShell instance on the compilation node to compile the configuration with credentials being passed into it.  This PowerShell instance isn't aware that once the .mof is compiled, it is encrypted by Azure Automation before it's stored in the Automation Account. -Now that we have our parameters and configuration data set, we can pass this to our Start-AzureRmAutomationDscCompilationJob command to kick off the .mof compilation. - - -`$DSCComp = Start-AzureRmAutomationDscCompilationJob -AutomationAccountName $AutoAcct.AutomationAccountName -ConfigurationName $Config.Name -ConfigurationData $ConfigData -Parameters $Parameters -ResourceGroupName $AutoAcct.ResourceGroupName -`And now we can use the Get-AzureRmAutomationDscCompilationJob command to check the status of the compilation, or check through the UI. - - -`Get-AzureRmAutomationDscCompilationJob -Id $DSCComp.Id -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -`The compilation itself can take up to around five minutes, so grab yourself a cup of coffee.  Once it returns as complete, we can get to registering our endpoints and delivering our configurations to them.  Join us next week as we do just that! -![](https://powershell.org/wp-content/uploads/2017/09/CompComplete-300x161.jpg) diff --git a/content/articles/2017-09-30-call-for-topics-closing-1-october.md b/content/articles/2017-09-30-call-for-topics-closing-1-october.md deleted file mode 100644 index 9db832fae..000000000 --- a/content/articles/2017-09-30-call-for-topics-closing-1-october.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Call for topics closing 1 October -authors: - - Richard Siddaway -date: "2017-09-30T15:22:45+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2017/09/call-for-topics-closing-1-october/ ---- - -The call for topics is closing 1 October at 23:59 GMT. We’ve had a fantastic set of submissions. Creating an agenda for the 2018 Summit is going to be very difficult because we’ve had so many fantastic sessions submitted and I don’t have enough slots to take them all. - -The call for topics is hosted by papercall.io – highly recommended – and the cut off is automatic. - -I WILL NOT ACCEPT ANY SESSIONS SUBMITTED AFTER THE CUT OFF DATE. diff --git a/content/articles/2017-10-03-using-azure-desired-state-configuration-part-iii.md b/content/articles/2017-10-03-using-azure-desired-state-configuration-part-iii.md deleted file mode 100644 index 8346b70d6..000000000 --- a/content/articles/2017-10-03-using-azure-desired-state-configuration-part-iii.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: Using Azure Desired State Configuration – Part III -authors: - - Will Anderson -date: "2017-10-03T14:00:59+00:00" -categories: - - PowerShell for Admins -aliases: - - /2017/10/using-azure-desired-state-configuration-part-iii/ ---- - -Last week we talked about modifying and uploading our configurations to Azure Automation DSC.  We were able to import credentials from Azure's Automation Account Credential store, and then compile the .mof files in the automation account for deployment.  This week, we'll be looking at how we apply those configurations to existing systems via PowerShell.  Then we'll take a look at some of the reporting available via Azure Automation DSC and send those reports over to Operations Management Suite for dashboarding. -So when we left off.  We successfully published our configurations in Automation DSC.  If we run Get-AzureRmAutomationDscNodeConfiguration against the configuration I published, we get the following: - - -`Get-AzureRmAutomationDscNodeConfiguration -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -ConfigurationName TestConfig -`![](https://powershell.org/wp-content/uploads/2017/09/aadscmofs-300x198.jpg) -As you can see, when we published the configuration, it generated two configuration .mofs based on our node names - domainController and webServer.  Now of course, we're not going to be calling our servers webServer and domainController, rather, these are generalized names for our configurations.  We get the root configuration (TestConfig), and then the node specific configuration based on the root document (webServer or domainController).  This gives us a lot of flexibility as we can now statefully name our configurations, and assign them to machines without dealing with guids or having all of the mofs defined by a computer name or any other nonsense!  We just assign what named configuration goes to what system, and away we go. -We don't even really care what the computer name is, as long as the correct config gets assigned.  This is really helpful when working on Azure Resource Manager templates, because I don't even really know what the system name will be until runtime.  I just designate a set of systems as 'webServer', assign the config and deploy. -[_Moo._][1] -**Register the Virtual Machine** -So let's go ahead and get a system that we want to target.  I just so happen to have one in Azure right here: - - -`$TargetResGroup = 'nrdtste' -$VMName = 'ctrxeusdbnp01' -$VM = Get-AzureRmVM -ResourceGroupName $TargetResGroup -Name $VMName -`Now that we have our VM object, we're going to create a hash-table with some configuration items for the DSC Local Configuration Manager on the target system. - - -`$DSCLCMConfig = @{ - 'ConfigurationMode' = 'ApplyAndAutocorrect' - 'RebootNodeIfNeeded' = $true - 'ActionAfterReboot' = 'ContinueConfiguration' -} -`Once we have all of this, we can now go ahead and register our target node in Automation DSC using the Register-AzureRmAutomationDscNode command. - - -`Register-AzureRmAutomationDscNode -AzureVMName $VM.Name -AzureVMResourceGroup $VM.ResourceGroupName -AzureVMLocation $VM.Location -AutomationAccountName $AutoAcct.AutomationAccountName -ResourceGroupName $AutoAcct.ResourceGroupName @DSCLCMConfig -`You might note with this command that you can also assign it a configuration as you register the node.  However, I've had occasional issues with this method.  So we're going to go ahead and register the node first, then assign the configuration.  As another note, while the system is being registered, the command will hold your session until it returns a success or failure.  So grab another cup of coffee and enjoy it for a few minutes while we wait. -![](https://powershell.org/wp-content/uploads/2017/09/VMregistered-300x123.jpg) -**Apply a Configuration** -Now we can see our machine has registered successfully.  But if we run the Get-AzureRmAutomationDscNode command, we can see that the NodeConfigurationName property is empty.  So let's fix that. -![](https://powershell.org/wp-content/uploads/2017/09/ConfigEmpty-300x76.jpg) -What we need to do is capture the configuration we want to apply, so we do this by grabbing it with Get-AzureRmAutomationDscNodeConfiguration.  Then, we'll capture the target DSC endpoint with the Get command we previously used, and cast both objects to our Set-AzureRmAutomationDscNode command to apply the configuration to the appropriate node. - - -`$Configuration = Get-AzureRmAutomationDscNodeConfiguration -AutomationAccountName $AutoAcct.AutomationAccountName -ResourceGroupName $AutoAcct.ResourceGroupName -Name 'CompositeConfig.webServer' -$TargetNode = Get-AzureRmAutomationDscNode -Name $VM.Name -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -Set-AzureRmAutomationDscNode -Id $TargetNode.Id -NodeConfigurationName $Configuration.Name -AutomationAccountName $AutoAcct.AutomationAccountName -ResourceGroupName $AutoAcct.ResourceGroupName -Verbose -Force -`After a couple of seconds, we can see that the configuration has been assigned to our node.  Once the LCM hits it's next review cycle, it'll pick up the configuration and start applying: -![](https://powershell.org/wp-content/uploads/2017/09/NodeConfigd-300x96.jpg) -We can check on the status of our target node by using the Get-AzureRmAutomationDscNodeReport command like so to get some useful information: - - -`Get-AzureRmAutomationDscNodeReport -NodeId $TargetNode.Id -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -Latest -`And it will output some pretty useful information. -![](https://powershell.org/wp-content/uploads/2017/09/PSReport-300x139.jpg) -**Azure Automation DSC Reports** -This is where I have to admit that the UI really shines.  You can see all of your systems at a glance, with what configuration is assigned and it's current state. -![](https://powershell.org/wp-content/uploads/2017/09/Report1-300x91.jpg) -Furthermore, you can actually drill down through the nodes to see what resources are being applied, what their dependencies are, and what the state of the particular configuration item is. -![](https://powershell.org/wp-content/uploads/2017/09/Report2-300x282.jpg) -There is a wealth of data that you can find here in an easy to read dashboard.  Furthermore, you can connect this to a Log Analytics instance (or other products that support restful API), and ship it up for alerting and more dashboarding. -**Connecting to Log Analytics** -So connecting your Azure Automation DSC is pretty straightforward.  To be able to use it, you need to have an OMS tier that includes the Automation and Control offering to start.  If you do, then all you have to do is follow a couple of simple commands. -First, we have to get the resourceIds for the Automation Account and the Log Analytics workspace. - - -`#Get the resourceId of the automation account. - $AutoAcctResource = Find-AzureRmResource -ResourceType "Microsoft.Automation/automationAccounts" -ResourceNameContains 'testautoaccteastus2' - #Get the resourceId of the Log Analytics Workspace - $LogAnalyticsResource = Find-AzureRmResource -ResourceType "Microsoft.OperationalInsights/workspaces" -ResourceNameContains 'LWINerd' -`Then we can use those resourceIds to pass to Set-AzureRmDiagnosticSetting and specify our DSCNodeStatus category. - - -`Set-AzureRmDiagnosticSetting -ResourceId $AutoAcctResource.ResourceId -WorkspaceId $LogAnalyticsResource.ResourceId -Enabled $true -Categories "DscNodeStatus" -Verbose -`Then you'll get a return similar to this: - - -`PS C:\Scripts\Presentations\AzureAutomationDSC\ResourcesToUpload> Set-AzureRmDiagnosticSetting -ResourceId $AutoAcctResource.ResourceId -WorkspaceId $LogAnalyticsResource.ResourceId -Enabled $true -Categories "D -scNodeStatus" -Verbose -StorageAccountId : -ServiceBusRuleId : -EventHubAuthorizationRuleId : -Metrics - TimeGrain : PT1M - Enabled : False - RetentionPolicy - Enabled : False - Days : 0 -Logs - Category : JobLogs - Enabled : False - RetentionPolicy - Enabled : False - Days : 0 - Category : JobStreams - Enabled : False - RetentionPolicy - Enabled : False - Days : 0 - Category : DscNodeStatus - Enabled : True - RetentionPolicy - Enabled : False - Days : 0 -WorkspaceId : /subscriptions/f2007bbf-f802-4a47-9336-cf7c6b89b378/resourceGroups/mms-eus/providers/Microsoft.OperationalInsights/workspaces/LWINerd -Id : -/subscriptions/f2007bbf-f802-4a47-9336-cf7c6b89b378/resourcegroups/mms-eus/providers/microsoft.automation/automationaccounts/testautoaccteastus2/providers/microsoft.insights/diagnosticSettings/service -Name : service -Type : -Location : -Tags : -`After a little while, we can check back to our log search and start performing queries and configuring alerts. -![](https://powershell.org/wp-content/uploads/2017/09/DSCReporting-300x154.jpg) -So that's Azure Automation DSC in a nutshell!  But don't worry, I haven't forgotten about Azure DSC's push method.  We'll be talking about that next blog! - - [1]: https://twitter.com/jsnover/status/553249369852358657 diff --git a/content/articles/2017-10-10-using-azure-desired-state-configuration-part-iv.md b/content/articles/2017-10-10-using-azure-desired-state-configuration-part-iv.md deleted file mode 100644 index 00a23bb96..000000000 --- a/content/articles/2017-10-10-using-azure-desired-state-configuration-part-iv.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Using Azure Desired State Configuration – Part IV -authors: - - Will Anderson -date: "2017-10-10T14:00:07+00:00" -categories: - - PowerShell for Admins -aliases: - - /2017/10/using-azure-desired-state-configuration-part-iv/ ---- - -So we've talked about Azure Automation DSC and the extensive reporting we can get from it.  With the pricing as it is, it would be hard to argue as to why you would want to use anything else.  But I'm a completionist, and there may be some edge cases that might come up where you wouldn't be able to use the pull method for configurations.  So let's talk about how you can use Azure DSC to push a configuration to a virtual machine. -So let's get started! -**Publish the Configuration** -In order to push a configuration, we need to publish it to a blob store.  When you use Publish-AzureRmVmDscConfiguration, the command bundles all of the required modules along with the configuration into a .zip file. It does this by pulling the modules from your local machine that you're running the command from, so you'll need to make sure that you have the appropriate modules installed on your system. -First, we'll go ahead and grab a storage account where these binaries can be published.  In the storage account, we have a blob store for our configurations.  This blob store is a private store. - - -`$AutoResGrp = Get-AzureRmResourceGroup -Name 'mms-eus' - $StorAcct = Get-AzureRmStorageAccount -ResourceGroupName $AutoResGrp.ResourceGroupName -Name 'modulestor' -`Now that we have our private store, we're going to publish our configuration using the Publish-AzureRmVMDscConfiguration command. - - -`$DSCBlob = Publish-AzureRmVMDscConfiguration -ConfigurationPath C:\Scripts\Configs\cmdpconfig.ps1 -ResourceGroupName $StorAcct.ResourceGroupName -ContainerName 'dscpushconfig' -StorageAccountName $StorAcct.StorageAccountName -Force - $Archive = $DSCBlob.Split('/') | Select-Object -Last 1 -`As previously mentioned, the command reads your configuration, and then grabs the necessary modules from your local machine and adds them to the package when it publishes the configuration.  This way, the machine has all of the necessary bits to perform the configuration.  You can actually validate this by downloading the packaged .zip file from the blob store and seeing for yourself. -Along with the modules and configuration, you'll also find a dscmetadata.json file that is essentially a manifest of the required modules. -![](https://powershell.org/wp-content/uploads/2017/10/PushPackage-300x136.jpg) -**Install the VM Extension** -Now that our binaries have been published, we can get our target machine and deploy the Azure DSC VM extension to it while assigning the configuration.  When you deploy the extension, it's best to use the latest version available.  If you want to check which version is the latest, you can check out the release history on the [PowerShell Team Blog][1]. - - -`$ArmVmRsg = Get-AzureRmResourceGroup -Name 'nrdtste' - $ArmVm = Get-Azurermvm -ResourceGroupName $ArmVmRsg.ResourceGroupName -Name 'ctrxeusdbnp01' - Set-AzureRmVMDscExtension -ArchiveResourceGroupName $StorAcct.ResourceGroupName -ArchiveBlobName $Archive -ResourceGroupName $ArmVm.ResourceGroupName -ArchiveStorageAccountName $StorAcct.StorageAccountName -ArchiveContainerName 'dscpushconfig' -Version '2.26' -VMName $ArmVm.Name -ConfigurationName 'CMDPConfig' -Verbose -`Like with Azure Automation DSC, when you register the VM extension, your PowerShell session will be held open until the extension returns a success or failure status.  Once it returns, you can check the status of the configuration using Get-AzureRmVmDscExtensionStatus. - - -`PS C:\Users\willa> Get-AzureRmVMDscExtensionStatus -ResourceGroupName $ArmVm.ResourceGroupName -VMName $ArmVm.Name -ResourceGroupName : nrdtst3 -VmName : ctrxeusdbnp01 -Version : 2.26 -Status : Provisioning succeeded -StatusCode : ProvisioningState/succeeded -Timestamp : 10/9/2017 1:12:22 PM -StatusMessage : DSC configuration was applied successfully. -DscConfigurationLog : {[2017-10-09 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] The operation 'Get-WindowsFeature' succeeded: Server-Gui-Shell, [2017-10-09 - 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Test ] [[WindowsFeature]RemoveUI] in 9.5980 seconds., [2017-10-09 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ Start Set - ] [[WindowsFeature]RemoveUI], [2017-10-09 13:11:19Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Uninstallation started......} -`If you want to dive a little deeper, we can of course grab the specific DscConfigurationLog information: - - -`PS C:\Users\willa> (Get-AzureRmVMDscExtensionStatus -ResourceGroupName $ArmVm.ResourceGroupName -VMName $Armvm.Name).DscConfigurationLog -[2017-10-09 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] The operation 'Get-WindowsFeature' succeeded: Server-Gui-Shell -[2017-10-09 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Test ] [[WindowsFeature]RemoveUI] in 9.5980 seconds. -[2017-10-09 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ Start Set ] [[WindowsFeature]RemoveUI] -[2017-10-09 13:11:19Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Uninstallation started... -[2017-10-09 13:11:19Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Continue with removal? -[2017-10-09 13:11:19Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Prerequisite processing started... -[2017-10-09 13:11:24Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Prerequisite processing succeeded. -[2017-10-09 13:12:21Z] [WARNING] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] You must restart this server to finish the removal process. -[2017-10-09 13:12:21Z] Settings handler status to 'transitioning' (C:\Packages\Plugins\Microsoft.Powershell.DSC\2.26.1.0\Status\0.status) -[2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Uninstallation succeeded. -[2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Successfully uninstalled the feature Server-Gui-Shell. -[2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] The Target machine needs to be restarted. -[2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Set ] [[WindowsFeature]RemoveUI] in 62.7090 seconds. -[2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Resource ] [[WindowsFeature]RemoveUI] -[2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: [] A reboot is required to progress further. Please reboot the system. -[2017-10-09 13:12:21Z] [WARNING] [ctrxeusdbnp01]: [] A reboot is required to progress further. Please reboot the system. -[2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Set ] -[2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Set ] in 74.8080 seconds. -[2017-10-09 13:12:21Z] [VERBOSE] Operation 'Invoke CimMethod' complete. -[2017-10-09 13:12:21Z] [VERBOSE] Time taken for configuration job to complete is 75.071 seconds -`As you can see, the configuration is complete pending a reboot.  This brings us to a few of the caveats associated with the push method for Azure DSC. - - * Unfortunately, unlike with the Register-AzurRmAutomationDscNodeConfiguration command available for Azure Automation, you cannot currently configure the LCM direct from the command.  Instead, you'll want to add a LocalConfigurationManager block to your top level config to set any attributes for the LCM. - * As the system is downloading the packaged modules and configuration files, the mof file is configured locally on the machine.  While the current.mof file is encrypted, there is a copy of the mof that is generated in the C:\Packages\Plugins\Microsoft.Powershell.DSC\ -\\ directory.  You'll want to be careful as to what you're passing in plain text in that regard. - * You can retrieve the DscConfigurationLog data for validation of your configs and the state of the machines, but this process requires automation and can take some time to compile. - -So now we've explore Azure Desired State Configuration using the available push and pull methods.  And we've explored the rich reporting capabilities that are available to you in Azure Automation DSC.  It's been a long journey, but I hope you've found this content to be useful to you! -Until next time! - - [1]: https://blogs.msdn.microsoft.com/powershell/2014/11/20/release-history-for-the-azure-dsc-extension/ diff --git a/content/articles/2017-10-24-powershell-devops-summit-2018-schedule.md b/content/articles/2017-10-24-powershell-devops-summit-2018-schedule.md deleted file mode 100644 index 66bfeff46..000000000 --- a/content/articles/2017-10-24-powershell-devops-summit-2018-schedule.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: PowerShell + DevOps Summit 2018 schedule -authors: - - Richard Siddaway -date: "2017-10-24T20:15:26+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2017/10/powershell-devops-summit-2018-schedule/ ---- - -The schedule for the 2018 Summit still needs a little bit of polishing to finish it but it's taking shape. I've started releasing information on sched.com that we're using for all our scheduling needs for the Summit. The one and only truth regarding the sessions and their times can be found at [https://powershelldevopsglobalsummit2018.sched.com/ ][1] -I'll be adding sessions over the next few days so keep checking. -I'm really excited about the schedule for the 2018 Summit. We'll have 4 rooms for sessions with many of your favourite speakers returning and many new speakers which is really good to see. The Community Lightning Demos return by popular acclaim and we'll be running an Iron Scripter competition as well. The PowerShell Team will be presenting all day Monday and at other sessions through out the Summit. -Registration opens 1 November and once you're registered through eventbrite your information will be sync'd to sched.com so that you can access the schedule and use the scheduling app. - - [1]: https://powershelldevopsglobalsummit2018.sched.com/ diff --git a/content/articles/2017-10-26-putting-it-all-out-there.md b/content/articles/2017-10-26-putting-it-all-out-there.md deleted file mode 100644 index 1c1d147e4..000000000 --- a/content/articles/2017-10-26-putting-it-all-out-there.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Putting it all out there -authors: - - Liam Kemp -date: "2017-10-26T11:11:31+00:00" -categories: - - PowerShell for Admins -aliases: - - /2017/10/putting-it-all-out-there/ ---- - -Yesterday I pushed my first real project to a public repository on GitHub. It's small right now though I hope to flesh it out over time, and it is very niche, but I hope it helps others who come across it. Regardless I'm proud of it. If you like, you can check it out [here,][1] I'd love your feedback, but that's not the reason I'm writing this. -I'm here to tell you _**why**_ I did it. -You see, I'm a private kind of person. I don't often put myself out there for fear of embarrassing myself. I have always been worried that I might end up looking silly. That someone who knows more than I do, or knows something differently than I do would catch me out -  and if that happened, I couldn't put the genie back in the bottle. Back in school, I wouldn't put my hand up even if I knew the right answer, just in case. I was ensnared by Impostor Syndrome, it was crippling, and it had to change. -So, what did I do? I started a [blog][2], and in almost a year I've managed to get around 10-12 posts up. It isn't much nor is it pretty, and sometimes I worry too much about the time in between posts, and rush to put something up which is not always perfect. But I'm happy to be doing it all the same. Mostly, I try to post about topics and problems that I haven't been able to find complete information around elsewhere. -I've started spending more time sharing and interacting on Twitter and LinkedIn, rather than just reading and clicking links. I've  even been followed and liked a few times. Lastly, I've been spending more time on these forums and elsewhere, helping out where I can. -Overall, I feel better in myself, and have a greater level of confidence in my skills, knowledge, and what I can bring to the table. In the end, that is what led me to feeling good enough to publish my project. I can't say that I'm completely over Impostor Syndrome and I don't think I ever will be. I can say that I don't feel it as often as I used to, and I can use it to drive myself to be better. -When we are presented with a problem, we often go looking for answers from others. Flip that around and it means that if you have solved a problem, there is probably someone else looking for the answer and would really appreciate your experience. So why not put it out there? - - [1]: https://github.com/liampkemp/Enabler - [2]: https://itcloudpro.net diff --git a/content/articles/2017-11-01-registration-is-open.md b/content/articles/2017-11-01-registration-is-open.md deleted file mode 100644 index fa665f77c..000000000 --- a/content/articles/2017-11-01-registration-is-open.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Registration is open -authors: - - Richard Siddaway -date: "2017-11-01T08:54:39+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2017/11/registration-is-open/ ---- - -Registration for the 2018 PowerShell + DevOps Global Summit is open. -These are the important links you'll need: -[Summit information ][1] -[Registration][2] -[Agenda][3] - - - [1]: https://powershell.org/summit/ - [2]: https://www.eventbrite.com/e/powershell-devops-global-summit-2018-registration-32452427083 - [3]: https://powershelldevopsglobalsummit2018.sched.com/ diff --git a/content/articles/2017-11-10-powershell-devops-global-summit-2018-scholarship-recipient.md b/content/articles/2017-11-10-powershell-devops-global-summit-2018-scholarship-recipient.md deleted file mode 100644 index 02305ec0c..000000000 --- a/content/articles/2017-11-10-powershell-devops-global-summit-2018-scholarship-recipient.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: PowerShell + DevOps Global Summit 2018 Scholarship Recipient -authors: - - Don Jones -date: "2017-11-10T15:45:52+00:00" -categories: - - PowerShell for Admins -aliases: - - /2017/11/powershell-devops-global-summit-2018-scholarship-recipient/ ---- - -Congratulations to Andrew Pla, winner of our PowerShell + DevOps Global Summit 2018 scholarship. Andrew submitted a stellar application to our review panel, and perfectly fit our profile for someone who’s just peeking out of the “beginner” realm, and who’s demonstrably used PowerShell to help bootstrap their IT career. If you’re attending Summit, be sure to keep an eye out for Andrew and say hi! diff --git a/content/articles/2017-11-19-dealing-with-redundancy-in-a-it-world.md b/content/articles/2017-11-19-dealing-with-redundancy-in-a-it-world.md deleted file mode 100644 index 7b1703ac1..000000000 --- a/content/articles/2017-11-19-dealing-with-redundancy-in-a-it-world.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Dealing with redundancy in an IT world -authors: - - Alex Aymonier -date: "2017-11-19T21:22:39+00:00" -categories: - - PowerShell for Admins -aliases: - - /2017/11/dealing-with-redundancy-in-a-it-world/ ---- - -So you’re working for a company that’s going well (or not) and you start to hear rumours of parts of the business being sold off, the project you’re working on is being pulled or worse the business is closing down. Before you know it your x amount of years at said company have come to an end and you’re now redundant. The following [Dilbert comic][1] is a possible scenario you may have to deal with. -How you deal with this new found freedom is completely up to you? You can go on a big holiday, have some time off doing things around the house, buy that 2 seater car you’ve always dreamed of owning or go straight back into the workforce using the redundancy (if you got any) to pay off a chunk of your mortgage. Whatever you decide to do, at some point (unless you are retiring) you will need to go job hunting again. -In my situation I was being made redundant and leaving a company I had worked for, for the last 7 ½ years as a senior system engineer. I have a wife and 2 children so I really just wanted to get back in the workforce as soon as I could. The mortgage was not going to pay itself off. -As soon as I heard that I had a month left of work I took out my CV and had to try to remember each position I had occupied over the last 7 ½ years and what my achievements were. And you know what, that is not an easy task. When you’re working and you complete an achievement, you always think to yourself “If ever I have to update my CV ill add this to it”. Problem is 5 years down the line you won’t remember that “good piece of work” and you’ll struggle to put some of the great achievements down on paper for your future employer. -After several attempts at updating my CV, it was ready. Now time to start looking for work. My main skills are in Citrix technologies, PowerShell, Windows Server Operating Systems and my company’s proprietary cloud offering. In my job, I spent nearly every day learning something new and applying it to my job but I didn’t bother with getting certified. When job hunting, the first hurdle I came across was my lack of skills that the market place wanted. For nearly every senior engineer role out there, every man and his dog wanted Azure with 0365 and/or AWS. So any roles that looked good to me were out of my reach because I didn’t have those skills/qualifications. -I found a couple of roles I really liked the look of and naively sent off my CV to those 2 roles only. There were a few other jobs that looked good but I really wanted one of these 2 roles so didn’t apply for anymore. 2 weeks passed and nothing back so I chased them up and still nothing. Oh well guess they didn’t like my CV so I’ll start looking again. And again I repeated the same process. And again the same outcome. I then started do some reading on recruitment sites and how recruiters get so many CVs that on average they will look at yours for 6 second before choosing to read more or toss it. -By now I had finished work and a new job was not in sight, slightly panicking now. I revamped my CV a little, moving my core technical skills to the top of the front page (they were originally at the bottom of the back page) and applied for every job under the sun I liked the look of. I hit every job advertising site I could find and also sent my CV to every tech job agency I could find. If I really liked the look of a job I would follow the online application 30 minutes later with a phone call to get that connection with the job poster and to sell myself (which I hate doing). I updated my LinkedIn page and applied via LinkedIn to jobs on there. I started to use LinkedIn to make contact and catch up with people I knew to see if they had any positions in their companies. I actually found this to be the most successful way to get in to see companies. -Through my contacts I had some interviews and even had a job offer with one tech firm. Problem was they had come in with an offer that was 20% below my previous wage. Do I take it to tie me over the Christmas period and get the money coming in again or do I wait for a possible better job that might show up tomorrow? If I took the job and something better came along would I then rescind that offer and my name would then be mud at that company for anything in the future. I decided not to take the job as it would have meant a major financial shuffle for the family and big cutbacks. -That same afternoon I contacted another friend, as his company had quite a few positions open due to expansion. He put me in contact with their Talent Manger. The following day I had an interview and that evening I had a job offer which I took. -The main take away I hope you get from this is, if this ever happens is to ensure your CV is always up to date. Make sure if and when people leave your present company that you keep some sort of contact with them because you never know when you might need to call on them or you might be able to help them out one day. Keep an eye on the job market and what the market is looking for and get skilled up and/or certified in those areas. If you’re not on LinkedIn get a presence on there, those contacts can be invaluable too. When Job hunting don’t just apply for that one dream job (especially if you’re out of work) hit any one of them that takes your fancy, you are better off having 2 or 3 offers on the table than nothing at all. Last thing to only take the offer if you really want the job, listen to your gut instinct. -As it happens the new company I now work at is going to be one of the 1st in Australia to roll out Azure Stack. So I will be learning and get certified in Azure which better place me for my future. - - [1]: http://dilbert.com/strip/1996-05-14 diff --git a/content/articles/2017/01/_index.md b/content/articles/2017/01/_index.md new file mode 100644 index 000000000..7f105be81 --- /dev/null +++ b/content/articles/2017/01/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from January 2017" +description: "PowerShell.org Articles published in January 2017." +--- diff --git a/content/articles/2017/01/community-lightning-demos/index.md b/content/articles/2017/01/community-lightning-demos/index.md new file mode 100644 index 000000000..fe9aa2356 --- /dev/null +++ b/content/articles/2017/01/community-lightning-demos/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2017-01-24-community-lightning-demos/ +title: Community Lightning Demos +authors: + - Richard Siddaway +date: "2017-01-24T21:07:51+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2017/01/community-lightning-demos/ +--- + +We are continually evolving the content we present at the PowerShell Summit. This year we're bringing back something that was a feature of the early PowerShell Deep Dives and Summits - the Community Lightning Demos. We have a session set aside on Wednesday afternoon for this. Timescales will depend on the number of people wanting to show something. +In the words of PowerShell MVP Warren Frame who's organising this for us: + +> Ever wanted to present at Summit but were unsure if you could? This is your opportunity to present something you've discovered to your peers in the PowerShell community. A code trick, or tip, a new module you've created, an open source module or a feature of a cmdlet that's relatively unknown.. The list goes on and on. Anything PowerShell, or DevOps related that you think is cool and that will interest other people is a suitable topic. We're looking for 5-10 minute demos. Something you've done, discovered, solved or run up against. This is your opportunity to "give back" to our community by sharing your knowledge. Make sure its something you can present from your laptop and that you don't need extensive Internet access. A sign up sheet will be available Sunday, Monday and Tuesday. We just need your name and topic. Who knows you may be asked to present a full session at the following Summit. Some of our best speakers started in the Lightning Demos sessions of past events. + +This is your opportunity to start presenting to a knowledgeable and appreciative audience. In past events we've had some amazing things come to light - things the PowerShell team didn't realise about PowerShell. If you have something to share please consider signing up for this. diff --git a/content/articles/2017/01/devops-a-career-changer/index.md b/content/articles/2017/01/devops-a-career-changer/index.md new file mode 100644 index 000000000..905991471 --- /dev/null +++ b/content/articles/2017/01/devops-a-career-changer/index.md @@ -0,0 +1,447 @@ +--- +url: /articles/2017-01-13-devops-a-career-changer/ +title: "DevOps: A Career Changer" +authors: + - Missy Januszko +date: "2017-01-13T16:02:18+00:00" +categories: + - PowerShell for Admins +aliases: + - /2017/01/devops-a-career-changer/ +--- + +Once upon a time, there was this woman at a TechMentor conference a few years ago, sitting in the front of the room during the “Don and Jason" show, a not-quite-scripted discussion on various “lightning” topics. + + + +The topic at that moment was DevOps, and this woman was asking for advice on being an advocate for DevOps in her company. + + + +Her company had just been acquired, she explained, which meant that the atmosphere was ripe for change, but the culture of the company they had been acquired from was very change-resistant. + + + +Among other questions, she wanted to know the secrets of getting Dev and Ops to not only work together, but get along. + + + +And after a short discussion it was pointed out that “if you feel you can’t affect change on your company, perhaps you should 'change your company'”. + + + +To which she responded, “That will never happen.” + + + +After all, she had been at the same company for nearly 20 years. + + + +The company had been acquired twice, but really, she had been in the same place for nearly half her life. + + + + + + +Yes, that woman is me, and this is the story of how “that will never happen” changed into “happened”. + + + + +I returned to TechMentor in 2016. + + + +I had spent some time in the Desired State Configuration (DSC) classes the previous year, and was astounded by DSC and its capabilities, but I hadn’t done anything with it since taking the classes at the previous conference. + + + +So, once again I sat in the DSC classes and tried to absorb as much material as possible. + + + +The content was different – WMF 5.0 had recently been released, the pull server demo was brand-new, and I began to wonder what I could really do with DSC if I really put some effort into it. + + + +After all, I had some servers that were in need of a technical refresh that year and wondered if it would be possible to use DSC to configure them – both from a technical and a political point of view. + + + + + + +After returning from TechMentor, within a month, I saw a posting for DevOps Camp. + + + + + +“Experts Only”, the brochure read. + + + +I wondered if I could “ramp up” my skills in 4 months enough to attend and not be a lost camper. + + + +I discussed it with a friend who is also a former colleague and fellow PowerShell enthusiast. + + + +“But we’re not experts,” he reminded me. + + + +And I put out the ultimate challenge – “Every year we talk about going to PowerShell Summit, and every year we say the same thing. + + + +‘But we’re not experts!’ + + + +Well, if not now, when? + + + +And how do we get there?” + + + +The gauntlet was thrown, and we went about the daunting task of learning DSC in 4 months. + + + + +I had a full-time job, so I started working on DSC at night. + + + +I watched the MVA videos on the weekends, 1-2 chapters a weekend, and spent the week making up my own labs to go along with whatever chapter of the MVA I was on. + + + +I tried my best to come up with experiments that would not only prove to myself that I understood the material, but that would be useful in my day job. + + + +My friend and I met once a week at a local Starbucks to discuss what we had learned that week, and what stumbling blocks we had come across. + + + + + + +Shortly after, I made the case to research DSC not just for my own learning, but for work use. + + + +I was permitted to work on it during work hours. + + + +I learned, and I stumbled. + + + +I made mistakes and I shed blood. + + + +I picked experiments that were supposed to be code snippets that I could use in “real server configurations” and quickly learned many lessons. + + + +Like how installing WMF 5.0 via DSC is probably the worst first attempt at creating a config. + + + +Or how turning off TLS 1.0 is the worst second attempt, thanks to the fact that the pull server at the time required it to be on. + + + +I went a few rounds with the certificate authority trying to set up a certificate template for encrypting and decrypting credentials in MOF files. + + + +For a long time, the certificate authority won, until finally, at last, I figured out the missing element in the template with the help of newly-updated MSDN documentation. + + + +I did battle with an environmental issue that made my LCM “uncooperative”, and for the record, I lost that battle and the root cause still remains a mystery, though it was likely a combination of certificate revocation policies and ever-changing proxy configurations. + + + +But despite my struggles, I learned valuable lessons from each and every one of them. + + + + + + +I spent two months working on mastering the concepts from the two MVA videos, and due to the environmental issues in the development environment, the second two months building out an “automated” lab that could be built on my laptop – a Dell XPS 13 with 8GB of RAM and 80GB or less of free hard drive space. + + + +I borrowed a USB drive for the server images, and built out a lab with an authoring box, a single DC/Certificate authority, and a pull server, the intent of which was to give me a pristine place to develop configs without getting bogged down in whatever issues I was encountering in the dev environment. + + + + +Then I went to DevOps Camp. + + + +And from my perspective, it was a big success. + + + +I wasn’t lost. + + + +I could follow along with the sessions, and I had a great time learning about the release pipeline and other tools and concepts that would take my DevOps skills and automation to the next level. + + + +Some of my code even got shown during the camp, specifically, in the session on building an automated lab, the config for the DC that I built for my laptop lab was used in the demo. + + + +I returned from DevOps camp full of information and also maybe a little overwhelmed with the things I wanted to try and play with when I returned. + + + +I almost didn’t quite know what to do next. + + + + + + + + +I changed focus a little bit after that. + + + +I wanted to start socializing PowerShell and DSC more. + + + +I wanted to converse with people who were using it in production environments. + + + +I started getting involved in the PowerShell community – writing an occasional blog, meeting members of the PowerShell community and PowerShell team at Ignite, joining some Slack channel discussions, and submitting a few topics for the PowerShell Summit. + + + +And as I was doing these things, I started wondering if I was in the wrong place. + + + +My primary responsibility was infrastructure, specifically Active Directory, and while my newfound passion for DevOps was well-received at work, it felt out of place with my “day job”. + + + + +And then, one day in mid-October, an opportunity presented itself. + + + +It was one that would require me to think, to reflect, and most of all, move out of that comfort zone that 18 months ago I was so adamant that I would never leave. + + + +If I were to act on this opportunity, it would require me to leave my company of 20+ years. + + + +But was I ready? + + + +Would what kept me there all those years continue to keep me there? + + + + +I began to seek out advice. + + + +I spoke to family, friends, colleagues, mentors, and my financial planner. + + + +Most were encouraging, some thought I was nuts. + + + +Sometimes even I thought I was nuts. + + + +Leave my comfort zone? + + + +Leave the people that I had cultivated friendships with inside and outside work? + + + +My former and present co-workers always said that the thing that keeps them there is the people that they work with, and that’s no lie. + + + + + + +The financial planner didn’t think I was nuts, and helped come up with a plan. + + + +I listened intently to any and all advice given by all, but ultimately the decision was mine, and I had to figure out if I had the guts to move on. + + + +Only 18 months ago, I was stating with authority to Don Jones that “That will never happen.” + + + +But yet, now this thing that started out as just wanting to learn more about DSC and DevOps had grown from a spark into a fire. + + + +And the opportunity to change myself and my career was presenting itself on a silver platter. + + + + + + +I made the decision to accept the opportunity – and that’s exactly what it was – an opportunity that I couldn’t pass up. + + + +I doubt that I would have made the same decision had I not spent the last year working on improving my skill set. + + + +My life is about to change in ways I never would have dreamed possible a year ago. + + + +I’m scared shitless of the future, but I’m also eagerly anticipating the next chapter. + + + +I’m excited about all the things that I could possibly do. + + + +I’m jumping off the ledge into the abyss, and hoping for a soft landing. + + + + +My last day is looming as I write this, and I’m filled with constantly-changing emotions. + + + +Saying good-bye to people I have known nearly half my life is HARD. + + + +On those days, I’m sad, after all, they are what has kept me here and sane all these years. + + + +The good part is that I’m not technically going anywhere, so I can see my friends any time I want, just not within the confines of the corporate walls. + + + +The opportunity to keep in touch and socialize is still there. + + + + +But the remainder of the time I’m excited – excited to try something new. + + + +I’ve finally decided to say out loud that I am going to go independent. + + + +It’s risky – I’m relatively unknown, but I have some exciting things to work on, like working on the DSC book and speaking at PowerShell Summit. + + + +I have a backlog of articles to read and videos to watch and will be grateful for the flexibility in my time to do all these things. + + + +I’m nervous about the future but my confidence in my abilities has grown so much over the last year. + + + + +I’m worried about the financial aspects of my decision. + + + +This is probably first and foremost in my mind, but luckily, I have a cushion that makes the risk of making the decision to go independent somewhat less. + + + +It still concerns me, though. + + + +It’s odd not to have to count working hours, or justify or categorize what I spent my time on that day. + + + +If I want to spend two hours writing this article – I can. + + + +I will probably spend the next year just figuring out how to get into a daily routine and making sure that the things on my to-do list get done. + + + + + + +Writing down how I got here has been an interesting trip down memory lane. + + + +I wish I had started writing down my journey when it started, but I recall that it started out with a desire to learn and a challenge to learn for my own personal knowledge. + + + +As I went along, I realized that to be happy and challenged and really expand my knowledge, capabilities, and skills, that it was time to move on. + + + + + + +I leave you with a quote, one that I saw while out Christmas shopping, that rang true for me. + + + + + + +“Do not be afraid of change. + + + +Be afraid of not changing.” diff --git a/content/articles/2017/01/pester-parameters-and-hashtable-fun/index.md b/content/articles/2017/01/pester-parameters-and-hashtable-fun/index.md new file mode 100644 index 000000000..4af0fc4c1 --- /dev/null +++ b/content/articles/2017/01/pester-parameters-and-hashtable-fun/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2017-01-06-pester-parameters-and-hashtable-fun/ +title: Pester – Parameters and Hashtable Fun! +authors: + - WeiYen Tan +date: "2017-01-06T07:45:36+00:00" +categories: + - PowerShell for Admins + - Training + - Tutorials +aliases: + - /2017/01/pester-parameters-and-hashtable-fun/ +--- + +I have written a short excerpt on how to pass parameters from an object to a Pester test. I have turned this into a function: Invoke-POVTest. +The function is primarily for operational validation tests, where you might have a single operational test but you need to test multiple cases. (Sorry, I am not quite sure if I described it properly). +I'll be interested in any feedback. + +Link to blog post [here][1]. + + + [1]: https://weiyentanitjournal.com/index.php/2017/01/04/pester-parameters-and-hashtable-fun/ diff --git a/content/articles/2017/01/summit-2017-seats-going-fast/index.md b/content/articles/2017/01/summit-2017-seats-going-fast/index.md new file mode 100644 index 000000000..e838411fa --- /dev/null +++ b/content/articles/2017/01/summit-2017-seats-going-fast/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2017-01-28-summit-2017-seats-going-fast/ +title: Summit 2017–seats going fast +authors: + - Richard Siddaway +date: "2017-01-28T20:19:21+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2017/01/summit-2017-seats-going-fast/ +--- + +Seats a the PowerShell Summit -  [https://eventloom.com/event/home/summit2017][1] – are going fast. +We’ve sold over 70% of the seats – they’re current 55 seats left split between 4-day and 3-day passes. The 3-day passes don’t go on sale until 12 February and we’ll be moving 3-day to 4-day as sales happen between now and then. We have a number of sales in the pipeline that will reduce the number of available seats as well. +We are at maximum capacity for the venue – and probably for the event in its present format. +We are expecting a rapid sell off of the remaining seats when open registration of 3-day passes. We don’t maintain any sort of waiting list and when the seats are gone – they’re gone. +If you are thinking of attending the 2017 Summit I’d advise you to get your seat booked quickly – I wouldn’t be at all surprised if we’d sold out by the end of February. + + [1]: https://eventloom.com/event/home/summit2017 "https://eventloom.com/event/home/summit2017" diff --git a/content/articles/2017/02/_index.md b/content/articles/2017/02/_index.md new file mode 100644 index 000000000..84dd8b6e3 --- /dev/null +++ b/content/articles/2017/02/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from February 2017" +description: "PowerShell.org Articles published in February 2017." +--- diff --git a/content/articles/2017/02/join-us-in-thanking-ed-teresa-wilson-at-summit-2017/index.md b/content/articles/2017/02/join-us-in-thanking-ed-teresa-wilson-at-summit-2017/index.md new file mode 100644 index 000000000..34f6ee10b --- /dev/null +++ b/content/articles/2017/02/join-us-in-thanking-ed-teresa-wilson-at-summit-2017/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2017-02-16-join-us-in-thanking-ed-teresa-wilson-at-summit-2017/ +title: Join Us in Thanking Ed & Teresa Wilson at Summit 2017 +authors: + - Don Jones +date: "2017-02-16T18:35:52+00:00" +categories: + - PowerShell Summit +aliases: + - /2017/02/join-us-in-thanking-ed-teresa-wilson-at-summit-2017/ +--- + +We're pleased and proud to announce that Microsoft's "The Scripting Guy," Ed Wilson, and the wonderful Scripting Wife, Teresa Wilson, have agreed to join us at PowerShell + DevOps Global Summit 2017 (which as of this writing is almost sold out). They recently announced their retirement, so we wanted to bring them out for one last Summit so we could all wish them a comfortable and relaxed time! This'll likely be one of our last chances to grab a photo and a hug, so be sure to do so! diff --git a/content/articles/2017/02/powershell-summit-2017-sold-out/index.md b/content/articles/2017/02/powershell-summit-2017-sold-out/index.md new file mode 100644 index 000000000..d367d9015 --- /dev/null +++ b/content/articles/2017/02/powershell-summit-2017-sold-out/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2017-02-09-powershell-summit-2017-sold-out/ +title: PowerShell Summit 2017 – sold out +authors: + - Richard Siddaway +date: "2017-02-09T11:41:03+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2017/02/powershell-summit-2017-sold-out/ +--- + +We sold the last seat for the 2017 Summit - https://eventloom.com/event/home/summit2017 yesterday. +If, and its a very big if, more seats become available we'll notify you though the event web site and here on powershell.org diff --git a/content/articles/2017/02/summit-2017-agenda-program-guide-online/index.md b/content/articles/2017/02/summit-2017-agenda-program-guide-online/index.md new file mode 100644 index 000000000..5af5f9545 --- /dev/null +++ b/content/articles/2017/02/summit-2017-agenda-program-guide-online/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2017-02-08-summit-2017-agenda-program-guide-online/ +title: Summit 2017 Agenda & Program Guide Online +authors: + - Don Jones +date: "2017-02-08T19:09:20+00:00" +categories: + - PowerShell Summit +aliases: + - /2017/02/summit-2017-agenda-program-guide-online/ +--- + +We've posted the first draft of the Program Guide, including the Agenda, for PowerShell + DevOps Global Summit 2017. You'll find it linked near the top of the [Registration Page][1]. If you're attending Summit, please check back a few days before the event to download the final version. We'll have some hardcopies on site, but you'll want to have the PDF downloaded to your pocket computer for easy reference. +The Guide includes a bunch of tips and information beyond the Agenda, so we heartily recommend that everyone take the time to peruse its 12 pages of goodness. + + [1]: https://eventloom.com/event/home/summit2017 diff --git a/content/articles/2017/02/summit-2017-badge-question/index.md b/content/articles/2017/02/summit-2017-badge-question/index.md new file mode 100644 index 000000000..ca26ac995 --- /dev/null +++ b/content/articles/2017/02/summit-2017-badge-question/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2017-02-01-summit-2017-badge-question/ +title: Summit 2017 – Badge Question +authors: + - Don Jones +date: "2017-02-01T15:16:52+00:00" +categories: + - PowerShell Summit +aliases: + - /2017/02/summit-2017-badge-question/ +--- + +We're brainstorming ideas to have more professional, collectible attendee badges for Summit, while also reducing time at check-in on-site. If you're attending or have thought about it, please take a moment to answer [this one-question survey][1]. Thanks! + + [1]: http://674004.polldaddy.com/s/powershell-summit-badges diff --git a/content/articles/2017/02/three-seats-left/index.md b/content/articles/2017/02/three-seats-left/index.md new file mode 100644 index 000000000..91bb28351 --- /dev/null +++ b/content/articles/2017/02/three-seats-left/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2017-02-23-three-seats-left/ +title: Three seats left +authors: + - Richard Siddaway +date: "2017-02-23T10:28:44+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2017/02/three-seats-left/ +--- + +There are currently three (3) seats left for the 2017 PowerShell and DevOps Summit. First come first served - when they gone that's definitely it as we're at capacity. Registration at - https://eventloom.com/event/home/summit2017 diff --git a/content/articles/2017/02/you-an-still-get-into-powershell-devops-global-summit-2017/index.md b/content/articles/2017/02/you-an-still-get-into-powershell-devops-global-summit-2017/index.md new file mode 100644 index 000000000..91d43eeb2 --- /dev/null +++ b/content/articles/2017/02/you-an-still-get-into-powershell-devops-global-summit-2017/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2017-02-09-you-an-still-get-into-powershell-devops-global-summit-2017/ +title: You an still get into PowerShell + DevOps Global Summit 2017! +authors: + - Don Jones +date: "2017-02-09T16:04:56+00:00" +categories: + - PowerShell Summit +aliases: + - /2017/02/you-an-still-get-into-powershell-devops-global-summit-2017/ +--- + +After selling out in record time, we've worked with our event venue to rearrange how we're using the space - and, as a result, we've been able to open additional seats for attendees! YAY! Hop on over to the [registration website][1] soon, because these puppies won't last. + + [1]: https://eventloom.com/event/home/summit2017 diff --git a/content/articles/2017/03/_index.md b/content/articles/2017/03/_index.md new file mode 100644 index 000000000..e4db99164 --- /dev/null +++ b/content/articles/2017/03/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from March 2017" +description: "PowerShell.org Articles published in March 2017." +--- diff --git a/content/articles/2017/03/community-lightning-demos-call-for-proposals/index.md b/content/articles/2017/03/community-lightning-demos-call-for-proposals/index.md new file mode 100644 index 000000000..a48bf64c3 --- /dev/null +++ b/content/articles/2017/03/community-lightning-demos-call-for-proposals/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2017-03-22-community-lightning-demos-call-for-proposals/ +title: Community Lightning Demos – Call for Proposals +authors: + - pscookiemonster +date: "2017-03-22T15:06:45+00:00" +categories: + - PowerShell Summit +aliases: + - /2017/03/community-lightning-demos-call-for-proposals/ +--- + +If you've been to a PowerShell Summit, chances are you've seen the awesome lightning demos put on by the PowerShell team members. It's a fun format - each team member gives a quick 5-10 minute demo of something they're working on, one after the other. +In a few weeks, the PowerShell + Devops Global Summit will kick off, with a Community Lightning Demo session scheduled for Wednesday afternoon. We're looking for community members like you to sign up and present! Demo something cool that you've written or used - a module, function, tip, trick, etc. - just keep it under 10 minutes. +If it helps, [here's a longer bit](http://ramblingcookiemonster.github.io/Summit-Lightning-Demos/) on the community lightning demos, including an [example demo recording](https://youtu.be/50Z6vEHVgDg). +Sound interesting? Want to jump on stage for a few minutes and show us something fun? [Sign up now](https://goo.gl/forms/Q8C3hBXTANL9oR433)! Not attending the summit? We'll have recordings for presenters who want to be recorded, and ideally, demo content from everyone. +We'll be looking forward to some awesome demos; hope to see you there! diff --git a/content/articles/2017/03/powershell-summit-2017-last-minute-updates/index.md b/content/articles/2017/03/powershell-summit-2017-last-minute-updates/index.md new file mode 100644 index 000000000..b8e95e009 --- /dev/null +++ b/content/articles/2017/03/powershell-summit-2017-last-minute-updates/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2017-03-27-powershell-summit-2017-last-minute-updates/ +title: PowerShell Summit 2017 – Last-Minute Updates +authors: + - Don Jones +date: "2017-03-27T15:50:16+00:00" +categories: + - PowerShell Summit +aliases: + - /2017/03/powershell-summit-2017-last-minute-updates/ +--- + +Some quick updates as we prepare for Summit in a couple of weeks... + + + * Be sure to keep an eye on the [Summit Forums][1], where you're welcome to ask questions and offer advice. Folks who find themselves unable to attend last-minute often post registration transfer offers there as well. + * Watch the [Summit News Feed][2] for announcements and late-breaking news. We will also have morning announcements at 8:30am in the breakfast rooms on Sunday, Tuesday, and Wednesday - don't miss those, as we have few other ways to communicate late-breaking changes to you. + * When you arrive on-site, [grab the latest Agenda PDF][3] for your mobile device. We've had some last-minute schedule changes that will be reflected therein, and we'll add what we know about scheduled Side Sessions and so forth. We will have printed agendas on site, but due to printing lead times, they'll have one or two out-of-date pieces of info. We are endeavoring to keep that site's electronic schedule updated, as well, so it's also a good place to check. + * Make sure you get on the Alumni mailing list - look for information on-site. + +Because folks keep asking, **yes**, we do record all **breakout sessions,** barring any technical difficulties, and post the recordings on our YouTube channel. We do not live-stream, nor do we record general sessions, side sessions, or other non-breakout content. That's why you wanna be there on-site - and http://PowerShellSummit.org has already been updated with preliminary information for our 2018 event. + + [1]: https://powershell.org/forums/forum/powershell-summit/ + [2]: http://bit.ly/PSHSummitNews + [3]: https://eventloom.com/event/home/summit2017 diff --git a/content/articles/2017/04/_index.md b/content/articles/2017/04/_index.md new file mode 100644 index 000000000..3c36a6b36 --- /dev/null +++ b/content/articles/2017/04/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from April 2017" +description: "PowerShell.org Articles published in April 2017." +--- diff --git a/content/articles/2017/04/colecting-certificates-form-an-enterprise-ca-for-use-with-dsc/index.md b/content/articles/2017/04/colecting-certificates-form-an-enterprise-ca-for-use-with-dsc/index.md new file mode 100644 index 000000000..dde193a60 --- /dev/null +++ b/content/articles/2017/04/colecting-certificates-form-an-enterprise-ca-for-use-with-dsc/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2017-04-21-colecting-certificates-form-an-enterprise-ca-for-use-with-dsc/ +title: Colecting Certificates form an Enterprise CA for use with DSC +authors: + - David Jones +date: "2017-04-21T16:29:24+00:00" +categories: + - DevOps + - PowerShell for Admins + - Tools +aliases: + - /2017/04/colecting-certificates-form-an-enterprise-ca-for-use-with-dsc/ +--- + +In a domain environment auto enrollment can be used to get create unique certificates for each node that can be used with DSC.  The problem is getting the public cert to the machine that creates the DSC MOF files. I wrote a module last year to collect them directly form the Enterprise CA. If it interests you take a look  diff --git a/content/articles/2017/04/do-anything-in-one-line-of-powershell/index.md b/content/articles/2017/04/do-anything-in-one-line-of-powershell/index.md new file mode 100644 index 000000000..2c5648110 --- /dev/null +++ b/content/articles/2017/04/do-anything-in-one-line-of-powershell/index.md @@ -0,0 +1,29 @@ +--- +url: /articles/2017-04-06-do-anything-in-one-line-of-powershell/ +title: Do Anything in One Line of PowerShell +authors: + - msorens +date: "2017-04-06T21:30:23+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks + - Tools +aliases: + - /2017/04/do-anything-in-one-line-of-powershell/ +--- + +PowerShell provides a tremendous boon to productivity for computer professionals of all types. But, you have to admit: it can be a bit daunting to get up to speed! Indeed, as someone who has a fair amount of experience using it, I still find myself having to look up how to do things--frequently. So I started keeping track of the recipes I was using the most. And came up with a list of 400 or so, published in 4 parts. + + * [Part 1: Help, Syntax, Display and Files][1] + * [Part 2: Variables, Parameters, Properties, and Objects][2] + * [Part 3: Collections, Hashtables, Arrays and Strings][3] + * [Part 4: Accessing, Handling and Writing Data][4] + +Though I actually wrote these a couple years back they are certainly still relevant today, just covering a bit less of the ever-expanding PowerShell universe of discourse! +(Note that at the end of each web article listed above is a link to download it as a PDF that is more tidily formatted.) + + [1]: http://www.simple-talk.com/sysadmin/powershell/powershell-one-liners-help,-syntax,-display-and--files/ + [2]: http://www.simple-talk.com/sysadmin/powershell/powershell-one-liners-variables,-parameters,-properties,-and-objects/ + [3]: http://www.simple-talk.com/sysadmin/powershell/powershell-one-liners--collections,-hashtables,-arrays-and-strings/ + [4]: http://www.simple-talk.com/sysadmin/powershell/powershell-one-liners--accessing,-handling-and-writing-data-/ diff --git a/content/articles/2017/04/final-agenda/index.md b/content/articles/2017/04/final-agenda/index.md new file mode 100644 index 000000000..566d4eff8 --- /dev/null +++ b/content/articles/2017/04/final-agenda/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2017-04-05-final-agenda/ +title: Final agenda +authors: + - Richard Siddaway +date: "2017-04-05T10:14:34+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2017/04/final-agenda/ +--- + +We've had to move a few sessions around for various reasons. +The online agenda at shows the current final agenda. +Please check the agenda carefully to ensure you don't miss any sessions diff --git a/content/articles/2017/04/post-summit-note/index.md b/content/articles/2017/04/post-summit-note/index.md new file mode 100644 index 000000000..7c5aa2c98 --- /dev/null +++ b/content/articles/2017/04/post-summit-note/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2017-04-13-post-summit-note/ +title: Post-Summit Note +authors: + - Don Jones +date: "2017-04-13T21:30:54+00:00" +categories: + - PowerShell Summit +aliases: + - /2017/04/post-summit-note/ +--- + +A quick note: We experienced some massive equipment failures this year, almost to the point where we were starting to seriously question our life choices. The end result is that we don't have as many session recordings as we'd hoped. Jason will be going through what we _do_ have over the next week, splicing together what we can, and posting it to the YouTube channel. We appreciate everyone's patience and understanding. diff --git a/content/articles/2017/04/powershell-and-devops-global-summit-recap/index.md b/content/articles/2017/04/powershell-and-devops-global-summit-recap/index.md new file mode 100644 index 000000000..77f920245 --- /dev/null +++ b/content/articles/2017/04/powershell-and-devops-global-summit-recap/index.md @@ -0,0 +1,86 @@ +--- +url: /articles/2017-04-21-powershell-and-devops-global-summit-recap/ +title: PowerShell and DevOps Global Summit Recap +authors: + - Missy Januszko +date: "2017-04-21T19:57:12+00:00" +categories: + - PowerShell for Admins +aliases: + - /2017/04/powershell-and-devops-global-summit-recap/ +--- + +Now that I’m recovered from the 2017 PowerShell and DevOps Global Summit, I just wanted to take a moment and talk about my experiences at the conference. It was my first time attending this conference and it was also my first time speaking. Both “firsts” contributed to a range of emotions throughout the long and exhausting week. + + +I came in to Seattle late Friday night and expected to go straight to the hotel and to bed. Being from Eastern Daylight Time makes for a long day and late night when your expected hotel arrival time is 10pm local time (or 1AM your time). However, PowerShell friends and community members, some of whom I knew from previous conferences and some of whom I was just meeting for the first time, greeted me. Some stayed up and waited for me to arrive – even with an already-closed hotel bar and many respective time zone differences. They greeted me with an overwhelming sense of community and friendship, and that was a defining moment that I’ll never forget. Even though I was exhausted, I found myself staying up for a couple more hours chatting with folks who were already there. + + +Saturday was a do-my-own-thing kind of day. My intent of being there a day early was to try to relax and not fret about the upcoming presentation the next day, but also try to review the presentation a bit with my co-presenter Jason Helmick. I tried to stay stress-free by working out – I am an avid Crossfitter and there is a Crossfit box within walking distance of the hotel, so I got a workout in and a lot of coffee via the Starbucks in the hotel. Had a quiet dinner with a fellow DevOps Camper and also met another attendee who was sitting next to us at the sushi place. A couple glasses of wine later, I was ready to retire to get ready for the next day. + + +Sunday, of course, began very early with heart palpitations and equipment checks. I have a brand new laptop, and while I may be good at PowerShell, I’m technologically challenged when it comes to hooking up my new laptop to the projection equipment. + + + +Plus there’s some recording equipment in there too, so I hand my laptop and a bunch of cables to other really smart people and they get it all hooked up. + + + +All I can think of is “in an hour you will be standing up here talking for 3 hours”, and I should mention here that Jeffrey Snover himself is not only in the building, but has taken up shop in a seat in our session. I’m cool, calm and collected, of course! + + +After breakfast, Jason opens the show by talking first about teaching DSC, then about our Autolab project, which is a source of pride for me. He then segues into my portion of the presentation, which includes configuration data tricks, and developing your own resources using script, function-based, and class-based resources. After a short break, we talk about Pull, Tug, and reporting with DSCEA. Many of my demos don’t work – even though I had just run through them less than a week ago – and I realize why. If you’ve ever seen a talk by Sami Laiho, you know the rule - you need to sacrifice a Nano server to the demo gods to have a successful demo, and I’ve forgotten this simple rule. + + +After the morning session I get to revert back to being an attendee somewhat. + + + +Don Jones is presenting the afternoon session on Pester, and while I think my name and a couple of others were on the agenda for this session along with Don, Don is Don, and presents an enlightening session on the use of Pester. I end the day with my friends taking me out to dinner to celebrate completion of my first speaking session and more wine and socialization with the PowerShell community members hanging out at the hotel bar. + + +On Monday, the day started off with Don’s keynote presentation and Ask Me Anything with Jeffrey Snover. I got to sit next to the Scripting Wife, who, along with the Scripting Guy, were both called up to the stage and honored for their many contributions to the PowerShell Community. There are so many fun people to meet and converse with at this conference. The one thing I did have a hard time with was names – and later did I realize that I “knew” a lot of people from their twitter or slack handles and never really actually knew their real names. + + + +(Yes, you, @bladefirelight.) + + + +The “Ask Me Anything” session was interesting and entertaining, and it’s always fun to hear about Jeffrey’s favorite open-source project (VSCode and Pester), anticipated uses of classes and PowerShell on Linux. Nothing shocked me more than having my upcoming PKI session mentioned by Jeffrey during the AMA though!! + + +And then the time change and lack of sleep started to hit me. I took a quick nap in the afternoon and returned in time for the PowerShell Team’s lightning demos to give me a glimpse into what was coming next in PowerShell. After that I mingled and got to talk to members of the PowerShell team during the welcome reception. + + +Fast-forward to Tuesday, it’s the day I’ve been looking forward to the most, but also the most nerve-wracking, because it’s the day of my PKI presentation. In the morning I attended the session of the three fairies/furries/furies, which was a more impromptu session discussing less-than-optimal practices in PowerShell usage. + + + +After a session on using PowerShell on Linux, my nerves were getting the best of me and I took a break and had some informal conversation with people outside the sessions. I did attend part of the Chocolatey session in the afternoon and I wish I had been able to pay attention enough to that session, but at that point, I stopped trying to absorb new information and just mentally rehearsed from that point until I went on. I am disappointed that I didn’t get to see “The Path to a DSC Resource Module” and the PowerShell Team session on security so here’s hoping there may be recordings of those sessions! + + +The show went great. I may have forgotten half my intro (you’d never know!) but other than that I was pleased with the presentation and even more entertained by the follow-up discussions I had afterwards. And many of them were “hey, we’re really glad to see that everyone struggles from time to time on how to solve something with DSC.” + + + +I also received some interesting feedback on how to make my session better and I’m always open to constructive criticism. After that I think I was mentally shot, but still managed to go out and enjoy Tuesday night’s social event and more wine-drinking at the hotel. + + +Then Wednesday came and with it, the sheer exhaustion of the previous days caught up with me. I wanted to sleep in, but I also really wanted to see Ashley’s session on the Kerberos Double Hop problem since that bit me a lot during development of the PKI code. After that early morning session, I just hung out and talked to people rather than attending formal sessions, and I enjoyed answering people’s questions – everything from my career story to questions about PKI to questions about how to solve particular problems they have with DSC. + + + +For my last session, I participated in a panel discussion on Introducing DevOps to your Organization with Steve Murawski and Jason Helmick. + + + +And while I know the challenges my former organization faced, it was refreshing to hear questions from others about different challenges and discuss potential solutions. + + +So now the big question: + + + +Would I return to the PowerShell and DevOps Global Summit again next year? The answer is a big “hell yes”. Will I speak again? Absolutely. I’d like to thank every one of the attendees for giving me a warm welcome into the PowerShell community as a member and a speaker. It was the non-judgmental atmosphere that is perfect for a first-time speaker. How about you? Are YOU interested in speaking but are afraid to try? Do it. Submit a session. Sign up for the Community Lightning Demos and show something you’re working on. Don’t be afraid and give it a try, since this conference open and welcoming to everyone in the community. diff --git a/content/articles/2017/04/powershell-saturday-booster-program/index.md b/content/articles/2017/04/powershell-saturday-booster-program/index.md new file mode 100644 index 000000000..f460d2106 --- /dev/null +++ b/content/articles/2017/04/powershell-saturday-booster-program/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2017-04-14-powershell-saturday-booster-program/ +title: PowerShell Saturday Booster Program +authors: + - Don Jones +date: "2017-04-14T16:23:29+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2017/04/powershell-saturday-booster-program/ +--- + +As announced at PowerShell + DevOps Global Summit 2017, we're preparing a "PowerShell Saturday Booster Program" to help launch and support local one-day events. Please visit  to take a look at our draft materials, and use GitHub's "Issues" feature to submit questions, suggestions for additional content, requests for clarification, and so on. We'll continue to build this out, but want to make sure we're doing so in a way that makes sense to the community. Thanks for your input! Our goal is to have this up and running by the end of June, 2017. diff --git a/content/articles/2017/04/serve-on-the-board-of-powershell-org/index.md b/content/articles/2017/04/serve-on-the-board-of-powershell-org/index.md new file mode 100644 index 000000000..efb3e01a6 --- /dev/null +++ b/content/articles/2017/04/serve-on-the-board-of-powershell-org/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2017-04-17-serve-on-the-board-of-powershell-org/ +title: Serve on the Board of PowerShell.org! +authors: + - Don Jones +date: "2017-04-17T13:59:56+00:00" +categories: + - Announcements +aliases: + - /2017/04/serve-on-the-board-of-powershell-org/ +--- + +The DevOps Collective (the nonprofit that owns PowerShell.org) is organized into two main governing bodies. Our Directors - myself, Christopher Gannon, Jason Helmick, Jeffery Hicks, Richard Siddaway, and Will Anderson - run the organization on a day-to-day. On Board, which we're now forming, consists of stakeholders who help advise us on directions, priorities, and so on. We want our Board to be diverse, and include representation from industry as well as community. This is a fairly convention nonprofit governance setup; you'll find, for example, many Chambers of Commerce organized this way. +"Community" has been the bit we've struggled with, and so we've decided to simply put it _to_ the community to help come up with an answer. We'd like two "at-large" seats, filled by community members on a rotating (annual) basis. The responsibilities are not huge: mainly, we'll have a virtual meeting once or twice a year to cover our current activities and discuss priorities. On an ongoing basis, the Board is also a way for outside concerns to have a voice within the organization. +For our community seats, we want people who are actively _engaged_ with the community on a daily basis. We want to know what's happening out there with the people who actually use PowerShell, and who are participating in DevOps. We want to be aware of what's going on in the OSS world, and where we, as an organization, might be able to assist. +So if that's you, reach out to me. Drop an email to DonJ (and the domain is listed right in the address bar of your browser right now). If you know of someone, please reach out to _them_ and have them send me an email. I'd like to know a bit about you, how you're present in the community on an ongoing basis, and some ideas you have for what The DevOps Collective should be focusing its time and funding on (especially educationally, as that's our main mission). +I look forward to hearing from you! diff --git a/content/articles/2017/04/submit-questions-for-ask-me-anything-with-jeffrey-snover/index.md b/content/articles/2017/04/submit-questions-for-ask-me-anything-with-jeffrey-snover/index.md new file mode 100644 index 000000000..4b4c1fa1e --- /dev/null +++ b/content/articles/2017/04/submit-questions-for-ask-me-anything-with-jeffrey-snover/index.md @@ -0,0 +1,15 @@ +--- +url: /articles/2017-04-01-submit-questions-for-ask-me-anything-with-jeffrey-snover/ +title: "Submit Questions for \"Ask Me Anything\" with Jeffrey Snover" +authors: + - Don Jones +date: "2017-04-01T11:47:45+00:00" +categories: + - PowerShell Summit +aliases: + - /2017/04/submit-questions-for-ask-me-anything-with-jeffrey-snover/ +--- + +In just a week, we'll be holding a live "Ask Me Anything" with Jeffrey Snover at PowerShell + DevOps Global Summit 2017. Now's a great time to Help us queue up questions - drop yours in the comments below! +We'll be doing our level best to record the session, although it will not be live-streamed. We'll post the recording and let everyone know where it is a week or so after the event. +**UPDATE: **We're no longer taking new questions. Thanks to everyone who submitted, and we'll see you at Summit (where we'll be taking more questions live). diff --git a/content/articles/2017/05/_index.md b/content/articles/2017/05/_index.md new file mode 100644 index 000000000..6acc4b842 --- /dev/null +++ b/content/articles/2017/05/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from May 2017" +description: "PowerShell.org Articles published in May 2017." +--- diff --git a/content/articles/2017/05/announcing-the-powershell-saturday-booster-program/index.md b/content/articles/2017/05/announcing-the-powershell-saturday-booster-program/index.md new file mode 100644 index 000000000..c93e6fa53 --- /dev/null +++ b/content/articles/2017/05/announcing-the-powershell-saturday-booster-program/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2017-05-04-announcing-the-powershell-saturday-booster-program/ +title: Announcing the PowerShell Saturday Booster Program +authors: + - Don Jones +date: "2017-05-04T15:53:48+00:00" +categories: + - PowerShell for Admins +aliases: + - /2017/05/announcing-the-powershell-saturday-booster-program/ +--- + +We're pleased to announce general availability of our PowerShell Saturday Booster Program, as announced at PowerShell + DevOps Global Summit 2017. The goal of this program is to help enthusiasts build sustainable one-day, small-format technical events worldwide. We can provide organizing advice and assistance, help managing finances, and so on. +Full details at . diff --git a/content/articles/2017/05/powershell-team-day-at-it-transformation-event/index.md b/content/articles/2017/05/powershell-team-day-at-it-transformation-event/index.md new file mode 100644 index 000000000..953caba41 --- /dev/null +++ b/content/articles/2017/05/powershell-team-day-at-it-transformation-event/index.md @@ -0,0 +1,125 @@ +--- +url: /articles/2017-05-09-powershell-team-day-at-it-transformation-event/ +title: PowerShell Team Day at IT Transformation Event +authors: + - Don Jones +date: "2017-05-09T15:39:29+00:00" +categories: + - DevOps + - Events +aliases: + - /2017/05/powershell-team-day-at-it-transformation-event/ +--- + +At the upcoming ["IT Transformation" event in Orlando][1] this month (still time left to register!), members of the PowerShell team will be leading a full-day workshop that's pretty much a don't-miss (and no, it isn't being recorded). Here's the schedule: + + + + + Time + + + + Speaker + + + + Title + + + + + + 09:00am-10:00am + + + + Jeffrey Snover + + + + Observations on Modern IT Practices and Organization Culture + + + + + + 10:00am-10:15am + + + + break + + + + + + 10:15am-12:00pm + + + + Michael Greene + + + + The Release Pipeline Model + + + + + + 12:00pm-01:00pm + + + + lunch + + + + + + 01:00pm-02:45pm + + + + Michael Greene + + + + Instructor Led Hands-On Lab: Constructing a pipeline for PowerShell Modules using Visual Studio Team Services. + + + + + + 03:00pm-04:00pm + + + + Timothy Warner + + + + Introduction to Azure Automation DSC + + + + + + 04:00pm-05:00pm + + + + Jeffrey Snover + + + + Closing thoughts and AMA + + + + +Personally, I'm super-excited. I'll be presenting a full-day workshop myself (the day before), along with a couple of breakout sessions and a keynote with Jeffrey Snover. +Hope to see you there! + + [1]: https://www.devintersection.com/#!/Sharepoint-Office365-Conference diff --git a/content/articles/2017/06/_index.md b/content/articles/2017/06/_index.md new file mode 100644 index 000000000..24f9de6a0 --- /dev/null +++ b/content/articles/2017/06/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from June 2017" +description: "PowerShell.org Articles published in June 2017." +--- diff --git a/content/articles/2017/06/taking-powershell-to-the-next-level/index.md b/content/articles/2017/06/taking-powershell-to-the-next-level/index.md new file mode 100644 index 000000000..ad3b6b293 --- /dev/null +++ b/content/articles/2017/06/taking-powershell-to-the-next-level/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2017-06-22-taking-powershell-to-the-next-level/ +title: Taking Powershell to the next level +authors: + - Nick Rimmer +date: "2017-06-22T13:30:58+00:00" +categories: + - Training +aliases: + - /2017/06/taking-powershell-to-the-next-level/ +--- + +I recently decided to 'up my game' with powershell and go beyond the simple scripts I've rolled out in the past. +So I simply want to share with you, the path I took to enhance my skills (inc. alot of practice) +**Books:** +[Learn Powershell In A Month of Lunches][1] +[Learn Powershell Toolmaking in a month of Lunches][2] +[Windows Powershell In Action 3rd Edition][3] +**Online:** +[Advanced Tools And Scripting with Powershell 3.0 Jump Start][4] +[Writing Powershell Powershell DSC Resources And Configuration][5] +[Demo Code][6] + + + [1]: https://www.manning.com/books/learn-windows-powershell-in-a-month-of-lunches-second-edition + [2]: https://www.manning.com/books/learn-powershell-toolmaking-in-a-month-of-lunches + [3]: https://www.manning.com/books/windows-powershell-in-action-third-edition + [4]: https://mva.microsoft.com/en-US/training-courses/advanced-tools-scripting-with-powershell-30-jump-start-8277?l=WOWaGUWy_8604984382 + [5]: http://channel9.msdn.com/events/Ignite/2015/BRK4452 + [6]: https://www.powershellgallery.com/packages/nDemos_BRK4452/1.0 diff --git a/content/articles/2017/07/_index.md b/content/articles/2017/07/_index.md new file mode 100644 index 000000000..46b0970a5 --- /dev/null +++ b/content/articles/2017/07/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from July 2017" +description: "PowerShell.org Articles published in July 2017." +--- diff --git a/content/articles/2017/07/topics-for-powershell-summit-2018/index.md b/content/articles/2017/07/topics-for-powershell-summit-2018/index.md new file mode 100644 index 000000000..084eb5f4a --- /dev/null +++ b/content/articles/2017/07/topics-for-powershell-summit-2018/index.md @@ -0,0 +1,35 @@ +--- +url: /articles/2017-07-03-topics-for-powershell-summit-2018/ +title: Topics for PowerShell Summit 2018 +authors: + - Richard Siddaway +date: "2017-07-03T18:54:52+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2017/07/topics-for-powershell-summit-2018/ +--- + +The planning for Summit 2018 has started – to be honest it started before Summit 2017 opened. We’ve reached the stage where we need to start thinking about the broad topics for PowerShell Summit 2018. +What do you want to hear about? Not the session titles, content and speakers but the broad areas of content you want us to include. We can’t actually promise to cover everything requested because we’re dependent on whats submitted when we open our call for topics towards the end of the month. +Looking at the agenda for Summit 2017 we had these very broad groups +PowerShell tool making +DSC and DSC resources +PowerShell Github repository +PowerShell v6 +Remoting +Testing - Pester +Azure +PowerShell Functions +JEA +PowerShell v6 +PowerShell on Linux +PowerShell modules +Regular Expessions +MSDeploy +PKI +Powershell Jobs, Workflows and runspaces +Nano server +PowerShell cmdlets - compiled and script +Are there any we should drop? Is there a topic we should include – this far out we can commission a specific expert speaker to cover a topic if required. This is your opportunity to help shape Summit 2018. Let us know what you think diff --git a/content/articles/2017/07/using-powershell-azure-automation-and-oms-part-i/index.md b/content/articles/2017/07/using-powershell-azure-automation-and-oms-part-i/index.md new file mode 100644 index 000000000..7bf2a543c --- /dev/null +++ b/content/articles/2017/07/using-powershell-azure-automation-and-oms-part-i/index.md @@ -0,0 +1,70 @@ +--- +url: /articles/2017-07-25-using-powershell-azure-automation-and-oms-part-i/ +title: Using PowerShell, Azure Automation, and OMS – Part I +authors: + - Will Anderson +date: "2017-07-25T14:00:01+00:00" +categories: + - PowerShell for Admins +aliases: + - /2017/07/using-powershell-azure-automation-and-oms-part-i/ +--- + +Microsoft's Operations Management Suite provides some exceptional tools for monitoring and maintaining your environments in both the cloud and in your datacenter.  One of it's best features, however, is its ability to leverage the tools that you've already developed to perform tasks and remediate issues using PowerShell, Azure Automation Runbooks, and OMS Alert triggers.  In this series, we'll be discussing how you can configure these tools to take care of problems in your own environment.  Today, we'll be talking about how you can take your own PowerShell Modules and upload them to Azure Automation. +**Creating The Azure Automation Account** +In order to create the Azure Automation Account, you'll need to have create the automation account object in the target resource group, and the ability to create an AzureRunAs account in AzureAD.  It's also important to be mindful that not every Azure region has the Microsoft.Automation resource provider registered to it, so you'll want the resource group to exist in the appropriate locale.  You can check this with the Get-AzureRmResourceProvider cmdlet: + + +`Get-AzureRmResourceProvider -ProviderNamespace 'Microsoft.Automation' +`![](https://powershell.org/wp-content/uploads/2017/07/1-AutomationLocation-300x158.png) +For our purposes, we'll be deploying a resource group to East US 2.  Once the resource group has been created, we'll use New-AzureRmAutomationAccount + + +`$BaseName = 'testautoacct' +$Location = 'eastus2' +$ResGrp = New-AzureRmResourceGroup -Name $BaseName -Location $Location -Verbose +$AutoAcct = New-AzureRmAutomationAccount -ResourceGroupName $ResGrp.ResourceGroupName -Name ($BaseName + $Location) -Location $ResGrp.Location +`It's good to note that while -Verbose is available for New-AzureRmAutomationAccount, it will not return any verbose output. +![](https://powershell.org/wp-content/uploads/2017/07/2-CreateAccount-300x63.png) +**Creating A Blob Container in AzureRM** +Now that we have our automation account created, we can begin uploading our modules to be available for Azure Automation to use.  In order to do so, we'll need to create a blob store that we can upload our modules to so that the Azure Automation Account can import them; unlike in the Azure UI, you cannot currently upload your modules directly from your local machine, so you'll need to supply a URI for Azure Automation to access. +Another 'gotcha' is that there is no AzureRm cmdlet for creating a blob container, or for uploading content to that container, so you'll need to do so using the Azure storage commands and passing the Storage Context Key from AzureRM to Azure.  Here is how you can create the storage account, get the storage account key, create a context, and pass it to Azure: + + +`$Stor = New-AzureRmStorageAccount -ResourceGroupName $ResGrp.ResourceGroupName -Name modulestor -SkuName Standard_LRS -Location $ResGrp.Location -Kind BlobStorage -AccessTier Hot +Add-AzureAccount +$Subscription = ((Get-AzureSubscription).where({$PSItem.SubscriptionName -eq 'LastWordInNerd'})) +Select-AzureSubscription -SubscriptionName $Subscription.SubscriptionName -Current +$StorKey = (Get-AzureRmStorageAccountKey -ResourceGroupName $Stor.ResourceGroupName -Name $Stor.StorageAccountName).where({$PSItem.KeyName -eq 'key1'}) +$StorContext = New-AzureStorageContext -StorageAccountName $Stor.StorageAccountName -StorageAccountKey $StorKey.Value +`Once we've run our storage commands, you'll have captured the storage context object like so: +![](https://powershell.org/wp-content/uploads/2017/07/3-StorageContext-300x105.png) +Now that we've got access to our AzureRm storage account in Azure, we can now create our blob container: + + +`$Container = New-AzureStorageContainer -Name 'modules' -Permission Blob -Context $StorContext -Permission Blob +`![](https://powershell.org/wp-content/uploads/2017/07/4-BlobContainer-300x86.png) +\*NOTE\* - I have my container permission set to Blob, which makes this directory publicly available.  At some time in the near future, I'll walk you through how you can use SAS Tokens to access secure blobs at runtime.  Just be mindful of this if you use this code in production. +**Upload to a Blob Container** +Now we can finally upload our modules to the blob store, and register them in Azure Automation!  What we're going to do here is take our custom module, compress it into a .zip file, and then use the Set-AzureStorageBlobContent cmdlet to ship it up to our blob store.  Once the content is shipped, we use the $Blob.ICloudBlob.Uri.AbsoluteUri to feed the New-AzureRmAutomationModule the URI required for the ContentLink parameter. + + +`$ModuleLoc = 'C:\Scripts\Presentations\OMSAutomation\Modules\' +$Modules = Get-ChildItem -Directory -Path $ModuleLoc + ForEach ($Mod in $Modules){ + Compress-Archive -Path $Mod.PSPath -DestinationPath ($ModuleLoc + '\' + $Mod.Name + '.zip') -Force + } +$ModuleArchive = Get-ChildItem -Path $ModuleLoc -Filter "*.zip" +ForEach ($Mod in $ModuleArchive){ + $Blob = Set-AzureStorageBlobContent -Context $StorContext -Container $Container.Name -File $Mod.FullName -Force -Verbose + New-AzureRmAutomationModule -ResourceGroupName $ResGrp.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -Name ($Mod.Name).Replace('.zip','') -ContentLink $Blob.ICloudBlob.Uri.AbsoluteUri +} +`![](https://powershell.org/wp-content/uploads/2017/07/5-UploadModule-300x65.png) +Now that we've done all that, we can validate that we have our module in Azure Automation through the UI: +![](https://powershell.org/wp-content/uploads/2017/07/6-Validate-300x282.png) +Now that we've uploaded our modules into Azure Automation, we can start using them to perform tasks in Azure.  Next week, we'll look at how we'll be getting more familiar with configuring runbooks and take a closer look at the input data that OMS can pass along to them. +**Part I - Azure Automation Account Creation and Adding Modules** +[Part II - Configuring Azure Automation Runbooks And Understanding Webhook Data][1] +Part III - Utilizing Webhook Data in Functions and Validate Results - Coming Soon! + + [1]: https://powershell.org/2017/08/01/using-powershell-azure-automation-and-oms-part-ii/ diff --git a/content/articles/2017/08/76318-2/index.md b/content/articles/2017/08/76318-2/index.md new file mode 100644 index 000000000..79a0bc084 --- /dev/null +++ b/content/articles/2017/08/76318-2/index.md @@ -0,0 +1,57 @@ +--- +url: /articles/2017-08-01-76318-2/ +title: PowerShell and DevOps Global Summit 2018 – Call for Topics +authors: + - Richard Siddaway +date: "2017-08-01T09:49:30+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2017/08/76318-2/ +--- + +The PowerShell and DevOps Global Summit 2018 will be returning to the Meydenbauer center, Bellevue WA on 9-12 April 2018. PowerShell, and DevOps, experts from all over the world, including PowerShell team members, will once again join together to discuss and learn about maximizing PowerShell in the workplace in fast-paced, knowledge packed presentations. The Summit's also the place to explore and further your knowledge of DevOps principles and practices in a Windows environment, make new connections, learn new techniques, and offer something to your peers and colleagues. If you want to share your PowerShell or DevOps expertise, then this is your official call to submit presentations for selection! + +# Topic Areas:  What we are looking for + +The bulk of our sessions follow our now traditional 45-minute format. These sessions cover a wide aspect of PowerShell and DevOps expertise. Your proposed session should fit into one of the following areas: + + * PowerShell Internals - A deep look into the inside workings of PowerShell and practical solutions that are built from them. + * PowerShell Features Deep Dive - These presentations are a deep look into configuring and working with PowerShell features and capabilities. + * DevOps in Practice - A deep dive into putting the DevOps principles into practice. Presentations should focus on what you're doing and how you're doing it. + +We are open to presentations across the entire ecosystem that has been built around PowerShell or the various DevOps tools. This includes Microsoft platforms and products that have PowerShell-based management tools as well as third party products.  New topics will be preferred over the recycling of older topics. However, we are still open to sessions on 'older' topics that address areas of great confusion or uncertainty. +We have a number agenda slots available for double length sessions. These sessions delve into the depths of a topic covering areas that need more than 45 minutes. + +#  What kind of sessions get selected? + +AIM HIGH, VERY HIGH - We're looking for technical sessions that go beyond - way beyond - 'beginner'. This is an 'experts' level conference and we expect the session to reflect that. We want attendees to finish each day with information leaking ... just a little bit ... out their eyeballs. We may accept some intermediate level sessions but please talk to us before spending a lot of time developing such a session. +We look for an abstract that's compelling and makes us want to see your session - so spend time writing a great abstract! We want sessions that offer real-world usability combined with "WOW, nobody talks about THAT" awesomeness. We want to see the code. Don't just talk about it - this is a PowerShell summit not a PowerPoint Summit. If your session isn't predominately demonstrations its probably not right for the Summit. +Summit presentations are intense and intimate often with plenty of audience interaction. You must expect questions and discussions. This is not a "lecture to the audience" event. +_If you have any doubts about the suitability of a particular session, please contact us -_ [_summit@powershell.org_][1] _- we're always happy to discuss proposed sessions._ +Please note all sessions are to be delivered in English. Presenter will provide all equipment needed to deliver session(s), including a laptop or other computer. Presenter must be able to provide video by means of HDMI, DVI-D, or DisplayPort connectors - VGA is NOT supported. Presenter must be able to manually select an appropriate screen resolution for video output. Typically, 1024x768 or 1280x720 are preferred. +Internet connectivity is available in the conference center but bandwidth is limited. If you rely on connecting to the cloud for your sessions then consider recording any demonstrations as a contingency. + +# How to submit abstracts of presentations + +Go to - +Click Speak at PowerShell and DevOps Global Summit 2018 (scroll down to find the big green button at bottom right) +Login using Twitter, Facebook or one of the other options. +Complete the form. The name field will show your email address. If you could ensure your full name is in the Bio field this will make communication easier. +Click submit +Please contact summit At PowerShell dot org if you have any issues or problems. + +# Presentation submission deadline: When you should send it by + +Start submitting your presentation submissions immediately! The selection committee will start selecting presentations as soon as they arrive so you don't want to miss out. The last day we will accept presentation submissions will be **Sunday 1 October 2017**. This is a hard deadline - **NO** sessions will be accepted after this date. + +# When you will know you've been selected + +You will be informed if one or more of your presentations have been selected and notified by Wednesday 11 October 2017. Your notification email will include any further actions you need to take. We will notify all potential speakers by 23 October 2017 if their sessions haven't been accepted. +Speakers, with accepted sessions, will be given free admission to the event, including attendance at all official Summit activities. Speakers may not bring guests to the day sessions or evening events. We have a limited budget, and the number of speakers selected will be governed by that budget. +All speakers will receive a stipend, $400 for a 45-minute session and $800 for a double session, to assist with travelling and accommodation expenses. +The final agenda will be announced and posted on PowerShell.Org on, or about, Wednesday 1 November 2017. +We look forward to your submissions and your help in making PowerShell and DevOps Global Summit 2018 the most valuable IT/Dev conference of the year building on and surpassing the previous Summits! + + [1]: mailto:summit@powershell.org diff --git a/content/articles/2017/08/_index.md b/content/articles/2017/08/_index.md new file mode 100644 index 000000000..a9b726586 --- /dev/null +++ b/content/articles/2017/08/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from August 2017" +description: "PowerShell.org Articles published in August 2017." +--- diff --git a/content/articles/2017/08/powershell-2-0-deprecation/index.md b/content/articles/2017/08/powershell-2-0-deprecation/index.md new file mode 100644 index 000000000..b5f3d836a --- /dev/null +++ b/content/articles/2017/08/powershell-2-0-deprecation/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2017-08-25-powershell-2-0-deprecation/ +title: PowerShell 2.0 deprecation +authors: + - Richard Siddaway +date: "2017-08-25T10:29:17+00:00" +categories: + - Announcements + - News +aliases: + - /2017/08/powershell-2-0-deprecation/ +--- + +PowerShell 2.0 is being deprecated - see the PowerShell Team [blog][1] for full details + + [1]: https://blogs.msdn.microsoft.com/powershell/2017/08/24/windows-powershell-2-0-deprecation/ diff --git a/content/articles/2017/08/powershell-devops-global-summit-scholarship-program/index.md b/content/articles/2017/08/powershell-devops-global-summit-scholarship-program/index.md new file mode 100644 index 000000000..da2de998a --- /dev/null +++ b/content/articles/2017/08/powershell-devops-global-summit-scholarship-program/index.md @@ -0,0 +1,112 @@ +--- +url: /articles/2017-08-01-powershell-devops-global-summit-scholarship-program/ +title: PowerShell + DevOps Global Summit Scholarship Program +authors: + - Thomas Malkewitz +date: "2017-08-01T00:00:43+00:00" +categories: + - Announcements + - Events + - News + - PowerShell Summit + - Training +aliases: + - /2017/08/powershell-devops-global-summit-scholarship-program/ +--- + +Automation and scripting has become a major part of IT in recent years.  And PowerShell has played a giant role in the progression of that.  Every year, the wonderful people at PowerShell.org put on the PowerShell + DevOps Global Summit, that always produces outstanding results from amazing speakers and attendees. + + +As many of you in IT know, convincing your manager to attend conferences usually depends on a few key factors: Cost and budget, content, and sometimes, experience or seniority in the company.  And unfortunately, that last one may be a deciding factor far too often.  This year, PowerShell.org is making it a priority to help extend, not only the content and knowledge that comes with attending the PowerShell + DevOps Global Summit, but also the experience that comes along with it.   + + +PowerShell.org is looking for a few driven, over achieving PowerShell-ers, that may still yet be all too  +_ +green +_ +in their company or role in IT to convince their superiors to send them to the [PowerShell + DevOps Global Summit](http://powershellsummit.org).  To be considered for this scholarship, **we are particularly looking for individuals that would be considered part of a group which is "under represented" in the IT industry as a whole**, including women, underrepresented minorities, and so on.  So, if you're the IT Director, or the Senior Systems Architect, this opportunity is not for you; however, if you are in those roles, and you know a real go-getter that has shown you some cool stuff they have done with PowerShell, please point them to this opportunity. + +It's also worth noting that this specifically isn't for people in the situation of, "yeah, I do this stuff all the time and my employer should totally send me and they totally aren't." We're looking more for, "I'm working way above my pay grade and this might help give me the jump I need to get to a better place in life." That's the kind of thing you'll have to help us understand about you in your application. This scholarship isn't just to take a burden off your employer or net you a free trip to Redmond; it's to help someone raise themselves in life. + + +## Applying + + +If you feel you fit the bill for this scholarship, you need to convince us!  We want to hear why you are the Chosen One.  So, if you’d like to be considered for the opportunity you will need to write an essay that demonstrates your passion for PowerShell and automation.  When constructing your essay, please use the following guidelines: + + +- + +Demonstrate an intermediate or better understanding of PowerShell,  Scripting, and ToolMaking (If you’ve read Don Jones’ *Learn PowerShell in a Month of Lunches*, you should be fine). + + +- + +Include specifics.  Site specific example on how you have used PowerShell to save your company a bunch of money, or how you’ve done something amazing. + + +- + +Include examples.  We DO NOT want a submission that is just a script, but please include some clever snippets that you are proud of. + + +- + +Have you shared your work, or made it reusable?  Please include information on how we can find it if you have.  The PowerShell Community is one of the best ones around, and we all love sharing code. + + +- + +Be thorough.  We don’t have a hard word count,  but remember, the best essay wins! + + +- + Assure us that, should you be awarded this opportunity, you've spoken with your employer and getting the time off won't be a problem. + + + + +## How We'll Decide + +- + +Applications can be submitted [HERE](https://docs.google.com/forms/d/e/1FAIpQLScyiEszj9GzVwkNBUOMatlL2kbFwgoRXelWHiaTwlCb8Pkqtg/viewform) (Google account required to apply). + + +- + +We will be accepting applications from Friday, September 1st 2017 until Sunday, October 1st 2017. + + +- + +The winner(s) will be selected based on the quality of their essay and the enthusiasm it conveys (make us want to keep reading).  Again, we are not looking for the seasoned PowerShell veteran that has been to the Summit the past four years, but the help desk analyst that has been using a collection of tools and scripts they created that is allowing them to be four times as productive. + + +- + +The winner(s) will be chosen by a panel of four judges who are all very active members in the PowerShell community. + + +- + +The winner(s) will be announced Wednesday, November 1st 2017 on PowerShell.org + + + + +## What Awardees Receive + +- + +Up to $500 in airfare. + + +- + +Four hotel room nights. + + +- + +Full admission to the PowerShell + DevOps Global Summit. diff --git a/content/articles/2017/08/psblogweek-is-back/index.md b/content/articles/2017/08/psblogweek-is-back/index.md new file mode 100644 index 000000000..8e5d381e9 --- /dev/null +++ b/content/articles/2017/08/psblogweek-is-back/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2017-08-23-psblogweek-is-back/ +title: "#PSBlogWeek is Back!" +authors: + - Adam Bertram +date: "2017-08-23T17:49:39+00:00" +categories: + - Announcements +aliases: + - /2017/08/psblogweek-is-back/ +--- + +I've decided to bring #PSBlogWeek back! Brush off those PowerShell blogs and grease up those typing fingers....wait..don't do that but at least stretch a little bit. If you'd like to write a great article on PowerShell on your blog to help contribute great content and get yourself some notoriety, #PSBlogWeek is how it's done. +For full details, head over to [my blog][1] where I've outlined everything or head directly over to [psblogweek.com][2] for full details! + + + [1]: http://www.adamtheautomator.com/psblogweek-powershell-blogging-entire-week/ + [2]: http://www.psblogweek.com diff --git a/content/articles/2017/08/summit-agenda-process/index.md b/content/articles/2017/08/summit-agenda-process/index.md new file mode 100644 index 000000000..1b829e273 --- /dev/null +++ b/content/articles/2017/08/summit-agenda-process/index.md @@ -0,0 +1,159 @@ +--- +url: /articles/2017-08-08-summit-agenda-process/ +title: Summit agenda process +authors: + - Richard Siddaway +date: "2017-08-08T11:31:35+00:00" +categories: + - PowerShell Summit +aliases: + - /2017/08/summit-agenda-process/ +--- + +There’s been a lot of discussion on the Summit Slack channel around people proposing sessions for the 2018 Summit. I thought an explanation of how we put the agenda together would be useful for anyone thinking about submitting sessions. + + +First off though – if you’re thinking about submitting a session for the 2018 Summit then JUST DO IT! We are reserving a number of sessions for new speakers, as we always do. One of our goals for the Summit is to nurture the next generation of speakers. What better way to learn to speak about PowerShell than in front of the world’s greatest PowerShell audience. There is a balancing act between nurturing new speakers and having “big name” established speakers that we know will help draw an audience to the Summit. + + + +The call for topics - +[https://powershell.org/2017/08/01/76318/](https://powershell.org/2017/08/01/76318/) + +- explains what we’re looking for and the mechanics of submitting a session. This year it’s easier than ever and the site we are using facilitates two-way communication with the potential speaker so that we can help them fine tune their proposal. + + +Once you’ve submitted the proposal we get an email containing the title and the text. Within a few days (at most) you’ll start to get feedback even if it’s just a thank you for submitting if there’s nothing we think should be changed. We may start an extended dialog depending on the submission and what we actually need. + + +Well before we open the call for topics we’ll have decided the structure of the Summit – the 2018 structure was done immediately after the 2017 Summit! I’m not giving full details at this stage but we’ll have a mixture of standard 45-minute sessions and double length sessions. The exact mix will depend on the sessions that are submitted. That structure tells me how many sessions I need. From that number, I’ll subtract those that the PowerShell team will use and the time we need for the Community Lightning Demos (yes, they are returning in 2018) and any other activities. That gives me the number of sessions I need. + + + + A second consideration is budget. We’d love to have each session done by a separate speaker but that costs the Summit in terms of free admission, food etc. So, we have a budget which constrains the number of speakers we can sensibly accommodate without making the Summit too expensive for attendees. Again, this is a balancing act between diversity of speakers and the cost to attendees. + + + +Having determined the number of speakers and the number of sessions required I’ll start thinking about which topics will be of most interest in April 2018. We set the agenda in October 2017 so we’re guessing to a certain degree.  We look for sessions that meet one or more of these criteria: + + +· + + +A currently hot topic + + + +· + + +A new feature in PowerShell that attendees may not have had the time to investigate + + + +· + + +A topic that is causing a lot of questions on the forums + + + +· + + +A topic that we’ve not seen before + + + +· + + +A new module – as long as the code is explained -  that solves a problem or makes life easier + + + +· + + +A deep dive into an aspect of the PowerShell language or engine + + + +· + + +New techniques for using PowerShell + + + +· + + +Best practices + + + +· + + +DevOps – usually practical based “how I did X” + + + +· + + +What I learned doing “Y” and how that helps you + + + +· + + +How the session fits with other sessions we’re thinking of using + + + +· + + +It’s a positive session. Session proposals that dwell on, and just enumerate, the shot-comings of a particular aspect of PowerShell are extremely unlike to be accepted. If you turn that round and show how to overcome those issues – that’s a positive session. + + + +· + + +Do we think the speaker understands the topic well enough to present an authorative session? This is often base on the abstract of the proposal which is why we say it’s got to get our attention. + + + +· + + +Is it a session that can be presented as the same time as the PowerShell team or other “big name” is speaking so we can balance attendees across the rooms. + + + +Other criteria may apply depending on circumstances. + + +Once, we’ve got a number of sessions available we’ll start to circulate the details amongst the people helping put the agenda together asking for feedback on the session proposals. In some cases, this will become feedback to the proposer and we’ll work with the potential speaker to refine the proposal. This process has started. + + +When the call for topics has closed I’ll go through the proposed sessions and create a first pass of the agenda. This first pass is circulated to a small number of people who can comment, suggest alternative sessions, move sessions around and generally rework the agenda as required. When we’re happy we’ll notify the speakers and publish the agenda. If your sessions weren’t accepted we'll let you know. + + +Then we keep our fingers crossed that we’ve got it right and people will want to attend the Summit based on the agenda. + + +2018 will be our biggest Summit ever so we need more speakers. The information in this – especially the criteria used when thinking about sessions – should help you put together a proposal that will catch our eye. + + +If you’re in the slightest doubt about whether to submit sessions – JUST DO IT. If you want to discuss ideas then leave a comment, email me or join the Summit Slack channel #speaking-ideas where you can get feedback from people in a similar situation. + + +You are the future of Summit and we need you to submit those proposals. + + +Hope to see you (speaking) at the 2018 Summit. diff --git a/content/articles/2017/08/using-powershell-azure-automation-and-oms-part-ii/index.md b/content/articles/2017/08/using-powershell-azure-automation-and-oms-part-ii/index.md new file mode 100644 index 000000000..03f84c37c --- /dev/null +++ b/content/articles/2017/08/using-powershell-azure-automation-and-oms-part-ii/index.md @@ -0,0 +1,141 @@ +--- +url: /articles/2017-08-01-using-powershell-azure-automation-and-oms-part-ii/ +title: Using PowerShell, Azure Automation, and OMS – Part II +authors: + - Will Anderson +date: "2017-08-01T14:00:46+00:00" +categories: + - PowerShell for Admins +aliases: + - /2017/08/using-powershell-azure-automation-and-oms-part-ii/ +--- + +So last time we learned how to upload our custom modules into Azure Automation so we can start using them in Azure Automation Runbooks.  This week we're going to take a look at configuring a runbook to see what kind of data we can ingest from OMS Webhook data, and how we can leverage that data to pass into our functions. +**Creating the Runbook Script** +So first off, let's talk about basic runbooks and running them against objects in Azure.  As previously discussed, when your automation account is created, it creates with it an AzureRunAsAccount.  This account is configured to act on behalf of the user that has access to the automation account and the runbooks in order to perform the runbook task.  In order to leverage this account, you need to invoke it in the runbook itself.  You can actually find an example of this snippet in the AzureAutomationTutorialScript runbook in your automation account. + + +`$connectionName = "AzureRunAsConnection" +try +{ + # Get the connection "AzureRunAsConnection " + $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName + "Logging in to Azure..." + Add-AzureRmAccount ` + -ServicePrincipal ` + -TenantId $servicePrincipalConnection.TenantId ` + -ApplicationId $servicePrincipalConnection.ApplicationId ` + -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint +} +catch { + if (!$servicePrincipalConnection) + { + $ErrorMessage = "Connection $connectionName not found." + throw $ErrorMessage + } else{ + Write-Error -Message $_.Exception + throw $_.Exception + } +} +`So now that we've got our opening snippet, we'll add that into a new .ps1 script file in our preferred integrated scripting environment tool and get to work. +Now, in order to be able to ingest data from an OMS Alert, we need to be able to pass the data to our Azure Automation runbook.  In order to do so, we only need to add a $WebHookData parameter to the runbook and specify the data type as object. + + +`Param ( + [Parameters()][object]$WebHookData +) +`Now, we need to convert that data from a JSON object into something readable in our output.  Webhook data is presented with three primary datasets - WebhookName, RequestHeader, and RequestBody.  WebhookName, obviously is the name of the incoming webhook.  RequestHeader is a hash table containing all of the header data for the incoming requestion.  And finally, RequestBody is the body of the incoming request.  This is where the data we want to parse will reside.  Specifically, it will reside under the SearchResults property of the RequestHeader dataset. + + +`$WebhookData.WebhookName + $WebhookData.RequestHeader + $WebhookData.RequestBody +`So let's configure our runbook to display the incoming data to examine what we have to play with. + + +`$SearchResults = (ConvertFrom-Json $WebhookData.RequestBody).SearchResults.value +$SearchResults +`**Publish the Runbook** +Now, we'll go ahead and save our script as a .ps1 file and upload it to our automation account with the Import-AzureRmAutomationRunbook cmdlet. + + +`Import-AzureRmAutomationRunbook -Path 'C:\Scripts\Presentations\OMSAutomation\ExampleRunbookScript.ps1' -Name WebhookNSGRule -Type PowerShell -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -Published +`And now we can see our return. +![](https://powershell.org/wp-content/uploads/2017/07/7-ImportRunbook-300x150.png) +And if we check through the UI, we can see a brand-new, shiny runbook sitting in our automation account!  Now, we can configure a basic alert to monitor in OMS. +**Create an Alert** +For the purposes of this example, I've create a couple of virtual machines with network security group rules for HTTP:80 and RDP:3389 accepting connections from anywhere.  I do not recommend doing this for a production virtual machine.  /endDisclaimer +As you can well expect, these machines are throwing MaliciousIP traffic alerts in Operations Management Suite's console: +![](https://powershell.org/wp-content/uploads/2017/07/8.5-AlertUI-3-300x298.png) +So if we click on the MaliciousIP flag, it'll take us to the Log Search screen.  This includes the query data that we can use for the alert.  However, you'll want to clean up the query data a bit to generalize it.  In this example, the query is specific to the country that is displayed in the given flag.  But if we remove the country specific portion of the query, it'll allow us to cast a wider net and get data on potentially malicious traffic from any given country. + + +`Canned Query: +MaliciousIP=* AND (RemoteIPCountry=* OR MaliciousIPCountry=*) AND (((Type=WireData AND Direction=Outbound) OR (Type=WindowsFirewall AND CommunicationDirection=SEND) OR (Type=CommonSecurityLog AND CommunicationDirection=Outbound)) OR (Type=W3CIISLog OR Type=DnsEvents OR (Type = WireData AND Direction!= Outbound) OR (Type=WindowsFirewall AND CommunicationDirection!=SEND) OR (Type = CommonSecurityLog AND CommunicationDirection!= Outbound))) (RemoteIPCountry="People's Republic of China" OR MaliciousIPCountry="People's Republic of China") +Modified Query: +MaliciousIP=* AND (RemoteIPCountry=* OR MaliciousIPCountry=*) AND (((Type=WireData AND Direction=Outbound) OR (Type=WindowsFirewall AND CommunicationDirection=SEND) OR (Type=CommonSecurityLog AND CommunicationDirection=Outbound)) OR (Type=W3CIISLog OR Type=DnsEvents OR (Type = WireData AND Direction!= Outbound) OR (Type=WindowsFirewall AND CommunicationDirection!=SEND) OR (Type = CommonSecurityLog AND CommunicationDirection!= Outbound))) +`![](https://powershell.org/wp-content/uploads/2017/07/9-ConfigureQuery-1-300x136.jpg) +After testing our query to make sure it's valid, we can now hit the alert button and configure the alert.  Here you'll need to give it an alert name, a schedule, and number of results before it triggers the alert.  You'll also want to select the Runbook option under actions and select the test runbook we created.  Then we hit save, and wait for our alert to trigger and the runbook to fire. +![](https://powershell.org/wp-content/uploads/2017/07/10-ConfigureAlert-300x193.jpg) +And as you can see, I didn't have to wait long: +![](https://powershell.org/wp-content/uploads/2017/07/11-RunbookFired-300x240.jpg) +**Validate our Data** +If we click on one of the completed instances, and navigate to the output blade, we can now see the data we're receiving from our triggered alert.  This particular data shows that inbound traffic from Colombia is attempting an RDP connection to my virtual machine.  With the inbound IP Address and target system name, we now have enough data to be able to create a full-blown auto-remediation solution. + + +`Logging in to Azure... +Environments Context +------------ ------- +{[AzureCloud, AzureCloud], [AzureChinaCloud, AzureChinaCloud], [AzureUSGovernment, AzureUSGovernment]} Microsoft.Azur... +Computer : server1 +MG : 00000000-0000-0000-0000-000000000001 +ManagementGroupName : AOI-cb0eefe8-b88f-47ce-ae91-dbc46df99751 +SourceSystem : OpsManager +TimeGenerated : 2017-07-21T12:17:37.45Z +SessionStartTime : 2017-07-21T12:16:52Z +SessionEndTime : 2017-07-21T12:16:52Z +LocalIP : 10.119.192.10 +LocalSubnet : 10.119.192.0/21 +LocalMAC : 00-0d-3a-03-ea-a6 +LocalPortNumber : 3389 +RemoteIP : 200.35.53.121 +RemoteMAC : 12-34-56-78-9a-bc +RemotePortNumber : 4935 +SessionID : 10.119.192.10_3389_200.35.53.121_4935_2184_2017-07-21T12:16:52.000Z +SequenceNumber : 0 +SessionState : Listen +SentBytes : 20 +ReceivedBytes : 40 +TotalBytes : 60 +ProtocolName : TCP +IPVersion : IPv4 +SentPackets : 1 +ReceivedPackets : 2 +Direction : Inbound +ApplicationProtocol : RDP +ProcessID : 888 +ProcessName : C:\Windows\System32\svchost.exe +ApplicationServiceName : ms-wbt-server +LatencyMilliseconds : 116 +LatencySamplingTimeStamp : 2017-07-21T12:16:52Z +LatencySamplingFailureRate : 0.0% +MaliciousIP : 200.35.53.121 +IndicatorThreatType : Botnet +Confidence : 75 +Severity : 2 +FirstReportedDateTime : 2017-07-20T20:10:32Z +LastReportedDateTime : 2017-07-21T11:25:11.0661909Z +IsActive : true +ReportReferenceLink : https://interflowinternal.azure-api.net/api/reports/download/generic/webbot.json +RemoteIPLongitude : -75.88 +RemoteIPLatitude : 8.77 +RemoteIPCountry : Colombia +id : 149270bc-74fc-13d0-34a9-3fd665a457b2 +Type : WireData +__metadata : @{Type=WireData; TimeGenerated=2017-07-21T12:17:37.45Z} +`It's a long road, and we're almost there!  Next week, I'll take you through my process of modifying my module to directly ingest webhook data, and how we can take our OMS queries and deploy them to other Operations Management Suite solutions using PowerShell.  See you then! +[Part I - Azure Automation Account Creation and Adding Modules][1] +**Part II - Configuring Azure Automation Runbooks And Understanding Webhook Data** +Part III - Utilizing Webhook Data in Functions and Validate Results - Coming Soon! + + [1]: https://powershell.org/2017/07/25/using-powershell-azure-automation-and-oms-part-i/ diff --git a/content/articles/2017/08/using-powershell-azure-automation-and-oms-part-iii/index.md b/content/articles/2017/08/using-powershell-azure-automation-and-oms-part-iii/index.md new file mode 100644 index 000000000..de2996559 --- /dev/null +++ b/content/articles/2017/08/using-powershell-azure-automation-and-oms-part-iii/index.md @@ -0,0 +1,185 @@ +--- +url: /articles/2017-08-08-using-powershell-azure-automation-and-oms-part-iii/ +title: Using PowerShell, Azure Automation, and OMS – Part III +authors: + - Will Anderson +date: "2017-08-08T14:00:43+00:00" +categories: + - PowerShell for Admins +aliases: + - /2017/08/using-powershell-azure-automation-and-oms-part-iii/ +--- + +It's been a long road, but we're almost there!  A couple of weeks ago we looked at how we can create an Azure Automation Account and add our own custom modules to the solution to be used in Azure Automation.  Last week, we took a deeper dive into configuring a runbook to take in webhook data from an alert using Microsoft's Operations Management Suite.  Then we looked into the data itself to see how we can leverage it against our runbook to fix problems for us on the fly. +This week, we're going to modify an existing function to use that webhook data directly. +**Building on Webhook Data** +We could actually build our logic directly into the runbook to parse the webhook data and then pass the formatted information to our function that we've made available in Azure.  But I prefer to keep my runbooks as simple as possible and do the heavy lifting in my function.  This makes the runbook look a little bit cleaner, and allows me to minimize my code management a little more.  Also, Azure Automation Runbooks, as of this writing, don't play nicely with parameter sets in them, so I might as well pass my data along to a command that does. +Originally, I had built a one-liner that allowed me to create an NSG rule on the fly to block and incoming traffic from a specific IPAddress.  It was a fairly simple command.  But today, we're going to make it a little more robust, and give it the ability to use webhook data.  Here's my original code: + + +`Function Set-AzureRmNSGMaliciousRule { + [cmdletbinding()] + Param( + [Parameter(Mandatory=$true)][string]$ComputerName, + [Parameter(Mandatory=$true)][string]$IPAddress + ) + $ResGroup = (Get-AzureRmResource).where({$PSItem.Name -eq $Sys}) + $VM = Get-AzureRmVM -ResourceGroupName $ResGroup.ResourceGroupName -Name $Sys + $VmNsg = (Get-AzureRmNetworkSecurityGroup -ResourceGroupName $VM.ResourceGroupName).where({$PSItem.NetworkInterfaces.Id -eq $VM.NetworkProfile.NetworkInterfaces.Id}) + $Priority = ($VmNsg.SecurityRules) | Where-Object -Property Priority -LT 200 | Select-Object -Last 1 + If ($Priority -eq $null){ + $Pri = 100 + } + Else { + $Pri = ($Priority + 1) + } + $Name = ('BlockedIP_' + $IPAddress) + $NSGArgs = @{ + Name = $Name + Description = ('Malicious traffic from ' + $IPAddress) + Protocol = '*' + SourcePortRange = '*' + DestinationPortRange = '*' + SourceAddressPrefix = $IPAddress + DestinationAddressPrefix = '*' + Access = 'Deny' + Direction = 'Inbound' + Priority = $Pri + } + $VmNsg | Add-AzureRmNetworkSecurityRuleConfig @NSGArgs | Set-AzureRmNetworkSecurityGroup +} +`I want to keep my mandatory parameters for my original one-liner solution in-case I need to do something tactically.  So we'll go ahead and split the parameters for on-prem vs. webhook into different parameter sets.  As webhook data is formatted as a JSON object, we'll need to specify the data type for the WebhookData parameter as object. + + +`Param( + [Parameter(ParameterSetName='ConsoleInput')][string]$ComputerName, + [Parameter(ParameterSetName='ConsoleInput')][string]$MaliciousIP, + [Parameter(ParameterSetName='WebhookInput")][object]$WebhookData + ) +`Now, we're going to add some logic to parse out the data that we're looking to use: + + +`If($PSCmdlet.ParameterSetName -eq 'WebhookInput'){ + $SearchResults = (ConvertFrom-Json $WebhookData.RequestBody).SearchResults.value + Write-Output ("Target computer is " + $SearchResults.Computer) + Write-Output ("Malicious IP is " + $SearchResults.RemoteIP) + $ComputerName = (($SearchResults.Computer).split(' ') | Select-Object -First 1) + $MaliciousIP = (($SearchResults.RemoteIP).split(' ') | Select-Object -First 1) + } + If ($ComputerName -like "*.*"){ + $Sys = $ComputerName.Split('.') | Select-Object -First 1 + } + Else { + $Sys = $ComputerName + } +`You'll notice that I'm doing some string formatting with our data here.  Webhook data can concatenate multiple alerts together and separate the array by using spaces, so we're splitting that up and grabbing the first entry for each input we need.  The additional splitting on the ComputerName is to accomodate for systems that are domain joined, as Azure isn't necessarily aware of a system's FQDN.  Mind you, this is a rough example, and continuously growing; So as my use cases evolve, so will my code. +Now that we have our data formatted, we can update our module and upload it to our Azure Automation Account using the same process outlined in Part I, but with the -Force parameter added so we can overwrite the existing instance. + + +`Param( + [Parameter(Mandatory=$true)] + [object]$WebhookData +) +$connectionName = "AzureRunAsConnection" +try +{ + # Get the connection "AzureRunAsConnection " + $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName + "Logging in to Azure..." + Add-AzureRmAccount ` + -ServicePrincipal ` + -TenantId $servicePrincipalConnection.TenantId ` + -ApplicationId $servicePrincipalConnection.ApplicationId ` + -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint +} +catch { + if (!$servicePrincipalConnection) + { + $ErrorMessage = "Connection $connectionName not found." + throw $ErrorMessage + } else{ + Write-Error -Message $_.Exception + throw $_.Exception + } +} +Set-AzureRmNSGMaliciousRule -WebHookData $WebhookData +`Now, in a few minutes, our runbook should trigger and we can monitor the result. + + +`$Job = (Get-AzureRmAutomationJob -RunbookName WebhookNSGRule -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName) +$Job[0] | Select-Object -Property * +ResourceGroupName : mms-eus +AutomationAccountName : testautoaccteastus2 +JobId : 339601cd-14e9-4002-8fcd-7d2008726445 +CreationTime : 7/24/2017 10:11:43 AM -04:00 +Status : Completed +StatusDetails : +StartTime : 7/24/2017 10:12:21 AM -04:00 +EndTime : 7/24/2017 10:13:31 AM -04:00 +Exception : +LastModifiedTime : 7/24/2017 10:13:31 AM -04:00 +LastStatusModifiedTime : 1/1/0001 12:00:00 AM +00:00 +JobParameters : {} +RunbookName : WebhookNSGRule +HybridWorker : +StartedBy : +`We can start digging into the outputs of the runbook after completion to gather a little more data. + + +`$Job = (Get-AzureRmAutomationJob -RunbookName WebhookNSGRule -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName) +$JobOut = Get-AzureRmAutomationJobOutput -Id $Job[0].JobId -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName +ForEach ($JobCheck in $JobOut){ + $JobCheck.Summary +} +PS C:\WINDOWS\system32> ForEach ($JobCheck in $JobOut){ + $JobCheck.Summary +} +Logging in to Azure... +Target computer is server1 server1 server1 +Malicious IP is 183.129.160.229 183.129.160.229 +Target system is server1 +Incoming MaliciousIP is 183.129.160.229 +Creating rule... +`And now if I check against my system, we will see that OMS is auto-generating rules for us! + + +`$VM = (Get-AzureRmResource).where({$PSItem.Name -like 'server1'}) +$Machine = Get-AzureRmVM -ResourceGroupName $VM[0].ResourceGroupName -Name $VM[0].Name +$NSG = (Get-AzureRmNetworkSecurityGroup -ResourceGroupName $Machine.ResourceGroupName).where({$PSItem.NetworkInterfaces.Id -eq $Machine.NetworkProfile.NetworkInterfaces.Id}) +(Get-AzureRmNetworkSecurityRuleConfig -NetworkSecurityGroup $NSG[0]).where({$PSItem.Name -like "BlockedIP_*"}) +Name : BlockedIP_206.190.36.45 +Id : /subscriptions/f2007bbf-f802-4a47-9336-cf7c6b89b378/resourceGroups/test/providers/Microsoft.Network/networkSecurityGroups/server1nsgeus2domain + Controller/securityRules/BlockedIP_206.190.36.45 +Etag : W/"279e0fee-05c6-43ef-b897-19f927dd9a40" +ProvisioningState : Succeeded +Description : Auto-Generated rule - OMS detected malicious traffic from 206.190.36.45 +Protocol : * +SourcePortRange : * +DestinationPortRange : * +SourceAddressPrefix : 206.190.36.45 +DestinationAddressPrefix : * +Access : Deny +Priority : 100 +Direction : Inbound +Name : BlockedIP_183.129.160.229 +Id : /subscriptions/f2007bbf-f802-4a47-9336-cf7c6b89b378/resourceGroups/test/providers/Microsoft.Network/networkSecurityGroups/server1nsgeus2domain + Controller/securityRules/BlockedIP_183.129.160.229 +Etag : W/"279e0fee-05c6-43ef-b897-19f927dd9a40" +ProvisioningState : Succeeded +Description : Auto-Generated rule - OMS detected malicious traffic from 183.129.160.229 +Protocol : * +SourcePortRange : * +DestinationPortRange : * +SourceAddressPrefix : 183.129.160.229 +DestinationAddressPrefix : * +Access : Deny +Priority : 101 +Direction : Inbound +`After letting my system go for about 24 hours, my OMS Alert triggered the runbook an additional five times.  Each time generating an additional network security group rule in response to traffic that OMS had recognized as potentially malicious, and thus remediating my problem while I slept. +![](https://powershell.org/wp-content/uploads/2017/07/12-NSG-300x48.jpg) +Using a monitoring tool that can tightly integrate with your automation tools is a necessity in the age of the Cloud.  I hope you enjoyed this series and find it to be useful! +[Part I - Azure Automation Account Creation and Adding Modules][1] +Part II - Configuring Azure Automation Runbooks And Understanding Webhook Data +**Part III - Utilizing Webhook Data in Functions and Validate Results** + + [1]: https://powershell.org/2017/07/25/using-powershell-azure-automation-and-oms-part-i/ diff --git a/content/articles/2017/09/_index.md b/content/articles/2017/09/_index.md new file mode 100644 index 000000000..164664627 --- /dev/null +++ b/content/articles/2017/09/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from September 2017" +description: "PowerShell.org Articles published in September 2017." +--- diff --git a/content/articles/2017/09/call-for-topics-closing-1-october/index.md b/content/articles/2017/09/call-for-topics-closing-1-october/index.md new file mode 100644 index 000000000..571c64a59 --- /dev/null +++ b/content/articles/2017/09/call-for-topics-closing-1-october/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2017-09-30-call-for-topics-closing-1-october/ +title: Call for topics closing 1 October +authors: + - Richard Siddaway +date: "2017-09-30T15:22:45+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2017/09/call-for-topics-closing-1-october/ +--- + +The call for topics is closing 1 October at 23:59 GMT. We’ve had a fantastic set of submissions. Creating an agenda for the 2018 Summit is going to be very difficult because we’ve had so many fantastic sessions submitted and I don’t have enough slots to take them all. + +The call for topics is hosted by papercall.io – highly recommended – and the cut off is automatic. + +I WILL NOT ACCEPT ANY SESSIONS SUBMITTED AFTER THE CUT OFF DATE. diff --git a/content/articles/2017/09/powershell-and-devops-summit-2018-session-acceptance/index.md b/content/articles/2017/09/powershell-and-devops-summit-2018-session-acceptance/index.md new file mode 100644 index 000000000..862aeacb3 --- /dev/null +++ b/content/articles/2017/09/powershell-and-devops-summit-2018-session-acceptance/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2017-09-02-powershell-and-devops-summit-2018-session-acceptance/ +title: PowerShell and DevOps Summit 2018 – session acceptance +authors: + - Richard Siddaway +date: "2017-09-02T11:21:32+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2017/09/powershell-and-devops-summit-2018-session-acceptance/ +--- + +We have started the acceptance process for the sessions to be presented at the 2018 Summit. Those currently accepted sessions are listed in the [brochure][1] +The deadline for submissions still remains as 2 October 2017 +We'll probably be formally accepting a number of other sessions during September BUT the bulk of the agenda won't be finalised until after the deadline closes. +You still have plenty of time to get your submissions into the system. The earlier you do so the more time we have to help you refine the submission. + + [1]: https://cdn-powershell.pressidium.com/wp-content/uploads/2017/09/2018-Brochure.pdf diff --git a/content/articles/2017/09/the-future-of-powershells-desired-state-configuration/index.md b/content/articles/2017/09/the-future-of-powershells-desired-state-configuration/index.md new file mode 100644 index 000000000..c1356dc36 --- /dev/null +++ b/content/articles/2017/09/the-future-of-powershells-desired-state-configuration/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2017-09-13-the-future-of-powershells-desired-state-configuration/ +title: "The Future of PowerShell's Desired State Configuration" +authors: + - Don Jones +date: "2017-09-13T15:28:06+00:00" +categories: + - PowerShell for Admins +aliases: + - /2017/09/the-future-of-powershells-desired-state-configuration/ +--- + +Microsoft [recently published a "Future of DSC" post][1] that I thought deserved some independent commentary. + + + +Something to bear in mind is that the existing, open-source "DSC for Linux" was not authored by the PowerShell team. It was written by Microsoft's Unix Services team, and it doesn't currently offer the exact functionality of the Windows implementation. So some of this announcement is the PowerShell team actually "taking on" DSC for other platforms. +This includes a new Local Configuration Manager (LCM) for PowerShell Core, which implies it'll run anywhere PowerShell core does - Linux, macOS, and so on - as well as Windows, since PowerShell Core can run on Windows, too. It no longer requires the complex-to-install OMI stack, and it supports DSC resources written in PowerShell, Python scripts, and C/C++. +Now, it's important to note that this is a pre-release announcement, and the plans may not survive engagement. That's means the situation is still fluid, and it's probably a bit early to start making plans. This is a situation to _monitor,_ not _act upon,_ at this date. +This does mean that, if plans play out as they are now, _everything about DSC today will probably change a lot._ There will be new commands to replace things like Start-DscConfiguration. But some things won't change: the Pull Server protocol, for example, will be supported by DSC Core (this is easy to do as the protocol isn't complex and is all REST-based), so the existing Pull Server and Azure Automation DSC will still work. +The upside to all of this - and Microsoft's intent, from what I can tell - is to converge on a single code base for DSC, and make all platforms "first class citizens." Today's DSC - what the team calls "DSC for Windows PowerShell" or "Windows Management Framework (WMF) version of DSC" - is at a dead-end. They're not going to delete it, but they're going to focus development on DSC Core. _That_ has implications. It means that, in order to move forward, any custom resources you write and use need to use native C/C++, PowerShell 6 scripts, or commands that are supported under .NET Standard 2.0. WMI is right out, although it'll be interesting to see if the team maintains that stance, or chooses to make WMI available on Windows but not on Linux (which would break the "same code running everywhere" philosophy they're currently aimed at). +The native Pull server's future appears to be unknown. I'm not sure that's a bad thing; it's presented nowadays as "sample code," and it's always been a problematic and minimally-useful chunk of code. I wish more people were looking at [Tug][2], which is an open-source Pull Server framework that you can code up (in PowerShell or .NET) to act however you want. It comes with a simple implementation that more or less mimics the native Pull Server, without the Jet database engine dependency (fun story: Jet/EBD was chosen because the team could get it working on Nano, and now Nano isn't ever going to be used for that purpose as it's been repositioned as a "container OS"). If more people invested in Tug, DSC would be a lot better off overall. +My thoughts? +Overall, "yay" for "same functionality on all platforms." The potential need to rewrite a crapload of DSC resources, and possibly losing WMI (if I'm reading this right), is a big "boo," and might push people away from an already-fragile relationship with DSC. "Boo" also to another re-do of DSC (v4 to v5 was not immaterial), making it feel like Microsoft didn't really have a good long-term vision for the technology to begin with (and indeed, some of the architectural problems in v5, like how partial configurations work, further suggest a lack of vision). DSC Core may be a chance for Microsoft to re-think past approaches and fix mistakes, so "yay" if they do that along the way. +Predominantly, though, a big "boo" to a continued lack of tooling. I get that DSC is an "under the hood" technology latter, but like zero other teams at Microsoft have, at this point, helped pile any kind of tooling on top of it. It's like we have the Chef engine or Puppet engine, but not of the tooling that makes those things true _solutions._ +Taking off my Microsoft fanboy hat, I can see it being difficult for a CIO to take a strong dependency on DSC at this point. We're aiming for its third iteration, which _will_ break backward compatibility and, in some ways, reduce functionality. Microsoft still can't produce a production-viable on-prem pull server, and doesn't seem interested in doing so. We still don't have any kind of management tooling (in part, I think, to the continued shitshow that is the System Center "strategy" these days), so DSC remains a highly do-it-yourself endeavor. Not every organization is going to be comfortable with that. I do think Tug - again, with some do-it-yourself investment - can make DSC vastly more intelligent and powerful (you can, for example, code it to assemble MOFs on-the-fly, extract configuration fragments from a database, or literally anything else you might want), but people in the Microsoft space are used to prepackaged solutions that just install and go. +I like the "write once, run anywhere" promise; that's what .NET was supposed to be all about when Microsoft stepped away from Java back in the day. I get how DSC Core, _for VMs running in Azure,_ may be a first-class citizen for dynamic, declarative configurations, and how that all leads nicely to a DevOps style footing. For on-prem, DSC is going to continue to be challenging for people who aren't accustomed to a lot of DIY, and who are trying to take hard and long-lasting dependencies on a configuration technology. + + [1]: https://blogs.msdn.microsoft.com/powershell/2017/09/12/dsc-future-direction-update/ + [2]: https://github.com/PowerShellOrg/tug diff --git a/content/articles/2017/09/using-azure-desired-state-configuration-part-i/index.md b/content/articles/2017/09/using-azure-desired-state-configuration-part-i/index.md new file mode 100644 index 000000000..1c8a95d1e --- /dev/null +++ b/content/articles/2017/09/using-azure-desired-state-configuration-part-i/index.md @@ -0,0 +1,35 @@ +--- +url: /articles/2017-09-25-using-azure-desired-state-configuration-part-i/ +title: Using Azure Desired State Configuration – Part I +authors: + - Will Anderson +date: "2017-09-25T14:00:45+00:00" +categories: + - PowerShell for Admins +aliases: + - /2017/09/using-azure-desired-state-configuration-part-i/ +--- + +I've been wanting to do this series for a while, and with some of the recent changes in Azure Automation DSC, I feel like we can now do a truly complete series.  So let's get started! +Compliance is hard as it is.  And as companies start moving more workloads into the cloud, they struggle with compliance even more so.  Many organizations are moving to Infrastructure-as-a-Service for a multitude of reasons (both good and bad).  As these workloads become more numerous, IT departments are struggling with keeping up with auditing and management needs.  Desired State Configuration, as we all know, can provide a path to not only configuring your environments as they deploy as new workloads, but can maintain compliancy, and give you rich reporting. +Yes.  Rich reporting from Desired State Configuration, out of the box.  You read it right.  You can get rich graphical reporting out of Azure Automation Desired State Configuration out of the box.  And you can even use it on-prem! +![](https://powershell.org/wp-content/uploads/2017/08/Compliance-300x200.jpg) +In this series, we're going to be discussing the push and pull methods for Desired State Configuration in Azure.  We'll be going over some of the 'gotchas' that you have to keep in mind while deploying your configurations in the Azure environment.  And we'll be talking about how we can use hybrid workers to manage systems on-prem using the same tools. +**Push vs. Pull** +Desired State Configuration, like a datacenter implementation, can be handled via push or pull method.  Push method in Azure does not give you reporting, but allows you to deploy your configurations to a new or existing environment.  These configurations, and the modules necessary to perform the configuration, are stored in a private blob that you create, and then the Azure Desired State Configuration extension can be assigned that package.  It is then downloaded to the target machine, decompressed, modules installed, and the configuration .mof file generated locally on the system. +Pull method fully uses the capabilities of the Azure Automation Account for storing modules, configurations, and .mof compilations to deploy to systems.  The target DSC nodes are registered and monitored through the Azure Automation Account and reporting is generated and made available through the UI.  This reporting can also be forwarded to [OMS Log Analytics][1] for dashboarding and alerting purposes (which, as we discussed in [my previous series][2], can be used with Azure Automation Runbooks for auto-remediation). +**Pros and Cons to Each** +So let's talk about some of the upsides and downsides to each method.  These may affect your decisions as you architect your DSC solution. + + * _Pricing_ - Azure DSC is essentially free.  Azure Automation DSC is free for Azure nodes, while there is a cost associated with managed on-prem nodes.  This charged per month and is dependent on how often the machines are checking in.  You can get more information on the particulars [here][3]. + * _Reporting_ - If you're looking for rich reporting, Azure Automation DSC is definitely the way to go.  You can still get statuses from your Azure DSC nodes via PowerShell, but this leaves the onus on you to format that data and make it look pretty.  We'll be taking a look at how we can do this a bit later. + * _Flexibility_ - Azure Automation DSC allows you to use modules stored in your Azure Automation Account.  If you wish to use a new module, you simply add that module, update your configuration file, and recompile.  With Azure DSC, you need to repackage your configuration with all of the modules, re-publish them, and re-push them to your target machines. + * _Side-by-Side Module Versioning Tolerance_ - Currently, Azure DSC actually has an advantage over Azure Automation DSC in this respect.  You cannot currently have multiple module versions in your module repository.  So if you're using Automation DSC and calling the same DSC resources in multiple configs, they need to all be on that same module version. + * _On-Prem Management Capabilities_ - Azure Automation DSC has the ability to manage on-prem virtual machines, either directly or via Hybrid Workers.  This gives you the ability to manage all of your virtual machines and monitor their configuration status from a single pane of glass.  Azure DSC does not have this capability. + * _Managing Systems in AWS_ - Yes.  You can also manage your virtual machines in AWS using the AWS DSC Toolkit via Azure Automation DSC! + +So that's the overview of what we're going to be talking about through this series.  Tomorrow, we'll be getting into how to add configurations into Azure Automation DSC and compiling your configs. + + [1]: https://docs.microsoft.com/en-us/azure/automation/automation-dsc-diagnostics + [2]: https://powershell.org/2017/07/25/using-powershell-azure-automation-and-oms-part-i/ + [3]: https://azure.microsoft.com/en-us/pricing/details/automation/ diff --git a/content/articles/2017/09/using-azure-desired-state-configuration-part-ii/index.md b/content/articles/2017/09/using-azure-desired-state-configuration-part-ii/index.md new file mode 100644 index 000000000..0e4308bad --- /dev/null +++ b/content/articles/2017/09/using-azure-desired-state-configuration-part-ii/index.md @@ -0,0 +1,141 @@ +--- +url: /articles/2017-09-26-using-azure-desired-state-configuration-part-ii/ +title: Using Azure Desired State Configuration – Part II +authors: + - Will Anderson +date: "2017-09-26T14:00:21+00:00" +categories: + - PowerShell for Admins +aliases: + - /2017/09/using-azure-desired-state-configuration-part-ii/ +--- + +Today we're going to be talking about adding configurations to your Azure Automation Account.  In this article, we'll be discussing special considerations that we need to take into account when uploading our configurations.  Then we'll talk about compiling the configurations into Managed Object Format (.mof) files, which we'll be able to use to assign to our systems. +**Things to Consider** +When building configurations for Azure DSC (or anything where we are pulling pre-created .mof files from), there are some things that we need to keep in mind. +_Don't embed PowerShell scripts in your configurations._ - I spent a lot of time cleaning up my own configurations when learning Azure Automation DSC.  When configurations are compiled, they're done so on a virtual machine hidden under the covers and can cause some unexpected behaviours.  Some of the issues that I ran into were: + + * Using environment variables like $env:COMPUTERNAME - This actually caused me a lot of headaches when I started building systems that were being joined to a domain.  The name of the instance that _compiles_ the .mof will be used for $env:COMPUTERNAME instead of the target computer name and you'll be banging your head on the table wondering what happened.  Some of the resources that have been published in the gallery have been updated to use a 'localhost' option as a computer name input, such as xActiveDirectory.  This takes care of a lot of those headaches. + * Using Parenthetical Commands to establish values - Using something like Get-NetAdapter in a parenthetical argument to get a network adapter of your target system and pass the needed values on to your DSC Resource Providers won't work for the same reasons as above.  In this instance, I received a vague error indicating that I was passing an invalid property, and took a little bit of time before I understood what was going on. + * I also ran into an issue with compiling a configuration because I had been using Set-Item to configure the WSMan maxEnvelopeSize in my configs because they can get really big.  The error that I received was that WSMan wasn't installed on the machine.  It took me a bit to realize that this was because the machine compiling the .mof didn't have WSMan running on the box and it was blowing up on the config. + +Instead, if you need to run PowerShell scripts ahead of your deployment, you can use the custom script extension to perform those tasks in Azure, or just put the script into your image on-prem.  There is one exception to this, and that's what we'll be talking about next. +_Leverage Azure Automation Credential storage where possible_ - Passing credentials in as a parameter can cause all kinds of issues. + + * First and foremost, anyone that is building or deploying those configurations will know those credentials. + * Second of all, it brings the possibility of someone tripping over the keyboard and entering a credential in improperly. + +Allowing Azure Automation to tap the credential store during .mof compilation allows to credentials to stay in a secured bubble through the entire process.  To pass a credential from Azure Automation to your config, you need to modify the configuration.  Simply call Get-AutomationPSCredential to a variable inside your configuration, and then set that variable wherever those credentials are required.  Like so: + + +`$AdminCreds = Get-AutomationPSCredential -Name $AdminName + Node ($AllNodes.Where{$_.Role -eq "WebServer"}).NodeName + { + JoinDomain DomainJoin + { + DependsOn = "[WindowsFeature]RemoveUI" + DomainName = $DomainName + Admincreds = $Admincreds + RetryCount = 20 + RetryIntervalSec = 60 + } + } +`Azure Automation under the covers will authenticate to the Credentials store with the RunAs account, and then pass those credentials as PSCredential to your DSC resource provider. +_Stop Using localhost (or a specific computer name) as the Node Name_ - Azure Automation DSC allows you to use genericized, but meaningful names to configurations instead of just assigning things to localhost.  So now you can use webServer, or domainController, or something that describes the role instead of a machine name.  This makes it much easier to decide which configuration should go to what machine. +![](https://powershell.org/wp-content/uploads/2017/09/roles-267x300.jpg) +**Upload The Configuration** +So much like in my previous series on Azure Automation and OMS, we're going to upload our DSC resources to our Automation Account's modules directory.  This requires getting the automation account, zipping up our local module files, sending them to a blob store, and importing those modules from the blob store.  I've sectioned out the code into different regions to better break it down for your own purposes. + + +`#region GetAutomationAccount +$AutoResGrp = Get-AzureRmResourceGroup -Name 'mms-eus' +$AutoAcct = Get-AzureRmAutomationAccount -ResourceGroupName $AutoResGrp.ResourceGroupName +#endregion +#region compress configurations + Set-Location C:\Scripts\Presentations\AzureAutomationDSC\ResourcesToUpload + $Modules = Get-ChildItem -Directory + ForEach ($Mod in $Modules){ + Compress-Archive -Path $Mod.PSPath -DestinationPath ((Get-Location).Path + '\' + $Mod.Name + '.zip') -Force + } +#endregion +#region Access blob container +$StorAcct = Get-AzureRmStorageAccount -ResourceGroupName $AutoAcct.ResourceGroupName +Add-AzureAccount +$AzureSubscription = ((Get-AzureSubscription).where({$PSItem.SubscriptionName -eq $Sub.Name})) +Select-AzureSubscription -SubscriptionName $AzureSubscription.SubscriptionName -Current +$StorKey = (Get-AzureRmStorageAccountKey -ResourceGroupName $StorAcct.ResourceGroupName -Name $StorAcct.StorageAccountName).where({$PSItem.KeyName -eq 'key1'}) +$StorContext = New-AzureStorageContext -StorageAccountName $StorAcct.StorageAccountName -StorageAccountKey $StorKey.Value +$Container = Get-AzureStorageContainer -Name ('modules') -Context $StorContext +#endregion +#region upload zip files +$ModulesToUpload = Get-ChildItem -Filter "*.zip" +ForEach ($Mod in $ModulesToUpload){ + $Blob = Set-AzureStorageBlobContent -Context $StorContext -Container $Container.Name -File $Mod.FullName -Force + New-AzureRmAutomationModule -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -Name ($Mod.Name).Replace('.zip','') -ContentLink $Blob.ICloudBlob.Uri.AbsoluteUri +} +#endregion +`Once we've uploaded our files, we can monitor them to ensure that they've imported successfully via the UI, or by using the Get-AzureRmAutomationModule command. +![](https://powershell.org/wp-content/uploads/2017/09/ModuleImport-300x109.jpg) + + +`PS C:\Scripts\Presentations\AzureAutomationDSC\ResourcesToUpload> Get-AzureRmAutomationModule -Name LWINConfigs -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountNa +me +ResourceGroupName : mms-eus +AutomationAccountName : testautoaccteastus2 +Name : LWINConfigs +IsGlobal : False +Version : 1.0.0.0 +SizeInBytes : 5035 +ActivityCount : 1 +CreationTime : 9/13/2017 9:56:10 AM -04:00 +LastModifiedTime : 9/13/2017 9:57:26 AM -04:00 +ProvisioningState : Succeeded +`**Compile the Configuration** +Once we've uploaded our modules, we can then upload and compile our configuration.  For this, we'll use the Import-AzureRmAutomationDscConfiguration command.  But before we do, there's two things to note when formatting a configuration for deployment to Azure Automation DSC. + + * The configuration name has to match the name of the configuration file.  So if your configuration is called SqlServerConfig, your config file has to be called SqlServerConfig.ps1. + * The sourcepath parameter errors out with an 'invalid argument specified' error if you use a string path.  Instead, it works if you use (Get-Item).FullName + +We'll be casting this command to a variable, as we'll be using it later on when we compile the configuration.  You'll also want to use the publish parameter to publish the configuration after importation, and if you're overwriting a configuration you'll want to leverage the force parameter. + + +`$Config = Import-AzureRmAutomationDscConfiguration -SourcePath (Get-Item C:\Scripts\Presentations\AzureAutomationDSC\TestConfig.ps1).FullName -AutomationAccountName $AutoAcct.AutomationAccountName -ResourceGroupName $AutoAcct.ResourceGroupName -Description DemoConfiguration -Published -Force +`![](https://powershell.org/wp-content/uploads/2017/09/ConfigPublished-300x97.jpg) +Now that our configuration is published, we can compile it.  So let's add our parameters and configuration data: + + +`$Parameters = @{ + 'DomainName' = 'lwinerd.local' + 'ResourceGroupName' = $AutoAcct.ResourceGroupName + 'AutomationAccountName' = $AutoAcct.AutomationAccountName + 'AdminName' = 'lwinadmin' +} +$ConfigData = +@{ + AllNodes = + @( + @{ + NodeName = "*" + PSDscAllowPlainTextPassword = $true + }, + @{ + NodeName = "webServer" + Role = "WebServer" + } + @{ + NodeName = "domainController" + Role = "domaincontroller" + } + ) +} +`You'll notice that I have PSDscAllowPlainTextPassword set to true for all of my nodes.  This is to allow the PowerShell instance on the compilation node to compile the configuration with credentials being passed into it.  This PowerShell instance isn't aware that once the .mof is compiled, it is encrypted by Azure Automation before it's stored in the Automation Account. +Now that we have our parameters and configuration data set, we can pass this to our Start-AzureRmAutomationDscCompilationJob command to kick off the .mof compilation. + + +`$DSCComp = Start-AzureRmAutomationDscCompilationJob -AutomationAccountName $AutoAcct.AutomationAccountName -ConfigurationName $Config.Name -ConfigurationData $ConfigData -Parameters $Parameters -ResourceGroupName $AutoAcct.ResourceGroupName +`And now we can use the Get-AzureRmAutomationDscCompilationJob command to check the status of the compilation, or check through the UI. + + +`Get-AzureRmAutomationDscCompilationJob -Id $DSCComp.Id -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName +`The compilation itself can take up to around five minutes, so grab yourself a cup of coffee.  Once it returns as complete, we can get to registering our endpoints and delivering our configurations to them.  Join us next week as we do just that! +![](https://powershell.org/wp-content/uploads/2017/09/CompComplete-300x161.jpg) diff --git a/content/articles/2017/10/_index.md b/content/articles/2017/10/_index.md new file mode 100644 index 000000000..17795b6f0 --- /dev/null +++ b/content/articles/2017/10/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from October 2017" +description: "PowerShell.org Articles published in October 2017." +--- diff --git a/content/articles/2017/10/powershell-devops-summit-2018-schedule/index.md b/content/articles/2017/10/powershell-devops-summit-2018-schedule/index.md new file mode 100644 index 000000000..91419985a --- /dev/null +++ b/content/articles/2017/10/powershell-devops-summit-2018-schedule/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2017-10-24-powershell-devops-summit-2018-schedule/ +title: PowerShell + DevOps Summit 2018 schedule +authors: + - Richard Siddaway +date: "2017-10-24T20:15:26+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2017/10/powershell-devops-summit-2018-schedule/ +--- + +The schedule for the 2018 Summit still needs a little bit of polishing to finish it but it's taking shape. I've started releasing information on sched.com that we're using for all our scheduling needs for the Summit. The one and only truth regarding the sessions and their times can be found at [https://powershelldevopsglobalsummit2018.sched.com/ ][1] +I'll be adding sessions over the next few days so keep checking. +I'm really excited about the schedule for the 2018 Summit. We'll have 4 rooms for sessions with many of your favourite speakers returning and many new speakers which is really good to see. The Community Lightning Demos return by popular acclaim and we'll be running an Iron Scripter competition as well. The PowerShell Team will be presenting all day Monday and at other sessions through out the Summit. +Registration opens 1 November and once you're registered through eventbrite your information will be sync'd to sched.com so that you can access the schedule and use the scheduling app. + + [1]: https://powershelldevopsglobalsummit2018.sched.com/ diff --git a/content/articles/2017/10/putting-it-all-out-there/index.md b/content/articles/2017/10/putting-it-all-out-there/index.md new file mode 100644 index 000000000..affa2a94a --- /dev/null +++ b/content/articles/2017/10/putting-it-all-out-there/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2017-10-26-putting-it-all-out-there/ +title: Putting it all out there +authors: + - Liam Kemp +date: "2017-10-26T11:11:31+00:00" +categories: + - PowerShell for Admins +aliases: + - /2017/10/putting-it-all-out-there/ +--- + +Yesterday I pushed my first real project to a public repository on GitHub. It's small right now though I hope to flesh it out over time, and it is very niche, but I hope it helps others who come across it. Regardless I'm proud of it. If you like, you can check it out [here,][1] I'd love your feedback, but that's not the reason I'm writing this. +I'm here to tell you _**why**_ I did it. +You see, I'm a private kind of person. I don't often put myself out there for fear of embarrassing myself. I have always been worried that I might end up looking silly. That someone who knows more than I do, or knows something differently than I do would catch me out -  and if that happened, I couldn't put the genie back in the bottle. Back in school, I wouldn't put my hand up even if I knew the right answer, just in case. I was ensnared by Impostor Syndrome, it was crippling, and it had to change. +So, what did I do? I started a [blog][2], and in almost a year I've managed to get around 10-12 posts up. It isn't much nor is it pretty, and sometimes I worry too much about the time in between posts, and rush to put something up which is not always perfect. But I'm happy to be doing it all the same. Mostly, I try to post about topics and problems that I haven't been able to find complete information around elsewhere. +I've started spending more time sharing and interacting on Twitter and LinkedIn, rather than just reading and clicking links. I've  even been followed and liked a few times. Lastly, I've been spending more time on these forums and elsewhere, helping out where I can. +Overall, I feel better in myself, and have a greater level of confidence in my skills, knowledge, and what I can bring to the table. In the end, that is what led me to feeling good enough to publish my project. I can't say that I'm completely over Impostor Syndrome and I don't think I ever will be. I can say that I don't feel it as often as I used to, and I can use it to drive myself to be better. +When we are presented with a problem, we often go looking for answers from others. Flip that around and it means that if you have solved a problem, there is probably someone else looking for the answer and would really appreciate your experience. So why not put it out there? + + [1]: https://github.com/liampkemp/Enabler + [2]: https://itcloudpro.net diff --git a/content/articles/2017/10/using-azure-desired-state-configuration-part-iii/index.md b/content/articles/2017/10/using-azure-desired-state-configuration-part-iii/index.md new file mode 100644 index 000000000..9164b2af6 --- /dev/null +++ b/content/articles/2017/10/using-azure-desired-state-configuration-part-iii/index.md @@ -0,0 +1,120 @@ +--- +url: /articles/2017-10-03-using-azure-desired-state-configuration-part-iii/ +title: Using Azure Desired State Configuration – Part III +authors: + - Will Anderson +date: "2017-10-03T14:00:59+00:00" +categories: + - PowerShell for Admins +aliases: + - /2017/10/using-azure-desired-state-configuration-part-iii/ +--- + +Last week we talked about modifying and uploading our configurations to Azure Automation DSC.  We were able to import credentials from Azure's Automation Account Credential store, and then compile the .mof files in the automation account for deployment.  This week, we'll be looking at how we apply those configurations to existing systems via PowerShell.  Then we'll take a look at some of the reporting available via Azure Automation DSC and send those reports over to Operations Management Suite for dashboarding. +So when we left off.  We successfully published our configurations in Automation DSC.  If we run Get-AzureRmAutomationDscNodeConfiguration against the configuration I published, we get the following: + + +`Get-AzureRmAutomationDscNodeConfiguration -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -ConfigurationName TestConfig +`![](https://powershell.org/wp-content/uploads/2017/09/aadscmofs-300x198.jpg) +As you can see, when we published the configuration, it generated two configuration .mofs based on our node names - domainController and webServer.  Now of course, we're not going to be calling our servers webServer and domainController, rather, these are generalized names for our configurations.  We get the root configuration (TestConfig), and then the node specific configuration based on the root document (webServer or domainController).  This gives us a lot of flexibility as we can now statefully name our configurations, and assign them to machines without dealing with guids or having all of the mofs defined by a computer name or any other nonsense!  We just assign what named configuration goes to what system, and away we go. +We don't even really care what the computer name is, as long as the correct config gets assigned.  This is really helpful when working on Azure Resource Manager templates, because I don't even really know what the system name will be until runtime.  I just designate a set of systems as 'webServer', assign the config and deploy. +[_Moo._][1] +**Register the Virtual Machine** +So let's go ahead and get a system that we want to target.  I just so happen to have one in Azure right here: + + +`$TargetResGroup = 'nrdtste' +$VMName = 'ctrxeusdbnp01' +$VM = Get-AzureRmVM -ResourceGroupName $TargetResGroup -Name $VMName +`Now that we have our VM object, we're going to create a hash-table with some configuration items for the DSC Local Configuration Manager on the target system. + + +`$DSCLCMConfig = @{ + 'ConfigurationMode' = 'ApplyAndAutocorrect' + 'RebootNodeIfNeeded' = $true + 'ActionAfterReboot' = 'ContinueConfiguration' +} +`Once we have all of this, we can now go ahead and register our target node in Automation DSC using the Register-AzureRmAutomationDscNode command. + + +`Register-AzureRmAutomationDscNode -AzureVMName $VM.Name -AzureVMResourceGroup $VM.ResourceGroupName -AzureVMLocation $VM.Location -AutomationAccountName $AutoAcct.AutomationAccountName -ResourceGroupName $AutoAcct.ResourceGroupName @DSCLCMConfig +`You might note with this command that you can also assign it a configuration as you register the node.  However, I've had occasional issues with this method.  So we're going to go ahead and register the node first, then assign the configuration.  As another note, while the system is being registered, the command will hold your session until it returns a success or failure.  So grab another cup of coffee and enjoy it for a few minutes while we wait. +![](https://powershell.org/wp-content/uploads/2017/09/VMregistered-300x123.jpg) +**Apply a Configuration** +Now we can see our machine has registered successfully.  But if we run the Get-AzureRmAutomationDscNode command, we can see that the NodeConfigurationName property is empty.  So let's fix that. +![](https://powershell.org/wp-content/uploads/2017/09/ConfigEmpty-300x76.jpg) +What we need to do is capture the configuration we want to apply, so we do this by grabbing it with Get-AzureRmAutomationDscNodeConfiguration.  Then, we'll capture the target DSC endpoint with the Get command we previously used, and cast both objects to our Set-AzureRmAutomationDscNode command to apply the configuration to the appropriate node. + + +`$Configuration = Get-AzureRmAutomationDscNodeConfiguration -AutomationAccountName $AutoAcct.AutomationAccountName -ResourceGroupName $AutoAcct.ResourceGroupName -Name 'CompositeConfig.webServer' +$TargetNode = Get-AzureRmAutomationDscNode -Name $VM.Name -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName +Set-AzureRmAutomationDscNode -Id $TargetNode.Id -NodeConfigurationName $Configuration.Name -AutomationAccountName $AutoAcct.AutomationAccountName -ResourceGroupName $AutoAcct.ResourceGroupName -Verbose -Force +`After a couple of seconds, we can see that the configuration has been assigned to our node.  Once the LCM hits it's next review cycle, it'll pick up the configuration and start applying: +![](https://powershell.org/wp-content/uploads/2017/09/NodeConfigd-300x96.jpg) +We can check on the status of our target node by using the Get-AzureRmAutomationDscNodeReport command like so to get some useful information: + + +`Get-AzureRmAutomationDscNodeReport -NodeId $TargetNode.Id -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -Latest +`And it will output some pretty useful information. +![](https://powershell.org/wp-content/uploads/2017/09/PSReport-300x139.jpg) +**Azure Automation DSC Reports** +This is where I have to admit that the UI really shines.  You can see all of your systems at a glance, with what configuration is assigned and it's current state. +![](https://powershell.org/wp-content/uploads/2017/09/Report1-300x91.jpg) +Furthermore, you can actually drill down through the nodes to see what resources are being applied, what their dependencies are, and what the state of the particular configuration item is. +![](https://powershell.org/wp-content/uploads/2017/09/Report2-300x282.jpg) +There is a wealth of data that you can find here in an easy to read dashboard.  Furthermore, you can connect this to a Log Analytics instance (or other products that support restful API), and ship it up for alerting and more dashboarding. +**Connecting to Log Analytics** +So connecting your Azure Automation DSC is pretty straightforward.  To be able to use it, you need to have an OMS tier that includes the Automation and Control offering to start.  If you do, then all you have to do is follow a couple of simple commands. +First, we have to get the resourceIds for the Automation Account and the Log Analytics workspace. + + +`#Get the resourceId of the automation account. + $AutoAcctResource = Find-AzureRmResource -ResourceType "Microsoft.Automation/automationAccounts" -ResourceNameContains 'testautoaccteastus2' + #Get the resourceId of the Log Analytics Workspace + $LogAnalyticsResource = Find-AzureRmResource -ResourceType "Microsoft.OperationalInsights/workspaces" -ResourceNameContains 'LWINerd' +`Then we can use those resourceIds to pass to Set-AzureRmDiagnosticSetting and specify our DSCNodeStatus category. + + +`Set-AzureRmDiagnosticSetting -ResourceId $AutoAcctResource.ResourceId -WorkspaceId $LogAnalyticsResource.ResourceId -Enabled $true -Categories "DscNodeStatus" -Verbose +`Then you'll get a return similar to this: + + +`PS C:\Scripts\Presentations\AzureAutomationDSC\ResourcesToUpload> Set-AzureRmDiagnosticSetting -ResourceId $AutoAcctResource.ResourceId -WorkspaceId $LogAnalyticsResource.ResourceId -Enabled $true -Categories "D +scNodeStatus" -Verbose +StorageAccountId : +ServiceBusRuleId : +EventHubAuthorizationRuleId : +Metrics + TimeGrain : PT1M + Enabled : False + RetentionPolicy + Enabled : False + Days : 0 +Logs + Category : JobLogs + Enabled : False + RetentionPolicy + Enabled : False + Days : 0 + Category : JobStreams + Enabled : False + RetentionPolicy + Enabled : False + Days : 0 + Category : DscNodeStatus + Enabled : True + RetentionPolicy + Enabled : False + Days : 0 +WorkspaceId : /subscriptions/f2007bbf-f802-4a47-9336-cf7c6b89b378/resourceGroups/mms-eus/providers/Microsoft.OperationalInsights/workspaces/LWINerd +Id : +/subscriptions/f2007bbf-f802-4a47-9336-cf7c6b89b378/resourcegroups/mms-eus/providers/microsoft.automation/automationaccounts/testautoaccteastus2/providers/microsoft.insights/diagnosticSettings/service +Name : service +Type : +Location : +Tags : +`After a little while, we can check back to our log search and start performing queries and configuring alerts. +![](https://powershell.org/wp-content/uploads/2017/09/DSCReporting-300x154.jpg) +So that's Azure Automation DSC in a nutshell!  But don't worry, I haven't forgotten about Azure DSC's push method.  We'll be talking about that next blog! + + [1]: https://twitter.com/jsnover/status/553249369852358657 diff --git a/content/articles/2017/10/using-azure-desired-state-configuration-part-iv/index.md b/content/articles/2017/10/using-azure-desired-state-configuration-part-iv/index.md new file mode 100644 index 000000000..e500e35e3 --- /dev/null +++ b/content/articles/2017/10/using-azure-desired-state-configuration-part-iv/index.md @@ -0,0 +1,85 @@ +--- +url: /articles/2017-10-10-using-azure-desired-state-configuration-part-iv/ +title: Using Azure Desired State Configuration – Part IV +authors: + - Will Anderson +date: "2017-10-10T14:00:07+00:00" +categories: + - PowerShell for Admins +aliases: + - /2017/10/using-azure-desired-state-configuration-part-iv/ +--- + +So we've talked about Azure Automation DSC and the extensive reporting we can get from it.  With the pricing as it is, it would be hard to argue as to why you would want to use anything else.  But I'm a completionist, and there may be some edge cases that might come up where you wouldn't be able to use the pull method for configurations.  So let's talk about how you can use Azure DSC to push a configuration to a virtual machine. +So let's get started! +**Publish the Configuration** +In order to push a configuration, we need to publish it to a blob store.  When you use Publish-AzureRmVmDscConfiguration, the command bundles all of the required modules along with the configuration into a .zip file. It does this by pulling the modules from your local machine that you're running the command from, so you'll need to make sure that you have the appropriate modules installed on your system. +First, we'll go ahead and grab a storage account where these binaries can be published.  In the storage account, we have a blob store for our configurations.  This blob store is a private store. + + +`$AutoResGrp = Get-AzureRmResourceGroup -Name 'mms-eus' + $StorAcct = Get-AzureRmStorageAccount -ResourceGroupName $AutoResGrp.ResourceGroupName -Name 'modulestor' +`Now that we have our private store, we're going to publish our configuration using the Publish-AzureRmVMDscConfiguration command. + + +`$DSCBlob = Publish-AzureRmVMDscConfiguration -ConfigurationPath C:\Scripts\Configs\cmdpconfig.ps1 -ResourceGroupName $StorAcct.ResourceGroupName -ContainerName 'dscpushconfig' -StorageAccountName $StorAcct.StorageAccountName -Force + $Archive = $DSCBlob.Split('/') | Select-Object -Last 1 +`As previously mentioned, the command reads your configuration, and then grabs the necessary modules from your local machine and adds them to the package when it publishes the configuration.  This way, the machine has all of the necessary bits to perform the configuration.  You can actually validate this by downloading the packaged .zip file from the blob store and seeing for yourself. +Along with the modules and configuration, you'll also find a dscmetadata.json file that is essentially a manifest of the required modules. +![](https://powershell.org/wp-content/uploads/2017/10/PushPackage-300x136.jpg) +**Install the VM Extension** +Now that our binaries have been published, we can get our target machine and deploy the Azure DSC VM extension to it while assigning the configuration.  When you deploy the extension, it's best to use the latest version available.  If you want to check which version is the latest, you can check out the release history on the [PowerShell Team Blog][1]. + + +`$ArmVmRsg = Get-AzureRmResourceGroup -Name 'nrdtste' + $ArmVm = Get-Azurermvm -ResourceGroupName $ArmVmRsg.ResourceGroupName -Name 'ctrxeusdbnp01' + Set-AzureRmVMDscExtension -ArchiveResourceGroupName $StorAcct.ResourceGroupName -ArchiveBlobName $Archive -ResourceGroupName $ArmVm.ResourceGroupName -ArchiveStorageAccountName $StorAcct.StorageAccountName -ArchiveContainerName 'dscpushconfig' -Version '2.26' -VMName $ArmVm.Name -ConfigurationName 'CMDPConfig' -Verbose +`Like with Azure Automation DSC, when you register the VM extension, your PowerShell session will be held open until the extension returns a success or failure status.  Once it returns, you can check the status of the configuration using Get-AzureRmVmDscExtensionStatus. + + +`PS C:\Users\willa> Get-AzureRmVMDscExtensionStatus -ResourceGroupName $ArmVm.ResourceGroupName -VMName $ArmVm.Name +ResourceGroupName : nrdtst3 +VmName : ctrxeusdbnp01 +Version : 2.26 +Status : Provisioning succeeded +StatusCode : ProvisioningState/succeeded +Timestamp : 10/9/2017 1:12:22 PM +StatusMessage : DSC configuration was applied successfully. +DscConfigurationLog : {[2017-10-09 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] The operation 'Get-WindowsFeature' succeeded: Server-Gui-Shell, [2017-10-09 + 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Test ] [[WindowsFeature]RemoveUI] in 9.5980 seconds., [2017-10-09 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ Start Set + ] [[WindowsFeature]RemoveUI], [2017-10-09 13:11:19Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Uninstallation started......} +`If you want to dive a little deeper, we can of course grab the specific DscConfigurationLog information: + + +`PS C:\Users\willa> (Get-AzureRmVMDscExtensionStatus -ResourceGroupName $ArmVm.ResourceGroupName -VMName $Armvm.Name).DscConfigurationLog +[2017-10-09 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] The operation 'Get-WindowsFeature' succeeded: Server-Gui-Shell +[2017-10-09 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Test ] [[WindowsFeature]RemoveUI] in 9.5980 seconds. +[2017-10-09 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ Start Set ] [[WindowsFeature]RemoveUI] +[2017-10-09 13:11:19Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Uninstallation started... +[2017-10-09 13:11:19Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Continue with removal? +[2017-10-09 13:11:19Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Prerequisite processing started... +[2017-10-09 13:11:24Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Prerequisite processing succeeded. +[2017-10-09 13:12:21Z] [WARNING] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] You must restart this server to finish the removal process. +[2017-10-09 13:12:21Z] Settings handler status to 'transitioning' (C:\Packages\Plugins\Microsoft.Powershell.DSC\2.26.1.0\Status\0.status) +[2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Uninstallation succeeded. +[2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Successfully uninstalled the feature Server-Gui-Shell. +[2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] The Target machine needs to be restarted. +[2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Set ] [[WindowsFeature]RemoveUI] in 62.7090 seconds. +[2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Resource ] [[WindowsFeature]RemoveUI] +[2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: [] A reboot is required to progress further. Please reboot the system. +[2017-10-09 13:12:21Z] [WARNING] [ctrxeusdbnp01]: [] A reboot is required to progress further. Please reboot the system. +[2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Set ] +[2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Set ] in 74.8080 seconds. +[2017-10-09 13:12:21Z] [VERBOSE] Operation 'Invoke CimMethod' complete. +[2017-10-09 13:12:21Z] [VERBOSE] Time taken for configuration job to complete is 75.071 seconds +`As you can see, the configuration is complete pending a reboot.  This brings us to a few of the caveats associated with the push method for Azure DSC. + + * Unfortunately, unlike with the Register-AzurRmAutomationDscNodeConfiguration command available for Azure Automation, you cannot currently configure the LCM direct from the command.  Instead, you'll want to add a LocalConfigurationManager block to your top level config to set any attributes for the LCM. + * As the system is downloading the packaged modules and configuration files, the mof file is configured locally on the machine.  While the current.mof file is encrypted, there is a copy of the mof that is generated in the C:\Packages\Plugins\Microsoft.Powershell.DSC\ +\\ directory.  You'll want to be careful as to what you're passing in plain text in that regard. + * You can retrieve the DscConfigurationLog data for validation of your configs and the state of the machines, but this process requires automation and can take some time to compile. + +So now we've explore Azure Desired State Configuration using the available push and pull methods.  And we've explored the rich reporting capabilities that are available to you in Azure Automation DSC.  It's been a long journey, but I hope you've found this content to be useful to you! +Until next time! + + [1]: https://blogs.msdn.microsoft.com/powershell/2014/11/20/release-history-for-the-azure-dsc-extension/ diff --git a/content/articles/2017/11/_index.md b/content/articles/2017/11/_index.md new file mode 100644 index 000000000..5add5b476 --- /dev/null +++ b/content/articles/2017/11/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from November 2017" +description: "PowerShell.org Articles published in November 2017." +--- diff --git a/content/articles/2017/11/dealing-with-redundancy-in-a-it-world/index.md b/content/articles/2017/11/dealing-with-redundancy-in-a-it-world/index.md new file mode 100644 index 000000000..9e1a5415f --- /dev/null +++ b/content/articles/2017/11/dealing-with-redundancy-in-a-it-world/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2017-11-19-dealing-with-redundancy-in-a-it-world/ +title: Dealing with redundancy in an IT world +authors: + - Alex Aymonier +date: "2017-11-19T21:22:39+00:00" +categories: + - PowerShell for Admins +aliases: + - /2017/11/dealing-with-redundancy-in-a-it-world/ +--- + +So you’re working for a company that’s going well (or not) and you start to hear rumours of parts of the business being sold off, the project you’re working on is being pulled or worse the business is closing down. Before you know it your x amount of years at said company have come to an end and you’re now redundant. The following [Dilbert comic][1] is a possible scenario you may have to deal with. +How you deal with this new found freedom is completely up to you? You can go on a big holiday, have some time off doing things around the house, buy that 2 seater car you’ve always dreamed of owning or go straight back into the workforce using the redundancy (if you got any) to pay off a chunk of your mortgage. Whatever you decide to do, at some point (unless you are retiring) you will need to go job hunting again. +In my situation I was being made redundant and leaving a company I had worked for, for the last 7 ½ years as a senior system engineer. I have a wife and 2 children so I really just wanted to get back in the workforce as soon as I could. The mortgage was not going to pay itself off. +As soon as I heard that I had a month left of work I took out my CV and had to try to remember each position I had occupied over the last 7 ½ years and what my achievements were. And you know what, that is not an easy task. When you’re working and you complete an achievement, you always think to yourself “If ever I have to update my CV ill add this to it”. Problem is 5 years down the line you won’t remember that “good piece of work” and you’ll struggle to put some of the great achievements down on paper for your future employer. +After several attempts at updating my CV, it was ready. Now time to start looking for work. My main skills are in Citrix technologies, PowerShell, Windows Server Operating Systems and my company’s proprietary cloud offering. In my job, I spent nearly every day learning something new and applying it to my job but I didn’t bother with getting certified. When job hunting, the first hurdle I came across was my lack of skills that the market place wanted. For nearly every senior engineer role out there, every man and his dog wanted Azure with 0365 and/or AWS. So any roles that looked good to me were out of my reach because I didn’t have those skills/qualifications. +I found a couple of roles I really liked the look of and naively sent off my CV to those 2 roles only. There were a few other jobs that looked good but I really wanted one of these 2 roles so didn’t apply for anymore. 2 weeks passed and nothing back so I chased them up and still nothing. Oh well guess they didn’t like my CV so I’ll start looking again. And again I repeated the same process. And again the same outcome. I then started do some reading on recruitment sites and how recruiters get so many CVs that on average they will look at yours for 6 second before choosing to read more or toss it. +By now I had finished work and a new job was not in sight, slightly panicking now. I revamped my CV a little, moving my core technical skills to the top of the front page (they were originally at the bottom of the back page) and applied for every job under the sun I liked the look of. I hit every job advertising site I could find and also sent my CV to every tech job agency I could find. If I really liked the look of a job I would follow the online application 30 minutes later with a phone call to get that connection with the job poster and to sell myself (which I hate doing). I updated my LinkedIn page and applied via LinkedIn to jobs on there. I started to use LinkedIn to make contact and catch up with people I knew to see if they had any positions in their companies. I actually found this to be the most successful way to get in to see companies. +Through my contacts I had some interviews and even had a job offer with one tech firm. Problem was they had come in with an offer that was 20% below my previous wage. Do I take it to tie me over the Christmas period and get the money coming in again or do I wait for a possible better job that might show up tomorrow? If I took the job and something better came along would I then rescind that offer and my name would then be mud at that company for anything in the future. I decided not to take the job as it would have meant a major financial shuffle for the family and big cutbacks. +That same afternoon I contacted another friend, as his company had quite a few positions open due to expansion. He put me in contact with their Talent Manger. The following day I had an interview and that evening I had a job offer which I took. +The main take away I hope you get from this is, if this ever happens is to ensure your CV is always up to date. Make sure if and when people leave your present company that you keep some sort of contact with them because you never know when you might need to call on them or you might be able to help them out one day. Keep an eye on the job market and what the market is looking for and get skilled up and/or certified in those areas. If you’re not on LinkedIn get a presence on there, those contacts can be invaluable too. When Job hunting don’t just apply for that one dream job (especially if you’re out of work) hit any one of them that takes your fancy, you are better off having 2 or 3 offers on the table than nothing at all. Last thing to only take the offer if you really want the job, listen to your gut instinct. +As it happens the new company I now work at is going to be one of the 1st in Australia to roll out Azure Stack. So I will be learning and get certified in Azure which better place me for my future. + + [1]: http://dilbert.com/strip/1996-05-14 diff --git a/content/articles/2017/11/powershell-devops-global-summit-2018-scholarship-recipient/index.md b/content/articles/2017/11/powershell-devops-global-summit-2018-scholarship-recipient/index.md new file mode 100644 index 000000000..380cd8fef --- /dev/null +++ b/content/articles/2017/11/powershell-devops-global-summit-2018-scholarship-recipient/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2017-11-10-powershell-devops-global-summit-2018-scholarship-recipient/ +title: PowerShell + DevOps Global Summit 2018 Scholarship Recipient +authors: + - Don Jones +date: "2017-11-10T15:45:52+00:00" +categories: + - PowerShell for Admins +aliases: + - /2017/11/powershell-devops-global-summit-2018-scholarship-recipient/ +--- + +Congratulations to Andrew Pla, winner of our PowerShell + DevOps Global Summit 2018 scholarship. Andrew submitted a stellar application to our review panel, and perfectly fit our profile for someone who’s just peeking out of the “beginner” realm, and who’s demonstrably used PowerShell to help bootstrap their IT career. If you’re attending Summit, be sure to keep an eye out for Andrew and say hi! diff --git a/content/articles/2017/11/registration-is-open/index.md b/content/articles/2017/11/registration-is-open/index.md new file mode 100644 index 000000000..b9f2a23a6 --- /dev/null +++ b/content/articles/2017/11/registration-is-open/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2017-11-01-registration-is-open/ +title: Registration is open +authors: + - Richard Siddaway +date: "2017-11-01T08:54:39+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2017/11/registration-is-open/ +--- + +Registration for the 2018 PowerShell + DevOps Global Summit is open. +These are the important links you'll need: +[Summit information ][1] +[Registration][2] +[Agenda][3] + + + [1]: https://powershell.org/summit/ + [2]: https://www.eventbrite.com/e/powershell-devops-global-summit-2018-registration-32452427083 + [3]: https://powershelldevopsglobalsummit2018.sched.com/ diff --git a/content/articles/2017/_index.md b/content/articles/2017/_index.md new file mode 100644 index 000000000..5128d24cb --- /dev/null +++ b/content/articles/2017/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from 2017" +description: "PowerShell.org Articles published in 2017." +--- diff --git a/content/articles/2018-01-04-iron-scripter-prequel.md b/content/articles/2018-01-04-iron-scripter-prequel.md deleted file mode 100644 index ca7366eb9..000000000 --- a/content/articles/2018-01-04-iron-scripter-prequel.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Iron Scripter prequel -authors: - - Richard Siddaway -date: "2018-01-04T18:00:24+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2018/01/iron-scripter-prequel/ ---- - -Registrations are going very quickly. We've sold nearly half the available places. Historically, registrations accelerate in the first half of January so don't wait too long before booking or you may be disappointed. -Another tranche of alumni discount places were made available at the beginning of January but there are only 25 of them so if you want one book your place very soon. -One new feature of Summit for 2018 is Iron Scripter - http://ironscripter.us/. Three factions will battle it out on Thursday 12 April 2018 for the title of Iron Scripter. If you haven't chosen your faction it's time to start thinking about it: -Daybreak Faction - beautiful code -Flawless Faction - flawless code -Battle Faction - good enough to get the job done -Choose your faction based on your approach to coding. -The run up to Iron Scripter starts soon. -We'll be running a series of prequel events - think of them as the successor to the "Scripting Games" of the past. We'll publish a puzzle on powershell.org every week on this schedule: -January 14 puzzle 1 -January 21 puzzle 2 -January 28 puzzle 3 -February 4 puzzle 4 -February 11 puzzle 5 -February 18 puzzle 6 -February 25 puzzle 7 -March 4 puzzle 8 -March 11 puzzle 9 -March 18 puzzle 10 -March 25 puzzle 11 -A solution will be published the following week. The puzzle for March 25 will have a solution posted on 1 April. -Notice we say "a solution". Depending on your faction you may have a different view of how the puzzle should be solved. A forum will be available on PowerShell.org - https://powershell.org/forums/forum/iron-scripter/iron-scripter-prequel/ - for you to present and discuss possible solutions. Give your faction's view of how to solve the puzzle. Use the forums and the answers posted there to identify potential members of your faction. You can use non-attendees during the main Iron Scripter event so this is your chance to identify potential remote collaborators. -We **MUST** stress a couple of things: -- Your solutions **WILL NOT** **be graded** by anyone! You may get feedback from other people but there will be no official grading of answers. In previous Scripting Games we've spent literally months grading scripts and its just not logistically feasible to grade and comment on every entry. -- There is no "correct" answer. Your faction dictates what the solution should look like. -There will be another series of puzzles as a direct lead in to the Iron Scripter competition. These will be published on April 8,9,10 and 11 on powershell.org. **We will NOT post solutions online**. We will also not accept/review submissions however you may find clues or example solutions around the Summit venue. We'll publish more information on these lead in events, and Iron Scripter itself closer to the event. diff --git a/content/articles/2018-01-09-pscore-6-jeffrey-snover-and-the-powershell-team-hosting-ama-on-11th-jan-9am-pt.md b/content/articles/2018-01-09-pscore-6-jeffrey-snover-and-the-powershell-team-hosting-ama-on-11th-jan-9am-pt.md deleted file mode 100644 index b90d8f9d0..000000000 --- a/content/articles/2018-01-09-pscore-6-jeffrey-snover-and-the-powershell-team-hosting-ama-on-11th-jan-9am-pt.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: PSCore 6 – Jeffrey Snover and the PowerShell Team hosting AMA on 11th Jan 9am PT -authors: - - Mark Wragg -date: "2018-01-09T13:20:04+00:00" -categories: - - Announcements - - Events - - PowerShell for Admins -aliases: - - /2018/01/pscore-6-jeffrey-snover-and-the-powershell-team-hosting-ama-on-11th-jan-9am-pt/ ---- - -PowerShell Core 6 is scheduled for General Availability release tomorrow (10th January). As such Jeffrey Snover and the PowerShell Team are hosting an AMA (Ask Me Anything) event on the 11th January from 9am - 10am PT. - -> "This is going to be a historical week for PowerShell Core 6 🙂 ...Join the PowerShell team and [@**jsnover**][1]{.twitter-atreply.pretty-link.js-nav} this Thursday for the PowerShell AMA" ->![](https://powershell.org/wp-content/uploads/2018/01/PowerShell-AMA-300x160.jpg) - -Add it to your calendar [here][2]. -Due to the timing I expect that the team are mostly hoping for questions related to the release of PS Core, although in the spirit of an AMA anything goes :). -If you haven't yet checked out PowerShell Core 6, you can [grab the RC release today][3] and install it side-by-side with Windows PowerShell. -I have also written [a blog post that explains what PowerShell Core is, why it exists and how it compares][4] which I hope you find informative. - - [1]: https://twitter.com/jsnover - [2]: https://aka.ms/PowerShellAMA/invite - [3]: https://github.com/PowerShell/PowerShell - [4]: http://wragg.io/powershell-core/ diff --git a/content/articles/2018-01-14-iron-scripter-2018-prequel-puzzle-1.md b/content/articles/2018-01-14-iron-scripter-2018-prequel-puzzle-1.md deleted file mode 100644 index 8b7222ec0..000000000 --- a/content/articles/2018-01-14-iron-scripter-2018-prequel-puzzle-1.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Iron Scripter 2018 Prequel: Puzzle 1" -authors: - - Richard Siddaway -date: "2018-01-14T00:01:08+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2018/01/iron-scripter-2018-prequel-puzzle-1/ ---- - -Greetings Iron Scripters -The first puzzle in the Iron Scripter 2018 Prequel series is available: -[Iron Scripter Prequel Puzzle 1][1] -Take note of the faction based instructions. -Please remember that we're not grading submissions for these puzzles. -You can comment, and discuss the puzzle on the [Iron Scripter Prequel forum ][2] -Stay true to your faction and victory will be yours. - - [1]: https://powershell.org/wp-content/uploads/2018/01/Iron-Scripter-Prequel-Puzzle-1.pdf - [2]: https://powershell.org/forums/forum/iron-scripter/iron-scripter-prequel/ diff --git a/content/articles/2018-01-15-can-we-talk-about-powershell-core-6-0.md b/content/articles/2018-01-15-can-we-talk-about-powershell-core-6-0.md deleted file mode 100644 index 1f80d4802..000000000 --- a/content/articles/2018-01-15-can-we-talk-about-powershell-core-6-0.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Can We Talk About PowerShell Core 6.0? -authors: - - Don Jones -date: "2018-01-15T16:36:18+00:00" -categories: - - News - - PowerShell for Admins -aliases: - - /2018/01/can-we-talk-about-powershell-core-6-0/ ---- - -Microsoft recently [announced the General Availability][1] (that is, a non-beta release) of PowerShell Core 6.0. A [companion document detailing breaking changes][2], along with some of the language in the announcement, has led to more than a few inquiries in my mailbox. Most take the tone of, "have I been wasting my time learning PowerShell?!?!?" because, at first glance, PowerShell Core looks deeply less functional than its predecessor. Let me tell you what I think. - - - -First, I need to stress that this isn't an official Microsoft position - it's my opinion. I've been working with this product since before it launched, I've lived through its successes and missteps, and I've gotten pretty good at figuring out what the company is up to - but this article isn't based on any official conversations or info. - -## There are Two PowerShells Now - -Understand that **Windows PowerShell**, currently v5.1, isn't going away. People are a little freaked out by phrasing like, "Windows PowerShell won't be developed any further," but if you're feeling panicked over that, sip your whiskey and chill. Microsoft regards Windows PowerShell as **finished. **Honestly, from my perspective, it contains every bit of functionality I think an admin could conceivably need to do their job. Sure, maybe it lacks some deeper developer-focused features, but PowerShell was never supposed to be C#. -5.x remains officially supported and officially available. You can run it side-by-side on the same system with PowerShell Core. If your job is administering Windows then, as the name implies, _Windows_ PowerShell is going to be your go-to for a long time. It won't pick up any breaking changes going forward, it's not going to break existing functionality when a new version comes out, etc. It's _stable. _ -**PowerShell Core** (or just, "PowerShell," sans the "Windows") is a _new product. _It is not the "successor" of Windows PowerShell; it is a new thing based on Windows PowerShell. It is designed for cross-platform management, when you need to do something on Windows _and_ Linux _and_ macOS. As such, its functionality focuses on stuff that is available on _all of those platforms. _It doesn't do Windows Management Instrumentation, because "Windows." It doesn't manage Active Directory. It doesn't query Windows Performance Counters. It's not, in other words, specialized for Windows. - -## PowerShell Has Never Been "Windows" - -Windows and Windows PowerShell _are separate things. _People have an incredibly tough time grasping this, to the point where [it's a significant "gotcha" for newbies][3]. Windows PowerShell has _always_ consisted of a set of core functionality that actually had little to do, for the most part, with the Windows operating system. PowerShell Core continues that tradition, consisting of a base functional foundation. PowerShell's "power" came from add-ins - modules - that "connected" PowerShell to other technologies. Those add-ins run _inside_ PowerShell, but they are _distinct_ from it. The ActiveDirectory module comes from the Active Directory team, and ships _as a feature of the Windows Operating System. _If you could install Windows PowerShell 5.1 on Windows XP (you can't, but imagine), you wouldn't suddenly get a bunch of awesome functionality for administration, because Windows XP _doesn't ship with any awesome functionality. _Much of what we do in Windows PowerShell comes from the operating system; you should _expect_ that functionality to be missing when you're on, say, Linux. -Now, sure - if you install PowerShell Core on Windows, you _still_ won't have all of your favorite modules, because lots of when can't run on .NET Core. That's why Windows PowerShell is still a thing. Just as it took several years for Windows PowerShell to gain a large stable of add-in modules, it'll likely take some time for useful functionality to join up with PowerShell Core. The fact that some module doesn't run on Core _today_ doesn't mean the world has ended. - -## Sins of the Past - -A lot of the breaking changes in PowerShell Core are, from my perspective, more than welcome. Because Remote Procedure Calls (RPCs) are pretty much Windows-specific, almost every command that used RPCs for remote requests has lost the ability to perform remote requests. Instead, you use PowerShell Remoting (Invoke-Command) to "send" the command to the machine you want to query, let that machine execute the command locally, and then you get the results back. _This is the way I've been telling people to do things for eight years. _RPCs are a Root Cause of Evil in the universe. Companies who don't want to allow Remoting (either over WS-MAN or SSH, both of which are supported in PowerShell Core) but who _will_ allow RPCs, are stupid companies who need to wake up and educate themselves. Msrpc.dll is probably the most-hacked, most-patched file on the system. -A lot of the Web-based commands - Invoke-WebRequest and friends - have changed, too. This is mainly so that they'll work with the refactored underlying .NET Core. Why was .NET Core refactored? _So it would quit using old Internet Explorer code. _Nobody in a physics-based universe should see that as anything but a long-overdue blessing. -PowerShell Workflows aren't supported in Core, because .NET Core doesn't support Windows Workflow Foundation, which as near as I can tell has been deprecated for half a decade anyway. Jeffrey Snover and I have had a long-running, and very cordial, disagreement over PowerShell Workflow, because I think it was a Horrible Idea from day one. Not having it in Core will simply keep people from straying into that horrible, confusing, deeply broken realm. -Snap-ins aren't supported in Core. Good. Snap-ins stopped being the right thing to do in PowerShell 2.0, which came out in, like, 2008 or something. Repackage your code and move on. Anyone still shipping you a snap-in doesn't care about you, your job, your family, or your values. It is, for the most part, the work of a few seconds to repackage a snap-in into a proper binary module. - -## It's 6.0, Not 6.Done. - -One of the PowerShell Core release notes indicates that it doesn't run DSC resources. This has caused about half of the incredulous emails I've gotten this past week. _Is Microsoft abandoning DSC? Why doesn't DSC run on PowerShell Core?_ -Desired State Configuration has always _mainly_ targeted Windows. The Linux-compatible Local Configuration Manager (LCM) wasn't even written by the PowerShell team, it was written by Microsoft's Unix team, who also wrote the entire library of Linux-compatible resources. Today, there's zero need for PowerShell Core to execute DSC resources; Windows PowerShell or the Linux LCM will handle it for you. -But this is why [DSC Core][4] is going to be a thing. And that's the thing to remember, here. Despite the patterns of the past year or so, we're all still used to Microsoft taking 3-5 years to produce a product, which we then have to live with for 3-5 years until the next version comes out. The PowerShell team, at least, has been releasing at a much faster cadence. So just because Core doesn't do something _today_ doesn't represent an existential threat; if it makes sense for Core's audience and intent, then it'll likely do it before too long. -Incidentally, I have some very specific thoughts on DSC Core, including several, "I told you you'd eventually do it that way" moments, but we can do that in a separate article. - -## Why the Hell is Core Even Needed, Though? - -Microsoft sells Windows. Windows PowerShell manages Windows. So why was Core even needed? -There are two reasons here. Both are probably true; one is perhaps more pragmatic and the other is perhaps more noble, depending on your opinion. -The pragmatic one is that Microsoft is moving toward being a business that sells you compute time, whether that compute runs in their cloud or in your datacenter; this is the essence of what Azure Stack is, and if you think that model isn't eventually going to be their _only_ model, then you're deluding yourself. As a company that sells compute, Microsoft mainly wants you to run all your compute workloads on their compute services, of course. They don't care if you're running Linux or Windows; the compute is what they want you to pay for. Not caring about the OS means you need a rich set of tools that can be used consistently across all operating systems. Thus, PowerShell Core. -That kind of segues into the possibly-noble reason, and we can start by simply asking, "fine, why not just use Bash on every OS," as one person messaged me on Twitter. The reason is that Bash is a terrible shell for Windows. Arguably, Bash isn't even a great shell for Linux, although if you're used to it then you can be extremely productive with it. If you actually sat down and made a list of what you needed a shell to actually do, you'd never come up with Bash, and you'd likely have never come up with MS-DOS, either. Most shells today happened by accident and evolution, not by design, and they're about as well-suited to their job tasks as human knees are to running. You can do it, but it's not really a great idea. Bash - and most shells, if we're being fair - has a ridiculously high learning curve, and it forces you to work through the ugly details of unstructured data. That is, Bash, and most other shells, are designed mainly to parse and manipulate the text output of various operating system commands. They're a hack between a bunch of tools that were never meant to work together. The literal point of PowerShell, when you really tear it down to its smallest roots, is to parse all of that crap for you, and let you work with consistently structured data. You can focus less on what command output looks like and focus more on whatever the heck it is you're trying to do. [Linux fans who take a minute to really understand PowerShell][5] tend to like it. Naysayers who focus on the aesthetics of the syntax or whatever haven't taken that minute, or just have a religious objection to Microsoft playing in their sandbox. So Microsoft's decision to make PowerShell run on Linux is possibly a noble one, and I feel they've done so in a way that's pretty respectful of the Linux OS' roots, history, and patterns. - -## What if I Don't Admin on Linux? - -Then just use Windows PowerShell and stop sweating it. I mean, you're absolutely limiting your career, because as [I've noted elsewhere][6] the concept of "OS" is changing drastically, and anchoring your career to a single OS is probably a dumb move right now. But, if that's your decision, then just stick with Windows PowerShell and ignore Core. - -## So is Windows PowerShell Really "Done?" - -Who knows? Probably mostly. I suppose we could see a 5.1.1 if there's a really egregious bug or a security problem someone finds, or a 5.2 if Windows itself would benefit tremendously from something specific that wouldn't work in Core. But I wouldn't count on anything major happening to it. - -## Let's Review - -So here's what we know: - - * PowerShell Core doesn't mean Windows PowerShell is dead. - * You haven't been wasting your time learning Windows PowerShell. - * You can probably ignore PowerShell Core for a good long while if you don't need cross-platform functionality. - * Your personal job priorities may not align with Microsoft's corporate priorities, which means the company may do stuff that doesn't make sense to you, or that you don't need. - * PowerShell Core isn't a drop-in replacement for Windows PowerShell because Core has a different audience and intent. - * The more Windows-specific your task, the less likely Core is going to be the right tool for the job. - -That's my take on all this; you're more than welcome to share yours (be polite!) in the comments! - - [1]: https://blogs.msdn.microsoft.com/powershell/2018/01/10/powershell-core-6-0-generally-available-ga-and-supported/ - [2]: https://github.com/PowerShell/PowerShell/blob/master/docs/BREAKINGCHANGES.md - [3]: https://devops-collective-inc.gitbooks.io/the-big-book-of-powershell-gotchas/content/manuscript/where-is-the-____-command.html - [4]: https://blogs.msdn.microsoft.com/powershell/2017/09/12/dsc-future-direction-update/ - [5]: https://twitter.com/nocentino - [6]: https://donjones.com/2017/12/14/has-the-death-of-the-os-already-begun/ diff --git a/content/articles/2018-01-21-iron-scripter-2018-prequel-puzzle-2.md b/content/articles/2018-01-21-iron-scripter-2018-prequel-puzzle-2.md deleted file mode 100644 index 2e4560795..000000000 --- a/content/articles/2018-01-21-iron-scripter-2018-prequel-puzzle-2.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Iron Scripter 2018 Prequel: Puzzle 2" -authors: - - Richard Siddaway -date: "2018-01-21T00:01:10+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/01/iron-scripter-2018-prequel-puzzle-2/ ---- - -You've survived the first challenge. A new challenge in the shape of [Iron Scripter Prequel Puzzle 2][1] is now available. -Take note of the faction based instructions. -Please remember that we're not grading submissions for these puzzles. -You can comment, and discuss the puzzle on the [Iron Scripter Prequel forum ][2] -Stay true to your faction and victory will be yours. - - [1]: https://powershell.org/wp-content/uploads/2018/01/Iron-Scripter-Prequel-Puzzle-2.pdf - [2]: https://powershell.org/forums/forum/iron-scripter/iron-scripter-prequel/ diff --git a/content/articles/2018-01-21-iron-scripter-prequel-puzzle-1-a-solution.md b/content/articles/2018-01-21-iron-scripter-prequel-puzzle-1-a-solution.md deleted file mode 100644 index 9fcf8e48b..000000000 --- a/content/articles/2018-01-21-iron-scripter-prequel-puzzle-1-a-solution.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Iron Scripter Prequel: Puzzle 1 – a solution" -authors: - - Richard Siddaway -date: "2018-01-21T00:05:19+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/01/iron-scripter-prequel-puzzle-1-a-solution/ ---- - -A discussion and possible solution to puzzle 1 is now available at [Iron Scripter Prequel Puzzle 1 - A solution][1] -Remember this isn't presented as a definitive solution. It's my view of the solution. Please also note that the faction specific parts are indicative and not prescriptive - they are my view of how the different factions would approach solving the puzzle. - - [1]: https://powershell.org/wp-content/uploads/2018/01/Iron-Scripter-Prequel-Puzzle-1-A-solution.pdf diff --git a/content/articles/2018-01-23-powershell-summit-registration-status.md b/content/articles/2018-01-23-powershell-summit-registration-status.md deleted file mode 100644 index 1da2b8b8d..000000000 --- a/content/articles/2018-01-23-powershell-summit-registration-status.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: PowerShell Summit Registration Status -authors: - - Don Jones -date: "2018-01-23T20:30:12+00:00" -categories: - - PowerShell Summit -aliases: - - /2018/01/powershell-summit-registration-status/ ---- - -A quick update - all numbers as of 23-January-2018, 12:23pm Pacific time. -91 seats remaining. We are on track to sell out in approximately 45 days. Unlike previous years where we've scrounged some spare seats at the last minute, **please don't expect that this year, **as I think I've gotten better at math and have not been rounding as much. -Hotel situation: - - * Marriott, we have 6 rooms left. This is our "official" hotel, with the largest number of Summiteers on site. - * Courtyard, we have 9 rooms left. This is a quick walk to the Meydenbauer, with about half as many Summiteers as the Marriott. - * Hotel 116, we have 34 rooms left. This also has about half as many Summiteers as the Marriott, and is our lowest price point hotel. This is still a quick walk to the Meydenbauer. - -After the rooms above are exhausted, you're on to "rack rate," which, sadly, can be ridonkulous as it's a popular time of year to be in Bellevue and they've gotten used to our crowd coming in. **We do ask that you choose one of the above hotels if humanly possible** so that we're not stuck paying for this reserved space regardless. If we have to do so, prices for Summit will assuredly rise in 2019. -Can't make it? We're often asked about session recordings. We're not prepared to commit to anything for 2018, although we're working hard with a partner to try and make something happen. There's no need whatsoever to "+1" this; we're well aware that everyone asks for recordings (despite fairly low actual view numbers for them), and we're working on it. Last year's attempt was massively disruptful and unsuccessful, so we can't have _that_ again. -That's it! Hit us up on Twitter @PSHSummit if you have questions! diff --git a/content/articles/2018-01-26-summit-2018-registration-update.md b/content/articles/2018-01-26-summit-2018-registration-update.md deleted file mode 100644 index 3d303b742..000000000 --- a/content/articles/2018-01-26-summit-2018-registration-update.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Summit 2018 registration update -authors: - - Richard Siddaway -date: "2018-01-26T16:55:41+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2018/01/summit-2018-registration-update/ ---- - -As an update to the registrations for Summit 2018 - we've sold 75% of the available places. -As Don explained we won't be able to add further places like we did last year. -This is our biggest (and hopefully best) Summit yet with more sessions and nearly double the number of speakers. -If you want a place I recommend not waiting. Last year we sold our last place on 24 February. If sales carry on as they currently are we'll sell out for 2018 well before then. diff --git a/content/articles/2018-01-28-iron-scripter-2018-prequel-puzzle-3.md b/content/articles/2018-01-28-iron-scripter-2018-prequel-puzzle-3.md deleted file mode 100644 index 3cc683ed8..000000000 --- a/content/articles/2018-01-28-iron-scripter-2018-prequel-puzzle-3.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Iron Scripter 2018 Prequel: Puzzle 3" -authors: - - Richard Siddaway -date: "2018-01-28T00:01:38+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/01/iron-scripter-2018-prequel-puzzle-3/ ---- - -You have overcome 2 challenges so far both involving code from the archives. In this challenge you'll be called upon to create your own code. You'll be presented with a task to perform in [Iron Scripter Prequel Puzzle 3][1] -How you approach this challenge is up to you but remember the goals of your faction. -Please remember that we're not grading submissions for these puzzles. You can comment, and discuss the puzzle on the Iron Scripter Prequel forum -Good luck - - [1]: https://powershell.org/wp-content/uploads/2018/01/Iron-Scripter-Prequel-Puzzle-3.pdf diff --git a/content/articles/2018-01-28-iron-scripter-prequel-puzzle-2-a-commentary.md b/content/articles/2018-01-28-iron-scripter-prequel-puzzle-2-a-commentary.md deleted file mode 100644 index 09d43c9cc..000000000 --- a/content/articles/2018-01-28-iron-scripter-prequel-puzzle-2-a-commentary.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Iron Scripter Prequel: Puzzle 2 – a commentary" -authors: - - Richard Siddaway -date: "2018-01-28T00:02:37+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/01/iron-scripter-prequel-puzzle-2-a-commentary/ ---- - -A discussion and possible solution to puzzle 1 is now available at  [Iron Scripter Prequel Puzzle 2 - A commentary][1] -Remember this isn't presented as a definitive solution. It's my view of the solution. -I've not provided faction specific code but rather a list of points the factions need to consider to be truly worthy of their faction. - - [1]: https://powershell.org/wp-content/uploads/2018/01/Iron-Scripter-Prequel-Puzzle-2-A-commentary.pdf diff --git a/content/articles/2018-01-28-powershell-story-continued-becoming-a-craftsman.md b/content/articles/2018-01-28-powershell-story-continued-becoming-a-craftsman.md deleted file mode 100644 index 8ed8ecc61..000000000 --- a/content/articles/2018-01-28-powershell-story-continued-becoming-a-craftsman.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: PowerShell Story Continued Becoming a Craftsman -authors: - - Duffney -date: "2018-01-28T10:46:03+00:00" -categories: - - PowerShell for Admins -aliases: - - /2018/01/powershell-story-continued-becoming-a-craftsman/ ---- - -My journey started off by figuring out how to automate a daily disk space report on the mailserver, which ran most of the company, and emailing the report to my boss at the time. After PowerShell sent that first email, something clicked. I sat back in my chair and thought to myself, “Wow, I don’t have to do this anymore”. I can still feel how exciting and relieving that thought was. Fast forward a few years and I had made automation about 80% of my job. I had moved into a few new roles - Tier 2 Support to Systems Engineer, to Senior Systems Engineer. My last post left off when I left my role as a Senior Systems Engineer and landed a gig as a DevOps Engineer. At the time I thought this was the end of the road. I thought, “I’ll pick up a few new tricks and further improve my PowerShell skills”. I couldn’t have been more wrong. This post picks up at the beginning of my transition into the world of DevOps, where I learned no matter how much you know, you know nothing. Continue reading to hear the rest of the story… - diff --git a/content/articles/2018-01-29-distilling-microsofts-dsc-update-jan-2018.md b/content/articles/2018-01-29-distilling-microsofts-dsc-update-jan-2018.md deleted file mode 100644 index 569b983fe..000000000 --- a/content/articles/2018-01-29-distilling-microsofts-dsc-update-jan-2018.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "Distilling Microsoft's DSC Update (Jan 2018)" -authors: - - Don Jones -date: "2018-01-29T16:11:10+00:00" -categories: - - PowerShell for Admins -aliases: - - /2018/01/distilling-microsofts-dsc-update-jan-2018/ ---- - -This past Friday, Microsoft [posted a DSC Update][1] that's worth your attention - and some commentary. -This follows up on a previous announcement about "DSC Core," a term which the company has wisely stopped using. I do think the original use of "DSC Core" was well-intentioned: "Core" had come to represent the company's cross-platform efforts, a la .NET Core and PowerShell Core. But the "new DSC" has nothing to do with either of those, and so the use of "Core" was confusing. - - -The "new DSC" does mean that "old DSC" is going away. But, as this most recent update reveals, very little of your existing work or knowledge investment will go to waste. -The "new DSC" will consist of a rewritten Local Configuration Manager, or LCM. This should still duplicate much of the functionality of the existing LCM, but will be written in C++, enabling it to be compiled for any operating system. So, gone are the days of a .NET-based LCM for Windows and a distinct one written for Unix/Linux - we'll have one code base. -The big announcement, for me, was that the LCM will rely on a "provider model" for running DSC resources. While the word _provider_ is a little overused in PowerShell, this is a huge and positive step forward. The announcement indicates that the first provider will allow the new, C++ based LCM to run DSC resources written for PowerShell - e.g., almost everything currently out there today. A future provider will enable resources written in cross-platform PowerShell Core (which, [as discussed previously here][2], is a distinct product from Windows PowerShell), and other future providers will support resources written in C++ and Python. This is a _huge deal, _as it offers the potential for a much wider array of community-based resources. -I was also impressed with the humility in Microsoft's open source direction for the LCM. I think the company has learned from its open sourcing of PowerShell Core that "open source" means a great deal more than just publishing your code in GitHub. You've got to be responsive to issue posts, responsive to pull requests, and more. So the team is taking a more gradual approach to open sourcing the new LCM, which should help ensure they do it right. -The announcement mentions that, "[the new LCM] will need to be installed on systems where the current DSC platform exists today, and we will need to offer conflict detection..." and I find that notable. It means the company is still thinking about the best ways to deploy this new LCM, and they're working through the math on, "what if you have the old one and new one installed - is it going to be raccoons in a bag clawing at each other, or no?" We'll have to see what they come up with, but I'd personally be just fine if the new LCM just disabled itself if the old, original LCM was working. That would make it easy to pre-stage the new LCM without fear, and "flip it on" one day by disabling the old LCM. -I think by the time the new LCM is formally released as "General Availability" (as opposed to the inevitable beta releases), we'll be looking at feature parity with the old LCM. That means I think we can expect to see it support both pull and push modes. Given that the LCM pretty much _is_ DSC - that is, the LCM has all the brains of the technology - that should make the transition pretty easy and seamless. I think it's important to follow the beta builds, so that if you're seeing feature parity go awry, you can provide Microsoft with the feedback they'll need to course-correct in time. Don't wait until GA to bitch and moan; get in there and play with this new thing the moment you can. -There are, of course, questions not answered in this post, but I'll hazard my own guesses. There's no mention of Pull Server. Now that the team has enabled SQL Server for the "native" Pull Server, I honestly think we can expect to see them stop investing in that product. Their direction, as with much of Microsoft, is Azure; the pricing for running DSC in Azure Automation is so low that many organizations can, and should, simply do that. Those companies whose servers must run in a totally disconnected environment should plan to look outside of Microsoft - such as [Tug][3], an open-source pull server replacement that's got a ton more flexibility. Today's Microsoft can't be all things to all people, and if you have edge-case working conditions - like no Internet for your servers - then you're going to find yourself a bit more on your own. And, if I'm being honest, for some of those edge cases (and even for some more mainstream cases), a full configuration management platform like Chef or Puppet may be your best bet. -The real upshot here, though, is that _everything you know about DSC is still valid. _Microsoft is going to be doing some heavy lifting, programming-wise, to broaden the applicability of your DSC knowledge across platforms, but I suspect you're not going to have to do much work to "keep up" for this first phase. We'll doubtless see some asked-for new features creep in along the way, which will be great, and hopefully we'll see some of the minor architectural improvements that the community has been asking for for a few years, now. -Overall, I think this is a bright and positive announcement for DSC fans, and I'm looking forward to seeing where the company goes next! - - [1]: https://blogs.msdn.microsoft.com/powershell/2018/01/26/dsc-planning-update-january-2018/ - [2]: https://powershell.org/2018/01/15/can-we-talk-about-powershell-core-6-0/ - [3]: https://github.com/PowerShellOrg/tug diff --git a/content/articles/2018-02-01-help-us-recognize-amazing-powershell-contributors.md b/content/articles/2018-02-01-help-us-recognize-amazing-powershell-contributors.md deleted file mode 100644 index 5650a1404..000000000 --- a/content/articles/2018-02-01-help-us-recognize-amazing-powershell-contributors.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Help us Recognize Amazing PowerShell Contributors! -authors: - - Don Jones -date: "2018-02-01T16:36:07+00:00" -categories: - - PowerShell for Admins -aliases: - - /2018/02/help-us-recognize-amazing-powershell-contributors/ ---- - -_First: Please share this as widely as possible in your social media channels, so we can get the most number of suggestions possible!_ -We're working with the PowerShell team at Microsoft to identify individuals who have made an outstanding contribution to the PowerShell community. Perhaps they've written blog posts that really helped you conquer a PowerShell challenge, or maybe they've contributed code (on GitHub or elsewhere) that you rely on. Maybe they're an amazing teacher, or perhaps they're an awesome coder. Whatever their contribution, if it's been notable and helpful to you, we'd like to hear from you. - - - -[Go here to take the survey][1]. This will remain open through February 2018, and you're more than welcome to complete it multiple times if there are multiple people you want to recognize. We're relying on correct spelling of people's names to correlate the results, so please double-check that. We'll also need some means of contacting them, such as a Twitter handle or GitHub ID, or even a personal website, so have that handy before you take the survey. -We look forward to hearing from you! - - [1]: https://674004.polldaddy.com/s/powershell-heroes diff --git a/content/articles/2018-02-03-summit-2018-registration-status.md b/content/articles/2018-02-03-summit-2018-registration-status.md deleted file mode 100644 index 18fce9540..000000000 --- a/content/articles/2018-02-03-summit-2018-registration-status.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Summit 2018 registration status -authors: - - Richard Siddaway -date: "2018-02-03T10:07:42+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2018/02/summit-2018-registration-status/ ---- - -The speed at which places at Summit are being purchased has been amazing. We're down to our LAST 25 places. -At present rates I expect those to be gone by this time next week. -If you want a place at Summit 2018 - BUY NOW. -If you know of anyone who wants a place at Summit 2018 - tell them to BUY NOW -Last year we managed to add about 30 places after selling our initial number. We'll NOT be able to do that this year. We're getting much better at working out how many places are, and can be, available. -This is the LAST CALL for registrations for Summit 2018. diff --git a/content/articles/2018-02-04-2018-community-lightning-demos.md b/content/articles/2018-02-04-2018-community-lightning-demos.md deleted file mode 100644 index d1f2f8fdc..000000000 --- a/content/articles/2018-02-04-2018-community-lightning-demos.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: 2018 Community Lightning Demos -authors: - - pscookiemonster -date: "2018-02-04T02:45:42+00:00" -categories: - - PowerShell for Admins - - PowerShell Summit -aliases: - - /2018/02/2018-community-lightning-demos/ ---- - -#### Rambling - -Last year's [PowerShell + Devops Global Summit][1] was a roller coaster. -On one hand, I spoke for the first time - it was terrifying. Getting up in front of a local user group had helped, but it's not quite the same as a room full of PowerShell-ers, including MVPs and PowerShell team members - eek! -On the other hand, I was lucky enough to host the Community Lightning Demos. We managed to give 22 folks the chance to get up in front of the PowerShell community and give a quick, low-pressure ~10 minute demo. - -#### How did it go? - -Presumably it was a success! We got to see a variety awesome demos, folks got a taste of speaking in front of a summit crowd, and almost 10 lightning demo speakers are presenting full sessions this year.  Here's a glance from [Trevor][2]: -[![](https://powershell.org/wp-content/uploads/2018/02/docs-300x169.jpg)](https://powershell.org/wp-content/uploads/2018/02/docs.jpg) -The demos are back again this year, with a few changes thanks to your feedback and the help of [Don][3], [Richard][4], and others: - - * The official Community Lightning Demos will be 120 minutes - * We'll have more room for attendees, and no competing breakout sessions - * A non-invasive green-yellow-red time tracker will help keep speakers on track - * The demos are in the middle of the summit this year, leaving two days to follow up with speakers - -#### What's the plan? - - * We'll open a call-for-demos March 1st - * We have 12 slots for official Community Lightning Demos - * Given that we have fewer slots, we may not get to all submissions. We'll likely prefer: - * New speakers over breakout session speakers and 2017 demo speakers - * New ideas or interesting variations - * If we get enough submissions, we'll try to allocate more time (e.g. via side sessions) - -So! Start thinking about what you want to demo. The specifics will change, but the gist of [this bit][5] on the 2017 Community Lightning Demos may help, including an example demo on PSDepend. - -#### What if I don't get picked? - -Seriously, don't worry about this! We'll try to work things out. Worst case scenario? - - * We might end up with space in a side session - * Maybe we look into a post-summit unofficial online thing for community lightning demos - * You might give someone an idea to run with based on your proposal alone! [Glenn][6] didn't get to chat about Neo4j, but his proposal lead to [PSNeo4j][7] and [a session][8] at the summit this year - -Before we go, here's a quick taste of the 2017 lightning demos, documented by Michael: [1][9], [2][10], [3][11], [4][12], [5][13], [6][14], [7][15], [8][16], [9][17], [10][18], [11][19], [12][20], [13][21], [14][22], [15][23], [16][24], [17][25], [18][26], [19][27], [20][28], [21][29], [22][30].  Some of their material [is available here][31] -Hope to see you on the stage - cheers! - - [1]: https://powershell.org/summit/ - [2]: https://twitter.com/pcgeek86 - [3]: https://twitter.com/concentrateddon - [4]: https://twitter.com/RSiddaway - [5]: http://ramblingcookiemonster.github.io/Summit-Lightning-Demos/ - [6]: https://twitter.com/GlennSarti - [7]: https://github.com/RamblingCookieMonster/PSNeo4j - [8]: https://powershelldevopsglobalsummit2018.sched.com/event/Cpp3/connecting-the-dots-with-powershell - [9]: https://twitter.com/barbariankb/status/852253752849334272 - [10]: https://twitter.com/barbariankb/status/852256350490865664 - [11]: https://twitter.com/barbariankb/status/852260034213928960 - [12]: https://twitter.com/barbariankb/status/852262428783943680 - [13]: https://twitter.com/barbariankb/status/852264366095204352 - [14]: https://twitter.com/barbariankb/status/852269633042239488 - [15]: https://twitter.com/barbariankb/status/852271188248109056 - [16]: https://twitter.com/barbariankb/status/852273584785444864 - [17]: https://twitter.com/barbariankb/status/852276513911132160 - [18]: https://twitter.com/barbariankb/status/852278418477416454 - [19]: https://twitter.com/barbariankb/status/852280648307949569 - [20]: https://twitter.com/barbariankb/status/852286740643500032 - [21]: https://twitter.com/barbariankb/status/852290218623291392 - [22]: https://twitter.com/barbariankb/status/852291897196335104 - [23]: https://twitter.com/barbariankb/status/852294532582391808 - [24]: https://twitter.com/barbariankb/status/852297244619317248 - [25]: https://twitter.com/barbariankb/status/852299748610457600 - [26]: https://twitter.com/daviwil/status/852267784201314304 - [27]: https://twitter.com/barbariankb/status/852302084422590464 - [28]: https://twitter.com/barbariankb/status/852303459382476800 - [29]: https://twitter.com/barbariankb/status/852305871795245056 - [30]: https://twitter.com/barbariankb/status/852307309959106560 - [31]: https://github.com/devops-collective-inc/summit-materials#community-lightning-demos diff --git a/content/articles/2018-02-04-iron-scripter-2018-prequel-puzzle-3-a-commentary.md b/content/articles/2018-02-04-iron-scripter-2018-prequel-puzzle-3-a-commentary.md deleted file mode 100644 index 24120f750..000000000 --- a/content/articles/2018-02-04-iron-scripter-2018-prequel-puzzle-3-a-commentary.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Iron Scripter 2018 Prequel: Puzzle 3 – a commentary" -authors: - - Richard Siddaway -date: "2018-02-04T00:05:39+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/02/iron-scripter-2018-prequel-puzzle-3-a-commentary/ ---- - -My notes and commentary on puzzle 3 - working with a web feed - are now available: [Iron Scripter Prequel Puzzle 3 - A commentary][1] -As with previous commentaries I've not presented the faction specific solutions - view the forums and Slack channel to see what your faction and maybe more importantly what other factions have done. -Puzzle 4 will be available around the time you read this. -Enjoy - - [1]: https://powershell.org/wp-content/uploads/2018/02/Iron-Scripter-Prequel-Puzzle-3-A-commentary.pdf diff --git a/content/articles/2018-02-04-iron-scripter-2018-prequel-puzzle-4.md b/content/articles/2018-02-04-iron-scripter-2018-prequel-puzzle-4.md deleted file mode 100644 index 8082d82bf..000000000 --- a/content/articles/2018-02-04-iron-scripter-2018-prequel-puzzle-4.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Iron Scripter 2018 prequel: Puzzle 4" -authors: - - Richard Siddaway -date: "2018-02-04T00:02:06+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/02/iron-scripter-2018-prequel-puzzle-4/ ---- - -You're a quarter of the way to Iron Scripter. In this challenge - [Iron Scripter Prequel Puzzle 4][1] -  -you'll be asked to find a way to make legacy command line tools work with the PowerShell pipeline -. -In all things remember the goal of your faction. -Please remember that we're not grading submissions for these puzzles. You can comment, and discuss the puzzle on the Iron Scripter Prequel forum. -If anyone is really stuck or doesn't understand something in the puzzle leave a comment here and I'll try to answer. No guarantees on timeframe though. -Good luck - - [1]: https://powershell.org/wp-content/uploads/2018/02/Iron-Scripter-Prequel-Puzzle-4.pdf diff --git a/content/articles/2018-02-05-powershell-summit-pre-arrival-information-dump.md b/content/articles/2018-02-05-powershell-summit-pre-arrival-information-dump.md deleted file mode 100644 index e15826630..000000000 --- a/content/articles/2018-02-05-powershell-summit-pre-arrival-information-dump.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: PowerShell Summit Pre-Arrival Information Dump -authors: - - Don Jones -date: "2018-02-05T17:49:05+00:00" -categories: - - PowerShell Summit -aliases: - - /2018/02/powershell-summit-pre-arrival-information-dump/ ---- - -This is a bit of a long post, but we promise - it's important, and it's worth it. -**Refunds & Transfers** -Because this is the time of year when it starts to come up, remember that we don't offer registration refunds. You're welcome to transfer your membership, however, at no fee. Just log into EventBrite (if someone else registered you, they'll need to do this) and change the attendee information. Voila! -**Pre-Arrival** -For the love of all that is good and just in the world, make sure you have your EventBrite ticket. That can be printed, in the EventBrite phone app, in an email on your phone, or whatever - we just need the barcode. If you don't have this, there will be a Sad Summiteer line for you to stand in, where we can look you up by name or order number. -Speakers! You're not in EventBrite yet, but you will be. Right before Summit, we'll be registering you, so be sure to watch your email. If you haven't provided Richard with a good email address (we STRONGLY suggest a personal one to avoid corporate spam-traps), please do so NOW. -**Registration Process** -When you get to the Meydenbauer Center, go DOWNSTAIRS to Center Hall A and B. This is not where we've been in the past. Do not go upstairs. -Step 1 will be to get your EventBrite ticket scanned. Don't have yours? Sad panda, you'll need to stand in Sad Summiteer line for a manual name lookup. Then... -Step 2, find your badge (organized by last name), and insert it into a badge holder. Then, on to... -Step 3 is T-Shirt pickup. This must be done right then - we won't have this set up later, and leftovers will be donated to a local charity. If you're skipping Monday for some reason, you will not get your shirt. We will have tables set up for each shirt size. Go to the table corresponding to your pre-selected choice in EventBrite, where your name will be checked against a list. You shirt size is also printed on your name badge for your convenience. -_This is a good time to double-check your EventBrite shirt size selection_. You can change it until March 5th or so (if someone else registered you, they will need to make the change for you as well). You cannot change your mind later because we're ordering the exact quantities indicated in EventBrite. Speakers! We collected your shirt size during the Call for Topics; check with Richard Siddaway on your shirt size, if you need to. Do this RIGHT NOW if you're not certain. -Step 4 is breakfast. Enjoy. And wear your badge at all times, please. -**Venue Layout** -Monday, we'll be downstairs in Center Hall A and B all day. All day! Tuesday-Thursday, we're back in our traditional space upstairs (rooms 401-409) for all sessions; meals will remain downstairs in Center Hall. During meal times, all escalators will run in the direction of food; about halfway through meal breaks, we'll run them all back int he direction of sessions. If you want to go the opposite direction for some weird reason, take the elevators. Do not run wrong-ways on the escalators. -**GET THE SCHEDULE APP!** -If you hustle to the schedule website (linked from PowerShellSummit.org), we suggest you bookmark it. Then, get our iPhone or Android app for your phones. If you need a Windows Phone app, HAHAHAHAHAHAHA. The app is where ALL schedule changes will be reflected. Install it. Examine it. Love it. -**CHOOSE YOUR FACTION!** -If you haven't already been participating in Iron Scripter Prequel on PowerShell.org, jump in. And use the #faction- channels in our Slack team to find the faction whose style fits you best. Locate members of your faction all week, and get to be friends - because you'll need each other for the epic, annual IRON SCRIPTER tournament Thursday afternoon! (And we may have some faction-logo rubber stamps wandering around, if you'd like to indicate your faction loyalty on your name badge!) -**Open Spaces / Side Sessions** -Tuesday-Thursday, rooms 407 and 408 will be available for ad-hoc "Side Sessions." We do not provide A/V in these rooms, but you can suggest a session anytime you like. Email your suggestions to sidesessions@powershell.org. If you have a time slot request, or a time you don't want your session to be, just mention it. We'll do our best to accommodate, reply to you, and add you to the schedule. We'll announce sessions each morning, so try to schedule at least by the day before. -**Session Reviews** -THESE ARE IMPORTANT. DO THEM. You can do so right from within our app, or the Sched.com website. Reviews end on Thursday afternoon, so you can't save these up and do them a week later, sorry. -**Power Cord Policy** -Do not under any circumstances WHATSOEVER drag a power cord across any walkway. Do not leave your electronics leaning against the wall in an attempt to avoid running a cord across the walkway. This is serious, Fire Marshal business. Do not poke the Fire Marshall - his office is literally across the street. -**Slack** -People often use the Slack team to coordinate dinners and more; we recommend getting their mobile app and logging into the DevOps-Summit workspace. -**Hug Jason** -Hugs are an important part of Jason Helmick's personal economy, and as this is his last year serving as our CFO, please take a moment to thank the big bald goofball for his service. -**Spouse / Guest Passes** -Please bear in mind that only paid attendees are permitted to any and all Summit activities - this is as much about insurance requirements as it is our costs. We did offer Spouse/Guest passes on the main registration site - those provide access to our Monday and Wednesday evening events only. Please ensure your guest brings their EventBrite ticket (barcode) with them to each event. We cannot accommodate early admission for guests. diff --git a/content/articles/2018-02-06-powershell-devops-global-summit-2018-registration-status.md b/content/articles/2018-02-06-powershell-devops-global-summit-2018-registration-status.md deleted file mode 100644 index 541b296f4..000000000 --- a/content/articles/2018-02-06-powershell-devops-global-summit-2018-registration-status.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: PowerShell + DevOps Global Summit 2018 Registration Status -authors: - - Don Jones -date: "2018-02-06T22:21:11+00:00" -categories: - - PowerShell Summit -aliases: - - /2018/02/powershell-devops-global-summit-2018-registration-status/ ---- - -As I write this, we’ve sold out. Here’s what happens next: -We need to finish reconciling our speaker slots and PowerShell team seats, which will take about a week. That may result in a free seat or two, which we will place on sale. Watch @PSHSummit on Twitter for that announcement. -A WAITLIST IS AVAILABLE ON THE REGISTRATION PAGE. Sign up if you’d like first notice of released inventory and a 24h window to claim a seat -Beyond that, monitor the Summit discussion forum here. We often have last minute cancellations, and while we don’t permit refunds, we do permit ticket holders to transfer their tickets. We will advise them to post in the forum to solicit transferees. Financial arrangements for such transfers are private; we cannot facilitate those -That will do it for registration - aside from a possible small handful of seats coming out of our final reconciliation, and the opportunity of purchasing a ticket from a cancellation, there won’t be additional inventory. We’re not looking to increase attendance for 2019, either; we will be sticking at the current attendee count for the foreseeable future. -Big thanks to our returning and new Summiteers! We are looking forward to seeing you in April! diff --git a/content/articles/2018-02-08-updated-summit-pre-arrival-infodump.md b/content/articles/2018-02-08-updated-summit-pre-arrival-infodump.md deleted file mode 100644 index 157c56ff0..000000000 --- a/content/articles/2018-02-08-updated-summit-pre-arrival-infodump.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Updated Summit Pre-Arrival InfoDump -authors: - - Don Jones -date: "2018-02-08T19:26:20+00:00" -categories: - - PowerShell Summit -aliases: - - /2018/02/updated-summit-pre-arrival-infodump/ ---- - -We sent out a big email blast to everyone this morning (noon Eastern time), and if you didn't get it it's because (probably) your corporate email is block-block-blocking us. You're welcome to sign up a personal email address at , if you'd like. We'll also continue to post communications in the #summit-events channel in the Slack team. A PDF of this morning's email is here, although this'll be the last one we post publicly. -[Important Pre-Summit Information][1] -That mailing list and our Slack team are going to be our best way to communicate with Summiteers, so make sure one of them is working for you. - - [1]: https://powershell.org/wp-content/uploads/2018/02/Important-Pre-Summit-Information.pdf diff --git a/content/articles/2018-02-11-iron-scripter-2018-prequel-puzzle-4-a-commentary.md b/content/articles/2018-02-11-iron-scripter-2018-prequel-puzzle-4-a-commentary.md deleted file mode 100644 index da079578b..000000000 --- a/content/articles/2018-02-11-iron-scripter-2018-prequel-puzzle-4-a-commentary.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Iron Scripter 2018 prequel: Puzzle 4 – a commentary" -authors: - - Richard Siddaway -date: "2018-02-11T00:03:04+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/02/iron-scripter-2018-prequel-puzzle-4-a-commentary/ ---- - -Puzzle 4 is all about working with legacy utilities. My notes and commentary are now available: [Iron Scripter Prequel Puzzle 4 - A commentary][1] -As with previous commentaries I've not presented the faction specific solutions - view the forums and Slack channels to see what the factions are doing and join with your faction. -Puzzle 5 will be available around the time you read this. -Enjoy. - - [1]: https://powershell.org/wp-content/uploads/2018/02/Iron-Scripter-Prequel-Puzzle-4-A-commentary.pdf diff --git a/content/articles/2018-02-11-iron-scripter-2018-prequel-puzzle-5.md b/content/articles/2018-02-11-iron-scripter-2018-prequel-puzzle-5.md deleted file mode 100644 index c120e15b7..000000000 --- a/content/articles/2018-02-11-iron-scripter-2018-prequel-puzzle-5.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "Iron Scripter 2018 prequel: Puzzle 5" -authors: - - Richard Siddaway -date: "2018-02-11T00:01:37+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/02/iron-scripter-2018-prequel-puzzle-5/ ---- - -You're approaching the half way point on your journey to Iron Scripter. Your challenge, should you choose to accept it, involves performance counters and multiple ways of presenting data. The details are here: [Iron Scripter Prequel Puzzle 5][1] -In all things remember the goals of your faction. -Please remember that we're NOT grading submissions for these puzzles. You can comment, and discuss the puzzle on the Iron Scripter Prequel forums or on the Summit Slack channel -If anyone is really stuck or doesn't understand something in the puzzle leave a comment here or on the Slack channel. I'll try to answer but no guarantees about timeframe as I'm finishing off work on Summit 2018 and starting Summit 2019! -Good luck. - - [1]: https://powershell.org/wp-content/uploads/2018/02/Iron-Scripter-Prequel-Puzzle-5.pdf diff --git a/content/articles/2018-02-18-iron-scripter-2018-prequel-puzzle-5-a-commentary.md b/content/articles/2018-02-18-iron-scripter-2018-prequel-puzzle-5-a-commentary.md deleted file mode 100644 index 39dfeaab7..000000000 --- a/content/articles/2018-02-18-iron-scripter-2018-prequel-puzzle-5-a-commentary.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Iron Scripter 2018 prequel: Puzzle 5 – a commentary" -authors: - - Richard Siddaway -date: "2018-02-18T00:03:27+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/02/iron-scripter-2018-prequel-puzzle-5-a-commentary/ ---- - -Puzzle 5 involves working with performance counters. My notes and commentary are available: [Iron Scripter Prequel Puzzle 5 - A commentary][1] -As with previous commentaries I've not presented the faction specific solutions - view the forums and Slack channels to see what the factions are doing and join with your faction. -Puzzle 6 will be available around the time you read this. -Enjoy. - - [1]: https://powershell.org/wp-content/uploads/2018/02/Iron-Scripter-Prequel-Puzzle-5-A-commentary.pdf diff --git a/content/articles/2018-02-18-iron-scripter-prequels-puzzle-6.md b/content/articles/2018-02-18-iron-scripter-prequels-puzzle-6.md deleted file mode 100644 index 1ab046edd..000000000 --- a/content/articles/2018-02-18-iron-scripter-prequels-puzzle-6.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "Iron Scripter Prequels: Puzzle 6" -authors: - - Richard Siddaway -date: "2018-02-18T00:01:13+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/02/iron-scripter-prequels-puzzle-6/ ---- - -This is your half way challenge. This week your challenge involves discovering the time a system has been running - [Iron Scripter Prequel Puzzle 6][1] - -In all things remember the goals of your faction. - - -Please remember that we're NOT grading submissions for these puzzles. You can comment, and discuss the puzzle on the Iron Scripter Prequel forums or on the Summit Slack channel. - - -If anyone is really stuck or doesn't understand something in the puzzle leave a comment here or on the Slack channel. I'll try to answer but no guarantees about timeframe as I'm finishing off work on Summit 2018 and starting Summit 2019! - - -Good luck. - - - [1]: https://powershell.org/wp-content/uploads/2018/02/Iron-Scripter-Prequel-Puzzle-6.pdf diff --git a/content/articles/2018-02-25-iron-scripter-prequel-puzzle-6-commentary.md b/content/articles/2018-02-25-iron-scripter-prequel-puzzle-6-commentary.md deleted file mode 100644 index 0156c39ee..000000000 --- a/content/articles/2018-02-25-iron-scripter-prequel-puzzle-6-commentary.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Iron Scripter Prequel: Puzzle 6 commentary" -authors: - - Richard Siddaway -date: "2018-02-25T00:03:29+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/02/iron-scripter-prequel-puzzle-6-commentary/ ---- - -Puzzle 6 has some interesting aspects when you dig into determining system up time: [Iron Scripter Prequel Puzzle 6 - A commentary][1] -I've not presented full faction specific solutions as usual - view the forums and Slack channels to see how the factions are solving this puzzle. -Puzzle 7 will be available around the time you read this. -Enjoy. - - [1]: https://powershell.org/wp-content/uploads/2018/02/Iron-Scripter-Prequel-Puzzle-6-A-commentary.pdf diff --git a/content/articles/2018-02-25-iron-scripter-prequels-puzzle-7.md b/content/articles/2018-02-25-iron-scripter-prequels-puzzle-7.md deleted file mode 100644 index 1e99a1030..000000000 --- a/content/articles/2018-02-25-iron-scripter-prequels-puzzle-7.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Iron Scripter Prequels: puzzle 7" -authors: - - Richard Siddaway -date: "2018-02-25T00:01:07+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/02/iron-scripter-prequels-puzzle-7/ ---- - -You're past half way on journey to iron Scripter. Only a few more training opportunities will be available to you before the ultimate competition. -In this week's challenge  [Iron Scripter Prequel Puzzle 7][1] you'll be working with PowerShell classes. -In all things remember the goals of  your faction. -Please remember that we're NOT grading the submissions for these puzzles. You can comment, and discuss the puzzle on the Iron Scripter prequel forums or on the Summit Slack channel. -If anyone is really stuck or doesn't understand something in the puzzle leave a comment here or on the Slack channel. I'll try and answer but can't guarantee timeframes. -If there is sufficient interest I'll run a Q&A side session on the prequel puzzles at Summit. Let me know either here or on the Slack channel if you're interested. -Good luck - - [1]: https://powershell.org/wp-content/uploads/2018/02/Iron-Scripter-Prequel-Puzzle-7.pdf diff --git a/content/articles/2018-03-04-iron-scripter-prequel-puzzle-7-a-commentary.md b/content/articles/2018-03-04-iron-scripter-prequel-puzzle-7-a-commentary.md deleted file mode 100644 index d79f335ce..000000000 --- a/content/articles/2018-03-04-iron-scripter-prequel-puzzle-7-a-commentary.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Iron Scripter Prequel: Puzzle 7 – A commentary" -authors: - - Richard Siddaway -date: "2018-03-04T00:03:25+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/03/iron-scripter-prequel-puzzle-7-a-commentary/ ---- - -Puzzle 7 introduces a touch of class - PowerShell classes to be precise. The way I approached the puzzle is available: [Iron Scripter Prequel Puzzle 7 - A commentary][1] -I've not presented full faction specific solutions as usual - view the forums and Slack channels to see how the factions are solving this puzzle. -Puzzle 8 will be available around the time you read this. -Enjoy. - - [1]: https://powershell.org/wp-content/uploads/2018/03/Iron-Scripter-Prequel-Puzzle-7-A-commentary.pdf diff --git a/content/articles/2018-03-04-iron-scripter-prequel-puzzle-8.md b/content/articles/2018-03-04-iron-scripter-prequel-puzzle-8.md deleted file mode 100644 index 93cb8f745..000000000 --- a/content/articles/2018-03-04-iron-scripter-prequel-puzzle-8.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "Iron Scripter Prequel: Puzzle 8" -authors: - - Richard Siddaway -date: "2018-03-04T00:01:39+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/03/iron-scripter-prequel-puzzle-8/ ---- - -Iron Scripter is rapidly approaching. This is one of your last few training opportunities. -This challenge [Iron Scripter Prequel Puzzle 8][1] revolves around setting permissions on files. -In all things remember the goals of your faction. -Please remember that we're NOT grading the submissions for these puzzles. You can comment, and discuss the puzzle on the Iron Scripter prequel forums or on the Summit Slack channel. -If anyone is really stuck or doesn't understand something in the puzzle leave a comment here or on the Slack channel. I'll try and answer but can't guarantee timeframes. -If there is sufficient interest I'll run a Q&A side session on the prequel puzzles at Summit. Let me know either here or on the Slack channel if you're interested. -Good luck - - - [1]: https://powershell.org/wp-content/uploads/2018/03/Iron-Scripter-Prequel-Puzzle-8.pdf diff --git a/content/articles/2018-03-10-2018-community-lightning-demos-sign-up-now.md b/content/articles/2018-03-10-2018-community-lightning-demos-sign-up-now.md deleted file mode 100644 index 6f56269d5..000000000 --- a/content/articles/2018-03-10-2018-community-lightning-demos-sign-up-now.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: 2018 Community Lightning Demos – Sign Up Now! -authors: - - pscookiemonster -date: "2018-03-10T02:41:33+00:00" -categories: - - PowerShell Summit -aliases: - - /2018/03/2018-community-lightning-demos-sign-up-now/ ---- - -If you've been to a PowerShell Summit, chances are you've seen the awesome lightning demos put on by the PowerShell team members. It's a fun format - each team member gives a quick 5-10 minute demo of something they're working on, one after the other. -In a few weeks, the PowerShell + Devops Global Summit will kick off, with a Community Lightning Demo session scheduled for Tuesday afternoon. We're looking for community members like you to [sign up][1] and present! Demo something cool that you've written or used - a module, function, tip, trick, etc. - just keep it under 10 minutes. - - - [![](https://powershell.org/wp-content/uploads/2018/02/docs-300x169.jpg)](https://powershell.org/wp-content/uploads/2018/02/docs.jpg) - - - - Michael Lombardi presenting a demo, credit to Trevor Sullivan - - - - -Here are some links with more info: - - * [A list of demos from 2017][2] - * [A longer bit on community lightning demos][3] - * [An example demo recording][4] - * [Announcement with pictures from last year][5] - -Sound interesting? Want to jump on stage for a few minutes and show us something fun? [Sign up now][1]! -We'll be looking forward to some awesome demos; hope to see you there! - - [1]: https://www.papercall.io/cfps/988/submissions/new - [2]: https://github.com/devops-collective-inc/summit-materials#community-lightning-demos - [3]: http://ramblingcookiemonster.github.io/Summit-Lightning-Demos/ - [4]: https://www.youtube.com/watch?v=50Z6vEHVgDg - [5]: https://powershell.org/2018/02/04/2018-community-lightning-demos/ diff --git a/content/articles/2018-03-11-iron-scripter-prequel-puzzle-8-a-commentary.md b/content/articles/2018-03-11-iron-scripter-prequel-puzzle-8-a-commentary.md deleted file mode 100644 index 2a90e841f..000000000 --- a/content/articles/2018-03-11-iron-scripter-prequel-puzzle-8-a-commentary.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "Iron Scripter prequel: Puzzle 8 – A commentary" -authors: - - Richard Siddaway -date: "2018-03-11T00:03:17+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/03/iron-scripter-prequel-puzzle-8-a-commentary/ ---- - -In puzzle 8 you're asked to create some local users, folders and a file. Then set permissions on the file. I've provided a commentary on the puzzle: [Iron Scripter Prequel Puzzle 8 - A commentary][1] -I've not presented full faction specific solutions as usual - view the forums and Slack channels to see how the factions are solving this puzzle. -Puzzle 9 will be available around the time you read this. -Enjoy. - - - [1]: https://powershell.org/wp-content/uploads/2018/03/Iron-Scripter-Prequel-Puzzle-8-A-commentary.pdf diff --git a/content/articles/2018-03-11-iron-scripter-prequel-puzzle-9.md b/content/articles/2018-03-11-iron-scripter-prequel-puzzle-9.md deleted file mode 100644 index 619d6a10f..000000000 --- a/content/articles/2018-03-11-iron-scripter-prequel-puzzle-9.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Iron Scripter prequel: Puzzle 9" -authors: - - Richard Siddaway -date: "2018-03-11T00:01:15+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/03/iron-scripter-prequel-puzzle-9/ ---- - -You're approaching the end of the prequels - soon it will be time for Iron Scripter. This week's challenge involves the file system and the scheduling system - [Iron Scripter Prequel Puzzle 9][1] - -In all things remember the goals of your faction. -Please remember that we're NOT grading the submissions for these puzzles. You can comment, and discuss the puzzle on the Iron Scripter prequel forums or on the Summit Slack channel. -If anyone is really stuck or doesn't understand something in the puzzle leave a comment here or on the Slack channel. I'll try and answer but can't guarantee timeframes. -If there is sufficient interest I'll run a Q&A side session on the prequel puzzles at Summit. Let me know either here or on the Slack channel if you're interested. -Good luck - - [1]: https://powershell.org/wp-content/uploads/2018/03/Iron-Scripter-Prequel-Puzzle-9.pdf diff --git a/content/articles/2018-03-18-iron-scripter-preludes-and-main-event-rules-and-info.md b/content/articles/2018-03-18-iron-scripter-preludes-and-main-event-rules-and-info.md deleted file mode 100644 index 36c91e90e..000000000 --- a/content/articles/2018-03-18-iron-scripter-preludes-and-main-event-rules-and-info.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Iron Scripter Preludes and Main Event: Rules and Info" -authors: - - Don Jones -date: "2018-03-18T20:00:36+00:00" -categories: - - PowerShell Summit - - Scripting Games -aliases: - - /2018/03/iron-scripter-preludes-and-main-event-rules-and-info/ ---- - -Information is [now available at IronScripter.us][1] for the at-Summit events, and participants are advised to refresh themselves on the [Rules][2]. -Participants attending Summit should begin choosing their faction and getting to know their teammates in the faction-specific channels of the DevOps-Summit Slack team (open only to attendees and alumni). -Participants hoping to participate remotely may wish to start choosing a faction and finding a way to get in touch with them. The [Faction Discussion][3] may be a good way to do that. - - [1]: http://ironscripter.us/iron-scripter-us-2018/ - [2]: http://ironscripter.us/rules/ - [3]: https://powershell.org/forums/forum/iron-scripter/faction-discussion/ diff --git a/content/articles/2018-03-18-iron-scripter-prequel-puzzle-10.md b/content/articles/2018-03-18-iron-scripter-prequel-puzzle-10.md deleted file mode 100644 index e6ddf94c8..000000000 --- a/content/articles/2018-03-18-iron-scripter-prequel-puzzle-10.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "Iron Scripter prequel: Puzzle 10" -authors: - - Richard Siddaway -date: "2018-03-18T00:01:59+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/03/iron-scripter-prequel-puzzle-10/ ---- - -Activity on the Iron Scripter forum and Slack channels has reduced for the last few puzzles leading me to believe that I've been giving out too many challenges. I've decided that this will be the last prequel puzzle: [Iron Scripter Prequel Puzzle 10][1] -There won't be a puzzle 11. -Next week I'll publish the commentary for puzzle 9 and the week after that for puzzle 10 meaning you get 2 weeks for these last 2 puzzles. -Next year, if we repeat Iron Scripter and the prequels, we'll space the prequels out a bit more so that we don't overload you. -Details on the iron Scripter challenge itself will be published soon - until then enjoy this last prequel puzzle. - - [1]: https://powershell.org/wp-content/uploads/2018/03/Iron-Scripter-Prequel-Puzzle-10.pdf diff --git a/content/articles/2018-03-28-iron-scripter-prequels-puzzle-9-a-commentary.md b/content/articles/2018-03-28-iron-scripter-prequels-puzzle-9-a-commentary.md deleted file mode 100644 index 456ac6384..000000000 --- a/content/articles/2018-03-28-iron-scripter-prequels-puzzle-9-a-commentary.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Iron Scripter Prequels: Puzzle 9 – A commentary" -authors: - - Richard Siddaway -date: "2018-03-28T15:07:56+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/03/iron-scripter-prequels-puzzle-9-a-commentary/ ---- - -Here's my commentary for puzzle 9: [Iron Scripter Prequel Puzzle 9 - A commentary][1] -In this puzzle you were cleaning up the TEMP folder and the recycle bin plus working with scheduled tasks and/or scheduled jobs. -One more commentary to come - probably early next week rather than Sunday and then we're into the Summit and the main event. - - [1]: https://powershell.org/wp-content/uploads/2018/03/Iron-Scripter-Prequel-Puzzle-9-A-commentary.pdf diff --git a/content/articles/2018-04-01-iron-scripter-prequels-puzzle-10-a-commentary.md b/content/articles/2018-04-01-iron-scripter-prequels-puzzle-10-a-commentary.md deleted file mode 100644 index c741a3b47..000000000 --- a/content/articles/2018-04-01-iron-scripter-prequels-puzzle-10-a-commentary.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Iron Scripter prequels: Puzzle 10 – A commentary" -authors: - - Richard Siddaway -date: "2018-04-01T00:01:32+00:00" -categories: - - Announcements - - PowerShell Summit - - Scripting Games -aliases: - - /2018/04/iron-scripter-prequels-puzzle-10-a-commentary/ ---- - -This is the commentary on the last Iron Scripter prequel puzzle: [Iron Scripter Prequel Puzzle 10 - A commentary][1] -Next weekend will mark the start of summit and you can work on the Iron Scripter preludes - 4 daily puzzles as a lead in to the main event on Thursday 12 April 2018. If you haven't chosen your faction yet you need to hurry - - [1]: https://powershell.org/wp-content/uploads/2018/03/Iron-Scripter-Prequel-Puzzle-10-A-commentary.pdf diff --git a/content/articles/2018-04-11-a-changing-of-the-guard.md b/content/articles/2018-04-11-a-changing-of-the-guard.md deleted file mode 100644 index 0432231e8..000000000 --- a/content/articles/2018-04-11-a-changing-of-the-guard.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: A Changing of the Guard -authors: - - Don Jones -date: "2018-04-11T20:04:28+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2018/04/a-changing-of-the-guard/ ---- - -This week at PowerShell + DevOps Global Summit 2018, we announced a change in leadership for The DevOps Collective, the nonprofit organization that runs Summit, PowerShell.org, and other programs. - - -Stepping in as CEO will be former Director of Online Services Will Anderson (@gamerlivingwill on Twitter). As CEO, Will takes on day to day responsibility for running Summit, managing the website, and keeping our other programs on track. He will be assembling a team, including our new CFO James Petty, to help him with those tasks. Many of our current crew, including Richard Siddaway and Jeff Hicks, will continue their major contributions to Summit and other activities, and Will is already speaking with other community members who will be joining our team for the first time. Jeffrey Bernt will take on additional responsibilities for Summit logistics, backed by our long-time logistics expert Christopher Gannon. This is all part of what has always been our plan to involve more community members in the organization’s operation, and to help to ensure the long term success and survival of all our programs. -I will remain the organization’s President. This enables me to stay on the advise Will and his team, help document how we do things, and focus on the organization’s future. Will’s move to CEO will free up space for me to work on new projects that further the organization’s mission, and to grow the organization to better serve our community. I’ve some fun things in mind that you’ll hopefully get to see someday soon. - - -Jason Helmick, our former CFO, is stepping aside. He will still be involved with Summit and remains a close friend and advisor to me, and I thank him deeply for helping not only bring James into the family, but creating such a smooth transition for his role. - - -Please join me in congratulating Will and James! diff --git a/content/articles/2018-04-16-a-summit-2018-post-mortem.md b/content/articles/2018-04-16-a-summit-2018-post-mortem.md deleted file mode 100644 index 747e443f3..000000000 --- a/content/articles/2018-04-16-a-summit-2018-post-mortem.md +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: A Summit 2018 Post-Mortem -authors: - - Don Jones -date: "2018-04-16T00:36:31+00:00" -categories: - - PowerShell Summit -aliases: - - /2018/04/a-summit-2018-post-mortem/ ---- - -We've been conducting a survey of Summit 2018, now that it's in the past, and wanted to share some of our immediate take-aways. The survey is still open for Summiteers until end of April 2018; you should have the URL in a follow-up email and can inquire in the Slack team if you need it. - - - -The week kicked off with a huge hiccup, as the mail-merge used to produce the event badges dropped nearly a third of them, and we (I, really) didn't notice until far too late. Huge apologies, personally, for that massive screw-up on Monday. -Monday's breakfast was a little touch-and-go as well, as our first 200 arrivals consumed more than 500 breakfast sandwiches, leaving many Summiteers with nothing. I'd stopped making the "don't pile your plate" announcement last year, which may need to be reinstated. We're working on ways to deal with that on arrival day, when folks are coming in unevenly and announcements are difficult to make with consistency. We may move to a plated breakfast model on Monday, versus a buffet, although those are a great deal more expensive and make it harder to accommodate special dietary needs. -One comment I specifically want to address, because it's important to me: - -> - -> - -> - -> - -> If it was by choice that's one thing, but if there was any ounce of pressure to get the women into those costumes... that seems a bit... not cool? It was awkward. I know it wasn't to the level of 'booth babes,' but still had a similar feeling to it. -> - -> - -> - -> - - - - - - - - - This is referring to [@TheDevOpsDiva](http://twitter.com/thedevopsdiva) and [@MSFTJenny,](https://twitter.com/msftjenny) who appeared costumed as the [PowerShell character](https://www.redbubble.com/people/migreene/works/28212186-powershell-hero?p=sticker). I want to be absolutely clear that these women are members of our community; Missy is an MVP Award recipient and Jenny is a Program Manager on the PowerShell team. Both created their costumes and appeared entirely of their own volition because they thought it'd be fun. I'd *never* permit an event I worked at to pressure anyone, female or otherwise, into appearing in a costume (unless we hired an actor specifically for that purpose, which wouldn't be something Summit would do). I entirely appreciate and respect the concern here; I'm not trying to attack the commenter. I just want to make it crystal clear that the women had the idea in the first place on this one. - Monday otherwise went off well, although some folks did feel that the Team Lightning Demos were overly Azure-heavy. Given Microsoft's extreme cloud focus these days, that's less than surprising, I suppose, but it's well-noted for the future. We know not every Summiteer is an Azure customer. We'd actually deeply love some engagement from other cloud providers, and are hopeful we'll see that in the future. - Actually, we did have one more snafu on Monday: our first attempt at lunchtime vendor sessions fell almost entirely flat, and we won't be using that as a sponsorship opportunity again. More on that toward the end of this article. - One of our breakfast selections, a French toast bar, didn't get a lot of love - and honestly, our logistics folks were a bit saddened by it as well. Most Meydenbauer hot breakfasts always include some sausage or eggs or bacon for those inclined, but the French toast "package" was just that, and nothing more. We've notes to watch for that in the future. We know folks prefer a more well-rounded breakfast. Sorry for that one. - Overall, I personally felt the food was great as usual, although food reviews are always a mixed bag. We know some of you would just prefer pizza all week, or "simple foods," but we're trying to accommodate a huge range of backgrounds and preferences on a budget, so we do the best we can. We heard a lot of "low carb" requests, but know that each meal was planned by a professional chef and a registered dietician to meet current nutritional recommendations; we obviously can't accommodate every possible dietary preference, and so we try to aim the middle ground of following basic guidelines for meal composition. We'll continue that going forward, and hope everyone can appreciate the rather impossible situation you get into when trying to feed 400 people on $78 per person per day (conference venue food isn't cheap, folks, and our venue is actually the best deal in town). - Finally, Thursday wrapped with Iron Scripter, which was our first competition of this kind. We'll do it again, and we've already taken numerous notes to improve and work out kinks. Strongly noted is the need to provide more specific detail of the competition in advance, so that people can figure out how they'll participate. Huge thanks to everyone who participated - we hope you had some fun on the last afternoon. - Some of what's on tap for next year: We're going to launch an OnRamp track, which will be a separate ticket at the same price. Those folks will participate in our Monday General Sessions, meals, and evening events, but they'll have their own hands-on class content otherwise. We'll have some of the industry greats teaching, with the idea of bringing new blood into our community each year. And, we'll be partnering with sponsors and Tech Impact's IT Works program to provide OnRamp scholarships to young people, often from disadvantaged situations or underrepresented groups. They'll all have completed a basic IT Operations education, including A+ and Cisco certifications. Our only sponsorship packages in 2019 will each include at least one scholarship, and we hope this can eventually help increase the diversity of our community in many ways. - Speaking of diversity, this is a common thread. I want to include one particularly well-written comment from our survey, but this wasn't the only one with this general theme: - - - > - -> - -> - -> - -> On diversity: - * Acknowledgement by leadership that this is a problem might help - * Some orgs can help include speakers, attendees from underserved communities - * More active pursuit, but _not_ solely for diversity might help. There are some fantastic folks out there... This might be tough to do -> - -> - -> - -> - - - - - - - - - - - - Let me address this a wee bit. First, because many folks don't realize it, Summit has no paid employees. We're all doing this on a volunteer basis, in our spare time, and it already consumes a lot of that spare time. While I 100% agree with the above, and absolutely acknowledge the problem the IT industry has, in general, with diversity; we simply don't have the human-power to actively pursue particular presenters or attendees. We just don't. Adding one $60k salary to our (currently non-existent) payroll to handle this would add almost $350 to each ticket we sell, once you factor in payroll taxes, worker's compensation, and other overhead. That moves us to a $1950 ticket, which is more than anyone has indicated they're willing to pay for. What I'd love is for someone to volunteer to take on this task for us, as volunteers currently take on every other task we have to perform. I suppose, if I'm being snarky, I'd say it's all well and good to tell us what we could do better, but it's a lot more valuable to jump in and actually help us do it. - We've also seen comments like: - - - > - -> - -> - -> - -> it would be great if we could offer some financial assistance to get some more diversity to the conference. -> - -> - -> - -> - - - - - - - - - - - - As noted above, we're going to try very hard to do that. Bear in mind that *we're a nonprofit; *we don't really have "extra money." Financial assistance without sponsors means raising the ticket price, and then we have to actually find those needing our assistance (which we're hoping to rely on Tech Impact for, since they're already working with them). Money and human-hours are this particular organization's main constraint; anyone willing to help solve that with a large donation or by contributing *their* time to help solve the problem will be welcomed with open arms, I promise. Drop me a line at donj@ (that's my email alias; you can likely figure out the domain name since you're on the website). - And bear in mind that we don't get huge sponsorships. If we got 4 (a record), that'd be 4 scholarships. If we bumped everyone's ticket price $20, we'd get 1 more. Five folks is about 1% of our attendance. I'm not saying we don't do it because it's not big; I'm saying that, even if we're hugely successful, it's not going to be hugely visible. I don't care about the visibility; we're going to try and make this happen because it's the right thing. Just know that it's not going to be an overnight turnaround for an industry with epically poor diversity. - On another topic: Booze. This also comes up in our survey, such as when we asked attendees what one thing we could drop from Summit: - - - > - -> - -> - -> - -> Alcohol, but have no illusions that I will ever attend the summit and not be drinking with friends and peers. ? -> - -> - -> - -> - - - - - - - - - - - - I get it. I drink myself; I've had others tell me they don't mind being around people who are drinking (in moderation), and others tell me they won't be in an event where alcohol is served. All perfectly fine perspectives. Our goal is to try and make Summit *inclusive, *which means not making anyone feel like they *have* to be left out. Many, many people enjoy an alcoholic beverage during social events, and we'd like to accommodate them. We'd like to do that in a way that doesn't make non-drinkers feel they aren't welcome. Going forward, we're going to make sure that soft drinks are always complimentary when possible, or when we're paying on consumption that non-drinking attendees get the same number of complimentary beverages as those who are drinking (that's always been our intent, but it didn't get correctly implemented this year). We're absolutely looking to build events that do not *focus* on alcohol as a centerpiece; we want our attendees to be that centerpiece. But we also don't want to go further down the path of dividing our community when we're supposed to be helping bring it together; separate "drinking" and "non drinking" events just feels like we're building walls, not bridges. I'm deeply open to suggestions; drop a line to me (donj@ is my email alias, and if you're here, you can likely figure out the domain name) if you've any ideas. One thing to bear in mind is that, one reason we offer *complimentary *beverages (which should include non-alcoholic) is to help level the playing field for folks who may be on a tight budget, so that they can participate as fully as they want. - Recognize, too, that there's literally no possible way to have a "quiet dinner out with everyone" when "everyone" is 400 people , which we did have folks suggest. We do try to leave Tuesday and Thursday for folks to form their own smaller, quieter groups and head out together. - Anyway - that's just some of our early take-aways, and some of what we're planning for next year. We're *always* open to suggestions. Seriously. Anything polite and constructive is welcome, and you can email me directly (I've referenced my address twice in the above), if you like, or comment right here. diff --git a/content/articles/2018-05-19-100887-2.md b/content/articles/2018-05-19-100887-2.md deleted file mode 100644 index 802ae3723..000000000 --- a/content/articles/2018-05-19-100887-2.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Executing LINQ Queries in PowerShell – Part 1 -authors: - - Eli Hess -date: "2018-05-19T16:10:35+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -aliases: - - /2018/05/100887-2/ ---- - -Greetings PowerShellers! -Lately, I've been itching to write something up on Microsoft’s Language-Integrated Query (LINQ). You've likely encountered it if you've done any development in C#. LINQ is an incredibly powerful querying tool for performing look-ups, joins, ordering, and other common tasks on large data sets. We have a few similar cmdlets built into PowerShell, but other than the '.Where()' method on collection objects nothing that comes close to the speed at which LINQ operates. -To dig into this topic, we're going to have to do a quick high level overview of a couple of other .NET staples often encountered in the C# world. You see, unlike most .NET methods which accept object types like integers, strings, and the like, LINQ uses static extension methods which only accept delegate object types. -What are delegates? In application development, there is an occasional need for objects within memory to communicate with each other for things such as "button click events." To address this, the Windows API uses function pointers to create callback functions which then report back to other functions in your applications. Within the .Net Framework, these are called delegates. -Delegates are objects that point to another method, or possibly many methods, by storing three key pieces of information: the address of the method on which it makes calls, the parameters (if any) of this method, and the return type (if any) of this method. With this information, a delegate object is able to invoke these methods dynamically at runtime, either synchronously or asynchronously. With this information, a delegate object is able to invoke these methods dynamically at runtime, either synchronously or asynchronously. -A simple example of this in C# looks like this: - - -`using System; -namespace SimpleDelegate -{ - //Delegate declaration - public delegate void PrintMessage(string msg); - // Create a class with the method to bind to the delegate - public class MessagePrinter - { - public static void PrintLine(string msg) - { - Console.WriteLine(msg); - } - } - class Program - { - static void Main(string[] args) - { - // Create a PrintMessage delegate object that - // "points to" MessagePrinter.PrintLine(). - PrintMessage p = new PrintMessage(MessagePrinter.PrintLine); - p("Hi Animatronio!"); - Console.ReadLine(); - } - } -} -`Clearly, in this example the use of delegates is not necessary. I'm just trying to frame up how they would be declared and subsequently called. To simplify all of the above, Microsoft has created two generic delegate definitions. For delegates with no output, we can use Action<> and for delegates with output, we can use Func<>. These two beauties are what give us PowerShellers access to LINQ. Today we're going to use Func<> because we want output. The syntax for doing so looks like this: - - -`[Func[int,int]]$Delegate = { param($i); return $i + 1 } -`Let's break this down left to right: - - 1. Declare Func<> - 2. Tell it the type of parameter(s) to expect. In this case we're passing a single integer parameter. - 3. Tell it the type of output to produce, again an integer will be returned. - 4. Name the delegate variable. - 5. Define the delegate with a scriptblock. We're just doing a very simple addition step on the parameter and returning the output. - -And now we've finally arrived at the meat of this article. Let's initialize a mock dataset with ~2 million objects to play with: - - -`$Dataset = @() -0..1000 | Foreach-Object { $Dataset += (Get-Verb)[(Get-Random -Maximum 98)] } -0..10 | ForEach-Object {$Dataset += $Dataset} -`Next we'll measure how long it takes to filter down to only the objects which equal "Get" using Where-Object on three different Windows Server OS's running on the same Azure compute instances: - - -`Measure-Command { ($Dataset | Where-Object Verb -eq "Use") } -# 2008 R2: TotalSeconds : 23.3399981 -# 2012 R2: TotalSeconds : 61.7634027 -# 2016 : TotalSeconds : 18.0190367 -`Now let's do the same query using LINQ: - - -`[Func[object,bool]] $Delegate = { param($v); return $v.verb -eq "Use" } -Measure-Command { [Linq.Enumerable]::Where($Dataset,$Delegate) } -# 2008 R2: TotalSeconds : 11.3967464 -# 2012 R2: TotalSeconds : 25.6511816 -# 2016 : TotalSeconds : 12.8999417 -`As you can see, in the older operating systems, LINQ is over twice as fast (also, what's the deal with 2012 R2??). In 2016, it's only about 50% faster. But of course, calling '.Where()' directly on the object is still by far the fastest way to filter on a dataset: - - -`Measure-Command { $Dataset.Where( {$_.Verb -eq "Use"}) } -# 2008 R2: TotalSeconds : 5.5102392 -# 2012 R2: TotalSeconds : 17.5893828 -# 2016 : TotalSeconds : 6.1834444 -`Initially I had suspected it was translating the scriptblock as an anonymous function and tapping into the LINQ extension method behind the scenes, but Bruce Payette set me straight. According to Bruce, It's using a very low level API to invoke the scriptblock. [Source code is here][1]. -So if '.Where()' is so much faster, why did I bother writing this? I wanted to open with a familiar concept. The true power in LINQ comes from its SQL-like ability to aggregate and manipulate data. In the next blog, we'll take a look at grouping data, using joins, and why that's awesome. -Until then, happy tinkering! --Eli - - [1]: https://github.com/PowerShell/PowerShell/blob/master/src/System.Management.Automation/engine/runtime/Operations/MiscOps.cs#L2425 diff --git a/content/articles/2018-05-28-executing-linq-queries-in-powershell-part-2.md b/content/articles/2018-05-28-executing-linq-queries-in-powershell-part-2.md deleted file mode 100644 index d9131aa76..000000000 --- a/content/articles/2018-05-28-executing-linq-queries-in-powershell-part-2.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Executing LINQ Queries in PowerShell – Part 2 -authors: - - Eli Hess -date: "2018-05-28T12:31:00+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks - - Tools -aliases: - - /2018/05/executing-linq-queries-in-powershell-part-2/ ---- - -And we're back! -Ok, so in the last blog we began a conversation about delegates and using LINQ in PowerShell. In today's post, I'm going to give an example of how it can be incredibly useful. Let's talk about Joins. - -## Joins - -In my line of work, I'm constantly running into the need to combine datasets from multiple sources that relate to each other and pull out some specific properties. Say you have two internal services, one which is used to track production status and another which is used to monitor whether machines are online. To demonstrate this, let's initialize some mock data once again. - - -`#Create empty arrays -$DatasetA = @() -$DatasetB = @() -#Initialize "status" arrays to pull random values from -$ProductionStatusArray = @('In Production','Retired') -$PowerStatusArray = @('Online','Offline') -#Loop 1000 times to populate our separate datasets -1..1000 | Foreach-Object { - #Create one object with the current iteration attached to the name property - #and a random power status - $PropA = @{ - Name = "Server$_" - PowerStatus = $PowerStatusArray[(Get-Random -Minimum 0 -Maximum 2)] - } - $DatasetA += New-Object -Type PSObject -Property $PropA - #Create a second object with the same name and a random production status - $PropB = @{ - Name = "Server$_" - ProductionStatus = $ProductionStatusArray[(Get-Random -Minimum 0 -Maximum 2)] - } - $DatasetB += New-Object -Type PSObject -Property $PropB -} -`Now we have two datasets with the same server names, one showing production status and the other showing power status. Our goal is to join that data together. In traditional PowerShell, we would likely iterate through one of the sets while doing a filter on the second set and then either add property members to the first set or create all new objects with a combination of properties from both sets. Something like this: - - -`$JoinedData = @() -foreach($ServerA in $DatasetA) { - $ServerB = $DatasetB | Where-Object Name -eq $ServerA.Name - $Props = @{ - Name = $ServerA.Name - PowerStatus = $ServerA.PowerStatus - ProductionStatus = $ServerB.ProductionStatus - } - $JoinedData += New-Object -Type PSObject -Property $Props -} -`This works fine. If I wrap it in a Measure-Command it takes right around 8.82 seconds to complete. Not awful, but at enterprise level where you're dealing with ten times that amount of data, you can see how that run time could get out of control. Now let's do the same with LINQ: - - -`$LinqJoinedData = [System.Linq.Enumerable]::Join( - $DatasetA, - $DatasetB, - [System.Func[Object,string]] {param ($x);$x.Name}, - [System.Func[Object,string]]{param ($y);$y.Name}, - [System.Func[Object,Object,Object]]{ - param ($x,$y); - New-Object -TypeName PSObject -Property @{ - Name = $x.Name; - PowerStatus = $x.PowerStatus; - ProductionStatus = $y.ProductionStatus} - } -) -$OutputArray = [System.Linq.Enumerable]::ToArray($LinqJoinedData) -`This completed for me in just over 0.4 seconds! Hopefully after last week this syntax doesn't look too daunting, but let's walk through what we just did. We're calling the [Join method][1] on [System.Linq.Enumerable][2] and then passing it five parameters. - - 1. The first dataset we're going to join - 2. The second dataset to join - 3. The delegate which defines the key to compare against on the first dataset - 4. The delegate which defines the key to compare against on the second dataset - 5. Finally, we pass in the delegate which defines what the output should look like - -So it looks complicated, but once you use it a few times, it's really not too bad. Now you're probably wondering why I added that final line where I called "[System.Linq.Enumerable]::ToArray($LinqJoinedData)." For that we need to talk about "Deferred Execution vs. Immediate Execution." When you call the Join method, it's not actually joining the data at that time, rather it's building an expression tree which defines the relational algebra needed to perform the join. This defers the execution point to when the data is actually operated against. So in the above example, I called "ToArray()" merely to provide an accurate timespan for how long the join actually takes as opposed to the more traditional PowerShell approach we used before it. If this were production code and I wanted to see  machines with an offline status that are listed as in production, rather than that "ToArray()" line I could simply run this: - - -`$LinqJoinedData.Where({($_.PowerStatus -eq "Offline") -and ($_.ProductionStatus -eq "In Production")}) -`The Join query would execute at that time and then "Where()" would filter down to just the objects I requested. -And there you have it! If you found this interesting, I encourage you to check out these modules: - - * [ili101's PowerShell Module on the gallery, "Join-Object."][3] - * [SeeminglyScience's Module, 'PSLambda' which is doing really fun things with delegates and threading][4] - -Feel free to reach out to me on [Twitter][5] or check out my [personal site][6] from time to time for other content. If you've seen [my recent talk at PowerShell Summit][7], I'll be posting the blog I referenced there soon about turning my dog into a tea kettle.  (it's not PowerShell related, thus it will be landing somewhere other than here) -Happy tinkering! --Eli - - [1]: https://msdn.microsoft.com/en-us/library/bb534675(v=vs.110).aspx - [2]: https://msdn.microsoft.com/en-us/library/system.linq.enumerable_methods(v=vs.110).aspx - [3]: https://github.com/ili101/Join-Object - [4]: https://github.com/SeeminglyScience/PSLambda - [5]: https://twitter.com/eshess - [6]: http://elihess.com - [7]: https://www.youtube.com/watch?v=QLalnXXwQeI diff --git a/content/articles/2018-06-03-we-need-your-help.md b/content/articles/2018-06-03-we-need-your-help.md deleted file mode 100644 index 9fa9840fa..000000000 --- a/content/articles/2018-06-03-we-need-your-help.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: We Need Your Help. -authors: - - Don Jones -date: "2018-06-03T19:23:52+00:00" -categories: - - PowerShell Summit - - Training -aliases: - - /2018/06/we-need-your-help/ ---- - -We need your help. - - -As you may have heard, we’re launching a new “OnRamp” track at PowerShell + DevOps Global Summit 2019. Limited to 40 students, this will be a hands-on class designed to bootstrap someone into the technology and our community. - [There's a whole brochure about it!](https://indd.adobe.com/view/7c87735a-8914-4536-b668-857242085785) - -We’re also offering a number of free-ride scholarships designed to cover admission, air, and hotel, to help increase the diversity of our field and community right at the top of the funnel. Half of our scholarships will be awarded to individuals from groups that are traditionally underrepresented in IT, and that’s where we need your help. - - -We need to get the word out to potential applicants so that they know to apply! - - - -You can help by directing people to our [Scholarship Page][1] or to the brochure URL. Who should you send? - - * The computer science teachers at your local high school, technical college, and community college. - * Your local library’s educational outreach team. - * IT interns in your own company. - * Anyone in touch with individuals just coming out of high school or a technical program! - -Yes, it’ll mean some legwork to find them and call or otherwise contact them - but we’re a team of less than eight unpaid volunteers, so we can’t do it all ourselves. - - -You can also reach out to local television news teams and ask them for help - many already run community outreach programs and can help spread the word. - - -Also tell your peers and colleagues via social media, word of mouth, whatever works. Get them to help, too, so that we can reach as many local communities as possible with this offer. - - -We appreciate your efforts - we’re trying to do as much as we can to strengthen and diversify our community, but it can’t happen without your active involvement. - - -Thank you. - - - - [1]: https://powershell.org/summit/summit-onramp/onramp-scholarship/ diff --git a/content/articles/2018-06-21-how-powershell-devops-global-summit-began.md b/content/articles/2018-06-21-how-powershell-devops-global-summit-began.md deleted file mode 100644 index bdaf02127..000000000 --- a/content/articles/2018-06-21-how-powershell-devops-global-summit-began.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: How PowerShell + DevOps Global Summit Began -authors: - - Don Jones -date: "2018-06-21T23:37:07+00:00" -categories: - - PowerShell for Admins -aliases: - - /2018/06/how-powershell-devops-global-summit-began/ ---- - -Back in... gosh, 2009, 2010 or so, an Arizona company named NetPro hosted PowerShell Deep Dive, part of their The Experts Conference event (the first was held in Las Vegas for just 50 people). After hosting two years (I think) though, NetPro was purchased by Quest Software, which moved to close down TEC. I may have those years slightly off, but that's the general sequence. -In 2012, myself, Jeff Hicks, Richard Siddaway, Jason Helmick, and Kirk Munro had formed PowerShell.org, attempting to make good on the basically-defunct PowerShellCommunity.org that I'd started and that Quest now basically owned (and was shutting down). -In August 2012 Jason and I were out in Redmond for a TechMentor conference, and... -[![](https://powershell.org/wp-content/uploads/2018/06/IMG_0465-225x300.jpg)](https://powershell.org/wp-content/uploads/2018/06/IMG_0465.jpg) -Erin Chapple and Kenneth Hansen, who were running the PowerShell team at the time, asked us over to building 43 for lunch one day. They told us that community engagement was huge for them--they needed to know how people were using their product, and what they needed to focus on. They got plenty of engagement at TechEd events, they said, but it was largely beginners; they needed the Deep Dive, or something like it, to stay in touch with hardcore users. -In April 2013, the first PowerShell Summit was held. -"We can't give you any money, though," Kenneth said. And for good reason: they wanted an event that could sustain itself, so that when Microsoft inevitably reorganized and got distracted, the event wouldn't die. To help, they volunteered to get us space on-campus, so our first event was in conference rooms, and they helped guarantee the food deposits. That helped give us a tiny financial pad and some experience, so in 2014 when we moved to Meydenbauer Center, we weren't a brand-new event with an inexperienced team. -Today, Summit is formally owned by a 501(c)(3) nonprofit, and venue and food deposits no longer have to go on my personal Amex ;). We've built enough operating margin that Summit can pay its own deposits until registrations start rolling in, and the event is essentially self-sustaining--we don't even rely on corporate sponsors, although we're very happy to have them when we can. We've held six events in the US, and two in Europe, which led to the launch of PSConf.eu a few years back. -Jason ran across this page in his journal last night and sent the photo, and with his permission I thought it would be a fun piece of community history to share. diff --git a/content/articles/2018-06-22-looking-for-a-powershell-org-contributor.md b/content/articles/2018-06-22-looking-for-a-powershell-org-contributor.md deleted file mode 100644 index 8c507ae19..000000000 --- a/content/articles/2018-06-22-looking-for-a-powershell-org-contributor.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Looking for a PowerShell.org Contributor -authors: - - Don Jones -date: "2018-06-22T15:24:43+00:00" -categories: - - Announcements - - News -aliases: - - /2018/06/looking-for-a-powershell-org-contributor/ ---- - -We're looking for someone who can publish a regular "What You Missed This Week" blog post on PowerShell.org each Friday (excepting the odd week off for vacations, of course). -This is meant just as a roundup of interesting posts from around the web; we know tons of people are blogging in their own spaces, and we'd like to call attention to some of the more noteworthy ones. -This isn't any more complex than a brief blurb for each: - -> Don Jones shares the beginnings of PowerShell Summit: [How PowerShell + DevOps Global Summit Began][1] -> PowerShell.org's OnRamp Scholarship needs your help spreading the word: [We Need Your Help.][2] - -There's no minimum or maximum each week, although I personally suspect more than a couple of dozen posts will overwhelm people. The idea is to curate what's out there, introduce folks who are getting their blogs going (and encourage them to keep going), and give the community some variety in its PowerShell diet. -If you're interested, drop a line to webmaster@powershell.org to get hooked up with blogging rights here. As you do so, indicate if you're up for every week (preferred) or every-other (in which case we'll try and find two of you and get you to split even- and odd-numbered weeks). You can also volunteer to be an "aggregator," feeding noteworthy articles to our main round-up-person each week to help _them_ out. -If you've been longing to contribute but haven't thought of a way, this could be a high-impact, low-workload way to jump in and help out! - - [1]: https://powershell.org/2018/06/21/how-powershell-devops-global-summit-began/ - [2]: https://powershell.org/2018/06/03/we-need-your-help/ diff --git a/content/articles/2018-06-27-onramp-scholarship-open-to-non-us-applicants.md b/content/articles/2018-06-27-onramp-scholarship-open-to-non-us-applicants.md deleted file mode 100644 index 20d562c08..000000000 --- a/content/articles/2018-06-27-onramp-scholarship-open-to-non-us-applicants.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: OnRamp Scholarship open to non-US Applicants -authors: - - Don Jones -date: "2018-06-27T19:41:02+00:00" -categories: - - PowerShell for Admins -aliases: - - /2018/06/onramp-scholarship-open-to-non-us-applicants/ ---- - -I have managed to clear the regulatory hurdles and our [OnRamp Scholarship][1] is now open to applicants from outside the US. We will update the application materials and web pages as soon as possible, but there’s no need to wait to submit an application. -There are two caveats: -first, the option to request a laptop as part of your application is not applicable to international applicants at this time. -Second, our airfare limit is $600 USD. We cannot directly book airfare costing more. Unfortunately, we also cannot provide a partial cash reimbursement at this time. That means your air must be under $600 total (which I realize is difficult), or you need to be responsible for the entire airfare yourself. This is a bit of accounting oddness that we should be able to address in the future. -Full information and applications are at the link above. - - [1]: https://powershell.org/summit/summit-onramp/onramp-scholarship/ diff --git a/content/articles/2018-07-04-the-re-launch-of-the-powershell-org-free-ebooks-now-in-spanish-too.md b/content/articles/2018-07-04-the-re-launch-of-the-powershell-org-free-ebooks-now-in-spanish-too.md deleted file mode 100644 index be5b0938f..000000000 --- a/content/articles/2018-07-04-the-re-launch-of-the-powershell-org-free-ebooks-now-in-spanish-too.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: The Re-Launch of the PowerShell.org Free eBooks (now in Spanish, too!) -authors: - - Don Jones -date: "2018-07-04T18:31:49+00:00" -categories: - - Books -legacy_featured_image: /wp-content/uploads/2018/07/Screen-Shot-2018-08-07-at-11.02.02-AM.png -aliases: - - /2018/07/the-re-launch-of-the-powershell-org-free-ebooks-now-in-spanish-too/ ---- - -We're pleased to announce the re-launch of our [Free eBook Store][1], now hosted exclusively on Leanpub. This re-launch includes 7 titles translated into Spanish by community contributor Alvaro Torres. -All eBooks are free, although you can also choose to pay any amount of $5 or more, which becomes a donation to The DevOps Collective, Inc. Leanpub offers a web-based reader and, if you "buy" the book, options to download in EPUB, MOBI, and PDF formats. -We used to dual-publish on Leanpub and GitBook; GitBook no longer supports ebook downloading (they're online-only, now) and Leanpub now offers a free online reader mode, so we're moving exclusively to Leanpub. Leanpub does offer a smartphone app as well, which you can use to manage your entire Leanpub library. -Don't forget that all of the books' "source" is [hosted at GitHub][2] in public open-source repositories. You're welcome to fork the repos, submit pull requests, and so on. Note that we don't provide technical support for the books at GitHub; please use the [Forums][3] for that. Further, while everyone appreciates suggestions for improving the books, what we _really_ appreciate are community members who can fork the repo, implement their suggestions, and submit a pull request! -Please help us spread the word so more people can use these great, entirely-free resources! - - [1]: https://leanpub.com/u/devopscollective - [2]: https://github.com/devops-collective-inc - [3]: https://powershell.org/forums diff --git a/content/articles/2018-07-11-help-us-improve-our-ebooks-your-chance-to-contribute.md b/content/articles/2018-07-11-help-us-improve-our-ebooks-your-chance-to-contribute.md deleted file mode 100644 index 49986ea94..000000000 --- a/content/articles/2018-07-11-help-us-improve-our-ebooks-your-chance-to-contribute.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Help Us Improve our Ebooks – Your Chance to Contribute! -authors: - - Don Jones -date: "2018-07-11T14:33:56+00:00" -categories: - - PowerShell for Admins -aliases: - - /2018/07/help-us-improve-our-ebooks-your-chance-to-contribute/ ---- - -We recently re-launched all of our free ebooks at . These books have all been authored by a variety of people, myself included, and most were originally authors in Word. As we translated them into Markdown (which is what Leanpub uses for its source), a few snafus tend to come up here and there. - - - -Note that these books create no profit for anyone: all authors donated them to The DevOps Collective. When someone chooses to pay for an ebook during checkout (they're priced at $0.00, but you can pay anything you like), those funds go to help The DevOps Collective's programs, including our operational costs, OnRamp Scholarship, and more. So the books are entirely a volunteer effort, owned and maintained by the community at large. -For example, in the table of contents for [https://leanpub.com/thebigbookofpowershellgotchas/read,][1] you'll see a lot of "I"™" type nonsense, which typically comes from Word's "smart quotes" feature when those get translated into plain ASCII. You'll also find the odd formatting issue, like backslashes at the end of code lines, which are meant to represent line breaks, or missing backslashes in paths, because backslashes need to be doubled in order to prevent them from being seen as an escape character. -Anyway - they're all minor snafus, but it's difficult for me to carve off time to go through all the books and fix every little one. -Which is where you can help! -These books are all open source, and hosted at . Anyone can use GitHub to clone the book repo, make whatever changes they want, commit those changes to their local repo, and then submit a pull request back to the main online repo. I review those PRs weekly. -So this is a _great_ chance for you to contribute to the community. If these ebooks have ever helped you, then you can "give back" a bit by helping us fine-tune them. -And here's a tip: if you make a change, please also clone the Spanish version of the ebook and make the same change. That way we can keep the Spanish versions updated as well. Thanks again to community contributor Alvaro Tatis Torres for creating those Spanish versions entirely on his own time! -You're also welcome to make more substantive contributions. For example, _Secrets of PowerShell Remoting_ could use a chapter on setting up Remoting-over-SSH for both Windows and Linux/macOS. Once more folks start contributing, I'll be updating the credits on the book to reflect the broader, community-based authorship of each. -Please help spread the word - even if you can't carve off the time to help, maybe someone you know could proofread a chapter or two. Scanning the online reader or the PDF version will reveal most of the oddities, and you can then dive into the source on GitHub to make corrections. -THANK YOU! - - [1]: https://leanpub.com/thebigbookofpowershellgotchas/read diff --git a/content/articles/2018-07-13-what-you-missed-this-week-in-powershell.md b/content/articles/2018-07-13-what-you-missed-this-week-in-powershell.md deleted file mode 100644 index 72ccd8b48..000000000 --- a/content/articles/2018-07-13-what-you-missed-this-week-in-powershell.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: What You Missed This Week in PowerShell! -authors: - - Will Anderson -date: "2018-07-13T15:00:19+00:00" -categories: - - PowerShell for Admins -aliases: - - /2018/07/what-you-missed-this-week-in-powershell/ ---- - -_This week we're starting a new series of blog posts called (obviously) 'What You Missed This Week in PowerShell!'.  Our team of volunteers is scouring the web to find interesting articles, and forum posts related to our favourite topic!  In the meantime, I want to give a 'thank you' to everyone that pulled together to make this possible.  Many thanks to Greg Tate, Evgeny Fedorov, Patrick Singletary, Brett Bunker, Mark Roloff, and Robin Dadswell for your hard work on getting this started!_ -_-Will_ - -## Blogs - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#cross-platform-powershell-unit-testing-and-automatic-variables)[*Cross-Platform PowerShell, Unit Testing and Automatic Variables*](https://andrewpearce.io/powershell/2018/07/10/cross-platform-pester-gotcha/) - -by Andrew Pearce on July 10th, 2018 -Windows PowerShell and PowerShell Core are two different products. When using continuous integration tooling to write unit tests you will likely encounter an issue when testing for platform-specific logic paths. Understand a limitation with the $PSEdition automatic variable and how to work around this limitation so that you can achieve bliss when writing unit tests for modules that support both Windows PowerShell and PowerShell Core. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#generating-random-data-with-nameit)[*Generating Random Data with NameIT*](https://kevinmarquette.github.io/2018-07-09-Powershell-NameIt-generate-random-data/?utm_source=rss&utm_medium=blog&utm_content=rss) - -by Kevin Marquette on July 10th, 2018 -Generate random data for testing and presentations with the NameIT PowerShell module. Scenarios include generating random user names, random computer names, and even random objects with - gasp - random property values! This module was written by Doug Finke and is available in the PowerShell Gallery. Refer to Kevin's article for a number of useful scenarios. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#returning-rich-objects-from-functions-part-2)[*Returning Rich Objects From Functions (Part 2)*](http://community.idera.com/powershell/powertips/b/tips/posts/returning-rich-objects-from-functions-part-2) - -by Idera on July 9th -Control the output of objects so that preferred properties, i.e. first-class citizens, appear at the top of a property list. This is must read for those of you who live in the camp of using PSCustomObject! - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#announcing-the-powershell-conference-book)[*Announcing the PowerShell Conference Book*](https://mikefrobbins.com/2018/07/06/announcing-the-powershell-conference-book/) - -by Mike Robbins on July 6th, 2018 -Now available on LeanPub, the "PowerShell Conference Book" presents a series of advanced PowerShell topics where each chapter embodies a session at a PowerShell conference. Targets intermediate and advanced PowerShell users. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#the-scriptstoprocess-and-requiredmodules-order)[*The ScriptsToProcess and RequiredModules Order*](https://tommymaynard.com/the-scriptstoprocess-and-requiredmodules-order-2018/) - -by Tommy Maynard on July 2nd, 2018 -Control the order of sections in the module manifest file. By default the "RequiredModules" section runs before the "ScriptsToProcess" section, and this may not be ideal. By switching this order you gain the ability to properly set up your environment prior to validating module dependencies. - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#forum-topics)Forum Topics - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#powershellorg-challenge---unanswered-post)PowerShell.org Challenge - Unanswered Post - -[*Testing for SRV records - need help pulling data out of a hashtable*](https://powershell.org/forums/topic/testing-for-srv-records-need-help-pulling-data-out-of-hashtable/) by Mike Kanakos -Mike needs your help! Please visit the forums and respond to his question on hash table usage. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#powershellorg---most-popular-post)PowerShell.org - Most Popular Post - -[*"Securing PowerShell On Your Domain"*](https://powershell.org/forums/topic/securing-powershell-on-your-domain/) by Allan Williams -For you folks in the security space, a reply on this post contains numerous useful links related to Windows PowerShell and security. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#reddit---most-popular-post)Reddit - Most Popular Post - -[*"PowerShell Koans"*](https://www.reddit.com/r/PowerShell/comments/8xyfx2/powershell_koans/) by u/Ta11ow on July 12th, 2018 -Check out a simple, fun, and interactive way to learn the PowerShell language through Pester unit testing. - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#media)Media - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#devops-enterprise-summit---digitial-transformation---thriving-through-the-transition)[*DevOps Enterprise Summit - Digitial Transformation - Thriving Through the Transition*](https://www.youtube.com/watch?v=nKyF8fzed0w) - -by Jeffrey Snover on July 3rd, 2018 -Catch Jeff's session on how digitial transformation provides an opportunity to supercharge your career! diff --git a/content/articles/2018-07-20-what-you-missed-this-week-in-powershell-2.md b/content/articles/2018-07-20-what-you-missed-this-week-in-powershell-2.md deleted file mode 100644 index ed7ba67eb..000000000 --- a/content/articles/2018-07-20-what-you-missed-this-week-in-powershell-2.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: What You Missed This Week in PowerShell! -authors: - - Will Anderson -date: "2018-07-20T15:00:41+00:00" -categories: - - PowerShell for Admins -aliases: - - /2018/07/what-you-missed-this-week-in-powershell-2/ ---- - -## Blogs - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#keeping-powershell-modules-up-to-date)[*Keeping PowerShell Modules Up To Date*](https://tfl09.blogspot.com/2018/07/keeping-powershell-modules-up-to-date.html) - -by Thomas Lee on Saturday July 14th, 2018 -Learn a simple technique for checking which of your modules from the PowerShell Gallery have an update. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#when-tls-12-breaks-invoke-webrequest)[*When TLS 1.2 Breaks Invoke-WebRequest*](https://poshsea.blogspot.com/2018/07/when-tls-12-break-invoke-webrequest.html) - -by Lawrence Hwang on July 15th, 2018 -In Windows PowerShell, there's a limitation with Invoke-WebRequest and sites that only use TLS 1.2. This article covers a workaround for this problem. This issue is not present with Invoke-WebRequest in PowerShell Core. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#start-job-like-a-boss)[*Start-Job Like a Boss*](https://mkellerman.github.io/Start-Job_like_a_boss/) - -by Marc Kellerman on July 16th, 2018 -Load your user session functions and invoke them as jobs on remote systems using throttling and timeout controls. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#parse-html-and-pass-to-cognitive-services-text-to-speech)[*Parse HTML and Pass to Cognitive Services Text-to-Speech*](https://blogs.technet.microsoft.com/heyscriptingguy/2018/07/16/parse-html-and-pass-to-cognitive-services-text-to-speech/) - -by Sean Kearney, Premier Field Engineer, Microsoft on July 16th -Use Text-to-Speech in Azure to read a web page outloud in Windows 10. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#powershell-by-mistake)[*PowerShell By Mistake*](https://leanpub.com/powershell-by-mistake) - -by Don Jones on July 18th, 2018 -Don started a new book on Leanpub which helps you learn PowerShell by reviewing "broken code" and discovering the answers. - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#forum-topics)Forum Topics - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#powershellorg-challenge---unanswered-post)PowerShell.org Challenge - Unanswered Post - -[*Configuration Manager New CMProgram*](https://powershell.org/forums/topic/configuration-manager-new-cmprogram/) -Amir Atary needs guidance with usage on a ConfigMgr cmdlet. Please assist if you can help. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#powershellorg---most-popular-post)PowerShell.org - Most Popular Post - -[*"Find Commands with Parameter Names"*](https://powershell.org/forums/topic/find-commands-with-parameter-names/) -The response by postanote contains a useful list of commands for newcomers. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#reddit---most-popular-post)Reddit - Most Popular Post - -[*"CaptureIT: A PowerShell Module to generate GIFs of the actively selected window or your entire desktop screen*](https://www.reddit.com/r/PowerShell/comments/8z6t3h/captureit_a_powershell_module_to_generate_gifs_of/) by u/_Unas on July 16th, 2018 -Create gifs of an active window or your desktop with one easy command. - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#media)Media - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#sliding-windows-audiocast---automation-with-jeffrey-snover)[*Sliding Windows Audiocast - "Automation with Jeffrey Snover"*](https://www.slidingwindows.de/slw10/) - -by Thorsten Butz on July 11th, 2018 -Take 45 minutes and listen to this excellent podcast with Jeffrey Snover. Recorded during the PowerShell Conference Europe in April, Jeffrey provides insight to a number of thoughtful questions that cover a wide range of topics, including the history of PowerShell, how certain decisions came to be, some regrets, and the future of PowerShell. diff --git a/content/articles/2018-07-27-what-you-missed-this-week-in-powershell-3.md b/content/articles/2018-07-27-what-you-missed-this-week-in-powershell-3.md deleted file mode 100644 index 3528d8c9f..000000000 --- a/content/articles/2018-07-27-what-you-missed-this-week-in-powershell-3.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: What You Missed This Week in PowerShell! -authors: - - Greg Tate -date: "2018-07-27T15:00:19+00:00" -categories: - - PowerShell for Admins -legacy_featured_image: /wp-content/uploads/2018/08/featured-calendar.png -aliases: - - /2018/07/what-you-missed-this-week-in-powershell-3/ ---- - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#blogs)Blogs - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#powershell-core-now-available-as-a-snap-package)[*PowerShell Core Now Available as a Snap Package*](https://blogs.msdn.microsoft.com/powershell/2018/07/20/powershell-core-now-available-as-a-snap-package/) - -by The PowerShell Team on July 20th -Oh, Snap! Core's support matrix on Linux grows broader with the inclusion of a Snap Package to the line-up. Check out the PS team's blog for details on what this means and how you can try it out. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#powershell-modules-in-azure-functions)[*PowerShell Modules in Azure Functions*](https://agazoth.github.io/blogpost/2018/07/22/Powershell-Modules-in-Azure-Fuctions.html) - -by Axel Bøg Andersen on July 22nd -Hit a snag taking your modules to Azure Functions? Eliminate the hassle of using extra tools and learn how to load your modules directly to Azure Functions. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#using-pester-for-infrastructure-testing)[*Using Pester for Infrastructure Testing*](http://powershellpr0mpt.com/2018/07/24/using-pester-for-infrastructure-testing/) - -by Robert Prüst on July 24th. -If you're looking for interesting use-cases for Pester, this one's for you. Robert gives us a look at using the mocking and testing framework to suss out performance issues in his environment. Hint: It's not DNS. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#powershell-threadjobs)[*PowerShell ThreadJobs*](https://richardspowershellblog.wordpress.com/2018/07/24/powershell-threadjobs/) - -by Richard Siddaway on July 24th -There's a new cmdlet in PowerShell Core v6.1 preview 4 that allows you to run jobs on separate threads. This allows you to run more jobs simulatenously as ThreadJobs are lighter in resource consumption than standard jobs. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#displaying-toast-notifications-for-a-different-user-when-powershell-module-updates-are-available)[*Displaying Toast Notifications for a Different User When PowerShell Module Updates are Available*](https://mikefrobbins.com/2018/07/26/displaying-toast-notifications-for-a-different-user-when-powershell-module-updates-are-available/) - -by Mike Robbins on July 26tth -Learn about a number of useful techniques in this article. Use the BuntToast module to display toast notifications in Windows. Use the BetterCredentials module to read credentials from CredentialManager (rather than prompting or reading from a password file). And use the Find-MrModuleUpdate function from MrToolkit module to determine if any updates are availble for your PowerShell modules. - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#forums)Forums - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#powershellorg-challenge---unanswered-post)PowerShell.org Challenge - Unanswered Post - -[*How to Change Retention Period of Each Policy in Azure Recovery Services Vault*](https://powershell.org/forums/topic/azurehow-to-change-retention-period-of-each-policy-in-recoverservices-vault/) by Avinash on July 22nd -Avinash's question has been out there for a week and he hasn't gotten any help yet. He's on the right track but needs a little guidance. Please jump in if you can help! - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#reddit-rpowershell---most-popular-post)Reddit /r/PowerShell - Most Popular Post - -[*"Widnows Admin Center (formerly Project Honolulu) Functions on Github"*](https://www.reddit.com/r/PowerShell/comments/92416c/windows_admin_center_formerly_project_honolulu/) by ufourierswager on July 26th -This author grabbed all the functions from Windows Admin Center and posted them on GitHub for the rest of the community to use. Fork your own copy and get your hands on a nice set of useful functions! - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#media)Media - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#twitter)Twitter - -[*The Ultimate PowerShell Cheat Sheet*](https://twitter.com/SadProcessor/status/1022080105345114112) by @SadProcessor on July 25th -If only every cheat sheet were this simple! - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#youtube)Youtube - -[*PowerShell Core Community Call*](https://www.youtube.com/watch?v=0eu--5muiLI) by The PowerShell Team on July 19th -Topics include discussion on two preview releases, the compatibility for the Active Directory module in RSAT with PowerShell Core, and the release cadence of PowerShell Core. [Link to call notes][1] - - [1]: https://github.com/PowerShell/PowerShell-RFC/blob/master/CommunityCall/20180719_Notes.md diff --git a/content/articles/2018-07-31-powerhour-community-lightning-demos.md b/content/articles/2018-07-31-powerhour-community-lightning-demos.md deleted file mode 100644 index 2134d66f4..000000000 --- a/content/articles/2018-07-31-powerhour-community-lightning-demos.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: "PowerHour: Community Lightning Demos!" -authors: - - pscookiemonster -date: "2018-07-31T15:58:12+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -aliases: - - /2018/07/powerhour-community-lightning-demos/ ---- - -One of my favorite events at the PowerShell + DevOps Global Summit is the community lightning demos. It's a fun format: -For the audience: - - * Fast paced (max 10 minutes) - * Many speakers - * Topic or speaker not what you're looking for? They'll change in a few minutes - * Demos offer enough material to give you ideas and point out where to learn more - * Content is more likely to have a high signal-to-noise ratio given the time constraints - -For the speakers: - - * No need to come up with a full length session and the content behind it - * It can be comforting knowing you have a bunch of peers joining you - * You can get enough info to the audience for them to get excited and want to learn more - * You get a platform to share something awesome with the PowerShell community - -So! This isn't about the summit. We're starting a new thing, _PowerHour: An Hour of Community Lightning Demos_. - -### PowerHour - -_PowerHour_ will be like a virtual PowerShell User Group, with a lightning demo format, and leeway for other topics not directly related to PowerShell. -This adds some more fun: - - * No need to stand on stage (yet!), with Jeffrey Snover sitting right in front of you - * Folks reviewing CFPs for the PowerShell + DevOps Global Summit will likely see these... You could give a condensed demo of a CFP topic, or just showcase something cool to give us an idea of how you prepare and present - * More time! We always run short on time at the summit; we'll hold these on a regular basis to give more folks a chance to show something fun! - * Everything is recorded - -So! Where can you go to find out more? - - * Proposals, FAQs, materials, links to demos, agendas, and more will be available at the [PSPowerHour GitHub repo](https://github.com/pspowerhour/pspowerhour) - * Demos and live stream at [PSPowerHour YouTube channel](https://www.youtube.com/channel/UCtHKcGei3EjxBNYQCFZ3WNQ) - -### When does it start? - -Our first session is scheduled for **Tuesday** **August 21st @ 6:00 PM EST**! - - * If you want to propose a demo, just [submit an issue](https://github.com/PSPowerHour/PSPowerHour/issues/new)! We'll work on timing for your demo from there - * We need more proposals, but [Doug Finke][1], [Chrissy LeMaire][2], and [Glenn Sarti][3] (if he can wake up early enough!) will join us for our first session - -We hope you'll join us - feel free to drop by the #powerhour channel in [powershell.slack.com][4]! - -PS: a huge thanks to [Michael Lombardi][5] for his help with the summit community lightning demos, and partnering up to make PowerHour a thing! - - [1]: https://twitter.com/dfinke - [2]: https://twitter.com/cl - [3]: https://twitter.com/GlennSarti - [4]: https://bit.ly/psslack - [5]: https://twitter.com/barbariankb diff --git a/content/articles/2018-08-01-powershell-devops-summit-2019-call-for-speakers.md b/content/articles/2018-08-01-powershell-devops-summit-2019-call-for-speakers.md deleted file mode 100644 index c59dee24b..000000000 --- a/content/articles/2018-08-01-powershell-devops-summit-2019-call-for-speakers.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: PowerShell + DevOps Summit 2019 – Call for Speakers -authors: - - Will Anderson -date: "2018-08-01T15:08:52+00:00" -categories: - - PowerShell for Admins -legacy_featured_image: /wp-content/uploads/2018/08/Screen-Shot-2018-08-07-at-11.04.13-AM.png -aliases: - - /2018/08/powershell-devops-summit-2019-call-for-speakers/ ---- - -The PowerShell and DevOps Global Summit 2019 will be returning to the Meydenbauer Center in Bellevue, WA from Monday, April 29 to Thursday, May 2, 2019. - Since 2013, PowerShell and DevOps experts from around the world , will once again collaborate and learn how to maximize PowerShell in the workplace through fast-paced, knowledge-packed presentations. The Global Summit is the place for innovators to explore and further their knowledge of DevOps principles and practices in a Windows environment, make new connections, learn new techniques, and offer something to your peers and colleagues back at the office. - Ready to share your PowerShell or DevOps know-how? This is your official call to submit presentation ideas for selection! - **What we are looking for?** - The majority of our sessions will now follow a traditional 45-minute format. These sessions cover a wide variety of PowerShell and DevOps expertise. *We have **a number of** agenda slots available for double length sessions*. These sessions delve into the depths of a topic covering areas that need more than 45 minutes. - Your proposed session should fit into one of the following areas: - - - - - - - PowerShell Internals (Advanced to Master Content) – A deep-dive into the inner workings of PowerShell and practical solutions that can be built from them. - - - - - PowerShell Features Deep Dive (Intermediate to Advanced Content) - These presentations are focused on configuring and working with existing PowerShell features and capabilities. - - - - - DevOps in Practice (Beginner to Intermediate) - A comprehensive look at putting the DevOps principles into practice. These presentations should focus on what you're doing and how you're doing it with DevOps. - - - - - - - - Advanced DevOps in Practice sessions will also be considered. - We are open to presentations across the entire ecosystem that have been built around PowerShell or the various DevOps tools—this includes Microsoft platforms and products that have PowerShell-based management tools or third party products.  New topics will be preferred over the recycling of older topics. However, we are still open to sessions on 'older' topics that address areas of great confusion or uncertainty. - **What kinds of sessions get selected? ** - Using previous feedback from our community, we're expanding the scope of our content this year.  While OnRamp will take care of those new to the PowerShell/DevOps world, we're looking to fill the other gaps with intermediate content and progressing all the way to the industry masters. - We look for an abstract that compells us to want to see your session—so spend time writing a great abstract! We want real-world usability combined with "Wow, nobody talks about *THAT*" awesomeness. We want to see the code. Don't just talk about it—this is a PowerShell summit, not a PowerPoint summit. If your session isn't predominately demonstrations, it's probably not right for the Summit. - Summit presentations are intense and intimate, often with plenty of audience interaction. You must expect questions and discussions. This is not a "lecture to the audience" event. - *We're always happy to discuss proposed sessions. If you have any doubts about the suitability of a particular session, please contact us: summit AT PowerShell DOT org* - Please note: - - - - - - - - All sessions are to be delivered in English. - - - - - Presenter will provide all equipment needed to deliver session(s), including a laptop or other computer. - - - - - Presenter must be able to provide video by means of HDMI, DVI-D, or DisplayPort connectors - VGA is NOT supported. - - - - - Presenter must be able to manually select an appropriate screen resolution for video output. Typically, 1024x768 or 1280x720 are preferred. - - - - - - - - Internet connectivity is available in the conference center but bandwidth is limited. If you rely on connecting to the cloud for your sessions, consider recording any demonstrations as a contingency. - - **How do I submit my presentation abstract?** - - - - - - - - Go to - [https://www.papercall.io/summit2019](https://www.papercall.io/summit2019) - - - - - - - Click Speak at PowerShell and DevOps Global Summit 2019 (scroll down to the bottom right and find the big green button). - - - - - Login using Twitter, Facebook or one of the other options. - - - - - Complete the form. The name field will show your email address. Please ensure your full name is in the Bio field, this will make communication easier. - - - - - Click submit. - - - - - - - - Please contact summit AT PowerShell DOT org if you have any issues or problems. - When can I submit? - Enter your presentation submissions immediately! We will start selecting presentations as soon as they arrive, so you don't want to miss out. The last day we will accept presentation submissions will be **Monday, October 1, 2018**. This is a hard deadline - **No**** sessions will be accepted after this date.**** ** - - **When will I know?** - You will be informed if one or more of your presentations have been selected and notified by Thursday, October 11, 2018. Your notification email will include any further actions you need to take. We will notify all potential speakers by Tuesday, October 23, 2018 if their sessions haven't been accepted. - Speakers with accepted sessions will be given free admission to the event, including attendance at all official Summit activities. Speakers may not bring guests to the day sessions or evening events. - Selected Speakers will receive an honorarium at a valuation of $400 for a 45-minute session and $800 for a double session, to assist with traveling and accommodation expenses.   This will be made in the form of a US-only Prepaid VISA card.  International speakers may be given the option of receiving a cheque or PayPal payment if needed.  You will be contacted in advance of the event as to preference. - - - The final agenda will be posted on PowerShell.Org early November 2018. - We look forward to your expertise in making PowerShell and DevOps Global Summit 2019 the most valuable IT/Dev conference of the year! diff --git a/content/articles/2018-08-03-what-you-missed-this-week-in-powershell-4.md b/content/articles/2018-08-03-what-you-missed-this-week-in-powershell-4.md deleted file mode 100644 index ad083318b..000000000 --- a/content/articles/2018-08-03-what-you-missed-this-week-in-powershell-4.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: What You Missed This Week in PowerShell! -authors: - - Greg Tate -date: "2018-08-03T15:00:44+00:00" -categories: - - PowerShell for Admins -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/08/what-you-missed-this-week-in-powershell-4/ ---- - -## Blogs - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#using-vsts-for-your-companys-private-powershell-library)[*Using VSTS for Your Company's Private PowerShell Library*](https://medium.com/@jsrice7391/using-vsts-for-your-companys-private-powershell-library-e333b15d58c8) - -by Justin Rice on July 28th -Interested in sharing your collection of PowerShell tools for your team to use? First-time blogger Justin Rice walks you through publishing a PowerShell module to an internal PSRepository using VSTS. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#creating-a-function-or-script-with-powershell-dynamic-parameters)[*Creating a Function or Script with PowerShell Dynamic Parameters*](https://blogs.technet.microsoft.com/undocumentedfeatures/2018/07/30/creating-a-function-or-script-with-powershell-dynamic-parameters/) - -By Aaron Guilmette on July 30th -Learn how to create parameters with validation data that you can tab-complete prior to runtime. In this example Aaron uses a set of Skype numbers as potential values for a parameter to his function. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#how-to-create-a-file-share-powershell-repository)[*How to Create a File Share PowerShell Repository*](https://4sysops.com/archives/how-to-create-a-file-share-powershell-repository/) - -by Matt McElreath on July 30th -Consider another method for sharing your PowerShell module. This article provides a simple technique for setting up a PowerShell repository from a file share. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#increased-windows-modules-coverage-with-powershell-core-61)[*Increased Windows Modules Coverage with PowerShell Core 6.1*](https://blogs.msdn.microsoft.com/powershell/2018/07/31/increased-windows-modules-coverage-with-powershell-core-6-1/) - -by Steve Lee on July 31st -The PowerShell team has a goal to bring 100% parity of the in-box modules to PowerShell Core. Learn about some of the challenges involved and how upcoming versions of Windows will close the gap on feature parity with Windows PowerShell. - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#forum-topics)Forum Topics - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#powershellorg---popular-post)PowerShell.org - Popular Post - -[*Don't Give Up (You Got This)!*](https://powershell.org/forums/topic/dont-give-up-you-got-this/) by Justin King on July 30th -If you're feeling a bit overwhelmed by all there is to learn, or if you just like motivational speeches, Justin offers some great advice about why it's so valuable to keep pushing your PowerShell knowledge further. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#powershellorg---new-community-event)PowerShell.org - New Community Event - -[*PowerHour: Community Lighting Demos*](https://powershell.org/2018/07/31/powerhour-community-lightning-demos/) by Warren Frame on July 31st -Announcing a new community-driven event for the rapid showcasing of PowerShell-related content! PowerHour will feature multiple speakers presenting in a lightning demo format, which will be streamed on YouTube. If you're interested in presenting but would like to start with something small and focused, or if you'd like to get some quick looks at lots different material, then this is worth keeping an eye on! - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#reddit---most-popular-post)Reddit - Most Popular Post - -[*PSWinDocumentation - Documentation for Active Directory*](https://www.reddit.com/r/PowerShell/comments/92vpab/pswindocumentation_documentation_for_active/) by u/MadBoyEvo on July 30th -Przemysław Kłys releases an early version of his PSWinDocumentation module, used for documenting AD and to showcase his other module, PSWriteWord (think of Doug Finke's ImportExcel, but for Word). These are some very cool and exciting tools, so definitely check them out! - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#youtube)Youtube - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#powershell-104---building-modules-using-psake)[*PowerShell 104 - Building Modules using PSake*](https://www.youtube.com/watch?v=SrnLJGW9GWY) - -by The St. Louis PowerShell User Group on July 24th -Grab a pot of coffee (or a bottle of rice wine) and catch up on a lengthy yet very informative session on controlling versions of your PowerShell modules. Topics include source code organization, running basic PSake builds, build version control, and Pester tests. Presented by Ken Maglio and Michael Lombardi - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#twitter)Twitter - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#i-hope-to-release-the-first-version-of-my-tool-this-month)[*I hope to release the first version of my tool this month!*](https://twitter.com/veronicageek/status/1024711850628460544) - -by @veronicageek on August 1st -Catch a sneak peek at this soon-to-be-released PowerShell tool for viewing your O365 tenant data in a clean UI! We can't wait, Veronica! - -Special thanks to Mark Roloff for contributions this week. diff --git a/content/articles/2018-08-07-welcome-to-the-new-powershell-org.md b/content/articles/2018-08-07-welcome-to-the-new-powershell-org.md deleted file mode 100644 index 8ca8a12c0..000000000 --- a/content/articles/2018-08-07-welcome-to-the-new-powershell-org.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Welcome to the new PowerShell.org -authors: - - Don Jones -date: "2018-08-07T11:26:09+00:00" -categories: - - Announcements -legacy_featured_image: /wp-content/uploads/2018/08/Screen-Shot-2018-08-07-at-11.03.21-AM.png -aliases: - - /2018/08/welcome-to-the-new-powershell-org/ ---- - -I want to introduce you to the new PowerShell.org! -While we're still doing a little test-and-adjust work, I'm pretty confident that everything in the new theme is working. I'd also like to point out some hopefully useful new things we've done with the site. -First, we've still got pretty much everything you've been used to - our friendly and helpful Q&A forums, our community-authored articles, and more. Incidentally, if you'd like to be a writer here at PowerShell.org, we welcome you. Let us help you get some eyes on whatever it is you're creating, whether it's a short tutorial, an article about an open source project you contribute to, or whatever. Drop a line to our webmaster@ email alias and we'll hook you up with authoring rights. -I'll note that our Events Calendar is currently offline; the old plugin was antiquated, and we need to find something more suitable. That's ongoing. -We do have some new stuff, though. You'll find **Groups **right at the top of every page, and that takes you into our new discussion groups. These are designed to foster open-ended, freeform discussion threads, unlike our more problem/solution, issue-oriented Q&A forums. -Click on your avatar at the top of the page, and you'll switch into your new profile (incidentally, if you don't like your avatar, you'll need to register your email address with Gravatar.com - that's who we pull images from). You can leave a quick Twitter- or Facebook-style status update, letting everyone know what you've been up to in the PowerShell world. We hope it'll be a great way for you to update the community on your activities. Along those lines, you can specifically follow whomever you like in the community, so that their updates will bubble up to your feed. Again, your profile page is the key to accessing all that new functionality. -Once you've friended someone, we also now have private direct messages. From your profile, click Messages and then Compose to start creating a new message. -It's worth spending some time poking around and see what else is available - there's quite a bit of functionality. For example, from your profile page, choose Settings and then Email - there are quite a few email notification options that you can opt into, if you want to keep up without having to visit the site continually. -I'll note that photo uploading from your profile page is a little touch-and-go - that's one of the things we're still figuring out. -**Let me give you a reason to really populate your profile: **We're working to make this a central location for you to showcase everything you've accomplished in the community. Kind of like a very specialized LinkedIn profile, your PowerShell.org profile will eventually include recognitions for contributions, achievements, and more. It'll be something you can show to colleagues, hiring managers, and peers to help show the positive impact you're making and the milestones you're reaching. Now's the time to start! -We're working hard to bring more functionality to PowerShell.org that can help you keep up with our fast-moving world, and we hope you'll find it all useful. There's still more to come, and we always welcome your suggestions in the Web Site Feedback forum! diff --git a/content/articles/2018-08-08-thank-you-richard-and-fare-well.md b/content/articles/2018-08-08-thank-you-richard-and-fare-well.md deleted file mode 100644 index 360c23586..000000000 --- a/content/articles/2018-08-08-thank-you-richard-and-fare-well.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Thank You, Richard, and Fare Well! -authors: - - Don Jones -date: "2018-08-08T15:35:03+00:00" -categories: - - Announcements - - PowerShell Summit -legacy_featured_image: /wp-content/uploads/2018/08/hqdefault.jpg -aliases: - - /2018/08/thank-you-richard-and-fare-well/ ---- - -Richard Siddaway has decided to step away from PowerShell.org and The DevOps Collective. Most recently, Richard has been known for his management of content at PowerShell Summit North America, PowerShell Summit Europe, and later, PowerShell + DevOps Global Summit. Before that, however, Richard was one of the founders of PowerShell.org way back in 2011-2012, along with myself, Jason Helmick, Kirk Munro, and Jeffrey Hicks. It's quite fair to say that we all needed one another's support and expertise very much in those early days, and Richard was particularly key in helping us put together the two European Summit events. Richard's very much entitled to one of our Community Hero Challenge Coins, which have been awarded to only a small handful of people who have made sustained, long-term community contributions: Jeffrey Snover, Jason Helmick, Angel Calvo, and Kenneth Hansen. Richard's definitely in rarified company, and it's well-earned. - - - -For PowerShell + DevOps Summit 2019, **[Warren Frame][1]** and **[Missy Januszko][2]** will be taking over as co-Directors of Content. They'll be joined by Will Anderson as new CEO of The DevOps Collective, myself as President, James Petty as CFO, Christopher Gannon-Jones as Director of Global Events, and Jeffrey Bernt as Manager of Summit Logistics. Jeffery Hicks will be managing Iron Scripter and related activities both on-site and in advance. Rob Pleau has volunteered to coordinate the new OnRamp Buddy Program for 2019. -While I'm sad to see Richard step away, I'm proud and excited to see a new generation of community leaders stepping in to ensure the future of both Summit and the entire organization. We're fortunate to have had such a strong founding group, who worked through innumerable rough patches and crises to create a sustainable and repeatable system for our new team to step into, and I very much look forward to seeing where the "new blood" takes things! -Please **[offer your thanks to Richard][3]** for his years of hard work, and send your congratulations to our new team members. I hope we'll see many of you at Summit! - - [1]: https://twitter.com/pscookiemonster - [2]: https://twitter.com/thedevopsdiva?lang=en - [3]: https://twitter.com/rsiddaway diff --git a/content/articles/2018-08-10-what-you-missed-this-week-in-powershell-5.md b/content/articles/2018-08-10-what-you-missed-this-week-in-powershell-5.md deleted file mode 100644 index 63b12b877..000000000 --- a/content/articles/2018-08-10-what-you-missed-this-week-in-powershell-5.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: What You Missed This Week in PowerShell! – August 10th, 2018 -authors: - - Greg Tate -date: "2018-08-10T15:00:12+00:00" -categories: - - PowerShell for Admins -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/08/what-you-missed-this-week-in-powershell-5/ ---- - -Topics include Module Worst Practices, InjectionHunter, and The PowerShell Standard Library. - - -## Blogs - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#module-worst-practices)[*Module Worst Practices*](https://chrislgardner.github.io/powershell/2018/08/03/module-worst-practices.html) - -by Chris L Gardner on August 3rd -Imagine all the mistakes you would come across if you were to analyze every module in the PowerShell Gallery. Chris has done just that! And he presents solutions to some of the most annoying problems he encountered. This insightful article contains numerous useful tips and references to popular community solutions for designing a superb PowerShell module. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#powershell-injection-hunter-security-auditing-for-powershell-scripts)[*PowerShell Injection Hunter: Security Auditing for PowerShell Scripts*](https://blogs.msdn.microsoft.com/powershell/2018/08/03/powershell-injection-hunter-security-auditing-for-powershell-scripts/) - -by The PowerShell Team on August 3rd -Script injection is the most common form of mistake an administrator can make when exposing PowerShell code to an attacker. Learn how to use InjectionHunter with VS Code to help you discover possible code injection risks as you write your scripts. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#powershell-how-to-create-a-standard-library-binary-module)[*PowerShell: How to Create a Standard Library Binary Module*](https://kevinmarquette.github.io/2018-08-04-Powershell-Standard-Library-Binary-Module/?utm_source=twitter&utm_medium=post) - -by Kevin Marquette on August 4th -Ever had thoughts of writing a binary cmdlet? Or would you like to understand when it may be useful to do so? Get your toes wet with C# and learn how to produce a binary PowerShell cmdlet that you can include alongside your advanced functions within a PowerShell script module. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#powershell-standard-library-build-single-module-that-works-across-windows-powershell-and-powershell-core)[*PowerShell Standard Library: Build Single Module that Works Across Windows PowerShell and PowerShell Core*](https://blogs.msdn.microsoft.com/powershell/2018/08/06/powershell-standard-library-build-single-module-that-works-across-windows-powershell-and-powershell-core/) - -by James Truher on August 6th -When you're done reading Kevin's post head over to the PowerShell Team's blog and discover how the new DotNet CLI template makes creating binary modules a cinch! - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#-copy-files-with-hash-difference-via-powershell-) [Copy Files with Hash Difference via PowerShell ](http://wragg.io/a-powershell-cmdlet-to-copy-files-based-on-hash-difference/) - -by Mark Wragg on August 8th -Understand the basics of the Get-FileHash cmdlet and learn how to use the HashCopy module to identify changed files within your project. This is useful for Git-based projects as Git changes the modified date of files as it manages them. - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#forums)Forums - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#powershellorg---popular-post)PowerShell.org - Popular Post - -[*PSCustomObject - Cycle Through Hashtable?*](https://powershell.org/forums/topic/pscustomobject-cycle-through-hashtable/) by Swatto on August 1st -Here's an interesting thread that covers pulling data from the VirusTotal website and creating a report. This is great example on how the PowerShell community can pull you through when you're stuck! - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#reddit-rpowershell---most-popular-post)Reddit /r/PowerShell - Most Popular Post - -[*TIL you can launch powershell from explorer*](https://www.reddit.com/r/PowerShell/comments/95kzzn/til_you_can_launch_powershell_from_explorer/) by u/detenshi12 on August 8th -It's always fun to learn little quality-of-life shortcuts and this one is no exception. In predictable Reddit fashion, other users chime in with additional shortcuts and nice-to-knows. Take a look! You'll probably pick up on a cool little trick. - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#media)Media - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#twitter)Twitter - -[*I can't promote it enough. Feel the power of PowerShell. Have fun with it!*](https://twitter.com/pewa2303/status/1025780434934882304) by Patrick Gruenauer on August 4th -Patrick showcases a CLI menu that handles a number of common Active Directory tasks. This is a great example of how a handful of simple PowerShell concepts, combined with a little vision, is all it takes to make a great tool. Looks clean and easy to use? Check. Nostalgia points? Check. The code is freely available on his blog? You betcha! - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#youtube)Youtube - -[*Power BI PowerShell and the Admin API*](https://www.youtube.com/watch?v=SQ7ufcRayYY) by Adam Saxton from Guy in a Cube on August 7th -If you happen to an admin for Power BI users, you'll want to check this out; Adam takes us on a video tour of the Power BI Management module. Use PowerShell to dig into your workspaces, manage access, and grab reports. There are even wrapper functions for the Power BI REST API! - -Special thanks to Mark Roloff for contributions this week! diff --git a/content/articles/2018-08-14-the-summit-2019-call-for-topics-some-ideas.md b/content/articles/2018-08-14-the-summit-2019-call-for-topics-some-ideas.md deleted file mode 100644 index 62d32deaa..000000000 --- a/content/articles/2018-08-14-the-summit-2019-call-for-topics-some-ideas.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "The Summit 2019 Call for Topics: Some Ideas" -authors: - - Don Jones -date: "2018-08-14T16:16:15+00:00" -categories: - - PowerShell for Admins -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_703607812.jpg -aliases: - - /2018/08/the-summit-2019-call-for-topics-some-ideas/ ---- - -As you hopefully know, we've opened the [Call for Topics for PowerShell + DevOps Global Summit 2019][1]. I know sometimes people struggle with ideas, and so I wanted to offer a few. - - - -First, know that you're _more than welcome_ to submit multiple ideas. In fact, we encourage it, because it gives the Content team a bit more flexibility. You're also welcome to _present_ multiple sessions, although prepping for more than a couple can be pretty intense, so you need to consider it pretty carefully. -One category of sessions we need is Intermediate. We actually use the word _Practitioner, _and we define the audience as someone who's made it through _Learn Windows PowerShell in a Month of Lunches _**and **_Learn PowerShell Scripting in a Month of Lunches, _who uses PowerShell pretty frequently, but hasn't made it to niche or expert-level topics yet. Many of the topics this audience needs are "evergreen" in that we probably need to present them each year, although we welcome different speakers and different perspectives. Ideas include: - - * Best Patterns and Practices for Advanced Functions - * Best Practices for Module Development and Distribution - * Creating and Managing an On-Premises Module Repository - * Managing PowerShell Security Features (with an emphasis on logging) - * Getting Started with Pester for Automated Unit Testing - * Best Practices for Error Handling in PowerShell Commands - -See, for many people, these aren't "sexy" or "hardcore" topics, but they're ones desperately and almost continually _needed. _You only have to look at our own Forums here at PowerShell.org to see how often these ideas come up. For that matter, consider browsing the forums for topic ideas! I mean, based on what I've seen this month alone, a session on, "Querying and Modifying AD Objects Using CSV Files" would hit a sweet spot pretty hard! -We're also actively looking to build out DevOps content, which can mean stepping away from PowerShell. We recognize that few attendees actually work in a DevOps environment, so "hardcore" stuff like Kubernetes, Hashicorp tools, and so on are probably not going to be popular. However, there are DevOps techniques that any PowerSheller can use in their environment, even if their company isn't fully DevOps. CI/CD tooling, for example, can be appropriate for anyone. And that doesn't need to focus just on VSTS - plenty of companies would prefer on-prem solutions like Team City, Jenkins, and the like. -DevOps topics can also include cross-stack admin ideas, like a session on learning Python, which is a great cross-stack scripting language that can complement PowerShell well. Again, sessions _that 80% of the world could find applicable in their daily lives_ is the watchword. -Finally, I've had some personal thoughts about sessions I'd like to see. For example, PowerShell's language was always designed to provide a "glide path" into C#, but we rarely have a "Building Compiled Cmdlets" type of session. This could focus on the _patterns_ involved. Say, rebuild the Get-Service command. That's not a difficult command, everyone understands what it already does, and the actual .NET code is pretty minimal. So you could focus on the structure of these, rather than getting into the nitty gritty of .NET. And you could have an "Introduction to C# for PowerShell People" session, to help someone who's looking to move some of their activity to the next level. -I hope that helps trigger some ideas of your own. Remember, the Call for Topics **is open now** and it's not only a great way to give back to the community, but to get free admission to Summit and a bit of money toward your travel expenses! - - [1]: https://powershell.org/2018/08/01/powershell-devops-summit-2019-call-for-speakers/ diff --git a/content/articles/2018-08-15-help-us-run-powershell-org.md b/content/articles/2018-08-15-help-us-run-powershell-org.md deleted file mode 100644 index bc2edf1d6..000000000 --- a/content/articles/2018-08-15-help-us-run-powershell-org.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Help us Run PowerShell.org! -authors: - - Don Jones -date: "2018-08-15T14:54:53+00:00" -categories: - - Announcements -aliases: - - /2018/08/help-us-run-powershell-org/ ---- - -We're looking for a few good PowerShellers to help us keep the community on track! - - - -**POSITION FILLED Forums Moderator. **We're looking for someone who can clear the spam queues  -daily -. In addition, we're looking to move to a model where new site members' first posts are held in moderation to prevent spam; our Moderator would be expected to clear those queues twice each weekday (after their first post is approved, most members will be able to post without moderation from that point). We'd like two Moderators who can back each other up for vacations and such (there's no harm if you're both checking the queues at the same time). -**POSITION FILLED Forums Cheerleader. **This is a task one of our Moderators can perform, but it's a bit of work so it might be a different person. This person needs to monitor for unanswered forums posts and, after a couple of days, either post an answer or use social media to try and bring someone in to craft an answer. This person doesn't need to be an Expert In All Things, but needs to be willing to try and engage the broader community to try and find an answer. Will also have Moderator permissions to move posts that have been placed in the wrong forum. -**POSITION FILLED Social Media Manager. **We're looking for someone who can manage the @PshOrg and @PshSummit Twitter accounts, and potentially establish other social media accounts. This includes watching for newsworthy items to post, and posting at the direction of other team members. We do not currently use social media management software; this person can also be responsible for recommending and implementing something. -If you're interested, please contact president@ this domain via email. If you have questions, please post those in a comment here so that we can reply publicly. diff --git a/content/articles/2018-08-17-icymi-powershell-week-of-17-august-2018.md b/content/articles/2018-08-17-icymi-powershell-week-of-17-august-2018.md deleted file mode 100644 index 4dc0bda2a..000000000 --- a/content/articles/2018-08-17-icymi-powershell-week-of-17-august-2018.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 17-August-2018" -authors: - - Greg Tate -date: "2018-08-17T15:00:25+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/08/icymi-powershell-week-of-17-august-2018/ ---- - -Topics include PowerBI cmdlets, auditing group changes, exporting module functions, and PowerShell phishing. - - -## Blogs - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#test-netconnection-vs-test-connection---testing-a-network-connection-with-powershell)[*Test-NetConnection vs. Test-Connection - Testing a Network Connection with PowerShell*](https://4sysops.com/archives/test-netconnection-vs-test-connection-testing-a-network-connection-with-powershell/) - -by Adam Bertram on August 10th -Learn how a single cmdlet, Test-NetConnection cmdlet, can be used in place of common network connection utilities, such as ping, tracert, telnet, and portqry. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#working-with-powershell-in-power-bi)[*Working with PowerShell in Power BI*](https://powerbi.microsoft.com/en-us/blog/working-with-powershell-in-power-bi/) - -by Kay Unkroth (Microsoft) on August 13th -A few weeks ago Microsoft released a Power BI PowerShell module for administering Power BI tenants. This article covers the basics of using the new Power BI cmdlets. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#get-group-membership-changes)[*Get Group Membership Changes*](https://www.sconstantinou.com/get-group-membership-changes/) - -by Stephanos Constantinou on August 13th -Have a need to monitor group changes in Active Directory? Run this script as a scheduled task to receive an email containing details of whose come and gone from AD groups. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#powershell-module-exporting-functions-in-constrained-language)[*PowerShell Module Exporting Functions in Constrained Language*](https://blogs.msdn.microsoft.com/powershell/2018/08/14/powershell-module-function-export-in-constrained-language/) - -by Paul Higinbotham (Microsoft) on August 15th -Exporting functions using wildcards in a script module introduces significant performance penalties and carries serious security implications. Understand how PowerShell Constrained Language Mode addresses this problem. Look for a module in PSGallery soon that will help to ensure your modules are in compliance with the guidance in this article. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#phishing---ask-and-ye-shall-receive)[*Phishing - Ask and Ye Shall Receive*](https://blog.fox-it.com/2018/08/14/phishing-ask-and-ye-shall-receive/) - -by rindertkramer on August 14th -This eye-opening article demonstrates how bad actors can use PowerShell to steal credentials using fake toast notifications. The intent of this article is to raise security awareness; be paranoid when it comes to processes asking for your credentials! - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#forums)Forums - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#powershellorg---popular-post)PowerShell.org - Popular Post - -[*Teaching PowerShell Public Group*](https://powershell.org/groups/teaching-powershell/) -Get a feel for the new Groups feature on PowerShell.org and particpate in a discusion hashtables versus PSCustomObjects. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#powershellorg-challenge---unanswered-post)PowerShell.org Challenge - Unanswered Post - -[*DSC HTTPS Pull Server - An Error Occurred While Sending the Request*](https://powershell.org/forums/topic/dsc-https-pull-server-an-error-occurred-while-sending-the-request/) by Marc Esteve on August 10th -Marc has been struggling for two weeks on this issue. Please jump in and provide some guidance if you can! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#reddit-rpowershell---most-popular-post)Reddit /r/PowerShell - Most Popular Post - -[*PowerShell Remoting on Python*](https://www.reddit.com/r/PowerShell/comments/975tdb/powershell_remoting_on_python/) by jborean93 on August 14th -Jordan Borean has created PyPSRP, a Python library that works with the PowerShell Remoting Protocol to help facilitate better remote management of Windows servers. Wondering what this has to do with PowerShell? Well, he's blogged about what his library does and it also reveals some really cool details about how PowerShell's remoting works under the hood! It's a long read but if you were the kid that took stuff apart just to see how they worked, this is well worth your time. - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#media)Media - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#twitter)Twitter - -[*Show-PSDriveMenu*](https://twitter.com/thetommymaynard/status/1029231148453380096?s=19) by Tommy Maynard on August 14th -Who doesn't like new tools in the toolbox? Tommy gives us a quick look at a new one called Show-PsDriveMenu. True to the name, it shows you all of your available PsDrives and lets you quickly switch between them. He's got his cool little script available on the PowerShell Gallery, so go check it out. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#youtube)Youtube - -[*PowerShell Core Community Call*](https://www.youtube.com/watch?v=eNIbm4h2guE) by The PowerShell Team on August 16th -Check out what's coming down the pipe for PowerShell Core, including target date for the next major release for PowerShell Core. Call notes [_here_][1]. - -Special thanks to Mark Roloff, Robin Dadswell, and Brett Bunker for contributions! - - [1]: https://github.com/PowerShell/PowerShell-RFC/blob/master/CommunityCall/20180816_Notes.md diff --git a/content/articles/2018-08-21-use-pnp-powershell-to-add-contenttype-for-your-sharepoint-site.md b/content/articles/2018-08-21-use-pnp-powershell-to-add-contenttype-for-your-sharepoint-site.md deleted file mode 100644 index 8bffe26ff..000000000 --- a/content/articles/2018-08-21-use-pnp-powershell-to-add-contenttype-for-your-sharepoint-site.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Use PnP PowerShell to add ContentType for your SharePoint site -authors: - - Eli Hess -date: "2018-08-21T18:16:02+00:00" -categories: - - PowerShell for Admins -aliases: - - /2018/08/use-pnp-powershell-to-add-contenttype-for-your-sharepoint-site/ ---- - -You can achieve the task by using SharePoint GUI. However, if your sites collection has tens of hundreds sites and each site has more than one document library, it will become a nightmare for a SharePoint administrator to do the task by using GUI. - - - Luckily, there is PnP Powershell which can help us achieve the goal. - - - The steps will be like below: - - - #Step1: export your login credential to a secure file on your local machine - - - get-credential|export-clixml -path c:\safe\mycredential.txt - - - #Step2: import your credential to Powershell - - - $cred=import-clixml -path c:\safe\mycredential.txt - - - #Step3: connect PnP online - - - connect-pnponline -url "your site url here" -credentials $cred - - - #Step4: get all sub sites of your site collection - - - $subsites=get-pnpsubwebs -recurse|select-url - - - #Step5: Use for each loop to loop through each subsites and add the content type into document libraries in each sub site. - - - foreach ($site in $subsites) -{ - - - connect-pnponline -url $site.url -credentials $cred - - - $docids=get-pnplist|where-object {$_.basetemplate -eq 101 -and $_title -ine "Site Assets"}|select id - - - foreach ($docid in $docids) { - - - add-pnpcontenttypetolist -list $docid.id -contenttype "content type name of your choice for default one" -DefaultContentType - - - add-pnpcontenttypetolist -list $docid.id -contenttype "2nd content type" - - - } - - - } - - - To remove the contenttype from your sharepoint libraries, you need to use remove-pnpcontenttypefromlist command. - - - See the following code: - - - Foreach($site in $subsites) { - - - connect-pnponline -url $sites.url -credentials $cred - - - $docids=get-pnplist|where-object {$_.basetemplate -eq 101 -and $_.title -ine "Site Assets"}|select id - - - foreach ($docid in $docids) { - - - remove-pnpcontenttypefromlist -list $docid.id -contenttype "the name of the content type you want to remove"} - - - } - - - -} diff --git a/content/articles/2018-08-24-icymi-powershell-week-of-24-august-18.md b/content/articles/2018-08-24-icymi-powershell-week-of-24-august-18.md deleted file mode 100644 index 01addcc2b..000000000 --- a/content/articles/2018-08-24-icymi-powershell-week-of-24-august-18.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 24-August-18" -authors: - - Greg Tate -date: "2018-08-24T15:00:47+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/08/icymi-powershell-week-of-24-august-18/ ---- - -Topics include script module design, PowerShell exploitation, PowerShell Remoting, PowerShell AST, the O365 Data Retriever tool, and the inaugural PSPowerHour. - - - -Special thanks to Mark Roloff, Brett Bunker, and Robin Dadswell for contributions this week! - -## Blogs - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#powershell-script-module-design-publicprivate-versus-functionsinternal-folders-for-functions)[*PowerShell Script Module Design: Public/Private versus Functions/Internal Folders for Functions*](https://mikefrobbins.com/2018/08/17/powershell-script-module-design-public-private-versus-functions-internal-folders-for-functions/) - -by Mike Robbins on August 17th -Mike provides an interesting take on structuring module directories. Perhaps this type discussion is one better had over beers. I side with Mike on this! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#showmecon-2018---powershell-exploitation)[*ShowMeCon 2018 - PowerShell Exploitation*](https://securityboulevard.com/2018/08/showmecon-2018-michael-goughs-powershell-exploitation-powersploit-bloodhound-powershellmafia-obfuscation-powershell-empire-the-empire-has-fallen-you-can-detect-powershell-exploitation/) - -Presentation by Michael Gough on August 18th -While not technically a blog, this article links to a presentation that shows how attackers use PowerShell exploits. Presentation is given by Michael Gough who is a host of the "Brakeing Down Incident Response" podcast and author of the Windows PowerShell Logging Cheat Sheet. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#powershell-remoting)[*PowerShell Remoting*](https://www.sconstantinou.com/windows-powershell-sessions-pssessions/) - -by Stephanos Constantinou on August 21st -Have a look at a few areas of PowerShell Remoting including requirements and some authentication methods that can be used with it. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#finding-default-parameter-values-with-the-ast)[*Finding Default Parameter Values with the AST*](https://chrislgardner.github.io/powershell/2018/08/22/finding-default-parameter-values.html) - -by Chris Gardner on August 22nd -Do you want to Pester test your parameters? Do you want to use something other than RegEx when you do that? Well then the PowerShell Abstract Syntax Tree (AST) is your answer. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#how-and-why-i-created-the-o365-data-retriever-tool)[*How and Why I created the O365 Data Retriever Tool*](https://veronicageek.com/powershell/how-and-why-i-created-the-o365-data-retriever-tool/2018/08/) - -by Veronique Lengelle on August 23rd -If, like us, you've been eagerly awaiting the release of the O365 Data Retriever tool, your wait is over. In this blog, Veronica discusses her motivation for working on it, the journey she took getting to it this point, and encourages us to not assume that others know what we know. Therefore, get out there and share it! -And, yes, there's a link to the tool on GitHub. Go check it out! - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#forums)Forums - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#powershellorg---popular-post)PowerShell.org - Popular Post - -[*New Bulk ADUser*](https://powershell.org/forums/topic/new-bulk-aduser/) by Jeff Taylor on August 20th -Jeff came into the forums this week looking for advice with creating new user accounts in bulk from a CSV. What followed was a great discussion about splatting and passing values through the pipeline. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#reddit-rpowershell---most-popular-post)Reddit /r/PowerShell - Most Popular Post - -[*PowerShell Console, Scripts, Functions, Modules, Cmdlets, Oh My!*](https://www.reddit.com/r/PowerShell/comments/98m06w/powershell_console_scripts_functions_modules/) by U/_Unas_ on August 19th -The most upvoted topic of the week belongs to an article by Josh Rickard. Nice work, Josh! - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#media)Media - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#twitter)Twitter - -[*We shipped the Release Candidate (RC) for #PowerShell 6.1 today...*](https://twitter.com/joeyaiello/status/1032432062941163520) by Joey Aiello on August 22nd -The latest Release Candidate for PowerShell Core has arrived and the team would love your input before the next stable release. Head over to GitHub and grab it for some new hotness! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#youtube)Youtube - -[*PowerHour 001: 2018-08-21*](https://youtu.be/fDQvdIEda_c) by PSPowerHour on August 21st -The inagural PSPowerHour, covering topics from SQL through to Raspberry Pi's. diff --git a/content/articles/2018-08-25-powershell-devops-global-summit-initial-onramp-scholarship-recipients.md b/content/articles/2018-08-25-powershell-devops-global-summit-initial-onramp-scholarship-recipients.md deleted file mode 100644 index 333affde8..000000000 --- a/content/articles/2018-08-25-powershell-devops-global-summit-initial-onramp-scholarship-recipients.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: PowerShell + DevOps Global Summit – Initial OnRamp Scholarship Recipients -authors: - - Don Jones -date: "2018-08-25T15:05:10+00:00" -categories: - - PowerShell Summit -aliases: - - /2018/08/powershell-devops-global-summit-initial-onramp-scholarship-recipients/ ---- - -Based upon generous donations to this point, including from the Campers of DSC/DevOps Camp 2018 and the readers of [The PowerShell Conference Book][1], we will be able to offer a greater number of [scholarships][2] that originally anticipated. As a result, we will be awarding some of those immediately. - - - -We hope this will give those recipients more time to prepare, and it will allow us to front-load some of our administrative tasks related to the scholarship. **We will be contacting recipients on August 25 and 26 to confirm their participation. **Please note that this is **not** the final, full slate of recipients; we will continue to accept [applications][2] until the original deadline of 1st November 2018. Any applications already received, which are not selected in this first round, remain **very** eligible for our originally planned slots. We are simply not making a decision on those original slots right now, and will do so according to the original schedule. -Again, this is an **increase** to the number of scholarships we are able to award, not a decrease. Our original slots remain available and will be awarded according to the original schedule. - - [1]: https://leanpub.com/powershell-conference-book - [2]: https://powershell.org/summit/summit-onramp/onramp-scholarship/ diff --git a/content/articles/2018-08-31-icymi-week-of-31-august-18.md b/content/articles/2018-08-31-icymi-week-of-31-august-18.md deleted file mode 100644 index 95f2eea8b..000000000 --- a/content/articles/2018-08-31-icymi-week-of-31-august-18.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 31-August-18" -authors: - - Greg Tate -date: "2018-08-31T15:00:03+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/08/icymi-week-of-31-august-18/ ---- - -Topics include automating ACLs for O365 public IPs, the Scour module, Module Design w/ Plaster, the ConvertToMarkdown module, and PSPowerHour. - - - - - - Special thanks to Mark Roloff, Brett Bunker, and Robin Dadswell for weekly contributions. - - -## Blogs - -###### [*Automate Office 365 Endpoint ACL Configurations Using PowerShell*](http://www.powershell.no/exchange/online,office/365,powershell/2018/08/26/automate-office365-ip-address-handling.html) {.unchanged.rich-diff-level-one} - - - by Jan Egil Ring on August 26th - - - If you're responsible for keeping access control lists up to date for public IPs in Office 365 then read this article to understand how you can automate this process. - - -###### [*Scour: Fast, Personal, Local Content Searches*](http://www.leeholmes.com/blog/2018/08/28/scour-fast-personal-local-content-searches/) {.unchanged.rich-diff-level-one} - - - by Lee Holmes on August 28th - - - Lee Holmes introduces a new PowerShell module, Scour. This module leverages the indexing and search capabilities of Apache Lucene to bring you supercharged speed for, wait for it... *scouring* your filesystem. If you've got tons of content to search through and little time to spare, this might be just the tool for you. - - -###### [*your code doesn’t suck*](https://blog.netnerds.net/2018/08/your-code-doesnt-suck/) {.unchanged.rich-diff-level-one} - - - by Chrissy LeMaire on August 28th - - - This one really resonated with the group. Probably because none of us entertain illusions of writing award-winning code. But Chrissy cuts through the self-criticical nonsense; reminding us that as long as our code is saving people time and effort, it definitely doesn't suck. - - -###### [*PowerShell Script Module Design: Plaster Template for Creating Modules*](https://mikefrobbins.com/2018/08/30/powershell-script-module-design-plaster-template-for-creating-modules/) {.unchanged.rich-diff-level-one} - - - by Mike Robbins on August 30th - - - Mike's follow-up article on module design walks you through using Plaster to create modules with a custom folder structure. - - -###### [*PowerShell Execution Policy*](https://www.sconstantinou.com/powershell-execution-policy/) {.unchanged.rich-diff-level-one} - - - by Stephanos Constantinou on August 30th - - - Check out this nicely-written article that breaks down PowerShell Execution Policy. - - -## Forums - -###### PowerShell.org Challenge - Unanswered Post {.unchanged.rich-diff-level-one} - - - [*Post Method*](https://powershell.org/forums/topic/post-method/) by Majd on August 24th - - - Majd's question on using Invoke-WebRequest has gone unanswered for almost a week. Please jump in and assist if you can! - - -###### Reddit /r/PowerShell - Top Post of the Week {.unchanged.rich-diff-level-one} - - - [*Can PS remove Minecraft, CandyCrush and the other packages that are there but not installed?*](https://www.reddit.com/r/PowerShell/comments/9b2lbm/can_ps_remove_minecraft_candycrush_and_the_other/) by u/*Landmine* on August 29th - - - If you're customizing Windows images for your company then you've surely come acrosss this scenario. Read up on the advice others have given to tacklet this issue. - - -## Media - -###### Twitter {.unchanged.rich-diff-level-one} - - - [*ConvertFromMarkdown*](https://twitter.com/dfinke/status/1033088044155514882) by Doug Finke - - - Learn how the ConvertFrom-Markdown module can generate chapters from markdown and compile those chapters into HTML, a Word Doc, or a PDF. - - -###### Youtube {.unchanged.rich-diff-level-one} - - - [*PSPowerHour Episode 2*](https://www.youtube.com/watch?v=3Yq4sVWJrWo) by PSPowerHour - - - The second installment of lightning demos for PowerHour includes the following topics: - - - - - Cloning SQL Server databases using PowerShell (Sander Stad), - - - - - Using getters and setters for classes wtih custom attributes (Ryan Bartram) - - - - - Using PwSh to gather information from silos (Teresa Clark) - - - - - Using PowerShell and RegExp to convert code between SQL platforms (Claudio Silva) - - - - - Getting started with Visual Studio Code (Shawn Melton) - - - - - Deploying SQL databases using PowerShell (Kirill Kravstov) - - - - - Learning PowerShell with PSKoans (Joel Sallow) diff --git a/content/articles/2018-09-01-getting-feedback-on-powershell-devops-global-summit-proposals.md b/content/articles/2018-09-01-getting-feedback-on-powershell-devops-global-summit-proposals.md deleted file mode 100644 index bb1e8df68..000000000 --- a/content/articles/2018-09-01-getting-feedback-on-powershell-devops-global-summit-proposals.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Getting Feedback on PowerShell + DevOps Global Summit Proposals -authors: - - pscookiemonster -date: "2018-09-01T13:46:04+00:00" -categories: - - PowerShell for Admins - - PowerShell Summit -aliases: - - /2018/09/getting-feedback-on-powershell-devops-global-summit-proposals/ ---- - -Hi all! -August is over, and we're about a month out from the close of the [PowerShell + DevOps Global Summit CFP][1]! -We have some seriously awesome sessions coming, but we still need more proposals! I've had a number of questions like _what makes a good CFP?_ and _would this topic work?_. We're going to try something new to see if we can help with this! - - * Do you want feedback on your proposal? Are you curious to see if your peers are interested in a topic? Join the #conferences channel in [powershell.slack.com][2] and ask away! - * Do you want to help other folks with their proposals? To help encourage folks and different topics? Join the #conferences channel in [powershell.slack.com][2] and help out! - -There are two main ways you might get feedback here: - - * In public. Just post your draft proposal or question, and folks will hopefully help! - * In private. Ask the channel if anyone is around for a private discussion. Some folks prefer this, no harm! - -Just keep in mind - if you go the private route, you might end up missing out on feedback from someone with a different and perhaps more helpful perspective. -A number of summit regulars and speakers have offered to help, keep an eye out for them! - - * @Brandon Lundt - * -@cdhunt - - * -@devblackops - - * -@michaeltlombardi - - * @glennsarti - * @gtatelive - * @jb.lewis - * -@ -jeremy.murrah - * @joshcorr - * @pscookiemonster - * -@rjpleau - - * We'll update this if more folks chime in! - -I’d encourage this as your first step in getting feedback on your proposals.  If you have more logistical questions, or really want to get feedback specifically from Missy and me, you can ping content –at- powershell.org and we’ll try to help out. -Lastly, do consider giving a [PSPowerHour lightning demo][3] - this is a low pressure way to show off something fun and useful, and gives the folks evaluating summit proposals some insight into your presentation and prep chops! We'll try to fit these all in before the summit CFP closes. -That's about it! Hope to see some fun ideas and proposal discussions in Slack, and your [proposals][1] (and hopefully sessions) at the summit! - - [1]: https://www.papercall.io/summit2019 - [2]: http://bit.ly/psslack - [3]: https://github.com/PSPowerHour/PSPowerHour diff --git a/content/articles/2018-09-07-icymi-powershell-week-of-7-september-18.md b/content/articles/2018-09-07-icymi-powershell-week-of-7-september-18.md deleted file mode 100644 index f480a80a3..000000000 --- a/content/articles/2018-09-07-icymi-powershell-week-of-7-september-18.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 7-September-18" -authors: - - Greg Tate -date: "2018-09-07T15:00:27+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/09/icymi-powershell-week-of-7-september-18/ ---- - -Topics include Azure Stack Infrastructure Backup, SharePoint Online Module Availability in PSGallery, Script for Updating Sysinternals Tools, Understanding While Loops, and the PowerShell Explorer module. - - - - - - Special thanks to Mark Roloff, Brett Bunker, and Robin Dadswell for weekly contributions. - - -## Blogs - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#configure-azure-stack-automatic-infrastructure-backup-with-powershell)[*Configure Azure Stack Automatic Infrastructure Backup With PowerShell*](https://charbelnemnom.com/2018/09/configure-azure-stack-infrastructure-backup-with-powershell-azurestack-azurestackdevkit-asdk/) - -by Charbel Nemnom on September 3rd -For those of you working with Azure Stack, Charbel has released a handy little script that you can use to configure your infrastructue backup settings from PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#announcing-availability-of-sharepoint-online-management-shell-from-powershell-gallery)[Announcing availability of SharePoint Online Management Shell from PowerShell Gallery](https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/Announcing-availability-of-SharePoint-Online-Management-Shell/ba-p/241370#M2644) - -by Vesa Juvonen (Microsoft) on September 3rd -Announcent, installation instructions and FAQ on SPO Management Shell. - -###### [*Downlaod Newest Sysinternals Tools*](https://powershell.anovelidea.org/powershell/download-newest-sysinternals/) - -by Dave Carroll on September 3rd -Need a quick way to download or update the Sysinternals tools? Dave provides a couple of nicely-written functions that will get the job done! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#powershell-while-loops-explained-for-absolute-beginners)[*PowerShell While loops explained for Absolute Beginners*](https://winsysblog.com/2018/09/powershell-while-loops-explained-for-absolute-beginners.html) - -by Dan Franciscus on September 4th -If while loops have ever been a fuzzy area for you, Dan wrote a great article about how they work using slot machines as an analogy. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#managing-files-over-sftp-with-powershell)[*Managing Files over SFTP with PowerShell*](https://www.business.com/articles/manage-files-over-sftp-powershell/) - -by Adam Bertran on September 5th -Learn how to use a few of the the SFTP commands from the posh-ssh module. - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#forums)Forums - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#powershellorg-challenge---unanswered-post)PowerShell.org Challenge - Unanswered Post - -[*Lack or reporting in DSC*](https://powershell.org/forums/topic/lack-or-reporting-in-dsc/) by Charlie on September 4th -Charlie has a question on the capability of Azure Automation DSC. Can you provide any guidance? - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#reddit-rpowershell---most-popular-post)Reddit /r/PowerShell - Most Popular Post - -[*Help your users help the helpdesk. Introducing Show-Systeminfo.*](https://www.reddit.com/r/PowerShell/comments/9dlnw8/help_your_users_help_the_helpdesk_introducing/) by u/premtech on September 6th -The top post of the week covers a tool that the Help Desk can use to diagnose issues and cature important PC information. - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#media)Media - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#twitter)Twitter - -[*PowerShell Explorer*](https://twitter.com/adamdriscoll/status/1037531528455020544) by Adam Driscoll on September 5th -Check out an interesting tool that shows information about the PowerShell environment on your machine! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#youtube)Youtube - -[*Creating Dynamic Commands with DatabaseReporter PowerShell Module*](https://www.youtube.com/watch?v=RBzgQ5pVLms&t=2527s) by Rohn Edwards on September 5th -Rohn's presentation at the Mississippi PowerShell User Group covers a framework that lets you write advanced PowerShell function to interact with databases. diff --git a/content/articles/2018-09-14-icymi-powershell-week-of-14-september-18.md b/content/articles/2018-09-14-icymi-powershell-week-of-14-september-18.md deleted file mode 100644 index 13c3ef914..000000000 --- a/content/articles/2018-09-14-icymi-powershell-week-of-14-september-18.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 14-September-18" -authors: - - Greg Tate -date: "2018-09-14T15:00:10+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/09/icymi-powershell-week-of-14-september-18/ ---- - -Topics include log file notifications, checking uptime, AWS Lamda support for PowerShell Core, organizing code, and episode 3 of PowerHour! - - - -Special thanks to Brett Bunker, Robin Dadswell, and Mark Roloff for weekly contributions. - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#blogs)Blogs - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#get-log-file-changes)[*Get Log File Changes*](https://www.sconstantinou.com/get-log-file-changes/) - -by Stephanos Constantinou on September 7th -Inspired by a recent post on Reddit, see how Stephanos creates a solution to notify with changes to a log file. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#showing-the-uptime-of-all-windows-servers)[*Showing the Uptime of all Windows Servers*](https://sid-500.com/2018/09/09/powershell-showing-the-uptime-of-all-windows-servers/) - -by Patrick Gruenauer on September 9th -Check out a simple function that provides the uptime of all your servers in the domain! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#amazon-announces-aws-lambda-support-for-powershell-core-60)[*Amazon announces AWS Lambda Support for PowerShell Core 6.0*](https://hub.packtpub.com/amazon-announces-aws-lambda-support-for-powershell-core-6-0/) - -by Melisha Dsouza on September 12th -Exciting news about AWS Lambda PowerShell Core 6.0 Support. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#don-jones-on-everything-youre-doing-wrong-in-powershell)[*Don Jones on Everything You're Doing Wrong in PowerShell*](https://redmondmag.com/articles/2018/09/12/don-jones-qa-on-powershell.aspx) - -by Becky Nagel on September 12th -Here's a short Q&A with Don Jones and Redmond Magazine on guidance for being efficient with PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#windows-administration-with-powershell-3-organizing-your-code)[*Windows Administration with PowerShell #3: Organizing Your Code*](https://www.automox.com/blog/windows-admin-powershell-3) - -by Nicholas Almiron on September 12th -Some small tips and tricks to organization of PowerShell Code - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#forums)Forums - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#powershellorg-challenge---unanswered-post)PowerShell.org Challenge - Unanswered Post - -[*ProcessID Using RunspaceID and Logs*](https://powershell.org/forums/topic/finding-powershell-processid-using-runspaceid-and-logs/) by Deep Droid on September 10th -There's a challenging question on the forums that needs a response. Topic is related to event logging and runspaces. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#reddit-rpowershell---most-popular-post)Reddit /r/PowerShell - Most Popular Post - -[*Give Your Clients SLAPS*](https://www.reddit.com/r/PowerShell/comments/9dj5dn/give_your_clients_slaps_a_colleague_of_mine_wrote/) by u/Pietovic on September 7th -Check out a scripted approach to a serverless local administrator password solution using Azure Functions, Azure Key Vault, and Microsoft Intune. This solution was published by John Seerdeen on his [*blog*](https://www.srdn.io/2018/09/serverless-laps-powered-by-microsoft-intune-azure-functions-and-azure-key-vault/). - -## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#media)Media - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#twitter)Twitter - -[*If you know PowerShell, you just became more valuable*](https://twitter.com/jsnover/status/1039711699933118464) by Jeffrey Snover on September 11th -Jeffey's tweet links to Amazon's announcement to support PowerShell Core with AWS Lamda! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#youtube)Youtube - -[*The PowerShell PowerHour_Episode 3*](https://www.youtube.com/watch?v=sRdoCrA-PnU&feature=push-lbss&attr_tag=zjw54qjfXcesPhjF%3A6) by PSPowerHour on September 13th -The third edition of PowerHour includes lightning demos on troubleshooting basics, managing Docker in Visual Studio Code, customizing a Windows desktop, infrastructure testing, WPFBot3000, advanced BurntToast notifications, and a walkthrough on the PSLogging class. diff --git a/content/articles/2018-09-21-icymi-powershell-week-of-21-september-18.md b/content/articles/2018-09-21-icymi-powershell-week-of-21-september-18.md deleted file mode 100644 index 57d7e0306..000000000 --- a/content/articles/2018-09-21-icymi-powershell-week-of-21-september-18.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 21-September-18" -authors: - - Greg Tate -date: "2018-09-21T15:00:35+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/09/icymi-powershell-week-of-21-september-18/ ---- - -Topics Azure Pipelines, PowerShell Core 6.1, PowerShell on Arch Linux, and the PSPowerHour. - - - -Special thanks to our PowerShell.org volunteers Mark Roloff, Brett Bunker, and Robin Dadswell. -If you'd like to become part of the ICYMI team then send a request to willa@powershell.org. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180921.md#announcing-powershell-core-61)[*Announcing PowerShell Core 6.1*](https://blogs.msdn.microsoft.com/powershell/2018/09/13/announcing-powershell-core-6-1/) - -by Joey Aiello on September 13th -The latest major release of PowerShell introduces compatibility with in-box modules for Windows PowerShell v5, performance improvements, and markdown cmdlets. PSCustomObject now has a count property and supports the Where and ForEach methods. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180921.md#powershell--arch-linux--awesome)[*Powershell + Arch Linux = AWESOME!*](https://ephos.github.io/posts/2018-9-17-Pwsh-ArchLinux) - -by Rob Pleau on September 17th -Arch Linux is known as being for geeks that love to tinker (or masochists, depending on who you ask) and now you can tinker with Core on Arch. Rob has put together a great guide on getting the cross-platform PowerShell Core to run on his favorite distribution. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180921.md#fun-with-select-object-and-proxycommand)[*Fun with Select-Object (and ProxyCommand)*](https://blog.iisreset.me/fun-with-select-object-and-proxycommand/) - -by Mathias Jessen on September 19th -Suppose there's a cmdlet that just doesn't quite work the way you need. If only you could tweak the behavior a little... Or a lot. Mathias wrote a great introduction to using .NET's ProxyCommand class to create customized versions of PowerShell cmdlets. This opens the door to some pretty cool and fun possibilities. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180921.md#converting-a-powershell-project-to-use-azure-devops-pipelines)[*Converting a PowerShell Project to use Azure DevOps Pipelines*](https://www.powershellmagazine.com/2018/09/20/converting-a-powershell-project-to-use-azure-devops-pipelines/) - -by Daniel Scott-Raynsford on September 20th -Learn how to hook up your GitHub account to an Azure DevOps organization and use Azure Pipelines for PowerShell Core projects across Windows, Linux, and macOS! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180921.md#powershell-building-modules-with-the-azure-devops-pipeline)[*PowerShell: Building Modules with the Azure DevOps Pipeline*](https://kevinmarquette.github.io/2018-09-20-Powershell-Building-Modules-with-the-Azure-DevOps-Pipeline/) - -by Kevin Marquette on September 20th -Kevin provides a separate take on using Azure DevOps Pipelines to enable continuous integration with GitHub. - -###### [*PSWinReporting - Monitoring Active Directory Events and Sending it to Email, Microsoft Teams, Slack, SQL*](https://www.reddit.com/r/PowerShell/comments/9gcvgk/pswinreporting_monitoring_active_directory_events/) - -by u/MadBoyEvo on September 17th -The top post on Reddit this week covers an interesting module that notifies you for event changes in Active Directory, such as adding users to Domain Admins. There are options for recording these events in Microsoft Teams and SQL! - -###### [*Get a Free T-shirt!*](https://twitter.com/TylerLeonhardt/status/1042421922317852672) - -by @TylerLeonhardt on September 19th -Submit a pull request to a Microsoft repo in October and get a limited edition t-shirt! - -###### [*PSPowerHour Episode 4*](https://www.youtube.com/watch?v=UTuwnDtaTWQ) - -by PSPowerHour on September 19th -The fourth edition of PSPowerHour includes the following topics: - - * ProxyCommands (Joel Bennett) - * PSReflect-Functions (Jared Atkinson) - * VaporShell (Nate Ferrell) - * Implicit remoting (Stepehn Valdinger) - * Docker Compose (Fancisco Navarro) - * VSTS Extensions (Thomas Rayner). diff --git a/content/articles/2018-09-28-icymi-powershell-week-of-28-september-18.md b/content/articles/2018-09-28-icymi-powershell-week-of-28-september-18.md deleted file mode 100644 index a7566e3f7..000000000 --- a/content/articles/2018-09-28-icymi-powershell-week-of-28-september-18.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 28-September-18" -authors: - - Greg Tate -date: "2018-09-28T15:00:54+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/09/icymi-powershell-week-of-28-september-18/ ---- - -Topics include PowerShell Rest API on AWS Lamda, web applications in PowerShell, using PowerBI to show DB restores, input validation in functions, PowerShell command history, and the Unplugged session at Ignite with Jeffrey Snover and Jason Helmick. - - - -Special thanks to Mark Roloff and Brett Bunker for pulling it all together this week! - -##### [*Creating a PowerShell REST API (AWS)*](https://aws.amazon.com/blogs/developer/creating-a-powershell-rest-api/) - -by Norm Johanson on September 23rd -In case you missed it, support for PowerShell Core on AWS Lambda is now a thing. And to help showcase how cool of a thing that is, this article from the AWS Developer Blog walks us through setting up a PowerShell REST API with the Amazon API Gateway. - -##### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190928.md#building-a-simple-form-using-powershell-polaris-module)[*Building a simple form using PowerShell Polaris module*](https://chen.about-powershell.com/2018/09/building-a-simple-form-using-powershell-polaris-module/) - -by Chen V on September 23rd -If I were a betting man, I'd wager you didn't know there's a web framework for PowerShell (multiple, actually). Chen's blog gives us a brief demonstration of how you can leverage Polaris to build simple web applications in PowerShell. - -##### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190928.md#automate-your-sql-server-restore-tests-with-powershell-dbatools-and-powerbi)[*Automate your SQL Server Restore Tests with PowerShell, dbatools and PowerBI*](https://marcosfreccia.com/2018/09/24/automate-sql-server-restore-tests/) - -by Marcos Freccia on September 24th -If you've been in this gig for any time at all, you know the importance of backups. Especially tested backups. You do test them, right? Well, Marcos here does. In fact, he even has a PowerBI dashboard to show him the results of his database restores at a glance. Read on to see how he sets it all up, along with a link to the GitHub repo. - -##### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190928.md#how-to-validate-input-in-powershell-functions-part-1)[*How To Validate Input in PowerShell Functions, Part 1*](https://redmondmag.com/articles/2018/09/25/validate-input-in-powershell-functions-1.aspx) - -by Brien Posey on September 25th -It happens to everyone. You spend all afternoon working on that script, test it, hand it off, and Gomer Pyle finds a way to make it break by passing in data that you didn't think of. What you need is input validation. Brien kicks things off with an introduction to _ValidateSet_ to help you get a handle on exactly what data people can supply your scripts. - -##### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190928.md#previous-command-history-in-powershell)[*Previous Command History in PowerShell*](http://woshub.com/powershell-commands-history/) - -by Windows OS Hub on September 27th -Prior to Windows PowerShell v5, if you closed the PowerShell window, then you lost your command history. Well, this behavior has now changed. Learn how the built-in PSReadline module provides a persistent command line history across PowerShell instances. - -##### [*PowerShell.org Challenge - Unanswered Post*](https://powershell.org/forums/topic/automatically-save-outlook-message-2/) - -Wayne needs help on understanding how to parameterize an email address in his script. Please jump in and offer some help! - -##### [*New Module PUDAdminCenterPrototype*](https://www.reddit.com/r/PowerShell/comments/9hqu76/new_module_pudadmincenterprototype_a_universal/) - -Based on the popular PowerShell Universal Dashboard, /u/fourierswager brings us a new tool to assist with remotely managing WIndows systems in a web-based GUI. Restart systems, RDP in, and view all manner of information about what's happening on your hosts. This is a pretty sweet project with lots of potential! - -##### [*Introducing the 'Fluxor' PowerShell Module!*](https://twitter.com/vmkdaily/status/1043358314321661952) - -by @vmkdaily on September 21st -Now here's a cool thing for you vSphere admins. Mike Nist introduces a new cross-platform module, Fluxor, for collecting stats from vSphere, which can then be exported to InfluxDB for nice visualizations of your environment. - -##### [*PowerShell Unplugged with Jeffrey Snover and Jason Helmick*](https://www.youtube.com/watch?v=DPICqEiz3m4) - -If you weren't fortunate enough to attend Microsoft Ignite this year, be sure to set aside some time to watch the PowerShell Unplugged session. Jeffrey and Jason discuss the current state of PowerShell, including some of its cool new features and awesome community. diff --git a/content/articles/2018-10-04-free-beta-ebook-powershell-org-history-of-a-community.md b/content/articles/2018-10-04-free-beta-ebook-powershell-org-history-of-a-community.md deleted file mode 100644 index ea2af3461..000000000 --- a/content/articles/2018-10-04-free-beta-ebook-powershell-org-history-of-a-community.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Free (beta) eBook: PowerShell.org, History of a Community" -authors: - - Don Jones -date: "2018-10-04T14:45:03+00:00" -categories: - - Books -legacy_featured_image: /wp-content/uploads/2018/10/cover-small.png -aliases: - - /2018/10/free-beta-ebook-powershell-org-history-of-a-community/ ---- - -Now available in "preview" is a new ebook, _**PowerShell.org: History of a Community. **_ -There's still a bit left to write, but this short (under 30 pages at the moment) ebook is designed to share some of what went into the building of PowerShell.org, the PowerShell Summit, and so on. The goal is to help those who may become involved with the organization in the future understand some of the decisions that have been made to this point. It's also intended as a collection of "lessons learned" about building and nurturing a technology community in general, for anyone who might be interested. It digs a bit into the organization's path to being a nonprofit, as well. -Grab the book now from . I suggest allowing Leanpub to email you when it's updated, as it assuredly will be. -I'd very much like _your_ feedback. Ask questions - what about the organization and its past or future isn't currently covered? What questions does the book leave you with after you read it? What could make it more helpful, or clearer? Feel free to drop comments right here on this post, or use the book's "Email the author(s)" link on Leanpub to send an email. diff --git a/content/articles/2018-10-05-icymi-powershell-week-of-5-october-2018.md b/content/articles/2018-10-05-icymi-powershell-week-of-5-october-2018.md deleted file mode 100644 index eb3214467..000000000 --- a/content/articles/2018-10-05-icymi-powershell-week-of-5-october-2018.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 5-October-2018" -authors: - - Greg Tate -date: "2018-10-05T15:00:38+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/10/icymi-powershell-week-of-5-october-2018/ ---- - -Topics include the **Az** module, PowerShell module design, PowerShell & Puppet, Hacktoberfest, SQL Server backups, and a PowerShell session from Ignite. - - - -Special thanks to Mark Roloff, Robin Dadswell, and Brett Bunker for contributions this week. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181005.md#announcing-new-module-az)[_Announcing New Module 'Az'_][1] - -by Mark Cowlishaw on Friday, September 28th -The Az module is intended as a replacmeent for AzureRM and will become the new standard Azure PowerShell commands. The final feature update to AzureRM will be in December 2018. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181005.md#learning-about-the-powershell-abstract-syntax-tree-ast)[*Learning about the PowerShell Abstract Syntax Tree (AST)*](https://mikefrobbins.com/2018/09/28/learning-about-the-powershell-abstract-syntax-tree-ast/) - -by Mike Robbins on Friday, September 28th -Mike is on a journey to piece together many separate script files into a single PSM1 file. Rather than rely on potentially complicated regex or string parsing to do the job, he opts for exploring how with PowerShell's far more interesting Abstract Syntax Tree. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181005.md#executing-puppet-tasks-with-powershell-via-the-puppet-orchestrator-api)[*Executing Puppet Tasks with PowerShell via the Puppet Orchestrator API*](https://www.joeypiccola.com/puppet-tasks-via-powershell/) - -by Joey Piccola on Sunday, September 30th -Interested in using PowerShell to manage Puppet? Learn how with a quick tutorial on using the Puppet Orchestrator API with **Invoke-WebRequest**. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181005.md#i-need-you-hacktoberfest)[*I Need You! #Hacktoberfest*](https://king.geek.nz/2018/10/02/hacktoberfest-2018/) - -by Josh King on Monday, October 1st -Hacktoberfest is officially in full swing and there are tons of open-source projects out there looking for some love. Josh King, creator of the BurntToast module, has a project board set up with tasks to complete for the module's next release. If you're looking for a chance to contribute more openly to the PowerShell community or would just like a project for the month's event, stop in and take a look. - -###### [*Does it Loop? Foreach Experiences with an Emtpy Variable*](https://patrickwahlmueller.wordpress.com/2018/10/03/does-it-loop-foreach-experiences-with-empty-variable/) - -by Patrick Wahlmüller on October 3rd -Patrick shares an important lesson to consider when using the **foreach** scripting construct:  initialize your variables! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181005.md#ms-sql-db-backup-and-restore-with-powershell)[*MS SQL DB Backup and Restore with PowerShell*](https://www.scriptinglibrary.com/languages/powershell/ms-sql-db-backup-and-restore-with-powershell/) - -by Pauolo Frigo on October 4th -Find out how easy it is to automate your SQL Server backup jobs using the **SQLServer** PowerShell module. Hint: It's a lot easier than point-and-clicking your way through SQL Server Management Studio! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181005.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/9lcrmk/breaking_change_with_powershell_jobs_and_the/) - -For those of you deploying Windows 10 1809, watch out for a change in behavior when calling **cmd.exe** within a scriptblock using **start-job**. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181005.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/JanEgilRing/status/1048069179222495233) - -Major increase in coverage for PowerShell Core running on Windows 10 1809 compared to 1803! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181005.md#youtube-powershell-cross-platform-scripting-and-ai-infused-automation)[*Youtube: PowerShell Cross-Platform Scripting and AI-Infused Automation*](https://www.youtube.com/watch?v=1EVHChiqZOw) - -By Jeffrey Snover on September 30th -Demo-rich show that looks at the evolution of PowerShell as the de facto automation scripting tool across Windows and Linux platforms as presented by the father of PowerShell, Jeffrey Snover. Check out the ability for Visual Studio Code to run PowerShell inside of CloudShell. - - [1]: https://github.com/Azure/azure-powershell/blob/preview/documentation/announcing-az-module.md diff --git a/content/articles/2018-10-12-icymi-powershell-week-of-12-october-2018.md b/content/articles/2018-10-12-icymi-powershell-week-of-12-october-2018.md deleted file mode 100644 index 012f7d1c0..000000000 --- a/content/articles/2018-10-12-icymi-powershell-week-of-12-october-2018.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 12-October-2018" -authors: - - Greg Tate -date: "2018-10-12T15:00:00+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/10/icymi-powershell-week-of-12-october-2018/ ---- - -Topics include the Switch statement, Chocolatey Fest, Graph API, HTML disk reports, auditing Office 365 document sharing and Teams usage. - - - -Special thanks to Mark Roloff for his creative writing and Robin Dadswell for content curation! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181012.md#powershell-switch)[*PowerShell Switch*](https://www.sconstantinou.com/powershell-switch/) - -by Stephanos Constantinou on October 8th -There are times when we've got a large number of conditions to check against and having more than a few _if_ statements gets pretty ugly real fast. Enter the _switch_ statement. Stephanos has written a nice rundown of how to use it when evaluating lots of conditions, as well as some of its more advanced features. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181012.md#my-chocolateyfest-winops-conference-experience)[*My Chocolateyfest (WinOps) Conference Experience*](https://winsysblog.com/2018/10/my-chocolateyfest-winops-conference-experience.html) - -by Dan Franciscus on October 9th -In a more community-meta post, Dan shares his thoughts after attending this year's Chocolatey Fest; that's a conference broadly focused around everything Windows automation. I didn't know much about the event before, but Dan's candid perspective of the experience has convinced me to mark my calendar for hopefully attending next year. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181012.md#getting-started-with-graph-api-and-powershell)[*Getting started with Graph API and PowerShell*](https://alexholmeset.blog/2018/10/10/getting-started-with-graph-api-and-powershell/) - -by Alexander Holmeset on October 10th -We love playing with cool new APIs, and while the Graph API isn't exactly new, to a lot of people it probably is. It can also open the door to a lot of cross-service automation for those of us working in the Azure/O365 world. Alexander has published a great introduction to Graph, how to explore it, and how to get started using it in your PowerShell scripts. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181012.md#creating-colorful-html-disk-reports-with-powershell)[*Creating Colorful HTML Disk Reports with PowerShell*](https://jdhitsolutions.com/blog/powershell/6130/creating-colorful-html-disk-reports-with-powershell/) - -by Jeffrey Hicks on October 11th -One of the best ways to expand your scripting knowledge is to read someone else's work. Jeff has offered an opportunity to do that right here. In this post, he found an old script, and decided to dust it off and add some new features to it. The result is a clean and professional looking HTML report. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181012.md#a-quick-start-guide-for-powershell-i-made-for-work)[*A quick start guide for powershell I made for work*](https://old.reddit.com/r/PowerShell/comments/9mpf9u/a_quick_start_guide_for_powershell_i_made_for_work) - -There doesn't seem to ever be any real shortage of newcomers to PowerShell, so it's no surprise that new beginner material is always popping up. Reddit user /u/tamtt has thrown together a pretty nice guide to getting started, with quick explanations and examples of many foundational concepts. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181012.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/gerbrandvdweg/status/1049928642015444992) - -Stepping back from highlighting just popular media for a moment, we felt that this interaction served as a nice reminder of how accessible help in the community is. One of our team members also got burned by this error in a PowerShell module, but the maintainers were able to point to a quick and easy solution. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181012.md#youtube-getting-stuff-done-solving-office-365-problems-with-powershell)[*Youtube: Getting Stuff Done: Solving Office 365 Problems with PowerShell*](https://www.youtube.com/watch?v=yUY2_fwKmoY) - -This 20-minute session from Ignite covers a number of useful tips around auditing document sharing, Teams usage, and license management. Topics include using the Office 365 audit log to discover who's creating new Office 365 Groups, analyzing document sharing habits, understanding guest user activity, investigating Teams compliance, managing license features, and finding **pwned** mailboxes. diff --git a/content/articles/2018-10-12-powershell-devops-summit-2019-update-agenda-online.md b/content/articles/2018-10-12-powershell-devops-summit-2019-update-agenda-online.md deleted file mode 100644 index 13db92106..000000000 --- a/content/articles/2018-10-12-powershell-devops-summit-2019-update-agenda-online.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: PowerShell + DevOps Summit 2019 Update – Agenda Online! -authors: - - Don Jones -date: "2018-10-12T10:01:47+00:00" -categories: - - PowerShell Summit -legacy_featured_image: /wp-content/uploads/2018/08/Full-Logo-No-year.png -aliases: - - /2018/10/powershell-devops-summit-2019-update-agenda-online/ ---- - -Missy Januszko and Warren Frame, our Co-Directors of Summit Content for 2019, have finally completed the arduous task of combing through the dozens of topic submissions from all of you in the community! The Official Agenda is now online, and is linked [from the main Summit page][1]! - - - -You'll find some other key resources on that page as well, including: - - * Information about our new entry-level OnRamp hands-on track - * Links to our new Official App (highly recommended) - * The Summiteer Manual, freshly updated with key facts for 2019 - -Registration opens 1-November-2018 (links are on the main page along with everything else), and we look forward to seeing you! - - - [1]: http://powershellsummit.org diff --git a/content/articles/2018-10-19-icymi-powershell-week-of-19-october-2018.md b/content/articles/2018-10-19-icymi-powershell-week-of-19-october-2018.md deleted file mode 100644 index c84361f17..000000000 --- a/content/articles/2018-10-19-icymi-powershell-week-of-19-october-2018.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 19-October-2018" -authors: - - Mark Roloff -date: "2018-10-19T15:00:49+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/10/icymi-powershell-week-of-19-october-2018/ ---- - -Topics include creating PSObjects, a deep dive on arrays, controlling your Raspberry Pi with the IoT module, and more... - - - -Brought to you by your ICYMI team: Brett Bunker, Robin Dadswell, Mark Roloff, and Greg Tate. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181019.md#input-object-subproperty-tip)[*Input Object Subproperty Tip*](https://andrewpla.github.io/Input-Object-Subproperty-Tip/) - -by Andrew Pla on October 14th -Suppose the output of one function isn't quite in the format needed for the next in a pipeline. You may think of calculated properties with _Select-Object_ but if these are custom functions, you can cut the middle-man out entirely. Andrew developed a simple and clever solution for this by using the _param_ block of receiving function. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181019.md#ps-core---numeric-literals)[*PS Core - Numeric Literals*](https://vexx32.github.io/PS-Core-Numeric-Literals/) - -by Joel Francis on October 14th -If you don't know Joel, he's a helpful regular in the community and a PS Core contributor. In his first blog, he discusses PowerShell's somewhat dodgy support for large numeric literals and introduces newly implemented ones to address that shortcoming. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181019.md#everything-you-wanted-to-know-about-arrays)[*Everything you wanted to know about arrays*](https://kevinmarquette.github.io/2018-10-15-Powershell-arrays-Everything-you-wanted-to-know/) - -by Kevin Marquette on October 15th -Time to jump down the rabbit hole and dive deep into PowerShell's arrays. Building them, using them with operators, the various types, and more. Like his much touted guide to hashtables, Kevin's guide to arrays belongs in your bookmarks folder. Like, now. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181019.md#4-ways-to-create-powershell-objects)[*4 Ways to Create PowerShell Objects*](https://ridicurious.com/2018/10/15/4-ways-to-create-powershell-objects/) - -by Prateek Singh on October 15th -Everyone's got their favorite way to create objects. You probably know a few different ones, too. Today, I learned one I didn't know. Prateek's latest blog shows you 4 ways to create custom objects in PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181019.md#running-ping-tests)[*Running Ping tests*](https://richardspowershellblog.wordpress.com/2018/10/16/running-ping-tests/) - -by Richard Siddaway on October 16th -In prior posts over the weekend, Richard walked us through gathering some general network info for troubleshooting and using Pester for ping tests. Now, he shows us how to take those prior scripts and wrap them up in a control script to glue all of the functionality together. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181019.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/9oz1ie/powershell_is_the_4_fastest_growing_language_of/) - -The PowerShell-verse is growing, and perhaps one of the best indicators of this is that it is officially the fourth fastest growing language on GitHub. It's a little crazy to think that a language made for Windows automation would pull off something like that but here we are; cross-platform, open-sourced, making waves. And it's pretty cool. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181019.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/DirectoryRanger/status/1051072287699558401) - -This is a fun find. @DirectoryRanger pointed us to a PowerShell script written by Mike Loss. The script, Grouper, analyzes the XML from Get-GPOReport to identify security holes in policy settings. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181019.md#youtube-anzpsug---october-2018)[*Youtube: ANZPSUG - October 2018*](https://www.youtube.com/watch?v=5m9PnWBF1vI) - -This month's Australia and New Zealand PowerShell User Group featured guest speaker Daniel Silva. In a departure from the typical admin-related use-cases, Daniel gives a great presentation on using PowerShell Core with the Raspberry Pi, including the IoT module. diff --git a/content/articles/2018-10-19-powershell-org-site-maintenance-today.md b/content/articles/2018-10-19-powershell-org-site-maintenance-today.md deleted file mode 100644 index 1b53b56a9..000000000 --- a/content/articles/2018-10-19-powershell-org-site-maintenance-today.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: PowerShell.org Site Maintenance Today -authors: - - Don Jones -date: "2018-10-19T14:27:59+00:00" -categories: - - Announcements -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_703607812.jpg -aliases: - - /2018/10/powershell-org-site-maintenance-today/ ---- - -PowerShell.org will be undergoing upgrading and maintenance on Friday and Saturday. We'll leave the site open, as Articles and Forums should remain accessible, but the site may look a little rough around the edges at times. -The site does use some pretty aggressive caching, so if you're visiting throughout the day, use a force-reload (Shift+Refresh or whatever in your browser) to pull a fresh set of pages as we work. -We hope to have everything done by Sunday morning. diff --git a/content/articles/2018-10-22-powershell-and-devops-global-summit-2019-post-cfp-thoughts.md b/content/articles/2018-10-22-powershell-and-devops-global-summit-2019-post-cfp-thoughts.md deleted file mode 100644 index ef09f32be..000000000 --- a/content/articles/2018-10-22-powershell-and-devops-global-summit-2019-post-cfp-thoughts.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: PowerShell and DevOps Global Summit 2019 – Post-CFP Thoughts -authors: - - Missy Januszko -date: "2018-10-22T08:00:49+00:00" -categories: - - PowerShell for Admins -aliases: - - /2018/10/powershell-and-devops-global-summit-2019-post-cfp-thoughts/ ---- - -Now that Warren Frame and I have finally come up for air after reviewing all the submissions for the 2019 PowerShell and DevOps Global Summit, we wanted to send a great big THANK YOU!!! to all who submitted.  You all definitely made our job challenging and we think we have a fabulous lineup for this year’s show! - - - -Many of you have asked for feedback regarding your submissions, and while we would love to send everyone individualized feedback - with the sheer number of submissions, that just isn’t feasible.  - - - - -But we did want to share some thoughts that we had while reviewing the submissions and talk about what made a submission stand out to us.  We also wanted to provide some statistics on the submissions, so you know what topics were uber-popular and which weren’t (spoiler: “Release Pipeline” won hands down for most submissions).  Warren has provided a great writeup on how we were able to narrow the field down from 200 to around 60 here:  -[http://ramblingcookiemonster.github.io/Summit-CFP/](http://ramblingcookiemonster.github.io/Summit-CFP/) - - - -There are still numerous ways to share your ideas and stories at Summit.  Sign up for the lightning demos, or a side session, or share your war stories at your lunch table.  Many good ideas for sessions start as casual conversation or an “I wish I had a way to do ‘X’” … and definitely, submit again for next year!  And don’t forget to register starting November 1st - -! diff --git a/content/articles/2018-10-24-powershell-org-site-status-update.md b/content/articles/2018-10-24-powershell-org-site-status-update.md deleted file mode 100644 index 559ae62a7..000000000 --- a/content/articles/2018-10-24-powershell-org-site-status-update.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: PowerShell.org Site Status Update -authors: - - Don Jones -date: "2018-10-24T17:45:55+00:00" -categories: - - Announcements -legacy_featured_image: /wp-content/uploads/2018/10/shutterstock_144607415.jpg -aliases: - - /2018/10/powershell-org-site-status-update/ ---- - -_This post will be periodically updated as needed, so feel free to check back._ -Our site upgrade and re-theme is going well, and I wanted to outline some of the major changes and current issues. If you're encountering any lingering issues, please drop a comment; rather than replying, I'll update the main article. - - - -The **new theme** is largely successful and is fully implemented. We've seen some issues with the pop-up login/register dialog for some users; you can always visit - if you need a non-pop-up login experience. -The **new user profile and directory system** is online. This includes a Member Directory, and a [Verified Profile Program][2]. Please read about the program very carefully if you intend to participate. We've unfortunately seen a lot of profiles missing photos, including photos of someone's dog, or using unacceptable Display Names. Not being in the Program does not impact your ability to use the rest of the site, but if you want to be in the Member Directory, you'll need to comply with the rules. -The new user profile system also, by default, **was sending clear-text passwords** for new registrations and password changes. That is demonstrably a bad idea, and I've finally figured out how to fix it. The problem was an interaction between about nine plugins and the core WordPress code, which took a hot minute (whilst dodging justifiably angry emails) to unravel. -If you are requesting a **password reset** and not getting the email, your spam filters are blocking it. Sorry. Emails of that type are commonly sent as phishing attempts, and so that's why they get blocked. You're welcome to create a new account, if you wish. -**Forums notifications** were known to be not-working and are now verified to be working. If you're not getting them, check the spam filters. -The specialized **forums views, **including things like "Topics with No Replies," are borked. That's on my list. -From the **authentication** front, we do not yet support 2FA. We're speaking with the user manager module developer about adding that, as whatever we do needs to be compatible with that module. We'll aim for Authy/Authenticator first, and then move on to working on physical tokens like yubikey. It is too early to place requests for Your Favorite 2FA to be supported. -**UPDATE: **Also in the **authentication** front, I've been looking into re-adding social logins (Twitter, etc) to the site. At this time I'm pausing that effort. While I grok the convenience, there are some serious downsides, like a total inability to influence whatever the social services decide to impose in terms of rules from moment to moment. Removing one of those services, once you rely on it, is damn near impossible, and I'm not necessarily keen to give companies like Facebook any more hooks into people's lives. We're instead going to try and focus deeply on enabling 2FA within the site, to provide a more secure login experience right here. Seeing how Facebook has been using people's mobile phone numbers (provided to FB only to enable 2FA) for ad targeting, I'm just even more distrustful of what they're doing with their login services. The general feeling in the InfoSec community is "don't do social logins to your websites" and that's kind of where I'm at right now. -We've added support for **Ranks & Badges **on the site, which display in your [profile][3] and are attached to site activity. Open to suggestions on how to expand that program, and know that the current badge graphs are drafts until we have some proper ones made by someone talented. Volunteers welcome. -I think that's it. If I'm missing anything, ask in the Comments, and I'll update above. - - - - [2]: https://powershell.org/members/our-verified-profile-program/ - [3]: /profile diff --git a/content/articles/2018-10-26-icymi-powershell-week-of-26-october-2018.md b/content/articles/2018-10-26-icymi-powershell-week-of-26-october-2018.md deleted file mode 100644 index 614f70cc0..000000000 --- a/content/articles/2018-10-26-icymi-powershell-week-of-26-october-2018.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 26-October-2018" -authors: - - Mark Roloff -date: "2018-10-26T15:00:06+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/10/icymi-powershell-week-of-26-october-2018/ ---- - -Topics include plenty of AST, using the WindowsCompatibility module, Azure Cloud Shell updates, and many more... - - - -Brought to you by your ICYMI team: Brett Bunker, Robin Dadswell, Mark Roloff, and Greg Tate. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181026.md#introducing-windowscompatibility-for-powershell-core)[*Introducing WindowsCompatibility for PowerShell Core*](https://pwsh.nl/2018/10/19/introducing-windowscompatibility-for-powershell-core/) - -by Gerbrand van der Weg on October 19th -The **WindowsCompatibility** module, which is in Release Candidate right now, aims to ease the transition from Windows PowerShell to PowerShell Core by using PSRemoting to allow you to run your Windows PowerShell modules seamlessly through PowerShell Core. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181026.md#so-you-think-you-can-parse)[*So You Think You Can Parse?*](https://blog.iisreset.me/so-you-think-you-can-parse/) - -by Mathias Jessen on October 22nd -We love deep dives into little niche problems. You always end up learning interesting nuggets that, even if never used, are just plain cool. Mathias has thrown together a pretty rad demonstration of utilizing PowerShell's parser to interpret a string of mixed data types. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181026.md#powershell-module-sysinfo)[*PowerShell Module SysInfo*](https://www.sconstantinou.com/powershell-module-sysinfo/) - -by Stephanos Constantinou on October 24th -This is a pretty handy little module that wraps around CIM cmdlets, making it easier for you to grab hardware details about your computer. In this post, Stephanos gives us a brief tour of his handiwork. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181026.md#office-365-mailbox-forwarding-rules-report-using-powershell)[*Office 365 Mailbox Forwarding Rules Report using PowerShell*](https://www.lazyexchangeadmin.com/2018/10/office-365-mailbox-forwarding-rules.html) - -by June Castillote on October 20th -If you have a need to ever audit email forwarding and redirect rules in your Exchange Online environment, June has got something nice for you. This script will email a report on those rules found to help you get a handle on exactly where people in your organization are forwarding things. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181026.md#learn-about-the-powershell-abstract-syntax-tree-ast--part-3)[*Learn about the PowerShell Abstract Syntax Tree (AST) – Part 3*](https://mikefrobbins.com/2018/10/25/learn-about-the-powershell-abstract-syntax-tree-ast-part-3/) - -by Mike Robbins on October 25th -Mike is up to the third part in his series to learn AST. In this one, he focuses on showing us how to recursively query the AST to find a list of all variables used in a function. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181026.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/9pcu1f/anyone_have_move_in_scripts/) - -Who doesn't enjoy getting a new computer? If you've got a lot of tools and particular configurations, probably you. New hardware is nice but, man, can it be a pain to remember every little thing we need to reinstall. /u/Southpaw018 has a nice solution to this; script it with PowerShell! Check this thread out to see plenty of examples of others' "move-in" scripts. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181026.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/DarrylvdPeijl/status/1054698290850267136) - -If you like to log the start and stop times for your scripts, or see how long it takes your intern to fetch a fresh cup of coffee, you may want to use .NET's Stopwatch class. @DarrylvdPeijl discovered this useful tool and shares a quick screenshot demo. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181026.md#youtube-powershell-in-azure-cloud-shell-ga)[*Youtube: PowerShell in Azure Cloud Shell GA*](https://www.youtube.com/watch?v=1LT4cjeP-28) - -Scott Hanselman and Danny Maertens discuss the GA release of Azure Cloud Shell, now running PS Core 6.1 on Linux. New cmdlets, seamless switching between Bash and PowerShell, a teaser for integrated Exchange Online, and more great features. diff --git a/content/articles/2018-10-29-the-new-powershell-org-logo-and-ebooks-and-swag.md b/content/articles/2018-10-29-the-new-powershell-org-logo-and-ebooks-and-swag.md deleted file mode 100644 index 835565e28..000000000 --- a/content/articles/2018-10-29-the-new-powershell-org-logo-and-ebooks-and-swag.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: The New PowerShell.org Logo (and eBooks! and Swag!) -authors: - - Don Jones -date: "2018-10-29T14:37:27+00:00" -categories: - - Announcements -legacy_featured_image: /wp-content/uploads/2018/10/website-featured-image-for-announcements.png -aliases: - - /2018/10/the-new-powershell-org-logo-and-ebooks-and-swag/ ---- - -If you check out our free eBook, [_PowerShell.org: History of a Community_][1], you'll see both the original PowerShell.org logo and our second, "Metro-fied" take on it. The first one is probably easy to make sense of, with the PowerShell logo superimposed over the Earth, suggesting a global community. The "Metro" version go a bit abstract, since the Earth became just a simple round circle. -What both logos lacked was a clear commitment to a diverse community of _people. _Part of the recent re-launch of PowerShell.org included our Community Member Directory, with [specific rules of inclusion][3] that are designed to emphasize the _people_ in our community, and to highlight their contributions and accomplishments. -With that in mind, today we're launching a new logo for PowerShell.org. It's designed to clearly communicate "people working together around PowerShell," and it stands as a more unique identifier for this website and the community it supports. We're also launching a page to help people understand how they can [contribute to the broader community][4], using PowerShell.org as a platform for their efforts. -In celebration of our new logo, we're offering an exclusive, **limited-time** selection of cool merchandise. All proceeds benefit our nonprofit programs, and be aware that these items will only be available for a few months. You can [visit our Zazzle Store now][5] to start selecting your items. Pay close attention, because many of them offer customization options for style, color, size, and so on. We're aware that a few of the prices are a bit on the higher side, but that's the nature of these one-of-a-kind, print-on-demand items, as we can't financially or logistically bulk-order, warehouse, and fulfill items ourselves. Keep in mind that Zazzle routinely offers significant discount codes, too - watch their site for those. And yes, some of the items _are_ a little silly, but we couldn't resist putting the logo on stuff like Oreo cookies, cake pops, and wrapping paper. -We're also re-branding [our library of free eBooks][6] with all-new covers featuring the new logo. If you've not checked them out, this is a great time to download the entire collection (any money you choose to pay supports our nonprofit programs, and you're welcome to pay nothing). If you've already got them, go ahead and re-download these great new covers. Don't forget to let Leanpub notify you via email of updates, as these are "living books," open-source hosted in GitHub, and we do periodically make corrections and updates. -We hope you'll join us in spreading the word, and welcome to the new PowerShell.org! - - [1]: https://leanpub.com/powershellorghistoryofacommunity - [3]: https://powershell.org/members/our-verified-profile-program/ - [4]: https://powershell.org/contributing/ - [5]: https://www.zazzle.com/powershellorg/products - [6]: https://leanpub.com/u/devopscollective diff --git a/content/articles/2018-11-02-icymi-powershell-week-of-2-november-2018.md b/content/articles/2018-11-02-icymi-powershell-week-of-2-november-2018.md deleted file mode 100644 index 87fb53031..000000000 --- a/content/articles/2018-11-02-icymi-powershell-week-of-2-november-2018.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 2-November-2018" -authors: - - Mark Roloff -date: "2018-11-02T15:00:16+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/11/icymi-powershell-week-of-2-november-2018/ ---- - -Topics include analyzing your scripts for code injection, configuring DSC with SQL, presentations from PSConfAsia, and more... - - - -Intertubes scoured for content by Brett Bunker, Robin Dadswell, and Mark Roloff. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181102.md#how-to-secure-powershell-remoting-in-a-windows-domain)[*How To Secure PowerShell Remoting In A Windows Domain*](https://www.networkadm.in/securing-powershell/) - -by Mike Kanakos on October 27th -Digging into the security considerations surrounding PowerShell remoting can be a bit daunting. Fortunate for the rest of us, Mike was recently tasked with defining PowerShell's security posture in his organization and has written about his findings in this blog post. This is a great place to dive in for anyone looking to learn about it. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181102.md#using-powershell-injection-hunter-at-scale)[*Using PowerShell Injection Hunter at Scale*](https://p0w3rsh3ll.wordpress.com/2018/10/30/using-powershell-injection-hunter-at-scale/) - -by Emin Atac on October 30th -Malicious code injection probably isn't something many of us think about often, but we probably should. The InjectionHunter module can help you spot these in your scripts, but only if you pass them in as a ScriptBlockAst. Emin wanted something more accessible. This is a pretty cool write up about how Emin wrote a function to extend the inputs for this module, making it easier to analyze your code for these particular issues. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181102.md#powershell-script-module-design-building-tools-to-automate-the-process)[*PowerShell Script Module Design: Building Tools to Automate the Process*](https://mikefrobbins.com/2018/11/01/powershell-script-module-design-building-tools-to-automate-the-process/) - -by Mike Robbins on November 1st -Mike is up to the fourth part in his series on PowerShell's AST. In this post, he pulls together knowledge from the previous three to build an advanced function which can pull in code from a variety of sources and output an AST from it. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181102.md#dsc-pull-server-reloaded-part-3-pre-create-the-pull-server-database)[*DSC Pull Server reloaded. Part 3: Pre-create the Pull Server Database*](https://bgelens.nl/dsc-pull-server-reloaded-part-3-precreate-pull-server-database/) - -by Ben Gelens on November 1st -Windows Server is introducing the capability for a SQL-backed DSC pull server, and Ben has been working on a series to explore that. In his third post, he dives into configuring an Azure SQL instance, setting up the pull server, and registering a node. All with PowerShell! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181102.md#how-to-use-internal-powershell-gallery-app)[*How to use Internal PowerShell Gallery App*](https://practical365.com/blog/how-to-use-internal-powershell-gallery-app/?utm_content=79231324) - -by Daler Sayfiddinov on November 2nd -Here's an interesting way to store and distribute your scripts internally. Daler shows us how to use a SharePoint list as a backend repository with PowerApps acting as a frontend. Search, filtering, and the ability to submit new scripts all built-in. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181102.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/9sxkzh/i_just_want_to_thank_the_whole_community_for/?st=jnzk5fyx&sh=44be7d78) - -/u/WhatTheHomePod just wants to spread a little love and appreciation by thanking /r/PowerShell for being such an awesome community that helped them to get started learning this great tool. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181102.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/cyberhayden/status/1057098123720310785) - -If cloud security is part of your jam, Azure ATP can now help you monitor for remote PowerShell execution. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181102.md#livestream-manage-your-heterogeneous-environments-with-powershell-core)[*LiveStream: Manage Your Heterogeneous Environments with PowerShell Core*](https://livestream.com/gaelcolas/PSConfAsia/videos/182706737) - -At this year's PSConfAsia, Steve Lee gave a great presentation that shows off some of the great cross-platform features that he and his team have brought to PS Core. diff --git a/content/articles/2018-11-09-icymi-powershell-week-of-9-november-2018.md b/content/articles/2018-11-09-icymi-powershell-week-of-9-november-2018.md deleted file mode 100644 index e44b1913b..000000000 --- a/content/articles/2018-11-09-icymi-powershell-week-of-9-november-2018.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 9-November-2018" -authors: - - Mark Roloff -date: "2018-11-09T15:00:49+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/11/icymi-powershell-week-of-9-november-2018/ ---- - -# ICYMI: PowerShell Week of 9-November-2018 - -Topics include replacing the MDT final summary, Azure Functions, dumping wifi passwords from your computer, code golf, and more... -Curated by Brett Bunker, Robin Dadswell, and Mark Roloff. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181109.md#transferring-functions-with-psremoting)[*Transferring Functions with PSRemoting*](https://vexx32.github.io/2018/11/02/Transferring-Functions) - -by Joel Francis on November 2nd -What do you do when you're in a remote session and you need to bring a custom function over? You could write it up on the remote side but that sounds a lot like work. What about passing it through as an object? Joel shows us how we can earn some street cred at the water cooler with these cool tricks. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181109.md#create-your-own-mdt-final-summary-wizard-with-powershell)[*Create your own MDT Final Summary wizard with PowerShell*](http://www.systanddeploy.com/2018/11/create-your-own-mdt-final-summary.html) - -by Damien Van Robaeys on November 5th -When's the last time you thought of PowerShell and MDT together? Kicking off a series, Damien demonstrates how we can replace that boring final summary with a jazzed-up PowerShell one. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181109.md#creating-an-azure-sql-database-with-powershell)[*Creating an Azure SQL Database with PowerShell*](https://mcpmag.com/articles/2018/11/06/azure-sql-database-with-powershell.aspx) - -by Adam Bertram on November 6th -If you sometimes find yourself in need of a database and don't have an instance on hand, or maybe you just want to show how quick and easy it is to stand one up in Azure, Adam's got you covered. Using just three cmdlets, you can have a SQL database in the cloud ready to go faster than a finance intern locking their AD account after a password change. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181109.md#an-azure-powershell-trigger-function-for-mac-address-vendor--manufacturer-lookup)[*An Azure PowerShell Trigger Function for MAC Address Vendor / Manufacturer Lookup*](https://blog.darrenjrobinson.com/an-azure-powershell-trigger-function-for-mac-address-vendor-manufacturer-lookup/) - -by Darren Robinson on November 6th -Darren is working on an IoT project that requires looking up vendor names from MAC addresses. In this post, he details his approach to creating a list of vendors easily consumable by PowerShell, plus setting up an Azure Function to handle querying this list with a REST API. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181109.md#get-known-wifi-networks-passwords-powershell)[*Get Known Wifi Networks Passwords PowerShell*](https://itfordummies.net/2018/11/05/get-known-wifi-networks-passwords-powershell/) - -by Emmanuel Demillière on November 5th -If you're running a Windows machine, it's exceedingly easy to retrieve the passwords for any remembered wireless networks. Whether you're pen-testing or you just forgot the password and somebody needs it, Emmanuel has written up a nice PowerShell function that wraps around the _netsh_ command to give you a nice collection of objects containing network names and their passwords. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181109.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://old.reddit.com/r/PowerShell/comments/9u2ynr/shortest_script_challenge_make_a_maze/) - -For all you code golf fans, the PowerShell subreddit hosts occasional "Shortest Script Challenges" that always bring out some interesting solutions. The latest is no exception. Browse through to see the various methods people used to randomly generate mazes. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181109.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/IISResetMe/status/1060164938822500352) - -Mathias Jessen has made a handy little tool for folks that have a need to consume Event Logs with PowerShell. His function will take your event log records and convert them into easy-to-work with objects. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181109.md#youtube---socal-powershell-advanced-functions)[*YouTube - SoCal PowerShell: Advanced Functions*](https://youtu.be/3gDa5xQynZA?t=1740) - -Coming from the SoCal PowerShell user group this week, Kevin Marquette gives a presentation on advanced functions. This is great material to familiarize yourself with if you're looking to take your functions up a notch or two. diff --git a/content/articles/2018-11-16-icymi-powershell-week-of-16-november-2018.md b/content/articles/2018-11-16-icymi-powershell-week-of-16-november-2018.md deleted file mode 100644 index 54b36ac2b..000000000 --- a/content/articles/2018-11-16-icymi-powershell-week-of-16-november-2018.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 16-November-2018" -authors: - - Mark Roloff -date: "2018-11-16T16:00:24+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/11/icymi-powershell-week-of-16-november-2018/ ---- - -Topics include pie charts, flattening your modules, selecting unique items, the WindowsCompatibility module goes GA, and more... - - - -Curated by Brett Bunker, Robin Dadswell, and Mark Roloff - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181116.md#convert-powershell-output-into-a-pie-chart)[*Convert PowerShell output into a pie chart*](https://4sysops.com/archives/convert-powershell-csv-output-into-a-pie-chart/) - -by Graham Beer on November 9th -Piping information to CSVs and turning it into pretty tables or charts with Excel seems like a staple of admin work sometimes. Lucky for us, Graham has worked out a function for quickly creating pie charts from PowerShell data. Display them right away for a quick visualization or save them to file for use later, and if you dig into the function a little you might find a way to generate even more chart types. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181116.md#azure-blueprint)[*Azure Blueprint*](https://agazoth.github.io/blogpost/2018/11/11/Azure-Blueprint.html) - -by Axel Anderson on November 11th -Blueprint is an interesting new tool in the world of Azure; it pretty much works to orchestrate policies, roles, ARM templates, and resource groups across multiple subscriptions. Axel's blog post gives a brief introduction to this service before jumping into a module that he wrote for applying a little automation around it. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181116.md#create-custom-reports-using-the-updated-teams-powershell-module)[*Create custom reports using the updated Teams PowerShell module*](https://practical365.com/teams-2/create-custom-reports-using-the-updated-teams-powershell-module/) - -by Steve Goodman on November 12th -Teams is soon replacing Skype for Business and it's PowerShell module is slowly coming into its own. A recent update added in a little extra functionality and Steve decided to explore that by showing us a handy script to assist with auditing Teams in a tenant. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181116.md#powershell--single-psm1-file-versus-multi-file-modules)[*PowerShell – Single PSM1 file versus multi-file modules*](https://evotec.xyz/powershell-single-psm1-file-versus-multi-file-modules/) - -by Przemyslaw Klys on November 16th -Flattening your modules into a single file before deploying to the PowerShell Gallery seems to be trending a bit. Przemyslaw tested the idea on one of his modules that previously took 12 seconds to load. Now? Less than 1 second. To call that impressive would be putting it mildly. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181116.md#announcing-general-availability-of-the-windows-compatibility-module-100)[*Announcing General Availability of the Windows Compatibility Module 1.0.0*](https://blogs.msdn.microsoft.com/powershell/2018/11/15/announcing-general-availability-of-the-windows-compatibility-module-1-0-0/) - -by Steve Lee on November 15th -After a lot of hard work, the WindowsCompatibility module is now GA! This bad boy (_slaps module_) will let PS Core access Windows PS modules via implicit remoting. If a lack of native support for your favorite modules in Core has been holding you back, give this a shot. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181116.md#reddit-rpowershell---popular-weekly-post)[*Reddit /r/PowerShell - Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/9w61lj/lord_i_feel_dumb_i_just_want_to_compare_two) - -Help with CSVs is a pretty common request, so this seems fitting. Want to know how to compare values from two columns? Look no further for a simple solution, plus some other tidbits on working with CSVs. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181116.md#youtube-5-ways-to-select-unique-items-in-powershell)[*Youtube: 5 ways to select Unique items in PowerShell*](https://www.youtube.com/watch?v=hEfXck_NAX4) - -Prateek Singh has put out a nice and short video to demonstrate 5 ways that you can select unique items in PowerShell. All of us learned at least one new technique from this, so hopefully you do too. diff --git a/content/articles/2018-11-23-icymi-powershell-week-of-22-november-2018.md b/content/articles/2018-11-23-icymi-powershell-week-of-22-november-2018.md deleted file mode 100644 index 22dfce7b9..000000000 --- a/content/articles/2018-11-23-icymi-powershell-week-of-22-november-2018.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 22-November-2018" -authors: - - Mark Roloff -date: "2018-11-23T16:00:01+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/11/icymi-powershell-week-of-22-november-2018/ ---- - -Topics include pizza and wildcards, getting involved with the community, a new PowerHour, making your scripts pipeline friendly, and more... - - - -Content assembled between mouthfuls of turkey by Brett Bunker, Robin Dadswell, and Mark Roloff - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181122.md#adding-pipeline-support-to-your-scripts)[*Adding Pipeline Support to Your Scripts!*](https://steviecoaster.github.io/Pipelines-in-scripts/) - -by Stephen Valdinger on November 18th -Stephen debuted his PS blog just last week and he's already racking up some great content. In this post, he lays out what you need to know to get your functions working in a pipeline, a central component in building great tools for the shell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181122.md#controlling-guest-access-in-office365-with-ms-graph-and-powershell)[*Controlling Guest access in Office365 with MS Graph and Powershell*](https://automativity.com/Controlling-Guest-access-in-Office365-with-MS-Graph-and-Powershell/) - -by Alex Asplund on November 18th -The job was supposed to be simple; just enable guest access on some groups in O365. Follow Alex on a journey of discovering that the documented method is incorrect, he needs to make his own tools to get the job done, and then finally implements an automated solution on a schedule. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181122.md#powershell--working-with-format-table-in-verbose-debug-output-streams)[*PowerShell – Working with Format-Table in Verbose, Debug, Output Streams*](https://evotec.xyz/powershell-working-with-format-table-in-verbose-debug-output-streams/) - -by Przemyslaw Klys on November 18th -There's a lot of flexibility in PowerShell for displaying information in nice tables or lists, but it all revolves around your standard output. _Format-Stream_ is a fancy little function that Przemyslaw made, which can allow you to easily apply nicer formatting to other data streams, such as Verbose and Debug. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181122.md#10-ways-anyone-can-easily-contribute-to-the-powershell-community)[*10 Ways Anyone Can Easily Contribute to the PowerShell Community*](https://www.networkadm.in/how-anyone-can-easily-contribute-to-the-powershell-community/) - -by Mike Kanakos on November 18th -Have you been bitten by the desire to start contributing to the community? It can be an intimidating step. Thankfully, guys like Mike are here to offer some great ideas for taking that first plunge. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181122.md#powershell-wildcard-in-pizza-shop)[*Powershell wildcard in pizza shop???*](http://powershell.damiangarbus.pl/powershell-wildcard-in-pizza-shop/) - -by Damian Garbus on November 19th -For a while now, Damian has been helping newcomers to PS get acquianted with the basics using concise visual lessons. This week, a demonstration on how to use wildcards. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181122.md#reddit-rpowershell---popular-weekly-post)[*Reddit /r/PowerShell - Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/9xs6hj/anyone_else_not_in_it_and_still_use_powershell/) - -Admins and the like might dominate the population of PowerShell users, but it's not just for us. Retail, banking, finance, and even a chef are all examples of people chiming in with their experiences in this thread. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181122.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/nohwnd/status/1065304273376997376) - -Pester's companion module, Assert, gets a little love with a new update this week. This was the first we'd heard of a function that could easily determine equivalence between two objects, so it's definitely on our list to check out on Monday. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181122.md#youtube-powerhour-005-2018-11-20)[*Youtube: PowerHour 005: 2018-11-20*](https://www.youtube.com/watch?v=kt-nrHbgTns) - -This month's PS PowerHour had a round of great demos ranging from using PS Core in AWS Lambda, getting started with ChatOps in MS Teams, and reason why you should consider sharing your experiences with the community. diff --git a/content/articles/2018-11-30-icymi-powershell-week-of-30-november-2018.md b/content/articles/2018-11-30-icymi-powershell-week-of-30-november-2018.md deleted file mode 100644 index 25155a338..000000000 --- a/content/articles/2018-11-30-icymi-powershell-week-of-30-november-2018.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 30-November-2018" -authors: - - Mark Roloff -date: "2018-11-30T16:00:22+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/11/icymi-powershell-week-of-30-november-2018/ ---- - -Of note this week... Managing credentials in your scripts, PowerShell's constrained language mode, why you should absolutely reinvent the wheel, and more. - - - -Content curated by Brett Bunker, Robin Dadswell, and Mark Roloff - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181130.md#powershell-constrained-language-mode-and-the-dot-source-operator)[*PowerShell Constrained Language mode and the Dot-Source Operator*](https://blogs.msdn.microsoft.com/powershell/2018/11/26/powershell-constrained-language-mode-and-the-dot-source-operator/) - -by Paul Higinbotham on November 26th -Deep dive blogs are some of our favorite things to read and Paul, from the PowerShell team, has a good one for everybody this week. He takes us on a brief exploration of how PowerShell handles dot-sourced scripts when you're using Constrained Language mode. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181130.md#learning-powershell-by-reinventing-the-wheel)[*Learning PowerShell by Reinventing the Wheel*](https://winsysblog.com/2018/11/learning-powershell-by-reinventing-the-wheel.html) - -by Dan Franciscus on November 26th -Finding projects to advance your knowledge can be a little rough sometimes. But you don't need to be novel. Dan offers some rock solid advice as to why you _should_ attempt to build things that others already have. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181130.md#using-credentials-in-production-scripts)[*Using Credentials In Production Scripts*](https://www.randomizedharmony.com/blog/2018/11/25/using-credentials-in-production-scripts) - -by Paul DeArment on November 25th -Securely handling the storage of credentials for a scheduled script to use is something thats frequently asked about. Paul has wrote a couple of functions to help make this easier for people with the additional requirement of hiding the username. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181130.md#importing-enriched-data-into-azure-data-lake-storage-adls-with-powershell)[*Importing Enriched Data into Azure Data Lake Storage (ADLS) with PowerShell*](https://www.mssqltips.com/sqlservertip/5811/importing-enriched-data-into-azure-data-lake-storage-adls-with-powershell/) - -by John Miner on November 26th -If your work is more on the SQL-side, or you're just inquisitive, this is a great write-up on using PowerShell to migrate the migration of data up to Azure Data Lake. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181130.md#creating-dynamic-sets-for-validateset)[*Creating Dynamic Sets for ValidateSet*](https://vexx32.github.io/2018/11/29/Dynamic-ValidateSet/) - -by Joel Sallow on November 29th -Thinking of using a dynamic parameter in your next function? Joel might have an interesting and much simpler alternative for you to look at. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181130.md#reddit-rpowershell---popular-weekly-post)[*Reddit /r/PowerShell - Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/9zyrg1/jottey_a_notepad_written_in_powershell) - -This week, /u/dolorfox shared a cool little notepad app that they wrote in PowerShell. Say hello to Jottey! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181130.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/guyrleech/status/1067049809398382593) - -@guyrleech shows off a pretty cool little script that adds a checksum option to your file explorer's right-click context menu. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181130.md#youtube-mvpdays---essential-powershell-for-office-365)[*Youtube: MVPDays - Essential PowerShell for Office 365*](https://www.youtube.com/watch?v=KzA9n4NSals) - -Vlad Catrinescu demonstrats some essential PowerShell for anyone working with O365. The icing on this particular cake is that he uses the new AzureAD module, which is replacing the MSOnline module. diff --git a/content/articles/2018-12-01-ticket-sales-update-for-powershell-devops-global-summit-2019.md b/content/articles/2018-12-01-ticket-sales-update-for-powershell-devops-global-summit-2019.md deleted file mode 100644 index 1b545e37b..000000000 --- a/content/articles/2018-12-01-ticket-sales-update-for-powershell-devops-global-summit-2019.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Ticket Sales Update for PowerShell + DevOps Global Summit 2019 -authors: - - Don Jones -date: "2018-12-01T16:22:33+00:00" -categories: - - PowerShell Summit -aliases: - - /2018/12/ticket-sales-update-for-powershell-devops-global-summit-2019/ ---- - -Wanted to offer a brief update on ticket sales for those who may not have purchased already - I know a lot of folks have to wait until 2019. - - - -As of right now, we have 118 regular admission tickets left, which is just a smidge over half our original inventory. However, we also have 58 Alumni tickets remaining. Those are the same price, but they come with some extra thank-you amenities, and they're available to any prior Summiteer who uses the promotional code we sent out earlier this year (sorry if you missed it; that's why we encourage use of a personal email address versus a work one - they're less filter-y and they follow you when you change jobs). At the end of January 2019, any leftover Alumni tickets will go into the main "pool," which will help increase availability a bit. So, all told, we have 176 spots open. -We also have 10 spots in our new, entry-level, hands-on OnRamp track led my myself, Jason Helmick, and Jeffery Hicks. Those will _not_ convert to "standard" inventory, as the main event is already scheduled to be at-capacity. -Some frequently asked questions: -**Is there a waitlist? **There is. Each year, we invariably have a few people who have to bail out at the last minute. If we can fill their space from the waitlist, we'll refund their ticket. The waitlist emails one person at a time and gives them 24 hours to buy a ticket. PLEASE register for the waitlist using an email address you check DAILY. Lots of people miss out because they use a work address, and don't get the notification in time. -**Are sessions recorded? **Please review our Summiteer's Manual / Survival Guide (linked from [powershellsummit.org][1]) for information on recordings. We do not live-stream, and we do not record our Monday general sessions nor the OnRamp track. -**What about hotels? **Please, once you've registered, book in our official room block at the Marriott or Courtyard, because otherwise we have to pay for unused rooms anyway, which could easily put us out of business. The Summit Brochure provides the registration URLs and, if you need to register through some other means, our group codes. Even if you register through a corporate portal, please simply CALL the hotel and ask that they attach your room to our group. That won't change your rate, and will simply credit us for using the rooms we've contracted for. - - [1]: http://powershellsummit.org diff --git a/content/articles/2018-12-07-icymi-powershell-week-of-07-december-2018.md b/content/articles/2018-12-07-icymi-powershell-week-of-07-december-2018.md deleted file mode 100644 index 189d6fd7f..000000000 --- a/content/articles/2018-12-07-icymi-powershell-week-of-07-december-2018.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 07-December-2018" -authors: - - Mark Roloff -date: "2018-12-07T16:00:05+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/12/icymi-powershell-week-of-07-december-2018/ ---- - -Topics include watching Bitcoin plummet in the shell, getting maintenance plan info out of SQL, setting up automated access to AWS, and more... -Content curated by Brett Bunker, Robin Dadswell, and Mark Roloff - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181207.md#friday-fun-with-timely-powershell-prompts)[*Friday Fun With Timely PowerShell Prompts*](https://jdhitsolutions.com/blog/powershell/6240/friday-fun-with-timely-powershell-prompts/) - -by Jeff Hicks on Novermber 30th -Like furnishing a home, decorating your work desk, or building a wardrobe, customizing your shell experience is as much a matter of utility as it is aesthetics. Jeff brings has a nice introduction to changing the default prompt, which will help you open the doors to all manner of fun. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181207.md#visualizing-historical-data-of-top-cryptocurrency-with-powershell)[*Visualizing Historical data of Top CryptoCurrency with PowerShell*](https://ridicurious.com/2018/12/03/visualizing-historical-data-of-top-cryptocurrency-with-powershell/) - -by Prateek Singh on December 3rd -Even if you don't dabble in cryptocurrencies, you could easily adapt Prateek's new blog to other uses. He demonstrates how his _Graphical_ module can easily take data points to create colorful graphs in your console. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181207.md#getting-details-from-a-maintenance-plan-using-powershell)[*Getting Details from a Maintenance Plan using PowerShell*](https://nocolumnname.blog/2018/12/04/getting-details-from-a-maintenance-plan-using-powershell/) - -by Shane O'Neill on December 4th -Clicking through a GUI is so last decade. Shane combines his knowledge of SQL with PowerShell to create a function for retreiving maintenance plan details from the comfort of his shell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181207.md#powershell-module-to-read-directory-contents-and-store-in-a-sql-server-table)[*PowerShell Module to Read Directory Contents and Store in a SQL Server Table*](https://www.mssqltips.com/sqlservertip/5802/powershell-module-to-read-directory-contents-and-store-in-a-sql-server-table/) - -by Nisarg Upadhyay on December 4th -Nisarg shows us how easy it is to insert data into SQL using PowerShell, but the icing on the cake for us was calling his script from T-SQL to accomplish this. The more you know! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181207.md#working-with-aws-credentials-using-powershell)[*Working with AWS credentials using PowerShell*](https://4sysops.com/archives/working-with-aws-credentials-using-powershell/) - -by Graham Beer on December 4th -For automated access to AWS from PowerShell, there's some hoops that you'll need to jump through. Graham has an easy to follow write-up to help get you going. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181207.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/a1u5ln/install_all_windows_updates_on_the_first_round/) - -Time for some good ole fashioned script sharing. u/jcholder has leveraged PDQ Deploy & Inventory with PowerShell to handle all Windows updates in a single push. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181207.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/nohwnd/status/1069591949282299904) - -This was an interesting thread that touches on the long road that seemingly small projects can take to becoming officially adopted by a community. Jakub Jares shares some of Pester's history and how it is currently maintained. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181207.md#youtube-socal-powershell-pester-in-action)[*Youtube: SoCal PowerShell: Pester in Action*](https://www.youtube.com/watch?v=2vooOG3mmoY) - -Fresh from the SoCal PowerShell UserGroup, Kevin Marquette gives an hour and a half long dive into a myriad of use-cases for Pester. diff --git a/content/articles/2018-12-12-welcome-new-and-returning-pshsummit-summiteers.md b/content/articles/2018-12-12-welcome-new-and-returning-pshsummit-summiteers.md deleted file mode 100644 index 267af6431..000000000 --- a/content/articles/2018-12-12-welcome-new-and-returning-pshsummit-summiteers.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Welcome, New and Returning @PSHSummit Summiteers! -authors: - - Don Jones -date: "2018-12-12T15:40:16+00:00" -categories: - - PowerShell Summit -legacy_featured_image: /wp-content/uploads/2018/10/PowerShell-Summit-2018.png -aliases: - - /2018/12/welcome-new-and-returning-pshsummit-summiteers/ ---- - -_The following was recently posted in the Slack team for PowerShell + DevOps Global Summit 2018. Yesterday, we invited all current registered Summiteers into the Slack team; if you missed your invitation, please email summit@ (this website's domain name) with your email address (ideally a personal one, not work) and your Eventbrite order number. We'll be happy to re-send the invite._ -Another reminder for all @here - please go to http://leanpub.com/summiteermanual/ and "buy" the book (for $0, of course), and enable the option to have Leanpub notify you via email of updates. That's The Summiteer Manual, and it's our best way to provide a consolidated view of everything that happens at Summit. From understanding how we handle special dietary requests, to understanding what "Iron Scripter" is all about, it's the best way to take advantage of all that goes on. Summit is a \*\*lot\*\* more than just great breakout sessions, but it's very easy to "miss out" on things if you don't know they're available. We update this a lot as we get closer, and will even be including information (and possible discounts) on stuff around the Puget Sound area for early/late arrivals who want to see some sights. A week or two out, it's not even a bad idea to make sure your phone/tablet/laptop has a copy to refer to (Leanpub offers PDF/MOBI/EPUB formats), and some folks even print a copy to bring along. - - - -Especially important: \*\*get the app\*\* (linked from http://powershellsummit.org as well) because that's got the full agenda, including breaking changes, and we can use push notifications to call out important changes on-site. -Finally, \*\*book your hotel\*\* per the instructions in the brochure (again, http://powershellsummit.org), because the sure-fire way to make sure Summit never happens again is to leave us on the financial hook for the 200 rooms at the Marriott and 50 at the Courtyard. -The #summit-events channel is a great place to ask questions and offer answers about the event! This Slack Team is also where @pscookiemonster and @thedevopsdiva usually conduct Lightning Demo signup, and if you've never presented before, Lightning Demos are a \*fantastic\* way to give it a try. It's just a ~5m demo of something cool you've done with PowerShell, and it's one of the most popular blocks in our agenda. You're guaranteed a round of applause from one of the friendliest and most supportive technology communities in existence. diff --git a/content/articles/2018-12-14-icymi-powershell-week-of-14-december-2018.md b/content/articles/2018-12-14-icymi-powershell-week-of-14-december-2018.md deleted file mode 100644 index 62e54e1d7..000000000 --- a/content/articles/2018-12-14-icymi-powershell-week-of-14-december-2018.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 14-December-2018" -authors: - - Mark Roloff -date: "2018-12-14T16:00:59+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/12/icymi-powershell-week-of-14-december-2018/ ---- - -Topics include Advent of Code, talking to Teams with the Graph API, AWS tools in PowerShell, and more... -Content pulled together by Brett Bunker, Robin Dadswell, and Mark Roloff - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181214.md#speed-tweaking-advent-of-code-day-8)[*Speed tweaking Advent of Code Day 8*](https://humanequivalentunit.github.io/Speed-Tweaks-AoC-Day-8/) - -by HumanEquivalentUnit on December 8th -Advent of Code spoilers ahead! This is a fun walk through the thought process of solving some of these code puzzles. Useful if you're stuck on day 8, and still something to learn here if you're just curious. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181214.md#how-to-quickly-test-a-sql-connection-with-powershell)[*How To Quickly Test a SQL Connection with PowerShell*](https://mcpmag.com/articles/2018/12/10/test-sql-connection-with-powershell.aspx) - -by Adam Bertram on December 10th -Testing connections before trying to run a bunch of code can often save you some time and headaches. Adam shows us how to quickly accomplish this with a short function. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181214.md#removing-special-characters-from-utf8-input-for-use-in-email-addresses-or-login-names)[*Removing Special Characters From UTF8 Input For Use In Email Addresses or Login Names*](https://www.lieben.nu/liebensraum/2018/12/removing-special-characters-from-utf8-input-for-use-in-email-addresses-or-login-names/) - -by Jos Lieben on December 11th -I've been bitten by these on a few occassions, so don't be me. Jos has a function to help you convert these tricksey characters and even points to a few other solutions. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181214.md#post-a-microsoftteams-channel-chat-message-from-powershell-using-graph-api)[*Post a #MicrosoftTeams channel chat message from #PowerShell using Graph API*](https://msunified.net/2018/12/12/post-at-microsoftteams-channel-chat-message-from-powershell-using-graph-api/) - -by Ståle Hansen on December 12th -Microsoft's Graph API is getting some updates that make it easier to post to Teams using PowerShell. Ståle has a nice guide to help you get started with this new method. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181214.md#powershell-basics-finding-your-way-in-the-powershell-console)[*PowerShell Basics: Finding Your Way in the PowerShell Console*](https://techcommunity.microsoft.com/t5/ITOps-Talk-Blog/PowerShell-Basics-Finding-Your-Way-in-the-PowerShell-Console/ba-p/300935) - -by Michael Bender on December 13th -PowerShell's discoverability is truly top-notch. By understanding how to use just two cmdlets, Michael demonstrates how easy it is to get a ton of information out of PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181214.md#reddit-rpowershell---popular-weekly-post)[*Reddit /r/PowerShell - Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/a4u4rv/what_is_the_absolute_best_powershell_training) - -The question of what courses or books are great for learning PowerShell comes up _a lot_. Fortunately, the community is always ready to throw some excellent resources out there for the curious. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181214.md#youtube-getting-started-with-the-aws-tools-for-powershell)[*Youtube: Getting Started with the AWS Tools for PowerShell*](https://www.youtube.com/watch?v=W4k0v754sCI) - -For you AWS admins, here's a brief video tour to help you get acquianted with the PowerShell module for AWS. diff --git a/content/articles/2018-12-21-icymi-powershell-week-of-21-december-2018.md b/content/articles/2018-12-21-icymi-powershell-week-of-21-december-2018.md deleted file mode 100644 index cd3b07f4d..000000000 --- a/content/articles/2018-12-21-icymi-powershell-week-of-21-december-2018.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 21-December-2018" -authors: - - Robin Dadswell -date: "2018-12-21T15:45:38+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2018/12/icymi-powershell-week-of-21-december-2018/ ---- - -Topics include Group-Object, the Azure Module, Windows Forms and Teams membership. - - - -Content pulled together by Brett Bunker, Robin Dadswell, and Mark Roloff - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181221.md#i-love-group-object-and-so-should-you)[I love Group-Object and so should you](https://www.pwsh.site/powershell/2018/12/17/i-love-group-object-and-so-should-you.html) - -by Anthony Allen on December 17th -Getting data and want to do some analysis on it, take a dive into the Group-Object cmdlet and some of it's use cases with Anthony. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181221.md#azure-powershell-az-module-version-10)[Azure PowerShell ‘Az’ Module version 1.0](https://azure.microsoft.com/en-us/blog/azure-powershell-az-module-version-1/) - -by Mark Cowlishaw on December 18th -Find out about big changes for the Azure PowerShell module and guidance on how to move away from the old AzureRM module. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181221.md#windows-forms)[Windows Forms](https://powershell.anovelidea.org/powershell/windows-forms/) - -by Dave Carroll on December 19th -Take an interesting foray into the .Net [System.Windows.Forms] class. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181221.md#using-powershell-to-check-group-or-team-membership)[Using PowerShell to Check Group or Team Membership](https://www.petri.com/powershell-check-group-team-membership) - -by Tony Redmond on December 20th -Probing membership for Office 365 Groups, Teams and Azure AD Groups, making use of the Teams, AzureAD and Exchange PowerShell Modules. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181221.md#reddit-rpowershell---popular-weekly-post)[*Reddit /r/PowerShell - Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/a85r1s/why_outnull/) - -Answers to the question 'Why Out-Null?'. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181221.md#youtube-pspowerhour-006-2018-12-18)[YouTube: PSPowerHour 006: 2018-12-18](https://youtu.be/iGEFqRLwdzg) - -The 6th PSPowerHour, in which topics include "Assert: Write less Pester tests to cover more code", "Git Rebase: Don't fear the Rebase-r", "Using PowerShell to extend the GUI" and "7 Reasons To Build a Workplace Module" diff --git a/content/articles/2018/01/_index.md b/content/articles/2018/01/_index.md new file mode 100644 index 000000000..b17dd8d92 --- /dev/null +++ b/content/articles/2018/01/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from January 2018" +description: "PowerShell.org Articles published in January 2018." +--- diff --git a/content/articles/2018/01/can-we-talk-about-powershell-core-6-0/index.md b/content/articles/2018/01/can-we-talk-about-powershell-core-6-0/index.md new file mode 100644 index 000000000..ec333a049 --- /dev/null +++ b/content/articles/2018/01/can-we-talk-about-powershell-core-6-0/index.md @@ -0,0 +1,78 @@ +--- +url: /articles/2018-01-15-can-we-talk-about-powershell-core-6-0/ +title: Can We Talk About PowerShell Core 6.0? +authors: + - Don Jones +date: "2018-01-15T16:36:18+00:00" +categories: + - News + - PowerShell for Admins +aliases: + - /2018/01/can-we-talk-about-powershell-core-6-0/ +--- + +Microsoft recently [announced the General Availability][1] (that is, a non-beta release) of PowerShell Core 6.0. A [companion document detailing breaking changes][2], along with some of the language in the announcement, has led to more than a few inquiries in my mailbox. Most take the tone of, "have I been wasting my time learning PowerShell?!?!?" because, at first glance, PowerShell Core looks deeply less functional than its predecessor. Let me tell you what I think. + + + +First, I need to stress that this isn't an official Microsoft position - it's my opinion. I've been working with this product since before it launched, I've lived through its successes and missteps, and I've gotten pretty good at figuring out what the company is up to - but this article isn't based on any official conversations or info. + +## There are Two PowerShells Now + +Understand that **Windows PowerShell**, currently v5.1, isn't going away. People are a little freaked out by phrasing like, "Windows PowerShell won't be developed any further," but if you're feeling panicked over that, sip your whiskey and chill. Microsoft regards Windows PowerShell as **finished. **Honestly, from my perspective, it contains every bit of functionality I think an admin could conceivably need to do their job. Sure, maybe it lacks some deeper developer-focused features, but PowerShell was never supposed to be C#. +5.x remains officially supported and officially available. You can run it side-by-side on the same system with PowerShell Core. If your job is administering Windows then, as the name implies, _Windows_ PowerShell is going to be your go-to for a long time. It won't pick up any breaking changes going forward, it's not going to break existing functionality when a new version comes out, etc. It's _stable. _ +**PowerShell Core** (or just, "PowerShell," sans the "Windows") is a _new product. _It is not the "successor" of Windows PowerShell; it is a new thing based on Windows PowerShell. It is designed for cross-platform management, when you need to do something on Windows _and_ Linux _and_ macOS. As such, its functionality focuses on stuff that is available on _all of those platforms. _It doesn't do Windows Management Instrumentation, because "Windows." It doesn't manage Active Directory. It doesn't query Windows Performance Counters. It's not, in other words, specialized for Windows. + +## PowerShell Has Never Been "Windows" + +Windows and Windows PowerShell _are separate things. _People have an incredibly tough time grasping this, to the point where [it's a significant "gotcha" for newbies][3]. Windows PowerShell has _always_ consisted of a set of core functionality that actually had little to do, for the most part, with the Windows operating system. PowerShell Core continues that tradition, consisting of a base functional foundation. PowerShell's "power" came from add-ins - modules - that "connected" PowerShell to other technologies. Those add-ins run _inside_ PowerShell, but they are _distinct_ from it. The ActiveDirectory module comes from the Active Directory team, and ships _as a feature of the Windows Operating System. _If you could install Windows PowerShell 5.1 on Windows XP (you can't, but imagine), you wouldn't suddenly get a bunch of awesome functionality for administration, because Windows XP _doesn't ship with any awesome functionality. _Much of what we do in Windows PowerShell comes from the operating system; you should _expect_ that functionality to be missing when you're on, say, Linux. +Now, sure - if you install PowerShell Core on Windows, you _still_ won't have all of your favorite modules, because lots of when can't run on .NET Core. That's why Windows PowerShell is still a thing. Just as it took several years for Windows PowerShell to gain a large stable of add-in modules, it'll likely take some time for useful functionality to join up with PowerShell Core. The fact that some module doesn't run on Core _today_ doesn't mean the world has ended. + +## Sins of the Past + +A lot of the breaking changes in PowerShell Core are, from my perspective, more than welcome. Because Remote Procedure Calls (RPCs) are pretty much Windows-specific, almost every command that used RPCs for remote requests has lost the ability to perform remote requests. Instead, you use PowerShell Remoting (Invoke-Command) to "send" the command to the machine you want to query, let that machine execute the command locally, and then you get the results back. _This is the way I've been telling people to do things for eight years. _RPCs are a Root Cause of Evil in the universe. Companies who don't want to allow Remoting (either over WS-MAN or SSH, both of which are supported in PowerShell Core) but who _will_ allow RPCs, are stupid companies who need to wake up and educate themselves. Msrpc.dll is probably the most-hacked, most-patched file on the system. +A lot of the Web-based commands - Invoke-WebRequest and friends - have changed, too. This is mainly so that they'll work with the refactored underlying .NET Core. Why was .NET Core refactored? _So it would quit using old Internet Explorer code. _Nobody in a physics-based universe should see that as anything but a long-overdue blessing. +PowerShell Workflows aren't supported in Core, because .NET Core doesn't support Windows Workflow Foundation, which as near as I can tell has been deprecated for half a decade anyway. Jeffrey Snover and I have had a long-running, and very cordial, disagreement over PowerShell Workflow, because I think it was a Horrible Idea from day one. Not having it in Core will simply keep people from straying into that horrible, confusing, deeply broken realm. +Snap-ins aren't supported in Core. Good. Snap-ins stopped being the right thing to do in PowerShell 2.0, which came out in, like, 2008 or something. Repackage your code and move on. Anyone still shipping you a snap-in doesn't care about you, your job, your family, or your values. It is, for the most part, the work of a few seconds to repackage a snap-in into a proper binary module. + +## It's 6.0, Not 6.Done. + +One of the PowerShell Core release notes indicates that it doesn't run DSC resources. This has caused about half of the incredulous emails I've gotten this past week. _Is Microsoft abandoning DSC? Why doesn't DSC run on PowerShell Core?_ +Desired State Configuration has always _mainly_ targeted Windows. The Linux-compatible Local Configuration Manager (LCM) wasn't even written by the PowerShell team, it was written by Microsoft's Unix team, who also wrote the entire library of Linux-compatible resources. Today, there's zero need for PowerShell Core to execute DSC resources; Windows PowerShell or the Linux LCM will handle it for you. +But this is why [DSC Core][4] is going to be a thing. And that's the thing to remember, here. Despite the patterns of the past year or so, we're all still used to Microsoft taking 3-5 years to produce a product, which we then have to live with for 3-5 years until the next version comes out. The PowerShell team, at least, has been releasing at a much faster cadence. So just because Core doesn't do something _today_ doesn't represent an existential threat; if it makes sense for Core's audience and intent, then it'll likely do it before too long. +Incidentally, I have some very specific thoughts on DSC Core, including several, "I told you you'd eventually do it that way" moments, but we can do that in a separate article. + +## Why the Hell is Core Even Needed, Though? + +Microsoft sells Windows. Windows PowerShell manages Windows. So why was Core even needed? +There are two reasons here. Both are probably true; one is perhaps more pragmatic and the other is perhaps more noble, depending on your opinion. +The pragmatic one is that Microsoft is moving toward being a business that sells you compute time, whether that compute runs in their cloud or in your datacenter; this is the essence of what Azure Stack is, and if you think that model isn't eventually going to be their _only_ model, then you're deluding yourself. As a company that sells compute, Microsoft mainly wants you to run all your compute workloads on their compute services, of course. They don't care if you're running Linux or Windows; the compute is what they want you to pay for. Not caring about the OS means you need a rich set of tools that can be used consistently across all operating systems. Thus, PowerShell Core. +That kind of segues into the possibly-noble reason, and we can start by simply asking, "fine, why not just use Bash on every OS," as one person messaged me on Twitter. The reason is that Bash is a terrible shell for Windows. Arguably, Bash isn't even a great shell for Linux, although if you're used to it then you can be extremely productive with it. If you actually sat down and made a list of what you needed a shell to actually do, you'd never come up with Bash, and you'd likely have never come up with MS-DOS, either. Most shells today happened by accident and evolution, not by design, and they're about as well-suited to their job tasks as human knees are to running. You can do it, but it's not really a great idea. Bash - and most shells, if we're being fair - has a ridiculously high learning curve, and it forces you to work through the ugly details of unstructured data. That is, Bash, and most other shells, are designed mainly to parse and manipulate the text output of various operating system commands. They're a hack between a bunch of tools that were never meant to work together. The literal point of PowerShell, when you really tear it down to its smallest roots, is to parse all of that crap for you, and let you work with consistently structured data. You can focus less on what command output looks like and focus more on whatever the heck it is you're trying to do. [Linux fans who take a minute to really understand PowerShell][5] tend to like it. Naysayers who focus on the aesthetics of the syntax or whatever haven't taken that minute, or just have a religious objection to Microsoft playing in their sandbox. So Microsoft's decision to make PowerShell run on Linux is possibly a noble one, and I feel they've done so in a way that's pretty respectful of the Linux OS' roots, history, and patterns. + +## What if I Don't Admin on Linux? + +Then just use Windows PowerShell and stop sweating it. I mean, you're absolutely limiting your career, because as [I've noted elsewhere][6] the concept of "OS" is changing drastically, and anchoring your career to a single OS is probably a dumb move right now. But, if that's your decision, then just stick with Windows PowerShell and ignore Core. + +## So is Windows PowerShell Really "Done?" + +Who knows? Probably mostly. I suppose we could see a 5.1.1 if there's a really egregious bug or a security problem someone finds, or a 5.2 if Windows itself would benefit tremendously from something specific that wouldn't work in Core. But I wouldn't count on anything major happening to it. + +## Let's Review + +So here's what we know: + + * PowerShell Core doesn't mean Windows PowerShell is dead. + * You haven't been wasting your time learning Windows PowerShell. + * You can probably ignore PowerShell Core for a good long while if you don't need cross-platform functionality. + * Your personal job priorities may not align with Microsoft's corporate priorities, which means the company may do stuff that doesn't make sense to you, or that you don't need. + * PowerShell Core isn't a drop-in replacement for Windows PowerShell because Core has a different audience and intent. + * The more Windows-specific your task, the less likely Core is going to be the right tool for the job. + +That's my take on all this; you're more than welcome to share yours (be polite!) in the comments! + + [1]: https://blogs.msdn.microsoft.com/powershell/2018/01/10/powershell-core-6-0-generally-available-ga-and-supported/ + [2]: https://github.com/PowerShell/PowerShell/blob/master/docs/BREAKINGCHANGES.md + [3]: https://devops-collective-inc.gitbooks.io/the-big-book-of-powershell-gotchas/content/manuscript/where-is-the-____-command.html + [4]: https://blogs.msdn.microsoft.com/powershell/2017/09/12/dsc-future-direction-update/ + [5]: https://twitter.com/nocentino + [6]: https://donjones.com/2017/12/14/has-the-death-of-the-os-already-begun/ diff --git a/content/articles/2018/01/distilling-microsofts-dsc-update-jan-2018/index.md b/content/articles/2018/01/distilling-microsofts-dsc-update-jan-2018/index.md new file mode 100644 index 000000000..069eb1685 --- /dev/null +++ b/content/articles/2018/01/distilling-microsofts-dsc-update-jan-2018/index.md @@ -0,0 +1,29 @@ +--- +url: /articles/2018-01-29-distilling-microsofts-dsc-update-jan-2018/ +title: "Distilling Microsoft's DSC Update (Jan 2018)" +authors: + - Don Jones +date: "2018-01-29T16:11:10+00:00" +categories: + - PowerShell for Admins +aliases: + - /2018/01/distilling-microsofts-dsc-update-jan-2018/ +--- + +This past Friday, Microsoft [posted a DSC Update][1] that's worth your attention - and some commentary. +This follows up on a previous announcement about "DSC Core," a term which the company has wisely stopped using. I do think the original use of "DSC Core" was well-intentioned: "Core" had come to represent the company's cross-platform efforts, a la .NET Core and PowerShell Core. But the "new DSC" has nothing to do with either of those, and so the use of "Core" was confusing. + + +The "new DSC" does mean that "old DSC" is going away. But, as this most recent update reveals, very little of your existing work or knowledge investment will go to waste. +The "new DSC" will consist of a rewritten Local Configuration Manager, or LCM. This should still duplicate much of the functionality of the existing LCM, but will be written in C++, enabling it to be compiled for any operating system. So, gone are the days of a .NET-based LCM for Windows and a distinct one written for Unix/Linux - we'll have one code base. +The big announcement, for me, was that the LCM will rely on a "provider model" for running DSC resources. While the word _provider_ is a little overused in PowerShell, this is a huge and positive step forward. The announcement indicates that the first provider will allow the new, C++ based LCM to run DSC resources written for PowerShell - e.g., almost everything currently out there today. A future provider will enable resources written in cross-platform PowerShell Core (which, [as discussed previously here][2], is a distinct product from Windows PowerShell), and other future providers will support resources written in C++ and Python. This is a _huge deal, _as it offers the potential for a much wider array of community-based resources. +I was also impressed with the humility in Microsoft's open source direction for the LCM. I think the company has learned from its open sourcing of PowerShell Core that "open source" means a great deal more than just publishing your code in GitHub. You've got to be responsive to issue posts, responsive to pull requests, and more. So the team is taking a more gradual approach to open sourcing the new LCM, which should help ensure they do it right. +The announcement mentions that, "[the new LCM] will need to be installed on systems where the current DSC platform exists today, and we will need to offer conflict detection..." and I find that notable. It means the company is still thinking about the best ways to deploy this new LCM, and they're working through the math on, "what if you have the old one and new one installed - is it going to be raccoons in a bag clawing at each other, or no?" We'll have to see what they come up with, but I'd personally be just fine if the new LCM just disabled itself if the old, original LCM was working. That would make it easy to pre-stage the new LCM without fear, and "flip it on" one day by disabling the old LCM. +I think by the time the new LCM is formally released as "General Availability" (as opposed to the inevitable beta releases), we'll be looking at feature parity with the old LCM. That means I think we can expect to see it support both pull and push modes. Given that the LCM pretty much _is_ DSC - that is, the LCM has all the brains of the technology - that should make the transition pretty easy and seamless. I think it's important to follow the beta builds, so that if you're seeing feature parity go awry, you can provide Microsoft with the feedback they'll need to course-correct in time. Don't wait until GA to bitch and moan; get in there and play with this new thing the moment you can. +There are, of course, questions not answered in this post, but I'll hazard my own guesses. There's no mention of Pull Server. Now that the team has enabled SQL Server for the "native" Pull Server, I honestly think we can expect to see them stop investing in that product. Their direction, as with much of Microsoft, is Azure; the pricing for running DSC in Azure Automation is so low that many organizations can, and should, simply do that. Those companies whose servers must run in a totally disconnected environment should plan to look outside of Microsoft - such as [Tug][3], an open-source pull server replacement that's got a ton more flexibility. Today's Microsoft can't be all things to all people, and if you have edge-case working conditions - like no Internet for your servers - then you're going to find yourself a bit more on your own. And, if I'm being honest, for some of those edge cases (and even for some more mainstream cases), a full configuration management platform like Chef or Puppet may be your best bet. +The real upshot here, though, is that _everything you know about DSC is still valid. _Microsoft is going to be doing some heavy lifting, programming-wise, to broaden the applicability of your DSC knowledge across platforms, but I suspect you're not going to have to do much work to "keep up" for this first phase. We'll doubtless see some asked-for new features creep in along the way, which will be great, and hopefully we'll see some of the minor architectural improvements that the community has been asking for for a few years, now. +Overall, I think this is a bright and positive announcement for DSC fans, and I'm looking forward to seeing where the company goes next! + + [1]: https://blogs.msdn.microsoft.com/powershell/2018/01/26/dsc-planning-update-january-2018/ + [2]: https://powershell.org/2018/01/15/can-we-talk-about-powershell-core-6-0/ + [3]: https://github.com/PowerShellOrg/tug diff --git a/content/articles/2018/01/iron-scripter-2018-prequel-puzzle-1/index.md b/content/articles/2018/01/iron-scripter-2018-prequel-puzzle-1/index.md new file mode 100644 index 000000000..21dde66f1 --- /dev/null +++ b/content/articles/2018/01/iron-scripter-2018-prequel-puzzle-1/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2018-01-14-iron-scripter-2018-prequel-puzzle-1/ +title: "Iron Scripter 2018 Prequel: Puzzle 1" +authors: + - Richard Siddaway +date: "2018-01-14T00:01:08+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2018/01/iron-scripter-2018-prequel-puzzle-1/ +--- + +Greetings Iron Scripters +The first puzzle in the Iron Scripter 2018 Prequel series is available: +[Iron Scripter Prequel Puzzle 1][1] +Take note of the faction based instructions. +Please remember that we're not grading submissions for these puzzles. +You can comment, and discuss the puzzle on the [Iron Scripter Prequel forum ][2] +Stay true to your faction and victory will be yours. + + [1]: https://powershell.org/wp-content/uploads/2018/01/Iron-Scripter-Prequel-Puzzle-1.pdf + [2]: https://powershell.org/forums/forum/iron-scripter/iron-scripter-prequel/ diff --git a/content/articles/2018/01/iron-scripter-2018-prequel-puzzle-2/index.md b/content/articles/2018/01/iron-scripter-2018-prequel-puzzle-2/index.md new file mode 100644 index 000000000..35a5346f1 --- /dev/null +++ b/content/articles/2018/01/iron-scripter-2018-prequel-puzzle-2/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2018-01-21-iron-scripter-2018-prequel-puzzle-2/ +title: "Iron Scripter 2018 Prequel: Puzzle 2" +authors: + - Richard Siddaway +date: "2018-01-21T00:01:10+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/01/iron-scripter-2018-prequel-puzzle-2/ +--- + +You've survived the first challenge. A new challenge in the shape of [Iron Scripter Prequel Puzzle 2][1] is now available. +Take note of the faction based instructions. +Please remember that we're not grading submissions for these puzzles. +You can comment, and discuss the puzzle on the [Iron Scripter Prequel forum ][2] +Stay true to your faction and victory will be yours. + + [1]: https://powershell.org/wp-content/uploads/2018/01/Iron-Scripter-Prequel-Puzzle-2.pdf + [2]: https://powershell.org/forums/forum/iron-scripter/iron-scripter-prequel/ diff --git a/content/articles/2018/01/iron-scripter-2018-prequel-puzzle-3/index.md b/content/articles/2018/01/iron-scripter-2018-prequel-puzzle-3/index.md new file mode 100644 index 000000000..f7befe650 --- /dev/null +++ b/content/articles/2018/01/iron-scripter-2018-prequel-puzzle-3/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2018-01-28-iron-scripter-2018-prequel-puzzle-3/ +title: "Iron Scripter 2018 Prequel: Puzzle 3" +authors: + - Richard Siddaway +date: "2018-01-28T00:01:38+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/01/iron-scripter-2018-prequel-puzzle-3/ +--- + +You have overcome 2 challenges so far both involving code from the archives. In this challenge you'll be called upon to create your own code. You'll be presented with a task to perform in [Iron Scripter Prequel Puzzle 3][1] +How you approach this challenge is up to you but remember the goals of your faction. +Please remember that we're not grading submissions for these puzzles. You can comment, and discuss the puzzle on the Iron Scripter Prequel forum +Good luck + + [1]: https://powershell.org/wp-content/uploads/2018/01/Iron-Scripter-Prequel-Puzzle-3.pdf diff --git a/content/articles/2018/01/iron-scripter-prequel-puzzle-1-a-solution/index.md b/content/articles/2018/01/iron-scripter-prequel-puzzle-1-a-solution/index.md new file mode 100644 index 000000000..12c0b86f5 --- /dev/null +++ b/content/articles/2018/01/iron-scripter-prequel-puzzle-1-a-solution/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2018-01-21-iron-scripter-prequel-puzzle-1-a-solution/ +title: "Iron Scripter Prequel: Puzzle 1 – a solution" +authors: + - Richard Siddaway +date: "2018-01-21T00:05:19+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/01/iron-scripter-prequel-puzzle-1-a-solution/ +--- + +A discussion and possible solution to puzzle 1 is now available at [Iron Scripter Prequel Puzzle 1 - A solution][1] +Remember this isn't presented as a definitive solution. It's my view of the solution. Please also note that the faction specific parts are indicative and not prescriptive - they are my view of how the different factions would approach solving the puzzle. + + [1]: https://powershell.org/wp-content/uploads/2018/01/Iron-Scripter-Prequel-Puzzle-1-A-solution.pdf diff --git a/content/articles/2018/01/iron-scripter-prequel-puzzle-2-a-commentary/index.md b/content/articles/2018/01/iron-scripter-prequel-puzzle-2-a-commentary/index.md new file mode 100644 index 000000000..3c0f4017f --- /dev/null +++ b/content/articles/2018/01/iron-scripter-prequel-puzzle-2-a-commentary/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2018-01-28-iron-scripter-prequel-puzzle-2-a-commentary/ +title: "Iron Scripter Prequel: Puzzle 2 – a commentary" +authors: + - Richard Siddaway +date: "2018-01-28T00:02:37+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/01/iron-scripter-prequel-puzzle-2-a-commentary/ +--- + +A discussion and possible solution to puzzle 1 is now available at  [Iron Scripter Prequel Puzzle 2 - A commentary][1] +Remember this isn't presented as a definitive solution. It's my view of the solution. +I've not provided faction specific code but rather a list of points the factions need to consider to be truly worthy of their faction. + + [1]: https://powershell.org/wp-content/uploads/2018/01/Iron-Scripter-Prequel-Puzzle-2-A-commentary.pdf diff --git a/content/articles/2018/01/iron-scripter-prequel/index.md b/content/articles/2018/01/iron-scripter-prequel/index.md new file mode 100644 index 000000000..a8f209aff --- /dev/null +++ b/content/articles/2018/01/iron-scripter-prequel/index.md @@ -0,0 +1,39 @@ +--- +url: /articles/2018-01-04-iron-scripter-prequel/ +title: Iron Scripter prequel +authors: + - Richard Siddaway +date: "2018-01-04T18:00:24+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2018/01/iron-scripter-prequel/ +--- + +Registrations are going very quickly. We've sold nearly half the available places. Historically, registrations accelerate in the first half of January so don't wait too long before booking or you may be disappointed. +Another tranche of alumni discount places were made available at the beginning of January but there are only 25 of them so if you want one book your place very soon. +One new feature of Summit for 2018 is Iron Scripter - http://ironscripter.us/. Three factions will battle it out on Thursday 12 April 2018 for the title of Iron Scripter. If you haven't chosen your faction it's time to start thinking about it: +Daybreak Faction - beautiful code +Flawless Faction - flawless code +Battle Faction - good enough to get the job done +Choose your faction based on your approach to coding. +The run up to Iron Scripter starts soon. +We'll be running a series of prequel events - think of them as the successor to the "Scripting Games" of the past. We'll publish a puzzle on powershell.org every week on this schedule: +January 14 puzzle 1 +January 21 puzzle 2 +January 28 puzzle 3 +February 4 puzzle 4 +February 11 puzzle 5 +February 18 puzzle 6 +February 25 puzzle 7 +March 4 puzzle 8 +March 11 puzzle 9 +March 18 puzzle 10 +March 25 puzzle 11 +A solution will be published the following week. The puzzle for March 25 will have a solution posted on 1 April. +Notice we say "a solution". Depending on your faction you may have a different view of how the puzzle should be solved. A forum will be available on PowerShell.org - https://powershell.org/forums/forum/iron-scripter/iron-scripter-prequel/ - for you to present and discuss possible solutions. Give your faction's view of how to solve the puzzle. Use the forums and the answers posted there to identify potential members of your faction. You can use non-attendees during the main Iron Scripter event so this is your chance to identify potential remote collaborators. +We **MUST** stress a couple of things: +- Your solutions **WILL NOT** **be graded** by anyone! You may get feedback from other people but there will be no official grading of answers. In previous Scripting Games we've spent literally months grading scripts and its just not logistically feasible to grade and comment on every entry. +- There is no "correct" answer. Your faction dictates what the solution should look like. +There will be another series of puzzles as a direct lead in to the Iron Scripter competition. These will be published on April 8,9,10 and 11 on powershell.org. **We will NOT post solutions online**. We will also not accept/review submissions however you may find clues or example solutions around the Summit venue. We'll publish more information on these lead in events, and Iron Scripter itself closer to the event. diff --git a/content/articles/2018/01/powershell-story-continued-becoming-a-craftsman/index.md b/content/articles/2018/01/powershell-story-continued-becoming-a-craftsman/index.md new file mode 100644 index 000000000..7fea8a33b --- /dev/null +++ b/content/articles/2018/01/powershell-story-continued-becoming-a-craftsman/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2018-01-28-powershell-story-continued-becoming-a-craftsman/ +title: PowerShell Story Continued Becoming a Craftsman +authors: + - Duffney +date: "2018-01-28T10:46:03+00:00" +categories: + - PowerShell for Admins +aliases: + - /2018/01/powershell-story-continued-becoming-a-craftsman/ +--- + +My journey started off by figuring out how to automate a daily disk space report on the mailserver, which ran most of the company, and emailing the report to my boss at the time. After PowerShell sent that first email, something clicked. I sat back in my chair and thought to myself, “Wow, I don’t have to do this anymore”. I can still feel how exciting and relieving that thought was. Fast forward a few years and I had made automation about 80% of my job. I had moved into a few new roles - Tier 2 Support to Systems Engineer, to Senior Systems Engineer. My last post left off when I left my role as a Senior Systems Engineer and landed a gig as a DevOps Engineer. At the time I thought this was the end of the road. I thought, “I’ll pick up a few new tricks and further improve my PowerShell skills”. I couldn’t have been more wrong. This post picks up at the beginning of my transition into the world of DevOps, where I learned no matter how much you know, you know nothing. Continue reading to hear the rest of the story… + diff --git a/content/articles/2018/01/powershell-summit-registration-status/index.md b/content/articles/2018/01/powershell-summit-registration-status/index.md new file mode 100644 index 000000000..f996ac039 --- /dev/null +++ b/content/articles/2018/01/powershell-summit-registration-status/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2018-01-23-powershell-summit-registration-status/ +title: PowerShell Summit Registration Status +authors: + - Don Jones +date: "2018-01-23T20:30:12+00:00" +categories: + - PowerShell Summit +aliases: + - /2018/01/powershell-summit-registration-status/ +--- + +A quick update - all numbers as of 23-January-2018, 12:23pm Pacific time. +91 seats remaining. We are on track to sell out in approximately 45 days. Unlike previous years where we've scrounged some spare seats at the last minute, **please don't expect that this year, **as I think I've gotten better at math and have not been rounding as much. +Hotel situation: + + * Marriott, we have 6 rooms left. This is our "official" hotel, with the largest number of Summiteers on site. + * Courtyard, we have 9 rooms left. This is a quick walk to the Meydenbauer, with about half as many Summiteers as the Marriott. + * Hotel 116, we have 34 rooms left. This also has about half as many Summiteers as the Marriott, and is our lowest price point hotel. This is still a quick walk to the Meydenbauer. + +After the rooms above are exhausted, you're on to "rack rate," which, sadly, can be ridonkulous as it's a popular time of year to be in Bellevue and they've gotten used to our crowd coming in. **We do ask that you choose one of the above hotels if humanly possible** so that we're not stuck paying for this reserved space regardless. If we have to do so, prices for Summit will assuredly rise in 2019. +Can't make it? We're often asked about session recordings. We're not prepared to commit to anything for 2018, although we're working hard with a partner to try and make something happen. There's no need whatsoever to "+1" this; we're well aware that everyone asks for recordings (despite fairly low actual view numbers for them), and we're working on it. Last year's attempt was massively disruptful and unsuccessful, so we can't have _that_ again. +That's it! Hit us up on Twitter @PSHSummit if you have questions! diff --git a/content/articles/2018/01/pscore-6-jeffrey-snover-and-the-powershell-team-hosting-ama-on-11th-jan-9am-pt/index.md b/content/articles/2018/01/pscore-6-jeffrey-snover-and-the-powershell-team-hosting-ama-on-11th-jan-9am-pt/index.md new file mode 100644 index 000000000..cdf3b5489 --- /dev/null +++ b/content/articles/2018/01/pscore-6-jeffrey-snover-and-the-powershell-team-hosting-ama-on-11th-jan-9am-pt/index.md @@ -0,0 +1,28 @@ +--- +url: /articles/2018-01-09-pscore-6-jeffrey-snover-and-the-powershell-team-hosting-ama-on-11th-jan-9am-pt/ +title: PSCore 6 – Jeffrey Snover and the PowerShell Team hosting AMA on 11th Jan 9am PT +authors: + - Mark Wragg +date: "2018-01-09T13:20:04+00:00" +categories: + - Announcements + - Events + - PowerShell for Admins +aliases: + - /2018/01/pscore-6-jeffrey-snover-and-the-powershell-team-hosting-ama-on-11th-jan-9am-pt/ +--- + +PowerShell Core 6 is scheduled for General Availability release tomorrow (10th January). As such Jeffrey Snover and the PowerShell Team are hosting an AMA (Ask Me Anything) event on the 11th January from 9am - 10am PT. + +> "This is going to be a historical week for PowerShell Core 6 🙂 ...Join the PowerShell team and [@**jsnover**][1]{.twitter-atreply.pretty-link.js-nav} this Thursday for the PowerShell AMA" +>![](https://powershell.org/wp-content/uploads/2018/01/PowerShell-AMA-300x160.jpg) + +Add it to your calendar [here][2]. +Due to the timing I expect that the team are mostly hoping for questions related to the release of PS Core, although in the spirit of an AMA anything goes :). +If you haven't yet checked out PowerShell Core 6, you can [grab the RC release today][3] and install it side-by-side with Windows PowerShell. +I have also written [a blog post that explains what PowerShell Core is, why it exists and how it compares][4] which I hope you find informative. + + [1]: https://twitter.com/jsnover + [2]: https://aka.ms/PowerShellAMA/invite + [3]: https://github.com/PowerShell/PowerShell + [4]: http://wragg.io/powershell-core/ diff --git a/content/articles/2018/01/summit-2018-registration-update/index.md b/content/articles/2018/01/summit-2018-registration-update/index.md new file mode 100644 index 000000000..c524bdd07 --- /dev/null +++ b/content/articles/2018/01/summit-2018-registration-update/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2018-01-26-summit-2018-registration-update/ +title: Summit 2018 registration update +authors: + - Richard Siddaway +date: "2018-01-26T16:55:41+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2018/01/summit-2018-registration-update/ +--- + +As an update to the registrations for Summit 2018 - we've sold 75% of the available places. +As Don explained we won't be able to add further places like we did last year. +This is our biggest (and hopefully best) Summit yet with more sessions and nearly double the number of speakers. +If you want a place I recommend not waiting. Last year we sold our last place on 24 February. If sales carry on as they currently are we'll sell out for 2018 well before then. diff --git a/content/articles/2018/02/2018-community-lightning-demos/index.md b/content/articles/2018/02/2018-community-lightning-demos/index.md new file mode 100644 index 000000000..109ebaa73 --- /dev/null +++ b/content/articles/2018/02/2018-community-lightning-demos/index.md @@ -0,0 +1,83 @@ +--- +url: /articles/2018-02-04-2018-community-lightning-demos/ +title: 2018 Community Lightning Demos +authors: + - pscookiemonster +date: "2018-02-04T02:45:42+00:00" +categories: + - PowerShell for Admins + - PowerShell Summit +aliases: + - /2018/02/2018-community-lightning-demos/ +--- + +#### Rambling + +Last year's [PowerShell + Devops Global Summit][1] was a roller coaster. +On one hand, I spoke for the first time - it was terrifying. Getting up in front of a local user group had helped, but it's not quite the same as a room full of PowerShell-ers, including MVPs and PowerShell team members - eek! +On the other hand, I was lucky enough to host the Community Lightning Demos. We managed to give 22 folks the chance to get up in front of the PowerShell community and give a quick, low-pressure ~10 minute demo. + +#### How did it go? + +Presumably it was a success! We got to see a variety awesome demos, folks got a taste of speaking in front of a summit crowd, and almost 10 lightning demo speakers are presenting full sessions this year.  Here's a glance from [Trevor][2]: +[![](https://powershell.org/wp-content/uploads/2018/02/docs-300x169.jpg)](https://powershell.org/wp-content/uploads/2018/02/docs.jpg) +The demos are back again this year, with a few changes thanks to your feedback and the help of [Don][3], [Richard][4], and others: + + * The official Community Lightning Demos will be 120 minutes + * We'll have more room for attendees, and no competing breakout sessions + * A non-invasive green-yellow-red time tracker will help keep speakers on track + * The demos are in the middle of the summit this year, leaving two days to follow up with speakers + +#### What's the plan? + + * We'll open a call-for-demos March 1st + * We have 12 slots for official Community Lightning Demos + * Given that we have fewer slots, we may not get to all submissions. We'll likely prefer: + * New speakers over breakout session speakers and 2017 demo speakers + * New ideas or interesting variations + * If we get enough submissions, we'll try to allocate more time (e.g. via side sessions) + +So! Start thinking about what you want to demo. The specifics will change, but the gist of [this bit][5] on the 2017 Community Lightning Demos may help, including an example demo on PSDepend. + +#### What if I don't get picked? + +Seriously, don't worry about this! We'll try to work things out. Worst case scenario? + + * We might end up with space in a side session + * Maybe we look into a post-summit unofficial online thing for community lightning demos + * You might give someone an idea to run with based on your proposal alone! [Glenn][6] didn't get to chat about Neo4j, but his proposal lead to [PSNeo4j][7] and [a session][8] at the summit this year + +Before we go, here's a quick taste of the 2017 lightning demos, documented by Michael: [1][9], [2][10], [3][11], [4][12], [5][13], [6][14], [7][15], [8][16], [9][17], [10][18], [11][19], [12][20], [13][21], [14][22], [15][23], [16][24], [17][25], [18][26], [19][27], [20][28], [21][29], [22][30].  Some of their material [is available here][31] +Hope to see you on the stage - cheers! + + [1]: https://powershell.org/summit/ + [2]: https://twitter.com/pcgeek86 + [3]: https://twitter.com/concentrateddon + [4]: https://twitter.com/RSiddaway + [5]: http://ramblingcookiemonster.github.io/Summit-Lightning-Demos/ + [6]: https://twitter.com/GlennSarti + [7]: https://github.com/RamblingCookieMonster/PSNeo4j + [8]: https://powershelldevopsglobalsummit2018.sched.com/event/Cpp3/connecting-the-dots-with-powershell + [9]: https://twitter.com/barbariankb/status/852253752849334272 + [10]: https://twitter.com/barbariankb/status/852256350490865664 + [11]: https://twitter.com/barbariankb/status/852260034213928960 + [12]: https://twitter.com/barbariankb/status/852262428783943680 + [13]: https://twitter.com/barbariankb/status/852264366095204352 + [14]: https://twitter.com/barbariankb/status/852269633042239488 + [15]: https://twitter.com/barbariankb/status/852271188248109056 + [16]: https://twitter.com/barbariankb/status/852273584785444864 + [17]: https://twitter.com/barbariankb/status/852276513911132160 + [18]: https://twitter.com/barbariankb/status/852278418477416454 + [19]: https://twitter.com/barbariankb/status/852280648307949569 + [20]: https://twitter.com/barbariankb/status/852286740643500032 + [21]: https://twitter.com/barbariankb/status/852290218623291392 + [22]: https://twitter.com/barbariankb/status/852291897196335104 + [23]: https://twitter.com/barbariankb/status/852294532582391808 + [24]: https://twitter.com/barbariankb/status/852297244619317248 + [25]: https://twitter.com/barbariankb/status/852299748610457600 + [26]: https://twitter.com/daviwil/status/852267784201314304 + [27]: https://twitter.com/barbariankb/status/852302084422590464 + [28]: https://twitter.com/barbariankb/status/852303459382476800 + [29]: https://twitter.com/barbariankb/status/852305871795245056 + [30]: https://twitter.com/barbariankb/status/852307309959106560 + [31]: https://github.com/devops-collective-inc/summit-materials#community-lightning-demos diff --git a/content/articles/2018/02/_index.md b/content/articles/2018/02/_index.md new file mode 100644 index 000000000..2af662954 --- /dev/null +++ b/content/articles/2018/02/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from February 2018" +description: "PowerShell.org Articles published in February 2018." +--- diff --git a/content/articles/2018/02/help-us-recognize-amazing-powershell-contributors/index.md b/content/articles/2018/02/help-us-recognize-amazing-powershell-contributors/index.md new file mode 100644 index 000000000..94fc58ba9 --- /dev/null +++ b/content/articles/2018/02/help-us-recognize-amazing-powershell-contributors/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2018-02-01-help-us-recognize-amazing-powershell-contributors/ +title: Help us Recognize Amazing PowerShell Contributors! +authors: + - Don Jones +date: "2018-02-01T16:36:07+00:00" +categories: + - PowerShell for Admins +aliases: + - /2018/02/help-us-recognize-amazing-powershell-contributors/ +--- + +_First: Please share this as widely as possible in your social media channels, so we can get the most number of suggestions possible!_ +We're working with the PowerShell team at Microsoft to identify individuals who have made an outstanding contribution to the PowerShell community. Perhaps they've written blog posts that really helped you conquer a PowerShell challenge, or maybe they've contributed code (on GitHub or elsewhere) that you rely on. Maybe they're an amazing teacher, or perhaps they're an awesome coder. Whatever their contribution, if it's been notable and helpful to you, we'd like to hear from you. + + + +[Go here to take the survey][1]. This will remain open through February 2018, and you're more than welcome to complete it multiple times if there are multiple people you want to recognize. We're relying on correct spelling of people's names to correlate the results, so please double-check that. We'll also need some means of contacting them, such as a Twitter handle or GitHub ID, or even a personal website, so have that handy before you take the survey. +We look forward to hearing from you! + + [1]: https://674004.polldaddy.com/s/powershell-heroes diff --git a/content/articles/2018/02/iron-scripter-2018-prequel-puzzle-3-a-commentary/index.md b/content/articles/2018/02/iron-scripter-2018-prequel-puzzle-3-a-commentary/index.md new file mode 100644 index 000000000..0d08bcaa2 --- /dev/null +++ b/content/articles/2018/02/iron-scripter-2018-prequel-puzzle-3-a-commentary/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2018-02-04-iron-scripter-2018-prequel-puzzle-3-a-commentary/ +title: "Iron Scripter 2018 Prequel: Puzzle 3 – a commentary" +authors: + - Richard Siddaway +date: "2018-02-04T00:05:39+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/02/iron-scripter-2018-prequel-puzzle-3-a-commentary/ +--- + +My notes and commentary on puzzle 3 - working with a web feed - are now available: [Iron Scripter Prequel Puzzle 3 - A commentary][1] +As with previous commentaries I've not presented the faction specific solutions - view the forums and Slack channel to see what your faction and maybe more importantly what other factions have done. +Puzzle 4 will be available around the time you read this. +Enjoy + + [1]: https://powershell.org/wp-content/uploads/2018/02/Iron-Scripter-Prequel-Puzzle-3-A-commentary.pdf diff --git a/content/articles/2018/02/iron-scripter-2018-prequel-puzzle-4-a-commentary/index.md b/content/articles/2018/02/iron-scripter-2018-prequel-puzzle-4-a-commentary/index.md new file mode 100644 index 000000000..15840e0b6 --- /dev/null +++ b/content/articles/2018/02/iron-scripter-2018-prequel-puzzle-4-a-commentary/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2018-02-11-iron-scripter-2018-prequel-puzzle-4-a-commentary/ +title: "Iron Scripter 2018 prequel: Puzzle 4 – a commentary" +authors: + - Richard Siddaway +date: "2018-02-11T00:03:04+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/02/iron-scripter-2018-prequel-puzzle-4-a-commentary/ +--- + +Puzzle 4 is all about working with legacy utilities. My notes and commentary are now available: [Iron Scripter Prequel Puzzle 4 - A commentary][1] +As with previous commentaries I've not presented the faction specific solutions - view the forums and Slack channels to see what the factions are doing and join with your faction. +Puzzle 5 will be available around the time you read this. +Enjoy. + + [1]: https://powershell.org/wp-content/uploads/2018/02/Iron-Scripter-Prequel-Puzzle-4-A-commentary.pdf diff --git a/content/articles/2018/02/iron-scripter-2018-prequel-puzzle-4/index.md b/content/articles/2018/02/iron-scripter-2018-prequel-puzzle-4/index.md new file mode 100644 index 000000000..fbb43f4e1 --- /dev/null +++ b/content/articles/2018/02/iron-scripter-2018-prequel-puzzle-4/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2018-02-04-iron-scripter-2018-prequel-puzzle-4/ +title: "Iron Scripter 2018 prequel: Puzzle 4" +authors: + - Richard Siddaway +date: "2018-02-04T00:02:06+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/02/iron-scripter-2018-prequel-puzzle-4/ +--- + +You're a quarter of the way to Iron Scripter. In this challenge - [Iron Scripter Prequel Puzzle 4][1] -  +you'll be asked to find a way to make legacy command line tools work with the PowerShell pipeline +. +In all things remember the goal of your faction. +Please remember that we're not grading submissions for these puzzles. You can comment, and discuss the puzzle on the Iron Scripter Prequel forum. +If anyone is really stuck or doesn't understand something in the puzzle leave a comment here and I'll try to answer. No guarantees on timeframe though. +Good luck + + [1]: https://powershell.org/wp-content/uploads/2018/02/Iron-Scripter-Prequel-Puzzle-4.pdf diff --git a/content/articles/2018/02/iron-scripter-2018-prequel-puzzle-5-a-commentary/index.md b/content/articles/2018/02/iron-scripter-2018-prequel-puzzle-5-a-commentary/index.md new file mode 100644 index 000000000..c16bddc3b --- /dev/null +++ b/content/articles/2018/02/iron-scripter-2018-prequel-puzzle-5-a-commentary/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2018-02-18-iron-scripter-2018-prequel-puzzle-5-a-commentary/ +title: "Iron Scripter 2018 prequel: Puzzle 5 – a commentary" +authors: + - Richard Siddaway +date: "2018-02-18T00:03:27+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/02/iron-scripter-2018-prequel-puzzle-5-a-commentary/ +--- + +Puzzle 5 involves working with performance counters. My notes and commentary are available: [Iron Scripter Prequel Puzzle 5 - A commentary][1] +As with previous commentaries I've not presented the faction specific solutions - view the forums and Slack channels to see what the factions are doing and join with your faction. +Puzzle 6 will be available around the time you read this. +Enjoy. + + [1]: https://powershell.org/wp-content/uploads/2018/02/Iron-Scripter-Prequel-Puzzle-5-A-commentary.pdf diff --git a/content/articles/2018/02/iron-scripter-2018-prequel-puzzle-5/index.md b/content/articles/2018/02/iron-scripter-2018-prequel-puzzle-5/index.md new file mode 100644 index 000000000..bd531e0b0 --- /dev/null +++ b/content/articles/2018/02/iron-scripter-2018-prequel-puzzle-5/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2018-02-11-iron-scripter-2018-prequel-puzzle-5/ +title: "Iron Scripter 2018 prequel: Puzzle 5" +authors: + - Richard Siddaway +date: "2018-02-11T00:01:37+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/02/iron-scripter-2018-prequel-puzzle-5/ +--- + +You're approaching the half way point on your journey to Iron Scripter. Your challenge, should you choose to accept it, involves performance counters and multiple ways of presenting data. The details are here: [Iron Scripter Prequel Puzzle 5][1] +In all things remember the goals of your faction. +Please remember that we're NOT grading submissions for these puzzles. You can comment, and discuss the puzzle on the Iron Scripter Prequel forums or on the Summit Slack channel +If anyone is really stuck or doesn't understand something in the puzzle leave a comment here or on the Slack channel. I'll try to answer but no guarantees about timeframe as I'm finishing off work on Summit 2018 and starting Summit 2019! +Good luck. + + [1]: https://powershell.org/wp-content/uploads/2018/02/Iron-Scripter-Prequel-Puzzle-5.pdf diff --git a/content/articles/2018/02/iron-scripter-prequel-puzzle-6-commentary/index.md b/content/articles/2018/02/iron-scripter-prequel-puzzle-6-commentary/index.md new file mode 100644 index 000000000..37bb760bf --- /dev/null +++ b/content/articles/2018/02/iron-scripter-prequel-puzzle-6-commentary/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2018-02-25-iron-scripter-prequel-puzzle-6-commentary/ +title: "Iron Scripter Prequel: Puzzle 6 commentary" +authors: + - Richard Siddaway +date: "2018-02-25T00:03:29+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/02/iron-scripter-prequel-puzzle-6-commentary/ +--- + +Puzzle 6 has some interesting aspects when you dig into determining system up time: [Iron Scripter Prequel Puzzle 6 - A commentary][1] +I've not presented full faction specific solutions as usual - view the forums and Slack channels to see how the factions are solving this puzzle. +Puzzle 7 will be available around the time you read this. +Enjoy. + + [1]: https://powershell.org/wp-content/uploads/2018/02/Iron-Scripter-Prequel-Puzzle-6-A-commentary.pdf diff --git a/content/articles/2018/02/iron-scripter-prequels-puzzle-6/index.md b/content/articles/2018/02/iron-scripter-prequels-puzzle-6/index.md new file mode 100644 index 000000000..81885dd2d --- /dev/null +++ b/content/articles/2018/02/iron-scripter-prequels-puzzle-6/index.md @@ -0,0 +1,29 @@ +--- +url: /articles/2018-02-18-iron-scripter-prequels-puzzle-6/ +title: "Iron Scripter Prequels: Puzzle 6" +authors: + - Richard Siddaway +date: "2018-02-18T00:01:13+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/02/iron-scripter-prequels-puzzle-6/ +--- + +This is your half way challenge. This week your challenge involves discovering the time a system has been running - [Iron Scripter Prequel Puzzle 6][1] + +In all things remember the goals of your faction. + + +Please remember that we're NOT grading submissions for these puzzles. You can comment, and discuss the puzzle on the Iron Scripter Prequel forums or on the Summit Slack channel. + + +If anyone is really stuck or doesn't understand something in the puzzle leave a comment here or on the Slack channel. I'll try to answer but no guarantees about timeframe as I'm finishing off work on Summit 2018 and starting Summit 2019! + + +Good luck. + + + [1]: https://powershell.org/wp-content/uploads/2018/02/Iron-Scripter-Prequel-Puzzle-6.pdf diff --git a/content/articles/2018/02/iron-scripter-prequels-puzzle-7/index.md b/content/articles/2018/02/iron-scripter-prequels-puzzle-7/index.md new file mode 100644 index 000000000..33bc3f3b4 --- /dev/null +++ b/content/articles/2018/02/iron-scripter-prequels-puzzle-7/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2018-02-25-iron-scripter-prequels-puzzle-7/ +title: "Iron Scripter Prequels: puzzle 7" +authors: + - Richard Siddaway +date: "2018-02-25T00:01:07+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/02/iron-scripter-prequels-puzzle-7/ +--- + +You're past half way on journey to iron Scripter. Only a few more training opportunities will be available to you before the ultimate competition. +In this week's challenge  [Iron Scripter Prequel Puzzle 7][1] you'll be working with PowerShell classes. +In all things remember the goals of  your faction. +Please remember that we're NOT grading the submissions for these puzzles. You can comment, and discuss the puzzle on the Iron Scripter prequel forums or on the Summit Slack channel. +If anyone is really stuck or doesn't understand something in the puzzle leave a comment here or on the Slack channel. I'll try and answer but can't guarantee timeframes. +If there is sufficient interest I'll run a Q&A side session on the prequel puzzles at Summit. Let me know either here or on the Slack channel if you're interested. +Good luck + + [1]: https://powershell.org/wp-content/uploads/2018/02/Iron-Scripter-Prequel-Puzzle-7.pdf diff --git a/content/articles/2018/02/powershell-devops-global-summit-2018-registration-status/index.md b/content/articles/2018/02/powershell-devops-global-summit-2018-registration-status/index.md new file mode 100644 index 000000000..3b9bbf435 --- /dev/null +++ b/content/articles/2018/02/powershell-devops-global-summit-2018-registration-status/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2018-02-06-powershell-devops-global-summit-2018-registration-status/ +title: PowerShell + DevOps Global Summit 2018 Registration Status +authors: + - Don Jones +date: "2018-02-06T22:21:11+00:00" +categories: + - PowerShell Summit +aliases: + - /2018/02/powershell-devops-global-summit-2018-registration-status/ +--- + +As I write this, we’ve sold out. Here’s what happens next: +We need to finish reconciling our speaker slots and PowerShell team seats, which will take about a week. That may result in a free seat or two, which we will place on sale. Watch @PSHSummit on Twitter for that announcement. +A WAITLIST IS AVAILABLE ON THE REGISTRATION PAGE. Sign up if you’d like first notice of released inventory and a 24h window to claim a seat +Beyond that, monitor the Summit discussion forum here. We often have last minute cancellations, and while we don’t permit refunds, we do permit ticket holders to transfer their tickets. We will advise them to post in the forum to solicit transferees. Financial arrangements for such transfers are private; we cannot facilitate those +That will do it for registration - aside from a possible small handful of seats coming out of our final reconciliation, and the opportunity of purchasing a ticket from a cancellation, there won’t be additional inventory. We’re not looking to increase attendance for 2019, either; we will be sticking at the current attendee count for the foreseeable future. +Big thanks to our returning and new Summiteers! We are looking forward to seeing you in April! diff --git a/content/articles/2018/02/powershell-summit-pre-arrival-information-dump/index.md b/content/articles/2018/02/powershell-summit-pre-arrival-information-dump/index.md new file mode 100644 index 000000000..520c5c984 --- /dev/null +++ b/content/articles/2018/02/powershell-summit-pre-arrival-information-dump/index.md @@ -0,0 +1,43 @@ +--- +url: /articles/2018-02-05-powershell-summit-pre-arrival-information-dump/ +title: PowerShell Summit Pre-Arrival Information Dump +authors: + - Don Jones +date: "2018-02-05T17:49:05+00:00" +categories: + - PowerShell Summit +aliases: + - /2018/02/powershell-summit-pre-arrival-information-dump/ +--- + +This is a bit of a long post, but we promise - it's important, and it's worth it. +**Refunds & Transfers** +Because this is the time of year when it starts to come up, remember that we don't offer registration refunds. You're welcome to transfer your membership, however, at no fee. Just log into EventBrite (if someone else registered you, they'll need to do this) and change the attendee information. Voila! +**Pre-Arrival** +For the love of all that is good and just in the world, make sure you have your EventBrite ticket. That can be printed, in the EventBrite phone app, in an email on your phone, or whatever - we just need the barcode. If you don't have this, there will be a Sad Summiteer line for you to stand in, where we can look you up by name or order number. +Speakers! You're not in EventBrite yet, but you will be. Right before Summit, we'll be registering you, so be sure to watch your email. If you haven't provided Richard with a good email address (we STRONGLY suggest a personal one to avoid corporate spam-traps), please do so NOW. +**Registration Process** +When you get to the Meydenbauer Center, go DOWNSTAIRS to Center Hall A and B. This is not where we've been in the past. Do not go upstairs. +Step 1 will be to get your EventBrite ticket scanned. Don't have yours? Sad panda, you'll need to stand in Sad Summiteer line for a manual name lookup. Then... +Step 2, find your badge (organized by last name), and insert it into a badge holder. Then, on to... +Step 3 is T-Shirt pickup. This must be done right then - we won't have this set up later, and leftovers will be donated to a local charity. If you're skipping Monday for some reason, you will not get your shirt. We will have tables set up for each shirt size. Go to the table corresponding to your pre-selected choice in EventBrite, where your name will be checked against a list. You shirt size is also printed on your name badge for your convenience. +_This is a good time to double-check your EventBrite shirt size selection_. You can change it until March 5th or so (if someone else registered you, they will need to make the change for you as well). You cannot change your mind later because we're ordering the exact quantities indicated in EventBrite. Speakers! We collected your shirt size during the Call for Topics; check with Richard Siddaway on your shirt size, if you need to. Do this RIGHT NOW if you're not certain. +Step 4 is breakfast. Enjoy. And wear your badge at all times, please. +**Venue Layout** +Monday, we'll be downstairs in Center Hall A and B all day. All day! Tuesday-Thursday, we're back in our traditional space upstairs (rooms 401-409) for all sessions; meals will remain downstairs in Center Hall. During meal times, all escalators will run in the direction of food; about halfway through meal breaks, we'll run them all back int he direction of sessions. If you want to go the opposite direction for some weird reason, take the elevators. Do not run wrong-ways on the escalators. +**GET THE SCHEDULE APP!** +If you hustle to the schedule website (linked from PowerShellSummit.org), we suggest you bookmark it. Then, get our iPhone or Android app for your phones. If you need a Windows Phone app, HAHAHAHAHAHAHA. The app is where ALL schedule changes will be reflected. Install it. Examine it. Love it. +**CHOOSE YOUR FACTION!** +If you haven't already been participating in Iron Scripter Prequel on PowerShell.org, jump in. And use the #faction- channels in our Slack team to find the faction whose style fits you best. Locate members of your faction all week, and get to be friends - because you'll need each other for the epic, annual IRON SCRIPTER tournament Thursday afternoon! (And we may have some faction-logo rubber stamps wandering around, if you'd like to indicate your faction loyalty on your name badge!) +**Open Spaces / Side Sessions** +Tuesday-Thursday, rooms 407 and 408 will be available for ad-hoc "Side Sessions." We do not provide A/V in these rooms, but you can suggest a session anytime you like. Email your suggestions to sidesessions@powershell.org. If you have a time slot request, or a time you don't want your session to be, just mention it. We'll do our best to accommodate, reply to you, and add you to the schedule. We'll announce sessions each morning, so try to schedule at least by the day before. +**Session Reviews** +THESE ARE IMPORTANT. DO THEM. You can do so right from within our app, or the Sched.com website. Reviews end on Thursday afternoon, so you can't save these up and do them a week later, sorry. +**Power Cord Policy** +Do not under any circumstances WHATSOEVER drag a power cord across any walkway. Do not leave your electronics leaning against the wall in an attempt to avoid running a cord across the walkway. This is serious, Fire Marshal business. Do not poke the Fire Marshall - his office is literally across the street. +**Slack** +People often use the Slack team to coordinate dinners and more; we recommend getting their mobile app and logging into the DevOps-Summit workspace. +**Hug Jason** +Hugs are an important part of Jason Helmick's personal economy, and as this is his last year serving as our CFO, please take a moment to thank the big bald goofball for his service. +**Spouse / Guest Passes** +Please bear in mind that only paid attendees are permitted to any and all Summit activities - this is as much about insurance requirements as it is our costs. We did offer Spouse/Guest passes on the main registration site - those provide access to our Monday and Wednesday evening events only. Please ensure your guest brings their EventBrite ticket (barcode) with them to each event. We cannot accommodate early admission for guests. diff --git a/content/articles/2018/02/summit-2018-registration-status/index.md b/content/articles/2018/02/summit-2018-registration-status/index.md new file mode 100644 index 000000000..fbdcfb6ae --- /dev/null +++ b/content/articles/2018/02/summit-2018-registration-status/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2018-02-03-summit-2018-registration-status/ +title: Summit 2018 registration status +authors: + - Richard Siddaway +date: "2018-02-03T10:07:42+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2018/02/summit-2018-registration-status/ +--- + +The speed at which places at Summit are being purchased has been amazing. We're down to our LAST 25 places. +At present rates I expect those to be gone by this time next week. +If you want a place at Summit 2018 - BUY NOW. +If you know of anyone who wants a place at Summit 2018 - tell them to BUY NOW +Last year we managed to add about 30 places after selling our initial number. We'll NOT be able to do that this year. We're getting much better at working out how many places are, and can be, available. +This is the LAST CALL for registrations for Summit 2018. diff --git a/content/articles/2018/02/updated-summit-pre-arrival-infodump/index.md b/content/articles/2018/02/updated-summit-pre-arrival-infodump/index.md new file mode 100644 index 000000000..2a32373b7 --- /dev/null +++ b/content/articles/2018/02/updated-summit-pre-arrival-infodump/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2018-02-08-updated-summit-pre-arrival-infodump/ +title: Updated Summit Pre-Arrival InfoDump +authors: + - Don Jones +date: "2018-02-08T19:26:20+00:00" +categories: + - PowerShell Summit +aliases: + - /2018/02/updated-summit-pre-arrival-infodump/ +--- + +We sent out a big email blast to everyone this morning (noon Eastern time), and if you didn't get it it's because (probably) your corporate email is block-block-blocking us. You're welcome to sign up a personal email address at , if you'd like. We'll also continue to post communications in the #summit-events channel in the Slack team. A PDF of this morning's email is here, although this'll be the last one we post publicly. +[Important Pre-Summit Information][1] +That mailing list and our Slack team are going to be our best way to communicate with Summiteers, so make sure one of them is working for you. + + [1]: https://powershell.org/wp-content/uploads/2018/02/Important-Pre-Summit-Information.pdf diff --git a/content/articles/2018/03/2018-community-lightning-demos-sign-up-now/index.md b/content/articles/2018/03/2018-community-lightning-demos-sign-up-now/index.md new file mode 100644 index 000000000..88178a1d3 --- /dev/null +++ b/content/articles/2018/03/2018-community-lightning-demos-sign-up-now/index.md @@ -0,0 +1,40 @@ +--- +url: /articles/2018-03-10-2018-community-lightning-demos-sign-up-now/ +title: 2018 Community Lightning Demos – Sign Up Now! +authors: + - pscookiemonster +date: "2018-03-10T02:41:33+00:00" +categories: + - PowerShell Summit +aliases: + - /2018/03/2018-community-lightning-demos-sign-up-now/ +--- + +If you've been to a PowerShell Summit, chances are you've seen the awesome lightning demos put on by the PowerShell team members. It's a fun format - each team member gives a quick 5-10 minute demo of something they're working on, one after the other. +In a few weeks, the PowerShell + Devops Global Summit will kick off, with a Community Lightning Demo session scheduled for Tuesday afternoon. We're looking for community members like you to [sign up][1] and present! Demo something cool that you've written or used - a module, function, tip, trick, etc. - just keep it under 10 minutes. + + + [![](https://powershell.org/wp-content/uploads/2018/02/docs-300x169.jpg)](https://powershell.org/wp-content/uploads/2018/02/docs.jpg) + + + + Michael Lombardi presenting a demo, credit to Trevor Sullivan + + + + +Here are some links with more info: + + * [A list of demos from 2017][2] + * [A longer bit on community lightning demos][3] + * [An example demo recording][4] + * [Announcement with pictures from last year][5] + +Sound interesting? Want to jump on stage for a few minutes and show us something fun? [Sign up now][1]! +We'll be looking forward to some awesome demos; hope to see you there! + + [1]: https://www.papercall.io/cfps/988/submissions/new + [2]: https://github.com/devops-collective-inc/summit-materials#community-lightning-demos + [3]: http://ramblingcookiemonster.github.io/Summit-Lightning-Demos/ + [4]: https://www.youtube.com/watch?v=50Z6vEHVgDg + [5]: https://powershell.org/2018/02/04/2018-community-lightning-demos/ diff --git a/content/articles/2018/03/_index.md b/content/articles/2018/03/_index.md new file mode 100644 index 000000000..d3da6a9e1 --- /dev/null +++ b/content/articles/2018/03/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from March 2018" +description: "PowerShell.org Articles published in March 2018." +--- diff --git a/content/articles/2018/03/iron-scripter-preludes-and-main-event-rules-and-info/index.md b/content/articles/2018/03/iron-scripter-preludes-and-main-event-rules-and-info/index.md new file mode 100644 index 000000000..fa71838a6 --- /dev/null +++ b/content/articles/2018/03/iron-scripter-preludes-and-main-event-rules-and-info/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2018-03-18-iron-scripter-preludes-and-main-event-rules-and-info/ +title: "Iron Scripter Preludes and Main Event: Rules and Info" +authors: + - Don Jones +date: "2018-03-18T20:00:36+00:00" +categories: + - PowerShell Summit + - Scripting Games +aliases: + - /2018/03/iron-scripter-preludes-and-main-event-rules-and-info/ +--- + +Information is [now available at IronScripter.us][1] for the at-Summit events, and participants are advised to refresh themselves on the [Rules][2]. +Participants attending Summit should begin choosing their faction and getting to know their teammates in the faction-specific channels of the DevOps-Summit Slack team (open only to attendees and alumni). +Participants hoping to participate remotely may wish to start choosing a faction and finding a way to get in touch with them. The [Faction Discussion][3] may be a good way to do that. + + [1]: http://ironscripter.us/iron-scripter-us-2018/ + [2]: http://ironscripter.us/rules/ + [3]: https://powershell.org/forums/forum/iron-scripter/faction-discussion/ diff --git a/content/articles/2018/03/iron-scripter-prequel-puzzle-10/index.md b/content/articles/2018/03/iron-scripter-prequel-puzzle-10/index.md new file mode 100644 index 000000000..96727931e --- /dev/null +++ b/content/articles/2018/03/iron-scripter-prequel-puzzle-10/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2018-03-18-iron-scripter-prequel-puzzle-10/ +title: "Iron Scripter prequel: Puzzle 10" +authors: + - Richard Siddaway +date: "2018-03-18T00:01:59+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/03/iron-scripter-prequel-puzzle-10/ +--- + +Activity on the Iron Scripter forum and Slack channels has reduced for the last few puzzles leading me to believe that I've been giving out too many challenges. I've decided that this will be the last prequel puzzle: [Iron Scripter Prequel Puzzle 10][1] +There won't be a puzzle 11. +Next week I'll publish the commentary for puzzle 9 and the week after that for puzzle 10 meaning you get 2 weeks for these last 2 puzzles. +Next year, if we repeat Iron Scripter and the prequels, we'll space the prequels out a bit more so that we don't overload you. +Details on the iron Scripter challenge itself will be published soon - until then enjoy this last prequel puzzle. + + [1]: https://powershell.org/wp-content/uploads/2018/03/Iron-Scripter-Prequel-Puzzle-10.pdf diff --git a/content/articles/2018/03/iron-scripter-prequel-puzzle-7-a-commentary/index.md b/content/articles/2018/03/iron-scripter-prequel-puzzle-7-a-commentary/index.md new file mode 100644 index 000000000..9020e3d0c --- /dev/null +++ b/content/articles/2018/03/iron-scripter-prequel-puzzle-7-a-commentary/index.md @@ -0,0 +1,20 @@ +--- +url: /articles/2018-03-04-iron-scripter-prequel-puzzle-7-a-commentary/ +title: "Iron Scripter Prequel: Puzzle 7 – A commentary" +authors: + - Richard Siddaway +date: "2018-03-04T00:03:25+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/03/iron-scripter-prequel-puzzle-7-a-commentary/ +--- + +Puzzle 7 introduces a touch of class - PowerShell classes to be precise. The way I approached the puzzle is available: [Iron Scripter Prequel Puzzle 7 - A commentary][1] +I've not presented full faction specific solutions as usual - view the forums and Slack channels to see how the factions are solving this puzzle. +Puzzle 8 will be available around the time you read this. +Enjoy. + + [1]: https://powershell.org/wp-content/uploads/2018/03/Iron-Scripter-Prequel-Puzzle-7-A-commentary.pdf diff --git a/content/articles/2018/03/iron-scripter-prequel-puzzle-8-a-commentary/index.md b/content/articles/2018/03/iron-scripter-prequel-puzzle-8-a-commentary/index.md new file mode 100644 index 000000000..13e09810a --- /dev/null +++ b/content/articles/2018/03/iron-scripter-prequel-puzzle-8-a-commentary/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2018-03-11-iron-scripter-prequel-puzzle-8-a-commentary/ +title: "Iron Scripter prequel: Puzzle 8 – A commentary" +authors: + - Richard Siddaway +date: "2018-03-11T00:03:17+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/03/iron-scripter-prequel-puzzle-8-a-commentary/ +--- + +In puzzle 8 you're asked to create some local users, folders and a file. Then set permissions on the file. I've provided a commentary on the puzzle: [Iron Scripter Prequel Puzzle 8 - A commentary][1] +I've not presented full faction specific solutions as usual - view the forums and Slack channels to see how the factions are solving this puzzle. +Puzzle 9 will be available around the time you read this. +Enjoy. + + + [1]: https://powershell.org/wp-content/uploads/2018/03/Iron-Scripter-Prequel-Puzzle-8-A-commentary.pdf diff --git a/content/articles/2018/03/iron-scripter-prequel-puzzle-8/index.md b/content/articles/2018/03/iron-scripter-prequel-puzzle-8/index.md new file mode 100644 index 000000000..252dfbf7c --- /dev/null +++ b/content/articles/2018/03/iron-scripter-prequel-puzzle-8/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2018-03-04-iron-scripter-prequel-puzzle-8/ +title: "Iron Scripter Prequel: Puzzle 8" +authors: + - Richard Siddaway +date: "2018-03-04T00:01:39+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/03/iron-scripter-prequel-puzzle-8/ +--- + +Iron Scripter is rapidly approaching. This is one of your last few training opportunities. +This challenge [Iron Scripter Prequel Puzzle 8][1] revolves around setting permissions on files. +In all things remember the goals of your faction. +Please remember that we're NOT grading the submissions for these puzzles. You can comment, and discuss the puzzle on the Iron Scripter prequel forums or on the Summit Slack channel. +If anyone is really stuck or doesn't understand something in the puzzle leave a comment here or on the Slack channel. I'll try and answer but can't guarantee timeframes. +If there is sufficient interest I'll run a Q&A side session on the prequel puzzles at Summit. Let me know either here or on the Slack channel if you're interested. +Good luck + + + [1]: https://powershell.org/wp-content/uploads/2018/03/Iron-Scripter-Prequel-Puzzle-8.pdf diff --git a/content/articles/2018/03/iron-scripter-prequel-puzzle-9/index.md b/content/articles/2018/03/iron-scripter-prequel-puzzle-9/index.md new file mode 100644 index 000000000..6b89d90af --- /dev/null +++ b/content/articles/2018/03/iron-scripter-prequel-puzzle-9/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2018-03-11-iron-scripter-prequel-puzzle-9/ +title: "Iron Scripter prequel: Puzzle 9" +authors: + - Richard Siddaway +date: "2018-03-11T00:01:15+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/03/iron-scripter-prequel-puzzle-9/ +--- + +You're approaching the end of the prequels - soon it will be time for Iron Scripter. This week's challenge involves the file system and the scheduling system - [Iron Scripter Prequel Puzzle 9][1] + +In all things remember the goals of your faction. +Please remember that we're NOT grading the submissions for these puzzles. You can comment, and discuss the puzzle on the Iron Scripter prequel forums or on the Summit Slack channel. +If anyone is really stuck or doesn't understand something in the puzzle leave a comment here or on the Slack channel. I'll try and answer but can't guarantee timeframes. +If there is sufficient interest I'll run a Q&A side session on the prequel puzzles at Summit. Let me know either here or on the Slack channel if you're interested. +Good luck + + [1]: https://powershell.org/wp-content/uploads/2018/03/Iron-Scripter-Prequel-Puzzle-9.pdf diff --git a/content/articles/2018/03/iron-scripter-prequels-puzzle-9-a-commentary/index.md b/content/articles/2018/03/iron-scripter-prequels-puzzle-9-a-commentary/index.md new file mode 100644 index 000000000..4796919ea --- /dev/null +++ b/content/articles/2018/03/iron-scripter-prequels-puzzle-9-a-commentary/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2018-03-28-iron-scripter-prequels-puzzle-9-a-commentary/ +title: "Iron Scripter Prequels: Puzzle 9 – A commentary" +authors: + - Richard Siddaway +date: "2018-03-28T15:07:56+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/03/iron-scripter-prequels-puzzle-9-a-commentary/ +--- + +Here's my commentary for puzzle 9: [Iron Scripter Prequel Puzzle 9 - A commentary][1] +In this puzzle you were cleaning up the TEMP folder and the recycle bin plus working with scheduled tasks and/or scheduled jobs. +One more commentary to come - probably early next week rather than Sunday and then we're into the Summit and the main event. + + [1]: https://powershell.org/wp-content/uploads/2018/03/Iron-Scripter-Prequel-Puzzle-9-A-commentary.pdf diff --git a/content/articles/2018/04/_index.md b/content/articles/2018/04/_index.md new file mode 100644 index 000000000..5228b52bb --- /dev/null +++ b/content/articles/2018/04/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from April 2018" +description: "PowerShell.org Articles published in April 2018." +--- diff --git a/content/articles/2018/04/a-changing-of-the-guard/index.md b/content/articles/2018/04/a-changing-of-the-guard/index.md new file mode 100644 index 000000000..e80872cfb --- /dev/null +++ b/content/articles/2018/04/a-changing-of-the-guard/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2018-04-11-a-changing-of-the-guard/ +title: A Changing of the Guard +authors: + - Don Jones +date: "2018-04-11T20:04:28+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2018/04/a-changing-of-the-guard/ +--- + +This week at PowerShell + DevOps Global Summit 2018, we announced a change in leadership for The DevOps Collective, the nonprofit organization that runs Summit, PowerShell.org, and other programs. + + +Stepping in as CEO will be former Director of Online Services Will Anderson (@gamerlivingwill on Twitter). As CEO, Will takes on day to day responsibility for running Summit, managing the website, and keeping our other programs on track. He will be assembling a team, including our new CFO James Petty, to help him with those tasks. Many of our current crew, including Richard Siddaway and Jeff Hicks, will continue their major contributions to Summit and other activities, and Will is already speaking with other community members who will be joining our team for the first time. Jeffrey Bernt will take on additional responsibilities for Summit logistics, backed by our long-time logistics expert Christopher Gannon. This is all part of what has always been our plan to involve more community members in the organization’s operation, and to help to ensure the long term success and survival of all our programs. +I will remain the organization’s President. This enables me to stay on the advise Will and his team, help document how we do things, and focus on the organization’s future. Will’s move to CEO will free up space for me to work on new projects that further the organization’s mission, and to grow the organization to better serve our community. I’ve some fun things in mind that you’ll hopefully get to see someday soon. + + +Jason Helmick, our former CFO, is stepping aside. He will still be involved with Summit and remains a close friend and advisor to me, and I thank him deeply for helping not only bring James into the family, but creating such a smooth transition for his role. + + +Please join me in congratulating Will and James! diff --git a/content/articles/2018/04/a-summit-2018-post-mortem/index.md b/content/articles/2018/04/a-summit-2018-post-mortem/index.md new file mode 100644 index 000000000..3ddbe9760 --- /dev/null +++ b/content/articles/2018/04/a-summit-2018-post-mortem/index.md @@ -0,0 +1,150 @@ +--- +url: /articles/2018-04-16-a-summit-2018-post-mortem/ +title: A Summit 2018 Post-Mortem +authors: + - Don Jones +date: "2018-04-16T00:36:31+00:00" +categories: + - PowerShell Summit +aliases: + - /2018/04/a-summit-2018-post-mortem/ +--- + +We've been conducting a survey of Summit 2018, now that it's in the past, and wanted to share some of our immediate take-aways. The survey is still open for Summiteers until end of April 2018; you should have the URL in a follow-up email and can inquire in the Slack team if you need it. + + + +The week kicked off with a huge hiccup, as the mail-merge used to produce the event badges dropped nearly a third of them, and we (I, really) didn't notice until far too late. Huge apologies, personally, for that massive screw-up on Monday. +Monday's breakfast was a little touch-and-go as well, as our first 200 arrivals consumed more than 500 breakfast sandwiches, leaving many Summiteers with nothing. I'd stopped making the "don't pile your plate" announcement last year, which may need to be reinstated. We're working on ways to deal with that on arrival day, when folks are coming in unevenly and announcements are difficult to make with consistency. We may move to a plated breakfast model on Monday, versus a buffet, although those are a great deal more expensive and make it harder to accommodate special dietary needs. +One comment I specifically want to address, because it's important to me: + +> + +> + +> + +> + +> If it was by choice that's one thing, but if there was any ounce of pressure to get the women into those costumes... that seems a bit... not cool? It was awkward. I know it wasn't to the level of 'booth babes,' but still had a similar feeling to it. +> + +> + +> + +> + + + + + + + + + This is referring to [@TheDevOpsDiva](http://twitter.com/thedevopsdiva) and [@MSFTJenny,](https://twitter.com/msftjenny) who appeared costumed as the [PowerShell character](https://www.redbubble.com/people/migreene/works/28212186-powershell-hero?p=sticker). I want to be absolutely clear that these women are members of our community; Missy is an MVP Award recipient and Jenny is a Program Manager on the PowerShell team. Both created their costumes and appeared entirely of their own volition because they thought it'd be fun. I'd *never* permit an event I worked at to pressure anyone, female or otherwise, into appearing in a costume (unless we hired an actor specifically for that purpose, which wouldn't be something Summit would do). I entirely appreciate and respect the concern here; I'm not trying to attack the commenter. I just want to make it crystal clear that the women had the idea in the first place on this one. + Monday otherwise went off well, although some folks did feel that the Team Lightning Demos were overly Azure-heavy. Given Microsoft's extreme cloud focus these days, that's less than surprising, I suppose, but it's well-noted for the future. We know not every Summiteer is an Azure customer. We'd actually deeply love some engagement from other cloud providers, and are hopeful we'll see that in the future. + Actually, we did have one more snafu on Monday: our first attempt at lunchtime vendor sessions fell almost entirely flat, and we won't be using that as a sponsorship opportunity again. More on that toward the end of this article. + One of our breakfast selections, a French toast bar, didn't get a lot of love - and honestly, our logistics folks were a bit saddened by it as well. Most Meydenbauer hot breakfasts always include some sausage or eggs or bacon for those inclined, but the French toast "package" was just that, and nothing more. We've notes to watch for that in the future. We know folks prefer a more well-rounded breakfast. Sorry for that one. + Overall, I personally felt the food was great as usual, although food reviews are always a mixed bag. We know some of you would just prefer pizza all week, or "simple foods," but we're trying to accommodate a huge range of backgrounds and preferences on a budget, so we do the best we can. We heard a lot of "low carb" requests, but know that each meal was planned by a professional chef and a registered dietician to meet current nutritional recommendations; we obviously can't accommodate every possible dietary preference, and so we try to aim the middle ground of following basic guidelines for meal composition. We'll continue that going forward, and hope everyone can appreciate the rather impossible situation you get into when trying to feed 400 people on $78 per person per day (conference venue food isn't cheap, folks, and our venue is actually the best deal in town). + Finally, Thursday wrapped with Iron Scripter, which was our first competition of this kind. We'll do it again, and we've already taken numerous notes to improve and work out kinks. Strongly noted is the need to provide more specific detail of the competition in advance, so that people can figure out how they'll participate. Huge thanks to everyone who participated - we hope you had some fun on the last afternoon. + Some of what's on tap for next year: We're going to launch an OnRamp track, which will be a separate ticket at the same price. Those folks will participate in our Monday General Sessions, meals, and evening events, but they'll have their own hands-on class content otherwise. We'll have some of the industry greats teaching, with the idea of bringing new blood into our community each year. And, we'll be partnering with sponsors and Tech Impact's IT Works program to provide OnRamp scholarships to young people, often from disadvantaged situations or underrepresented groups. They'll all have completed a basic IT Operations education, including A+ and Cisco certifications. Our only sponsorship packages in 2019 will each include at least one scholarship, and we hope this can eventually help increase the diversity of our community in many ways. + Speaking of diversity, this is a common thread. I want to include one particularly well-written comment from our survey, but this wasn't the only one with this general theme: + + + > + +> + +> + +> + +> On diversity: + * Acknowledgement by leadership that this is a problem might help + * Some orgs can help include speakers, attendees from underserved communities + * More active pursuit, but _not_ solely for diversity might help. There are some fantastic folks out there... This might be tough to do +> + +> + +> + +> + + + + + + + + + + + + Let me address this a wee bit. First, because many folks don't realize it, Summit has no paid employees. We're all doing this on a volunteer basis, in our spare time, and it already consumes a lot of that spare time. While I 100% agree with the above, and absolutely acknowledge the problem the IT industry has, in general, with diversity; we simply don't have the human-power to actively pursue particular presenters or attendees. We just don't. Adding one $60k salary to our (currently non-existent) payroll to handle this would add almost $350 to each ticket we sell, once you factor in payroll taxes, worker's compensation, and other overhead. That moves us to a $1950 ticket, which is more than anyone has indicated they're willing to pay for. What I'd love is for someone to volunteer to take on this task for us, as volunteers currently take on every other task we have to perform. I suppose, if I'm being snarky, I'd say it's all well and good to tell us what we could do better, but it's a lot more valuable to jump in and actually help us do it. + We've also seen comments like: + + + > + +> + +> + +> + +> it would be great if we could offer some financial assistance to get some more diversity to the conference. +> + +> + +> + +> + + + + + + + + + + + + As noted above, we're going to try very hard to do that. Bear in mind that *we're a nonprofit; *we don't really have "extra money." Financial assistance without sponsors means raising the ticket price, and then we have to actually find those needing our assistance (which we're hoping to rely on Tech Impact for, since they're already working with them). Money and human-hours are this particular organization's main constraint; anyone willing to help solve that with a large donation or by contributing *their* time to help solve the problem will be welcomed with open arms, I promise. Drop me a line at donj@ (that's my email alias; you can likely figure out the domain name since you're on the website). + And bear in mind that we don't get huge sponsorships. If we got 4 (a record), that'd be 4 scholarships. If we bumped everyone's ticket price $20, we'd get 1 more. Five folks is about 1% of our attendance. I'm not saying we don't do it because it's not big; I'm saying that, even if we're hugely successful, it's not going to be hugely visible. I don't care about the visibility; we're going to try and make this happen because it's the right thing. Just know that it's not going to be an overnight turnaround for an industry with epically poor diversity. + On another topic: Booze. This also comes up in our survey, such as when we asked attendees what one thing we could drop from Summit: + + + > + +> + +> + +> + +> Alcohol, but have no illusions that I will ever attend the summit and not be drinking with friends and peers. ? +> + +> + +> + +> + + + + + + + + + + + + I get it. I drink myself; I've had others tell me they don't mind being around people who are drinking (in moderation), and others tell me they won't be in an event where alcohol is served. All perfectly fine perspectives. Our goal is to try and make Summit *inclusive, *which means not making anyone feel like they *have* to be left out. Many, many people enjoy an alcoholic beverage during social events, and we'd like to accommodate them. We'd like to do that in a way that doesn't make non-drinkers feel they aren't welcome. Going forward, we're going to make sure that soft drinks are always complimentary when possible, or when we're paying on consumption that non-drinking attendees get the same number of complimentary beverages as those who are drinking (that's always been our intent, but it didn't get correctly implemented this year). We're absolutely looking to build events that do not *focus* on alcohol as a centerpiece; we want our attendees to be that centerpiece. But we also don't want to go further down the path of dividing our community when we're supposed to be helping bring it together; separate "drinking" and "non drinking" events just feels like we're building walls, not bridges. I'm deeply open to suggestions; drop a line to me (donj@ is my email alias, and if you're here, you can likely figure out the domain name) if you've any ideas. One thing to bear in mind is that, one reason we offer *complimentary *beverages (which should include non-alcoholic) is to help level the playing field for folks who may be on a tight budget, so that they can participate as fully as they want. + Recognize, too, that there's literally no possible way to have a "quiet dinner out with everyone" when "everyone" is 400 people , which we did have folks suggest. We do try to leave Tuesday and Thursday for folks to form their own smaller, quieter groups and head out together. + Anyway - that's just some of our early take-aways, and some of what we're planning for next year. We're *always* open to suggestions. Seriously. Anything polite and constructive is welcome, and you can email me directly (I've referenced my address twice in the above), if you like, or comment right here. diff --git a/content/articles/2018/04/iron-scripter-prequels-puzzle-10-a-commentary/index.md b/content/articles/2018/04/iron-scripter-prequels-puzzle-10-a-commentary/index.md new file mode 100644 index 000000000..5f3343a6a --- /dev/null +++ b/content/articles/2018/04/iron-scripter-prequels-puzzle-10-a-commentary/index.md @@ -0,0 +1,18 @@ +--- +url: /articles/2018-04-01-iron-scripter-prequels-puzzle-10-a-commentary/ +title: "Iron Scripter prequels: Puzzle 10 – A commentary" +authors: + - Richard Siddaway +date: "2018-04-01T00:01:32+00:00" +categories: + - Announcements + - PowerShell Summit + - Scripting Games +aliases: + - /2018/04/iron-scripter-prequels-puzzle-10-a-commentary/ +--- + +This is the commentary on the last Iron Scripter prequel puzzle: [Iron Scripter Prequel Puzzle 10 - A commentary][1] +Next weekend will mark the start of summit and you can work on the Iron Scripter preludes - 4 daily puzzles as a lead in to the main event on Thursday 12 April 2018. If you haven't chosen your faction yet you need to hurry + + [1]: https://powershell.org/wp-content/uploads/2018/03/Iron-Scripter-Prequel-Puzzle-10-A-commentary.pdf diff --git a/content/articles/2018/05/100887-2/index.md b/content/articles/2018/05/100887-2/index.md new file mode 100644 index 000000000..03f8943b8 --- /dev/null +++ b/content/articles/2018/05/100887-2/index.md @@ -0,0 +1,92 @@ +--- +url: /articles/2018-05-19-100887-2/ +title: Executing LINQ Queries in PowerShell – Part 1 +authors: + - Eli Hess +date: "2018-05-19T16:10:35+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +aliases: + - /2018/05/100887-2/ +--- + +Greetings PowerShellers! +Lately, I've been itching to write something up on Microsoft’s Language-Integrated Query (LINQ). You've likely encountered it if you've done any development in C#. LINQ is an incredibly powerful querying tool for performing look-ups, joins, ordering, and other common tasks on large data sets. We have a few similar cmdlets built into PowerShell, but other than the '.Where()' method on collection objects nothing that comes close to the speed at which LINQ operates. +To dig into this topic, we're going to have to do a quick high level overview of a couple of other .NET staples often encountered in the C# world. You see, unlike most .NET methods which accept object types like integers, strings, and the like, LINQ uses static extension methods which only accept delegate object types. +What are delegates? In application development, there is an occasional need for objects within memory to communicate with each other for things such as "button click events." To address this, the Windows API uses function pointers to create callback functions which then report back to other functions in your applications. Within the .Net Framework, these are called delegates. +Delegates are objects that point to another method, or possibly many methods, by storing three key pieces of information: the address of the method on which it makes calls, the parameters (if any) of this method, and the return type (if any) of this method. With this information, a delegate object is able to invoke these methods dynamically at runtime, either synchronously or asynchronously. With this information, a delegate object is able to invoke these methods dynamically at runtime, either synchronously or asynchronously. +A simple example of this in C# looks like this: + + +`using System; +namespace SimpleDelegate +{ + //Delegate declaration + public delegate void PrintMessage(string msg); + // Create a class with the method to bind to the delegate + public class MessagePrinter + { + public static void PrintLine(string msg) + { + Console.WriteLine(msg); + } + } + class Program + { + static void Main(string[] args) + { + // Create a PrintMessage delegate object that + // "points to" MessagePrinter.PrintLine(). + PrintMessage p = new PrintMessage(MessagePrinter.PrintLine); + p("Hi Animatronio!"); + Console.ReadLine(); + } + } +} +`Clearly, in this example the use of delegates is not necessary. I'm just trying to frame up how they would be declared and subsequently called. To simplify all of the above, Microsoft has created two generic delegate definitions. For delegates with no output, we can use Action<> and for delegates with output, we can use Func<>. These two beauties are what give us PowerShellers access to LINQ. Today we're going to use Func<> because we want output. The syntax for doing so looks like this: + + +`[Func[int,int]]$Delegate = { param($i); return $i + 1 } +`Let's break this down left to right: + + 1. Declare Func<> + 2. Tell it the type of parameter(s) to expect. In this case we're passing a single integer parameter. + 3. Tell it the type of output to produce, again an integer will be returned. + 4. Name the delegate variable. + 5. Define the delegate with a scriptblock. We're just doing a very simple addition step on the parameter and returning the output. + +And now we've finally arrived at the meat of this article. Let's initialize a mock dataset with ~2 million objects to play with: + + +`$Dataset = @() +0..1000 | Foreach-Object { $Dataset += (Get-Verb)[(Get-Random -Maximum 98)] } +0..10 | ForEach-Object {$Dataset += $Dataset} +`Next we'll measure how long it takes to filter down to only the objects which equal "Get" using Where-Object on three different Windows Server OS's running on the same Azure compute instances: + + +`Measure-Command { ($Dataset | Where-Object Verb -eq "Use") } +# 2008 R2: TotalSeconds : 23.3399981 +# 2012 R2: TotalSeconds : 61.7634027 +# 2016 : TotalSeconds : 18.0190367 +`Now let's do the same query using LINQ: + + +`[Func[object,bool]] $Delegate = { param($v); return $v.verb -eq "Use" } +Measure-Command { [Linq.Enumerable]::Where($Dataset,$Delegate) } +# 2008 R2: TotalSeconds : 11.3967464 +# 2012 R2: TotalSeconds : 25.6511816 +# 2016 : TotalSeconds : 12.8999417 +`As you can see, in the older operating systems, LINQ is over twice as fast (also, what's the deal with 2012 R2??). In 2016, it's only about 50% faster. But of course, calling '.Where()' directly on the object is still by far the fastest way to filter on a dataset: + + +`Measure-Command { $Dataset.Where( {$_.Verb -eq "Use"}) } +# 2008 R2: TotalSeconds : 5.5102392 +# 2012 R2: TotalSeconds : 17.5893828 +# 2016 : TotalSeconds : 6.1834444 +`Initially I had suspected it was translating the scriptblock as an anonymous function and tapping into the LINQ extension method behind the scenes, but Bruce Payette set me straight. According to Bruce, It's using a very low level API to invoke the scriptblock. [Source code is here][1]. +So if '.Where()' is so much faster, why did I bother writing this? I wanted to open with a familiar concept. The true power in LINQ comes from its SQL-like ability to aggregate and manipulate data. In the next blog, we'll take a look at grouping data, using joins, and why that's awesome. +Until then, happy tinkering! +-Eli + + [1]: https://github.com/PowerShell/PowerShell/blob/master/src/System.Management.Automation/engine/runtime/Operations/MiscOps.cs#L2425 diff --git a/content/articles/2018/05/_index.md b/content/articles/2018/05/_index.md new file mode 100644 index 000000000..aa6a33d43 --- /dev/null +++ b/content/articles/2018/05/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from May 2018" +description: "PowerShell.org Articles published in May 2018." +--- diff --git a/content/articles/2018/05/executing-linq-queries-in-powershell-part-2/index.md b/content/articles/2018/05/executing-linq-queries-in-powershell-part-2/index.md new file mode 100644 index 000000000..93b98cb4e --- /dev/null +++ b/content/articles/2018/05/executing-linq-queries-in-powershell-part-2/index.md @@ -0,0 +1,103 @@ +--- +url: /articles/2018-05-28-executing-linq-queries-in-powershell-part-2/ +title: Executing LINQ Queries in PowerShell – Part 2 +authors: + - Eli Hess +date: "2018-05-28T12:31:00+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks + - Tools +aliases: + - /2018/05/executing-linq-queries-in-powershell-part-2/ +--- + +And we're back! +Ok, so in the last blog we began a conversation about delegates and using LINQ in PowerShell. In today's post, I'm going to give an example of how it can be incredibly useful. Let's talk about Joins. + +## Joins + +In my line of work, I'm constantly running into the need to combine datasets from multiple sources that relate to each other and pull out some specific properties. Say you have two internal services, one which is used to track production status and another which is used to monitor whether machines are online. To demonstrate this, let's initialize some mock data once again. + + +`#Create empty arrays +$DatasetA = @() +$DatasetB = @() +#Initialize "status" arrays to pull random values from +$ProductionStatusArray = @('In Production','Retired') +$PowerStatusArray = @('Online','Offline') +#Loop 1000 times to populate our separate datasets +1..1000 | Foreach-Object { + #Create one object with the current iteration attached to the name property + #and a random power status + $PropA = @{ + Name = "Server$_" + PowerStatus = $PowerStatusArray[(Get-Random -Minimum 0 -Maximum 2)] + } + $DatasetA += New-Object -Type PSObject -Property $PropA + #Create a second object with the same name and a random production status + $PropB = @{ + Name = "Server$_" + ProductionStatus = $ProductionStatusArray[(Get-Random -Minimum 0 -Maximum 2)] + } + $DatasetB += New-Object -Type PSObject -Property $PropB +} +`Now we have two datasets with the same server names, one showing production status and the other showing power status. Our goal is to join that data together. In traditional PowerShell, we would likely iterate through one of the sets while doing a filter on the second set and then either add property members to the first set or create all new objects with a combination of properties from both sets. Something like this: + + +`$JoinedData = @() +foreach($ServerA in $DatasetA) { + $ServerB = $DatasetB | Where-Object Name -eq $ServerA.Name + $Props = @{ + Name = $ServerA.Name + PowerStatus = $ServerA.PowerStatus + ProductionStatus = $ServerB.ProductionStatus + } + $JoinedData += New-Object -Type PSObject -Property $Props +} +`This works fine. If I wrap it in a Measure-Command it takes right around 8.82 seconds to complete. Not awful, but at enterprise level where you're dealing with ten times that amount of data, you can see how that run time could get out of control. Now let's do the same with LINQ: + + +`$LinqJoinedData = [System.Linq.Enumerable]::Join( + $DatasetA, + $DatasetB, + [System.Func[Object,string]] {param ($x);$x.Name}, + [System.Func[Object,string]]{param ($y);$y.Name}, + [System.Func[Object,Object,Object]]{ + param ($x,$y); + New-Object -TypeName PSObject -Property @{ + Name = $x.Name; + PowerStatus = $x.PowerStatus; + ProductionStatus = $y.ProductionStatus} + } +) +$OutputArray = [System.Linq.Enumerable]::ToArray($LinqJoinedData) +`This completed for me in just over 0.4 seconds! Hopefully after last week this syntax doesn't look too daunting, but let's walk through what we just did. We're calling the [Join method][1] on [System.Linq.Enumerable][2] and then passing it five parameters. + + 1. The first dataset we're going to join + 2. The second dataset to join + 3. The delegate which defines the key to compare against on the first dataset + 4. The delegate which defines the key to compare against on the second dataset + 5. Finally, we pass in the delegate which defines what the output should look like + +So it looks complicated, but once you use it a few times, it's really not too bad. Now you're probably wondering why I added that final line where I called "[System.Linq.Enumerable]::ToArray($LinqJoinedData)." For that we need to talk about "Deferred Execution vs. Immediate Execution." When you call the Join method, it's not actually joining the data at that time, rather it's building an expression tree which defines the relational algebra needed to perform the join. This defers the execution point to when the data is actually operated against. So in the above example, I called "ToArray()" merely to provide an accurate timespan for how long the join actually takes as opposed to the more traditional PowerShell approach we used before it. If this were production code and I wanted to see  machines with an offline status that are listed as in production, rather than that "ToArray()" line I could simply run this: + + +`$LinqJoinedData.Where({($_.PowerStatus -eq "Offline") -and ($_.ProductionStatus -eq "In Production")}) +`The Join query would execute at that time and then "Where()" would filter down to just the objects I requested. +And there you have it! If you found this interesting, I encourage you to check out these modules: + + * [ili101's PowerShell Module on the gallery, "Join-Object."][3] + * [SeeminglyScience's Module, 'PSLambda' which is doing really fun things with delegates and threading][4] + +Feel free to reach out to me on [Twitter][5] or check out my [personal site][6] from time to time for other content. If you've seen [my recent talk at PowerShell Summit][7], I'll be posting the blog I referenced there soon about turning my dog into a tea kettle.  (it's not PowerShell related, thus it will be landing somewhere other than here) +Happy tinkering! +-Eli + + [1]: https://msdn.microsoft.com/en-us/library/bb534675(v=vs.110).aspx + [2]: https://msdn.microsoft.com/en-us/library/system.linq.enumerable_methods(v=vs.110).aspx + [3]: https://github.com/ili101/Join-Object + [4]: https://github.com/SeeminglyScience/PSLambda + [5]: https://twitter.com/eshess + [6]: http://elihess.com + [7]: https://www.youtube.com/watch?v=QLalnXXwQeI diff --git a/content/articles/2018/06/_index.md b/content/articles/2018/06/_index.md new file mode 100644 index 000000000..59ce2c176 --- /dev/null +++ b/content/articles/2018/06/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from June 2018" +description: "PowerShell.org Articles published in June 2018." +--- diff --git a/content/articles/2018/06/how-powershell-devops-global-summit-began/index.md b/content/articles/2018/06/how-powershell-devops-global-summit-began/index.md new file mode 100644 index 000000000..c575bf255 --- /dev/null +++ b/content/articles/2018/06/how-powershell-devops-global-summit-began/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2018-06-21-how-powershell-devops-global-summit-began/ +title: How PowerShell + DevOps Global Summit Began +authors: + - Don Jones +date: "2018-06-21T23:37:07+00:00" +categories: + - PowerShell for Admins +aliases: + - /2018/06/how-powershell-devops-global-summit-began/ +--- + +Back in... gosh, 2009, 2010 or so, an Arizona company named NetPro hosted PowerShell Deep Dive, part of their The Experts Conference event (the first was held in Las Vegas for just 50 people). After hosting two years (I think) though, NetPro was purchased by Quest Software, which moved to close down TEC. I may have those years slightly off, but that's the general sequence. +In 2012, myself, Jeff Hicks, Richard Siddaway, Jason Helmick, and Kirk Munro had formed PowerShell.org, attempting to make good on the basically-defunct PowerShellCommunity.org that I'd started and that Quest now basically owned (and was shutting down). +In August 2012 Jason and I were out in Redmond for a TechMentor conference, and... +[![](https://powershell.org/wp-content/uploads/2018/06/IMG_0465-225x300.jpg)](https://powershell.org/wp-content/uploads/2018/06/IMG_0465.jpg) +Erin Chapple and Kenneth Hansen, who were running the PowerShell team at the time, asked us over to building 43 for lunch one day. They told us that community engagement was huge for them--they needed to know how people were using their product, and what they needed to focus on. They got plenty of engagement at TechEd events, they said, but it was largely beginners; they needed the Deep Dive, or something like it, to stay in touch with hardcore users. +In April 2013, the first PowerShell Summit was held. +"We can't give you any money, though," Kenneth said. And for good reason: they wanted an event that could sustain itself, so that when Microsoft inevitably reorganized and got distracted, the event wouldn't die. To help, they volunteered to get us space on-campus, so our first event was in conference rooms, and they helped guarantee the food deposits. That helped give us a tiny financial pad and some experience, so in 2014 when we moved to Meydenbauer Center, we weren't a brand-new event with an inexperienced team. +Today, Summit is formally owned by a 501(c)(3) nonprofit, and venue and food deposits no longer have to go on my personal Amex ;). We've built enough operating margin that Summit can pay its own deposits until registrations start rolling in, and the event is essentially self-sustaining--we don't even rely on corporate sponsors, although we're very happy to have them when we can. We've held six events in the US, and two in Europe, which led to the launch of PSConf.eu a few years back. +Jason ran across this page in his journal last night and sent the photo, and with his permission I thought it would be a fun piece of community history to share. diff --git a/content/articles/2018/06/looking-for-a-powershell-org-contributor/index.md b/content/articles/2018/06/looking-for-a-powershell-org-contributor/index.md new file mode 100644 index 000000000..4d34f989d --- /dev/null +++ b/content/articles/2018/06/looking-for-a-powershell-org-contributor/index.md @@ -0,0 +1,26 @@ +--- +url: /articles/2018-06-22-looking-for-a-powershell-org-contributor/ +title: Looking for a PowerShell.org Contributor +authors: + - Don Jones +date: "2018-06-22T15:24:43+00:00" +categories: + - Announcements + - News +aliases: + - /2018/06/looking-for-a-powershell-org-contributor/ +--- + +We're looking for someone who can publish a regular "What You Missed This Week" blog post on PowerShell.org each Friday (excepting the odd week off for vacations, of course). +This is meant just as a roundup of interesting posts from around the web; we know tons of people are blogging in their own spaces, and we'd like to call attention to some of the more noteworthy ones. +This isn't any more complex than a brief blurb for each: + +> Don Jones shares the beginnings of PowerShell Summit: [How PowerShell + DevOps Global Summit Began][1] +> PowerShell.org's OnRamp Scholarship needs your help spreading the word: [We Need Your Help.][2] + +There's no minimum or maximum each week, although I personally suspect more than a couple of dozen posts will overwhelm people. The idea is to curate what's out there, introduce folks who are getting their blogs going (and encourage them to keep going), and give the community some variety in its PowerShell diet. +If you're interested, drop a line to webmaster@powershell.org to get hooked up with blogging rights here. As you do so, indicate if you're up for every week (preferred) or every-other (in which case we'll try and find two of you and get you to split even- and odd-numbered weeks). You can also volunteer to be an "aggregator," feeding noteworthy articles to our main round-up-person each week to help _them_ out. +If you've been longing to contribute but haven't thought of a way, this could be a high-impact, low-workload way to jump in and help out! + + [1]: https://powershell.org/2018/06/21/how-powershell-devops-global-summit-began/ + [2]: https://powershell.org/2018/06/03/we-need-your-help/ diff --git a/content/articles/2018/06/onramp-scholarship-open-to-non-us-applicants/index.md b/content/articles/2018/06/onramp-scholarship-open-to-non-us-applicants/index.md new file mode 100644 index 000000000..0eaf920d4 --- /dev/null +++ b/content/articles/2018/06/onramp-scholarship-open-to-non-us-applicants/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2018-06-27-onramp-scholarship-open-to-non-us-applicants/ +title: OnRamp Scholarship open to non-US Applicants +authors: + - Don Jones +date: "2018-06-27T19:41:02+00:00" +categories: + - PowerShell for Admins +aliases: + - /2018/06/onramp-scholarship-open-to-non-us-applicants/ +--- + +I have managed to clear the regulatory hurdles and our [OnRamp Scholarship][1] is now open to applicants from outside the US. We will update the application materials and web pages as soon as possible, but there’s no need to wait to submit an application. +There are two caveats: +first, the option to request a laptop as part of your application is not applicable to international applicants at this time. +Second, our airfare limit is $600 USD. We cannot directly book airfare costing more. Unfortunately, we also cannot provide a partial cash reimbursement at this time. That means your air must be under $600 total (which I realize is difficult), or you need to be responsible for the entire airfare yourself. This is a bit of accounting oddness that we should be able to address in the future. +Full information and applications are at the link above. + + [1]: https://powershell.org/summit/summit-onramp/onramp-scholarship/ diff --git a/content/articles/2018/06/we-need-your-help/index.md b/content/articles/2018/06/we-need-your-help/index.md new file mode 100644 index 000000000..fa859c4ea --- /dev/null +++ b/content/articles/2018/06/we-need-your-help/index.md @@ -0,0 +1,50 @@ +--- +url: /articles/2018-06-03-we-need-your-help/ +title: We Need Your Help. +authors: + - Don Jones +date: "2018-06-03T19:23:52+00:00" +categories: + - PowerShell Summit + - Training +aliases: + - /2018/06/we-need-your-help/ +--- + +We need your help. + + +As you may have heard, we’re launching a new “OnRamp” track at PowerShell + DevOps Global Summit 2019. Limited to 40 students, this will be a hands-on class designed to bootstrap someone into the technology and our community. + [There's a whole brochure about it!](https://indd.adobe.com/view/7c87735a-8914-4536-b668-857242085785) + +We’re also offering a number of free-ride scholarships designed to cover admission, air, and hotel, to help increase the diversity of our field and community right at the top of the funnel. Half of our scholarships will be awarded to individuals from groups that are traditionally underrepresented in IT, and that’s where we need your help. + + +We need to get the word out to potential applicants so that they know to apply! + + + +You can help by directing people to our [Scholarship Page][1] or to the brochure URL. Who should you send? + + * The computer science teachers at your local high school, technical college, and community college. + * Your local library’s educational outreach team. + * IT interns in your own company. + * Anyone in touch with individuals just coming out of high school or a technical program! + +Yes, it’ll mean some legwork to find them and call or otherwise contact them - but we’re a team of less than eight unpaid volunteers, so we can’t do it all ourselves. + + +You can also reach out to local television news teams and ask them for help - many already run community outreach programs and can help spread the word. + + +Also tell your peers and colleagues via social media, word of mouth, whatever works. Get them to help, too, so that we can reach as many local communities as possible with this offer. + + +We appreciate your efforts - we’re trying to do as much as we can to strengthen and diversify our community, but it can’t happen without your active involvement. + + +Thank you. + + + + [1]: https://powershell.org/summit/summit-onramp/onramp-scholarship/ diff --git a/content/articles/2018/07/_index.md b/content/articles/2018/07/_index.md new file mode 100644 index 000000000..e40ff43b1 --- /dev/null +++ b/content/articles/2018/07/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from July 2018" +description: "PowerShell.org Articles published in July 2018." +--- diff --git a/content/articles/2018/07/help-us-improve-our-ebooks-your-chance-to-contribute/index.md b/content/articles/2018/07/help-us-improve-our-ebooks-your-chance-to-contribute/index.md new file mode 100644 index 000000000..ba714d77b --- /dev/null +++ b/content/articles/2018/07/help-us-improve-our-ebooks-your-chance-to-contribute/index.md @@ -0,0 +1,28 @@ +--- +url: /articles/2018-07-11-help-us-improve-our-ebooks-your-chance-to-contribute/ +title: Help Us Improve our Ebooks – Your Chance to Contribute! +authors: + - Don Jones +date: "2018-07-11T14:33:56+00:00" +categories: + - PowerShell for Admins +aliases: + - /2018/07/help-us-improve-our-ebooks-your-chance-to-contribute/ +--- + +We recently re-launched all of our free ebooks at . These books have all been authored by a variety of people, myself included, and most were originally authors in Word. As we translated them into Markdown (which is what Leanpub uses for its source), a few snafus tend to come up here and there. + + + +Note that these books create no profit for anyone: all authors donated them to The DevOps Collective. When someone chooses to pay for an ebook during checkout (they're priced at $0.00, but you can pay anything you like), those funds go to help The DevOps Collective's programs, including our operational costs, OnRamp Scholarship, and more. So the books are entirely a volunteer effort, owned and maintained by the community at large. +For example, in the table of contents for [https://leanpub.com/thebigbookofpowershellgotchas/read,][1] you'll see a lot of "I"™" type nonsense, which typically comes from Word's "smart quotes" feature when those get translated into plain ASCII. You'll also find the odd formatting issue, like backslashes at the end of code lines, which are meant to represent line breaks, or missing backslashes in paths, because backslashes need to be doubled in order to prevent them from being seen as an escape character. +Anyway - they're all minor snafus, but it's difficult for me to carve off time to go through all the books and fix every little one. +Which is where you can help! +These books are all open source, and hosted at . Anyone can use GitHub to clone the book repo, make whatever changes they want, commit those changes to their local repo, and then submit a pull request back to the main online repo. I review those PRs weekly. +So this is a _great_ chance for you to contribute to the community. If these ebooks have ever helped you, then you can "give back" a bit by helping us fine-tune them. +And here's a tip: if you make a change, please also clone the Spanish version of the ebook and make the same change. That way we can keep the Spanish versions updated as well. Thanks again to community contributor Alvaro Tatis Torres for creating those Spanish versions entirely on his own time! +You're also welcome to make more substantive contributions. For example, _Secrets of PowerShell Remoting_ could use a chapter on setting up Remoting-over-SSH for both Windows and Linux/macOS. Once more folks start contributing, I'll be updating the credits on the book to reflect the broader, community-based authorship of each. +Please help spread the word - even if you can't carve off the time to help, maybe someone you know could proofread a chapter or two. Scanning the online reader or the PDF version will reveal most of the oddities, and you can then dive into the source on GitHub to make corrections. +THANK YOU! + + [1]: https://leanpub.com/thebigbookofpowershellgotchas/read diff --git a/content/articles/2018/07/powerhour-community-lightning-demos/index.md b/content/articles/2018/07/powerhour-community-lightning-demos/index.md new file mode 100644 index 000000000..2bfdf1064 --- /dev/null +++ b/content/articles/2018/07/powerhour-community-lightning-demos/index.md @@ -0,0 +1,62 @@ +--- +url: /articles/2018-07-31-powerhour-community-lightning-demos/ +title: "PowerHour: Community Lightning Demos!" +authors: + - pscookiemonster +date: "2018-07-31T15:58:12+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +aliases: + - /2018/07/powerhour-community-lightning-demos/ +--- + +One of my favorite events at the PowerShell + DevOps Global Summit is the community lightning demos. It's a fun format: +For the audience: + + * Fast paced (max 10 minutes) + * Many speakers + * Topic or speaker not what you're looking for? They'll change in a few minutes + * Demos offer enough material to give you ideas and point out where to learn more + * Content is more likely to have a high signal-to-noise ratio given the time constraints + +For the speakers: + + * No need to come up with a full length session and the content behind it + * It can be comforting knowing you have a bunch of peers joining you + * You can get enough info to the audience for them to get excited and want to learn more + * You get a platform to share something awesome with the PowerShell community + +So! This isn't about the summit. We're starting a new thing, _PowerHour: An Hour of Community Lightning Demos_. + +### PowerHour + +_PowerHour_ will be like a virtual PowerShell User Group, with a lightning demo format, and leeway for other topics not directly related to PowerShell. +This adds some more fun: + + * No need to stand on stage (yet!), with Jeffrey Snover sitting right in front of you + * Folks reviewing CFPs for the PowerShell + DevOps Global Summit will likely see these... You could give a condensed demo of a CFP topic, or just showcase something cool to give us an idea of how you prepare and present + * More time! We always run short on time at the summit; we'll hold these on a regular basis to give more folks a chance to show something fun! + * Everything is recorded + +So! Where can you go to find out more? + + * Proposals, FAQs, materials, links to demos, agendas, and more will be available at the [PSPowerHour GitHub repo](https://github.com/pspowerhour/pspowerhour) + * Demos and live stream at [PSPowerHour YouTube channel](https://www.youtube.com/channel/UCtHKcGei3EjxBNYQCFZ3WNQ) + +### When does it start? + +Our first session is scheduled for **Tuesday** **August 21st @ 6:00 PM EST**! + + * If you want to propose a demo, just [submit an issue](https://github.com/PSPowerHour/PSPowerHour/issues/new)! We'll work on timing for your demo from there + * We need more proposals, but [Doug Finke][1], [Chrissy LeMaire][2], and [Glenn Sarti][3] (if he can wake up early enough!) will join us for our first session + +We hope you'll join us - feel free to drop by the #powerhour channel in [powershell.slack.com][4]! + +PS: a huge thanks to [Michael Lombardi][5] for his help with the summit community lightning demos, and partnering up to make PowerHour a thing! + + [1]: https://twitter.com/dfinke + [2]: https://twitter.com/cl + [3]: https://twitter.com/GlennSarti + [4]: https://bit.ly/psslack + [5]: https://twitter.com/barbariankb diff --git a/content/articles/2018/07/the-re-launch-of-the-powershell-org-free-ebooks-now-in-spanish-too/index.md b/content/articles/2018/07/the-re-launch-of-the-powershell-org-free-ebooks-now-in-spanish-too/index.md new file mode 100644 index 000000000..7d305fd3f --- /dev/null +++ b/content/articles/2018/07/the-re-launch-of-the-powershell-org-free-ebooks-now-in-spanish-too/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2018-07-04-the-re-launch-of-the-powershell-org-free-ebooks-now-in-spanish-too/ +title: The Re-Launch of the PowerShell.org Free eBooks (now in Spanish, too!) +authors: + - Don Jones +date: "2018-07-04T18:31:49+00:00" +categories: + - Books +legacy_featured_image: /wp-content/uploads/2018/07/Screen-Shot-2018-08-07-at-11.02.02-AM.png +aliases: + - /2018/07/the-re-launch-of-the-powershell-org-free-ebooks-now-in-spanish-too/ +--- + +We're pleased to announce the re-launch of our [Free eBook Store][1], now hosted exclusively on Leanpub. This re-launch includes 7 titles translated into Spanish by community contributor Alvaro Torres. +All eBooks are free, although you can also choose to pay any amount of $5 or more, which becomes a donation to The DevOps Collective, Inc. Leanpub offers a web-based reader and, if you "buy" the book, options to download in EPUB, MOBI, and PDF formats. +We used to dual-publish on Leanpub and GitBook; GitBook no longer supports ebook downloading (they're online-only, now) and Leanpub now offers a free online reader mode, so we're moving exclusively to Leanpub. Leanpub does offer a smartphone app as well, which you can use to manage your entire Leanpub library. +Don't forget that all of the books' "source" is [hosted at GitHub][2] in public open-source repositories. You're welcome to fork the repos, submit pull requests, and so on. Note that we don't provide technical support for the books at GitHub; please use the [Forums][3] for that. Further, while everyone appreciates suggestions for improving the books, what we _really_ appreciate are community members who can fork the repo, implement their suggestions, and submit a pull request! +Please help us spread the word so more people can use these great, entirely-free resources! + + [1]: https://leanpub.com/u/devopscollective + [2]: https://github.com/devops-collective-inc + [3]: https://powershell.org/forums diff --git a/content/articles/2018/07/what-you-missed-this-week-in-powershell-2/index.md b/content/articles/2018/07/what-you-missed-this-week-in-powershell-2/index.md new file mode 100644 index 000000000..4de0c68b3 --- /dev/null +++ b/content/articles/2018/07/what-you-missed-this-week-in-powershell-2/index.md @@ -0,0 +1,62 @@ +--- +url: /articles/2018-07-20-what-you-missed-this-week-in-powershell-2/ +title: What You Missed This Week in PowerShell! +authors: + - Will Anderson +date: "2018-07-20T15:00:41+00:00" +categories: + - PowerShell for Admins +aliases: + - /2018/07/what-you-missed-this-week-in-powershell-2/ +--- + +## Blogs + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#keeping-powershell-modules-up-to-date)[*Keeping PowerShell Modules Up To Date*](https://tfl09.blogspot.com/2018/07/keeping-powershell-modules-up-to-date.html) + +by Thomas Lee on Saturday July 14th, 2018 +Learn a simple technique for checking which of your modules from the PowerShell Gallery have an update. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#when-tls-12-breaks-invoke-webrequest)[*When TLS 1.2 Breaks Invoke-WebRequest*](https://poshsea.blogspot.com/2018/07/when-tls-12-break-invoke-webrequest.html) + +by Lawrence Hwang on July 15th, 2018 +In Windows PowerShell, there's a limitation with Invoke-WebRequest and sites that only use TLS 1.2. This article covers a workaround for this problem. This issue is not present with Invoke-WebRequest in PowerShell Core. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#start-job-like-a-boss)[*Start-Job Like a Boss*](https://mkellerman.github.io/Start-Job_like_a_boss/) + +by Marc Kellerman on July 16th, 2018 +Load your user session functions and invoke them as jobs on remote systems using throttling and timeout controls. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#parse-html-and-pass-to-cognitive-services-text-to-speech)[*Parse HTML and Pass to Cognitive Services Text-to-Speech*](https://blogs.technet.microsoft.com/heyscriptingguy/2018/07/16/parse-html-and-pass-to-cognitive-services-text-to-speech/) + +by Sean Kearney, Premier Field Engineer, Microsoft on July 16th +Use Text-to-Speech in Azure to read a web page outloud in Windows 10. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#powershell-by-mistake)[*PowerShell By Mistake*](https://leanpub.com/powershell-by-mistake) + +by Don Jones on July 18th, 2018 +Don started a new book on Leanpub which helps you learn PowerShell by reviewing "broken code" and discovering the answers. + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#forum-topics)Forum Topics + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#powershellorg-challenge---unanswered-post)PowerShell.org Challenge - Unanswered Post + +[*Configuration Manager New CMProgram*](https://powershell.org/forums/topic/configuration-manager-new-cmprogram/) +Amir Atary needs guidance with usage on a ConfigMgr cmdlet. Please assist if you can help. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#powershellorg---most-popular-post)PowerShell.org - Most Popular Post + +[*"Find Commands with Parameter Names"*](https://powershell.org/forums/topic/find-commands-with-parameter-names/) +The response by postanote contains a useful list of commands for newcomers. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#reddit---most-popular-post)Reddit - Most Popular Post + +[*"CaptureIT: A PowerShell Module to generate GIFs of the actively selected window or your entire desktop screen*](https://www.reddit.com/r/PowerShell/comments/8z6t3h/captureit_a_powershell_module_to_generate_gifs_of/) by u/_Unas on July 16th, 2018 +Create gifs of an active window or your desktop with one easy command. + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#media)Media + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180720.md#sliding-windows-audiocast---automation-with-jeffrey-snover)[*Sliding Windows Audiocast - "Automation with Jeffrey Snover"*](https://www.slidingwindows.de/slw10/) + +by Thorsten Butz on July 11th, 2018 +Take 45 minutes and listen to this excellent podcast with Jeffrey Snover. Recorded during the PowerShell Conference Europe in April, Jeffrey provides insight to a number of thoughtful questions that cover a wide range of topics, including the history of PowerShell, how certain decisions came to be, some regrets, and the future of PowerShell. diff --git a/content/articles/2018/07/what-you-missed-this-week-in-powershell-3/index.md b/content/articles/2018/07/what-you-missed-this-week-in-powershell-3/index.md new file mode 100644 index 000000000..f701a1331 --- /dev/null +++ b/content/articles/2018/07/what-you-missed-this-week-in-powershell-3/index.md @@ -0,0 +1,65 @@ +--- +url: /articles/2018-07-27-what-you-missed-this-week-in-powershell-3/ +title: What You Missed This Week in PowerShell! +authors: + - Greg Tate +date: "2018-07-27T15:00:19+00:00" +categories: + - PowerShell for Admins +legacy_featured_image: /wp-content/uploads/2018/08/featured-calendar.png +aliases: + - /2018/07/what-you-missed-this-week-in-powershell-3/ +--- + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#blogs)Blogs + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#powershell-core-now-available-as-a-snap-package)[*PowerShell Core Now Available as a Snap Package*](https://blogs.msdn.microsoft.com/powershell/2018/07/20/powershell-core-now-available-as-a-snap-package/) + +by The PowerShell Team on July 20th +Oh, Snap! Core's support matrix on Linux grows broader with the inclusion of a Snap Package to the line-up. Check out the PS team's blog for details on what this means and how you can try it out. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#powershell-modules-in-azure-functions)[*PowerShell Modules in Azure Functions*](https://agazoth.github.io/blogpost/2018/07/22/Powershell-Modules-in-Azure-Fuctions.html) + +by Axel Bøg Andersen on July 22nd +Hit a snag taking your modules to Azure Functions? Eliminate the hassle of using extra tools and learn how to load your modules directly to Azure Functions. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#using-pester-for-infrastructure-testing)[*Using Pester for Infrastructure Testing*](http://powershellpr0mpt.com/2018/07/24/using-pester-for-infrastructure-testing/) + +by Robert Prüst on July 24th. +If you're looking for interesting use-cases for Pester, this one's for you. Robert gives us a look at using the mocking and testing framework to suss out performance issues in his environment. Hint: It's not DNS. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#powershell-threadjobs)[*PowerShell ThreadJobs*](https://richardspowershellblog.wordpress.com/2018/07/24/powershell-threadjobs/) + +by Richard Siddaway on July 24th +There's a new cmdlet in PowerShell Core v6.1 preview 4 that allows you to run jobs on separate threads. This allows you to run more jobs simulatenously as ThreadJobs are lighter in resource consumption than standard jobs. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#displaying-toast-notifications-for-a-different-user-when-powershell-module-updates-are-available)[*Displaying Toast Notifications for a Different User When PowerShell Module Updates are Available*](https://mikefrobbins.com/2018/07/26/displaying-toast-notifications-for-a-different-user-when-powershell-module-updates-are-available/) + +by Mike Robbins on July 26tth +Learn about a number of useful techniques in this article. Use the BuntToast module to display toast notifications in Windows. Use the BetterCredentials module to read credentials from CredentialManager (rather than prompting or reading from a password file). And use the Find-MrModuleUpdate function from MrToolkit module to determine if any updates are availble for your PowerShell modules. + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#forums)Forums + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#powershellorg-challenge---unanswered-post)PowerShell.org Challenge - Unanswered Post + +[*How to Change Retention Period of Each Policy in Azure Recovery Services Vault*](https://powershell.org/forums/topic/azurehow-to-change-retention-period-of-each-policy-in-recoverservices-vault/) by Avinash on July 22nd +Avinash's question has been out there for a week and he hasn't gotten any help yet. He's on the right track but needs a little guidance. Please jump in if you can help! + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#reddit-rpowershell---most-popular-post)Reddit /r/PowerShell - Most Popular Post + +[*"Widnows Admin Center (formerly Project Honolulu) Functions on Github"*](https://www.reddit.com/r/PowerShell/comments/92416c/windows_admin_center_formerly_project_honolulu/) by ufourierswager on July 26th +This author grabbed all the functions from Windows Admin Center and posted them on GitHub for the rest of the community to use. Fork your own copy and get your hands on a nice set of useful functions! + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#media)Media + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#twitter)Twitter + +[*The Ultimate PowerShell Cheat Sheet*](https://twitter.com/SadProcessor/status/1022080105345114112) by @SadProcessor on July 25th +If only every cheat sheet were this simple! + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180726.md#youtube)Youtube + +[*PowerShell Core Community Call*](https://www.youtube.com/watch?v=0eu--5muiLI) by The PowerShell Team on July 19th +Topics include discussion on two preview releases, the compatibility for the Active Directory module in RSAT with PowerShell Core, and the release cadence of PowerShell Core. [Link to call notes][1] + + [1]: https://github.com/PowerShell/PowerShell-RFC/blob/master/CommunityCall/20180719_Notes.md diff --git a/content/articles/2018/07/what-you-missed-this-week-in-powershell/index.md b/content/articles/2018/07/what-you-missed-this-week-in-powershell/index.md new file mode 100644 index 000000000..1a5b0b54c --- /dev/null +++ b/content/articles/2018/07/what-you-missed-this-week-in-powershell/index.md @@ -0,0 +1,65 @@ +--- +url: /articles/2018-07-13-what-you-missed-this-week-in-powershell/ +title: What You Missed This Week in PowerShell! +authors: + - Will Anderson +date: "2018-07-13T15:00:19+00:00" +categories: + - PowerShell for Admins +aliases: + - /2018/07/what-you-missed-this-week-in-powershell/ +--- + +_This week we're starting a new series of blog posts called (obviously) 'What You Missed This Week in PowerShell!'.  Our team of volunteers is scouring the web to find interesting articles, and forum posts related to our favourite topic!  In the meantime, I want to give a 'thank you' to everyone that pulled together to make this possible.  Many thanks to Greg Tate, Evgeny Fedorov, Patrick Singletary, Brett Bunker, Mark Roloff, and Robin Dadswell for your hard work on getting this started!_ +_-Will_ + +## Blogs + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#cross-platform-powershell-unit-testing-and-automatic-variables)[*Cross-Platform PowerShell, Unit Testing and Automatic Variables*](https://andrewpearce.io/powershell/2018/07/10/cross-platform-pester-gotcha/) + +by Andrew Pearce on July 10th, 2018 +Windows PowerShell and PowerShell Core are two different products. When using continuous integration tooling to write unit tests you will likely encounter an issue when testing for platform-specific logic paths. Understand a limitation with the $PSEdition automatic variable and how to work around this limitation so that you can achieve bliss when writing unit tests for modules that support both Windows PowerShell and PowerShell Core. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#generating-random-data-with-nameit)[*Generating Random Data with NameIT*](https://kevinmarquette.github.io/2018-07-09-Powershell-NameIt-generate-random-data/?utm_source=rss&utm_medium=blog&utm_content=rss) + +by Kevin Marquette on July 10th, 2018 +Generate random data for testing and presentations with the NameIT PowerShell module. Scenarios include generating random user names, random computer names, and even random objects with - gasp - random property values! This module was written by Doug Finke and is available in the PowerShell Gallery. Refer to Kevin's article for a number of useful scenarios. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#returning-rich-objects-from-functions-part-2)[*Returning Rich Objects From Functions (Part 2)*](http://community.idera.com/powershell/powertips/b/tips/posts/returning-rich-objects-from-functions-part-2) + +by Idera on July 9th +Control the output of objects so that preferred properties, i.e. first-class citizens, appear at the top of a property list. This is must read for those of you who live in the camp of using PSCustomObject! + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#announcing-the-powershell-conference-book)[*Announcing the PowerShell Conference Book*](https://mikefrobbins.com/2018/07/06/announcing-the-powershell-conference-book/) + +by Mike Robbins on July 6th, 2018 +Now available on LeanPub, the "PowerShell Conference Book" presents a series of advanced PowerShell topics where each chapter embodies a session at a PowerShell conference. Targets intermediate and advanced PowerShell users. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#the-scriptstoprocess-and-requiredmodules-order)[*The ScriptsToProcess and RequiredModules Order*](https://tommymaynard.com/the-scriptstoprocess-and-requiredmodules-order-2018/) + +by Tommy Maynard on July 2nd, 2018 +Control the order of sections in the module manifest file. By default the "RequiredModules" section runs before the "ScriptsToProcess" section, and this may not be ideal. By switching this order you gain the ability to properly set up your environment prior to validating module dependencies. + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#forum-topics)Forum Topics + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#powershellorg-challenge---unanswered-post)PowerShell.org Challenge - Unanswered Post + +[*Testing for SRV records - need help pulling data out of a hashtable*](https://powershell.org/forums/topic/testing-for-srv-records-need-help-pulling-data-out-of-hashtable/) by Mike Kanakos +Mike needs your help! Please visit the forums and respond to his question on hash table usage. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#powershellorg---most-popular-post)PowerShell.org - Most Popular Post + +[*"Securing PowerShell On Your Domain"*](https://powershell.org/forums/topic/securing-powershell-on-your-domain/) by Allan Williams +For you folks in the security space, a reply on this post contains numerous useful links related to Windows PowerShell and security. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#reddit---most-popular-post)Reddit - Most Popular Post + +[*"PowerShell Koans"*](https://www.reddit.com/r/PowerShell/comments/8xyfx2/powershell_koans/) by u/Ta11ow on July 12th, 2018 +Check out a simple, fun, and interactive way to learn the PowerShell language through Pester unit testing. + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#media)Media + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/12July2018.md#devops-enterprise-summit---digitial-transformation---thriving-through-the-transition)[*DevOps Enterprise Summit - Digitial Transformation - Thriving Through the Transition*](https://www.youtube.com/watch?v=nKyF8fzed0w) + +by Jeffrey Snover on July 3rd, 2018 +Catch Jeff's session on how digitial transformation provides an opportunity to supercharge your career! diff --git a/content/articles/2018/08/_index.md b/content/articles/2018/08/_index.md new file mode 100644 index 000000000..529a171f3 --- /dev/null +++ b/content/articles/2018/08/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from August 2018" +description: "PowerShell.org Articles published in August 2018." +--- diff --git a/content/articles/2018/08/help-us-run-powershell-org/index.md b/content/articles/2018/08/help-us-run-powershell-org/index.md new file mode 100644 index 000000000..656f7e972 --- /dev/null +++ b/content/articles/2018/08/help-us-run-powershell-org/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2018-08-15-help-us-run-powershell-org/ +title: Help us Run PowerShell.org! +authors: + - Don Jones +date: "2018-08-15T14:54:53+00:00" +categories: + - Announcements +aliases: + - /2018/08/help-us-run-powershell-org/ +--- + +We're looking for a few good PowerShellers to help us keep the community on track! + + + +**POSITION FILLED Forums Moderator. **We're looking for someone who can clear the spam queues  +daily +. In addition, we're looking to move to a model where new site members' first posts are held in moderation to prevent spam; our Moderator would be expected to clear those queues twice each weekday (after their first post is approved, most members will be able to post without moderation from that point). We'd like two Moderators who can back each other up for vacations and such (there's no harm if you're both checking the queues at the same time). +**POSITION FILLED Forums Cheerleader. **This is a task one of our Moderators can perform, but it's a bit of work so it might be a different person. This person needs to monitor for unanswered forums posts and, after a couple of days, either post an answer or use social media to try and bring someone in to craft an answer. This person doesn't need to be an Expert In All Things, but needs to be willing to try and engage the broader community to try and find an answer. Will also have Moderator permissions to move posts that have been placed in the wrong forum. +**POSITION FILLED Social Media Manager. **We're looking for someone who can manage the @PshOrg and @PshSummit Twitter accounts, and potentially establish other social media accounts. This includes watching for newsworthy items to post, and posting at the direction of other team members. We do not currently use social media management software; this person can also be responsible for recommending and implementing something. +If you're interested, please contact president@ this domain via email. If you have questions, please post those in a comment here so that we can reply publicly. diff --git a/content/articles/2018/08/icymi-powershell-week-of-17-august-2018/index.md b/content/articles/2018/08/icymi-powershell-week-of-17-august-2018/index.md new file mode 100644 index 000000000..062c8d981 --- /dev/null +++ b/content/articles/2018/08/icymi-powershell-week-of-17-august-2018/index.md @@ -0,0 +1,79 @@ +--- +url: /articles/2018-08-17-icymi-powershell-week-of-17-august-2018/ +title: "ICYMI: PowerShell Week of 17-August-2018" +authors: + - Greg Tate +date: "2018-08-17T15:00:25+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/08/icymi-powershell-week-of-17-august-2018/ +--- + +Topics include PowerBI cmdlets, auditing group changes, exporting module functions, and PowerShell phishing. + + +## Blogs + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#test-netconnection-vs-test-connection---testing-a-network-connection-with-powershell)[*Test-NetConnection vs. Test-Connection - Testing a Network Connection with PowerShell*](https://4sysops.com/archives/test-netconnection-vs-test-connection-testing-a-network-connection-with-powershell/) + +by Adam Bertram on August 10th +Learn how a single cmdlet, Test-NetConnection cmdlet, can be used in place of common network connection utilities, such as ping, tracert, telnet, and portqry. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#working-with-powershell-in-power-bi)[*Working with PowerShell in Power BI*](https://powerbi.microsoft.com/en-us/blog/working-with-powershell-in-power-bi/) + +by Kay Unkroth (Microsoft) on August 13th +A few weeks ago Microsoft released a Power BI PowerShell module for administering Power BI tenants. This article covers the basics of using the new Power BI cmdlets. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#get-group-membership-changes)[*Get Group Membership Changes*](https://www.sconstantinou.com/get-group-membership-changes/) + +by Stephanos Constantinou on August 13th +Have a need to monitor group changes in Active Directory? Run this script as a scheduled task to receive an email containing details of whose come and gone from AD groups. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#powershell-module-exporting-functions-in-constrained-language)[*PowerShell Module Exporting Functions in Constrained Language*](https://blogs.msdn.microsoft.com/powershell/2018/08/14/powershell-module-function-export-in-constrained-language/) + +by Paul Higinbotham (Microsoft) on August 15th +Exporting functions using wildcards in a script module introduces significant performance penalties and carries serious security implications. Understand how PowerShell Constrained Language Mode addresses this problem. Look for a module in PSGallery soon that will help to ensure your modules are in compliance with the guidance in this article. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#phishing---ask-and-ye-shall-receive)[*Phishing - Ask and Ye Shall Receive*](https://blog.fox-it.com/2018/08/14/phishing-ask-and-ye-shall-receive/) + +by rindertkramer on August 14th +This eye-opening article demonstrates how bad actors can use PowerShell to steal credentials using fake toast notifications. The intent of this article is to raise security awareness; be paranoid when it comes to processes asking for your credentials! + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#forums)Forums + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#powershellorg---popular-post)PowerShell.org - Popular Post + +[*Teaching PowerShell Public Group*](https://powershell.org/groups/teaching-powershell/) +Get a feel for the new Groups feature on PowerShell.org and particpate in a discusion hashtables versus PSCustomObjects. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#powershellorg-challenge---unanswered-post)PowerShell.org Challenge - Unanswered Post + +[*DSC HTTPS Pull Server - An Error Occurred While Sending the Request*](https://powershell.org/forums/topic/dsc-https-pull-server-an-error-occurred-while-sending-the-request/) by Marc Esteve on August 10th +Marc has been struggling for two weeks on this issue. Please jump in and provide some guidance if you can! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#reddit-rpowershell---most-popular-post)Reddit /r/PowerShell - Most Popular Post + +[*PowerShell Remoting on Python*](https://www.reddit.com/r/PowerShell/comments/975tdb/powershell_remoting_on_python/) by jborean93 on August 14th +Jordan Borean has created PyPSRP, a Python library that works with the PowerShell Remoting Protocol to help facilitate better remote management of Windows servers. Wondering what this has to do with PowerShell? Well, he's blogged about what his library does and it also reveals some really cool details about how PowerShell's remoting works under the hood! It's a long read but if you were the kid that took stuff apart just to see how they worked, this is well worth your time. + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#media)Media + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#twitter)Twitter + +[*Show-PSDriveMenu*](https://twitter.com/thetommymaynard/status/1029231148453380096?s=19) by Tommy Maynard on August 14th +Who doesn't like new tools in the toolbox? Tommy gives us a quick look at a new one called Show-PsDriveMenu. True to the name, it shows you all of your available PsDrives and lets you quickly switch between them. He's got his cool little script available on the PowerShell Gallery, so go check it out. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180817.md#youtube)Youtube + +[*PowerShell Core Community Call*](https://www.youtube.com/watch?v=eNIbm4h2guE) by The PowerShell Team on August 16th +Check out what's coming down the pipe for PowerShell Core, including target date for the next major release for PowerShell Core. Call notes [_here_][1]. + +Special thanks to Mark Roloff, Robin Dadswell, and Brett Bunker for contributions! + + [1]: https://github.com/PowerShell/PowerShell-RFC/blob/master/CommunityCall/20180816_Notes.md diff --git a/content/articles/2018/08/icymi-powershell-week-of-24-august-18/index.md b/content/articles/2018/08/icymi-powershell-week-of-24-august-18/index.md new file mode 100644 index 000000000..c399d122e --- /dev/null +++ b/content/articles/2018/08/icymi-powershell-week-of-24-august-18/index.md @@ -0,0 +1,74 @@ +--- +url: /articles/2018-08-24-icymi-powershell-week-of-24-august-18/ +title: "ICYMI: PowerShell Week of 24-August-18" +authors: + - Greg Tate +date: "2018-08-24T15:00:47+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/08/icymi-powershell-week-of-24-august-18/ +--- + +Topics include script module design, PowerShell exploitation, PowerShell Remoting, PowerShell AST, the O365 Data Retriever tool, and the inaugural PSPowerHour. + + + +Special thanks to Mark Roloff, Brett Bunker, and Robin Dadswell for contributions this week! + +## Blogs + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#powershell-script-module-design-publicprivate-versus-functionsinternal-folders-for-functions)[*PowerShell Script Module Design: Public/Private versus Functions/Internal Folders for Functions*](https://mikefrobbins.com/2018/08/17/powershell-script-module-design-public-private-versus-functions-internal-folders-for-functions/) + +by Mike Robbins on August 17th +Mike provides an interesting take on structuring module directories. Perhaps this type discussion is one better had over beers. I side with Mike on this! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#showmecon-2018---powershell-exploitation)[*ShowMeCon 2018 - PowerShell Exploitation*](https://securityboulevard.com/2018/08/showmecon-2018-michael-goughs-powershell-exploitation-powersploit-bloodhound-powershellmafia-obfuscation-powershell-empire-the-empire-has-fallen-you-can-detect-powershell-exploitation/) + +Presentation by Michael Gough on August 18th +While not technically a blog, this article links to a presentation that shows how attackers use PowerShell exploits. Presentation is given by Michael Gough who is a host of the "Brakeing Down Incident Response" podcast and author of the Windows PowerShell Logging Cheat Sheet. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#powershell-remoting)[*PowerShell Remoting*](https://www.sconstantinou.com/windows-powershell-sessions-pssessions/) + +by Stephanos Constantinou on August 21st +Have a look at a few areas of PowerShell Remoting including requirements and some authentication methods that can be used with it. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#finding-default-parameter-values-with-the-ast)[*Finding Default Parameter Values with the AST*](https://chrislgardner.github.io/powershell/2018/08/22/finding-default-parameter-values.html) + +by Chris Gardner on August 22nd +Do you want to Pester test your parameters? Do you want to use something other than RegEx when you do that? Well then the PowerShell Abstract Syntax Tree (AST) is your answer. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#how-and-why-i-created-the-o365-data-retriever-tool)[*How and Why I created the O365 Data Retriever Tool*](https://veronicageek.com/powershell/how-and-why-i-created-the-o365-data-retriever-tool/2018/08/) + +by Veronique Lengelle on August 23rd +If, like us, you've been eagerly awaiting the release of the O365 Data Retriever tool, your wait is over. In this blog, Veronica discusses her motivation for working on it, the journey she took getting to it this point, and encourages us to not assume that others know what we know. Therefore, get out there and share it! +And, yes, there's a link to the tool on GitHub. Go check it out! + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#forums)Forums + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#powershellorg---popular-post)PowerShell.org - Popular Post + +[*New Bulk ADUser*](https://powershell.org/forums/topic/new-bulk-aduser/) by Jeff Taylor on August 20th +Jeff came into the forums this week looking for advice with creating new user accounts in bulk from a CSV. What followed was a great discussion about splatting and passing values through the pipeline. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#reddit-rpowershell---most-popular-post)Reddit /r/PowerShell - Most Popular Post + +[*PowerShell Console, Scripts, Functions, Modules, Cmdlets, Oh My!*](https://www.reddit.com/r/PowerShell/comments/98m06w/powershell_console_scripts_functions_modules/) by U/_Unas_ on August 19th +The most upvoted topic of the week belongs to an article by Josh Rickard. Nice work, Josh! + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#media)Media + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#twitter)Twitter + +[*We shipped the Release Candidate (RC) for #PowerShell 6.1 today...*](https://twitter.com/joeyaiello/status/1032432062941163520) by Joey Aiello on August 22nd +The latest Release Candidate for PowerShell Core has arrived and the team would love your input before the next stable release. Head over to GitHub and grab it for some new hotness! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180824.md#youtube)Youtube + +[*PowerHour 001: 2018-08-21*](https://youtu.be/fDQvdIEda_c) by PSPowerHour on August 21st +The inagural PSPowerHour, covering topics from SQL through to Raspberry Pi's. diff --git a/content/articles/2018/08/icymi-week-of-31-august-18/index.md b/content/articles/2018/08/icymi-week-of-31-august-18/index.md new file mode 100644 index 000000000..08a44d8b2 --- /dev/null +++ b/content/articles/2018/08/icymi-week-of-31-august-18/index.md @@ -0,0 +1,139 @@ +--- +url: /articles/2018-08-31-icymi-week-of-31-august-18/ +title: "ICYMI: PowerShell Week of 31-August-18" +authors: + - Greg Tate +date: "2018-08-31T15:00:03+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/08/icymi-week-of-31-august-18/ +--- + +Topics include automating ACLs for O365 public IPs, the Scour module, Module Design w/ Plaster, the ConvertToMarkdown module, and PSPowerHour. + + + + + + Special thanks to Mark Roloff, Brett Bunker, and Robin Dadswell for weekly contributions. + + +## Blogs + +###### [*Automate Office 365 Endpoint ACL Configurations Using PowerShell*](http://www.powershell.no/exchange/online,office/365,powershell/2018/08/26/automate-office365-ip-address-handling.html) {.unchanged.rich-diff-level-one} + + + by Jan Egil Ring on August 26th + + + If you're responsible for keeping access control lists up to date for public IPs in Office 365 then read this article to understand how you can automate this process. + + +###### [*Scour: Fast, Personal, Local Content Searches*](http://www.leeholmes.com/blog/2018/08/28/scour-fast-personal-local-content-searches/) {.unchanged.rich-diff-level-one} + + + by Lee Holmes on August 28th + + + Lee Holmes introduces a new PowerShell module, Scour. This module leverages the indexing and search capabilities of Apache Lucene to bring you supercharged speed for, wait for it... *scouring* your filesystem. If you've got tons of content to search through and little time to spare, this might be just the tool for you. + + +###### [*your code doesn’t suck*](https://blog.netnerds.net/2018/08/your-code-doesnt-suck/) {.unchanged.rich-diff-level-one} + + + by Chrissy LeMaire on August 28th + + + This one really resonated with the group. Probably because none of us entertain illusions of writing award-winning code. But Chrissy cuts through the self-criticical nonsense; reminding us that as long as our code is saving people time and effort, it definitely doesn't suck. + + +###### [*PowerShell Script Module Design: Plaster Template for Creating Modules*](https://mikefrobbins.com/2018/08/30/powershell-script-module-design-plaster-template-for-creating-modules/) {.unchanged.rich-diff-level-one} + + + by Mike Robbins on August 30th + + + Mike's follow-up article on module design walks you through using Plaster to create modules with a custom folder structure. + + +###### [*PowerShell Execution Policy*](https://www.sconstantinou.com/powershell-execution-policy/) {.unchanged.rich-diff-level-one} + + + by Stephanos Constantinou on August 30th + + + Check out this nicely-written article that breaks down PowerShell Execution Policy. + + +## Forums + +###### PowerShell.org Challenge - Unanswered Post {.unchanged.rich-diff-level-one} + + + [*Post Method*](https://powershell.org/forums/topic/post-method/) by Majd on August 24th + + + Majd's question on using Invoke-WebRequest has gone unanswered for almost a week. Please jump in and assist if you can! + + +###### Reddit /r/PowerShell - Top Post of the Week {.unchanged.rich-diff-level-one} + + + [*Can PS remove Minecraft, CandyCrush and the other packages that are there but not installed?*](https://www.reddit.com/r/PowerShell/comments/9b2lbm/can_ps_remove_minecraft_candycrush_and_the_other/) by u/*Landmine* on August 29th + + + If you're customizing Windows images for your company then you've surely come acrosss this scenario. Read up on the advice others have given to tacklet this issue. + + +## Media + +###### Twitter {.unchanged.rich-diff-level-one} + + + [*ConvertFromMarkdown*](https://twitter.com/dfinke/status/1033088044155514882) by Doug Finke + + + Learn how the ConvertFrom-Markdown module can generate chapters from markdown and compile those chapters into HTML, a Word Doc, or a PDF. + + +###### Youtube {.unchanged.rich-diff-level-one} + + + [*PSPowerHour Episode 2*](https://www.youtube.com/watch?v=3Yq4sVWJrWo) by PSPowerHour + + + The second installment of lightning demos for PowerHour includes the following topics: + + + - + Cloning SQL Server databases using PowerShell (Sander Stad), + + + - + Using getters and setters for classes wtih custom attributes (Ryan Bartram) + + + - + Using PwSh to gather information from silos (Teresa Clark) + + + - + Using PowerShell and RegExp to convert code between SQL platforms (Claudio Silva) + + + - + Getting started with Visual Studio Code (Shawn Melton) + + + - + Deploying SQL databases using PowerShell (Kirill Kravstov) + + + - + Learning PowerShell with PSKoans (Joel Sallow) diff --git a/content/articles/2018/08/powershell-devops-global-summit-initial-onramp-scholarship-recipients/index.md b/content/articles/2018/08/powershell-devops-global-summit-initial-onramp-scholarship-recipients/index.md new file mode 100644 index 000000000..43543d4ea --- /dev/null +++ b/content/articles/2018/08/powershell-devops-global-summit-initial-onramp-scholarship-recipients/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2018-08-25-powershell-devops-global-summit-initial-onramp-scholarship-recipients/ +title: PowerShell + DevOps Global Summit – Initial OnRamp Scholarship Recipients +authors: + - Don Jones +date: "2018-08-25T15:05:10+00:00" +categories: + - PowerShell Summit +aliases: + - /2018/08/powershell-devops-global-summit-initial-onramp-scholarship-recipients/ +--- + +Based upon generous donations to this point, including from the Campers of DSC/DevOps Camp 2018 and the readers of [The PowerShell Conference Book][1], we will be able to offer a greater number of [scholarships][2] that originally anticipated. As a result, we will be awarding some of those immediately. + + + +We hope this will give those recipients more time to prepare, and it will allow us to front-load some of our administrative tasks related to the scholarship. **We will be contacting recipients on August 25 and 26 to confirm their participation. **Please note that this is **not** the final, full slate of recipients; we will continue to accept [applications][2] until the original deadline of 1st November 2018. Any applications already received, which are not selected in this first round, remain **very** eligible for our originally planned slots. We are simply not making a decision on those original slots right now, and will do so according to the original schedule. +Again, this is an **increase** to the number of scholarships we are able to award, not a decrease. Our original slots remain available and will be awarded according to the original schedule. + + [1]: https://leanpub.com/powershell-conference-book + [2]: https://powershell.org/summit/summit-onramp/onramp-scholarship/ diff --git a/content/articles/2018/08/powershell-devops-summit-2019-call-for-speakers/index.md b/content/articles/2018/08/powershell-devops-summit-2019-call-for-speakers/index.md new file mode 100644 index 000000000..469e1c5f1 --- /dev/null +++ b/content/articles/2018/08/powershell-devops-summit-2019-call-for-speakers/index.md @@ -0,0 +1,121 @@ +--- +url: /articles/2018-08-01-powershell-devops-summit-2019-call-for-speakers/ +title: PowerShell + DevOps Summit 2019 – Call for Speakers +authors: + - Will Anderson +date: "2018-08-01T15:08:52+00:00" +categories: + - PowerShell for Admins +legacy_featured_image: /wp-content/uploads/2018/08/Screen-Shot-2018-08-07-at-11.04.13-AM.png +aliases: + - /2018/08/powershell-devops-summit-2019-call-for-speakers/ +--- + +The PowerShell and DevOps Global Summit 2019 will be returning to the Meydenbauer Center in Bellevue, WA from Monday, April 29 to Thursday, May 2, 2019. + Since 2013, PowerShell and DevOps experts from around the world , will once again collaborate and learn how to maximize PowerShell in the workplace through fast-paced, knowledge-packed presentations. The Global Summit is the place for innovators to explore and further their knowledge of DevOps principles and practices in a Windows environment, make new connections, learn new techniques, and offer something to your peers and colleagues back at the office. + Ready to share your PowerShell or DevOps know-how? This is your official call to submit presentation ideas for selection! + **What we are looking for?** + The majority of our sessions will now follow a traditional 45-minute format. These sessions cover a wide variety of PowerShell and DevOps expertise. *We have **a number of** agenda slots available for double length sessions*. These sessions delve into the depths of a topic covering areas that need more than 45 minutes. + Your proposed session should fit into one of the following areas: + + + + + - + PowerShell Internals (Advanced to Master Content) – A deep-dive into the inner workings of PowerShell and practical solutions that can be built from them. + + + - + PowerShell Features Deep Dive (Intermediate to Advanced Content) - These presentations are focused on configuring and working with existing PowerShell features and capabilities. + + + - + DevOps in Practice (Beginner to Intermediate) - A comprehensive look at putting the DevOps principles into practice. These presentations should focus on what you're doing and how you're doing it with DevOps. + + + + + + + + Advanced DevOps in Practice sessions will also be considered. + We are open to presentations across the entire ecosystem that have been built around PowerShell or the various DevOps tools—this includes Microsoft platforms and products that have PowerShell-based management tools or third party products.  New topics will be preferred over the recycling of older topics. However, we are still open to sessions on 'older' topics that address areas of great confusion or uncertainty. + **What kinds of sessions get selected? ** + Using previous feedback from our community, we're expanding the scope of our content this year.  While OnRamp will take care of those new to the PowerShell/DevOps world, we're looking to fill the other gaps with intermediate content and progressing all the way to the industry masters. + We look for an abstract that compells us to want to see your session—so spend time writing a great abstract! We want real-world usability combined with "Wow, nobody talks about *THAT*" awesomeness. We want to see the code. Don't just talk about it—this is a PowerShell summit, not a PowerPoint summit. If your session isn't predominately demonstrations, it's probably not right for the Summit. + Summit presentations are intense and intimate, often with plenty of audience interaction. You must expect questions and discussions. This is not a "lecture to the audience" event. + *We're always happy to discuss proposed sessions. If you have any doubts about the suitability of a particular session, please contact us: summit AT PowerShell DOT org* + Please note: + + + + + + - + All sessions are to be delivered in English. + + + - + Presenter will provide all equipment needed to deliver session(s), including a laptop or other computer. + + + - + Presenter must be able to provide video by means of HDMI, DVI-D, or DisplayPort connectors - VGA is NOT supported. + + + - + Presenter must be able to manually select an appropriate screen resolution for video output. Typically, 1024x768 or 1280x720 are preferred. + + + + + + + + Internet connectivity is available in the conference center but bandwidth is limited. If you rely on connecting to the cloud for your sessions, consider recording any demonstrations as a contingency. + + **How do I submit my presentation abstract?** + + + + + + - + Go to - [https://www.papercall.io/summit2019](https://www.papercall.io/summit2019) + + + + + - + Click Speak at PowerShell and DevOps Global Summit 2019 (scroll down to the bottom right and find the big green button). + + + - + Login using Twitter, Facebook or one of the other options. + + + - + Complete the form. The name field will show your email address. Please ensure your full name is in the Bio field, this will make communication easier. + + + - + Click submit. + + + + + + + + Please contact summit AT PowerShell DOT org if you have any issues or problems. + When can I submit? + Enter your presentation submissions immediately! We will start selecting presentations as soon as they arrive, so you don't want to miss out. The last day we will accept presentation submissions will be **Monday, October 1, 2018**. This is a hard deadline - **No**** sessions will be accepted after this date.**** ** + + **When will I know?** + You will be informed if one or more of your presentations have been selected and notified by Thursday, October 11, 2018. Your notification email will include any further actions you need to take. We will notify all potential speakers by Tuesday, October 23, 2018 if their sessions haven't been accepted. + Speakers with accepted sessions will be given free admission to the event, including attendance at all official Summit activities. Speakers may not bring guests to the day sessions or evening events. + Selected Speakers will receive an honorarium at a valuation of $400 for a 45-minute session and $800 for a double session, to assist with traveling and accommodation expenses.   This will be made in the form of a US-only Prepaid VISA card.  International speakers may be given the option of receiving a cheque or PayPal payment if needed.  You will be contacted in advance of the event as to preference. + + + The final agenda will be posted on PowerShell.Org early November 2018. + We look forward to your expertise in making PowerShell and DevOps Global Summit 2019 the most valuable IT/Dev conference of the year! diff --git a/content/articles/2018/08/thank-you-richard-and-fare-well/index.md b/content/articles/2018/08/thank-you-richard-and-fare-well/index.md new file mode 100644 index 000000000..d0c7e8bc5 --- /dev/null +++ b/content/articles/2018/08/thank-you-richard-and-fare-well/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2018-08-08-thank-you-richard-and-fare-well/ +title: Thank You, Richard, and Fare Well! +authors: + - Don Jones +date: "2018-08-08T15:35:03+00:00" +categories: + - Announcements + - PowerShell Summit +legacy_featured_image: /wp-content/uploads/2018/08/hqdefault.jpg +aliases: + - /2018/08/thank-you-richard-and-fare-well/ +--- + +Richard Siddaway has decided to step away from PowerShell.org and The DevOps Collective. Most recently, Richard has been known for his management of content at PowerShell Summit North America, PowerShell Summit Europe, and later, PowerShell + DevOps Global Summit. Before that, however, Richard was one of the founders of PowerShell.org way back in 2011-2012, along with myself, Jason Helmick, Kirk Munro, and Jeffrey Hicks. It's quite fair to say that we all needed one another's support and expertise very much in those early days, and Richard was particularly key in helping us put together the two European Summit events. Richard's very much entitled to one of our Community Hero Challenge Coins, which have been awarded to only a small handful of people who have made sustained, long-term community contributions: Jeffrey Snover, Jason Helmick, Angel Calvo, and Kenneth Hansen. Richard's definitely in rarified company, and it's well-earned. + + + +For PowerShell + DevOps Summit 2019, **[Warren Frame][1]** and **[Missy Januszko][2]** will be taking over as co-Directors of Content. They'll be joined by Will Anderson as new CEO of The DevOps Collective, myself as President, James Petty as CFO, Christopher Gannon-Jones as Director of Global Events, and Jeffrey Bernt as Manager of Summit Logistics. Jeffery Hicks will be managing Iron Scripter and related activities both on-site and in advance. Rob Pleau has volunteered to coordinate the new OnRamp Buddy Program for 2019. +While I'm sad to see Richard step away, I'm proud and excited to see a new generation of community leaders stepping in to ensure the future of both Summit and the entire organization. We're fortunate to have had such a strong founding group, who worked through innumerable rough patches and crises to create a sustainable and repeatable system for our new team to step into, and I very much look forward to seeing where the "new blood" takes things! +Please **[offer your thanks to Richard][3]** for his years of hard work, and send your congratulations to our new team members. I hope we'll see many of you at Summit! + + [1]: https://twitter.com/pscookiemonster + [2]: https://twitter.com/thedevopsdiva?lang=en + [3]: https://twitter.com/rsiddaway diff --git a/content/articles/2018/08/the-summit-2019-call-for-topics-some-ideas/index.md b/content/articles/2018/08/the-summit-2019-call-for-topics-some-ideas/index.md new file mode 100644 index 000000000..4c2501cda --- /dev/null +++ b/content/articles/2018/08/the-summit-2019-call-for-topics-some-ideas/index.md @@ -0,0 +1,34 @@ +--- +url: /articles/2018-08-14-the-summit-2019-call-for-topics-some-ideas/ +title: "The Summit 2019 Call for Topics: Some Ideas" +authors: + - Don Jones +date: "2018-08-14T16:16:15+00:00" +categories: + - PowerShell for Admins +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_703607812.jpg +aliases: + - /2018/08/the-summit-2019-call-for-topics-some-ideas/ +--- + +As you hopefully know, we've opened the [Call for Topics for PowerShell + DevOps Global Summit 2019][1]. I know sometimes people struggle with ideas, and so I wanted to offer a few. + + + +First, know that you're _more than welcome_ to submit multiple ideas. In fact, we encourage it, because it gives the Content team a bit more flexibility. You're also welcome to _present_ multiple sessions, although prepping for more than a couple can be pretty intense, so you need to consider it pretty carefully. +One category of sessions we need is Intermediate. We actually use the word _Practitioner, _and we define the audience as someone who's made it through _Learn Windows PowerShell in a Month of Lunches _**and **_Learn PowerShell Scripting in a Month of Lunches, _who uses PowerShell pretty frequently, but hasn't made it to niche or expert-level topics yet. Many of the topics this audience needs are "evergreen" in that we probably need to present them each year, although we welcome different speakers and different perspectives. Ideas include: + + * Best Patterns and Practices for Advanced Functions + * Best Practices for Module Development and Distribution + * Creating and Managing an On-Premises Module Repository + * Managing PowerShell Security Features (with an emphasis on logging) + * Getting Started with Pester for Automated Unit Testing + * Best Practices for Error Handling in PowerShell Commands + +See, for many people, these aren't "sexy" or "hardcore" topics, but they're ones desperately and almost continually _needed. _You only have to look at our own Forums here at PowerShell.org to see how often these ideas come up. For that matter, consider browsing the forums for topic ideas! I mean, based on what I've seen this month alone, a session on, "Querying and Modifying AD Objects Using CSV Files" would hit a sweet spot pretty hard! +We're also actively looking to build out DevOps content, which can mean stepping away from PowerShell. We recognize that few attendees actually work in a DevOps environment, so "hardcore" stuff like Kubernetes, Hashicorp tools, and so on are probably not going to be popular. However, there are DevOps techniques that any PowerSheller can use in their environment, even if their company isn't fully DevOps. CI/CD tooling, for example, can be appropriate for anyone. And that doesn't need to focus just on VSTS - plenty of companies would prefer on-prem solutions like Team City, Jenkins, and the like. +DevOps topics can also include cross-stack admin ideas, like a session on learning Python, which is a great cross-stack scripting language that can complement PowerShell well. Again, sessions _that 80% of the world could find applicable in their daily lives_ is the watchword. +Finally, I've had some personal thoughts about sessions I'd like to see. For example, PowerShell's language was always designed to provide a "glide path" into C#, but we rarely have a "Building Compiled Cmdlets" type of session. This could focus on the _patterns_ involved. Say, rebuild the Get-Service command. That's not a difficult command, everyone understands what it already does, and the actual .NET code is pretty minimal. So you could focus on the structure of these, rather than getting into the nitty gritty of .NET. And you could have an "Introduction to C# for PowerShell People" session, to help someone who's looking to move some of their activity to the next level. +I hope that helps trigger some ideas of your own. Remember, the Call for Topics **is open now** and it's not only a great way to give back to the community, but to get free admission to Summit and a bit of money toward your travel expenses! + + [1]: https://powershell.org/2018/08/01/powershell-devops-summit-2019-call-for-speakers/ diff --git a/content/articles/2018/08/use-pnp-powershell-to-add-contenttype-for-your-sharepoint-site/index.md b/content/articles/2018/08/use-pnp-powershell-to-add-contenttype-for-your-sharepoint-site/index.md new file mode 100644 index 000000000..544cb5dff --- /dev/null +++ b/content/articles/2018/08/use-pnp-powershell-to-add-contenttype-for-your-sharepoint-site/index.md @@ -0,0 +1,99 @@ +--- +url: /articles/2018-08-21-use-pnp-powershell-to-add-contenttype-for-your-sharepoint-site/ +title: Use PnP PowerShell to add ContentType for your SharePoint site +authors: + - Eli Hess +date: "2018-08-21T18:16:02+00:00" +categories: + - PowerShell for Admins +aliases: + - /2018/08/use-pnp-powershell-to-add-contenttype-for-your-sharepoint-site/ +--- + +You can achieve the task by using SharePoint GUI. However, if your sites collection has tens of hundreds sites and each site has more than one document library, it will become a nightmare for a SharePoint administrator to do the task by using GUI. + + + Luckily, there is PnP Powershell which can help us achieve the goal. + + + The steps will be like below: + + + #Step1: export your login credential to a secure file on your local machine + + + get-credential|export-clixml -path c:\safe\mycredential.txt + + + #Step2: import your credential to Powershell + + + $cred=import-clixml -path c:\safe\mycredential.txt + + + #Step3: connect PnP online + + + connect-pnponline -url "your site url here" -credentials $cred + + + #Step4: get all sub sites of your site collection + + + $subsites=get-pnpsubwebs -recurse|select-url + + + #Step5: Use for each loop to loop through each subsites and add the content type into document libraries in each sub site. + + + foreach ($site in $subsites) +{ + + + connect-pnponline -url $site.url -credentials $cred + + + $docids=get-pnplist|where-object {$_.basetemplate -eq 101 -and $_title -ine "Site Assets"}|select id + + + foreach ($docid in $docids) { + + + add-pnpcontenttypetolist -list $docid.id -contenttype "content type name of your choice for default one" -DefaultContentType + + + add-pnpcontenttypetolist -list $docid.id -contenttype "2nd content type" + + + } + + + } + + + To remove the contenttype from your sharepoint libraries, you need to use remove-pnpcontenttypefromlist command. + + + See the following code: + + + Foreach($site in $subsites) { + + + connect-pnponline -url $sites.url -credentials $cred + + + $docids=get-pnplist|where-object {$_.basetemplate -eq 101 -and $_.title -ine "Site Assets"}|select id + + + foreach ($docid in $docids) { + + + remove-pnpcontenttypefromlist -list $docid.id -contenttype "the name of the content type you want to remove"} + + + } + + + +} diff --git a/content/articles/2018/08/welcome-to-the-new-powershell-org/index.md b/content/articles/2018/08/welcome-to-the-new-powershell-org/index.md new file mode 100644 index 000000000..d7da08b2e --- /dev/null +++ b/content/articles/2018/08/welcome-to-the-new-powershell-org/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2018-08-07-welcome-to-the-new-powershell-org/ +title: Welcome to the new PowerShell.org +authors: + - Don Jones +date: "2018-08-07T11:26:09+00:00" +categories: + - Announcements +legacy_featured_image: /wp-content/uploads/2018/08/Screen-Shot-2018-08-07-at-11.03.21-AM.png +aliases: + - /2018/08/welcome-to-the-new-powershell-org/ +--- + +I want to introduce you to the new PowerShell.org! +While we're still doing a little test-and-adjust work, I'm pretty confident that everything in the new theme is working. I'd also like to point out some hopefully useful new things we've done with the site. +First, we've still got pretty much everything you've been used to - our friendly and helpful Q&A forums, our community-authored articles, and more. Incidentally, if you'd like to be a writer here at PowerShell.org, we welcome you. Let us help you get some eyes on whatever it is you're creating, whether it's a short tutorial, an article about an open source project you contribute to, or whatever. Drop a line to our webmaster@ email alias and we'll hook you up with authoring rights. +I'll note that our Events Calendar is currently offline; the old plugin was antiquated, and we need to find something more suitable. That's ongoing. +We do have some new stuff, though. You'll find **Groups **right at the top of every page, and that takes you into our new discussion groups. These are designed to foster open-ended, freeform discussion threads, unlike our more problem/solution, issue-oriented Q&A forums. +Click on your avatar at the top of the page, and you'll switch into your new profile (incidentally, if you don't like your avatar, you'll need to register your email address with Gravatar.com - that's who we pull images from). You can leave a quick Twitter- or Facebook-style status update, letting everyone know what you've been up to in the PowerShell world. We hope it'll be a great way for you to update the community on your activities. Along those lines, you can specifically follow whomever you like in the community, so that their updates will bubble up to your feed. Again, your profile page is the key to accessing all that new functionality. +Once you've friended someone, we also now have private direct messages. From your profile, click Messages and then Compose to start creating a new message. +It's worth spending some time poking around and see what else is available - there's quite a bit of functionality. For example, from your profile page, choose Settings and then Email - there are quite a few email notification options that you can opt into, if you want to keep up without having to visit the site continually. +I'll note that photo uploading from your profile page is a little touch-and-go - that's one of the things we're still figuring out. +**Let me give you a reason to really populate your profile: **We're working to make this a central location for you to showcase everything you've accomplished in the community. Kind of like a very specialized LinkedIn profile, your PowerShell.org profile will eventually include recognitions for contributions, achievements, and more. It'll be something you can show to colleagues, hiring managers, and peers to help show the positive impact you're making and the milestones you're reaching. Now's the time to start! +We're working hard to bring more functionality to PowerShell.org that can help you keep up with our fast-moving world, and we hope you'll find it all useful. There's still more to come, and we always welcome your suggestions in the Web Site Feedback forum! diff --git a/content/articles/2018/08/what-you-missed-this-week-in-powershell-4/index.md b/content/articles/2018/08/what-you-missed-this-week-in-powershell-4/index.md new file mode 100644 index 000000000..aa98b287e --- /dev/null +++ b/content/articles/2018/08/what-you-missed-this-week-in-powershell-4/index.md @@ -0,0 +1,67 @@ +--- +url: /articles/2018-08-03-what-you-missed-this-week-in-powershell-4/ +title: What You Missed This Week in PowerShell! +authors: + - Greg Tate +date: "2018-08-03T15:00:44+00:00" +categories: + - PowerShell for Admins +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/08/what-you-missed-this-week-in-powershell-4/ +--- + +## Blogs + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#using-vsts-for-your-companys-private-powershell-library)[*Using VSTS for Your Company's Private PowerShell Library*](https://medium.com/@jsrice7391/using-vsts-for-your-companys-private-powershell-library-e333b15d58c8) + +by Justin Rice on July 28th +Interested in sharing your collection of PowerShell tools for your team to use? First-time blogger Justin Rice walks you through publishing a PowerShell module to an internal PSRepository using VSTS. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#creating-a-function-or-script-with-powershell-dynamic-parameters)[*Creating a Function or Script with PowerShell Dynamic Parameters*](https://blogs.technet.microsoft.com/undocumentedfeatures/2018/07/30/creating-a-function-or-script-with-powershell-dynamic-parameters/) + +By Aaron Guilmette on July 30th +Learn how to create parameters with validation data that you can tab-complete prior to runtime. In this example Aaron uses a set of Skype numbers as potential values for a parameter to his function. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#how-to-create-a-file-share-powershell-repository)[*How to Create a File Share PowerShell Repository*](https://4sysops.com/archives/how-to-create-a-file-share-powershell-repository/) + +by Matt McElreath on July 30th +Consider another method for sharing your PowerShell module. This article provides a simple technique for setting up a PowerShell repository from a file share. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#increased-windows-modules-coverage-with-powershell-core-61)[*Increased Windows Modules Coverage with PowerShell Core 6.1*](https://blogs.msdn.microsoft.com/powershell/2018/07/31/increased-windows-modules-coverage-with-powershell-core-6-1/) + +by Steve Lee on July 31st +The PowerShell team has a goal to bring 100% parity of the in-box modules to PowerShell Core. Learn about some of the challenges involved and how upcoming versions of Windows will close the gap on feature parity with Windows PowerShell. + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#forum-topics)Forum Topics + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#powershellorg---popular-post)PowerShell.org - Popular Post + +[*Don't Give Up (You Got This)!*](https://powershell.org/forums/topic/dont-give-up-you-got-this/) by Justin King on July 30th +If you're feeling a bit overwhelmed by all there is to learn, or if you just like motivational speeches, Justin offers some great advice about why it's so valuable to keep pushing your PowerShell knowledge further. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#powershellorg---new-community-event)PowerShell.org - New Community Event + +[*PowerHour: Community Lighting Demos*](https://powershell.org/2018/07/31/powerhour-community-lightning-demos/) by Warren Frame on July 31st +Announcing a new community-driven event for the rapid showcasing of PowerShell-related content! PowerHour will feature multiple speakers presenting in a lightning demo format, which will be streamed on YouTube. If you're interested in presenting but would like to start with something small and focused, or if you'd like to get some quick looks at lots different material, then this is worth keeping an eye on! + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#reddit---most-popular-post)Reddit - Most Popular Post + +[*PSWinDocumentation - Documentation for Active Directory*](https://www.reddit.com/r/PowerShell/comments/92vpab/pswindocumentation_documentation_for_active/) by u/MadBoyEvo on July 30th +Przemysław Kłys releases an early version of his PSWinDocumentation module, used for documenting AD and to showcase his other module, PSWriteWord (think of Doug Finke's ImportExcel, but for Word). These are some very cool and exciting tools, so definitely check them out! + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#youtube)Youtube + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#powershell-104---building-modules-using-psake)[*PowerShell 104 - Building Modules using PSake*](https://www.youtube.com/watch?v=SrnLJGW9GWY) + +by The St. Louis PowerShell User Group on July 24th +Grab a pot of coffee (or a bottle of rice wine) and catch up on a lengthy yet very informative session on controlling versions of your PowerShell modules. Topics include source code organization, running basic PSake builds, build version control, and Pester tests. Presented by Ken Maglio and Michael Lombardi + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#twitter)Twitter + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180803.md#i-hope-to-release-the-first-version-of-my-tool-this-month)[*I hope to release the first version of my tool this month!*](https://twitter.com/veronicageek/status/1024711850628460544) + +by @veronicageek on August 1st +Catch a sneak peek at this soon-to-be-released PowerShell tool for viewing your O365 tenant data in a clean UI! We can't wait, Veronica! + +Special thanks to Mark Roloff for contributions this week. diff --git a/content/articles/2018/08/what-you-missed-this-week-in-powershell-5/index.md b/content/articles/2018/08/what-you-missed-this-week-in-powershell-5/index.md new file mode 100644 index 000000000..a8c7c83b1 --- /dev/null +++ b/content/articles/2018/08/what-you-missed-this-week-in-powershell-5/index.md @@ -0,0 +1,68 @@ +--- +url: /articles/2018-08-10-what-you-missed-this-week-in-powershell-5/ +title: What You Missed This Week in PowerShell! – August 10th, 2018 +authors: + - Greg Tate +date: "2018-08-10T15:00:12+00:00" +categories: + - PowerShell for Admins +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/08/what-you-missed-this-week-in-powershell-5/ +--- + +Topics include Module Worst Practices, InjectionHunter, and The PowerShell Standard Library. + + +## Blogs + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#module-worst-practices)[*Module Worst Practices*](https://chrislgardner.github.io/powershell/2018/08/03/module-worst-practices.html) + +by Chris L Gardner on August 3rd +Imagine all the mistakes you would come across if you were to analyze every module in the PowerShell Gallery. Chris has done just that! And he presents solutions to some of the most annoying problems he encountered. This insightful article contains numerous useful tips and references to popular community solutions for designing a superb PowerShell module. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#powershell-injection-hunter-security-auditing-for-powershell-scripts)[*PowerShell Injection Hunter: Security Auditing for PowerShell Scripts*](https://blogs.msdn.microsoft.com/powershell/2018/08/03/powershell-injection-hunter-security-auditing-for-powershell-scripts/) + +by The PowerShell Team on August 3rd +Script injection is the most common form of mistake an administrator can make when exposing PowerShell code to an attacker. Learn how to use InjectionHunter with VS Code to help you discover possible code injection risks as you write your scripts. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#powershell-how-to-create-a-standard-library-binary-module)[*PowerShell: How to Create a Standard Library Binary Module*](https://kevinmarquette.github.io/2018-08-04-Powershell-Standard-Library-Binary-Module/?utm_source=twitter&utm_medium=post) + +by Kevin Marquette on August 4th +Ever had thoughts of writing a binary cmdlet? Or would you like to understand when it may be useful to do so? Get your toes wet with C# and learn how to produce a binary PowerShell cmdlet that you can include alongside your advanced functions within a PowerShell script module. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#powershell-standard-library-build-single-module-that-works-across-windows-powershell-and-powershell-core)[*PowerShell Standard Library: Build Single Module that Works Across Windows PowerShell and PowerShell Core*](https://blogs.msdn.microsoft.com/powershell/2018/08/06/powershell-standard-library-build-single-module-that-works-across-windows-powershell-and-powershell-core/) + +by James Truher on August 6th +When you're done reading Kevin's post head over to the PowerShell Team's blog and discover how the new DotNet CLI template makes creating binary modules a cinch! + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#-copy-files-with-hash-difference-via-powershell-) [Copy Files with Hash Difference via PowerShell ](http://wragg.io/a-powershell-cmdlet-to-copy-files-based-on-hash-difference/) + +by Mark Wragg on August 8th +Understand the basics of the Get-FileHash cmdlet and learn how to use the HashCopy module to identify changed files within your project. This is useful for Git-based projects as Git changes the modified date of files as it manages them. + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#forums)Forums + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#powershellorg---popular-post)PowerShell.org - Popular Post + +[*PSCustomObject - Cycle Through Hashtable?*](https://powershell.org/forums/topic/pscustomobject-cycle-through-hashtable/) by Swatto on August 1st +Here's an interesting thread that covers pulling data from the VirusTotal website and creating a report. This is great example on how the PowerShell community can pull you through when you're stuck! + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#reddit-rpowershell---most-popular-post)Reddit /r/PowerShell - Most Popular Post + +[*TIL you can launch powershell from explorer*](https://www.reddit.com/r/PowerShell/comments/95kzzn/til_you_can_launch_powershell_from_explorer/) by u/detenshi12 on August 8th +It's always fun to learn little quality-of-life shortcuts and this one is no exception. In predictable Reddit fashion, other users chime in with additional shortcuts and nice-to-knows. Take a look! You'll probably pick up on a cool little trick. + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#media)Media + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#twitter)Twitter + +[*I can't promote it enough. Feel the power of PowerShell. Have fun with it!*](https://twitter.com/pewa2303/status/1025780434934882304) by Patrick Gruenauer on August 4th +Patrick showcases a CLI menu that handles a number of common Active Directory tasks. This is a great example of how a handful of simple PowerShell concepts, combined with a little vision, is all it takes to make a great tool. Looks clean and easy to use? Check. Nostalgia points? Check. The code is freely available on his blog? You betcha! + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180810.md#youtube)Youtube + +[*Power BI PowerShell and the Admin API*](https://www.youtube.com/watch?v=SQ7ufcRayYY) by Adam Saxton from Guy in a Cube on August 7th +If you happen to an admin for Power BI users, you'll want to check this out; Adam takes us on a video tour of the Power BI Management module. Use PowerShell to dig into your workspaces, manage access, and grab reports. There are even wrapper functions for the Power BI REST API! + +Special thanks to Mark Roloff for contributions this week! diff --git a/content/articles/2018/09/_index.md b/content/articles/2018/09/_index.md new file mode 100644 index 000000000..8d4a5a000 --- /dev/null +++ b/content/articles/2018/09/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from September 2018" +description: "PowerShell.org Articles published in September 2018." +--- diff --git a/content/articles/2018/09/getting-feedback-on-powershell-devops-global-summit-proposals/index.md b/content/articles/2018/09/getting-feedback-on-powershell-devops-global-summit-proposals/index.md new file mode 100644 index 000000000..dd3fb49fa --- /dev/null +++ b/content/articles/2018/09/getting-feedback-on-powershell-devops-global-summit-proposals/index.md @@ -0,0 +1,58 @@ +--- +url: /articles/2018-09-01-getting-feedback-on-powershell-devops-global-summit-proposals/ +title: Getting Feedback on PowerShell + DevOps Global Summit Proposals +authors: + - pscookiemonster +date: "2018-09-01T13:46:04+00:00" +categories: + - PowerShell for Admins + - PowerShell Summit +aliases: + - /2018/09/getting-feedback-on-powershell-devops-global-summit-proposals/ +--- + +Hi all! +August is over, and we're about a month out from the close of the [PowerShell + DevOps Global Summit CFP][1]! +We have some seriously awesome sessions coming, but we still need more proposals! I've had a number of questions like _what makes a good CFP?_ and _would this topic work?_. We're going to try something new to see if we can help with this! + + * Do you want feedback on your proposal? Are you curious to see if your peers are interested in a topic? Join the #conferences channel in [powershell.slack.com][2] and ask away! + * Do you want to help other folks with their proposals? To help encourage folks and different topics? Join the #conferences channel in [powershell.slack.com][2] and help out! + +There are two main ways you might get feedback here: + + * In public. Just post your draft proposal or question, and folks will hopefully help! + * In private. Ask the channel if anyone is around for a private discussion. Some folks prefer this, no harm! + +Just keep in mind - if you go the private route, you might end up missing out on feedback from someone with a different and perhaps more helpful perspective. +A number of summit regulars and speakers have offered to help, keep an eye out for them! + + * @Brandon Lundt + * +@cdhunt + + * +@devblackops + + * +@michaeltlombardi + + * @glennsarti + * @gtatelive + * @jb.lewis + * +@ +jeremy.murrah + * @joshcorr + * @pscookiemonster + * +@rjpleau + + * We'll update this if more folks chime in! + +I’d encourage this as your first step in getting feedback on your proposals.  If you have more logistical questions, or really want to get feedback specifically from Missy and me, you can ping content –at- powershell.org and we’ll try to help out. +Lastly, do consider giving a [PSPowerHour lightning demo][3] - this is a low pressure way to show off something fun and useful, and gives the folks evaluating summit proposals some insight into your presentation and prep chops! We'll try to fit these all in before the summit CFP closes. +That's about it! Hope to see some fun ideas and proposal discussions in Slack, and your [proposals][1] (and hopefully sessions) at the summit! + + [1]: https://www.papercall.io/summit2019 + [2]: http://bit.ly/psslack + [3]: https://github.com/PSPowerHour/PSPowerHour diff --git a/content/articles/2018/09/icymi-powershell-week-of-14-september-18/index.md b/content/articles/2018/09/icymi-powershell-week-of-14-september-18/index.md new file mode 100644 index 000000000..7156d59e4 --- /dev/null +++ b/content/articles/2018/09/icymi-powershell-week-of-14-september-18/index.md @@ -0,0 +1,73 @@ +--- +url: /articles/2018-09-14-icymi-powershell-week-of-14-september-18/ +title: "ICYMI: PowerShell Week of 14-September-18" +authors: + - Greg Tate +date: "2018-09-14T15:00:10+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/09/icymi-powershell-week-of-14-september-18/ +--- + +Topics include log file notifications, checking uptime, AWS Lamda support for PowerShell Core, organizing code, and episode 3 of PowerHour! + + + +Special thanks to Brett Bunker, Robin Dadswell, and Mark Roloff for weekly contributions. + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#blogs)Blogs + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#get-log-file-changes)[*Get Log File Changes*](https://www.sconstantinou.com/get-log-file-changes/) + +by Stephanos Constantinou on September 7th +Inspired by a recent post on Reddit, see how Stephanos creates a solution to notify with changes to a log file. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#showing-the-uptime-of-all-windows-servers)[*Showing the Uptime of all Windows Servers*](https://sid-500.com/2018/09/09/powershell-showing-the-uptime-of-all-windows-servers/) + +by Patrick Gruenauer on September 9th +Check out a simple function that provides the uptime of all your servers in the domain! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#amazon-announces-aws-lambda-support-for-powershell-core-60)[*Amazon announces AWS Lambda Support for PowerShell Core 6.0*](https://hub.packtpub.com/amazon-announces-aws-lambda-support-for-powershell-core-6-0/) + +by Melisha Dsouza on September 12th +Exciting news about AWS Lambda PowerShell Core 6.0 Support. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#don-jones-on-everything-youre-doing-wrong-in-powershell)[*Don Jones on Everything You're Doing Wrong in PowerShell*](https://redmondmag.com/articles/2018/09/12/don-jones-qa-on-powershell.aspx) + +by Becky Nagel on September 12th +Here's a short Q&A with Don Jones and Redmond Magazine on guidance for being efficient with PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#windows-administration-with-powershell-3-organizing-your-code)[*Windows Administration with PowerShell #3: Organizing Your Code*](https://www.automox.com/blog/windows-admin-powershell-3) + +by Nicholas Almiron on September 12th +Some small tips and tricks to organization of PowerShell Code + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#forums)Forums + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#powershellorg-challenge---unanswered-post)PowerShell.org Challenge - Unanswered Post + +[*ProcessID Using RunspaceID and Logs*](https://powershell.org/forums/topic/finding-powershell-processid-using-runspaceid-and-logs/) by Deep Droid on September 10th +There's a challenging question on the forums that needs a response. Topic is related to event logging and runspaces. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#reddit-rpowershell---most-popular-post)Reddit /r/PowerShell - Most Popular Post + +[*Give Your Clients SLAPS*](https://www.reddit.com/r/PowerShell/comments/9dj5dn/give_your_clients_slaps_a_colleague_of_mine_wrote/) by u/Pietovic on September 7th +Check out a scripted approach to a serverless local administrator password solution using Azure Functions, Azure Key Vault, and Microsoft Intune. This solution was published by John Seerdeen on his [*blog*](https://www.srdn.io/2018/09/serverless-laps-powered-by-microsoft-intune-azure-functions-and-azure-key-vault/). + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#media)Media + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#twitter)Twitter + +[*If you know PowerShell, you just became more valuable*](https://twitter.com/jsnover/status/1039711699933118464) by Jeffrey Snover on September 11th +Jeffey's tweet links to Amazon's announcement to support PowerShell Core with AWS Lamda! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180914.md#youtube)Youtube + +[*The PowerShell PowerHour_Episode 3*](https://www.youtube.com/watch?v=sRdoCrA-PnU&feature=push-lbss&attr_tag=zjw54qjfXcesPhjF%3A6) by PSPowerHour on September 13th +The third edition of PowerHour includes lightning demos on troubleshooting basics, managing Docker in Visual Studio Code, customizing a Windows desktop, infrastructure testing, WPFBot3000, advanced BurntToast notifications, and a walkthrough on the PSLogging class. diff --git a/content/articles/2018/09/icymi-powershell-week-of-21-september-18/index.md b/content/articles/2018/09/icymi-powershell-week-of-21-september-18/index.md new file mode 100644 index 000000000..f4a81f223 --- /dev/null +++ b/content/articles/2018/09/icymi-powershell-week-of-21-september-18/index.md @@ -0,0 +1,70 @@ +--- +url: /articles/2018-09-21-icymi-powershell-week-of-21-september-18/ +title: "ICYMI: PowerShell Week of 21-September-18" +authors: + - Greg Tate +date: "2018-09-21T15:00:35+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/09/icymi-powershell-week-of-21-september-18/ +--- + +Topics Azure Pipelines, PowerShell Core 6.1, PowerShell on Arch Linux, and the PSPowerHour. + + + +Special thanks to our PowerShell.org volunteers Mark Roloff, Brett Bunker, and Robin Dadswell. +If you'd like to become part of the ICYMI team then send a request to willa@powershell.org. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180921.md#announcing-powershell-core-61)[*Announcing PowerShell Core 6.1*](https://blogs.msdn.microsoft.com/powershell/2018/09/13/announcing-powershell-core-6-1/) + +by Joey Aiello on September 13th +The latest major release of PowerShell introduces compatibility with in-box modules for Windows PowerShell v5, performance improvements, and markdown cmdlets. PSCustomObject now has a count property and supports the Where and ForEach methods. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180921.md#powershell--arch-linux--awesome)[*Powershell + Arch Linux = AWESOME!*](https://ephos.github.io/posts/2018-9-17-Pwsh-ArchLinux) + +by Rob Pleau on September 17th +Arch Linux is known as being for geeks that love to tinker (or masochists, depending on who you ask) and now you can tinker with Core on Arch. Rob has put together a great guide on getting the cross-platform PowerShell Core to run on his favorite distribution. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180921.md#fun-with-select-object-and-proxycommand)[*Fun with Select-Object (and ProxyCommand)*](https://blog.iisreset.me/fun-with-select-object-and-proxycommand/) + +by Mathias Jessen on September 19th +Suppose there's a cmdlet that just doesn't quite work the way you need. If only you could tweak the behavior a little... Or a lot. Mathias wrote a great introduction to using .NET's ProxyCommand class to create customized versions of PowerShell cmdlets. This opens the door to some pretty cool and fun possibilities. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180921.md#converting-a-powershell-project-to-use-azure-devops-pipelines)[*Converting a PowerShell Project to use Azure DevOps Pipelines*](https://www.powershellmagazine.com/2018/09/20/converting-a-powershell-project-to-use-azure-devops-pipelines/) + +by Daniel Scott-Raynsford on September 20th +Learn how to hook up your GitHub account to an Azure DevOps organization and use Azure Pipelines for PowerShell Core projects across Windows, Linux, and macOS! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180921.md#powershell-building-modules-with-the-azure-devops-pipeline)[*PowerShell: Building Modules with the Azure DevOps Pipeline*](https://kevinmarquette.github.io/2018-09-20-Powershell-Building-Modules-with-the-Azure-DevOps-Pipeline/) + +by Kevin Marquette on September 20th +Kevin provides a separate take on using Azure DevOps Pipelines to enable continuous integration with GitHub. + +###### [*PSWinReporting - Monitoring Active Directory Events and Sending it to Email, Microsoft Teams, Slack, SQL*](https://www.reddit.com/r/PowerShell/comments/9gcvgk/pswinreporting_monitoring_active_directory_events/) + +by u/MadBoyEvo on September 17th +The top post on Reddit this week covers an interesting module that notifies you for event changes in Active Directory, such as adding users to Domain Admins. There are options for recording these events in Microsoft Teams and SQL! + +###### [*Get a Free T-shirt!*](https://twitter.com/TylerLeonhardt/status/1042421922317852672) + +by @TylerLeonhardt on September 19th +Submit a pull request to a Microsoft repo in October and get a limited edition t-shirt! + +###### [*PSPowerHour Episode 4*](https://www.youtube.com/watch?v=UTuwnDtaTWQ) + +by PSPowerHour on September 19th +The fourth edition of PSPowerHour includes the following topics: + + * ProxyCommands (Joel Bennett) + * PSReflect-Functions (Jared Atkinson) + * VaporShell (Nate Ferrell) + * Implicit remoting (Stepehn Valdinger) + * Docker Compose (Fancisco Navarro) + * VSTS Extensions (Thomas Rayner). diff --git a/content/articles/2018/09/icymi-powershell-week-of-28-september-18/index.md b/content/articles/2018/09/icymi-powershell-week-of-28-september-18/index.md new file mode 100644 index 000000000..5ba227a30 --- /dev/null +++ b/content/articles/2018/09/icymi-powershell-week-of-28-september-18/index.md @@ -0,0 +1,64 @@ +--- +url: /articles/2018-09-28-icymi-powershell-week-of-28-september-18/ +title: "ICYMI: PowerShell Week of 28-September-18" +authors: + - Greg Tate +date: "2018-09-28T15:00:54+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/09/icymi-powershell-week-of-28-september-18/ +--- + +Topics include PowerShell Rest API on AWS Lamda, web applications in PowerShell, using PowerBI to show DB restores, input validation in functions, PowerShell command history, and the Unplugged session at Ignite with Jeffrey Snover and Jason Helmick. + + + +Special thanks to Mark Roloff and Brett Bunker for pulling it all together this week! + +##### [*Creating a PowerShell REST API (AWS)*](https://aws.amazon.com/blogs/developer/creating-a-powershell-rest-api/) + +by Norm Johanson on September 23rd +In case you missed it, support for PowerShell Core on AWS Lambda is now a thing. And to help showcase how cool of a thing that is, this article from the AWS Developer Blog walks us through setting up a PowerShell REST API with the Amazon API Gateway. + +##### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190928.md#building-a-simple-form-using-powershell-polaris-module)[*Building a simple form using PowerShell Polaris module*](https://chen.about-powershell.com/2018/09/building-a-simple-form-using-powershell-polaris-module/) + +by Chen V on September 23rd +If I were a betting man, I'd wager you didn't know there's a web framework for PowerShell (multiple, actually). Chen's blog gives us a brief demonstration of how you can leverage Polaris to build simple web applications in PowerShell. + +##### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190928.md#automate-your-sql-server-restore-tests-with-powershell-dbatools-and-powerbi)[*Automate your SQL Server Restore Tests with PowerShell, dbatools and PowerBI*](https://marcosfreccia.com/2018/09/24/automate-sql-server-restore-tests/) + +by Marcos Freccia on September 24th +If you've been in this gig for any time at all, you know the importance of backups. Especially tested backups. You do test them, right? Well, Marcos here does. In fact, he even has a PowerBI dashboard to show him the results of his database restores at a glance. Read on to see how he sets it all up, along with a link to the GitHub repo. + +##### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190928.md#how-to-validate-input-in-powershell-functions-part-1)[*How To Validate Input in PowerShell Functions, Part 1*](https://redmondmag.com/articles/2018/09/25/validate-input-in-powershell-functions-1.aspx) + +by Brien Posey on September 25th +It happens to everyone. You spend all afternoon working on that script, test it, hand it off, and Gomer Pyle finds a way to make it break by passing in data that you didn't think of. What you need is input validation. Brien kicks things off with an introduction to _ValidateSet_ to help you get a handle on exactly what data people can supply your scripts. + +##### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190928.md#previous-command-history-in-powershell)[*Previous Command History in PowerShell*](http://woshub.com/powershell-commands-history/) + +by Windows OS Hub on September 27th +Prior to Windows PowerShell v5, if you closed the PowerShell window, then you lost your command history. Well, this behavior has now changed. Learn how the built-in PSReadline module provides a persistent command line history across PowerShell instances. + +##### [*PowerShell.org Challenge - Unanswered Post*](https://powershell.org/forums/topic/automatically-save-outlook-message-2/) + +Wayne needs help on understanding how to parameterize an email address in his script. Please jump in and offer some help! + +##### [*New Module PUDAdminCenterPrototype*](https://www.reddit.com/r/PowerShell/comments/9hqu76/new_module_pudadmincenterprototype_a_universal/) + +Based on the popular PowerShell Universal Dashboard, /u/fourierswager brings us a new tool to assist with remotely managing WIndows systems in a web-based GUI. Restart systems, RDP in, and view all manner of information about what's happening on your hosts. This is a pretty sweet project with lots of potential! + +##### [*Introducing the 'Fluxor' PowerShell Module!*](https://twitter.com/vmkdaily/status/1043358314321661952) + +by @vmkdaily on September 21st +Now here's a cool thing for you vSphere admins. Mike Nist introduces a new cross-platform module, Fluxor, for collecting stats from vSphere, which can then be exported to InfluxDB for nice visualizations of your environment. + +##### [*PowerShell Unplugged with Jeffrey Snover and Jason Helmick*](https://www.youtube.com/watch?v=DPICqEiz3m4) + +If you weren't fortunate enough to attend Microsoft Ignite this year, be sure to set aside some time to watch the PowerShell Unplugged session. Jeffrey and Jason discuss the current state of PowerShell, including some of its cool new features and awesome community. diff --git a/content/articles/2018/09/icymi-powershell-week-of-7-september-18/index.md b/content/articles/2018/09/icymi-powershell-week-of-7-september-18/index.md new file mode 100644 index 000000000..041e4abc3 --- /dev/null +++ b/content/articles/2018/09/icymi-powershell-week-of-7-september-18/index.md @@ -0,0 +1,76 @@ +--- +url: /articles/2018-09-07-icymi-powershell-week-of-7-september-18/ +title: "ICYMI: PowerShell Week of 7-September-18" +authors: + - Greg Tate +date: "2018-09-07T15:00:27+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/09/icymi-powershell-week-of-7-september-18/ +--- + +Topics include Azure Stack Infrastructure Backup, SharePoint Online Module Availability in PSGallery, Script for Updating Sysinternals Tools, Understanding While Loops, and the PowerShell Explorer module. + + + + + + Special thanks to Mark Roloff, Brett Bunker, and Robin Dadswell for weekly contributions. + + +## Blogs + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#configure-azure-stack-automatic-infrastructure-backup-with-powershell)[*Configure Azure Stack Automatic Infrastructure Backup With PowerShell*](https://charbelnemnom.com/2018/09/configure-azure-stack-infrastructure-backup-with-powershell-azurestack-azurestackdevkit-asdk/) + +by Charbel Nemnom on September 3rd +For those of you working with Azure Stack, Charbel has released a handy little script that you can use to configure your infrastructue backup settings from PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#announcing-availability-of-sharepoint-online-management-shell-from-powershell-gallery)[Announcing availability of SharePoint Online Management Shell from PowerShell Gallery](https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/Announcing-availability-of-SharePoint-Online-Management-Shell/ba-p/241370#M2644) + +by Vesa Juvonen (Microsoft) on September 3rd +Announcent, installation instructions and FAQ on SPO Management Shell. + +###### [*Downlaod Newest Sysinternals Tools*](https://powershell.anovelidea.org/powershell/download-newest-sysinternals/) + +by Dave Carroll on September 3rd +Need a quick way to download or update the Sysinternals tools? Dave provides a couple of nicely-written functions that will get the job done! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#powershell-while-loops-explained-for-absolute-beginners)[*PowerShell While loops explained for Absolute Beginners*](https://winsysblog.com/2018/09/powershell-while-loops-explained-for-absolute-beginners.html) + +by Dan Franciscus on September 4th +If while loops have ever been a fuzzy area for you, Dan wrote a great article about how they work using slot machines as an analogy. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#managing-files-over-sftp-with-powershell)[*Managing Files over SFTP with PowerShell*](https://www.business.com/articles/manage-files-over-sftp-powershell/) + +by Adam Bertran on September 5th +Learn how to use a few of the the SFTP commands from the posh-ssh module. + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#forums)Forums + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#powershellorg-challenge---unanswered-post)PowerShell.org Challenge - Unanswered Post + +[*Lack or reporting in DSC*](https://powershell.org/forums/topic/lack-or-reporting-in-dsc/) by Charlie on September 4th +Charlie has a question on the capability of Azure Automation DSC. Can you provide any guidance? + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#reddit-rpowershell---most-popular-post)Reddit /r/PowerShell - Most Popular Post + +[*Help your users help the helpdesk. Introducing Show-Systeminfo.*](https://www.reddit.com/r/PowerShell/comments/9dlnw8/help_your_users_help_the_helpdesk_introducing/) by u/premtech on September 6th +The top post of the week covers a tool that the Help Desk can use to diagnose issues and cature important PC information. + +## [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#media)Media + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#twitter)Twitter + +[*PowerShell Explorer*](https://twitter.com/adamdriscoll/status/1037531528455020544) by Adam Driscoll on September 5th +Check out an interesting tool that shows information about the PowerShell environment on your machine! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20180907.md#youtube)Youtube + +[*Creating Dynamic Commands with DatabaseReporter PowerShell Module*](https://www.youtube.com/watch?v=RBzgQ5pVLms&t=2527s) by Rohn Edwards on September 5th +Rohn's presentation at the Mississippi PowerShell User Group covers a framework that lets you write advanced PowerShell function to interact with databases. diff --git a/content/articles/2018/10/_index.md b/content/articles/2018/10/_index.md new file mode 100644 index 000000000..ddc3a39aa --- /dev/null +++ b/content/articles/2018/10/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from October 2018" +description: "PowerShell.org Articles published in October 2018." +--- diff --git a/content/articles/2018/10/free-beta-ebook-powershell-org-history-of-a-community/index.md b/content/articles/2018/10/free-beta-ebook-powershell-org-history-of-a-community/index.md new file mode 100644 index 000000000..dcde0720a --- /dev/null +++ b/content/articles/2018/10/free-beta-ebook-powershell-org-history-of-a-community/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2018-10-04-free-beta-ebook-powershell-org-history-of-a-community/ +title: "Free (beta) eBook: PowerShell.org, History of a Community" +authors: + - Don Jones +date: "2018-10-04T14:45:03+00:00" +categories: + - Books +legacy_featured_image: /wp-content/uploads/2018/10/cover-small.png +aliases: + - /2018/10/free-beta-ebook-powershell-org-history-of-a-community/ +--- + +Now available in "preview" is a new ebook, _**PowerShell.org: History of a Community. **_ +There's still a bit left to write, but this short (under 30 pages at the moment) ebook is designed to share some of what went into the building of PowerShell.org, the PowerShell Summit, and so on. The goal is to help those who may become involved with the organization in the future understand some of the decisions that have been made to this point. It's also intended as a collection of "lessons learned" about building and nurturing a technology community in general, for anyone who might be interested. It digs a bit into the organization's path to being a nonprofit, as well. +Grab the book now from . I suggest allowing Leanpub to email you when it's updated, as it assuredly will be. +I'd very much like _your_ feedback. Ask questions - what about the organization and its past or future isn't currently covered? What questions does the book leave you with after you read it? What could make it more helpful, or clearer? Feel free to drop comments right here on this post, or use the book's "Email the author(s)" link on Leanpub to send an email. diff --git a/content/articles/2018/10/icymi-powershell-week-of-12-october-2018/index.md b/content/articles/2018/10/icymi-powershell-week-of-12-october-2018/index.md new file mode 100644 index 000000000..735ee8d9f --- /dev/null +++ b/content/articles/2018/10/icymi-powershell-week-of-12-october-2018/index.md @@ -0,0 +1,54 @@ +--- +url: /articles/2018-10-12-icymi-powershell-week-of-12-october-2018/ +title: "ICYMI: PowerShell Week of 12-October-2018" +authors: + - Greg Tate +date: "2018-10-12T15:00:00+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/10/icymi-powershell-week-of-12-october-2018/ +--- + +Topics include the Switch statement, Chocolatey Fest, Graph API, HTML disk reports, auditing Office 365 document sharing and Teams usage. + + + +Special thanks to Mark Roloff for his creative writing and Robin Dadswell for content curation! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181012.md#powershell-switch)[*PowerShell Switch*](https://www.sconstantinou.com/powershell-switch/) + +by Stephanos Constantinou on October 8th +There are times when we've got a large number of conditions to check against and having more than a few _if_ statements gets pretty ugly real fast. Enter the _switch_ statement. Stephanos has written a nice rundown of how to use it when evaluating lots of conditions, as well as some of its more advanced features. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181012.md#my-chocolateyfest-winops-conference-experience)[*My Chocolateyfest (WinOps) Conference Experience*](https://winsysblog.com/2018/10/my-chocolateyfest-winops-conference-experience.html) + +by Dan Franciscus on October 9th +In a more community-meta post, Dan shares his thoughts after attending this year's Chocolatey Fest; that's a conference broadly focused around everything Windows automation. I didn't know much about the event before, but Dan's candid perspective of the experience has convinced me to mark my calendar for hopefully attending next year. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181012.md#getting-started-with-graph-api-and-powershell)[*Getting started with Graph API and PowerShell*](https://alexholmeset.blog/2018/10/10/getting-started-with-graph-api-and-powershell/) + +by Alexander Holmeset on October 10th +We love playing with cool new APIs, and while the Graph API isn't exactly new, to a lot of people it probably is. It can also open the door to a lot of cross-service automation for those of us working in the Azure/O365 world. Alexander has published a great introduction to Graph, how to explore it, and how to get started using it in your PowerShell scripts. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181012.md#creating-colorful-html-disk-reports-with-powershell)[*Creating Colorful HTML Disk Reports with PowerShell*](https://jdhitsolutions.com/blog/powershell/6130/creating-colorful-html-disk-reports-with-powershell/) + +by Jeffrey Hicks on October 11th +One of the best ways to expand your scripting knowledge is to read someone else's work. Jeff has offered an opportunity to do that right here. In this post, he found an old script, and decided to dust it off and add some new features to it. The result is a clean and professional looking HTML report. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181012.md#a-quick-start-guide-for-powershell-i-made-for-work)[*A quick start guide for powershell I made for work*](https://old.reddit.com/r/PowerShell/comments/9mpf9u/a_quick_start_guide_for_powershell_i_made_for_work) + +There doesn't seem to ever be any real shortage of newcomers to PowerShell, so it's no surprise that new beginner material is always popping up. Reddit user /u/tamtt has thrown together a pretty nice guide to getting started, with quick explanations and examples of many foundational concepts. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181012.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/gerbrandvdweg/status/1049928642015444992) + +Stepping back from highlighting just popular media for a moment, we felt that this interaction served as a nice reminder of how accessible help in the community is. One of our team members also got burned by this error in a PowerShell module, but the maintainers were able to point to a quick and easy solution. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181012.md#youtube-getting-stuff-done-solving-office-365-problems-with-powershell)[*Youtube: Getting Stuff Done: Solving Office 365 Problems with PowerShell*](https://www.youtube.com/watch?v=yUY2_fwKmoY) + +This 20-minute session from Ignite covers a number of useful tips around auditing document sharing, Teams usage, and license management. Topics include using the Office 365 audit log to discover who's creating new Office 365 Groups, analyzing document sharing habits, understanding guest user activity, investigating Teams compliance, managing license features, and finding **pwned** mailboxes. diff --git a/content/articles/2018/10/icymi-powershell-week-of-19-october-2018/index.md b/content/articles/2018/10/icymi-powershell-week-of-19-october-2018/index.md new file mode 100644 index 000000000..1aa656e65 --- /dev/null +++ b/content/articles/2018/10/icymi-powershell-week-of-19-october-2018/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2018-10-19-icymi-powershell-week-of-19-october-2018/ +title: "ICYMI: PowerShell Week of 19-October-2018" +authors: + - Mark Roloff +date: "2018-10-19T15:00:49+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/10/icymi-powershell-week-of-19-october-2018/ +--- + +Topics include creating PSObjects, a deep dive on arrays, controlling your Raspberry Pi with the IoT module, and more... + + + +Brought to you by your ICYMI team: Brett Bunker, Robin Dadswell, Mark Roloff, and Greg Tate. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181019.md#input-object-subproperty-tip)[*Input Object Subproperty Tip*](https://andrewpla.github.io/Input-Object-Subproperty-Tip/) + +by Andrew Pla on October 14th +Suppose the output of one function isn't quite in the format needed for the next in a pipeline. You may think of calculated properties with _Select-Object_ but if these are custom functions, you can cut the middle-man out entirely. Andrew developed a simple and clever solution for this by using the _param_ block of receiving function. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181019.md#ps-core---numeric-literals)[*PS Core - Numeric Literals*](https://vexx32.github.io/PS-Core-Numeric-Literals/) + +by Joel Francis on October 14th +If you don't know Joel, he's a helpful regular in the community and a PS Core contributor. In his first blog, he discusses PowerShell's somewhat dodgy support for large numeric literals and introduces newly implemented ones to address that shortcoming. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181019.md#everything-you-wanted-to-know-about-arrays)[*Everything you wanted to know about arrays*](https://kevinmarquette.github.io/2018-10-15-Powershell-arrays-Everything-you-wanted-to-know/) + +by Kevin Marquette on October 15th +Time to jump down the rabbit hole and dive deep into PowerShell's arrays. Building them, using them with operators, the various types, and more. Like his much touted guide to hashtables, Kevin's guide to arrays belongs in your bookmarks folder. Like, now. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181019.md#4-ways-to-create-powershell-objects)[*4 Ways to Create PowerShell Objects*](https://ridicurious.com/2018/10/15/4-ways-to-create-powershell-objects/) + +by Prateek Singh on October 15th +Everyone's got their favorite way to create objects. You probably know a few different ones, too. Today, I learned one I didn't know. Prateek's latest blog shows you 4 ways to create custom objects in PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181019.md#running-ping-tests)[*Running Ping tests*](https://richardspowershellblog.wordpress.com/2018/10/16/running-ping-tests/) + +by Richard Siddaway on October 16th +In prior posts over the weekend, Richard walked us through gathering some general network info for troubleshooting and using Pester for ping tests. Now, he shows us how to take those prior scripts and wrap them up in a control script to glue all of the functionality together. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181019.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/9oz1ie/powershell_is_the_4_fastest_growing_language_of/) + +The PowerShell-verse is growing, and perhaps one of the best indicators of this is that it is officially the fourth fastest growing language on GitHub. It's a little crazy to think that a language made for Windows automation would pull off something like that but here we are; cross-platform, open-sourced, making waves. And it's pretty cool. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181019.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/DirectoryRanger/status/1051072287699558401) + +This is a fun find. @DirectoryRanger pointed us to a PowerShell script written by Mike Loss. The script, Grouper, analyzes the XML from Get-GPOReport to identify security holes in policy settings. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181019.md#youtube-anzpsug---october-2018)[*Youtube: ANZPSUG - October 2018*](https://www.youtube.com/watch?v=5m9PnWBF1vI) + +This month's Australia and New Zealand PowerShell User Group featured guest speaker Daniel Silva. In a departure from the typical admin-related use-cases, Daniel gives a great presentation on using PowerShell Core with the Raspberry Pi, including the IoT module. diff --git a/content/articles/2018/10/icymi-powershell-week-of-26-october-2018/index.md b/content/articles/2018/10/icymi-powershell-week-of-26-october-2018/index.md new file mode 100644 index 000000000..f6866ca21 --- /dev/null +++ b/content/articles/2018/10/icymi-powershell-week-of-26-october-2018/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2018-10-26-icymi-powershell-week-of-26-october-2018/ +title: "ICYMI: PowerShell Week of 26-October-2018" +authors: + - Mark Roloff +date: "2018-10-26T15:00:06+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/10/icymi-powershell-week-of-26-october-2018/ +--- + +Topics include plenty of AST, using the WindowsCompatibility module, Azure Cloud Shell updates, and many more... + + + +Brought to you by your ICYMI team: Brett Bunker, Robin Dadswell, Mark Roloff, and Greg Tate. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181026.md#introducing-windowscompatibility-for-powershell-core)[*Introducing WindowsCompatibility for PowerShell Core*](https://pwsh.nl/2018/10/19/introducing-windowscompatibility-for-powershell-core/) + +by Gerbrand van der Weg on October 19th +The **WindowsCompatibility** module, which is in Release Candidate right now, aims to ease the transition from Windows PowerShell to PowerShell Core by using PSRemoting to allow you to run your Windows PowerShell modules seamlessly through PowerShell Core. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181026.md#so-you-think-you-can-parse)[*So You Think You Can Parse?*](https://blog.iisreset.me/so-you-think-you-can-parse/) + +by Mathias Jessen on October 22nd +We love deep dives into little niche problems. You always end up learning interesting nuggets that, even if never used, are just plain cool. Mathias has thrown together a pretty rad demonstration of utilizing PowerShell's parser to interpret a string of mixed data types. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181026.md#powershell-module-sysinfo)[*PowerShell Module SysInfo*](https://www.sconstantinou.com/powershell-module-sysinfo/) + +by Stephanos Constantinou on October 24th +This is a pretty handy little module that wraps around CIM cmdlets, making it easier for you to grab hardware details about your computer. In this post, Stephanos gives us a brief tour of his handiwork. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181026.md#office-365-mailbox-forwarding-rules-report-using-powershell)[*Office 365 Mailbox Forwarding Rules Report using PowerShell*](https://www.lazyexchangeadmin.com/2018/10/office-365-mailbox-forwarding-rules.html) + +by June Castillote on October 20th +If you have a need to ever audit email forwarding and redirect rules in your Exchange Online environment, June has got something nice for you. This script will email a report on those rules found to help you get a handle on exactly where people in your organization are forwarding things. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181026.md#learn-about-the-powershell-abstract-syntax-tree-ast--part-3)[*Learn about the PowerShell Abstract Syntax Tree (AST) – Part 3*](https://mikefrobbins.com/2018/10/25/learn-about-the-powershell-abstract-syntax-tree-ast-part-3/) + +by Mike Robbins on October 25th +Mike is up to the third part in his series to learn AST. In this one, he focuses on showing us how to recursively query the AST to find a list of all variables used in a function. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181026.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/9pcu1f/anyone_have_move_in_scripts/) + +Who doesn't enjoy getting a new computer? If you've got a lot of tools and particular configurations, probably you. New hardware is nice but, man, can it be a pain to remember every little thing we need to reinstall. /u/Southpaw018 has a nice solution to this; script it with PowerShell! Check this thread out to see plenty of examples of others' "move-in" scripts. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181026.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/DarrylvdPeijl/status/1054698290850267136) + +If you like to log the start and stop times for your scripts, or see how long it takes your intern to fetch a fresh cup of coffee, you may want to use .NET's Stopwatch class. @DarrylvdPeijl discovered this useful tool and shares a quick screenshot demo. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181026.md#youtube-powershell-in-azure-cloud-shell-ga)[*Youtube: PowerShell in Azure Cloud Shell GA*](https://www.youtube.com/watch?v=1LT4cjeP-28) + +Scott Hanselman and Danny Maertens discuss the GA release of Azure Cloud Shell, now running PS Core 6.1 on Linux. New cmdlets, seamless switching between Bash and PowerShell, a teaser for integrated Exchange Online, and more great features. diff --git a/content/articles/2018/10/icymi-powershell-week-of-5-october-2018/index.md b/content/articles/2018/10/icymi-powershell-week-of-5-october-2018/index.md new file mode 100644 index 000000000..d8f35cf7a --- /dev/null +++ b/content/articles/2018/10/icymi-powershell-week-of-5-october-2018/index.md @@ -0,0 +1,67 @@ +--- +url: /articles/2018-10-05-icymi-powershell-week-of-5-october-2018/ +title: "ICYMI: PowerShell Week of 5-October-2018" +authors: + - Greg Tate +date: "2018-10-05T15:00:38+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/10/icymi-powershell-week-of-5-october-2018/ +--- + +Topics include the **Az** module, PowerShell module design, PowerShell & Puppet, Hacktoberfest, SQL Server backups, and a PowerShell session from Ignite. + + + +Special thanks to Mark Roloff, Robin Dadswell, and Brett Bunker for contributions this week. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181005.md#announcing-new-module-az)[_Announcing New Module 'Az'_][1] + +by Mark Cowlishaw on Friday, September 28th +The Az module is intended as a replacmeent for AzureRM and will become the new standard Azure PowerShell commands. The final feature update to AzureRM will be in December 2018. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181005.md#learning-about-the-powershell-abstract-syntax-tree-ast)[*Learning about the PowerShell Abstract Syntax Tree (AST)*](https://mikefrobbins.com/2018/09/28/learning-about-the-powershell-abstract-syntax-tree-ast/) + +by Mike Robbins on Friday, September 28th +Mike is on a journey to piece together many separate script files into a single PSM1 file. Rather than rely on potentially complicated regex or string parsing to do the job, he opts for exploring how with PowerShell's far more interesting Abstract Syntax Tree. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181005.md#executing-puppet-tasks-with-powershell-via-the-puppet-orchestrator-api)[*Executing Puppet Tasks with PowerShell via the Puppet Orchestrator API*](https://www.joeypiccola.com/puppet-tasks-via-powershell/) + +by Joey Piccola on Sunday, September 30th +Interested in using PowerShell to manage Puppet? Learn how with a quick tutorial on using the Puppet Orchestrator API with **Invoke-WebRequest**. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181005.md#i-need-you-hacktoberfest)[*I Need You! #Hacktoberfest*](https://king.geek.nz/2018/10/02/hacktoberfest-2018/) + +by Josh King on Monday, October 1st +Hacktoberfest is officially in full swing and there are tons of open-source projects out there looking for some love. Josh King, creator of the BurntToast module, has a project board set up with tasks to complete for the module's next release. If you're looking for a chance to contribute more openly to the PowerShell community or would just like a project for the month's event, stop in and take a look. + +###### [*Does it Loop? Foreach Experiences with an Emtpy Variable*](https://patrickwahlmueller.wordpress.com/2018/10/03/does-it-loop-foreach-experiences-with-empty-variable/) + +by Patrick Wahlmüller on October 3rd +Patrick shares an important lesson to consider when using the **foreach** scripting construct:  initialize your variables! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181005.md#ms-sql-db-backup-and-restore-with-powershell)[*MS SQL DB Backup and Restore with PowerShell*](https://www.scriptinglibrary.com/languages/powershell/ms-sql-db-backup-and-restore-with-powershell/) + +by Pauolo Frigo on October 4th +Find out how easy it is to automate your SQL Server backup jobs using the **SQLServer** PowerShell module. Hint: It's a lot easier than point-and-clicking your way through SQL Server Management Studio! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181005.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/9lcrmk/breaking_change_with_powershell_jobs_and_the/) + +For those of you deploying Windows 10 1809, watch out for a change in behavior when calling **cmd.exe** within a scriptblock using **start-job**. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181005.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/JanEgilRing/status/1048069179222495233) + +Major increase in coverage for PowerShell Core running on Windows 10 1809 compared to 1803! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181005.md#youtube-powershell-cross-platform-scripting-and-ai-infused-automation)[*Youtube: PowerShell Cross-Platform Scripting and AI-Infused Automation*](https://www.youtube.com/watch?v=1EVHChiqZOw) + +By Jeffrey Snover on September 30th +Demo-rich show that looks at the evolution of PowerShell as the de facto automation scripting tool across Windows and Linux platforms as presented by the father of PowerShell, Jeffrey Snover. Check out the ability for Visual Studio Code to run PowerShell inside of CloudShell. + + [1]: https://github.com/Azure/azure-powershell/blob/preview/documentation/announcing-az-module.md diff --git a/content/articles/2018/10/powershell-and-devops-global-summit-2019-post-cfp-thoughts/index.md b/content/articles/2018/10/powershell-and-devops-global-summit-2019-post-cfp-thoughts/index.md new file mode 100644 index 000000000..a6a3f7b9f --- /dev/null +++ b/content/articles/2018/10/powershell-and-devops-global-summit-2019-post-cfp-thoughts/index.md @@ -0,0 +1,29 @@ +--- +url: /articles/2018-10-22-powershell-and-devops-global-summit-2019-post-cfp-thoughts/ +title: PowerShell and DevOps Global Summit 2019 – Post-CFP Thoughts +authors: + - Missy Januszko +date: "2018-10-22T08:00:49+00:00" +categories: + - PowerShell for Admins +aliases: + - /2018/10/powershell-and-devops-global-summit-2019-post-cfp-thoughts/ +--- + +Now that Warren Frame and I have finally come up for air after reviewing all the submissions for the 2019 PowerShell and DevOps Global Summit, we wanted to send a great big THANK YOU!!! to all who submitted.  You all definitely made our job challenging and we think we have a fabulous lineup for this year’s show! + + + +Many of you have asked for feedback regarding your submissions, and while we would love to send everyone individualized feedback - with the sheer number of submissions, that just isn’t feasible.  + + + + +But we did want to share some thoughts that we had while reviewing the submissions and talk about what made a submission stand out to us.  We also wanted to provide some statistics on the submissions, so you know what topics were uber-popular and which weren’t (spoiler: “Release Pipeline” won hands down for most submissions).  Warren has provided a great writeup on how we were able to narrow the field down from 200 to around 60 here:  +[http://ramblingcookiemonster.github.io/Summit-CFP/](http://ramblingcookiemonster.github.io/Summit-CFP/) + + + +There are still numerous ways to share your ideas and stories at Summit.  Sign up for the lightning demos, or a side session, or share your war stories at your lunch table.  Many good ideas for sessions start as casual conversation or an “I wish I had a way to do ‘X’” … and definitely, submit again for next year!  And don’t forget to register starting November 1st + +! diff --git a/content/articles/2018/10/powershell-devops-summit-2019-update-agenda-online/index.md b/content/articles/2018/10/powershell-devops-summit-2019-update-agenda-online/index.md new file mode 100644 index 000000000..4caa517be --- /dev/null +++ b/content/articles/2018/10/powershell-devops-summit-2019-update-agenda-online/index.md @@ -0,0 +1,27 @@ +--- +url: /articles/2018-10-12-powershell-devops-summit-2019-update-agenda-online/ +title: PowerShell + DevOps Summit 2019 Update – Agenda Online! +authors: + - Don Jones +date: "2018-10-12T10:01:47+00:00" +categories: + - PowerShell Summit +legacy_featured_image: /wp-content/uploads/2018/08/Full-Logo-No-year.png +aliases: + - /2018/10/powershell-devops-summit-2019-update-agenda-online/ +--- + +Missy Januszko and Warren Frame, our Co-Directors of Summit Content for 2019, have finally completed the arduous task of combing through the dozens of topic submissions from all of you in the community! The Official Agenda is now online, and is linked [from the main Summit page][1]! + + + +You'll find some other key resources on that page as well, including: + + * Information about our new entry-level OnRamp hands-on track + * Links to our new Official App (highly recommended) + * The Summiteer Manual, freshly updated with key facts for 2019 + +Registration opens 1-November-2018 (links are on the main page along with everything else), and we look forward to seeing you! + + + [1]: http://powershellsummit.org diff --git a/content/articles/2018/10/powershell-org-site-maintenance-today/index.md b/content/articles/2018/10/powershell-org-site-maintenance-today/index.md new file mode 100644 index 000000000..175cf2d41 --- /dev/null +++ b/content/articles/2018/10/powershell-org-site-maintenance-today/index.md @@ -0,0 +1,16 @@ +--- +url: /articles/2018-10-19-powershell-org-site-maintenance-today/ +title: PowerShell.org Site Maintenance Today +authors: + - Don Jones +date: "2018-10-19T14:27:59+00:00" +categories: + - Announcements +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_703607812.jpg +aliases: + - /2018/10/powershell-org-site-maintenance-today/ +--- + +PowerShell.org will be undergoing upgrading and maintenance on Friday and Saturday. We'll leave the site open, as Articles and Forums should remain accessible, but the site may look a little rough around the edges at times. +The site does use some pretty aggressive caching, so if you're visiting throughout the day, use a force-reload (Shift+Refresh or whatever in your browser) to pull a fresh set of pages as we work. +We hope to have everything done by Sunday morning. diff --git a/content/articles/2018/10/powershell-org-site-status-update/index.md b/content/articles/2018/10/powershell-org-site-status-update/index.md new file mode 100644 index 000000000..dc69b0979 --- /dev/null +++ b/content/articles/2018/10/powershell-org-site-status-update/index.md @@ -0,0 +1,34 @@ +--- +url: /articles/2018-10-24-powershell-org-site-status-update/ +title: PowerShell.org Site Status Update +authors: + - Don Jones +date: "2018-10-24T17:45:55+00:00" +categories: + - Announcements +legacy_featured_image: /wp-content/uploads/2018/10/shutterstock_144607415.jpg +aliases: + - /2018/10/powershell-org-site-status-update/ +--- + +_This post will be periodically updated as needed, so feel free to check back._ +Our site upgrade and re-theme is going well, and I wanted to outline some of the major changes and current issues. If you're encountering any lingering issues, please drop a comment; rather than replying, I'll update the main article. + + + +The **new theme** is largely successful and is fully implemented. We've seen some issues with the pop-up login/register dialog for some users; you can always visit + if you need a non-pop-up login experience. +The **new user profile and directory system** is online. This includes a Member Directory, and a [Verified Profile Program][2]. Please read about the program very carefully if you intend to participate. We've unfortunately seen a lot of profiles missing photos, including photos of someone's dog, or using unacceptable Display Names. Not being in the Program does not impact your ability to use the rest of the site, but if you want to be in the Member Directory, you'll need to comply with the rules. +The new user profile system also, by default, **was sending clear-text passwords** for new registrations and password changes. That is demonstrably a bad idea, and I've finally figured out how to fix it. The problem was an interaction between about nine plugins and the core WordPress code, which took a hot minute (whilst dodging justifiably angry emails) to unravel. +If you are requesting a **password reset** and not getting the email, your spam filters are blocking it. Sorry. Emails of that type are commonly sent as phishing attempts, and so that's why they get blocked. You're welcome to create a new account, if you wish. +**Forums notifications** were known to be not-working and are now verified to be working. If you're not getting them, check the spam filters. +The specialized **forums views, **including things like "Topics with No Replies," are borked. That's on my list. +From the **authentication** front, we do not yet support 2FA. We're speaking with the user manager module developer about adding that, as whatever we do needs to be compatible with that module. We'll aim for Authy/Authenticator first, and then move on to working on physical tokens like yubikey. It is too early to place requests for Your Favorite 2FA to be supported. +**UPDATE: **Also in the **authentication** front, I've been looking into re-adding social logins (Twitter, etc) to the site. At this time I'm pausing that effort. While I grok the convenience, there are some serious downsides, like a total inability to influence whatever the social services decide to impose in terms of rules from moment to moment. Removing one of those services, once you rely on it, is damn near impossible, and I'm not necessarily keen to give companies like Facebook any more hooks into people's lives. We're instead going to try and focus deeply on enabling 2FA within the site, to provide a more secure login experience right here. Seeing how Facebook has been using people's mobile phone numbers (provided to FB only to enable 2FA) for ad targeting, I'm just even more distrustful of what they're doing with their login services. The general feeling in the InfoSec community is "don't do social logins to your websites" and that's kind of where I'm at right now. +We've added support for **Ranks & Badges **on the site, which display in your [profile][3] and are attached to site activity. Open to suggestions on how to expand that program, and know that the current badge graphs are drafts until we have some proper ones made by someone talented. Volunteers welcome. +I think that's it. If I'm missing anything, ask in the Comments, and I'll update above. + + + + [2]: https://powershell.org/members/our-verified-profile-program/ + [3]: /profile diff --git a/content/articles/2018/10/the-new-powershell-org-logo-and-ebooks-and-swag/index.md b/content/articles/2018/10/the-new-powershell-org-logo-and-ebooks-and-swag/index.md new file mode 100644 index 000000000..7fc1c8587 --- /dev/null +++ b/content/articles/2018/10/the-new-powershell-org-logo-and-ebooks-and-swag/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2018-10-29-the-new-powershell-org-logo-and-ebooks-and-swag/ +title: The New PowerShell.org Logo (and eBooks! and Swag!) +authors: + - Don Jones +date: "2018-10-29T14:37:27+00:00" +categories: + - Announcements +legacy_featured_image: /wp-content/uploads/2018/10/website-featured-image-for-announcements.png +aliases: + - /2018/10/the-new-powershell-org-logo-and-ebooks-and-swag/ +--- + +If you check out our free eBook, [_PowerShell.org: History of a Community_][1], you'll see both the original PowerShell.org logo and our second, "Metro-fied" take on it. The first one is probably easy to make sense of, with the PowerShell logo superimposed over the Earth, suggesting a global community. The "Metro" version go a bit abstract, since the Earth became just a simple round circle. +What both logos lacked was a clear commitment to a diverse community of _people. _Part of the recent re-launch of PowerShell.org included our Community Member Directory, with [specific rules of inclusion][3] that are designed to emphasize the _people_ in our community, and to highlight their contributions and accomplishments. +With that in mind, today we're launching a new logo for PowerShell.org. It's designed to clearly communicate "people working together around PowerShell," and it stands as a more unique identifier for this website and the community it supports. We're also launching a page to help people understand how they can [contribute to the broader community][4], using PowerShell.org as a platform for their efforts. +In celebration of our new logo, we're offering an exclusive, **limited-time** selection of cool merchandise. All proceeds benefit our nonprofit programs, and be aware that these items will only be available for a few months. You can [visit our Zazzle Store now][5] to start selecting your items. Pay close attention, because many of them offer customization options for style, color, size, and so on. We're aware that a few of the prices are a bit on the higher side, but that's the nature of these one-of-a-kind, print-on-demand items, as we can't financially or logistically bulk-order, warehouse, and fulfill items ourselves. Keep in mind that Zazzle routinely offers significant discount codes, too - watch their site for those. And yes, some of the items _are_ a little silly, but we couldn't resist putting the logo on stuff like Oreo cookies, cake pops, and wrapping paper. +We're also re-branding [our library of free eBooks][6] with all-new covers featuring the new logo. If you've not checked them out, this is a great time to download the entire collection (any money you choose to pay supports our nonprofit programs, and you're welcome to pay nothing). If you've already got them, go ahead and re-download these great new covers. Don't forget to let Leanpub notify you via email of updates, as these are "living books," open-source hosted in GitHub, and we do periodically make corrections and updates. +We hope you'll join us in spreading the word, and welcome to the new PowerShell.org! + + [1]: https://leanpub.com/powershellorghistoryofacommunity + [3]: https://powershell.org/members/our-verified-profile-program/ + [4]: https://powershell.org/contributing/ + [5]: https://www.zazzle.com/powershellorg/products + [6]: https://leanpub.com/u/devopscollective diff --git a/content/articles/2018/11/_index.md b/content/articles/2018/11/_index.md new file mode 100644 index 000000000..01c9e6b21 --- /dev/null +++ b/content/articles/2018/11/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from November 2018" +description: "PowerShell.org Articles published in November 2018." +--- diff --git a/content/articles/2018/11/icymi-powershell-week-of-16-november-2018/index.md b/content/articles/2018/11/icymi-powershell-week-of-16-november-2018/index.md new file mode 100644 index 000000000..47c1511e4 --- /dev/null +++ b/content/articles/2018/11/icymi-powershell-week-of-16-november-2018/index.md @@ -0,0 +1,55 @@ +--- +url: /articles/2018-11-16-icymi-powershell-week-of-16-november-2018/ +title: "ICYMI: PowerShell Week of 16-November-2018" +authors: + - Mark Roloff +date: "2018-11-16T16:00:24+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/11/icymi-powershell-week-of-16-november-2018/ +--- + +Topics include pie charts, flattening your modules, selecting unique items, the WindowsCompatibility module goes GA, and more... + + + +Curated by Brett Bunker, Robin Dadswell, and Mark Roloff + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181116.md#convert-powershell-output-into-a-pie-chart)[*Convert PowerShell output into a pie chart*](https://4sysops.com/archives/convert-powershell-csv-output-into-a-pie-chart/) + +by Graham Beer on November 9th +Piping information to CSVs and turning it into pretty tables or charts with Excel seems like a staple of admin work sometimes. Lucky for us, Graham has worked out a function for quickly creating pie charts from PowerShell data. Display them right away for a quick visualization or save them to file for use later, and if you dig into the function a little you might find a way to generate even more chart types. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181116.md#azure-blueprint)[*Azure Blueprint*](https://agazoth.github.io/blogpost/2018/11/11/Azure-Blueprint.html) + +by Axel Anderson on November 11th +Blueprint is an interesting new tool in the world of Azure; it pretty much works to orchestrate policies, roles, ARM templates, and resource groups across multiple subscriptions. Axel's blog post gives a brief introduction to this service before jumping into a module that he wrote for applying a little automation around it. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181116.md#create-custom-reports-using-the-updated-teams-powershell-module)[*Create custom reports using the updated Teams PowerShell module*](https://practical365.com/teams-2/create-custom-reports-using-the-updated-teams-powershell-module/) + +by Steve Goodman on November 12th +Teams is soon replacing Skype for Business and it's PowerShell module is slowly coming into its own. A recent update added in a little extra functionality and Steve decided to explore that by showing us a handy script to assist with auditing Teams in a tenant. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181116.md#powershell--single-psm1-file-versus-multi-file-modules)[*PowerShell – Single PSM1 file versus multi-file modules*](https://evotec.xyz/powershell-single-psm1-file-versus-multi-file-modules/) + +by Przemyslaw Klys on November 16th +Flattening your modules into a single file before deploying to the PowerShell Gallery seems to be trending a bit. Przemyslaw tested the idea on one of his modules that previously took 12 seconds to load. Now? Less than 1 second. To call that impressive would be putting it mildly. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181116.md#announcing-general-availability-of-the-windows-compatibility-module-100)[*Announcing General Availability of the Windows Compatibility Module 1.0.0*](https://blogs.msdn.microsoft.com/powershell/2018/11/15/announcing-general-availability-of-the-windows-compatibility-module-1-0-0/) + +by Steve Lee on November 15th +After a lot of hard work, the WindowsCompatibility module is now GA! This bad boy (_slaps module_) will let PS Core access Windows PS modules via implicit remoting. If a lack of native support for your favorite modules in Core has been holding you back, give this a shot. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181116.md#reddit-rpowershell---popular-weekly-post)[*Reddit /r/PowerShell - Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/9w61lj/lord_i_feel_dumb_i_just_want_to_compare_two) + +Help with CSVs is a pretty common request, so this seems fitting. Want to know how to compare values from two columns? Look no further for a simple solution, plus some other tidbits on working with CSVs. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181116.md#youtube-5-ways-to-select-unique-items-in-powershell)[*Youtube: 5 ways to select Unique items in PowerShell*](https://www.youtube.com/watch?v=hEfXck_NAX4) + +Prateek Singh has put out a nice and short video to demonstrate 5 ways that you can select unique items in PowerShell. All of us learned at least one new technique from this, so hopefully you do too. diff --git a/content/articles/2018/11/icymi-powershell-week-of-2-november-2018/index.md b/content/articles/2018/11/icymi-powershell-week-of-2-november-2018/index.md new file mode 100644 index 000000000..6e54e02df --- /dev/null +++ b/content/articles/2018/11/icymi-powershell-week-of-2-november-2018/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2018-11-02-icymi-powershell-week-of-2-november-2018/ +title: "ICYMI: PowerShell Week of 2-November-2018" +authors: + - Mark Roloff +date: "2018-11-02T15:00:16+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/11/icymi-powershell-week-of-2-november-2018/ +--- + +Topics include analyzing your scripts for code injection, configuring DSC with SQL, presentations from PSConfAsia, and more... + + + +Intertubes scoured for content by Brett Bunker, Robin Dadswell, and Mark Roloff. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181102.md#how-to-secure-powershell-remoting-in-a-windows-domain)[*How To Secure PowerShell Remoting In A Windows Domain*](https://www.networkadm.in/securing-powershell/) + +by Mike Kanakos on October 27th +Digging into the security considerations surrounding PowerShell remoting can be a bit daunting. Fortunate for the rest of us, Mike was recently tasked with defining PowerShell's security posture in his organization and has written about his findings in this blog post. This is a great place to dive in for anyone looking to learn about it. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181102.md#using-powershell-injection-hunter-at-scale)[*Using PowerShell Injection Hunter at Scale*](https://p0w3rsh3ll.wordpress.com/2018/10/30/using-powershell-injection-hunter-at-scale/) + +by Emin Atac on October 30th +Malicious code injection probably isn't something many of us think about often, but we probably should. The InjectionHunter module can help you spot these in your scripts, but only if you pass them in as a ScriptBlockAst. Emin wanted something more accessible. This is a pretty cool write up about how Emin wrote a function to extend the inputs for this module, making it easier to analyze your code for these particular issues. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181102.md#powershell-script-module-design-building-tools-to-automate-the-process)[*PowerShell Script Module Design: Building Tools to Automate the Process*](https://mikefrobbins.com/2018/11/01/powershell-script-module-design-building-tools-to-automate-the-process/) + +by Mike Robbins on November 1st +Mike is up to the fourth part in his series on PowerShell's AST. In this post, he pulls together knowledge from the previous three to build an advanced function which can pull in code from a variety of sources and output an AST from it. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181102.md#dsc-pull-server-reloaded-part-3-pre-create-the-pull-server-database)[*DSC Pull Server reloaded. Part 3: Pre-create the Pull Server Database*](https://bgelens.nl/dsc-pull-server-reloaded-part-3-precreate-pull-server-database/) + +by Ben Gelens on November 1st +Windows Server is introducing the capability for a SQL-backed DSC pull server, and Ben has been working on a series to explore that. In his third post, he dives into configuring an Azure SQL instance, setting up the pull server, and registering a node. All with PowerShell! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181102.md#how-to-use-internal-powershell-gallery-app)[*How to use Internal PowerShell Gallery App*](https://practical365.com/blog/how-to-use-internal-powershell-gallery-app/?utm_content=79231324) + +by Daler Sayfiddinov on November 2nd +Here's an interesting way to store and distribute your scripts internally. Daler shows us how to use a SharePoint list as a backend repository with PowerApps acting as a frontend. Search, filtering, and the ability to submit new scripts all built-in. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181102.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/9sxkzh/i_just_want_to_thank_the_whole_community_for/?st=jnzk5fyx&sh=44be7d78) + +/u/WhatTheHomePod just wants to spread a little love and appreciation by thanking /r/PowerShell for being such an awesome community that helped them to get started learning this great tool. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181102.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/cyberhayden/status/1057098123720310785) + +If cloud security is part of your jam, Azure ATP can now help you monitor for remote PowerShell execution. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181102.md#livestream-manage-your-heterogeneous-environments-with-powershell-core)[*LiveStream: Manage Your Heterogeneous Environments with PowerShell Core*](https://livestream.com/gaelcolas/PSConfAsia/videos/182706737) + +At this year's PSConfAsia, Steve Lee gave a great presentation that shows off some of the great cross-platform features that he and his team have brought to PS Core. diff --git a/content/articles/2018/11/icymi-powershell-week-of-22-november-2018/index.md b/content/articles/2018/11/icymi-powershell-week-of-22-november-2018/index.md new file mode 100644 index 000000000..e0043cfdf --- /dev/null +++ b/content/articles/2018/11/icymi-powershell-week-of-22-november-2018/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2018-11-23-icymi-powershell-week-of-22-november-2018/ +title: "ICYMI: PowerShell Week of 22-November-2018" +authors: + - Mark Roloff +date: "2018-11-23T16:00:01+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/11/icymi-powershell-week-of-22-november-2018/ +--- + +Topics include pizza and wildcards, getting involved with the community, a new PowerHour, making your scripts pipeline friendly, and more... + + + +Content assembled between mouthfuls of turkey by Brett Bunker, Robin Dadswell, and Mark Roloff + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181122.md#adding-pipeline-support-to-your-scripts)[*Adding Pipeline Support to Your Scripts!*](https://steviecoaster.github.io/Pipelines-in-scripts/) + +by Stephen Valdinger on November 18th +Stephen debuted his PS blog just last week and he's already racking up some great content. In this post, he lays out what you need to know to get your functions working in a pipeline, a central component in building great tools for the shell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181122.md#controlling-guest-access-in-office365-with-ms-graph-and-powershell)[*Controlling Guest access in Office365 with MS Graph and Powershell*](https://automativity.com/Controlling-Guest-access-in-Office365-with-MS-Graph-and-Powershell/) + +by Alex Asplund on November 18th +The job was supposed to be simple; just enable guest access on some groups in O365. Follow Alex on a journey of discovering that the documented method is incorrect, he needs to make his own tools to get the job done, and then finally implements an automated solution on a schedule. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181122.md#powershell--working-with-format-table-in-verbose-debug-output-streams)[*PowerShell – Working with Format-Table in Verbose, Debug, Output Streams*](https://evotec.xyz/powershell-working-with-format-table-in-verbose-debug-output-streams/) + +by Przemyslaw Klys on November 18th +There's a lot of flexibility in PowerShell for displaying information in nice tables or lists, but it all revolves around your standard output. _Format-Stream_ is a fancy little function that Przemyslaw made, which can allow you to easily apply nicer formatting to other data streams, such as Verbose and Debug. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181122.md#10-ways-anyone-can-easily-contribute-to-the-powershell-community)[*10 Ways Anyone Can Easily Contribute to the PowerShell Community*](https://www.networkadm.in/how-anyone-can-easily-contribute-to-the-powershell-community/) + +by Mike Kanakos on November 18th +Have you been bitten by the desire to start contributing to the community? It can be an intimidating step. Thankfully, guys like Mike are here to offer some great ideas for taking that first plunge. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181122.md#powershell-wildcard-in-pizza-shop)[*Powershell wildcard in pizza shop???*](http://powershell.damiangarbus.pl/powershell-wildcard-in-pizza-shop/) + +by Damian Garbus on November 19th +For a while now, Damian has been helping newcomers to PS get acquianted with the basics using concise visual lessons. This week, a demonstration on how to use wildcards. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181122.md#reddit-rpowershell---popular-weekly-post)[*Reddit /r/PowerShell - Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/9xs6hj/anyone_else_not_in_it_and_still_use_powershell/) + +Admins and the like might dominate the population of PowerShell users, but it's not just for us. Retail, banking, finance, and even a chef are all examples of people chiming in with their experiences in this thread. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181122.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/nohwnd/status/1065304273376997376) + +Pester's companion module, Assert, gets a little love with a new update this week. This was the first we'd heard of a function that could easily determine equivalence between two objects, so it's definitely on our list to check out on Monday. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181122.md#youtube-powerhour-005-2018-11-20)[*Youtube: PowerHour 005: 2018-11-20*](https://www.youtube.com/watch?v=kt-nrHbgTns) + +This month's PS PowerHour had a round of great demos ranging from using PS Core in AWS Lambda, getting started with ChatOps in MS Teams, and reason why you should consider sharing your experiences with the community. diff --git a/content/articles/2018/11/icymi-powershell-week-of-30-november-2018/index.md b/content/articles/2018/11/icymi-powershell-week-of-30-november-2018/index.md new file mode 100644 index 000000000..36729e368 --- /dev/null +++ b/content/articles/2018/11/icymi-powershell-week-of-30-november-2018/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2018-11-30-icymi-powershell-week-of-30-november-2018/ +title: "ICYMI: PowerShell Week of 30-November-2018" +authors: + - Mark Roloff +date: "2018-11-30T16:00:22+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/11/icymi-powershell-week-of-30-november-2018/ +--- + +Of note this week... Managing credentials in your scripts, PowerShell's constrained language mode, why you should absolutely reinvent the wheel, and more. + + + +Content curated by Brett Bunker, Robin Dadswell, and Mark Roloff + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181130.md#powershell-constrained-language-mode-and-the-dot-source-operator)[*PowerShell Constrained Language mode and the Dot-Source Operator*](https://blogs.msdn.microsoft.com/powershell/2018/11/26/powershell-constrained-language-mode-and-the-dot-source-operator/) + +by Paul Higinbotham on November 26th +Deep dive blogs are some of our favorite things to read and Paul, from the PowerShell team, has a good one for everybody this week. He takes us on a brief exploration of how PowerShell handles dot-sourced scripts when you're using Constrained Language mode. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181130.md#learning-powershell-by-reinventing-the-wheel)[*Learning PowerShell by Reinventing the Wheel*](https://winsysblog.com/2018/11/learning-powershell-by-reinventing-the-wheel.html) + +by Dan Franciscus on November 26th +Finding projects to advance your knowledge can be a little rough sometimes. But you don't need to be novel. Dan offers some rock solid advice as to why you _should_ attempt to build things that others already have. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181130.md#using-credentials-in-production-scripts)[*Using Credentials In Production Scripts*](https://www.randomizedharmony.com/blog/2018/11/25/using-credentials-in-production-scripts) + +by Paul DeArment on November 25th +Securely handling the storage of credentials for a scheduled script to use is something thats frequently asked about. Paul has wrote a couple of functions to help make this easier for people with the additional requirement of hiding the username. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181130.md#importing-enriched-data-into-azure-data-lake-storage-adls-with-powershell)[*Importing Enriched Data into Azure Data Lake Storage (ADLS) with PowerShell*](https://www.mssqltips.com/sqlservertip/5811/importing-enriched-data-into-azure-data-lake-storage-adls-with-powershell/) + +by John Miner on November 26th +If your work is more on the SQL-side, or you're just inquisitive, this is a great write-up on using PowerShell to migrate the migration of data up to Azure Data Lake. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181130.md#creating-dynamic-sets-for-validateset)[*Creating Dynamic Sets for ValidateSet*](https://vexx32.github.io/2018/11/29/Dynamic-ValidateSet/) + +by Joel Sallow on November 29th +Thinking of using a dynamic parameter in your next function? Joel might have an interesting and much simpler alternative for you to look at. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181130.md#reddit-rpowershell---popular-weekly-post)[*Reddit /r/PowerShell - Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/9zyrg1/jottey_a_notepad_written_in_powershell) + +This week, /u/dolorfox shared a cool little notepad app that they wrote in PowerShell. Say hello to Jottey! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181130.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/guyrleech/status/1067049809398382593) + +@guyrleech shows off a pretty cool little script that adds a checksum option to your file explorer's right-click context menu. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181130.md#youtube-mvpdays---essential-powershell-for-office-365)[*Youtube: MVPDays - Essential PowerShell for Office 365*](https://www.youtube.com/watch?v=KzA9n4NSals) + +Vlad Catrinescu demonstrats some essential PowerShell for anyone working with O365. The icing on this particular cake is that he uses the new AzureAD module, which is replacing the MSOnline module. diff --git a/content/articles/2018/11/icymi-powershell-week-of-9-november-2018/index.md b/content/articles/2018/11/icymi-powershell-week-of-9-november-2018/index.md new file mode 100644 index 000000000..e974fe7fd --- /dev/null +++ b/content/articles/2018/11/icymi-powershell-week-of-9-november-2018/index.md @@ -0,0 +1,58 @@ +--- +url: /articles/2018-11-09-icymi-powershell-week-of-9-november-2018/ +title: "ICYMI: PowerShell Week of 9-November-2018" +authors: + - Mark Roloff +date: "2018-11-09T15:00:49+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/11/icymi-powershell-week-of-9-november-2018/ +--- + +# ICYMI: PowerShell Week of 9-November-2018 + +Topics include replacing the MDT final summary, Azure Functions, dumping wifi passwords from your computer, code golf, and more... +Curated by Brett Bunker, Robin Dadswell, and Mark Roloff. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181109.md#transferring-functions-with-psremoting)[*Transferring Functions with PSRemoting*](https://vexx32.github.io/2018/11/02/Transferring-Functions) + +by Joel Francis on November 2nd +What do you do when you're in a remote session and you need to bring a custom function over? You could write it up on the remote side but that sounds a lot like work. What about passing it through as an object? Joel shows us how we can earn some street cred at the water cooler with these cool tricks. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181109.md#create-your-own-mdt-final-summary-wizard-with-powershell)[*Create your own MDT Final Summary wizard with PowerShell*](http://www.systanddeploy.com/2018/11/create-your-own-mdt-final-summary.html) + +by Damien Van Robaeys on November 5th +When's the last time you thought of PowerShell and MDT together? Kicking off a series, Damien demonstrates how we can replace that boring final summary with a jazzed-up PowerShell one. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181109.md#creating-an-azure-sql-database-with-powershell)[*Creating an Azure SQL Database with PowerShell*](https://mcpmag.com/articles/2018/11/06/azure-sql-database-with-powershell.aspx) + +by Adam Bertram on November 6th +If you sometimes find yourself in need of a database and don't have an instance on hand, or maybe you just want to show how quick and easy it is to stand one up in Azure, Adam's got you covered. Using just three cmdlets, you can have a SQL database in the cloud ready to go faster than a finance intern locking their AD account after a password change. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181109.md#an-azure-powershell-trigger-function-for-mac-address-vendor--manufacturer-lookup)[*An Azure PowerShell Trigger Function for MAC Address Vendor / Manufacturer Lookup*](https://blog.darrenjrobinson.com/an-azure-powershell-trigger-function-for-mac-address-vendor-manufacturer-lookup/) + +by Darren Robinson on November 6th +Darren is working on an IoT project that requires looking up vendor names from MAC addresses. In this post, he details his approach to creating a list of vendors easily consumable by PowerShell, plus setting up an Azure Function to handle querying this list with a REST API. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181109.md#get-known-wifi-networks-passwords-powershell)[*Get Known Wifi Networks Passwords PowerShell*](https://itfordummies.net/2018/11/05/get-known-wifi-networks-passwords-powershell/) + +by Emmanuel Demillière on November 5th +If you're running a Windows machine, it's exceedingly easy to retrieve the passwords for any remembered wireless networks. Whether you're pen-testing or you just forgot the password and somebody needs it, Emmanuel has written up a nice PowerShell function that wraps around the _netsh_ command to give you a nice collection of objects containing network names and their passwords. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181109.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://old.reddit.com/r/PowerShell/comments/9u2ynr/shortest_script_challenge_make_a_maze/) + +For all you code golf fans, the PowerShell subreddit hosts occasional "Shortest Script Challenges" that always bring out some interesting solutions. The latest is no exception. Browse through to see the various methods people used to randomly generate mazes. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181109.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/IISResetMe/status/1060164938822500352) + +Mathias Jessen has made a handy little tool for folks that have a need to consume Event Logs with PowerShell. His function will take your event log records and convert them into easy-to-work with objects. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181109.md#youtube---socal-powershell-advanced-functions)[*YouTube - SoCal PowerShell: Advanced Functions*](https://youtu.be/3gDa5xQynZA?t=1740) + +Coming from the SoCal PowerShell user group this week, Kevin Marquette gives a presentation on advanced functions. This is great material to familiarize yourself with if you're looking to take your functions up a notch or two. diff --git a/content/articles/2018/12/_index.md b/content/articles/2018/12/_index.md new file mode 100644 index 000000000..c63593f12 --- /dev/null +++ b/content/articles/2018/12/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from December 2018" +description: "PowerShell.org Articles published in December 2018." +--- diff --git a/content/articles/2018/12/icymi-powershell-week-of-07-december-2018/index.md b/content/articles/2018/12/icymi-powershell-week-of-07-december-2018/index.md new file mode 100644 index 000000000..ae15faac2 --- /dev/null +++ b/content/articles/2018/12/icymi-powershell-week-of-07-december-2018/index.md @@ -0,0 +1,56 @@ +--- +url: /articles/2018-12-07-icymi-powershell-week-of-07-december-2018/ +title: "ICYMI: PowerShell Week of 07-December-2018" +authors: + - Mark Roloff +date: "2018-12-07T16:00:05+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/12/icymi-powershell-week-of-07-december-2018/ +--- + +Topics include watching Bitcoin plummet in the shell, getting maintenance plan info out of SQL, setting up automated access to AWS, and more... +Content curated by Brett Bunker, Robin Dadswell, and Mark Roloff + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181207.md#friday-fun-with-timely-powershell-prompts)[*Friday Fun With Timely PowerShell Prompts*](https://jdhitsolutions.com/blog/powershell/6240/friday-fun-with-timely-powershell-prompts/) + +by Jeff Hicks on Novermber 30th +Like furnishing a home, decorating your work desk, or building a wardrobe, customizing your shell experience is as much a matter of utility as it is aesthetics. Jeff brings has a nice introduction to changing the default prompt, which will help you open the doors to all manner of fun. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181207.md#visualizing-historical-data-of-top-cryptocurrency-with-powershell)[*Visualizing Historical data of Top CryptoCurrency with PowerShell*](https://ridicurious.com/2018/12/03/visualizing-historical-data-of-top-cryptocurrency-with-powershell/) + +by Prateek Singh on December 3rd +Even if you don't dabble in cryptocurrencies, you could easily adapt Prateek's new blog to other uses. He demonstrates how his _Graphical_ module can easily take data points to create colorful graphs in your console. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181207.md#getting-details-from-a-maintenance-plan-using-powershell)[*Getting Details from a Maintenance Plan using PowerShell*](https://nocolumnname.blog/2018/12/04/getting-details-from-a-maintenance-plan-using-powershell/) + +by Shane O'Neill on December 4th +Clicking through a GUI is so last decade. Shane combines his knowledge of SQL with PowerShell to create a function for retreiving maintenance plan details from the comfort of his shell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181207.md#powershell-module-to-read-directory-contents-and-store-in-a-sql-server-table)[*PowerShell Module to Read Directory Contents and Store in a SQL Server Table*](https://www.mssqltips.com/sqlservertip/5802/powershell-module-to-read-directory-contents-and-store-in-a-sql-server-table/) + +by Nisarg Upadhyay on December 4th +Nisarg shows us how easy it is to insert data into SQL using PowerShell, but the icing on the cake for us was calling his script from T-SQL to accomplish this. The more you know! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181207.md#working-with-aws-credentials-using-powershell)[*Working with AWS credentials using PowerShell*](https://4sysops.com/archives/working-with-aws-credentials-using-powershell/) + +by Graham Beer on December 4th +For automated access to AWS from PowerShell, there's some hoops that you'll need to jump through. Graham has an easy to follow write-up to help get you going. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181207.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/a1u5ln/install_all_windows_updates_on_the_first_round/) + +Time for some good ole fashioned script sharing. u/jcholder has leveraged PDQ Deploy & Inventory with PowerShell to handle all Windows updates in a single push. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181207.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/nohwnd/status/1069591949282299904) + +This was an interesting thread that touches on the long road that seemingly small projects can take to becoming officially adopted by a community. Jakub Jares shares some of Pester's history and how it is currently maintained. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181207.md#youtube-socal-powershell-pester-in-action)[*Youtube: SoCal PowerShell: Pester in Action*](https://www.youtube.com/watch?v=2vooOG3mmoY) + +Fresh from the SoCal PowerShell UserGroup, Kevin Marquette gives an hour and a half long dive into a myriad of use-cases for Pester. diff --git a/content/articles/2018/12/icymi-powershell-week-of-14-december-2018/index.md b/content/articles/2018/12/icymi-powershell-week-of-14-december-2018/index.md new file mode 100644 index 000000000..e1782dc33 --- /dev/null +++ b/content/articles/2018/12/icymi-powershell-week-of-14-december-2018/index.md @@ -0,0 +1,52 @@ +--- +url: /articles/2018-12-14-icymi-powershell-week-of-14-december-2018/ +title: "ICYMI: PowerShell Week of 14-December-2018" +authors: + - Mark Roloff +date: "2018-12-14T16:00:59+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/12/icymi-powershell-week-of-14-december-2018/ +--- + +Topics include Advent of Code, talking to Teams with the Graph API, AWS tools in PowerShell, and more... +Content pulled together by Brett Bunker, Robin Dadswell, and Mark Roloff + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181214.md#speed-tweaking-advent-of-code-day-8)[*Speed tweaking Advent of Code Day 8*](https://humanequivalentunit.github.io/Speed-Tweaks-AoC-Day-8/) + +by HumanEquivalentUnit on December 8th +Advent of Code spoilers ahead! This is a fun walk through the thought process of solving some of these code puzzles. Useful if you're stuck on day 8, and still something to learn here if you're just curious. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181214.md#how-to-quickly-test-a-sql-connection-with-powershell)[*How To Quickly Test a SQL Connection with PowerShell*](https://mcpmag.com/articles/2018/12/10/test-sql-connection-with-powershell.aspx) + +by Adam Bertram on December 10th +Testing connections before trying to run a bunch of code can often save you some time and headaches. Adam shows us how to quickly accomplish this with a short function. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181214.md#removing-special-characters-from-utf8-input-for-use-in-email-addresses-or-login-names)[*Removing Special Characters From UTF8 Input For Use In Email Addresses or Login Names*](https://www.lieben.nu/liebensraum/2018/12/removing-special-characters-from-utf8-input-for-use-in-email-addresses-or-login-names/) + +by Jos Lieben on December 11th +I've been bitten by these on a few occassions, so don't be me. Jos has a function to help you convert these tricksey characters and even points to a few other solutions. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181214.md#post-a-microsoftteams-channel-chat-message-from-powershell-using-graph-api)[*Post a #MicrosoftTeams channel chat message from #PowerShell using Graph API*](https://msunified.net/2018/12/12/post-at-microsoftteams-channel-chat-message-from-powershell-using-graph-api/) + +by Ståle Hansen on December 12th +Microsoft's Graph API is getting some updates that make it easier to post to Teams using PowerShell. Ståle has a nice guide to help you get started with this new method. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181214.md#powershell-basics-finding-your-way-in-the-powershell-console)[*PowerShell Basics: Finding Your Way in the PowerShell Console*](https://techcommunity.microsoft.com/t5/ITOps-Talk-Blog/PowerShell-Basics-Finding-Your-Way-in-the-PowerShell-Console/ba-p/300935) + +by Michael Bender on December 13th +PowerShell's discoverability is truly top-notch. By understanding how to use just two cmdlets, Michael demonstrates how easy it is to get a ton of information out of PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181214.md#reddit-rpowershell---popular-weekly-post)[*Reddit /r/PowerShell - Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/a4u4rv/what_is_the_absolute_best_powershell_training) + +The question of what courses or books are great for learning PowerShell comes up _a lot_. Fortunately, the community is always ready to throw some excellent resources out there for the curious. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181214.md#youtube-getting-started-with-the-aws-tools-for-powershell)[*Youtube: Getting Started with the AWS Tools for PowerShell*](https://www.youtube.com/watch?v=W4k0v754sCI) + +For you AWS admins, here's a brief video tour to help you get acquianted with the PowerShell module for AWS. diff --git a/content/articles/2018/12/icymi-powershell-week-of-21-december-2018/index.md b/content/articles/2018/12/icymi-powershell-week-of-21-december-2018/index.md new file mode 100644 index 000000000..83ec04c58 --- /dev/null +++ b/content/articles/2018/12/icymi-powershell-week-of-21-december-2018/index.md @@ -0,0 +1,50 @@ +--- +url: /articles/2018-12-21-icymi-powershell-week-of-21-december-2018/ +title: "ICYMI: PowerShell Week of 21-December-2018" +authors: + - Robin Dadswell +date: "2018-12-21T15:45:38+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2018/12/icymi-powershell-week-of-21-december-2018/ +--- + +Topics include Group-Object, the Azure Module, Windows Forms and Teams membership. + + + +Content pulled together by Brett Bunker, Robin Dadswell, and Mark Roloff + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181221.md#i-love-group-object-and-so-should-you)[I love Group-Object and so should you](https://www.pwsh.site/powershell/2018/12/17/i-love-group-object-and-so-should-you.html) + +by Anthony Allen on December 17th +Getting data and want to do some analysis on it, take a dive into the Group-Object cmdlet and some of it's use cases with Anthony. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181221.md#azure-powershell-az-module-version-10)[Azure PowerShell ‘Az’ Module version 1.0](https://azure.microsoft.com/en-us/blog/azure-powershell-az-module-version-1/) + +by Mark Cowlishaw on December 18th +Find out about big changes for the Azure PowerShell module and guidance on how to move away from the old AzureRM module. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181221.md#windows-forms)[Windows Forms](https://powershell.anovelidea.org/powershell/windows-forms/) + +by Dave Carroll on December 19th +Take an interesting foray into the .Net [System.Windows.Forms] class. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181221.md#using-powershell-to-check-group-or-team-membership)[Using PowerShell to Check Group or Team Membership](https://www.petri.com/powershell-check-group-team-membership) + +by Tony Redmond on December 20th +Probing membership for Office 365 Groups, Teams and Azure AD Groups, making use of the Teams, AzureAD and Exchange PowerShell Modules. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181221.md#reddit-rpowershell---popular-weekly-post)[*Reddit /r/PowerShell - Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/a85r1s/why_outnull/) + +Answers to the question 'Why Out-Null?'. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20181221.md#youtube-pspowerhour-006-2018-12-18)[YouTube: PSPowerHour 006: 2018-12-18](https://youtu.be/iGEFqRLwdzg) + +The 6th PSPowerHour, in which topics include "Assert: Write less Pester tests to cover more code", "Git Rebase: Don't fear the Rebase-r", "Using PowerShell to extend the GUI" and "7 Reasons To Build a Workplace Module" diff --git a/content/articles/2018/12/ticket-sales-update-for-powershell-devops-global-summit-2019/index.md b/content/articles/2018/12/ticket-sales-update-for-powershell-devops-global-summit-2019/index.md new file mode 100644 index 000000000..f7d1fa7ae --- /dev/null +++ b/content/articles/2018/12/ticket-sales-update-for-powershell-devops-global-summit-2019/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2018-12-01-ticket-sales-update-for-powershell-devops-global-summit-2019/ +title: Ticket Sales Update for PowerShell + DevOps Global Summit 2019 +authors: + - Don Jones +date: "2018-12-01T16:22:33+00:00" +categories: + - PowerShell Summit +aliases: + - /2018/12/ticket-sales-update-for-powershell-devops-global-summit-2019/ +--- + +Wanted to offer a brief update on ticket sales for those who may not have purchased already - I know a lot of folks have to wait until 2019. + + + +As of right now, we have 118 regular admission tickets left, which is just a smidge over half our original inventory. However, we also have 58 Alumni tickets remaining. Those are the same price, but they come with some extra thank-you amenities, and they're available to any prior Summiteer who uses the promotional code we sent out earlier this year (sorry if you missed it; that's why we encourage use of a personal email address versus a work one - they're less filter-y and they follow you when you change jobs). At the end of January 2019, any leftover Alumni tickets will go into the main "pool," which will help increase availability a bit. So, all told, we have 176 spots open. +We also have 10 spots in our new, entry-level, hands-on OnRamp track led my myself, Jason Helmick, and Jeffery Hicks. Those will _not_ convert to "standard" inventory, as the main event is already scheduled to be at-capacity. +Some frequently asked questions: +**Is there a waitlist? **There is. Each year, we invariably have a few people who have to bail out at the last minute. If we can fill their space from the waitlist, we'll refund their ticket. The waitlist emails one person at a time and gives them 24 hours to buy a ticket. PLEASE register for the waitlist using an email address you check DAILY. Lots of people miss out because they use a work address, and don't get the notification in time. +**Are sessions recorded? **Please review our Summiteer's Manual / Survival Guide (linked from [powershellsummit.org][1]) for information on recordings. We do not live-stream, and we do not record our Monday general sessions nor the OnRamp track. +**What about hotels? **Please, once you've registered, book in our official room block at the Marriott or Courtyard, because otherwise we have to pay for unused rooms anyway, which could easily put us out of business. The Summit Brochure provides the registration URLs and, if you need to register through some other means, our group codes. Even if you register through a corporate portal, please simply CALL the hotel and ask that they attach your room to our group. That won't change your rate, and will simply credit us for using the rooms we've contracted for. + + [1]: http://powershellsummit.org diff --git a/content/articles/2018/12/welcome-new-and-returning-pshsummit-summiteers/index.md b/content/articles/2018/12/welcome-new-and-returning-pshsummit-summiteers/index.md new file mode 100644 index 000000000..fc09067b1 --- /dev/null +++ b/content/articles/2018/12/welcome-new-and-returning-pshsummit-summiteers/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2018-12-12-welcome-new-and-returning-pshsummit-summiteers/ +title: Welcome, New and Returning @PSHSummit Summiteers! +authors: + - Don Jones +date: "2018-12-12T15:40:16+00:00" +categories: + - PowerShell Summit +legacy_featured_image: /wp-content/uploads/2018/10/PowerShell-Summit-2018.png +aliases: + - /2018/12/welcome-new-and-returning-pshsummit-summiteers/ +--- + +_The following was recently posted in the Slack team for PowerShell + DevOps Global Summit 2018. Yesterday, we invited all current registered Summiteers into the Slack team; if you missed your invitation, please email summit@ (this website's domain name) with your email address (ideally a personal one, not work) and your Eventbrite order number. We'll be happy to re-send the invite._ +Another reminder for all @here - please go to http://leanpub.com/summiteermanual/ and "buy" the book (for $0, of course), and enable the option to have Leanpub notify you via email of updates. That's The Summiteer Manual, and it's our best way to provide a consolidated view of everything that happens at Summit. From understanding how we handle special dietary requests, to understanding what "Iron Scripter" is all about, it's the best way to take advantage of all that goes on. Summit is a \*\*lot\*\* more than just great breakout sessions, but it's very easy to "miss out" on things if you don't know they're available. We update this a lot as we get closer, and will even be including information (and possible discounts) on stuff around the Puget Sound area for early/late arrivals who want to see some sights. A week or two out, it's not even a bad idea to make sure your phone/tablet/laptop has a copy to refer to (Leanpub offers PDF/MOBI/EPUB formats), and some folks even print a copy to bring along. + + + +Especially important: \*\*get the app\*\* (linked from http://powershellsummit.org as well) because that's got the full agenda, including breaking changes, and we can use push notifications to call out important changes on-site. +Finally, \*\*book your hotel\*\* per the instructions in the brochure (again, http://powershellsummit.org), because the sure-fire way to make sure Summit never happens again is to leave us on the financial hook for the 200 rooms at the Marriott and 50 at the Courtyard. +The #summit-events channel is a great place to ask questions and offer answers about the event! This Slack Team is also where @pscookiemonster and @thedevopsdiva usually conduct Lightning Demo signup, and if you've never presented before, Lightning Demos are a \*fantastic\* way to give it a try. It's just a ~5m demo of something cool you've done with PowerShell, and it's one of the most popular blocks in our agenda. You're guaranteed a round of applause from one of the friendliest and most supportive technology communities in existence. diff --git a/content/articles/2018/_index.md b/content/articles/2018/_index.md new file mode 100644 index 000000000..6c1aee4a4 --- /dev/null +++ b/content/articles/2018/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from 2018" +description: "PowerShell.org Articles published in 2018." +--- diff --git a/content/articles/2019-01-04-icymi-powershell-weeks-of-x-mas-4-january-2019.md b/content/articles/2019-01-04-icymi-powershell-weeks-of-x-mas-4-january-2019.md deleted file mode 100644 index b86f1694b..000000000 --- a/content/articles/2019-01-04-icymi-powershell-weeks-of-x-mas-4-january-2019.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: "ICYMI: PowerShell Weeks of X-mas & 4-January-2019" -authors: - - Mark Roloff -date: "2019-01-04T16:00:52+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/01/icymi-powershell-weeks-of-x-mas-4-january-2019/ ---- - -Topics include checking SCCM patch compliance, a little regex, some more AoC, a deep dive into $null, and PowerShell...streaming?... You betcha! -Content pulled together by Brett Bunker, Robin Dadswell, and Mark Roloff -From all of us, we hope you enjoyed your holidays! Our sabbatical is over and things have been understandably quiet the last couple of weeks, so we're adding a little more this week to help make it up to you. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#powershell-everything-you-wanted-to-know-about-null)[*PowerShell: Everything you wanted to know about $null*](https://powershellexplained.com/2018-12-23-Powershell-null-everything-you-wanted-to-know/) - -by Kevin Marquette on December 23rd -Kevin's deep dives deserve their own special place in your bookmarks. Carve out some free time and read on to become a _$null_ expert. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#advent-of-powershell-2018-pt-i)[*Advent of PowerShell 2018, pt I*](https://blog.iisreset.me/advent-of-powershell-pt-i/) - -by Mathias R. Jessen on December 25th -Here's another take on the first two AoC challenges, with some really nice explanations for why you should avoid the += operator in favor of more performant alternatives. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#identifying-and-installing-sccm-client-software-updates-remotely-with-powershell-and-trigger-a-vmware-snapshot-before-remediation--part-1-of-3)[*Identifying and Installing SCCM Client Software Updates Remotely with PowerShell and trigger a VMware Snapshot before Remediation – Part 1 of 3*](https://byteben.com/bb/identifying-and-installing-sccm-client-software-updates-remotely-with-powershell-and-trigger-a-vmware-snapshot-before-remediation-part-1-of-3/) - -by Ben Whitmore on December 28th -In charge of managing patching in your environment? Ben has a great post that dives into using PowerShell to audit patch compliance on SCCM clients. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#teams-module-or-graph-api)[*Teams module or Graph API?*](https://alexholmeset.blog/2018/12/29/teams-module-or-graph-api/) - -by Alexander Holmeset on December 29th -As the Teams module moves along through development, you may wonder when it's appropriate to use the module vs using the Graph API. Alex does a quick comparison to help you see how and where they line up. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#powershell-basics-detecting-if-a-string-ends-with-a-certain-character)[*PowerShell Basics: Detecting if a String Ends with a Certain Character*](https://techcommunity.microsoft.com/t5/ITOps-Talk-Blog/PowerShell-Basics-Detecting-if-a-String-Ends-with-a-Certain/ba-p/307848) - -by Anthony Bartolo on January 2nd -Regex is an elusive beast that plenty of us are probably less acquianted with than we should be. We can correct that by just a little with these examples of using it to check the first or last characters in a string. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#adding-caching-to-your-powershell-scripts)[*Adding caching to your PowerShell scripts*](https://tjaddison.com/2018/12/24/Adding-caching-to-your-PowerShell-scripts) - -by Tim Addison on December 24th -Suppose you've got an expensive function thats needs to be called multiple times. Tim has a clever method for allowing a function to cache its results, thus allowing you to call it repeatedly without going through the initial workload again. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#reddit-rpowershell---most-popular-post)[*Reddit /r/PowerShell - Most Popular Post*](https://www.reddit.com/r/PowerShell/comments/abjl6m/eat_better_in_2018_a_script_to_generate_a_weekly/) - -The applications for PowerShell in a professional environment are legion. But what about at home? And for meal planning? /u/n3rden wrote a script for just that. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#reddit-rpowershell---announcement)[*Reddit /r/PowerShell - Announcement*](https://old.reddit.com/r/PowerShell/comments/a8xtfp/new_powershelllive_switch_channel_will_auto_host/) - -Worth mentioning... If the thought of watching livestreams of PowerShell coding is appealing, look no further. A handful of figures in the community are now on Twitch, which can be a good glimple into the thought-process behind their projects. Also be sure to follow the channel on Twitter [@PowerShellLive](https://twitter.com/PowerShellLive) - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#tweet-of-the-weeks)[*Tweet of the Week(s)*](https://twitter.com/devblackops/status/1078791129967976449) - -From @devblackops, here's a brief sample of using GitHub Actions to run PSScriptAnalyzer on a pull request. This could be useful as a quick litmus test for public or group projects. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#youtube-psdayuk-2018)[*Youtube: PSDay.UK 2018*](https://www.youtube.com/playlist?list=PLLKI4jlvx_96sw_FFic9ybQ-3g0RO2cbD) - -PSDay.UK happened back in October but videos from the event are up on YouTube now. This playlist has a ton of great content that's well worth your time! diff --git a/content/articles/2019-01-11-icymi-powershell-week-of-11-january-2019.md b/content/articles/2019-01-11-icymi-powershell-week-of-11-january-2019.md deleted file mode 100644 index afd31dbf2..000000000 --- a/content/articles/2019-01-11-icymi-powershell-week-of-11-january-2019.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 11-January-2019" -authors: - - Mark Roloff -date: "2019-01-11T16:00:56+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/01/icymi-powershell-week-of-11-january-2019/ ---- - -Topics include posting to Teams, creating bootable USBs, fun with paths, and a new module for Dyn managed DNS. - - - -Content sifted and sorted by Brett Bunker, Robin Dadswell, Mark Roloff, and several cups of questionably roasted Starbucks K-Cups. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190111.md#the-powershell-docs-repo-is-moving)[*The PowerShell-Docs repo is moving*](https://blogs.msdn.microsoft.com/powershell/2019/01/07/the-powershell-docs-repo-is-moving/) - -by Sean Wheeler on January 7th -If you're at all involved in maintaining the official PowerShell documentation, this is a heads up that the repo is being relocated. Take a look at this post from the PS team for details. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190111.md#joining-paths-in-powershell)[*Joining Paths in PowerShell*](https://devblackops.io/joining-paths-in-powershell/) - -by Brandon Olin on January 7th -Brandon has a great new post covering some of the various ways that we can handle constructing paths in PowerShell, and some of the considerations that we should keep in mind when thinking about the portability of our tools. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190111.md#how-to-trigger-incoming-webhooks-in-microsoft-teams-with-powershell)[*How to trigger incoming webhooks in Microsoft Teams with Powershell*](https://www.scriptinglibrary.com/languages/powershell/how-to-trigger-incoming-webhooks-in-microsoft-teams-with-powershell/) - -by Paolo Frigo on January 8th -"Ya know what? I wish I could have more alerts in my inbox," said no one, ever. If you're using Teams, Paolo has a handy post about how you can send automated alerts to it from PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190111.md#introducing-the-poshdyndnsapi-module)[*Introducing the PoShDynDnsApi Module*](https://powershell.anovelidea.org/powershell/module-poshdyndnsapi/) - -by Dave Carrol on January 7th -Should you find yourself using DNS managed by Dyn, you're in luck. There's a module for that now. Or perhaps you just like digging into the code to see how it all works? It's on GitHub, so that's cool. In addition to introducing his module, Dave also covers a few lessons learned during development. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190111.md#create-a-bootable-usb-stick-with-powershell-create-bootableusbstick)[*Create a bootable USB stick with PowerShell (Create-BootableUSBStick)*](https://sid-500.com/2019/01/08/create-a-bootable-usb-stick-with-powershell-create-bootableusbstick/) - -by Patrick Gruenauer on January 8th -A sometimes overlooked application of PowerShell is that it can handily wrap classic cmdline tools. This handy function will tackle creating your boot sticks with some modern razzmatazz. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190111.md#powershell--devops-global-summit-2019)[*PowerShell + DevOps Global Summit 2019*](https://powershell.org/summit/) - -If you're still on the fence about joining us for Summit this year, now is a good time to sign up. Tickets to this fantastic line-up of speakers are beginning to get scarce. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190111.md#reddit-rpowershell---popular-weekly-post)[*Reddit /r/PowerShell - Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/acm9j2/tip_how_to_check_on_the_progress_of_an_already) - -On the chance that you're still working with the ISE, /u/omers has a handy tip to help you check your position in a loop without breaking. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190111.md#youtube-azposh-make-your-transition-from-powershell-ise-to-visual)[*Youtube: AZPosh: Make Your Transition from PowerShell ISE to Visual Studio Code Painless*](https://www.youtube.com/watch?v=TJfWgcag6Q4) - -Are you still working in the ISE? Keep hearing about this VS Code thing but just haven't looked at it yet? From the Arizona PowerShell Users Group, Timothy Warner has a great presentation this week to help you make the transition to the new editor of choice for PowerShell. diff --git a/content/articles/2019-01-17-powershell-devops-global-summit-cancellation-and-waitlist-procedure.md b/content/articles/2019-01-17-powershell-devops-global-summit-cancellation-and-waitlist-procedure.md deleted file mode 100644 index 037c0ebed..000000000 --- a/content/articles/2019-01-17-powershell-devops-global-summit-cancellation-and-waitlist-procedure.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: PowerShell + DevOps Global Summit Cancellation and Waitlist Procedure -authors: - - Don Jones -date: "2019-01-17T14:18:40+00:00" -categories: - - PowerShell Summit -aliases: - - /2019/01/powershell-devops-global-summit-cancellation-and-waitlist-procedure/ ---- - -As Summit nears a record sellout (there are 30 tickets remaining as I write this) I want to review our cancellation and waitlist policies and procedures. -After we formally sell out, Eventbrite will start accepting waitlist entries. Use a personal email address that you check regularly; corporate email systems tend to eat the waitlist notifications as spam. If we're able to offer a spot to the waitlist, it'll happen during the week, usually in the morning (US time), and you'll have 24 hours to respond by purchasing a ticket. -Anyone with a ticket can transfer it to someone else. Whoever did the registration needs to simply return to Eventbrite and edit the attendee information. So if you can't go, but someone else in your company can, that's how you do that. You can also email summit@ for assistance. We let this happen until roughly mid-April, at which point we need to order name badges and we stop all transfers. We don't do anything with hotel rooms; that's all on you. -If you need to cancel, e-mail summit@ with your name, email address, and Eventbrite order number. We will release a ticket to the waitlist. They will have 24 hours to complete the purchase of their ticket. If they don't, we'll release the next waitlist entry, and so on. If someone eventually buys a ticket, we'll refund yours. Again, we don't do anything with hotel rooms. -Sometime in mid-April, all of this stops, as we have to start ordering stuff based on current registrations. diff --git a/content/articles/2019-01-18-icymi-week-of-18-january-2018.md b/content/articles/2019-01-18-icymi-week-of-18-january-2018.md deleted file mode 100644 index f1a05dafb..000000000 --- a/content/articles/2019-01-18-icymi-week-of-18-january-2018.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: "ICYMI: Week of 18-January-2018" -authors: - - Robin Dadswell -date: "2019-01-18T15:00:35+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/01/icymi-week-of-18-january-2018/ ---- - -# ICYMI: PowerShell Week of 18-January-2019 - -Topics include SQL Server Errors, Out Verbs, Out-Grid in PS Core, Puzzles, Drawing with PowerShell and more. - - - -Content filtered through by Brett Bunker and Robin Dadswell. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190118.md#resolving-microsoft-sql-server-error-4064-with-powershell)[*Resolving Microsoft SQL Server Error 4064 with PowerShell*](https://mikefrobbins.com/2019/01/11/resolving-microsoft-sql-server-error-4064-with-powershell/) - -by Mike F Robbins on January 11th -Learn about how to troubleshoot 4064 errors and more using the dbatools module. - -### [*How To Use PowerShell's Out Verb*](https://redmondmag.com/articles/2019/01/11/how-to-use-powershell-out-verb.aspx) - -by Brien Posey on January 11th -Your screen doesn't have to be PowerShell's only output device. As Brien shows, the Out verb lets you redirect PowerShell's output in a variety of useful ways. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190118.md#a-powershell-core-out-gridview-soltion)[*A PowerShell Core Out-GridView Soltion*](https://jdhitsolutions.com/blog/powershell-core/6428/a-powershell-core-out-gridview-solution/) - -by Jerffery Hicks on January 15th -Were you reluctant to use PowerShell Core because there's no Out-Gridview? Allow me to explain how I solved that problem. In PS Core I can now pipe to ogv! - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190118.md#schr%C3%B6dingers--argumentlist)[*Schrödinger's -ArgumentList*](https://blog.iisreset.me/schrodingers-argumentlist/amp/?__twitter_impression=true) - -by Mathias R. Jessen on January 16th -An interesting puzzle about when is a $null value a $null value. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190118.md#playing-around-with-systemdrawing-in-powershell)[*Playing Around with System.Drawing in PowerShell*](https://vexx32.github.io/2019/01/17/Playing-Around-System-Drawing-PowerShell/) - -by Joel (Sallow) Francis on January 17th -Some neat features of System.Drawing by the author of PSWordCloud. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190118.md#twitter-powershell-cheat-sheet)[*Twitter: PowerShell Cheat Sheet*](https://twitter.com/LawinnSec/status/1085813519164063744) - -A useful PowerShell cheat sheet for those that are both new to PowerShell and those that just sometimes need a prompt. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190118.md#reddit-rpowershell---popular-weekly-post)[*Reddit /r/PowerShell - Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ah2adr/moving_files_in_sharepoint_site_with_ps/) - -u/MaDKidGo0DCitY poses an intersting question about how to move many files in a SharePoint site with PowerShell. - -### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190118.md#youtube-monthly-meetup---jan-16-2019---chris-gardner---powershell-worst-practices)[*Youtube: Monthly Meetup - Jan 16 2019 - Chris Gardner - PowerShell Worst Practices*](https://youtu.be/QV-tu2jqPUc) - -Building PowerShell Modules? Learn some development best practices and design tips diff --git a/content/articles/2019-01-25-icymi-powershell-week-of-25-january-2019.md b/content/articles/2019-01-25-icymi-powershell-week-of-25-january-2019.md deleted file mode 100644 index 72ec8cc8b..000000000 --- a/content/articles/2019-01-25-icymi-powershell-week-of-25-january-2019.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 25-January-2019" -authors: - - Mark Roloff -date: "2019-01-25T16:39:42+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/01/icymi-powershell-week-of-25-january-2019/ ---- - -Topics include SCCM, DSC, an intro for people in infosec, sweet dashboards, and more. - - - -Content pulled together by Brett Bunker, Robin Dadswell, and the less-than-punctual this week Mark Roloff. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190125.md#wake-up-single-computer-or-collection-of-computers-in-configmgr-1810-using-powershell)[*Wake up single Computer or collection of Computers in ConfigMgr 1810 using PowerShell*](https://ccmexec.com/2019/01/wake-up-single-computer-or-collection-of-computers-in-configmgr-1810-using-powershell/) - -by Jörgen Nilsson on January 22nd -SCCM has a fancy new way of waking systems and Jörgen walks through how to get that setup, and initiate the wake up from PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190125.md#logging-powershell-scripts)[*Logging PowerShell Scripts*](https://powershell.getchell.org/2019/01/23/logging-powershell-scripts/) - -by Nicholas M. Getchell on January 23rd -Log files are an invaluable tool, so why not include the functionality in your scripts? Nicholas shares a few methods for accomplishing this. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190125.md#applying-basic-system-configuration-using-powershell-dsc)[*Applying basic system configuration using PowerShell DSC*](https://www.markou.me/2019/01/applying-basic-system-configuration-using-powershell-dsc/) - -by George Markou on January 20th -If you're looking to take a quick dive into configuration management, George has a nice intro to DSC to help you take that first step. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190125.md#parsing-text-with-powershell-23)[*Parsing Text with PowerShell (2/3)*](https://blogs.msdn.microsoft.com/powershell/2019/01/24/parsing-text-with-powershell-2-3/) - -by Steve Lee on January 24th -This 2 for 3 in a series from Steve about working with text. You're bound to pick up some handy new tricks in here. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190125.md#group-policy-backup-with-a-powershell-script)[*Group Policy backup with a PowerShell script*](https://4sysops.com/archives/group-policy-backup-with-a-powershell/) - -by Mike Kanakos on January 18th -Understandably frustrated with the default behavior, Mike creates a better GPO backup. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190125.md#reddit-rpowershell---popular-weekly-post)[*Reddit /r/PowerShell - Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ahon00/universal_dashboard_sample/?st=jrc9cq84&sh=ac8d7eb4) - -/u/PorreKaj made a pretty sweet dashboard using the Universal Dashboard and, true to his promise, delivers sample code. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190125.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/PSPester/status/1087438839227006977) - -A new version of Pester is out: 4.6.0! Time to start polishing up your tests with new functionality. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190125.md#youtube-powershell-basics-for-security-professionals-part-1)[*Youtube: PowerShell Basics for Security Professionals Part 1*](https://www.youtube.com/watch?v=B0EsL1j_-qw) - -Mr Carlos Perez gives a livestreamed presentation for people in infosec dipping into PowerShell. diff --git a/content/articles/2019-02-01-icymi-powershell-week-of-1-february-2019.md b/content/articles/2019-02-01-icymi-powershell-week-of-1-february-2019.md deleted file mode 100644 index 9a1b0ee70..000000000 --- a/content/articles/2019-02-01-icymi-powershell-week-of-1-february-2019.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 1-February-2019" -authors: - - Brett -date: "2019-02-01T16:00:40+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/02/icymi-powershell-week-of-1-february-2019/ ---- - -Topics include Active Directory FSMO Roles, text parsing, error handling, and much more. - -Content pulled together by Robin Dadswell, Mark Roloff , and Brett Bunker. - -### [][1][_Finding Active Directory FSMO Role Holders with PowerShell_][2] {.wp-block-heading} - -by Adam Bertram January 25 - -Need to find which DCs hold your FSMO roles? Adam demonstrates a quick way to find their location using PowerShell. - -### [][3][_Parsing Text with PowerShell (3/3)_][4] {.wp-block-heading} - -by Steve Lee [MSFT] January 28 - -Part 3 in the series on parsing text with PowerShell. A nice wrap up to the series with some example uses. - -### [][5][_How To Create Multi-Dimensional Arrays in PowerShell_][6] {.wp-block-heading} - -by Brien Posey January 28 - -Do you need to go beyond basic arrays? Brien shows you how to create and use multi-demonsional arrays - -### [][7][_PowerShell. Don’t Just Throw_][8] {.wp-block-heading} - -by James O'Neill January 30 - -Why put a Return after a Throw? James gives some examples of why to use this technique in your error handling. - -### [][9][_Error Handling in PowerShell - Best Practices_][10] {.wp-block-heading} - -by Joel (Sallow) Francis January 31 - -Terminating errors? Non-Terminating errors? Joel explains them both and how to handle them in your code. - -### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} - -Listing Office365 Outages - -### [][13][_Tweet of the Week_][14] {.wp-block-heading} - -What are some cool things you've added to your prompt? - -### [][15][_Set-Clipboard - Using PowerShell to read and set the clipboard in Windows_][16] {.wp-block-heading} - -John Impallomeni showing some clipboard magic from Powershell. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190201.md#finding-active-directory-fsmo-role-holders-with-powershell - [2]: https://mcpmag.com/articles/2019/01/25/finding-ad-fsmo-role-holders.aspx?m=1 - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190201.md#parsing-text-with-powershell-33 - [4]: https://blogs.msdn.microsoft.com/powershell/2019/01/28/parsing-text-with-powershell-3-3/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190201.md#how-to-create-multi-dimensional-arrays-in-powershell - [6]: https://redmondmag.com/articles/2019/01/28/multi-dimensional-powershell-arrays.aspx?m=1 - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190201.md#powershell-dont-just-throw - [8]: https://jamesone111.wordpress.com/2019/01/30/powershell-dont-just-throw/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190201.md#error-handling-in-powershell---best-practices - [10]: https://vexx32.github.io/2019/01/31/PowerShell-Error-Handling/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190201.md#reddit-rpowershell---most-popular-weekly-post - [12]: https://www.reddit.com/r/PowerShell/comments/algkuo/listing_office365_outages/?st=jrl8papk&sh=3e8672fc - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190201.md#tweet-of-the-week - [14]: https://twitter.com/Steve_MSFT/status/1090393625781972992 - [15]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190201.md#set-clipboard---using-powershell-to-read-and-set-the-clipboard-in-windows - [16]: https://www.youtube.com/watch?v=TBRdvzcxS54 diff --git a/content/articles/2019-02-07-summit-expansion-seeking-feedback.md b/content/articles/2019-02-07-summit-expansion-seeking-feedback.md deleted file mode 100644 index fb1729372..000000000 --- a/content/articles/2019-02-07-summit-expansion-seeking-feedback.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Summit Expansion – Seeking Feedback -authors: - - Will Anderson -date: "2019-02-07T16:00:21+00:00" -categories: - - PowerShell for Admins -aliases: - - /2019/02/summit-expansion-seeking-feedback/ ---- - -Tickets for the 2019 PowerShell + DevOps Summit sold out faster this year than its predecessors by almost exactly a full month. We are all so very excited to see everyone this year at the Meydenbauer in Bellevue, Washington! But as we continue to outpace each year, we also understand that this means that the demand for the content we deliver at Summit is also growing . - -One of the early goals of the Summit was to keep the event relatively small to provide a more intimate feel. In doing so, it allows attendees a chance to see familiar faces as they come back every year, and have a chance to interact with the speakers, staff, and members of the PowerShell team. As the event has grown, we've been very careful to not lose that feel. So the question then is, what do we do in order to meet the demands of the community, and maintain that small event feel? - -James Petty (our CFO), Jeffrey Bernt (our logistics manager), and I have been having this very discussion over the last couple of months. We've been doing a lot of homework on the resources it would require to organize and hold a second event. What would the goals of the event be? When do we have it? And so on, and so forth. - -That's where you come in! - -We're looking for some community feedback in helping us shape this second event. We've put together a short survey (link below) to help us make some decisions on key questions as we look toward moving forward on this project. Ultimately, our goal is to provide the community with the best educational content possible, and there's no better way to do that than to keep you involved in the decisions that affect that content. We'll keep the survey open for a couple of weeks, and share the responses with you after the close. - -From the team here at The DevOps Collective, we're all looking forward to growing with you in the coming future! - - diff --git a/content/articles/2019-02-08-icymi-powershell-week-of-8-february-2019.md b/content/articles/2019-02-08-icymi-powershell-week-of-8-february-2019.md deleted file mode 100644 index 88b401e64..000000000 --- a/content/articles/2019-02-08-icymi-powershell-week-of-8-february-2019.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 8-February-2019" -authors: - - Mark Roloff -date: "2019-02-08T16:00:03+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/02/icymi-powershell-week-of-8-february-2019/ ---- - -Topics include adrenaline for your AKS deployments, Azure Pipelines, Universal Dashboard, and more. - - - -Content scoured by Brett Bunker, Robin Dadswell, and Mark Roloff. - -###### [][1][_Deploying a production-ready Azure Kubernetes (AKS) cluster with PSAksDeployment_][2] {.wp-block-heading} - -by Mathieu Buisson on February 4th - -Deploying AKS the officially documented way? Give this a read. Mathieu gives a great look into using this souped-up module to do some heavy lifting for you. - -###### [][3][_PowerShell Function to Connect to All Office 365 Services With Support For MFA_][4] {.wp-block-heading} - -by Brad Wyatt on February 5th - -Say goodbye to your ugly "Log-into-too-many-PowerShell-cloud-services" script and say hello to Brad's one-stop function. I can already think of a few places to start using this. - -###### [][5][_The top 6 PowerShell commands you need to know to manage Office 365_][6] {.wp-block-heading} - -by Steve Goodman on February 5th - -If you're managing O365 and are new to PowerShell, this is a great little intro to the language from that perspective. - -###### [][7][_Retry Commands in PowerShell_][8] {.wp-block-heading} - -by Prateek Singh on February 1st - -Prateek has thrown together a very nice function that's tailor-made to handle all of your retry logic. Give it a whirl in your next script! - -###### [][9][_How I Failed My Way to Success with Azure Pipelines - Part 1: Build_][10] {.wp-block-heading} - -by Josh King on February 7th - -If you've got a public PowerShell project, consider hooking it up with in a release pipeline. Josh's first experiences with that will be a helpful guide in figuring that out. - -###### [][11][_Tweet of the Week_][12] {.wp-block-heading} - -I love RDCMan, so I was pretty stoked to find out that there's a module for generating its config files. Thanks, Brett! - -###### [][13][_AZPosh: PowerShell Universal Dashboard_][14] {.wp-block-heading} - -Curious about Universal Dashboard? Adam Driscoll gives a tour of this awesome tool to the Arizona PSUG. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190208.md#deploying-a-production-ready-azure-kubernetes-aks-cluster-with-psaksdeployment - [2]: https://mathieubuisson.github.io/deploying-aks-cluster-psaksdeployment/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190208.md#powershell-function-to-connect-to-all-office-365-services-with-support-for-mfa - [4]: https://www.thelazyadministrator.com/2019/02/05/powershell-function-to-connect-to-all-office-365-services-with-support-for-mfa/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190208.md#the-top-6-powershell-commands-you-need-to-know-to-manage-office-365 - [6]: https://practical365.com/microsoft-365/the-top-6-powershell-commands-you-need-to-know-to-manage-office-365/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190208.md#retry-commands-in-powershell - [8]: https://ridicurious.com/2019/02/01/retry-command-in-powershell/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190208.md#how-i-failed-my-way-to-success-with-azure-pipelines---part-1-build - [10]: https://king.geek.nz/2019/02/07/how-i-failed-my-way-to-success-with-azure-pipelines/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190208.md#tweet-of-the-week - [12]: https://twitter.com/BrettMiller_IT/status/1092062887957446657 - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190208.md#azposh-powershell-universal-dashboard - [14]: https://www.youtube.com/watch?v=fl1RfXmjvPA diff --git a/content/articles/2019-02-13-iron-scripter-2019-begins.md b/content/articles/2019-02-13-iron-scripter-2019-begins.md deleted file mode 100644 index 25ddb6bae..000000000 --- a/content/articles/2019-02-13-iron-scripter-2019-begins.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: IRON SCRIPTER 2019 BEGINS! -authors: - - Don Jones -date: "2019-02-13T22:32:50+00:00" -categories: - - PowerShell for Admins -aliases: - - /2019/02/iron-scripter-2019-begins/ ---- - -Go to right away! - -Even if you're not attending Summit, these challenges are a great thing to jump into. They're a fun chance to flex your PowerShell sk1llz, and the official Iron Scripter competition permits remote assistance to each of our three factions - so you can get in on the action from afar! - -We suggest using tags #battlefaction, #daybreakfaction, and #flawlessfaction, and #ironscripter2019 to hook up with fellow coders on social media. Visit the main [Iron Scripter][1] website to learn more. - -Not even sure how to join a faction? It's easy: read up on 'em and decide which one fits you. Then get in touch with your like-minded scripters. Arrange to communicate via Slack, Teams, GitHub, carrier pigeon, or whatever - Iron Scripter is all about mystery and ad-hoc, not about formal structures or rules. - - [1]: http://ironscripter.us diff --git a/content/articles/2019-02-14-tips-for-writing-cross-platform-powershell-code.md b/content/articles/2019-02-14-tips-for-writing-cross-platform-powershell-code.md deleted file mode 100644 index 5346f64df..000000000 --- a/content/articles/2019-02-14-tips-for-writing-cross-platform-powershell-code.md +++ /dev/null @@ -1,448 +0,0 @@ ---- -title: Tips for Writing Cross-Platform PowerShell Code -authors: - - Aaron Jensen -date: "2019-02-14T18:17:40+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks -aliases: - - /2019/02/tips-for-writing-cross-platform-powershell-code/ ---- - -I just spent a month updating [one of our PowerShell modules][1] to support Linux and MacOS. I learned a lot that I wanted to share with the community as cross-platform support becomes more and more important. - -## Use "Environment" Class Properties Instead of "env:" Drive {.wp-block-heading} - -Environment variables are different between the different operating systems. All of them have - - -`PATH -`, but not much else. Windows and MacOS both have variables for the temp directory, but they have different names. - -Instead of using environment variables like - - -`$env:USERNAME -`, use the - -[static properties on the Environment class instead][2]. They return the correct values across operating systems. - - -`Instead Of Use ----------- --- -$env:USERNAME [Environment]::UserName -$env:COMPUTERNAME [Environment]::MachineName - - -n [Environment]::NewLine -`r`n [Environment]::NewLine -$env:TEMP [IO.Path]::GetTempDirectory() - - -The - - -`Environment -`class also has neat properties like - - -`Is64BitProcess -`, - - -`Is64BitOperatingSystem -`, and - - -`UserInteractive -`, which aren't exposed in the - - -`env: -`drive. - -## Use the Same Case When Reading/Setting Environment Variables {.wp-block-heading} - -Environment variable names are case-sensitive on MacOS and Linux, regardless of how you access them. So, - - -`$env:Path -[Environment]::GetEnvironmentVariable('Path') -`would return nothing on MacOS or Linux, because the path environment variable is - - -`PATH -`on those platforms. Since environment variable names are case-insensitive on Windows, you should prefer the case from Linux/MacOS. - -## Always Use "Join-Path" to Create Path Strings {.wp-block-heading} - -### When the Path Originates in Your Code {.wp-block-heading} - -Never, ever put paths together with strings, e.g. - - -`"BasePath\ChildPath" -`. That path won't work on Linux or MacOS because their file systems see the - - -`\ -`character as an escape character, not a directory separator. Instead, use - - -`Join-Path -`. Not only does it use the correct directory separator, but it converts directory separators to the directory separator for the current platform. - -For example, - - -`Join-Path -Path '\usr\bin' -ChildPath 'dotnet' -`returns - - -`/usr/bin/dotnet -`on Linux/MacOS and - - -`\usr\bin\dotnet -`on Windows. - -### When the Path Comes from the User {.wp-block-heading} - -In one situation, our module took in a path from the user via a configuration file. Normally, we would use - - -`Resolve-Path -`to get the full path to the file, which normalizes the directory separator, but in this situation, the path may be to a file the user wants us to create and - - -`Resolve-Path -`requires that the path exists. Here's how we got our paths normalized: - - -`# If the user didn't give us an absolute path, -# resolve it from the current directory. -if( -not [IO.Path]::IsPathRooted($archivePath) ) -{ - $archivePath = Join-Path -Path (Get-Location).Path -ChildPath $archivePath -} -$archivePath = Join-Path -Path $archivePath -ChildPath '.' -$archivePath = [IO.Path]::GetFullPath($archivePath) -`This trick relies on: - - - - - -`Join-Path -`normalizing our directory separators (line 7) and - - -- - The -`GetFullPath -`method on the - - -`IO.Path -`object replacing - - -`.. -`and - - -`. -`characters to the parent/current item name, respectively (line 8). - - -This way we don't have to use regular expressions. We let .NET Core/PowerShell do that work for us. - -## Use "[IO.Path]::DirectorySeparatorChar" When You Can't Use "Join-Path" {.wp-block-heading} - -If for some reason you can't use - - -`Join-Path -`to create a path or our strategy above, instead of hard-coding the directory separator character, use the - - -`[IO.Path]::DirectorySeparatorChar -`property to get the correct separator for the current operating system. For example, - - -`'ParentPath{0}ChildPath' -f [IO.Path]::DirectorySeparatorChar -`## Don't Use the "-Qualifier" Switch on "Split-Path" {.wp-block-heading} - -In some of our tests, we want to create a path on the current drive: - - -`$drive = Split-Path -Qualifier -Path $PSScriptRoot -$path = Join-Path -Path $drive -ChildPath 'SomePath' -`This doesn't work on Linux/MacOS because "Qualifier" is synonomous with "Drive" and only Windows has the concept of a drive. Instead, use the - - -`PSDrive -`property on the - - -`FileInfo -`object for the current file (or whatever file whose root path you want) to get the root path: - - -`$root = (Get-Item -Path $PSScriptRoot).PSDrive.Root -$path = Join-Path -Path $root -ChildPath 'SomePath' -`The above code returns - - -`/SomePath -`on Linux/MacOS and - - -`C:\SomePath -`on Windows (assuming the current script is on the C: drive). - -## Use the Same Case for Hashtable Keys {.wp-block-heading} - -On Linux, hashtable keys are case-sensitive. On Windows and MacOS, they aren't. So, - - -`$ht = @{ 'Key' = 'Value' } -$ht['KEY'] -`returns - - -`Value -`on Windows and MacOS, and - - -`$null -`on Linux. - -## Don't Use Aliases {.wp-block-heading} - -Don't use PowerShell's aliases in your scripts. They are different between operating systems. Many of the aliases on Windows were originally added to help non-Windows users find familiar commands, e.g. - - -`ls -`mapping to - - -`Get-ChildItem -`. We had one test fixture that was using - - -`sc -`instead of - - -`Set-Content -`. Those tests failed when run under Linux. - -## Use "[IO.Path]::PathSeparator" for "PATH" Environment Variable {.wp-block-heading} - -Windows uses a different path separator than Linux/MacOS for paths in the - - -`PATH -`environment variable. Windows uses - - -`; -`. Linux/MacOS use - - -`: -`. Instead of hard-coding those characters, use the - - -`[IO.Path]::PathSeparator -`property to use the correct separator for the current operating system. For example, this code shows how to split/join the - - -`PATH -`environment variable in a cross-platform way: - - -`# Get each path in the PATH environment variable. -$env:PATH -split [IO.Path]::PathSeparator -# Add a path to the current session's PATH environment variable -$env:PATH = '{0}{1}{2}' -f $env:PATH,[IO.Path]::PathSeparator,$NewPath -`## Warning: Windows Executables Run Under the Windows Subsystem for Linux {.wp-block-heading} - -The Windows Subsytem for Linux is great. We used it a lot to get our module working under Linux instead of spinning up an entire VM. Even though it's running Linux, it's still on Windows, so Windows executables can still run. This is awesome but be mindful of the trade-off: if you have tests or code that run Windows executables, they'll appear to run fine under WSL, but fail when actually run on a Linux machine. - -## Omit the Extension When Searching for or Running Executables {.wp-block-heading} - -On Windows, executable files have the - - -`.exe -`extension. On Linux/MacOS, an executable has file system permissions that mark a file as executable. If you're searching for or running a command that could exist on all operating systems, omit the extension from the name. On Windows, PowerShell will implicitly add the - - -`.exe -`extension for you (it actually uses the extensions in the - - -`PATHEXT -`environment variable to look for commands). For example, this code will return the path to the .NET Core and Node.js executables, if they exist in your - - -`PATH -`: - - -`# Finding commands -Get-Command -Name 'dotnet' -ErrorAction Ignore -Get-Command -Name 'node' -ErrorAction Ignore -# Running commands -dotnet --version -node --version -`If your commands exists outside a directory in your - - -`PATH -`environment variable, consider adding that directory to your - - -`PATH -`either permanently or temporarily so you don't have to build the logic of cross-platform executable naming yourself. - -## Supporting Windows PowerShell and PowerShell Core {.wp-block-heading} - -Some changes we encountered between operating systems weren't because of the operating systems but because we use PowerShell 5.1 on Windows. PowerShell 6 behaves differently from PowerShell 5.1 in some ways. - -### Use the "FullName" Property on "FileInfo" and "DirectoryInfo" Objects {.wp-block-heading} - -In some situations converting - - -`FileInfo -`and - - -`DirectoryInfo -`objects to strings (i.e. the objects returned by using - - -`Get-ChildItem -`against the file system) behave differently. On Windows PowerShell, you'll get just the file's name. On PowerShell Core, you'll get the item's full name. - -For example, this snippet returns each item's name on Windows PowerShell and each item's full name on PowerShell Core: - - -`Get-ChildItem | ForEach-Object { [string]$_ } -`Instead, use the - - -`FullName -`property to get the full path or - - -`Name -`to get just the name: - - -`# Returns each item's full path -Get-ChildItem | ForEach-Object { $_.FullName } -# Returns each item's name -Get-ChildItem | ForEach-Object { $_.Name } -`### Use an Empty Error Type and Capability Checking When Handling "Invoke-WebRequest" Failures {.wp-block-heading} - -The exception thrown by - - -`Invoke-WebRequest -`is different between Windows PowerShell and PowerShell Core. On Windows PowerShell, it is a - -[System.Net.WebException][3]. On PowerShell Core, it is a [Microsoft.PowerShell.Commands.HttpResponseException][4]. - -So, if you were handling failed web requests like this: - - -`$uri = 'https://httpstat.us/500' -try -{ - Invoke-WebRequest -Uri $uri -} -catch [Net.WebException] -{ - Write-Error -Message ('Failed requesting "{0}": {1}' -f $uri,$_.ErrorDetails) -} -`You should instead do: - - -`$uri = 'https://httpstat.us/500' -try -{ - Invoke-WebRequest -Uri $uri -} -catch -{ - $errorDetails = $null - $response = $_.Exception | Select-Object -ExpandProperty 'Response' -ErrorAction Ignore - if( $response ) - { - $errorDetails = $_.ErrorDetails - } - # Not an exception making the request or the failed request didn't have a response body. - if( $errorDetails -eq $null ) - { - Write-Error -ErrorRecord $_ - } - else - { - Write-Error -Message ('Request to "{0}" failed: {1}' -f $uri,$errorDetails) - } -} -`Notice that instead of checking what version of PowerShell we're on to know if the - - -`ErrorDetails -`contains the error's response body, we instead check for the existence of the - - -`Response -`property on the thrown exception. This property exists on the exception objects thrown by Windows PowerShell and PowerShell Core. This is called a capability check and is the preferred pattern for supporting different ways of doing things across versions and operating systems. When you check for functionality instead of versions, your code will work in more places. - -### Use "IsWindows", "IsLinux", and "IsMacOS" Variables _Sparingly_ {.wp-block-heading} - -PowerShell 6 introduces three global variables that you can use to check which platform you're on. You should use these sparingly, and instead use capability checks (see above). If you absolutely need to know what operating system you're on, the - - -`IsWindows -`, - - -`IsLinux -`, and - - -`IsMacOS -`variables work great. - -We turn on strict mode in all our scripts (i.e. - - -`Set-StrictMode -Version 'Latest' -`), so we can't just use these variables without getting errors on Windows PowerShell. Since they were introduced in PowerShell 6, and that version of PowerShell is the first to run on Linux and MacOS, if any of the variables don't exist, you know you're on Windows. If you have code/modules that need to run on Windows PowerShell - -_and_ PowerShell Core, you can use this snippet to conditionally create these variables: - - -`if( -not (Test-Variable 'variable:IsWindows') ) -{ - # We know we're on Windows PowerShell 5.1 or earlier - $IsWindows = $true - $IsLinux = $IsMacOS = $false -} -`Be a good script/module neighbor by _not_ making these global and instead restricting them to your script/module scope. - -Thanks to [Joseph Larionov][5], who helped edit this article. - - [1]: https://www.powershellgallery.com/packages/Whiskey/ - [2]: https://docs.microsoft.com/en-us/dotnet/api/system.environment - [3]: https://docs.microsoft.com/en-us/dotnet/api/system.net.webexception - [4]: https://docs.microsoft.com/en-us/dotnet/api/microsoft.powershell.commands.httpresponseexception?view=pscore-6.0.0 - [5]: https://github.com/DecoyJoe diff --git a/content/articles/2019-02-15-icymi-powershell-week-of-15-february-2019.md b/content/articles/2019-02-15-icymi-powershell-week-of-15-february-2019.md deleted file mode 100644 index 5020b5cd6..000000000 --- a/content/articles/2019-02-15-icymi-powershell-week-of-15-february-2019.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 15-February-2019" -authors: - - Mark Roloff -date: "2019-02-15T16:00:54+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/02/icymi-powershell-week-of-15-february-2019/ ---- - -Topics include Iron Scripter, monitoring your filesystem, VSCode goodness, and more. - - - -Content curated by Brett Bunker, Robin Dadswell, and Mark Roloff. - -###### [][1][_IRON SCRIPTER 2019 BEGINS!_][2] {.wp-block-heading} - -by Don Jones on February 13th - -In case you missed it, here it is. The Iron Scripter challenges have officially kicked off with the first warm-up challenge having been posted. Solve challenges, join a faction, and show off your scripting-chops! - -###### [][3][_Monitor file changes in Windows with PowerShell and pswatch_][4] {.wp-block-heading} - -by Dan Franciscus on February 11th - -Dan gives a quick look into how easy it is to catch filesystem changes in real time with the PSWatch module. - -###### [][5][_Group Email Notification For Dataset Refresh Failure_][6] {.wp-block-heading} - -by Brett Powell on February 13th - -Here's a nice example of how PS can fit into a chain of other tools to create a novel solution. Brett enables an entire team to be notified in the event of dataset refresh failures. - -###### [][7][_How to save command output to file using Command Prompt or PowerShell_][8] {.wp-block-heading} - -by Mauro Huculak on February 12th - -It's a simple but useful tip. Redirecting your output for later review or sharing can be handy for any number of scenarios. - -###### [][9][_Reddit /r/PowerShell - Popular Weekly Post_][10] {.wp-block-heading} - -PowerShell for education! /u/Crimson_89 created a collection of GUI spelling games for their kids. Be sure to check out the repo in the comments. - -###### [][11][_YouTube: PowerShell ♥️ VSCode_][12] {.wp-block-heading} - -Presenting to the Dutch PowerShell User Group, Tyler Leonhardt demonstrates many of the finer features of VSCode with the PS extension. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190215.md#iron-scripter-2019-begins - [2]: https://powershell.org/2019/02/iron-scripter-2019-begins/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190215.md#monitor-file-changes-in-windows-with-powershell-and-pswatch - [4]: https://4sysops.com/archives/monitor-file-changes-in-windows-with-powershell-and-pswatch/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190215.md#group-email-notification-for-dataset-refresh-failure - [6]: https://insightsquest.com/2019/02/13/group-email-notification-for-dataset-refresh-failure/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190215.md#how-to-save-command-output-to-file-using-command-prompt-or-powershell - [8]: https://www.windowscentral.com/how-save-command-output-file-using-command-prompt-or-powershell - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190215.md#reddit-rpowershell---popular-weekly-post - [10]: https://www.reddit.com/r/PowerShell/comments/aoz36i/made_a_suite_of_powershell_gui_spelling_games_for/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190215.md#youtube-powershell-%EF%B8%8F-vscode - [12]: https://www.youtube.com/watch?v=tQLDRYIhmy0 diff --git a/content/articles/2019-02-22-icymi-powershell-week-of-22-february-2019.md b/content/articles/2019-02-22-icymi-powershell-week-of-22-february-2019.md deleted file mode 100644 index 44d632953..000000000 --- a/content/articles/2019-02-22-icymi-powershell-week-of-22-february-2019.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 22-February-2019" -authors: - - Brett -date: "2019-02-22T16:00:51+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/02/icymi-powershell-week-of-22-february-2019/ ---- - -Topics include PoshBot, JeaDsc, Azure Pipelines, Arrays and Hashtables, and Pester testing. - -Content curated by Brett Bunker, Robin Dadswell, and Mark Roloff. - -### [][1][_Writing a PoshBot Plugin to Display TOPdesk Tickets and Assets_][2] {.wp-block-heading} - -by Andrew Pla on February 16th - -Creating bots for Teams or Slack can make you more productive and save time by not having to swtich between applications. Come let Andrew show you how to create a bot for Teams using PoshBot. - -### [][3][_[Scriptblock] and ConvertTo-Json: a match made in recursive hell_][4] {.wp-block-heading} - -by Chris Gardner on February 17th - -Interested in deploying JEA in your environment? JeaDsc can help you deploy JEA endpoints across your enterprise, but there may be a gothcha with JSON. Let Chris show you how he resolved this issue. - -### [][5][_How I Failed My Way to Success with Azure Pipelines - Part 2: Release_][6] {.wp-block-heading} - -by Josh King on February 17th - -Josh walks you through setting up and configuring an Azure pipeline to use with PowerShell in this blog post. Testing in production is optional. - -### [][7][_PowerShell – Few tricks about HashTables and Arrays I wish I knew when I started_][8] {.wp-block-heading} - -by Przemyslaw Klys on February 19th - -Dive into some great examples on how to make you HashTables and Arrays look better and perform faster. Follow along with this post filled with great examples to improve your code. - -### [][9][_Pester Testing Self Contained Scripts_][10] {.wp-block-heading} - -by Shane O'Neill on February 20th - -Pestering your code is a good thing. Shane shows how to get started testing with Pester, with a tip for a great video to watch for even more Pester goodness. - -### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} - -Query Powershell Data Types? - -### [][13][_Tweet of the Week_][14] {.wp-block-heading} - -Powershell Core v6.1.3 was just released. - -### [][15][_Youtube: An Introduction to Just Enough Administration with James Petty_][16] {.wp-block-heading} - -Research Triangle PowerShell Users Group Meetup - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190222.md#writing-a-poshbot-plugin-to-display-topdesk-tickets-and-assets - [2]: https://andrewpla.github.io/Writing-a-PoshBot-Plugin/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190222.md#scriptblock-and-convertto-json-a-match-made-in-recursive-hell - [4]: https://chrislgardner.github.io/powershell/2019/02/17/convertto-json-scripblock.html - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190222.md#how-i-failed-my-way-to-success-with-azure-pipelines---part-2-release - [6]: https://king.geek.nz/2019/02/17/how-i-failed-my-way-to-success-with-azure-pipelines-part-2-release/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190222.md#powershell--few-tricks-about-hashtables-and-arrays-i-wish-i-knew-when-i-started - [8]: https://evotec.xyz/powershell-few-tricks-about-hashtable-and-array-i-wish-i-knew-when-i-started/amp/?__twitter_impression=true - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190222.md#pester-testing-self-contained-scripts - [10]: https://nocolumnname.blog/2019/02/20/pester-testing-self-contained-scripts/amp/?__twitter_impression=true - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190222.md#reddit-rpowershell---most-popular-weekly-post - [12]: https://www.reddit.com/r/PowerShell/comments/asabxe/ - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190222.md#tweet-of-the-week - [14]: https://twitter.com/alistek/status/1097961047825309702 - [15]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190222.md#youtube-an-introduction-to-just-enough-administration-with-james-petty - [16]: https://youtu.be/gyfYu-EbfEU diff --git a/content/articles/2019-03-01-icymi-powershell-week-of-1-march-2019.md b/content/articles/2019-03-01-icymi-powershell-week-of-1-march-2019.md deleted file mode 100644 index e4da54b9c..000000000 --- a/content/articles/2019-03-01-icymi-powershell-week-of-1-march-2019.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 1-March-2019" -authors: - - Mark Roloff -date: "2019-03-01T16:00:11+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/03/icymi-powershell-week-of-1-march-2019/ ---- - -Topics include more Iron Scripter, a trove of AD and O365 scripts, tons of REST API goodness, and some fundamental lessons from Brisbane. - - - -Special thanks to Brett Bunker, Robin Dadswell, and Mark Roloff. - -###### [][1][_Generating PowerShell Cmdlets from OpenAPI/Swagger with AutoRest_][2] {.wp-block-heading} - -by Garrett Serack on February 22nd - -AutoRest has added support for PowerShell! And I honestly had no idea what it was before this but it looks like a pretty cool way to generate code for hitting REST APIs from yaml files. Definitely worth looking at more closely! - -###### [][3][_Iron Scripter 2019 Prelude Challenge #2_][4] {.wp-block-heading} - -by Jeff Hicks on February 26th - -If you've been doing the Iron Scripter challenges, or would like to, don't forget to share your solutions! Everyone has a different take, so there's probably something new that you can teach somebody just by putting it out there. - -###### [][5][_Understanding the Invoke-RestMethod PowerShell cmdlet_][6] {.wp-block-heading} - -by Adam Bertram on February 23rd - -REST APIs are fun, and - - -`Invoke-RestMethod -`is your gateway to using them. Let Adam take you on a tour of this flexible cmdlet! - -###### [][7][_Get Latest Office 365 Service Status with Flow or PowerShell_][8] {.wp-block-heading} - -by Lee Ford on February 25th - -Lee's guide will walk you through setting up an Azure AD app that can then be used by PowerShell to query your tenant's status. Bonus points for integrating it with your PoshBot deployment! - -###### [][9][_Reddit /r/PowerShell - Popular Weekly Post_][10] {.wp-block-heading} - -Avast! Yonder Reddit post be havin' a bounty o' O365 and AD scripts fer the plunder! Arrrr! - -###### [][11][_Youtube: PowerShell 101 with Michael and Christian_][12] {.wp-block-heading} - -From the Brisbane User Group, Michael gives a lesson on PS fundamentals covering flow control and decision making statements - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190301.md#generating-powershell-cmdlets-from-openapiswagger-with-autorest - [2]: https://devblogs.microsoft.com/powershell/cmdlets-via-autorest/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190301.md#iron-scripter-2019-prelude-challenge-2 - [4]: https://ironscripter.us/iron-scripter-2019-prelude-challenge-2/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190301.md#understanding-the-invoke-restmethod-powershell-cmdlet - [6]: https://4sysops.com/archives/understanding-the-invoke-restmethod-powershell-cmdlet/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190301.md#get-latest-office-365-service-status-with-flow-or-powershell - [8]: https://www.lee-ford.co.uk/get-latest-office-365-service-status-with-flow-or-powershell/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190301.md#reddit-rpowershell---popular-weekly-post - [10]: https://old.reddit.com/r/PowerShell/comments/atop5h/sharing_office_365active_directory_scripts - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190301.md#youtube-powershell-101-with-michael-and-christian - [12]: https://www.youtube.com/watch?v=MeHS-w74BBg diff --git a/content/articles/2019-03-08-icymi-powershell-week-of-8-march-2019.md b/content/articles/2019-03-08-icymi-powershell-week-of-8-march-2019.md deleted file mode 100644 index 782818e8d..000000000 --- a/content/articles/2019-03-08-icymi-powershell-week-of-8-march-2019.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 8-March-2019" -authors: - - Mark Roloff -date: "2019-03-08T16:00:36+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/03/icymi-powershell-week-of-8-march-2019/ ---- - -Topics include the Graph API, status pages, test-driven development, getting your Google 2FA in the shell, and more. - - - -Content curated by Robin Dadswell and Mark Roloff. - -###### [][1][_PowerShell and the Microsoft Graph API : Part 2 – Starting to explore_][2] {.wp-block-heading} - -by James O'Neill on March 3rd - -The Graph API is a vast and powerful tool in MS's cloud. With a little help from James, we can start to poke around at what it brings to the table. Make sure oyu check out pt 1 to see how the connection is built. - -###### [][3][_Connect to Microsoft Graph for Intune with Powershell ISE Add-ons_][4] {.wp-block-heading} - -by Martin Bengtsson on March 4th - -Keeping with the Graph theme, Martin has a great tool for you Intune admins that are still using ISE. - -###### [][5][_Meet Statusimo – PowerShell generated Status Page_][6] {.wp-block-heading} - -by Przemyslaw Klys on March 6th - -Building on his PSWriteHTML module, Przemysław now unveils Statusimo, an impressive new module that can help you create professional looking status pages for your organization. - -###### [][7][_Google Authenticator in PowerShell_][8] {.wp-block-heading} - -by HumanEquivalentUnit on March 7th - -This is pretty cool! Don't want to take out your phone to handle your 2FA login with Google? Get it in the shell! - -###### [][9][_PowerShell Line Counting_][10] {.wp-block-heading} - -by Joel Bennett on March 6th - -Asking how many lines are in a script is easy enough to answer but what about from PowerShell's perspective? Joel uses the AST to find out how the PowerShell parser handles this. - -###### [][11][_Tweet of the Week_][12] {.wp-block-heading} - -Not all heroes wear capes but umm... Somebody needs to buy Taylor Leonhardt a cape. With this little adjustment to VSCode, double-clicking a variable will now include the $ sign. - -###### [][13][_Youtube: How to do Test Driven Development/Design in PowerShell_][14] {.wp-block-heading} - -Doug Finke gives a quick demo on how he approaches test-driven development. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190308.md#powershell-and-the-microsoft-graph-api--part-2--starting-to-explore - [2]: https://jamesone111.wordpress.com/2019/03/03/powershell-and-the-microsoft-graph-api-part-2-starting-to-explore/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190308.md#connect-to-microsoft-graph-for-intune-with-powershell-ise-add-ons - [4]: https://www.imab.dk/connect-to-microsoft-graph-for-intune-with-powershell-ise-add-ons-with-a-single-click/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190308.md#meet-statusimo--powershell-generated-status-page - [6]: https://evotec.xyz/meet-statusimo-powershell-generated-status-page/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190308.md#google-authenticator-in-powershell - [8]: https://humanequivalentunit.github.io/Google-Authenticator-In-PowerShell/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190308.md#powershell-line-counting - [10]: https://gist.github.com/Jaykul/e1056d5182d0c5566a22f72387abf741 - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190308.md#tweet-of-the-week - [12]: https://twitter.com/TylerLeonhardt/status/1102749805233737729 - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190308.md#youtube-how-to-do-test-driven-developmentdesign-in-powershell - [14]: https://www.youtube.com/watch?v=k8rJ8HrN3Ro diff --git a/content/articles/2019-03-11-whos-your-2019-powershell-community-hero.md b/content/articles/2019-03-11-whos-your-2019-powershell-community-hero.md deleted file mode 100644 index e3d5c8cc3..000000000 --- a/content/articles/2019-03-11-whos-your-2019-powershell-community-hero.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Who's Your 2019 PowerShell Community Hero?" -authors: - - Will Anderson -date: "2019-03-11T15:18:59+00:00" -categories: - - PowerShell for Admins -aliases: - - /2019/03/whos-your-2019-powershell-community-hero/ ---- - -Today we're opening nominations for the 2019 PowerShell Community Heroes! We want to know about those in the community that are doing a wealth of good. Have they written a fantastic script, or posted a blog series that has been exceptionally helpful? Are they doing a mad amount of pull requests in a module or in PowerShell Core? Here is your opportunity to make sure they get the recognition they deserve! - -All you need to do is take a couple of minutes to fill out a quick survey to let us know who you'd like to nominate and why. It's that simple! - -Link: [ -https://survey.sogosurvey.com/r/FsZhCb][1] - -We'll be announcing the top honorees at this year's PowerShell + DevOps Global Summit, followed by an announcement right here on PowerShell.org. The survey closes on April 5th! - - [1]: https://survey.sogosurvey.com/r/FsZhCb diff --git a/content/articles/2019-03-15-icymi-powershell-week-of-15-march-2019.md b/content/articles/2019-03-15-icymi-powershell-week-of-15-march-2019.md deleted file mode 100644 index fcaa8cd2f..000000000 --- a/content/articles/2019-03-15-icymi-powershell-week-of-15-march-2019.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 15-March-2019" -authors: - - Mark Roloff -date: "2019-03-15T15:00:24+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/03/icymi-powershell-week-of-15-march-2019/ ---- - -Topics include goodies for your prompt, more xplatform support for the SqlServer module, and more. - - - -Content pulled together by Robin Dadswell and Mark Roloff - -###### [_Invoke-Sqlcmd is Now Available Supporting Cross-Platform_][1] {.wp-block-heading} - -by Steve Lee on March 11th - -DBAs rejoice! - - -`Invoke-SqlCmd -`is now xplat with the latest PS Core build. Make sure you check out Steve's post for the details. - -###### [][2][_PowerShell Core – Updating Your SQL Server Linux Docker Containers Images_][3] {.wp-block-heading} - -by Max Trinidad on March 10th - -Speaking of xplat support for that cmdlet... Max demonstrates how to update your Linux Docker image to include the necessary tools for using - - -`Invoke-SqlCmd -`. - -###### [][4][_Programmatically Triggering a Group Licenses Refresh for AzureAD_][5] {.wp-block-heading} - -by Jos Lieben on March 11th - -As nice and the Az module and Graph API are, some things still aren't accessible through those. Jos shows us how to automate with Azure's "hidden" API. - -###### [][6][_Bitlocker Active Directory Recovery Password Backup Compliance_][7] {.wp-block-heading} - -by Mick Pletcher on March 8th - -For SCCM admins, here's a handy way to use PS with a Compliance Policy to make sure your BitLocker keys are properly backed up. - -###### [][8][_The Happy PowerShell Prompt_][9] {.wp-block-heading} - -by Aaron Powell on March 12th - -Who couldn't use a little more positivity in their shell? Using ConEmu, Aaron shows how to inject a little happiness into your prompt. - -###### [][10][_Reddit /r/PowerShell - Popular Weekly Post_][11] {.wp-block-heading} - -May be old news to some but /u/NotNotWrongUsually came across how colorful we can get in the shell now. Time to add a little extra pizazz to my prompt! - -###### [][12][_Youtube: ANZPSUG March 2019_][13] {.wp-block-heading} - -Friedrich Weinmann joins the Australia and New Zealand PSUG to discuss PSFramework. - - [1]: https://devblogs.microsoft.com/powershell/invoke-sqlcmd-is-now-available-supporting-cross-platform/ - [2]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190315.md#powershell-core--updating-your-sql-server-linux-docker-containers-images - [3]: http://www.maxtblog.com/2019/03/powershell-core-updating-your-sql-server-linux-containers-images/ - [4]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190315.md#programmatically-triggering-a-group-licenses-refresh-for-azuread - [5]: https://www.lieben.nu/liebensraum/2019/03/programmatically-triggering-a-group-licenses-refresh-for-azuread/ - [6]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190315.md#bitlocker-active-directory-recovery-password-backup-compliance - [7]: https://mickitblog.blogspot.com/2019/03/bitlocker-active-directory-recover.html - [8]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190315.md#the-happy-powershell-prompt - [9]: https://dev.to/azure/the-happy-powershell-prompt-2l4f - [10]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190315.md#reddit-rpowershell---popular-weekly-post - [11]: https://old.reddit.com/r/PowerShell/comments/b06gtw/til_that_powershell_can_do_colors/?st=jt9jgsxi&sh=20e55b07 - [12]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190315.md#youtube-anzpsug-march-2019 - [13]: https://www.youtube.com/watch?v=1wLJ0yUDoMM diff --git a/content/articles/2019-03-22-icymi-powershell-week-of-22-march-2019.md b/content/articles/2019-03-22-icymi-powershell-week-of-22-march-2019.md deleted file mode 100644 index 000c080ea..000000000 --- a/content/articles/2019-03-22-icymi-powershell-week-of-22-march-2019.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 22-March-2019" -authors: - - Mark Roloff -date: "2019-03-22T15:00:14+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/03/icymi-powershell-week-of-22-march-2019/ ---- - -Topics include PowerShell IoT, Nmap in PS, and some livestreamed contributions to PSHTML. - - - -Special thanks to Robin Dadswell and Mark Roloff. - -###### [][1][_List and change BIOS settings with PowerShell_][2] {.wp-block-heading} - -by Damien Van Robaeys on March 19th - -Methods covered are specific to 3 of the major hardware manufacturers, which makes this especially handy. - -###### [][3][_PoshNmap_][4] {.wp-block-heading} - -by Justin Grote - -Not a blog but this was announced a few days ago and seemed worth sharing. PoshNmap is a wrapper for the ubiquitous Nmap tool. - -###### [][5][_Getting Started With PowerShell (Core) on Raspian (Raspberry Pi) – Light Up a LED_][6] {.wp-block-heading} - -by Daniel Silva on March 20th - -I mean... The title really says it all. If you're curious about IoT, this is a great little practical exercise to get you introduced to it. - -###### [][7][_PowerShell Crash Course_][8] {.wp-block-heading} - -by jeikabu on March 15th - -A different kind of crash course. It's really more of a quick primer to PowerShell Core for *nix admins/developers. - -###### [][9][_SQL Database Backups using PowerShell Module – DBATools_][10] {.wp-block-heading} - -by Rajendra Gupta on March 21st - -There's apparently plenty of different configurations for backing up databases with the DBATools module, and Rajendra demonstrates a good number of them here. - -###### [][11][_Youtube: Closing an issue in PSHTML to improve charting in HTML with PowerShell_][12] {.wp-block-heading} - -Anthony livestreams his journey into writing an improvement to a public module. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190322.md#list-and-change-bios-settings-with-powershell - [2]: http://www.systanddeploy.com/2019/03/list-and-change-bios-settings-with.html - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190322.md#poshnmap - [4]: https://github.com/justingrote/poshnmap - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190322.md#getting-started-with-powershell-core-on-raspian-raspberry-pi--light-up-a-led - [6]: https://danielsknowledgebase.wordpress.com/2019/03/20/getting-started-with-powershell-core-on-raspbian-raspberry-pi-light-up-a-led/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190322.md#powershell-crash-course - [8]: https://dev.to/jeikabu/powershell-crash-course-3go5 - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190322.md#sql-database-backups-using-powershell-module--dbatools - [10]: https://www.sqlshack.com/sql-database-backups-using-powershell-module-dbatools/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190322.md#youtube-closing-an-issue-in-pshtml-to-improve-charting-in-html-with-powershell - [12]: https://www.youtube.com/watch?v=X5Yv5CdQYK8 diff --git a/content/articles/2019-03-22-running-universal-dashboard-with-ubuntu-and-nginx-with-https.md b/content/articles/2019-03-22-running-universal-dashboard-with-ubuntu-and-nginx-with-https.md deleted file mode 100644 index dba508bda..000000000 --- a/content/articles/2019-03-22-running-universal-dashboard-with-ubuntu-and-nginx-with-https.md +++ /dev/null @@ -1,268 +0,0 @@ ---- -title: Running Universal Dashboard with Ubuntu and Nginx (With HTTPS!) -authors: - - Nathaniel Webb (ArtisanByteCrafter) -date: "2019-03-22T14:37:28+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tools -aliases: - - /2019/03/running-universal-dashboard-with-ubuntu-and-nginx-with-https/ ---- - -![Imgur](https://i.imgur.com/Rqj22dX.png)*A basic UniversalDashboard running on nginx* - -## Index {.wp-block-heading} - - - - - [Prerequisites](#prerequisites) - - - - - [Configuration](#configuration) - - - - - [HTTPS (Optional)](#configuring-https) - - - -## Prerequisites {.wp-block-heading} - -For this writeup, I'm using Ubuntu 18.04. Software packages are geared toward using that version. - -First, we'll need to install our dependencies - -There are several ways to install Powershell core on Ubuntu. I recommend [Microsoft's documentation for ubuntu 18.04 here][1] - -Once installed, enter Powershell and install the [UniversalDashboard][2] module. This will use the community edition. - - -`pwsh -PS> Install-Module UniversalDashboard.Community -Scope CurrentUser -`Confirm it is installed: - - -`PS> Get-Module -ListAvailable -`Next, we need to install our webserver: - - -`sudo apt install nginx -`## Configuration {.wp-block-heading} - -First we need to have a dashboard to run, along with a place to run it. - -Create a project directory. This example uses - - -`my-site -`at the root of my user profile. - - -`cd ~ -mkdir my-site -cd ./my-site -`Place the following into a file called - - -`dashboard.ps1 -`and place it at the root of your project: - - -`$MyDashboard = New-UDDashboard -Title "Nginx Dashboard" -Content { - New-UDCard -Title "Running UD with Nginx!" -} -Start-UDDashboard -Port 8080 -Dashboard $MyDashboard -Name 'Nginx Dashboard' -Wait -`> - -> NOTE: You may have a dashboard which includes many folders, depending on the structure of your project. In that case, copy the entire folder structure into your project folder -> -> -> `> (my-site) -> `> . Make sure -> -> -> `> dashboard.ps1 -> `> is at the root of this folder. -> - - -Now, we need to configure our webserver to act as a reverse-proxy. This is done to make our site available via SSL in a very simple manner. - -Let's create a very basic reverse-proxy configuration within nginx. Navigate to - - -`/etc/nginx/sites-available -`and remove the - - -`default -`file. This file is symlinked to - - -`/etc/nginx/sites-enabled/default -`, so remove it as well. - -Next, head back to - - -`/etc/nginx/sites-available -`and create a file called - - -`dashboard.conf`sudo nano dashboard.conf -`Place the following in it: - - -`server { - listen 80; - server_name mydashboard; - location / { - proxy_pass http://localhost:8080; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection keep-alive; - proxy_set_header Host $host; - proxy_cache_bypass $http_upgrade; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } -} -`Now we need to symlink our proxy's config file to the sites-enabled folder: - - -`sudo ln -s /etc/nginx/sites-available/dashboard.conf /etc/nginx/sites-enabled/dashboard.conf -`Next, we need it to run as a service so we can control our dashboard with - - -`systemctl -`. I'm using Ubuntu, so I'm going to use systemd to manage my service. - -Navigate to - - -`/etc/systemd/system -`and create a service file for our service: - - -`sudo nano uddashboard.service -`Place the following in the service file. Note the path in - - -`ExecStart -`. This will need to match the path of your project's - - -`dashboard.ps1 -`file. Also ensure the user specified to run the service has permissions to access your project folder. - - -`[Unit] -Description=Universal Dashboard Service -After=syslog.target network.target -[Service] -User=nate -Group=nate -Type=simple -StandardOutput=syslog -StandardError=syslog -ExecStart=/usr/bin/pwsh -c "& /home/nate/my-site/dashboard.ps1" -TimeoutStopSec=20 -Restart=on-failure -[Install] -WantedBy=multi-user.target -`Now, start your dashboard: - - -`sudo systemctl start uddashboard.service -`Your site should now be available at http ://localhost:80 - -Finally, we want to enable our service so that it starts at boot and will attempt error correction if stopped unceremoniously. - - -`sudo systemctl enable uddashboard.service -`You should now have a fully functioning dashboard. - -If you'd like to configure SSL, read on! - -## Configuring HTTPS {.wp-block-heading} - -For this tutorial, I'm using Let's Encrypt certificates. For more information on how to obtain LE certs, check out the Let's Encrypt documentation on [getting started][3]. - -Make a directory for your certificates. Exactly where is up to you. - - -`sudo mkdir /etc/nginx/certs -cd /etc/nginx/certs -`Since I'm using Let's Encrypt, I have 2 certificate files I need to put here - - - -`fullchain.pem -`and - - -`privkey.pem -`. - -Be sure to set permissions on both to 400 (user read-only) - - -`sudo chmod 400 ./fullchain.pem -sudo chmod 400 ./privkey.pem -`Next, we need to modify our nginx config file to listen on HTTPS. - - -`sudo nano /etc/nginx/sites-available/dashboard.conf -`Now, we will listen on port 443, and port 80, which will perform a redirect to the secure version of our site: - -> - -> NOTE: Change -> -> -> `> server_name -> `> to your own servername -> - - -`server { - listen 80; - return 301 https://$host$request_uri; -} -server { - listen 443 ssl; - ssl on; - server_name uddashboard.lab.natelab.us; - ssl_protocols TLSv1.2; - ssl_ciphers HIGH:!aNULL:!MD5; - ssl_certificate /etc/nginx/certs/fullchain.pem; - ssl_certificate_key /etc/nginx/certs/privkey.pem; - location / { - proxy_pass http://localhost:8080; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection keep-alive; - proxy_set_header Host $host; - proxy_cache_bypass $http_upgrade; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } -} -`Now, simply reload nginx - - -`sudo service nginx reload -`You should now have a secure Universal Dashboard server, running as a service. Huzzah! - -> - -> *NOTE: *This is a cross-post from my original blog post: -[https://blog.natelab.us/running-universal-dashboard-with-ubuntu-and-nginx-with-https](https://blog.natelab.us/running-universal-dashboard-with-ubuntu-and-nginx-with-https) -> - - - [1]: https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-linux?view=powershell-6#ubuntu-1804 - [2]: https://www.poshud.com - [3]: https://letsencrypt.org/getting-started/ diff --git a/content/articles/2019-03-26-2019-community-lightning-demos.md b/content/articles/2019-03-26-2019-community-lightning-demos.md deleted file mode 100644 index 9ee6cbe77..000000000 --- a/content/articles/2019-03-26-2019-community-lightning-demos.md +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: 2019 Community Lightning Demos -authors: - - pscookiemonster -date: "2019-03-26T12:59:17+00:00" -categories: - - Events - - PowerShell for Admins - - PowerShell Summit -legacy_featured_image: /wp-content/uploads/2018/02/docs.jpg -aliases: - - /2019/03/2019-community-lightning-demos/ ---- - -### Rambling {.wp-block-heading} - -I'm a huge fan of lightning demos. From the community and PowerShell Team lightning demos we get at [the summit][1], to [PSPowerHour][2], to various local groups and conferences using the format. - -At the 2019 PowerShell + DevOps Global Summit, we'll have about 90 minutes for these demos - now we just need proposals from you! - -So! Why might you be interested in lightning demos? - -### Why Lightning Demos {.wp-block-heading} - -Lightning demos are great for the audience and speakers alike. - -For the audience: - - - - - Fast paced (Less than 10 minutes each) - - - - - Many speakers - - - - - Topic or speaker not what you're looking for? They'll change in a few minutes - - - - - Demos offer enough material to give you ideas and point out where to learn more - - - - - Content is more likely to have a high signal-to-noise ratio given the time constraints - - - -For the speakers: - - - - - No need to come up with a full length session and the content behind it - - - - - It can be comforting knowing you have a bunch of peers joining you - - - - - You can get enough info to the audience for them to get excited and want to learn more - - - - - You get a platform to share something awesome with the community - - - -Hopefully you're up for doing a demo! Let's go over how to get involved. - -### Proposing a Lightning Demo {.wp-block-heading} - -There are a few optional fields, but all we really need is your e-mail, your name, a title, and a quick sentence or paragraph abstract on what you'll talk about. - -All you need to do is sign up here: [bit.ly/doademo19][3] - -We'll be in touch, but to give you a quick idea of how things will go… - -### I've Proposed! What's Next? {.wp-block-heading} - - - - - The 10 minute limit is a hard limit. We'll have to cut short if you hit the mark. Hooking up AV equipment counts as your time - - - - - Don't aim for 10 minutes. Show what you want to show. Does it only take 5 minutes? Even better! - - - - - We have 90 minutes. We'll schedule something like 15+ sessions, but if everyone takes their 10 minutes, we may only see 9 - - - - - We'll give you the order of operations. At you in slot 1-9? You're up! 10-12? There's a good chance we'll get to you. 13-18? You *might* make it if things are speedy, if someone drops out, or if we find extra time - - - - - Worst case? We don't get to see your demo at the summit, but Michael Lombardi and I pester you to submit your demo to [PSPowerHour](https://github.com/PSPowerHour/PSPowerHour), an online lightning demo thing we do - - - - - We'll do our best to get everyone on stage, but we'll likely follow last year's preferences: - - - New speakers over breakout session speakers and previous demo speakersWe'll do our best to get everyone on stage, but we'll likely follow last year's preferences: - - - - - New ideas or interesting variations over well trodden topics - - - - - Community sessions over vendors, on similar topics (why? The happy path isn't always the most helpful!) - - - - - - - - - Yes. I mentioned vendors. The PowerShell Team and Community lightning demos will be done together this year. (Attending) Vendors are welcome to submit demos, but we'll be leaning towards the community in many cases - - - -That's it! We'll take [proposals][3] up through April 15th, and will get back to you on April 17th. This gives you ~two weeks to propose, and ~two weeks to put together an awesome demo - I hope to see you all up there on the stage! - - [1]: https://powershell.org/summit/ - [2]: https://github.com/PSPowerHour/PSPowerHour - [3]: http://bit.ly/doademo19 diff --git a/content/articles/2019-03-28-secure-your-powershell-session-with-jea-and-constrained-endpoints.md b/content/articles/2019-03-28-secure-your-powershell-session-with-jea-and-constrained-endpoints.md deleted file mode 100644 index 347bc5ec5..000000000 --- a/content/articles/2019-03-28-secure-your-powershell-session-with-jea-and-constrained-endpoints.md +++ /dev/null @@ -1,316 +0,0 @@ ---- -title: Secure Your Powershell Session with JEA and Constrained Endpoints -authors: - - Nathaniel Webb (ArtisanByteCrafter) -date: "2019-03-28T20:57:51+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks - - Tools - - Tutorials -aliases: - - /2019/03/secure-your-powershell-session-with-jea-and-constrained-endpoints/ ---- - -## Index {.wp-block-heading} - - - - - [What is a Constrained Endpoint and Why Would I Need One?](#what-is-a-constrained-endpoint-and-why-would-i-need-one) - - - - - [Setup and Configuration](#setup-and-configuration) - - - - - [Using our Endpoint](#using-our-endpoint) - - - -## What is a constrained endpoint and why would I need one? {.wp-block-heading} - -Powershell constrained endpoints are a means of interacting with powershell in a manner consistent with the [principal of least privilege][1]. In Powershell terms, this is referred to as Just-Enough-Administration, or JEA. - -JEA is very well documented, so this won't simply be repeating everything those references detail. Instead, we'll go through a simple, real-world use-case of when and why you might need to deploy one. - -**Scenario:** - -A subset of your team needs permissions to do one single action outside the normal scope of their jobs - The ability to restart a service on a server. This particular application will not accept changes to it without a restart, so this access needs to be delegated to the team responsible for maintaining the application, rather than calling you ever 12-15 minutes throughout the day. - -You might be thinking, why not just email them a link to a one-liner of code and say "Hey, run this in the terminal thingy!" - - -`Invoke-Command -Server myserver -ScriptBlock {Get-Service myservice | Restart-Service} -`First, now the **entire team** needs PS-Remoting rights, administrator rights on the remote server (!), and a contract with HR not to replace the contents of - - -`-ScriptBlock { } -`with something more sinister or destructive. Instead, we're going to let them do just enough administration to accomplish what they need to. - -## Setup and Configuration {.wp-block-heading} - -Now that we've established why we need a constrained endpoint, let's use powershell to create one. For this example, we will have a custom module - - -`mymodule.psm1 -`that exposes two functions: - - - - - -`Get-Foo -`- a custom function we wrote for demonstration purposes - - -- - -`Restart-OurCustomService -`- a function that explicitly calls - - -`Restart-Service -Service OurCustomService -`Here is our custom module, - - -`mymodule.psm1 -`: - - -`Function Get-Foo { - param( - [string] $Message = "Hello World!" - ) - Write-Output $Message - Write-EventLog -LogName 'MyPSEndpoint' -Source 'Get-Foo' -EntryType Information -EventId 2000 -Message "Get-Foo -Message '$Message' was run." -} -Function Restart-OurCustomService { - [cmdletbinding()] - param() - Try { - Restart-Service -Name OurCustomService -Force -ErrorAction Stop -ErrorVariable err - Write-Host -ForegroundColor green "OurCustomService was restarted!" - Write-EventLog -LogName 'MyPSEndpoint' -Source 'Restart-OurCustomService' -EntryType Information -EventId 2001 -Message "Successfully restarted." - } - Catch { - Write-Host -ForegroundColor red "OurCustomService could not be restarted." - Write-EventLog -LogName 'MyPSEndpoint' -Source 'Restart-OurCustomService' -EntryType Error -EventId 2002 -Message "$err" - } -} -`These are the only two commands we want our team members to be able to run. - -**Logging** - -It's always good idea to have some type of logging, so before we even create the actual PS-Session, we're going to create a Windows Event Log source for it: - - -`$Sources = @( - 'Get-Foo', - 'Restart-OurCustomService' -) -New-EventLog -LogName "MyPSEndpoint" -Source $Sources -`Now, we'll be able to see what commands were run through the Event Log, as well as audit any errors thrown. - -**Creating the module** - -We'll need to make sure our module is available on the remote computer. There are several ways to do this, but for this demo, we'll simply create a folder for it in one of the standard module directories. - -The file path will end up being: - - -`C:\Windows\system32\WindowsPowerShell\v1.0\Modules\MyModule\mymodule.psm1 -`. - -**Creating the session configuration file** - -Next, we need to actually create the session endpoint. We need to ensure our users can only use the functions and cmdlets we've specified, so in order to do that we need to configure a few parameters. - -First, is - - -`LanguageMode -`, of which we'll be using the - - -`Restricted -`type. The help file for - - -`New-PSSessionConfigurationFile -`explain exactly what this entails: - -> - -> RestrictedLanguage: Users may run cmdlets and functions, but are not permitted to use script blocks or variables except for the following permitted variables: $PSCulture, $PSUICulture, $True, $False, and $Null. Users may use only the basic comparison operators (-eq, -gt, -lt). Assignment statements, property references, and method calls are not permitted. -> - - -Similar to language mode, we also want to set a custom ExecutionPolicy for our endpoint. For this example, since we really only need our 3 defined commands, we'll use - - -`RemoteSigned -`. For more information on various execution policies, see Microsoft's - -[about_Execution_Policies][2] documentation. - -Last, we will configure a - - -`SessionType -`. Another brief look at - - -`Get-Help New-PSSessionConfigurationFile -`shows: - -> - -> RestrictedRemoteServer: Includes only the following proxy functions: -> -> -> `> Exit-PSSession -> `> , -> -> -> `> Get-Command -> `> , -> -> -> `> Get-FormatData -> `> , -> -> -> `> Get-Help -> `> , -> -> -> `> Measure-Object -> `> , -> -> -> `> Out-Default -> `> , and -> -> -> `> Select-Object -> `> . Use the parameters of this cmdlet to add modules, functions, scripts, and other features to the session. -> - - -Our code to create our session should now look like this: - - -`$sessionparams = @{ - 'Path' = "$env:windir\system32\WindowsPowerShell\v1.0\MyPSEndpoint.pssc" - 'LanguageMode' = 'RestrictedLanguage' - 'ExecutionPolicy' = 'RemoteSigned' - 'SessionType' = 'RestrictedRemoteServer' - 'ModulesToImport' = @('MyModule') -} -New-PSSessionConfigurationFile @sessionparams -`The last thing necessary to begin using our constrained endpoint is to register it with Powershell: - - -`$registerparams = @{ - 'Name' = 'MyPSEndpoint' - 'Path' = "$env:windir\system32\WindowsPowerShell\v1.0\MyPSEndpoint.pssc" - 'ShowSecurityDescriptorUI' = $True -} -Register-PSSessionConfiguration @registerparams -`A very important screen should now appear. This is the SecurityDescriptorUI, which will allow us to delegate permissions for who can access our endpoint. - -> - -> NOTE: You won't be able to set the SecurityDescriptorUI over a remote PSSession, so be sure to use the console to do this part. If you mess this up, you can reset it from a console: -> -> -> `> Get-PSSessionConfiguration -Name MyPSEndpoint | SetPSSessionConfiguration -ShowSecurityDescriptorUI -> `> -> - - -Assign permissions as needed, and then verify your configuration has appropriate permissions: - - -`PS C:\Users\nate> Get-PSSessionConfiguration -Name MyPSEndpoint -Name : MyPSEndpoint -PSVersion : 5.1 -StartupScript : -RunAsUser : -Permission : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed -`Without any additional configuration, commands run through the endpoint will execute as the logged in user. For this example, we need to specify other credentials on the server to execute our commands so our users do not need admin rights themselves. - - -`$RunAsCred = (Get-Credential) -Set-PSSessionConfiguration -Name MyPSEndpoint -RunAsCredential $RunAsCred -`## Using our endpoint {.wp-block-heading} - -Now we're ready to connect and use our endpoint. As a user with permissions delegated via the Security Descriptor above, run the following: - - -`New-PSSession -ComputerName 'remoteserver' -ConfigurationName 'MyPSEndpoint' | Enter-PSSession -`If all goes well, we should be greeted with a remote session PS prompt, as denoted by the - - -`[remoteserver] PS> -`in front of the console prompt. - -Now we can start to explore what we can can't do! (As long as we configured our session correctly) - -Familiar commands like 'Get-ChildItem' won't work, and will result in an 'unknown cmdlet' error. In fact there's literally nothing we can run except the commands in our module, and a few pre-defined commands necessary for the session to function. We can list our options with - - -`Get-Command`[wincore2019demo]: PS> Get-Command -CommandType Name Version Source ------------ ---- ------- ------ -Function Clear-Host -Function Exit-PSSession -Function Get-Command -Function Get-Foo 0.0 MyModule -Function Get-FormatData -Function Get-Help -Function Measure-Object -Function Out-Default -Function Restart-OurCustomService 0.0 MyModule -Function Select-Object -`Our two commands are present from our module, and that's essentially it. The other functions are pre-defined by the session type - - -`RestrictedRemoteServer -`, and are needed for the endpoint to function correctly. - -We can run - - -`Get-Foo -`: - - -`[wincore2019demo]: PS>Get-Foo -Message "I love Powershell!" -I love Powershell! -PS> -`We can run - - -`Restart-OurCustomService -`: - - -`PS> Restart-OurCustomService -OurCustomService could not be restarted. -PS> -`We can see the results of our interactions in the event log. My demo VM has no service "OurCustomService" so it displayed a friendly error to the console, and logged the verbose error to the event log. - -> - -> TIP: In Restricted Language Mode, we do not have access to the global variable $error. However, by utilizing advanced functions, we can specify -ErrorVariable to still be able to write the error to the event log, even if we don't present this information to our users in the console. This can be seen in the Restart-OurCustomService function, and in the screenshot below. -> - - -![Imgur](https://i.imgur.com/Jk0Iwaq.png) - -At this point we've gone over creating a Powershell JEA Endpoint using restricted language and an available custom module for restarting a service. There is a massive amount more you can do with this, but I hope this real-world demonstration has made JEA just a little bit less intimidating and easy to use! - - [1]: https://en.wikipedia.org/wiki/Principle_of_least_privilege - [2]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-5.1 diff --git a/content/articles/2019-03-29-icymi-powershell-week-of-29-march-2019.md b/content/articles/2019-03-29-icymi-powershell-week-of-29-march-2019.md deleted file mode 100644 index 402aade74..000000000 --- a/content/articles/2019-03-29-icymi-powershell-week-of-29-march-2019.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 29-March-2019" -authors: - - Mark Roloff -date: "2019-03-29T15:00:17+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/03/icymi-powershell-week-of-29-march-2019/ ---- - -Topics include an update to PSScriptAnalyzer, Pester, and customizing SharePoint menus. - - - -Content curated by Robin Dadswell and Mark Roloff. - -###### [][1][_PowerShell ScriptAnalyzer Version 1.18.0 Released_][2] {.wp-block-heading} - -by Jim Truher on March 22nd - -A new ScriptAnalyzer is out. Faster, better DSC support, and better handling of multi-line pipelines. Pick it up from the PSGallery! - -###### [][3][_Pee-Object_][4] {.wp-block-heading} - -by Danny Meister on March 26th - -Ever have a need to print some progress or the current object to the console in the middle of your pipeline? Well, now there's a function for that. - -###### [][5][_Programmatically change the New Menu in SharePoint Online using PowerShell_][6] {.wp-block-heading} - -by Paul Matthews on March 24th - -Customizing document library menus in SharePoint gets a fun facelift with Paul's scripted method. - -###### [][7][_F7 is the greatest PowerShell hotkey that no one uses any more. We must fix this_][8] {.wp-block-heading} - -by Scott Hanselman on March 26th - -Scott discusses the absence of this little gem of a feature and a small workaround for using it. There're some nice tips in the comments too. - -###### [][9][_Enforcing Code Style using Pester_][10] {.wp-block-heading} - -by Chris Gardner on March 26th - -If validating code style is something you need, Chris has an interesting approach to it via unit tests. - -###### [][11][_General Availability of PowerShell Core 6.2_][12] {.wp-block-heading} - -by Steve Lee on March 28th - -Has it really been 6 months already? A large number of changes have been packed into this release, so check out the changelog for a little lite reading. - -###### [][13][_Youtube: Pester with Kevin Marquette - March 28, 2019_][14] {.wp-block-heading} - -From the Austin PSUG, Kevin leads a demonstration on using Pester to unit test your scripts. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190329.md#powershell-scriptanalyzer-version-1180-released - [2]: https://devblogs.microsoft.com/powershell/powershell-scriptanalyzer-version-1-18-0-released/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190329.md#pee-object - [4]: https://www.dannymeister.com/2019/03/26/pee-object.html - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190329.md#programmatically-change-the-new-menu-in-sharepoint-online-using-powershell - [6]: https://cann0nf0dder.wordpress.com/2019/03/24/programmatically-change-the-new-menu-in-sharepoint-online-using-powershell/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190329.md#f7-is-the-greatest-powershell-hotkey-that-no-one-uses-any-more-we-must-fix-this - [8]: https://www.hanselman.com/blog/F7IsTheGreatestPowerShellHotkeyThatNoOneUsesAnyMoreWeMustFixThis.aspx - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190329.md#enforcing-code-style-using-pester - [10]: https://chrislgardner.github.io/powershell/2019/03/26/enforcing-style-with-pester.html - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190329.md#general-availability-of-powershell-core-62 - [12]: https://devblogs.microsoft.com/powershell/general-availability-of-powershell-core-6-2/ - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190329.md#youtube-pester-with-kevin-marquette---march-28-2019 - [14]: https://www.youtube.com/watch?v=x3ufUibf6eI diff --git a/content/articles/2019-04-05-icymi-powershell-week-of-5-april-2019.md b/content/articles/2019-04-05-icymi-powershell-week-of-5-april-2019.md deleted file mode 100644 index e1031366a..000000000 --- a/content/articles/2019-04-05-icymi-powershell-week-of-5-april-2019.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 5-April-2019" -authors: - - Mark Roloff -date: "2019-04-05T15:00:51+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/04/icymi-powershell-week-of-5-april-2019/ ---- - -Topics include remoting with SSH, sending SMS alerts, some live stream coding, and keybinds that you may not have known about. - - - -Content curated by Robin Dadswell and Mark Roloff - -###### [][1][_Master User Creator [PowerShell GUI Software] v2 Update_][2] {.wp-block-heading} - -by Brad Wyatt on April 1st - -MUC, if you haven't seen it, is a powerful little tool that makes account creation in AD or O365 a real snap. - -###### [][3][_The PowerShell Gallery is now more Accessible_][4] {.wp-block-heading} - -by Sydney Smith on April 1st - -Screen readers rejoice! The Gallery has received some usability improvements to make everyone's experience a little nicer. - -###### [][5][_Sending text messages from PowerShell_][6] {.wp-block-heading} - -by Mike Treit on March 30th - -Maybe you get enough emails as it is, so text alerts from your scripts can be a gentler and lighter alternative. - -###### [][7][_Setup Powershell SSH Remoting In Powershell 6_][8] {.wp-block-heading} - -by Thomas Maurer on April 4th - -If you've been curious about using SSH with PowerShell, Thomas has a great step-by-step guide to help you get going. - -###### [][9][_Reddit /r/PowerShell - Popular Weekly Post_][10] {.wp-block-heading} - -Awesome Reddit tips strikes again, as /u/RC-7201 discovers a keybind to clear your screen and more people chime in with their hidden keybind gems. - -###### [][11][_Tweet of the Week_][12] {.wp-block-heading} - -A Docker container loaded up with everything you need to get crackin' with PowerShell development? Yes, please! - -###### [][13][_Twitch: PowerShell Adventures w/ Nate @ SCRT HQ_][14] {.wp-block-heading} - -Hang out with Nate Ferrel while he works through some open issues with the PSGSuite module. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190405.md#master-user-creator-powershell-gui-software-v2-update - [2]: https://www.thelazyadministrator.com/2019/04/01/master-user-creator-powershell-gui-software-v2-update/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190405.md#the-powershell-gallery-is-now-more-accessible - [4]: https://devblogs.microsoft.com/powershell/the-powershell-gallery-is-now-more-accessible/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190405.md#sending-text-messages-from-powershell - [6]: https://mtreit.net/notestoself/2019/03/30/sending-text-messages-from-powershell/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190405.md#setup-powershell-ssh-remoting-in-powershell-6 - [8]: https://www.thomasmaurer.ch/2019/04/setup-powershell-ssh-remoting-in-powershell-6/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190405.md#reddit-rpowershell---popular-weekly-post - [10]: https://old.reddit.com/r/PowerShell/comments/b8y4mx/i_was_today_years_old/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190405.md#tweet-of-the-week - [12]: https://twitter.com/TylerLeonhardt/status/1113078631771799553 - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190405.md#twitch-powershell-adventures-w-nate--scrt-hq - [14]: https://www.twitch.tv/videos/403373735 diff --git a/content/articles/2019-04-09-hear-hear-for-here-strings.md b/content/articles/2019-04-09-hear-hear-for-here-strings.md deleted file mode 100644 index 91f297acc..000000000 --- a/content/articles/2019-04-09-hear-hear-for-here-strings.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Hear, Hear for Here-Strings -authors: - - pwshliquori -date: "2019-04-09T01:40:55+00:00" -categories: - - Tips and Tricks - - Tools -aliases: - - /2019/04/hear-hear-for-here-strings/ ---- - -Running commands in PowerShell that require a format that will not run natively in PowerShell could be a difficult task, or can it? PowerShell provides a way to store, for example, a JSON as a string, enter here-string. A here-string is a single or double quoted string in which the quotation marks are interpreted literally. An example would be invoking a Rest API that requires a JSON body. Lets take a look at an example and see how here-strings work. - -Trying to store JSON in a variable will return the following error: - - -`$Body = -{ - "apple": [ - "red", - "green" - ], - "grape": [ - "green", - "red" - ], - "blueberry": "blue" -} -At line:3 char:12 -+ "apple": [ -+ ~ -Unexpected token ':' in expression or statement. -At line:6 char:6 -+ ], -+ ~ -Missing argument in parameter list. -At line:10 char:6 -+ ], -+ ~ -Missing argument in parameter list. - + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException - + FullyQualifiedErrorId : UnexpectedToken -`Oh man... What happened? PowerShell does not understand what is being done and throws an error for an unexpected token. Lets declare this as a here-string by using - - -`@' -`at the start and end of the JSON variable. - - -`$Body = @' -{ - "apple": [ - "red", - "green" - ], - "grape": [ - "green", - "red" - ], - "blueberry": "blue" -} -'@ -`Great! No errors were thrown, but… Why? - -Notice the - - -`@' -`at the beginning and end, this tells PowerShell to create a here-string and store this string in a variable. Also, a rule to follow: the - - -`@' -`must be on their own line at the start and end of the declaration or the here-string will not be declared. - - -`# This will not work, PowerShell will not throw an error, but thinks you are still working to create something. -$Body = @'{ - "apple": [ - "red", - "green" - ], - "grape": [ - "green", - "red" - ], - "blueberry": "blue" -} -'@ -`We can also store variables in a here-string, but that requires double quotes after the - - -`@ -`. The same rules apply as using single quoted here-strings. - - -`$Red = 'red' -$Green = 'green' -$Blue = 'blue' -$Body = @" -{ - "apple": [ - $Red, - $Green - ], - "grape": [ - $Green, - $Red - ], - "blueberry": $Blue -} -"@ -`Now that we built our here-string, we can now invoke a Rest API and do something with it. This will help when a vendor supplies a JSON payload to be used in a Rest API, all that needs to be done is substitute your values in a here-string and invoke the Rest API. As always, practice makes perfect, try running examples in the console before running in a production environment. Here-strings will save you some lines of code and time when building your PowerShell scripts. - -To learn about here-strings, visit Microsoft's documentation on quoting rules. -[https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-6][1] - -Chris Liquori - Twitter: [@pwshliquori][2] - - [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-6 - [2]: https://twitter.com/pwshliquori diff --git a/content/articles/2019-04-12-icymi-powershell-week-of-12-april-2019.md b/content/articles/2019-04-12-icymi-powershell-week-of-12-april-2019.md deleted file mode 100644 index c48d90177..000000000 --- a/content/articles/2019-04-12-icymi-powershell-week-of-12-april-2019.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 12-April-2019" -authors: - - Mark Roloff -date: "2019-04-12T15:00:00+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/04/icymi-powershell-week-of-12-april-2019/ ---- - -Topics include splatting, PSRemoting to Azure VMs, and honey users. - - - -Special thanks to Robin Dadswell and Mark Roloff - -###### [][1][_Moving my blog comments from Disqus to Github issues using PowerShell_][2] {.wp-block-heading} - -by François-Xavier Cat on April 7th - -More than a few fun goodies in here, from working with XML to using the PS GitHub module. - -###### [][3][_PowerShell tricks: Splatting_][4] {.wp-block-heading} - -by Roberth Strand on April 5th - -If you're not already splatting, take a look in here. All the cool kids are doing it and anyone that has to read your scripts later on will likely thank you. It's a very simple, yet seriously versatile addition to your toolbox. - -###### [][5][_PowerShell Basics: Connecting to VMs with Azure PSRemoting_][6] {.wp-block-heading} - -by Michael Bender on April 10th - -Whether from the comfort of your local shell or the Cloud Shell, remote PowerShell to your Azure VMs is quick and easy to get started with. - -###### [][7][_BlueHive_][8] {.wp-block-heading} - -Built with Universal Dashboard, BlueHive is a utility that lets you create and manage honey users in your environment. Thanks for this awesome tool, Lee Berg! - -###### [][9][_Reddit /r/PowerShell - Popular Weekly Post_][10] {.wp-block-heading} - -Less educational or interesting, and more encouraging. If you're on the fence with jumping deeper into PowerShell, here's someone sharing their story of how it helped kick their career up a few notches. - -###### [][11][_Tweet of the Week_][12] {.wp-block-heading} - -Playing with - - -`Invoke-WebRequest -`is a little bit more fun with Chrome's DevTools letting you copy requests to your clipboard. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190412.md#moving-my-blog-comments-from-disqus-to-github-issues-using-powershell - [2]: https://lazywinadmin.com/2019/04/moving_blog_comments.html - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190412.md#powershell-tricks-splatting - [4]: https://blog.destruktive.one/powershell-tricks-splatting/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190412.md#powershell-basics-connecting-to-vms-with-azure-psremoting - [6]: https://techcommunity.microsoft.com/t5/ITOps-Talk-Blog/PowerShell-Basics-Connecting-to-VMs-with-Azure-PSRemoting/ba-p/428403 - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190412.md#bluehive - [8]: https://github.com/leeberg/BlueHive - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190412.md#reddit-rpowershell---popular-weekly-post - [10]: https://old.reddit.com/r/PowerShell/comments/bbz6vj/i_got_a_job_for_my_ability_with_powershell_and_im/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190412.md#tweet-of-the-week - [12]: https://twitter.com/DanielSilv9/status/1116375543581216770 diff --git a/content/articles/2019-04-18-learn-to-use-verbose-output-streams-in-your-pester-tests.md b/content/articles/2019-04-18-learn-to-use-verbose-output-streams-in-your-pester-tests.md deleted file mode 100644 index 88b8fc919..000000000 --- a/content/articles/2019-04-18-learn-to-use-verbose-output-streams-in-your-pester-tests.md +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: Learn To Use Verbose Output Streams In Your Pester Tests -authors: - - Nathaniel Webb (ArtisanByteCrafter) -date: "2019-04-18T19:51:31+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks - - Tutorials -aliases: - - /2019/04/learn-to-use-verbose-output-streams-in-your-pester-tests/ ---- - -I'm going to file this under "Either I'm a genius, or there's a much better way and everyone knows it except for me." - -I recently began adding a suite of Pester tests to one of my projects and I found myself needing to mock some unit tests against a particular function that would modify a variable based on the parameter specified. Since all the functions I write nowadays are considered advanced functions (and yours should be too, they're free!), I discovered a nice way to test the function's actions using the - - -`-Verbose -`stream output. - -> - -> Full source code for these examples is available on the Pester branch of my KaceSMA project [on GitHub](https://github.com/ArtisanByteCrafter/KaceSMA/tree/pester) -> - - -## A Real World Example {.wp-block-heading} - -I'm going to use a public function Get-SmaAsset for this example. For this particular function, I'm wrapping an API call and passing a specific endpoint as a string, determined by the parameter set(s) given. Here is the relevant bit of code: - - -`Begin { - $Endpoint = '/api/asset/assets/' - If ($AssetID) { - $Endpoint = "/api/asset/assets/$AssetID/" - If ($AsBarcodes) { - $Endpoint = "/api/asset/assets/$AssetID/barcodes" - } - } -} -`We see - - -`$Endpoint -`being dynamically defined according to the parameters fed to the parent - - -`Get-SmaAsset -`function. I needed to ensure that the correct value of - - -`$Endpoint -`was being fed to the next part of the chain, which was the - - -`Invoke-RestMethod -`call to the API itself. The last thing I want to debug is why my API call is hitting the wrong endpoint. (Not to mention the potentially disastrous results when HTTP methods other than GET are used!) - -You don't need an intimate knowledge of the project to understand what's going on here - I'm really just wanting to make sure that this particular function only uses a single GET method, and that it calls the correct endpoint. An easy way to do this is by leveraging the verbose output stream to ensure that - - -`Get-SmaAsset -`is in fact, seeking out the correct endpoint with the correct HTTP method. - -Here's part of what the function returns when run verbosely under normal circumstances: - - -`PS> Get-SmaAsset -Server 'https://server.example.com' -Credential (Get-Credential) -Verbose -VERBOSE: Performing the operation "GET /api/asset/assets/" on target "https://server.example.com". -`## Plugging It Into Pester {.wp-block-heading} - -Pester is the perfect tool to test that my API calls go out consistently every time, and to do so I just need to use the Verbose output stream, then mock some response data, and then I should get a pretty clear idea exactly what is going on within my function scope. - -Let's see what the 'Backend Calls' context block looks like for this particular test: - - -`Context 'Backend Calls' { - Mock New-ApiGetRequest { } -ModuleName KaceSMA - Mock New-ApiPostRequest { } -ModuleName KaceSMA - Mock New-ApiPutRequest { } -ModuleName KaceSMA - Mock New-ApiDeleteRequest { } -ModuleName KaceSMA - $MockCred = New-Object System.Management.Automation.PSCredential ('fooUser', (ConvertTo-SecureString 'bar' -AsPlainText -Force)) - $GenericParams = @{ - Server = 'https://foo' - Credential = $MockCred - Org = 'Default' - QueryParameters = "?paging=50" - } - $AssetIDParams = @{ - Server = 'https://foo' - Credential = $MockCred - Org = 'Default' - AssetID = '1234' - QueryParameters = "?paging=50" - } - $AsBarcodesParams = @{ - Server = 'https://foo' - Credential = $MockCred - Org = 'Default' - AssetID = '1234' - AsBarcodes = $True - QueryParameters = "?paging=50" - } - Get-SmaAsset @AssetIDParams - It 'should call New-ApiGETRequest' { - Assert-MockCalled -CommandName New-ApiGETRequest -ModuleName KaceSMA -Times 1 - } - It 'should not call additional HTTP request methods' { - $Methods = @('POST', 'DELETE', 'PUT') - Foreach ($Method in $Methods) { - Assert-MockCalled -CommandName ("New-Api$Method" + "Request") -ModuleName KaceSMA -Times 0 - } - } - It "should call generic endpoint if AssetID parameter is NOT specified" { - $Generic = $(Get-SmaAsset @GenericParams -Verbose) 4>&1 - $Generic | Should -Be 'Performing the operation "GET /api/asset/assets" on target "https://foo".' - } - It "should call AssetID endpoint if AssetID parameter is specified" { - $WithAssetID = $(Get-SmaAsset @AssetIDParams -Verbose) 4>&1 - $WithAssetID | Should -Be 'Performing the operation "GET /api/asset/assets/1234" on target "https://foo".' - } - It "should call AsBarcodes endpoint if AsBarcodes parameter is specified" { - $AsBarcodes = $(Get-SmaAsset @AsBarcodesParams -Verbose) 4>&1 - $AsBarcodes | Should -Be 'Performing the operation "GET /api/asset/assets/1234/barcodes" on target "https://foo".' - } -} -`Now, let's focus on a single test. This is where the 'cool' factor of output streams comes into play. $Generic performs a mocked call to our function, which has a curious bit at the end, - - -`4>&1 -`. - - -`It "should call generic endpoint if AssetID parameter is NOT specified" { - $Generic = $(Get-SmaAsset @GenericParams -Verbose) 4>&1 - $Generic | Should -Be 'Performing the operation "GET /api/asset/assets" on target "https://foo".' - } -`What this does is take the verbose output stream ( - - -`4 -`) and redirect it to stdout ( - - -`>&1 -`) for our test to report on. The beauty of this is in it's simplicity. We don't have to modify anything in our code itself since it's an advanced function, and - - -`-Verbose -`is included by default. - -When we do this we get several key benefits. By explicitly stating the known-good verbose output in our tests, it would begin failing if any of these scenarios occurred in our codebase: - - - - - If the endpoint is changed intentionally - - - - - If the endpoint selection logic is flawed - - - - - If the HTTP method declared is changed - - - - - If the HTTP Method is ever used more than once - - - -I hope this has been helpful in exploring how the verbose output stream can help detect stealthy bugs in your codebase. diff --git a/content/articles/2019-04-19-get-command-one-of-the-best-cmdlets-besides-get-help.md b/content/articles/2019-04-19-get-command-one-of-the-best-cmdlets-besides-get-help.md deleted file mode 100644 index 5aea00086..000000000 --- a/content/articles/2019-04-19-get-command-one-of-the-best-cmdlets-besides-get-help.md +++ /dev/null @@ -1,321 +0,0 @@ ---- -title: Get-Command – One of the best Cmdlets besides Get-Help -authors: - - pwshliquori -date: "2019-04-19T16:59:06+00:00" -categories: - - PowerShell for Admins -aliases: - - /2019/04/get-command-one-of-the-best-cmdlets-besides-get-help/ ---- - -So laying on the sofa, sick, bored out of my mind, what better way to spend my time then writing a blog post about - - -`Get-Command -`. The - - -`Get-Command -`Cmdlet is apart of the Microsoft.PowerShell.Core module, it was introduced in PowerShell version 1.0 and is one of the most useful Cmdlets to find a command you are looking for. It has a variety of parameters that allow you to search for a command by using a combination of parameters or just using - - -`Get-Command -`on its own. Go ahead and run - - -`Get-Command -`in your console before continuing with this post. As you can see, it returns all commands that are available in your PowerShell session. Later on, we will go through several example on how we can leverage the parameters to find specifics commands. - -Lets start with a basic example and then build on it to get a specific command, - - -`Get-ADUser -`. First, lets get all of the command that are already imported into our PowerShell session. - - -`Get-Command -ListImported -CommandType Name Version Source ------------ ---- ------- ------ -Function New-HiiDistributionGroup 1.0.0.0 ExchangeTools -Function New-HiiExchangeSession 1.0.0.0 ExchangeTools -Function New-HiiMailContact 1.0.0.0 ExchangeTools -Function Add-HiiSmtpEmailAddress 1.0.0.0 ExchangeTools -Function New-HiiMailbox 1.0.0.0 ExchangeTools -Function New-HiiUserMailboxDistributionList 1.0.0.0 ExchangeTools -Function Get-HiiSmtpEmailAddress 1.0.0.0 ExchangeTools -Function Add-HiiDistributionGroupMember 1.0.0.0 ExchangeTools -Function Remove-HiiSmtpEmailAddress 1.0.0.0 ExchangeTools -Function Export-HiiMailboxToPST 1.0.0.0 ExchangeTools -Cmdlet Remove-Job 3.0.0.0 Microsoft.PowerShell.Core -Cmdlet Register-PSSessionConfiguration 3.0.0.0 Microsoft.PowerShell.Core -Cmdlet Get-Help 3.0.0.0 Microsoft.PowerShell.Core -Cmdlet Remove-Module 3.0.0.0 Microsoft.PowerShell.Core -Cmdlet Out-Null 3.0.0.0 Microsoft.PowerShell.Core -Cmdlet Receive-Job 3.0.0.0 Microsoft.PowerShell.Core -Cmdlet Receive-PSSession 3.0.0.0 Microsoft.PowerShell.Core -Cmdlet Register-ArgumentCompleter 3.0.0.0 Microsoft.PowerShell.Core -Cmdlet Get-History 3.0.0.0 Microsoft.PowerShell.Core -Cmdlet Get-Job 3.0.0.0 Microsoft.PowerShell.Core -`The output does not have any Cmdlets from the ActiveDirectory module we need to find the - - -`GetADUser -`. If you have RSAT Tools installed, import the module using - - -`Import-Module ActiveDirectory -`and re-run - - -`Get-Command -ListImported -`. As you can see now, a list of Active Directory Cmdlets are available. We can now start getting more complex to find - - -`Get-ADUser -`. - -Lets get limit the scope of our command to get only the ActiveDirectory module Cmdlets that are available. - - -`Get-Command -Module ActiveDirectory -CommandType Name Version Source ------------ ---- ------- ------ -Cmdlet Add-ADCentralAccessPolicyMember 1.0.1.0 activedirectory -Cmdlet Add-ADComputerServiceAccount 1.0.1.0 activedirectory -Cmdlet Add-ADDomainControllerPasswordReplicationPolicy 1.0.1.0 activedirectory -Cmdlet Add-ADFineGrainedPasswordPolicySubject 1.0.1.0 activedirectory -Cmdlet Add-ADGroupMember 1.0.1.0 activedirectory -Cmdlet Add-ADPrincipalGroupMembership 1.0.1.0 activedirectory -Cmdlet Add-ADResourcePropertyListMember 1.0.1.0 activedirectory -Cmdlet Clear-ADAccountExpiration 1.0.1.0 activedirectory -Cmdlet Clear-ADClaimTransformLink 1.0.1.0 activedirectory -Cmdlet Disable-ADAccount 1.0.1.0 activedirectory -Cmdlet Disable-ADOptionalFeature 1.0.1.0 activedirectory -Cmdlet Enable-ADAccount 1.0.1.0 activedirectory -Cmdlet Enable-ADOptionalFeature 1.0.1.0 activedirectory -Cmdlet Get-ADAccountAuthorizationGroup 1.0.1.0 activedirectory -Cmdlet Get-ADAccountResultantPasswordReplicationPolicy 1.0.1.0 activedirectory -Cmdlet Get-ADAuthenticationPolicy 1.0.1.0 activedirectory -Cmdlet Get-ADAuthenticationPolicySilo 1.0.1.0 activedirectory -Cmdlet Get-ADCentralAccessPolicy 1.0.1.0 activedirectory -Cmdlet Get-ADCentralAccessRule 1.0.1.0 activedirectory -Cmdlet Get-ADClaimTransformPolicy 1.0.1.0 activedirectory -Cmdlet Get-ADClaimType 1.0.1.0 activedirectory -Cmdlet Get-ADComputer 1.0.1.0 activedirectory -`Now we filtered only the ActiveDirectory module and can now filter down even more. - - -`Get-Command -`has a parameter - - -`-Verb -`that allows us to filter by using the verb of the Cmdlet (e.g. Get, Set, Import, Reset). Lets filter by verb - - -`Get -`and view the output. - - -`Get-Command -Module ActiveDirectory -Verb Get -CommandType Name Version Source ------------ ---- ------- ------ -Cmdlet Get-ADAccountAuthorizationGroup 1.0.1.0 activedirectory -Cmdlet Get-ADAccountResultantPasswordReplicationPolicy 1.0.1.0 activedirectory -Cmdlet Get-ADAuthenticationPolicy 1.0.1.0 activedirectory -Cmdlet Get-ADAuthenticationPolicySilo 1.0.1.0 activedirectory -Cmdlet Get-ADCentralAccessPolicy 1.0.1.0 activedirectory -Cmdlet Get-ADCentralAccessRule 1.0.1.0 activedirectory -Cmdlet Get-ADClaimTransformPolicy 1.0.1.0 activedirectory -Cmdlet Get-ADClaimType 1.0.1.0 activedirectory -Cmdlet Get-ADComputer 1.0.1.0 activedirectory -Cmdlet Get-ADComputerServiceAccount 1.0.1.0 activedirectory -Cmdlet Get-ADDCCloningExcludedApplicationList 1.0.1.0 activedirectory -Cmdlet Get-ADDefaultDomainPasswordPolicy 1.0.1.0 activedirectory -Cmdlet Get-ADDomain 1.0.1.0 activedirectory -Cmdlet Get-ADDomainController 1.0.1.0 activedirectory -Cmdlet Get-ADDomainControllerPasswordReplicationPolicy 1.0.1.0 activedirectory -Cmdlet Get-ADDomainControllerPasswordReplicationPolicy... 1.0.1.0 activedirector -`Great! we now have all Cmdlets that start with the verb - - -`Get -`. Lets keep building, another parameter - - -`-Noun -`. We know the prefix for most ActiveDirectory Cmdlets start with AD, so lets use the noun User and see what the output is. - - -`Get-Command -Module ActiveDirectory -Verb Get -Noun *User -CommandType Name Version Source ------------ ---- ------- ------ -Cmdlet Get-ADUser 1.0.1.0 activedirectory -`Success! We found exactly the command we needed to. But did you notice the - - -`* -`character in the noun parameter? This is because we know the prefix is - - -`AD -`and the noun parameter acts as a filter, this tells PowerShell to find anything that has User in the noun. You can do the same for the parameter - - -`-Verb -`. - - - -So now what? We found the command, but what else can we do with - - -`Get-Command -`. Besides just getting the command, we can get syntax, command info, or search by parameter type or parameter name. Lets see the syntax of - - -`Get-ADUser -`so we can better understand what it does. - - -`Get-Command -Module ActiveDirectory -Verb Get -Noun *User -Syntax -Get-ADUser -Filter [-AuthType ] [-Credential ] [-Properties ] [-ResultPageSize ] [-ResultSetSize ] [-SearchBase ] [-SearchScope ] [-Server ] [] -Get-ADUser [-Identity] [-AuthType ] [-Credential ] [-Partition ] [-Properties ] [-Server ] [] -Get-ADUser -LDAPFilter [-AuthType ] [-Credential ] [-Properties ] [-ResultPageSize ] [-ResultSetSize ] [-SearchBase ] [-SearchScope ] [-Server ] [] -`We can now see the parameters and parameter types of each. This is a great way to understand how the Cmdlet works and how we can use it in our own code. - -Now that we built our command to find just the - - -`Get-ADUser -`and get the syntax. Lets look at another example that searches for a certain parameter name - - -`Identity -`. Using the parameter - - -`ParameterName -`will allow us to filter through Cmdlets in the ActiveDirectory module that has an - - -`-Identity -`parameter. - - -`Get-Command -Module ActiveDirectory -ParameterType IdentityCommandType Name Version Source ------------ ---- ------- ------ -Cmdlet Add-ADCentralAccessPolicyMember 1.0.1.0 activedirectory -Cmdlet Add-ADComputerServiceAccount 1.0.1.0 activedirectory -Cmdlet Add-ADDomainControllerPasswordReplicationPolicy 1.0.1.0 activedirectory -Cmdlet Add-ADFineGrainedPasswordPolicySubject 1.0.1.0 activedirectory -Cmdlet Add-ADGroupMember 1.0.1.0 activedirectory -Cmdlet Add-ADPrincipalGroupMembership 1.0.1.0 activedirectory -Cmdlet Add-ADResourcePropertyListMember 1.0.1.0 activedirectory -Cmdlet Clear-ADAccountExpiration 1.0.1.0 activedirectory -Cmdlet Clear-ADClaimTransformLink 1.0.1.0 activedirectory -Cmdlet Disable-ADAccount 1.0.1.0 activedirectory -Cmdlet Disable-ADOptionalFeature 1.0.1.0 activedirectory -Cmdlet Enable-ADAccount 1.0.1.0 activedirectory -Cmdlet Enable-ADOptionalFeature 1.0.1.0 activedirectory -Cmdlet Get-ADAccountAuthorizationGroup 1.0.1.0 activedirectory -Cmdlet Get-ADAccountResultantPasswordReplicationPolicy 1.0.1.0 activedirectory -Cmdlet Get-ADAuthenticationPolicy 1.0.1.0 activedirectory -Cmdlet Get-ADAuthenticationPolicySilo 1.0.1.0 activedirectory -Cmdlet Get-ADCentralAccessPolicy 1.0.1.0 activedirectory -Cmdlet Get-ADCentralAccessRule 1.0.1.0 activedirectory -Cmdlet Get-ADClaimTransformPolicy 1.0.1.0 activedirectory -Cmdlet Get-ADClaimType 1.0.1.0 activedirectory -Cmdlet Get-ADComputer 1.0.1.0 activedirectory -Cmdlet Get-ADComputerServiceAccount 1.0.1.0 activedirectory -Cmdlet Get-ADDefaultDomainPasswordPolicy 1.0.1.0 activedirectory -Cmdlet Get-ADDomain 1.0.1.0 activedirectory -`We have found all of the command that have a parameter name of - - -`Identity -`. For purposes, there are a limited set listed above, the actual total number of Cmdlets that have the parameter of - - -`Identity -`is 117. - - - -The last two parameters to take a look at are the - - -`-Name -`and - - -`-ShowCommandInfo -`parameters. If we already know the Cmdlet name and want to find which module it is in, we can use the - - -`-Name -`parameter and view the Source. - - -`Get-Command -Name Get-ADUser -CommandType Name Version Source ------------ ---- ------- ------ -Cmdlet Get-ADUser 1.0.1.0 activedirectory -`The command found the Cmdlet and is found in the ActiveDirectory module. The final parameter will build on the previous example, but we will add the - - -`-ShowCommandInfo -`parameter. The - - -`-ShowCommandInfo -`show the information pertaining to the command you a attempting to get. - - -`Get-Command -Name Get-ADUser -ShowCommandInfo -Name : Get-ADUser -ModuleName : activedirectory -Module : @{Name=activedirectory} -CommandType : Cmdlet -Definition : - Get-ADUser -Filter [-AuthType ] [-Credential ] [-Properties ] [-ResultPageSize ] [-ResultSetSize ] [-SearchBase - ] [-SearchScope ] [-Server ] [] - Get-ADUser [-Identity] [-AuthType ] [-Credential ] [-Partition ] [-Properties ] [-Server ] [] - Get-ADUser -LDAPFilter [-AuthType ] [-Credential ] [-Properties ] [-ResultPageSize ] [-ResultSetSize ] [-SearchBase - ] [-SearchScope ] [-Server ] [] -ParameterSets : {@{Name=Filter; IsDefault=True; Parameters=System.Management.Automation.PSObject[]}, @{Name=Identity; IsDefault=False; Parameters=System.Management.Automation.PSObject[]}, - @{Name=LdapFilter; IsDefault=False; Parameters=System.Management.Automation.PSObject[]}} -`Now we can see all of the information in the - - -`Get-ADUser -`Cmdlet, including syntax information. - - - -We took a look at multiple examples of the - - -`Get-Command -`Cmdlet that can help us build tools in our scripts and module. It is a very help tool and that is why, (IMHO), it is one of the best Cmdlets to use besides - - -`Get-Help -`. To find out more information about - - -`Get-Command -`view Microsoft's documentation. - -[Get-Command ](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/get-command?view=powershell-6) - -Note: At the time of writing this post, PowerShell is in version 6. The - - -`-ShowCommandInfo -`parameter was introduced in PowerShell version 5.0. - -Update: Get-Command was introduced in PowerShell v1.0, not 3.0. Thanks to Ryan Yates for the correction. Microsoft's docs on Get-Command only goes back to v3.0. - -pwshliquori diff --git a/content/articles/2019-04-19-icymi-powershell-week-of-19-april-2019.md b/content/articles/2019-04-19-icymi-powershell-week-of-19-april-2019.md deleted file mode 100644 index 51c26f50e..000000000 --- a/content/articles/2019-04-19-icymi-powershell-week-of-19-april-2019.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 19-April-2019" -authors: - - Mark Roloff -date: "2019-04-19T15:00:35+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/04/icymi-powershell-week-of-19-april-2019/ ---- - -Topics include DSC, Pester, validation attributes, and Azure AD. - - - -Special thanks to Robin Dadswell and Mark Roloff. - -###### [][1][_Defensive PowerShell_][2] {.wp-block-heading} - -by Christopher Kuech on April 13th - -Did you know that you can use validation attributes outside of a _param_ block? Mind. Blown. - -###### [][3][_Desired State Configuration (DSC) – Get Started_][4] {.wp-block-heading} - -by Nedim Mehic on April 16th - -If you're still looking to get your feet wet with DSC, this is one of the more detailed intros we've run across and is well worth your time. - -###### [][5][_Get Users from Azure AD with a large number of Registered Devices_][6] {.wp-block-heading} - -by Ben Whitmore on April 16th - -A quick and easy way to report on the number of registered devices for multiple users, rather than one at a time. - -###### [][7][_Tweet of the Week_][8] {.wp-block-heading} - -Here's a fun graphical cheatsheet for various PowerShell concepts. - -###### [][9][_Youtube: SoCal PowerShell: Kevin Marquette Unplugged_][10] {.wp-block-heading} - -Kevin Marquette talks some shop before jumping into debugging with VSCode. - -###### [][11][_Youtube: Pester: Why You Should -Be Using Pester with Jonathan Moss_][12] {.wp-block-heading} - -From the Raleigh Triangle User Group, Jonathon Moss will sell you on using Pester. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190419.md#defensive-powershell - [2]: https://medium.com/@cjkuech/defensive-powershell-with-validation-attributes-8e7303e179fd - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190419.md#desired-state-configuration-dsc--get-started - [4]: https://nedimmehic.org/2019/04/16/desired-state-configuration-dsc-get-started/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190419.md#get-users-from-azure-ad-with-a-large-number-of-registered-devices - [6]: https://byteben.com/bb/get-users-from-azure-ad-with-a-large-number-of-registered-devices/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190419.md#tweet-of-the-week - [8]: https://twitter.com/ADTipsTricks/status/664261417588146176 - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190419.md#youtube-socal-powershell-kevin-marquette-unplugged - [10]: https://youtu.be/hRhFwDnneJw - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190419.md#youtube-pester-why-you-should--be-using-pester-with-jonathan-moss - [12]: https://www.youtube.com/watch?v=FP7W4kP7Dig diff --git a/content/articles/2019-04-20-azure-devops-enable-allow-scripts-to-access-the-oauth-token-using-powershell.md b/content/articles/2019-04-20-azure-devops-enable-allow-scripts-to-access-the-oauth-token-using-powershell.md deleted file mode 100644 index 28197338a..000000000 --- a/content/articles/2019-04-20-azure-devops-enable-allow-scripts-to-access-the-oauth-token-using-powershell.md +++ /dev/null @@ -1,189 +0,0 @@ ---- -title: "Azure DevOps – Enable \"Allow scripts to access the OAuth token\" using PowerShell" -authors: - - pwshliquori -date: "2019-04-20T23:20:30+00:00" -categories: - - PowerShell for Admins -aliases: - - /2019/04/azure-devops-enable-allow-scripts-to-access-the-oauth-token-using-powershell/ ---- - -Azure DevOps allows us to run custom scripts to help our software and infrastructure get delivered quickly. There are times that the scripts run without an issue, however, sometimes there is a need to invoke the Azure DevOps Rest API in the release pipeline to get our scripts running. Sure, you can create a script invoking the API, authenticating with Azure DevOps with your personal access token and should work, but there is a better solution. - -Allowing scripts to access the OAuth token authenticates the script with the - - -`System.AccessToken -`variable, which runs as the Project Collection Build Service, a built-in service account in Azure DevOps. Today, we will be taking a look on how to enable this feature using PowerShell. - -Since the feature needs to be enabled per release definition, the first item we need to find is the definitionId of the release definition. This can be found by using the Rest API or in the URL when clicking on the release definition in Azure DevOps. Since we are using PowerShell, let’s try it, but first, be sure to have your personal access token handy. The below commands are for my own blog organization, please substitute with your organization and project name. There will be a function provided at the end that parameterizes these values. - - -`$Params = @{ - Uri = "https://vsrm.dev.azure.com/pwshliquori-blog/blog/_apis/release/definitions/1?api-version=5.0" - Headers = @{ - Authorization = "Basic $PersonalAccessToken" - } -} -$Def = Invoke-RestMethod @Params -`Let’s take a look at the command: - - - - - $Params: A hash table we will splat when we are ready to run the command. - - - - - $Params.Uri: The components needed to get the release definitions. - - - - - pwshliquori-blog: Organization name. - - - - - blog: Project name. - - - - - _apis: Standard for calling the rest API. - - - - - release: The area of the API call. - - - - - definitions: The resource of the API call. - - - - - api-version=5.0: The latest version of the API. - - - - - $Headers: Authorization header using your base 64 encoded personal access token. - - - - - Invoke-RestMethod @Params: Invokes the Rest API splatting the $Params hashtable. - - - -The command should return the release definition in the project with definitionId 1. Now we need to dig down and find the property needed to enable, in this case: “enableAccessToken.” - -The "enableAccessToken" property is set to false by default, lets find and set it to true: - - -`$Def.environments.deployPhases.deploymentInput -parallelExecution : @{parallelExecutionType=none} -skipArtifactsDownload : False -artifactsDownloadInput : @{downloadInputs=System.Object[]} -queueId : 3 -demands : {} -enableAccessToken : False -timeoutInMinutes : 0 -jobCancelTimeoutInMinutes : 1 -condition : succeeded() -overrideInputs : -$Def.environments.deployPhases.deploymentInput.enableAccessToken = $true -$Def.environments.deployPhases.deploymentInput -parallelExecution : @{parallelExecutionType=none} -skipArtifactsDownload : False -artifactsDownloadInput : @{downloadInputs=System.Object[]} -queueId : 3 -demands : {} -enableAccessToken : True -timeoutInMinutes : 0 -jobCancelTimeoutInMinutes : 1 -condition : succeeded() -overrideInputs : -`Now that we set the “enableAccessToken” to true, we need to update the release definition with the changed value. To do this, we need to convert the $Def variable to JSON format and set the ContentType to application/json. - - -`$Body = ConvertTo-Json -InputObject $Def -Depth 10 -$Params = @{ - Uri = "https://dev.azure.com/pwshliquori-blog/blog/_apis/release/definitions/1?api-version=5.0" - Headers = @{ - Authorization = "Basic $ConvertToBase64" - } - Body = $Body - ContentType = 'application/json - Method = 'Put' -} -Invoke-RestMethod @Params -`The body needs to contain the entire release definition with the updated “enableAccessToken” property. After running the command, we can now utilize the - - -`System.AccessToken -`to run scripts and processes using OAuth authentication that uses the Project Collection Build Service account. By using PowerShell, we can now turn the commands above into a function to automate the process of enabling this feature. - - -`function Enable-AzureDevOpsReleaseDefinitionOAuthToken { - [CmdletBinding()] - param - ( - [Parameter(Mandatory, - ValueFromPipeline, - Position = 0)] - [string]$OrganizationName, - [Parameter(Mandatory, - ValueFromPipeline, - Position = 1)] - [string]$ProjectName, - [Parameter(Mandatory, - Position = 2)] - [string]$ReleaseDefinitionId, - [Parameter(Position = 3)] - [string]$PersonalAccessToken - ) - Begin { - $BasicAuth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f '', $PersonalAccessToken))) - } - Process { - Try { - $Params = @{ - Uri = "https://vsrm.dev.azure.com/$OrganizationName/$ProjectName/_apis/release/definitions/$($ReleaseDefinitionId)?api-version=5.0" - Headers = @{ - Authorization = "Basic $BasicAuth" - } - } - $ReleaseDefinition = Invoke-RestMethod @Params - $ReleaseDefinition.environments |ForEach-Object { - $_.deployPhases.deploymentinput.enableAccessToken = $true - } - $JsonObject = foreach ($Definition in $ReleaseDefinition) { - ConvertTo-Json -InputObject $Definition -Depth 10 - } - $Params.Method = 'Put' - $Params.ContentType = 'application/json' - foreach ($Json in $JsonObject) { - $Params.Body = $Json - Invoke-RestMethod @Params - } - } - Catch { - throw $_ - } - } -} -`The function will enable the OAuth token for all environments in the given release definition, which gives us the option to use the - - -`System.AccessToken -`variable. This is handy when we want to run custom scripts without using our own personal access token. Another example is if we needed to create an annotated tag for a release and need to use the Build Service Account to tag the release instead of a release administrators personal access token. - -For purposes of this post, I have provided one function, but this should be split into two separate functions. One function to get the release definition, and then next to enable the OAuth token, taking an - - -`InputObject -`parameter. As the legendary Don Jones states "A function is a tool that should do one thing really well." - - - -To find more information on using the Rest API, visit Microsoft documentation on the Azure DevOps Rest API. - -[https://docs.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-5.0](https://docs.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-5.0) - -pwshliquori diff --git a/content/articles/2019-04-26-icymi-powershell-week-of-26-april-2019.md b/content/articles/2019-04-26-icymi-powershell-week-of-26-april-2019.md deleted file mode 100644 index 7d052712b..000000000 --- a/content/articles/2019-04-26-icymi-powershell-week-of-26-april-2019.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 26-April-2019" -authors: - - Mark Roloff -date: "2019-04-26T15:00:53+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/04/icymi-powershell-week-of-26-april-2019/ ---- - -Topics include building functions for cleaning your $PATH, xplat GUIs with Core, and the EXO module makes its way to the Cloud Shell. - - - -Special thanks to Robin Dadswell, Prasoon Karunan, and Mark Roloff. - -###### [][1][_Introducing PSCVSS: A PowerShell & PowerShell Core Module to calculate a CVSS Score_][2] {.wp-block-heading} - -by Josh Rickard on April 19th - -In the security arena? Being able to locally calculate CVSS scores might be pretty handy for you, then. - -###### [][3][_PowerShell way to get all information about Office 365 Service Health_][4] {.wp-block-heading} - -by Przemyslaw Klys on April 22nd - -The title alone doesn't do much justice to how cool this is. Przemyslaw's new module pulls the service health out and fits it nicely into other visualization tools that he's published. - -###### [][5][_More PowerShell Adventures in Cleaning Your Path_][6] {.wp-block-heading} - -by Jeffrey Hicks on April 24th - -Follow along with Jeff as he walks you through building a few functions that can help you learn a little .NET and how to implement the _WhatIf_ switch. - -###### [][7][_Building Cross-Platform WPF-Style Applications in PowerShell Core_][8] {.wp-block-heading} - -by Adam Driscoll on April 23rd - -Xplatform GUIs are making their way to PS Core. Leveraging the Avalonia project, Adam's latest PowerShell Pro Tools update opens the door to creating XAML windows. - -###### [][9][_Customizing the Title Bar of your PowerShell Console Window_][10] {.wp-block-heading} - -by Patrick Gruenauer on April 23rd - -Want a little personal branding for presentations? Maybe toss something fun or uplifting into your shell's window? Patrick has you covered. - -###### [][11][_Tweet of the Week_][12] {.wp-block-heading} - -Making the Azure Cloud Shell even more appealing, the Exchange Online module is now available there. - -###### [][13][_Youtube: Powershell Universal Dashboard with Adam Driscoll_][14] {.wp-block-heading} - -Speaking at the Austin PSUG, Adam gives a rundown on the Universal Dashboard. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190426.md#introducing-pscvss-a-powershell--powershell-core-module-to-calculate-a-cvss-score - [2]: https://www.secopshub.com/t/introducing-pscvss-a-powershell-powershell-core-module-to-calculate-a-cvss-score/743 - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190426.md#powershell-way-to-get-all-information-about-office-365-service-health - [4]: https://evotec.xyz/powershell-way-to-get-all-information-about-office-365-service-health/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190426.md#more-powershell-adventures-in-cleaning-your-path - [6]: https://jdhitsolutions.com/blog/powershell/6700/more-powershell-adventures-in-cleaning-your-path/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190426.md#building-cross-platform-wpf-style-applications-in-powershell-core - [8]: https://ironmansoftware.com/building-cross-platform-wpf-style-applications-in-powershell-core/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190426.md#customizing-the-title-bar-of-your-powershell-console-window - [10]: https://sid-500.com/2019/04/23/powershell-customizing-the-title-bar-of-your-powershell-console-window/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190426.md#tweet-of-the-week - [12]: https://twitter.com/maertend33/status/1121103069867986944 - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190426.md#youtube-powershell-universal-dashboard-with-adam-driscoll - [14]: https://www.youtube.com/watch?v=5LWXrgstfe8 diff --git a/content/articles/2019-04-26-phenomenal-number-of-acls-itty-bitty-living-space.md b/content/articles/2019-04-26-phenomenal-number-of-acls-itty-bitty-living-space.md deleted file mode 100644 index 1a2106733..000000000 --- a/content/articles/2019-04-26-phenomenal-number-of-acls-itty-bitty-living-space.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Phenomenal number of ACLs, itty-bitty living space -authors: - - Mark Roloff -date: "2019-04-26T16:19:53+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -legacy_featured_image: /wp-content/uploads/2019/04/itty-bitty_living_space.png -aliases: - - /2019/04/phenomenal-number-of-acls-itty-bitty-living-space/ ---- - -I recently had a need to backup file and folder ACLs for a client that would then need to restore them to their original objects following a hardware upgrade that would wipe them out. Easy enough, but the catch was that there was 1.5 million of them. Fortunately, getting ACLs in PowerShell is easy. - - -`PS > Get-Acl -Path somefile.txt - Directory: C:\ -Path Owner Access ----- ----- ------ -somefile.txt BUILTIN\Administrators BUILTIN\Administrators Allow... -`See? - -Now, if you needed multiple ACLs, say, all 1.5 million of them on a file share, you could use **Get-ChildItem** to feed files and folders to **Get-Acl**. But then what? **Export-Clixml** is a generally great way to convert a PowerShell object to XML and save it to file. - - -`PS > Get-Acl -Path somefile.txt | Export-Clixml -Path AclBackup.ps1xml -`You then get an ugly monstrosity that looks like this. - -![](https://powershell.org/wp-content/uploads/2019/04/image.png) - -In my case, there's a serious problem with this approach. Ballpark 100 lines per ACL x 1.5 million filesystem objects = 150 million lines of backup data, and my small test on several thousand files and folders was already about 32MB on disk. In production, it would balloon to a hefty size and this needed to run on a server with 3.5GB of RAM and space constraints. Yeah... I'm not offering that as a solution to anybody. - -Luckily, we can do a little dotnet black magic to trim this down to something much more manageable. Thanks to sk82jack and Chris Dent in the PowerShell Discord, I learned that the [SDDL][1] is the only component that's really necessary for recreating the ACL object. They look like this: - - -`O:BAG:S-1-5-21-1192226125-608885206-469304335-1001D:AI(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU) -`File ACLs are **[System.Security.AccessControl.FileSecurity]** type objects and folder ACLs are **[System.Security.AccessControl.DirectorySecurity]** type objects. - - -`PS > [System.Security.AccessControl.FileSecurity]::new() -Path Owner Access ----- ----- ------ -`Instantiating one of these just gives us a blank object, but we can feed the SDDL as a string to the **SetSecurityDescriptorSddlForm()** method in order to populate it. - - -`PS > $a = [System.Security.AccessControl.FileSecurity]::new() -PS > $a.SetSecurityDescriptorSddlForm('O:BAG:S-1-5-21-1192226125-608885206-469304335-1001D:AI(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)') -PS > $a -Path Owner Access ----- ----- ------ - NT SERVICE\TrustedInstaller NT AUTHORITY\SYSTEM Allow Modify, Synchronize... -`I haven't seen a way to fill in the path but that's easily worked around. Armed with this information, I would only need to backup the full path of each object, whether it is a file or a folder, and the SDDL. - - -`Get-ChildItem -Path C:\apps -Recurse | Foreach-Object { - [pscustomobject]@{ - Path = $_.Fullname - IsContainer = $_.PSIsContainer - Sddl = $(Get-Acl -Path $_.Fullname).Sddl - } -} -Path IsContainer Sddl ----- ----------- ---- -C:\apps\aclbackup.ps1xml False O:S-1-5-21-1192226125-608885206-469304335... -C:\apps\az_tenant2tenant.ps1 False O:BAG:S-1-5-21-1192226125-608885206-46930... -C:\apps\bb_saml_resp_success.xml False O:S-1-5-21-1192226125-608885206-469304335... -C:\apps\somefile.txt False O:S-1-5-21-1192226125-608885206-469304335... -C:\apps\testvnet.json False O:BAG:S-1-5-21-1192226125-608885206-46930... -`Now we're getting somewhere. Flat objects like this will export nicely to CSV, which would be significantly smaller on disk than the ps1xml we started with. When I run the code above against a directory tree with about 56k objects and pipe it to **Export-Csv**, I end up with a 16MB CSV. Some PowerShell napkin math to double-check this... - - -`PS > 16MB / 56000 -299.593142857143 # Just shy of 300 bytes per ACL -PS > (300 * 1500000) / 1MB # Per ACL size by the number of ACLs, converted to MBs -429.153442382813 -`... So around 430MB. That sounds like a much more reasonable backup size to me and it won't chew through what little RAM I have to work with. If we went with **Export-Clixml**, it would have ended up around 8GB, taken significantly longer to run, and probably would have crashed. - -So how would we restore these? - - -`$ACLs = Import-Csv -Path AclsBackup.csv -foreach ($ACL in $ACLs) { - switch ($ACL.IsContainer) { - $true { - $AclObj = [System.Security.AccessControl.DirectorySecurity]::new() - $AclObj.SetSecurityDescriptorSddlForm($ACL.Sddl) - Set-Acl -Path $ACL.Path -AclObject $AclObj - } - $false { - $AclObj = [System.Security.AccessControl.FileSecurity]::new() - $AclObj.SetSecurityDescriptorSddlForm($ACL.Sddl) - Set-Acl -Path $ACL.Path -AclObject $AclObj - } - } -} -`And simple as that the ACLs right back where they came from. - - [1]: https://docs.microsoft.com/en-us/windows/desktop/secauthz/security-descriptor-definition-language-for-conditional-aces- diff --git a/content/articles/2019-04-29-find-module-find-script-dont-recreate-the-wheel.md b/content/articles/2019-04-29-find-module-find-script-dont-recreate-the-wheel.md deleted file mode 100644 index 42ace68bb..000000000 --- a/content/articles/2019-04-29-find-module-find-script-dont-recreate-the-wheel.md +++ /dev/null @@ -1,229 +0,0 @@ ---- -title: "Find-Module, Find-Script – Don't Recreate the Wheel" -authors: - - pwshliquori -date: "2019-04-29T18:52:07+00:00" -categories: - - PowerShell for Admins -aliases: - - /2019/04/find-module-find-script-dont-recreate-the-wheel/ ---- - -The PowerShell Gallery is a collection of modules and scripts that is community driven to help us automate everyday tasks. Sometimes, we have an idea that could written into a function or script, however, most of the time, someone else had the same idea and published their work to the PowerShell Gallery. There is no need to recreate the wheel and re-write it, use the community to our advantage. We'll take a look at multiple Cmdlets, - - -`Find-Module -`, - - -`Find-Script -`, - - -`Install-Module -`, and - - -`Install-Script -`, and find out what each of them provide. - -**Find-Module** **and Install-Module** - - -`Find-Module -`allows us the - -_browse_ the PowerShell Gallery and find if there is a module in the community that has been created. Running - - -`Get-Help Find-Module -`, we can see there are multiple parameters to use to help narrow our search. For demonstration, we will find the Azure PowerShell (Az) module by Microsoft using the - - -`Find-Module -`Cmdlet. - - -`Get-Help Find-Module -NAME - Find-Module -SYNTAX - Find-Module [[-Name] ] [-MinimumVersion ] [-MaximumVersion ] [-RequiredVersion ] [-AllVersions] [-IncludeDependencies] [-Filter ] [-Tag - ] [-Includes {DscResource | Cmdlet | Function | RoleCapability}] [-DscResource ] [-RoleCapability ] [-Command ] [-Proxy ] [-ProxyCredential - ] [-Repository ] [-Credential ] [] -ALIASES - fimo -REMARKS - Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help. - -- To download and install Help files for the module that includes this cmdlet, use Update-Help. - -- To view the Help topic for this cmdlet online, type: "Get-Help Find-Module -Online" or - go to http://go.microsoft.com/fwlink/?LinkID=398574. -Find-Module -Name Az -Version Name Repository Description -------- ---- ---------- ----------- -1.8.0 Az PSGallery Microsoft Azure PowerShell - Cmdlets to manage resources in Azure. This module is compatible with WindowsPowerShell and P... -`Great. We were able to find the Az module and returned some information about the module: Version, Name, Repository, and Description. But what if we did not know the name of a module we are looking for? The - - -`-Name -`parameter accepts wildcards for partial searches, we can enter in - - -`Find-Module -Name Az* -`and will return any module in the gallery that starts with "Az". We can also search for DSC Resources using the - - -`Find-Module -`Cmdlet using the - - -`-Includes DscResource -`parameter. This will only return DSC Resources available in the PowerShell Gallery - - -`Find-Module -Name xWeb* -Includes DscResource -`Once we found the module that we want to use, we can install the module using the - - -`Install-Module -`Cmdlet. This will install the community module in our default module install directory: - - -`C:\Program Files\WindowsPowerShell\Modules -`or if using PowerShell Core: - - -`C:\Program Files\PowerShell\Modules -`. Lets take the example above and use it to install the Az Module. - - -`Find-Module -Name Az |Install-Module -`We can take the - - -`Find-Module -`Cmdlet and pipe it to the - - -`Install-Module -`Cmdlet to install the module. But, we also have the ability to install a specific version of a module using the - - -`-RequiredVersion -`parameter. - - -`Install-Module -Name Az -RequiredVersion 1.7 -`Not using the - - -`-RequiredVersion -`parameter will install the latest version of the module. - -**Note:** Find-Module and Install-Module was introduced in PowerShell version 5.0. - -**Find-Script and Install-Script** - - -`Find-Script -`works the same way as - - -`Find-Module -`, however, instead of finding modules, we are now finding scripts. - - -`Find-Script -`will return - - -`.ps1 -`scripts in the PowerShell Gallery that could be installed. Lets take a look at an example to find a script and than later on we will install it. The same rules apply when trying to find a script, we can use wildcards in our search to find a certain script. - - -`Find-Script -Name Get-* -Version Name Repository Description -------- ---- ---------- ----------- -1.4 Get-WindowsAutoPilotInfo PSGallery This script uses WMI to retrieve properties needed by the Microsoft Store for Business to support Windows AutoPilot deplo... -1.0.0 Get-Quotation PSGallery Get-Quote cmdlet data harvests a/multiple quote(s) from Web outputs into your powershell console -1.0.0 Get-UsersOnlineOnReddit PSGallery Script to web data scrape reddit user trend and pump all the data points script captured from Reddit’s Powershell Communi... -1.0.4 Get-PacFile PSGallery This script will access updated information to create a PAC file to prioritize Microsoft 365 Urls for... -1.1.2.7 Get-AzureAutomationDiagnosticRes... PSGallery Capture diagnostic information for Azure Automation accounts. ... -1.1.0 Get-VMotion PSGallery Report on recent vMotion events in your VMware environment. -1.2.1 Get-RemoteProgram PSGallery This function generates a list by querying the registry and returning the installed programs of a local or remote computer. -1.1 get-uptime PSGallery Get the uptime of the current machine. -1.0.1 Get-InstalledProgram PSGallery Get-InstalledProgram retrieves the programs installed on a local or remote machine. To specify a remote computer, use the... -0.0.1 Get-LockoutBlame PSGallery Script to get a Windows Event about Locked Accounts, including the host which caused the lockout.... -0.1.1 get-lastreboot PSGallery Get the last reboot information from multiple machines -1.0 Get-DnsConfiguration PSGallery Retrives primary, secondary, tertiery DNS Servers from on online system using Windows Management Instrimentation. -1.0 Get-Github PSGallery Download a github repository or a gist -1.1 Get-MyIP PSGallery Get your External IP address... -1.3.5 Get-WindowsUpTime PSGallery Get Windows UpTime StartTime and LocalTime by Wmi on local and remote system -2.9 Get-Parameter PSGallery Lists all the parameters of a command, by ParameterSet, including their aliases, type, etc.... -2.0 Get-LastLoggedOnUser PSGallery Gets the last not special user to have a loaded profile on a given system. -`We searched for all scripts that start with - - -`Get-* -`, now lets find the script we want to install: - - -`Join-String`Find-Script -Name Join-String -Version Name Repository Description -------- ---- ---------- ----------- -1.0 Join-String PSGallery Join String from Array -`Now that we found the scripts, lets install it using the same pipeline. Using the - - -`Install-Script -`Cmdlet, the script will install in the default script location: - - -`C:\Program Files\WindowsPowerShell\Scripts -`or if using PowerShell Core: - - -`C:\Program Files\PowerShell\Scripts -`. - - -`Find-Script -Name Join-String |Install-Script -`We can still use the - - -`-RequiredVersion -`parameter if a specified version is required, but using the command above will install the latest. - - -`Find-Module -`, - - -`Find-Script -`, - - -`Install-Module -`, and - - -`Install-Script -`are great to find and install modules or scripts from the PowerShell Gallery, there is no need to recreate the wheel, (Most of the time). You can also search the PowerShell Gallery by visiting the website - -[here][1]. When searching for a module or script, the site will show you the command to run in PowerShell to install the module or script. - -Just a reminder that these Cmdlets were introduced in PowerShell version 5.0 and are in the [PowerShellGet][2] module. The links below are Microsoft's documentation for each Cmdlet with examples and other parameters that can be used. - -[Find-Module][3] -[Install-Module][4] -[Find-Script -][5] [Install-Script][6] - -pwshliquori - - [1]: https://www.powershellgallery.com/ - [2]: https://docs.microsoft.com/en-us/powershell/module/powershellget/?view=powershell-6 - [3]: https://docs.microsoft.com/en-us/powershell/module/powershellget/Find-Module?view=powershell-6%EF%BB%BF - [4]: https://docs.microsoft.com/en-us/powershell/module/powershellget/Install-Module?view=powershell-6%EF%BB%BF - [5]: https://docs.microsoft.com/en-us/powershell/module/powershellget/Find-Script?view=powershell-6 - [6]: https://docs.microsoft.com/en-us/powershell/module/powershellget/Install-Script?view=powershell-6 diff --git a/content/articles/2019-05-03-icymi-powershell-week-of-3-may-2019.md b/content/articles/2019-05-03-icymi-powershell-week-of-3-may-2019.md deleted file mode 100644 index ce479b1b1..000000000 --- a/content/articles/2019-05-03-icymi-powershell-week-of-3-may-2019.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 3-May-2019" -authors: - - Robin Dadswell -date: "2019-05-03T14:20:27+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/05/icymi-powershell-week-of-3-may-2019/ ---- - -Topics include GUI development, Azure Cloud Shell, Live streaming, Azure functions and more! - - - -Special thanks to Mark Roloff and Robin Dadswelll - -###### [][1][_New Video - Handling Progress with a Background Job in a GUI Application_][2] {.wp-block-heading} - -by Max Trinidad on May 1st - -Learn how to create forms and have tasks running behind them with Sapien - -###### [][3][_Deploy SSIS Packages with PowerShell .ISPAC Deployment, using the SSIS Provider_][4] {.wp-block-heading} - -by Aaron Neslon on May 1st - -Learn an easy and repeatable way to deploy SSIS packages with PowerShell - -###### [][5][_Visualising your DNS cache with PSGraph_][6] {.wp-block-heading} - -by James Montgomery on April 26th - -Have a bit of fun with the PSGraph model and your DNS cache, who knows what more can be done from here! - -###### [][7][_Using PowerShell with Azure Cloud Shell_][8] {.wp-block-heading} - -by Michael Bender on April 27th - -There are many ways to switch to PowerShell within the Azure Cloud Shell, find out more about them here! - -###### [][9][_Public Preview of PowerShell in Azure Functions 2.x_][10] {.wp-block-heading} - -by Joey Aiello on April 29th - -An announcement from the project team for PowerShell Core - -###### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} - -Have a look through some suggestions for beginners or help out someone new, either way it's great to see the community helping one another out! - -###### [][13][_Tweet of the Week_][14] {.wp-block-heading} - -A quick start quide to getting started streaming PowerShell live! - -###### [][15][_Youtube: PSKoans: Learn PowerShell concepts using Pester! with Joel Sallow_][16] {.wp-block-heading} - -A forray into PSKoans, the goal of the PowerShell koans is to teach you PowerShell by presenting you with a set of questions. Each kōan (each question) is represented by a failing Pester test. Your goal is to make those tests pass by filling out the correct answer, or writing the correct code. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190503.md#new-video---handling-progress-with-a-background-job-in-a-gui-application - [2]: https://www.sapien.com/blog/2019/05/01/new-video-handling-progress-with-a-background-job-in-a-gui-application/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190503.md#deploy-ssis-packages-with-powershell-ispac-deployment-using-the-ssis-provider - [4]: http://sqlvariant.com/2019/05/deploy-ssis-packages-with-powershell-ispac-deployment-using-the-ssis-provider/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190503.md#visualising-your-dns-cache-with-psgraph - [6]: https://ja.mesmontgomery.co.uk/2019/04/visualising-your-dns-cache-with-psgraph/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190503.md#using-powershell-with-azure-cloud-shell - [8]: https://dev.to/azure/using-powershell-with-azure-cloud-shell-4iio - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190503.md#public-preview-of-powershell-in-azure-functions-2x - [10]: https://devblogs.microsoft.com/powershell/public-preview-of-powershell-in-azure-functions-2-x/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190503.md#reddit-rpowershell---most-popular-weekly-post - [12]: https://www.reddit.com/r/PowerShell/comments/bk1ic1/powershell_for_beginners/ - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190503.md#tweet-of-the-week - [14]: https://twitter.com/PowerShellLive/status/1124052193060032512 - [15]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190503.md#youtube-pskoans-learn-powershell-concepts-using-pester-with-joel-sallow - [16]: https://www.youtube.com/watch?v=ahYfLzqKDM0 diff --git a/content/articles/2019-05-06-summit-2020-a-new-addition.md b/content/articles/2019-05-06-summit-2020-a-new-addition.md deleted file mode 100644 index 8ced439a3..000000000 --- a/content/articles/2019-05-06-summit-2020-a-new-addition.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Summit 2020 – A New Addition -authors: - - Will Anderson -date: "2019-05-06T16:00:29+00:00" -categories: - - Announcements - - PowerShell Summit -aliases: - - /2019/05/summit-2020-a-new-addition/ ---- - -Last week at the PowerShell + DevOps Global Summit, we announced the dates for next year's summit. The event will again be held at the Meydenbauer Center in Bellevue, Washington on April 27th to April 30th. - -**DevOps + Automation Summit - Nashville** - -We are also proud to announce that our flagship summit event would be getting a new addition to the family in the form of the DevOps + Automation Summit being held on October 21st to October 23rd, 2020 at the Renaissance Hotel in Downtown Nashville! - -![](https://powershell.org/wp-content/uploads/2019/04/image-1-1024x275.png) * -* - -A lot of thought went into the decision to launch a new event. This last year, the PowerShell + DevOps Global Summit again exceeded expectations by not only selling out a full month ahead of last year's event, but we had over 250 people on the waiting list for tickets. - -There has also been increased demand for broader DevOps content beyond PowerShell, and with us reaching the upper limit of capacity at the primary event, it became a challenge to introduce new content. For every session of new content that we would add, we would have to take a slot away from our primary focus in Bellevue, which is PowerShell. - -**So who should attend which conference?** - -Ideally, you could attend both! These two events aren't duplicates of each other, but rather are designed to be complimentary. But to break it down a bit easier, the PowerShell + DevOps Summit will remain the focus for an admin whose job is 70% or more PowerShell-centric, and maybe doing some DevOps and cloud work. Whereas, the DevOps + Automation Summit will be much more focused on the broader tools, methodologies, and concepts of DevOps and cloud. - -There will still be quite a bit of PowerShell content at the Nashville event, and there could be some overlap of sessions - especially if a speaker submits a session that would be the right fit at both events. But you would be able to attend both and have enough unique content that it would be justifiable. - -**How big will the new event be?** - -While we've set our initial budgets at the Nashville event for 250 people, we will be capping the event attendance to 400 for the time being. One of the things that we pride ourselves on is the ability to have a level of intimacy between the attendees, as well as the speakers. We have the additional capacity to grow in Nashville, but we don't want to do so in a way that compromises that. - -We're looking forward to answering any questions that you may have. I may update this article as we get those questions so that everyone is on the same page. In the meantime, it was wonderful to see everyone again in Bellevue, and the team is looking forward to seeing all of you again next year! diff --git a/content/articles/2019-05-10-icymi-powershell-week-of-10-may-2019.md b/content/articles/2019-05-10-icymi-powershell-week-of-10-may-2019.md deleted file mode 100644 index 9eb9dbba2..000000000 --- a/content/articles/2019-05-10-icymi-powershell-week-of-10-may-2019.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 10-May-2019" -authors: - - Mark Roloff -date: "2019-05-10T15:00:16+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/05/icymi-powershell-week-of-10-may-2019/ ---- - -Topics include PowerShell Summit, finding account lockouts, certs, and learning PS via Pester. - -Content curated by Robin Dadswell, Prasoon Karunan, and Mark Roloff. - -###### [][1][_Takeaways from the PowerShell + DevOps Global Summit 2019_][2] {.wp-block-heading} - -by Matt Bobke on May 2nd - -If you couldn't make it to Summit, fret not! While waiting for videos you can read about it from attendees, like Matt, whom participated in the OnRamp track. - -###### [][3][_Execute a script block accepting pipeline input and show your progress_][4] {.wp-block-heading} - -by Yves Rosius on May 5th - -_Show-Progress_ is essentially a clever little wrapper around _Write-Progress_ but it works in the pipeline. Handy for those long-running one-liners. - -###### [][5][_Tracking down bad password attempts with PowerShell_][6] {.wp-block-heading} - -by Anthony Howell on May 9th - -Keeping an eye on account lockouts can give you a heads up in case of malicious shenanigans or just incoming help desk calls. Anthony walks us through writing a function that can quickly pull that information together. - -###### [][7][_Powershell Generate Self-signed certificate with Self-Signed Root CA Signer_][8] {.wp-block-heading} - -by Kunal Udapi on May 5th - -If self-signed certs are on your agenda, Kunal has your quick and dirty intro to making and installing them. - -###### [][9][_Reddit /r/PowerShell - Popular Weekly Post_][10] {.wp-block-heading} - -Curious about complementary languages or knowledge-areas once you're comfortable with PowerShell? Stop in this thread for a few ideas. - -###### [][11][_Youtube: Learn PowerShell concepts using Pester! with Joel Sallow_][12] {.wp-block-heading} - -Learning PowerShell almost goes hand-in-hand with Pester these days. Since you need to learn both, why not all at once? - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190510.md#takeaways-from-the-powershell--devops-global-summit-2019 - [2]: https://mattbobke.com/2019/05/02/takeaways-from-the-powershell-+-devops-global-summit-2019/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190510.md#execute-a-script-block-accepting-pipeline-input-and-show-your-progress - [4]: https://yvez.be/2019/05/05/execute-a-script-block-accepting-pipeline-input-and-show-your-progress/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190510.md#tracking-down-bad-password-attempts-with-powershell - [6]: https://theposhwolf.com/howtos/Get-ADUserBadPasswords/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190510.md#powershell-generate-self-signed-certificate-with-self-signed-root-ca-signer - [8]: http://vcloud-lab.com/entries/powershell/powershell-generate-self-signed-certificate-with-self-signed-root-ca-signer - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190510.md#reddit-rpowershell---popular-weekly-post - [10]: https://old.reddit.com/r/PowerShell/comments/bl13qi/sysadmin_learning_powershell_what_other_languages/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190510.md#youtube-learn-powershell-concepts-using-pester-with-joel-sallow - [12]: https://www.youtube.com/watch?v=ahYfLzqKDM0 diff --git a/content/articles/2019-05-17-icymi-powershell-week-of-17-may-2019.md b/content/articles/2019-05-17-icymi-powershell-week-of-17-may-2019.md deleted file mode 100644 index d349b22a5..000000000 --- a/content/articles/2019-05-17-icymi-powershell-week-of-17-may-2019.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 17-May-2019" -authors: - - Mark Roloff -date: "2019-05-17T15:00:32+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/05/icymi-powershell-week-of-17-may-2019/ ---- - -Topics include working with the Graph API, Chocolatey, jazzing up your functions with pipeline support, and shrinking VMDKs. - -Special thanks to Robin Dadswell, Prasoon Karunan V, and Mark Roloff. - -###### [][1][_How to shrink VMDK with a couple of PowerShell scripts?_][2] {.wp-block-heading} - -by Kevin Soltow on May 8th - -Not just a set of useful scripts for anyone still working in a space-constrained environment, but a great bit of interesting detail has also gone into this. - -###### [][3][_Powershell Script - MassDownloader - Efficient, Automated, Fault Tolerant, idempotent downloader with real time metrics_][4] {.wp-block-heading} - -by Bryan Vine on May 12th - -Taking BITS to the next level, Bryan has a nice script that automates some of the features and adds a progress indicator for each download. - -###### [][5][_Advanced PowerShell Functions: Begin to Process to End_][6] {.wp-block-heading} - -by Brittney Ryn on May 13th - -Interested in making your functions work in a pipeline? Brittney has put together an excellent guide to understanding how to do this, as well as a peek into some of the under-the-hood behavior. - -###### [][7][_PowerShell Module For JSON Schema Validation_][8] {.wp-block-heading} - -by Tao Yang on May 12th - -Tao needed to validate multiple JSON files, so he did what any self-respecting scripter would do. He wrote a new function that leverages Core's native _Test-Json_ in combination with Pester to validate an entire directory of files. - -###### [][9][_PowerShell, MS Graph API, Azure Automation, and Intune_][10] {.wp-block-heading} - -by Timothy Gruber on May 8th - -Knowing how to work with Graph opens up a lot of cool doors for your projects and Timothy's guide is a fantastic place to start. - -###### [][11][_Tweet of the Week_][12] {.wp-block-heading} - -Did you know that PowerShell Core has some significant performance improvements over 5.1? @jeremytbrun stumbled across the enhancements in _Group-Object_ after making the switch. - -###### [][13][_Youtube: Chocolatey: From zero to software deployment hero in 60 minutes!_][14] {.wp-block-heading} - -Tired of installing applications the hard way? Take a little tour of Chocolatey with Steven Valdinger and learn to do it like the pros! - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190517.md#how-to-shrink-vmdk-with-a-couple-of-powershell-scripts - [2]: https://www.vmwareblog.org/shrink-vmdk-couple-powershell-scripts/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190517.md#powershell-script---massdownloader---efficient-automated-fault-tolerant-idempotent-downloader-with-real-time-metrics - [4]: https://www.bryanvine.com/2019/05/powershell-script-massdownloader.html?m=1 - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190517.md#advanced-powershell-functions-begin-to-process-to-end - [6]: https://www.sapien.com/blog/2019/05/13/advanced-powershell-functions-begin-to-process-to-end/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190517.md#powershell-module-for-json-schema-validation - [8]: https://blog.tyang.org/2019/05/12/powershell-module-for-json-schema-validation/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190517.md#powershell-ms-graph-api-azure-automation-and-intune - [10]: https://timothygruber.com/scripts/powershell/powershell-ms-graph-api-azure-automation-and-intune/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190517.md#tweet-of-the-week - [12]: https://twitter.com/jeremytbrun/status/1126895640674488321 - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190517.md#youtube-chocolatey-from-zero-to-software-deployment-hero-in-60-minutes - [14]: https://www.youtube.com/watch?v=5pgLPgIO7fI diff --git a/content/articles/2019-05-24-icymi-powershell-week-of-24-may-2019.md b/content/articles/2019-05-24-icymi-powershell-week-of-24-may-2019.md deleted file mode 100644 index 6324f9070..000000000 --- a/content/articles/2019-05-24-icymi-powershell-week-of-24-may-2019.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 24-May-2019" -authors: - - Mark Roloff -date: "2019-05-24T15:00:16+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -aliases: - - /2019/05/icymi-powershell-week-of-24-may-2019/ ---- - -Topics include unit testing your NetApp, logging, Office templates, and \*DRUM ROLL\* recordings from Summit! - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, and Mark Roloff - -###### [][1][_ONTAP Configuration Compliance Auditing with PowerShell and Pester_][2] {.wp-block-heading} - -by Donny Lang on May 19th - -Validating that your infrastructure is configured as expected at any given time is a valuable skill these days. Donny goes into detail on how he combines Pester with the NetApp PowerShell Toolkit to make sure everything as it should be. - -###### [][3][_Producing Live Visuals From a PowerShell REST API_][4] {.wp-block-heading} - -by James Montgomery on May 17th - -Universal Dashboard + vis.js -eq A pretty cool way to build visualizations of relationships between sets of data. - -###### [][5][_Using the AST to Find Module Dependencies in PowerShell Functions and Scripts_][6] {.wp-block-heading} - -by Mike F Robbins on May 17th - -Showcasing his MrModuleBuildTools module, Mike demonstrates how easy it is (and how _powerful_ the AST is) to list out required modules, private functions, or even function definitions in a directory. - -###### [][7][_Office Templates in the Cloud_][8] {.wp-block-heading} - -by Michael Mardahl on May 21st - -If you're itching for a little automated distribution of Office templates in your company, Michael has worked out a method of getting them into users' hands via OneDrive with this script. - -###### [][9][_PowerShell: When and Where Writing Logs Matters_][10] {.wp-block-heading} - -by Paolo Frigo on May 21st - -You do implement logging in your scripts, right? Shh... I won't tell anyone. Paolo makes a great case for why we should be doing it more often though, and introduces several methods that can be used to get there. - -###### [][11][_PowerShell + DevOps Global Summit 2019_][12] {.wp-block-heading} - -Session recordings from this year's Summit went live this week! - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190524.md#ontap-configuration-compliance-auditing-with-powershell-and-pester - [2]: https://www.langhq.com/2019/05/ontap-configuration-compliance-auditing.html - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190524.md#producing-live-visuals-from-a-powershell-rest-api - [4]: https://ja.mesmontgomery.co.uk/2019/05/producing-live-visuals-from-a-powershell-rest-api/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190524.md#using-the-ast-to-find-module-dependencies-in-powershell-functions-and-scripts - [6]: https://mikefrobbins.com/2019/05/17/using-the-ast-to-find-module-dependencies-in-powershell-functions-and-scripts/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190524.md#office-templates-in-the-cloud - [8]: https://www.iphase.dk/office-templates-in-the-cloud/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190524.md#powershell-when-and-where-writing-logs-matters - [10]: https://www.scriptinglibrary.com/languages/powershell/powershell-when-and-where-writing-logs-matters/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190524.md#powershell--devops-global-summit-2019 - [12]: https://www.youtube.com/playlist?list=PLfeA8kIs7Cocir1-TuSN3mOnj3qzyRShA diff --git a/content/articles/2019-05-30-__trashed.md b/content/articles/2019-05-30-__trashed.md deleted file mode 100644 index 4e00ab8c3..000000000 --- a/content/articles/2019-05-30-__trashed.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: "PowerShell Summit: A First Time Experience" -authors: - - Mark Roloff -date: "2019-05-30T05:13:01+00:00" -categories: - - PowerShell for Admins - - PowerShell Summit -legacy_featured_image: /wp-content/uploads/2018/08/Full-Logo-No-year.png -aliases: - - /2019/05/__trashed/ ---- - -It's been a few weeks since Summit and I feel like my mind has finally started to settle from all of the ideas that I came back with. Plus, being away from home for a week means I had a lot of domestic work and daddy time to catch up on. When Will asked for volunteers to write about their first time experience, I decided to see if I could offer my take on the matter considering gulf between what I expected to get and what I ended up getting. - -### Expectations going in {.wp-block-heading} - -I've known about Summit for a few years, so had an idea of what I was flying off to. Prior year's sessions are easily available on YouTube and I've picked my way through them for particular topics that I've had a need to learn about. I've also seen plenty of post-Summit conversation about how much people have enjoyed it, how valuable the connections they made are, and how they can't wait to go back. I never dug terribly deep into it, though. - -My expectations were that I would arrive, awkwardly socialize with colleagues, maybe some sales or marketing folks, exchange company info with a phone number that I never answer, and attend sessions where I'd learn some cool new things. - -Enjoyably, I was quite wrong... - -### Straight to it {.wp-block-heading} - -I won't mince words here. If you're looking for a conference where the latest doodads and features (available in 6-12 months, I'm looking at you Ignite) are in your face, move along. This isn't it. There aren't really any sales or marketing at Summit (some sponsor booths, but you really have to seek them out). Unless you want to count Summit talking about how great Summit is for you, but I'm chalking that up as more a statement of fact than any kind of pitch. - -When Don Jones gave his keynote, he offered a lot of poignant observations about the state of our industry and where ops fits in with an ever-changing landscape that is more and more dominated by software methodologies. He talked about not letting your job own your career, about taking control of it for yourself, and about building a supportive community around the ownership and growth of our careers. It was all about climbing that pyramid toward self-actualization, and that's where communities like Summit seek to create an environment to help you along that climb. - -By the end of the first afternoon, I was already feeling pretty jazzed up on that alone. - - - ![](https://powershell.org/wp-content/uploads/2019/05/no_ordinary_conference.gif) - - -### Sessions, hallway talks, and stickers {.wp-block-heading} - -Sessions are Summit's bread and butter, and definitely the primary place to see examples of cool tools, best practices, and novel ways of approaching problems that you may not have even known you had. - -Leading up to the event, I spent time in the mobile app going over the sessions to plan out my agenda. Unfortunately, and this is a good problem to have, there was often more than one that I wanted to see during any given time slot. So, I took some advice that I was given during Sunday's reception; I sat in the ones that felt I would potentially want to ask questions in. This, along with prioritizing those sessions that I felt would be most beneficial to the direction I hope to steer my career, ended up working out pretty well for me. - -Each presenter that I saw, and I'm certainly not discounting those I didn't, did a fantastic job of really making their material something that I walked out thirsting for more of. And these sessions really dominated a lot of my thoughts for several days after getting home. My coworker (whom also attended) and I started to immediately brainstorm on how we could apply a lot of what was learned to our workflows and future projects, and I think our boss is both terrified and excited by that. - -Between sessions though, you've got a good opportunity to quickly chat up other attendees in the hall (or the speaker you just saw). People discussing the talk they saw, mentioning details of how they use $x in their environments... Before you know it, you're having mini-sessions between sessions and making mental notes to catch up with particular people during lunch r after-hours activities for more brain-picking. If you follow the community online, it's also common to run across the bloggers and maintainers whose work you probably use frequently. It's cool; they don't bite and everyone is happy to hear about how their contributions have helped others, and a lot of them want to know about _you_ too. - -Stickers, now, are a curious point and a surprisingly omnipresent part of the event. If you think you're not really into stickers, you may very well leave Summit changed in that respect. They're everywhere. Custom stickers, vendor stickers, event stickers, stickers getting ooh'd and ah'd over like grade school kids and their pogs, and whenever someone enters a room to drop a pile on a table, people flock over them like pigeons at the park. It's a fun and geeky collectible to be proudly displayed on laptops or peg boards back home, and you may quickly find yourself hunting down the creators of certain designs. This, again, leads to making even more connections and getting to know the community. - -### A little coffee and casual chat {.wp-block-heading} - -The side sessions are late/last minute planned break outs that would typically not be recorded. Some examples included a meet and greet with the event's organizers, a meeting of user group organizers, and a brief introduction to PowerShell live streaming. Depending on your level of interest, these could easily be more valuable to you than the standard sessions and I decided to give them a little focus on my last day, when Brandon Lundt hosted a lean coffee session. - -This was an interesting format that I had never seen or heard of before; they honestly just had me at "coffee" and "deep discussion" in the description. This is how it works... - -Everyone writes a few topics on paper, puts them into a hat, those get sorted, and we'd move through them in order of popularity. Majority votes would keep a topic alive or move to the next every 10-15 minutes. - -What we spent most of our time on was concerns around community engagement in user groups. Having recently taken up a co-leadership role in Denver's user group, my interest was piqued and I learned that lots of groups share similar struggles... Location, expanding their number of regulars with fresh faces, topics... And I walked away with some good ideas for addressing some of that. One of my favorites being a semi-regular event to simply get newcomers introduced to PowerShell, and once they've tasted the sweet freedom of automation, give them more. We may also try rotating our location every month or so to better appeal to more people across our sprawling city. Definitely plenty to discuss with my other partners in crime at the group. - -### Departing impressions {.wp-block-heading} - -I have difficulty imagining that anyone could attend Summit and _not_ walk away feeling at least a little humbled by how invested in itself this community is. Everybody you meet is happy to share their experiences and knowledge, eager to help others learn, and enthusiastic to see others grow. And I left with a strong desire to see if we can bring some of that flavor into our local group, and provide some support and guidance for people looking to own their careers. - -I'm definitely hoping to attend again next year and I'd absolutely encourage anyone else to as well. Even if you feel like a bit of a wallflower, there's tremendous value in it for you; both personally and professionally. diff --git a/content/articles/2019-05-31-icymi-powershell-week-of-31-may-2019.md b/content/articles/2019-05-31-icymi-powershell-week-of-31-may-2019.md deleted file mode 100644 index b5ef2960a..000000000 --- a/content/articles/2019-05-31-icymi-powershell-week-of-31-may-2019.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 31-May-2019" -authors: - - Mark Roloff -date: "2019-05-31T15:00:46+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/10/default-image.png -aliases: - - /2019/05/icymi-powershell-week-of-31-may-2019/ ---- - -Topics include the PowerShell 7 preview, exporting SCCM task sequences, integration testing, and cloud automation. - - - -Content curated by Robin Dadswell, Prasoon Karunan V, and Mark Roloff. - -###### [][1][_Follow this step-by-step guide to use AWS Lambda with PowerShell_][2] {.wp-block-heading} - -by Prateek Singh on May 27th - -A great and detailed starting point for Lambda Functions, and all from the shell. - -###### [][3][_An Example Azure DevOps Build Pipeline for PowerShell modules_][4] {.wp-block-heading} - -by Adam Rush on May 27th - -If you're looking to dip a toe into the current best practice for building modules, this blog from Adam is a good place to start. - -###### [][5][_Export Task Sequences, Packages, Baselines with Logging_][6] {.wp-block-heading} - -by Gary Blok on May 25th - -For those in the SCCM world, Gary's script works through a handy process of exporting task sequences and comparing them to a backed up copy to determine if any changes have been made. There's lots of nice little nuggets in here. - -###### [][7][_PowerShell – Testing endpoints that perform Anti-forgery verification_][8] {.wp-block-heading} - -by Stephen Owen on May 29th - -Testing is so hot right now, and Stephen has a pretty cool example of integration testing to validate that a web app is properly catching CSRF attacks. - -###### [][9][_PowerShell 7 Road Map_][10] {.wp-block-heading} - -by Steve Lee on May 30th - -PowerShell 7 is coming! The first preview version is out. The road map is here. There're some exciting changes with this, including line continuation with the pipe at the start of a newline. - -###### [][11][_Reddit /r/PowerShell - Script Sharing_][12] {.wp-block-heading} - -/u/atoomepuu shares a great little script with a WPF GUI for viewing and removing user profiles. - -###### [][13][_Podcast: CloudSkills.fm Ep.23: Cloud Development and Automation with PowerShell_][14] {.wp-block-heading} - -If you haven't listened to Mike Pfeiffer's podcast, it's well worth your time. This episode features MVP Adam Driscoll, of Universal Dashboard and PowerShell Pro Tools fame. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190531.md#follow-this-step-by-step-guide-to-use-aws-lambda-with-powershell - [2]: https://searchaws.techtarget.com/tutorial/Follow-this-step-by-step-guide-to-use-AWS-Lambda-with-PowerShell - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190531.md#an-example-azure-devops-build-pipeline-for-powershell-modules - [4]: https://adamrushuk.github.io/example-azure-devops-build-pipeline-for-powershell-modules/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190531.md#export-task-sequences-packages-baselines-with-logging - [6]: https://garytown.com/export-task-sequences-packages-baselines-with-logging - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190531.md#powershell--testing-endpoints-that-perform-anti-forgery-verification - [8]: https://foxdeploy.com/2019/05/29/powershell-testing-endpoints-that-perform-anti-forgery-verification/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190531.md#powershell-7-road-map - [10]: https://devblogs.microsoft.com/powershell/powershell-7-road-map/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190531.md#reddit-rpowershell---script-sharing - [12]: https://old.reddit.com/r/PowerShell/comments/bslu5n/powershell_script_to_view_and_delete_local/ - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190531.md#podcast-cloudskillsfm-ep23-cloud-development-and-automation-with-powershell - [14]: https://cloudskills.fm/023 diff --git a/content/articles/2019-06-07-icymi-powershell-week-of-7-june-2019.md b/content/articles/2019-06-07-icymi-powershell-week-of-7-june-2019.md deleted file mode 100644 index 48eb41e8d..000000000 --- a/content/articles/2019-06-07-icymi-powershell-week-of-7-june-2019.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 7-June-2019" -authors: - - Mark Roloff -date: "2019-06-07T15:30:56+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/06/icymi-powershell-week-of-7-june-2019/ ---- - -Topics include checking patch status, About help docs, variable scoping, and proposed changes to PowerShellGet. - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, and Mark Roloff - -###### [][1][_Demo: Debug PowerShell Azure Functions locally_][2] {.wp-block-heading} - -by Dan O'Sullivan on June 3rd - -Looking to dip into Azure Functions? Dan has a nice demo on local debugging that can help iron out any kinks in your code. - -###### [][3][_PowerShell Script to Find Out Patch Installation Status on Remote Computers_][4] {.wp-block-heading} - -by Hareesh Jampani on June 4th - -Hareesh has put together a script that can help you quickly determine the status of patches on your systems. - -###### [][5][_Dude, where’s my var? – Understanding scoping in Universal Dashboard_][6] {.wp-block-heading} - -by Adam Driscoll on June 5th - -Scoping can sometimes get confusing. Especially in runspaces, which are a core component of how UD works. Adam does a great job of breaking this down for the rest of us neophytes. - -###### [][7][_PowerShell Basics: Meet About - The Owner’s Manual for PowerShell_][8] {.wp-block-heading} - -by Michael Bender on June 6th - -The About pages in PowerShell's help docs are some of the best places to learn new concepts. Everyone should know about them, use them, love them. - -###### [][9][_RFC - DSC Community Logo_][10] {.wp-block-heading} - -The DSC community has decided that it's time for a logo. Hop in, check out the options, vote on your favorite! - -###### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} - -Description of Reddit topic - -###### [][13][_Tweet of the Week_][14] {.wp-block-heading} - -Steve Lee inherits PowerShellGet (Find/Install-Module) and issues an RFC to discuss proposed breaking changes with the new version. - -###### [][15][_Youtube: Automating Active Directory Health Checks with PSADHealth_][16] {.wp-block-heading} - -From the London PowerShell Meetup, Daniel Krebs covers the PSADHealth module and how it can help you monitor AD for any issues. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190607.md#demo-debug-powershell-azure-functions-locally - [2]: https://blog.osull.com/2019/06/03/demo-debug-powershell-azure-functions-locally/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190607.md#powershell-script-to-find-out-patch-installation-status-on-remote-computers - [4]: https://www.anoopcnair.com/powershell-script-patch-installation-status/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190607.md#dude-wheres-my-var--understanding-scoping-in-universal-dashboard - [6]: https://ironmansoftware.com/dude-wheres-my-variable-understanding-scoping-in-universal-dashboard/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190607.md#powershell-basics-meet-about---the-owners-manual-for-powershell - [8]: https://techcommunity.microsoft.com/t5/ITOps-Talk-Blog/PowerShell-Basics-Meet-About-The-Owner-s-Manual-for-PowerShell/ba-p/668443?WT.mc_id=ITOPSTALK-reddit-abartolo - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190607.md#rfc---dsc-community-logo - [10]: https://github.com/PowerShell/DscResources/issues/507 - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190607.md#reddit-rpowershell---most-popular-weekly-post - [12]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/URL - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190607.md#tweet-of-the-week - [14]: https://twitter.com/Steve_MSFT/status/1134513315973980160?s=19 - [15]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190607.md#youtube-automating-active-directory-health-checks-with-psadhealth - [16]: https://www.youtube.com/watch?v=Xldbaxw4vJI diff --git a/content/articles/2019-06-14-icymi-powershell-week-of-14-june-2019.md b/content/articles/2019-06-14-icymi-powershell-week-of-14-june-2019.md deleted file mode 100644 index 87be45389..000000000 --- a/content/articles/2019-06-14-icymi-powershell-week-of-14-june-2019.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 14-June-2019" -authors: - - Mark Roloff -date: "2019-06-14T15:00:33+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/06/icymi-powershell-week-of-14-june-2019/ ---- - -Topics include Pester goodness, auto cleanup of Azure resources, PSPowerHour, and more. - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, and Mark Roloff. - -###### [][1][_Testing Self-contained Scripts With Pester_][2] {.wp-block-heading} - -by Jakub Jareš on June 9th - -Unit testing your scripts can be a pain if you're in the habit of calling functions in the same file that you declare them in. - -###### [][3][_Azure Garbage Collection_][4] {.wp-block-heading} - -by Charles Féval on June 10th - -If you're forgetful and sometimes leave test resources in Azure longer than necessary, Charles has a great Function App that automatically categorizes and cleans up specially marked resources. Our wallets rejoice! - -###### [][5][_Using PowerShell to retrieve CAC Information_][6] {.wp-block-heading} - -by Peter Vanhaverbeke on June 12th - -Those of you in the military space may be working with Federal Agency Smartcard Numbers. Peter has whipped together a script for pulling certificate information from those cards. - -###### [][7][_Project: Terminal-Icons_][8] {.wp-block-heading} - -by Brandon Olin - -Need to class your shell up a bit? Brandon has released a module that'll display folder and file icons right in the shell. - -###### [][9][_YouTube: Powershell Is DEAD-Epic Learnings!_][10] {.wp-block-heading} - -by Ben Turner, Doug McLeod, Rob Maslen on June 9th - -From Security BSides London, this is a pretty damn cool deep dive into some of the latest techniques used by red and blue teams with PowerShell and it's underlying or related technologies. - -###### [][11][_Youtube: PSPowerHour 008: 2019-06-13_][12] {.wp-block-heading} - -It's been a while but PSPowerHour is back with some great lightning content. Azure pipelines, web servers, fonts, and more! - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190614.md#testing-self-contained-scripts-with-pester - [2]: http://jakubjares.com/2019/06/09/2019-07-testing-whole-scripts/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190614.md#azure-garbage-collection - [4]: https://www.feval.ca/posts/azure-garbage-collection/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190614.md#using-powershell-to-retrieve-cac-information - [6]: https://sccmf12twice.com/2019/06/using-powershell-to-retrieve-cac-information/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190614.md#project-terminal-icons - [8]: https://github.com/devblackops/Terminal-Icons - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190614.md#youtube-powershell-is-dead-epic-learnings - [10]: https://www.youtube.com/watch?v=wIhlchiRmKQ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190614.md#youtube-pspowerhour-008-2019-06-13 - [12]: https://www.youtube.com/watch?v=9go5hF5S7Ig diff --git a/content/articles/2019-06-14-universal-dashboard-templates-scaffolding-a-new-ud-project-with-powershell.md b/content/articles/2019-06-14-universal-dashboard-templates-scaffolding-a-new-ud-project-with-powershell.md deleted file mode 100644 index 7bd17949a..000000000 --- a/content/articles/2019-06-14-universal-dashboard-templates-scaffolding-a-new-ud-project-with-powershell.md +++ /dev/null @@ -1,215 +0,0 @@ ---- -title: Universal Dashboard Templates – Scaffolding a New UD Project with Powershell -authors: - - Nathaniel Webb (ArtisanByteCrafter) -date: "2019-06-14T15:28:58+00:00" -categories: - - PowerShell for Admins -aliases: - - /2019/06/universal-dashboard-templates-scaffolding-a-new-ud-project-with-powershell/ ---- - -_All code from this article is freely available on Github as a template repository. Just click "Use this template" on the repository page here:_ - - - https://github.com/ArtisanByteCrafter/ud-template - - - -## The Why {.wp-block-heading} - -Why should you consider scaffolding a new project? While we're here, what exactly is scaffolding? Much like the term's origin a project scaffold is meant to build a consistent framework and design that you can use to build your projects with. - -If you've used products like Visual Studio, you're already familiar with scaffolding when you choose to begin a "New Project". The IDE will auto-generate commonly used files and folder structures for the language you're writing in. - -I'm taking this same approach with my ud-template utility. By simply running the included - - -`New-UDProject -`script with a single parameter - - -`-ProjectName 'myProject' -`we invoke all the necessary steps to create a running dashboard with some pretty handy features already enabled. - -Let's take a look at what we get and how it works. - -## The How {.wp-block-heading} - -![Imgur](https://i.imgur.com/y7nBe0G.gif) - - -`New-UDProject -ProjectName 'myProject' -`is the only command you need to run in order to create a new project framework for UD. It performs several things on your behalf: - -**Creating the module** - -We start by creating a module for our dashboard. We're going to use this module along with some boilerplate code in the .psm1 file to automatically import and source our functions. - -It's definitely possible to import functions into all runspaces without a module using a - - -`New-EndpointInitialization -`declaration in the - - -`dashboard.ps1 -`but I find this get's unwieldy very quickly on more robust projects, so I prefer each function in it's own file in a standard location, - - -`/src -`. - -**Creating the file/folder structure** - -The basic strucutre of our project is laid out as follows: - - -`│ dashboard.ps1 -│ dbconfig.json -│ New-UDProject.ps1 -│ README.md -│ -├───assets -├───pages -│ home.ps1 -│ -├───src -└───themes - SampleTheme.ps1 -`- - Functions - - - -Every function we want to declare will be in it's own - - -`function.ps1 -`file in the - - -`/src -`folder, which our module will pick up and dot-source for all runspaces. This means every function should automatically be available for use in every script block of our dashboard. - - - - - Pages - - - -I like to keep every page of my dashboard in it's own - - -`page.ps1 -`file in - - -`/pages -`. Every file in this directory will be appended automatically to our dashboard and available from the navigation menu. a home page is included by default. - - - - - Themes - - - -Similar to functions, every theme should be in it's own .ps1 file in - - -`/themes -`and will be sourced for the dashboard. Note, only a single theme can be used at a time, as this is the design of Universal Dashboard. By default, the dark-themed - - -`SampleTheme.ps1 -`is enabled, as seen in the screenshot above. - - - - - Dashboard Configuration - - - -I love json. It's ok if you don't but you're wrong and you should feel bad <3 that's fine. For this project however, I'm using a very simple json configuration to keep track of the project name, root module, and port our dashboard is running on. This is auto-generated from - - -`New-UDProject -`when you run it the first time. I'm sure this will evolve to include more aspects of my dashboards in the future. - -> - -> If you're considering storing any form of credential in your json file…don't. Please. Think of the kittens. There are excellent ways to deal with [authentication requests in code](https://github.com/ArtisanByteCrafter/KaceSMA/wiki/FAQ#q-i-want-to-run-my-api-script-in-an-automated-fashion-can-i-store-credentials-to-use-rather-than-being-prompted). -> - - - - - Assets - - - -Assets are anything that needs to be included with your project and don't have another home- for example, fonts or images. This empty folder is created by - - -`New-UDProject -`as well. - - - - - Running the dashboard - - - -The last aspect i want to cover is how this project runs the dashboard. Our - - -`dashboard.ps1 -`covers several areas. - -Import our config file - - -`$ConfigurationFile = Get-Content (Join-Path $PSScriptRoot dbconfig.json) | ConvertFrom-Json -`Import our module we created - - -`Try { - Import-Module (Join-Path $PSScriptRoot $ConfigurationFile.dashboard.rootmodule) -ErrorAction Stop -} Catch { - Write-Warning "Valid function module not found. Generate one by running $(Join-Path $PSScriptRoot New-UDProject.ps1) -ProjectName 'myProject'" - break; -} -`Source our themes folder - - -`. (Join-Path $PSScriptRoot "themes\*.ps1") -`Generate our pages - - -`$PageFolder = Get-ChildItem (Join-Path $PSScriptRoot pages) -$Pages = Foreach ($Page in $PageFolder){ - . (Join-Path $PSScriptRoot "pages\$Page") -} -`Auto-import our module, and thus our functions in /src - - -`$Initialization = New-UDEndpointInitialization -Module @(Join-Path $PSScriptRoot $ConfigurationFile.dashboard.rootmodule) -`Start our dashboard - - -`$DashboardParams=@{ - Title = $ConfigurationFile.dashboard.title - Theme = $SampleTheme - Pages = $Pages - EndpointInitialization = $Initialization -} -$MyDashboard = New-UDDashboard @DashboardParams -Start-UDDashboard -Port $ConfigurationFile.dashboard.port -Dashboard $MyDashboard -Name $ConfigurationFile.dashboard.title -`This project is completely open source and I always like to hear feedback, or even a pull request for something you think is neat. - -Happy dashboarding! - -Nate - -This is a cross-post of the original blog post on my personal blog here: [https://www.natelab.us/universal-dashboard-templates-scaffolding-a-new-ud-project-with-powershell][1] - - [1]: https://www.natelab.us/universal-dashboard-templates-scaffolding-a-new-ud-project-with-powershell/ diff --git a/content/articles/2019-06-21-icymi-powershell-week-of-21-june-2019.md b/content/articles/2019-06-21-icymi-powershell-week-of-21-june-2019.md deleted file mode 100644 index c2f7bab85..000000000 --- a/content/articles/2019-06-21-icymi-powershell-week-of-21-june-2019.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 21-June-2019" -authors: - - Robin Dadswell -date: "2019-06-21T14:00:46+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/06/icymi-powershell-week-of-21-june-2019/ ---- - -Topics include security tools, security fixes, operation validation and module updates and open source UI creation. - - - -Special thanks to Prasoon Karunan V,Mark Roloff and Robin Dadswell. - -###### [][1][_WINSpect - Powershell based Windows Auditing Tool_][2] {.wp-block-heading} - -by Bala Ganesh on June 20th - -An over view of the WINSpect Tool. - -###### [][3][_PSAvalonia – Open source PowerShell bindings for Avalonia_][4] {.wp-block-heading} - -by Adam Driscoll on June 17th - -Avalonia is a WPF-style cross-platform UI library. Today, we are open sourcing a PowerShell module to create UIs using the Avalonia library. The Avalonia bindings that were once part of PowerShell Pro Tools are now open source and up on GitHub and the PowerShell Gallery. - -###### [][5][_Distributed and Flexible Operations Validation Framework – Introduction_][6] {.wp-block-heading} - -by Ravikanth Chaganti on June 17th - -Learn about the various options for operation validations are, and the limitations each come with. - -###### [][7][_New Release: VMware PowerCLI 11.3.0_][8] {.wp-block-heading} - -by Kyle Ruddy on June 20th - -See what updates have been made in PowerCLI 11.3.0 from speed improvements to new cmdlets. - -###### [][9][_Mitigating BlueKeep with PowerShell_][10] {.wp-block-heading} - -by Mike F Robbins on June 14th - -Ways to mitigate the BlueKeep vulnerability using remote PowerShell - -###### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} - -Help out in a discussion about SSL PowerShell Remoting, should it be done, or shouldn't it? - -###### [][13][_Youtube: Tyler Leonhardt - Simply REST API testing with Autorest and PowerShell_][14] {.wp-block-heading} - -Simplify testing of REST APIs using PowerShell and AutoRest - -Testing REST APIs can be a pain. First you must construct you URI, then you decide what headers you need, maybe it needs a body… Then you’ll throw it in tools like cURL or Postman and hope you’ve formatted it correctly. What if it didn’t have to be that way? What if you could interact with your REST API from the comfort of your terminal without having to build a single URL. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190621.md#winspect---powershell-based-windows-auditing-tool - [2]: https://gbhackers.com/winspect-windows-auditing-tool/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190621.md#psavalonia--open-source-powershell-bindings-for-avalonia - [4]: https://ironmansoftware.com/psavalonia-open-source-powershell-bindings-for-avalonia/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190621.md#distributed-and-flexible-operations-validation-framework--introduction - [6]: https://www.powershellmagazine.com/2019/06/17/distributed-and-flexible-operations-validation-framework-introduction/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190621.md#new-release-vmware-powercli-1130 - [8]: https://blogs.vmware.com/PowerCLI/2019/06/new-release-powercli-11-3-0.html - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190621.md#mitigating-bluekeep-with-powershell - [10]: https://mikefrobbins.com/2019/06/14/mitigating-bluekeep-with-powershell/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190621.md#reddit-rpowershell---most-popular-weekly-post - [12]: https://www.reddit.com/r/PowerShell/comments/c349xf/enabling_ssl_for_powershell_remoting_by_default/ - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190621.md#youtube-tyler-leonhardt---simply-rest-api-testing-with-autorest-and-powershell - [14]: https://www.youtube.com/watch?v=LGQOGj0upZM&feature=youtu.be diff --git a/content/articles/2019-06-28-icymi-powershell-week-of-28-june-2019.md b/content/articles/2019-06-28-icymi-powershell-week-of-28-june-2019.md deleted file mode 100644 index 72aff015a..000000000 --- a/content/articles/2019-06-28-icymi-powershell-week-of-28-june-2019.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 28-June-2019" -authors: - - Mark Roloff -date: "2019-06-28T17:29:40+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/06/icymi-powershell-week-of-28-june-2019/ ---- - -Topics include working with ARM templates, shells, shells, shells, and DSC. - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, and Mark Roloff. - -###### [][1][_Garuda – Architecture and Plan_][2] {.wp-block-heading} - -by Ravikanth Chaganti on June 24th - -Looking to develop a new OVF, Ravikanth details the his proposed architecture for Garuda, as was demonstrated at PSConfEU. - -###### [][3][_How To Modify Azure ARM Templates with PowerShell_][4] {.wp-block-heading} - -by Adam Bertram on June 26th - -A nice thing about ARM templates is that they're JSON, which can be nicely converted into objects in PS for easy automation or testing. Adam's article gets you going with some guidance there. - -###### [][5][_DSC Resource Kit Release June 2019_][6] {.wp-block-heading} - -by Katie Kragenbrink on June 26th - -A new DSC Resource Kit has landed with updates to several modules. - -###### [][7][_Last time I saw this many shells, someone sold them by the sea shore_][8] {.wp-block-heading} - -by James O'Neill on June 22nd - -We have a lot of options for shells on Windows nows and James digs into some of the pros and cons of several of them. Figuring out how you like to run your PS? There's good detail for you here then. - -###### [][9][_Reddit /r/PowerShell_][10] {.wp-block-heading} - -Lots of fun stuff happening with the new Windows Terminal and now there's a script to automatically set the shell's color scheme to match your desktop wallpaper. Très beau! - -###### [][11][_Youtube: Publishing and Managing Modules in an Internal Repository by Kevin Marquette_][12] {.wp-block-heading} - -If you've got some PS tools that need internal distribution, let Kevin give you a hand with building a solution to address that. - -###### [][13][_Youtube: 13 Years in a Shell: Lessons, Practices, and Achievements in PowerShell_][14] {.wp-block-heading} - -Presenting at the New York PSUG, Don Jones shares some knowledge, mistakes, and best practices spanning his career around PowerShell. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190628.md#garuda--architecture-and-plan - [2]: https://www.powershellmagazine.com/2019/06/24/garuda-architecture-and-plan/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190628.md#how-to-modify-azure-arm-templates-with-powershell - [4]: https://mcpmag.com/articles/2019/06/26/modify-azure-arm-templates-with-powershell.aspx - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190628.md#dsc-resource-kit-release-june-2019 - [6]: https://devblogs.microsoft.com/powershell/dsc-resource-kit-release-june-2019/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190628.md#last-time-i-saw-this-many-shells-someone-sold-them-by-the-sea-shore - [8]: https://jamesone111.wordpress.com/2019/06/22/last-time-i-saw-this-many-shells-someone-sold-them-by-the-sea-shore/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190628.md#reddit-rpowershell - [10]: https://old.reddit.com/r/PowerShell/comments/c4dzmz/poshwal_now_has_initial_support_for_the_new/?st=jxfmt6wv&sh=584a379a - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190628.md#youtube-publishing-and-managing-modules-in-an-internal-repository-by-kevin-marquette - [12]: https://www.youtube.com/watch?v=__Px5pyGvSs - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190628.md#youtube-13-years-in-a-shell-lessons-practices-and-achievements-in-powershell - [14]: https://www.youtube.com/watch?v=_RbsYJxONww diff --git a/content/articles/2019-07-01-a-farewell-and-a-bunch-of-hellos.md b/content/articles/2019-07-01-a-farewell-and-a-bunch-of-hellos.md deleted file mode 100644 index 7957800fd..000000000 --- a/content/articles/2019-07-01-a-farewell-and-a-bunch-of-hellos.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: A Farewell, and a Bunch of Hellos -authors: - - Don Jones -date: "2019-07-01T13:55:37+00:00" -categories: - - PowerShell for Admins -legacy_featured_image: /wp-content/uploads/2018/10/PowerShell-Summit-2018.png -aliases: - - /2019/07/a-farewell-and-a-bunch-of-hellos/ ---- - -As many of you know, The DevOps Collective recently concluded its 7th US event, PowerShell + DevOps Global Summit 2019 in Bellevue, WA. Head to the [organization's YouTube page][1] for the breakout session recordings, which are live. - -I mentioned going into it that this Summit would be bittersweet for me, as it's the last one I'll be directly involved with. My career's simply taking me in a new direction, and it's much less connected to the day-to-day of technology and more connected with business leadership and strategy. I'll also be stepping back from my involvement with PowerShell.org, and I will not receive a Microsoft MVP Award for this cycle (I'm proud to be one of the few who earned 15 consecutive awards, so I've zero complaints, and this is entirely in line with my expectations). I'm stepping back from the "Month of Lunches" and other technical books as well, although I've still got plenty of writing in me (many of my [Leanpub books][2] are "pay what you think they're worth and remember I've got a mortgage"). I'm going to remain titular President for the DevOps Collective for a year or so while we get all the legal stuff lined up, but I won't be involved in day-to-day activities. I’ll drop a note later this week on [DonJones.com][3] about what’s happening with all “my” stuff. - -It's worth noting that the _entire_ original team for PowerShell.org has now stepped back from daily management of the organization, with only one person remaining active via our new Board. I take that as a huge compliment, and it's something I'm proud of - we all wanted to build something we could hand off, and that a "next generation" could do even better with. And they are. The new team is amazing. They ran the 2019 Summit essentially on their own, just asking a question now and then - something they'll still be welcome to do as they move forward. - -So with that in mind, let's meet them. - -## The Board {.wp-block-heading} - -The main point of the Board is to provide a semiannual sounding board for the CEO of the organization, and that requires broad, diverse perspectives. They're also the legal backstop for the organization, and can replace corporate officers. They can expand or contract the Board size as needed (within legal guardrails) and confirm their own members. I think we've lined up a great group of volunteers: - -**Michael Bender -** Michael's run The Krewe event at TechEd/Ignite for years, and been a huge community supporter. His experience will provide an invaluable perspective to the incoming officers. - -**Jeffrey Hicks -** Jeff's been a collaborator of mine since the VBScript days, and was one of the original PowerShell.org founders. - -**Melissa Jones -** Melissa joined us for our first OnRamp track, and she'll be a voice for the entry-level folks we're trying to offer support to. She's a database administrator, introverted multipotentialite, and avid reader who likes solving problems and figuring out how things work. - -**Paula Kingsley** -Paula has been with Summit pretty much since the beginning, and recently co-starred as an Iron Scripter judge. She's a long-running PowerShell enthusiast and a real IT expert. - - -**Rob Reynolds -** Rob runs Chocolatey, and he's been a big Summit supporter for years. His perspective as a business in our space will be a truly valuable one as we try to further engage a broader community. - -**Bonnie Runimas -** Bonnie's been with Summit since Year 1, and helps run a successful user group in Chicago. She'll provide valuable input on how the organization can help groups like hers across the world. - -## The Team {.wp-block-heading} - -These volunteers run the organization's day-to-day functions: - -**Jeffrey Bernt** runs logistics for events, including Summit and DevOps Camp. - -**Missy Januszko & Warren Frame** will once again be our co-directors of content for both PowerShell + DevOps Summit as well at our new DevOps + Automation Summit in Nashville TN. - -**Mike Kanakos** will be joining the team as our Director of Community Engagement. He will mainly be focusing on engaging with PowerShell user groups and helping with PowerShell / Automation Saturdays. - -**Tim Warner** is heading up the new OnRamp program, handling all the entry-level education at PowerShell + DevOps Global Summit. - -**Rob Pleau** is running the Scholarship aspect of OnRamp, and will coordinate the process of getting new blood into the community. - -**Mark Roloff , Robin Dadswell,** and **Prasoon Karunan V** continue to run the "[In Case You Missed It][4]" (ICYMI) weekly posts. - -Our Forums continue to be moderated by **James Ruskin, Alexander Wittig, Prasoon Karunan V**, and **Wes Stahler**. - -**Harjit Dhaliwal** runs the organization's Social Media accounts, including [@PshOrg][5] , [@PSHSummit][6] , and [@DevOpsOrg][7] - -**Tommy Maynard** will also continue to be a contributing writer to PowerShell.org. - -## **The Officers** {.wp-block-heading} - -Finally, these are the people who are legally accountable for the organization. As I've mentioned, I'll remain as President for some time as we work through the legal paperwork. Also, for the first time, we'll have a paid CEO. As the organization launches new events (Automation + DevOps Summit 2020 in Nashville, new Automation Saturday events, and more), this is just a full-time job, and having someone in that role gives the organization both flexibility and stability. - -**James Petty** will be that CEO, also formally serving as Vice-President and Treasurer. I anticipate James formally stepping into the President role in the future, and we'll need to replace both the Vice-President and Treasurer roles to make that happen. Those will remain volunteer, with the Treasurer's primary job being interfacing with our professional accounting firm. - -**Warren Frame** will step in as Secretary, our fourth legally mandated corporate officer (Nevada permits the Vice-President to hold a dual role, which is what James will do for now). - -## So That's All, Folks {.wp-block-heading} - -So that's the new team. I strongly encourage you to connect with them on Twitter and GitHub, and lend them your help whenever you can. - -In closing, I just want to tell you what an awesome, amazing, kind, supportive group of people you all are. I've been doing the PowerShell 'thang' for 13+ years, and my career as an IT Ops guy goes back to the mid-1990s. For much of that time, you've supported me by buying books, coming to conferences, signing up for classes, and (and this really is the bit that helped) just telling me "thank you." Well, thank _you,_ because it's been amazing. I'm looking forward to the next chapter in my career, and I hope I'll still run into some of you from time to time. If they ask, I'll definitely come up with a session for Summit, if for no other reason than so Chris and I can come hang out with you and all of our other friends for a day or two. - -Again, thank you. - - [1]: http://youtube.com/powershellorg - [2]: http://leanpub.com/u/donjones - [3]: http://donjones.com - [4]: https://powershell.org/category/powershell-admins/ - [5]: https://twitter.com/pshorg - [6]: https://twitter.com/pshsummit - [7]: https://twitter.com/devopsorg diff --git a/content/articles/2019-07-05-icymi-powershell-week-of-5-july-2019.md b/content/articles/2019-07-05-icymi-powershell-week-of-5-july-2019.md deleted file mode 100644 index 6c3693f3a..000000000 --- a/content/articles/2019-07-05-icymi-powershell-week-of-5-july-2019.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 5-July-2019" -authors: - - Mark Roloff -date: "2019-07-05T15:00:08+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/07/icymi-powershell-week-of-5-july-2019/ ---- - -Topics include pop-ups, dbatools, unit testing galore, and chatops. - - - -Curated by Robin Dadswell, Prasoon Karunan V, and Mark Roloff. - -###### [][1][_Get-PwshUpdates: Check if there is a PowerShell update available and install it_][2] {.wp-block-heading} - -by Barbara Forbes on June 30th - -Life happening and you forgot that there's an update for PS Core? Thankfully, Barbara has put together a module to remind you of when there's a new version available for download and lets you install it with a click. - -###### [][3][_How to Show a Pop-Up or Balloon Tip Notification from PowerShell?_][4] {.wp-block-heading} - -July 2nd - -If you need a way to notify your end users when a script completes or otherwise quickly communicate to their desktop, this post runs you through a couple of methods to achieve the task. - -###### [][5][_Unit testing in PowerShell, introduction to Pester_][6] {.wp-block-heading} - -by Olivier Miossec on July 2nd - -The foundations of Pester laid bare, Olivier brings everyone a great first step into the world of unit testing. - -###### [][7][_Hiding Warnings in dbatools_][8] {.wp-block-heading} - -by Shane O’Neill on June 28th - -Error handling is a great notch to have on your belt but if you're working with dbatools, there are a few special considerations that are worth knowing. - -###### [][9][_Youtube: ChatOps and Bots with PowerShell!_][10] {.wp-block-heading} - -From PSConfEU, Steve Lee runs you through the benefits of ChatOps and demonstrates how to build your first PowerShell chat bot. - -###### [][11][Twitch: PowerShell 101 with Michael and Christian - Part 13_][12] {.wp-block-heading} - -From the Brisbane user group, Michael continues a learning series with some work in PS Core. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190705.md#get-pwshupdates-check-if-there-is-a-powershell-update-available-and-install-it - [2]: https://4bes.nl/2019/06/30/get-pwshupdates-check-if-there-is-a-powershell-update-available-and-install-it/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190705.md#how-to-show-a-pop-up-or-balloon-tip-notification-from-powershell - [4]: http://woshub.com/popup-notification-powershell/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190705.md#unit-testing-in-powershell-introduction-to-pester - [6]: https://dev.to/omiossec/unit-testing-in-powershell-introduction-to-pester-1de7 - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190705.md#hiding-warnings-in-dbatools - [8]: https://nocolumnname.blog/2019/06/28/hiding-warnings-in-dbatools/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190705.md#youtube-chatops-and-bots-with-powershell - [10]: https://www.youtube.com/watch?v=8a4kAe766F4 - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190705.md#twitch-powershell-101-with-michael-and-christian---part-13_ - [12]: https://www.twitch.tv/videos/447586518 diff --git a/content/articles/2019-07-08-quick-protip-negotiate-tls-connections-in-powershell-with-a-minimum-tls-version-requirement.md b/content/articles/2019-07-08-quick-protip-negotiate-tls-connections-in-powershell-with-a-minimum-tls-version-requirement.md deleted file mode 100644 index f20e0a828..000000000 --- a/content/articles/2019-07-08-quick-protip-negotiate-tls-connections-in-powershell-with-a-minimum-tls-version-requirement.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: "Quick ProTip: Negotiate TLS Connections In Powershell With A Minimum TLS Version Requirement" -authors: - - Nathaniel Webb (ArtisanByteCrafter) -date: "2019-07-08T21:28:23+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks -aliases: - - /2019/07/quick-protip-negotiate-tls-connections-in-powershell-with-a-minimum-tls-version-requirement/ ---- - -## Synopsis {#synopsis.wp-block-heading} - -This is a quick post to highlight the nuances of Powershell and protocol management in regard to TLS connections. If you've ever attempted to make a secure connection (for example, an API request) to a service with certain net security requirements, you might have run into this problem. - -While TLS is negotiated at the highest level existing on both the server and the client, the minimum protocols defined by Powershell may include ones that you explicitly do not want. While explicitly declaring an enumerated protocol list is easy enough, what happens when Tls13 becomes more common, and we want to start utilizing it when it's available? Then Tls14, and beyond? - -Surely there's a way to give both a minimum version and account for newer protocols once they become available. - -## Retrieving and Configuring TLS {#retrieving-and-configuring-tls.wp-block-heading} - -The first thing we'll want to do is figure out what the default security protocol for our system is, and what all versions are supported. To do this, we leverage the .NET method - - -`[Net.ServicePointManager]::SecurityProtocol -`. - - -`PS> [Net.ServicePointManager]::SecurityProtocol -SystemDefault -`On my Windows 10 system with Powershell v5.1, this returns a value of - - -`SystemDefault -`. This value was introduced in .NET 4.7 (prior versions of .NET return no default value, only an enumerated list), and allows your operating system to pick the protocol to best negotiate the connection with. Under normal circumstances, this would be the best option to use, as defaults change based on the current security landscape. - -However,  - - -`SystemDefault -`might be a bit too lenient in it's declared available protocols. SSLv3?! - yeah,  - -[no thanks][1]. - -We can see the default available protocols with the following: - - -`PS> [enum]::GetValues('Net.SecurityProtocolType') -SystemDefault -Ssl3 -Tls -Tls11 -Tls12 -Tls13 -`Changing the protocol list is a fairly straight forward command: - - -`[System.Net.ServicePointManager]::SecurityProtocol = 'Tls11, Tls12' -`This would declare Tls 1.1 and 1.2 all valid protocols to use. As long as those are present on your computer, this works perfectly fine, and I've seen this method used a lot. This will accomplish our goal of setting a minimum required security protocol. - -Herein lies the nuance of what we're trying to accomplish. While TLS is negotiated at the highest level existing on both the server and the client, the minimum protocols defined in - - -`SystenDefault -`may include ones that you explicitly do not want. If Tls protocols are explicitly defined, we'd need to update our code whenever a new protocol became available. This might be preferable in certain circumstances where you need exact control over how your application communicates, but for my use case, I want this to be a dynamic declaration. - -It turns out that adding support for newer available protocols on a client machine is fairly easy to implement. - - -`PS> $CurrentVersionTls = [Net.ServicePointManager]::SecurityProtocol -PS> $AvailableTls = [enum]::GetValues('Net.SecurityProtocolType') | Where-Object { $_ -ge 'Tls12' } -PS> $AvailableTls.ForEach({ - [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor $_ - }) -PS> [Net.ServicePointManager]::SecurityProtocol -Tls12, Tls13 -`What we've done here is enumerated all available protocols on our computer and declared everything above Tls12 as fit for negotiation. This allows us to be able to both specify a minimum, and include newer protocols once they are available - effectively leveraging the best of - - -`SystemDefault -`and explicit declarations. - -As a courtesy to your users, I would recommend setting the security protocol back to the way it was once your connection or request is finished. - - -`# Be nice and set session security protocols back to how we found them. -[Net.ServicePointManager]::SecurityProtocol = $currentVersionTls -`Happy (secure) shelling! - -Note: This is a cross-post of my original blog post here: - - - - [1]: https://disablessl3.com/ diff --git a/content/articles/2019-07-12-icymi-powershell-week-of-12-july-2019.md b/content/articles/2019-07-12-icymi-powershell-week-of-12-july-2019.md deleted file mode 100644 index 06c714aa3..000000000 --- a/content/articles/2019-07-12-icymi-powershell-week-of-12-july-2019.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 12-July-2019" -authors: - - Robin Dadswell -date: "2019-07-12T15:00:20+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/07/icymi-powershell-week-of-12-july-2019/ ---- - -Topics include WPF GUIs, BitLocker and LAPS reporting, more APIs, and tips from a consultant. - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, and Mark Roloff. - -###### [][1][_[Tutorial] Creating Extensive PowerShell GUI Applications – PART 1_][2] {.wp-block-heading} - -by Dom Ruggeri on July 6th - -For those interested in dipping their toes into creating GUIs with PowerShell, Dom has started a great series covering his approach to keeping the GUI elements organized and wiring them up to some code. - -###### [][3][_Managing the Ghost API with PowerShell: Oh the Possibilities!_][4] {.wp-block-heading} - -by Adam Bertram on July 11th - -Perhaps to celebrate migrating his blog to the Ghost platform, Adam explores how to work with the service's REST API via PowerShell. - -###### [][5][_Getting Bitlocker and LAPS summary report with PowerShell_][6] {.wp-block-heading} - -by Przemyslaw Klys on July 11th - -Need a presentable report for management? This fun script will put one in your hands. Or, take some time to poke at it and learn some cool new tricks with collecting data. - -###### [][7][_3 Ways to Create Custom TypeNames on PowerShell Objects_][8] {.wp-block-heading} - -by Prateek Singh on July 11th - -If you're using the - - -`types.ps1xml -`to format how your objects are displayed, here are a few different ways to define your object typename. - -###### [][9][_Quantum Computing with... PowerShell?_][10] {.wp-block-heading} - -Quantum chemistry your thing? We stumbled across a portion of MS's Quantum Development Kit that integrates a little functionality with our favorite language. - -###### [][11][_Youtube: Lessons from the field: How an IT consultant uses PowerShell to get the job done with David Stein_][12] {.wp-block-heading} - -Presenting to the Research Triangle PowerShell User Group, David gives a glimpse into how PS has changed the landscape of his job as a consultant. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190712.md#tutorial-creating-extensive-powershell-gui-applications--part-1 - [2]: https://domruggeri.com/2019/07/06/creating-extensive-powershell-gui-applications-part-1/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190712.md#managing-the-ghost-api-with-powershell-oh-the-possibilities - [4]: https://adamtheautomator.com/psghost-automate-your-ghost-blog-with-powershell/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190712.md#getting-bitlocker-and-laps-summary-report-with-powershell - [6]: https://evotec.xyz/getting-bitlocker-and-laps-summary-report-with-powershell/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190712.md#3-ways-to-create-custom-typenames-on-powershell-objects - [8]: https://ridicurious.com/2019/07/11/3-ways-to-create-custom-typenames-in-powershell/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190712.md#quantum-computing-with-powershell - [10]: https://github.com/microsoft/Quantum/tree/master/Chemistry/GetGateCount - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190712.md#youtube-lessons-from-the-field-how-an-it-consultant-uses-powershell-to-get-the-job-done-with-david-stein - [12]: https://www.youtube.com/watch?v=vAcQzjKcfrM diff --git a/content/articles/2019-07-19-icymi-powershell-week-of-17-july-2019.md b/content/articles/2019-07-19-icymi-powershell-week-of-17-july-2019.md deleted file mode 100644 index c2421aeb4..000000000 --- a/content/articles/2019-07-19-icymi-powershell-week-of-17-july-2019.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 17-July-2019" -authors: - - Mark Roloff -date: "2019-07-19T16:22:40+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/07/icymi-powershell-week-of-17-july-2019/ ---- - -Topics include PowerShell 7, Ubiquiti APIs, Chocolatey, and DSC. - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, and Mark Roloff. - -###### [][1][_Accessing your Ubiquiti Unifi network configuration with PowerShell_][2] {.wp-block-heading} - -by Darren Robinson on July 15th - -Ubiquiti is a popular choice for budget-conscious techies and Darren demonstrates how you can start pulling useful information out of your network with their REST API. - -###### [][3][_PowerShell Scripting Techniques and Gems – Part 1_][4] {.wp-block-heading} - -by Martijn van Geffen on July 16th - -Are you familiar with the - - -`Where -`method? It's a feature of collections that not many people are aware of, and Martijn does a nice dive into its usage and performance. - -###### [][5][_Introducing the Chocolatey Remote Management PowerShell GUI_][6] {.wp-block-heading} - -by Dan Franciscus on July 16th - -Dan shows a handy GUI tool that his helpdesk can use for assistance in remote Chocolatey management. Code available on GitHub. - -###### [][7][_How to create archive with PowerShell?_][8] {.wp-block-heading} - -by Robert Senktas on July 15th - -Robert explores the relative performance of - - -`Compress-Archive -`versus directly calling .NET. - -###### [][9][_Diagnosing Common Windows Problems With PowerShell Troubleshooting Packs_][10] {.wp-block-heading} - -by Brien Posey on July 15th - -It never hurts to have an extra tool in your bag of tricks, so if you're supporting Windows 10 you could give these troubleshooting packs a whirl with PowerShell. - -###### [][11][_Desired State Configuration (DSC) – Configuration Data_][12] {.wp-block-heading} - -by Nedim Mehic on July 18th - -In part 3 of this series, Nedim takes a deep dive into DSC configuration data, covering some less obvious details and pointing out pitfalls to avoid. - -###### [][13][_PowerShell 7 Preview 2_][14] {.wp-block-heading} - -Preview 2 of PS v7 has been released. Get it. Play with it. Break it. Send feedback. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190719.md#accessing-your-ubiquiti-unifi-network-configuration-with-powershell - [2]: https://blog.darrenjrobinson.com/accessing-your-ubiquiti-unifi-network-configuration-with-powershell/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190719.md#powershell-scripting-techniques-and-gems--part-1 - [4]: https://www.tech-savvy.nl/2019/07/16/powershell-scripting-techniques-and-gems-part-1/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190719.md#introducing-the-chocolatey-remote-management-powershell-gui - [6]: https://winsysblog.com/2019/07/introducing-the-chocolatey-remote-management-powershell-gui.html - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190719.md#how-to-create-archive-with-powershell - [8]: http://blog.senktas.net/2019/07/15/how-to-create-archive-with-powershell/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190719.md#diagnosing-common-windows-problems-with-powershell-troubleshooting-packs - [10]: http://techgenix.com/powershell-troubleshooting-packs/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190719.md#desired-state-configuration-dsc--configuration-data - [12]: https://nedimmehic.org/2019/07/18/desired-state-configuration-dsc-configuration-data/ - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190719.md#powershell-7-preview-2 - [14]: https://github.com/PowerShell/PowerShell/releases/tag/v7.0.0-preview.2 diff --git a/content/articles/2019-07-26-icymi-powershell-week-of-26-july-2019.md b/content/articles/2019-07-26-icymi-powershell-week-of-26-july-2019.md deleted file mode 100644 index d628b375a..000000000 --- a/content/articles/2019-07-26-icymi-powershell-week-of-26-july-2019.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 26-July-2019" -authors: - - Mark Roloff -date: "2019-07-26T15:00:09+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/07/icymi-powershell-week-of-26-july-2019/ ---- - -Topics include an in-depth tutorial, extending PS with Rust, mail archives, and Pester reports. - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, and Mark Roloff. - -###### [][1][_PowerShell Tutorial Mini-Course: Building a Server Inventory Script_][2] {.wp-block-heading} - -by Adam Bertram on July 22nd - -Stepping from one-liners to a full script can be a daunting threshold. Fortunately, Adam has a great tutorial that walks you through his thought-process behind piecing together a reusable tool. - -###### [][3][_Extending PowerShell with Rust_][4] {.wp-block-heading} - -by Doug Finke on July 21st - -Need to squeeze more performance out of your PowerShell but the thought of writing C# isn't sitting well with you? Well, how about Rust? - -###### [][5][_Mission Impossible Code Part 2: Extreme Multilingual IaC (via Standard Code for Preflight TCP Connect Testing a List of Endpoints in Both Bash and PowerShell)_][6] {.wp-block-heading} - -by Darwin Sanoy on July 23rd - -Join Darwin's trip down the rabbit hole of working out a xplat method for validating critical network connectivity before onboarding new systems. - -###### [][7][_Disconnect, migrate and reconnect your PST with PowerShell_][8] {.wp-block-heading} - -by Damien Van Robaeys on July 23rd - -I've long believed that PSTs are the handiwork of Satan but they're often a necessary evil that we endure. Fortunately, locating and migrating them is a snap with Damien's script. - -###### [][9][_Pester Result Reporting With Suggestions And XSL Support_][10] {.wp-block-heading} - -by Prasoon Karunan V on July 25rd - -Desiring nicer looking test results, Prasoon extends Pester, allowing it to generate browser-friendly reports. - -###### [][11][_Tweet of the Week_][12] {.wp-block-heading} - -It's always cool to see what new PowerShell tools the InfoSec community comes up with. ThreatHunt simulates attack methods by raising alerts for you to practice hunting down. - -###### [][13][_Youtube: Powershell and Selenium_][14] {.wp-block-heading} - -Presenting at the St. Louis User Group, Ken Maglio covers everything you need to know to start automating Chrome with the help of Selenium. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190726.md#powershell-tutorial-mini-course-building-a-server-inventory-script - [2]: https://adamtheautomator.com/powershell-tutorial-mini-course/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190726.md#extending-powershell-with-rust - [4]: https://dfinke.github.io/powershell/2019/07/21/Extending-PowerShell-with-Rust.html - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190726.md#mission-impossible-code-part-2-extreme-multilingual-iac-via-standard-code-for-preflight-tcp-connect-testing-a-list-of-endpoints-in-both-bash-and-powershell - [6]: https://cloudywindows.io/post/mission-impossible-code-part-2-extreme-multilingual-iac-via-standard-code-for-preflight-tcp-connect-testing-a-list-of-endpoints-in-both-bash-and-powershell/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190726.md#disconnect-migrate-and-reconnect-your-pst-with-powershell - [8]: http://www.systanddeploy.com/2019/07/disconnect-migrate-and-reconnect-your.html - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190726.md#pester-result-reporting-with-suggestions-and-xsl-support - [10]: https://www.powershellmagazine.com/2019/07/25/pester-result-reporting-with-suggestions-and-xsl-support/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190726.md#tweet-of-the-week - [12]: https://twitter.com/MiladMSFT/status/1152222809747329024?s=20 - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190726.md#youtube-powershell-and-selenium - [14]: https://www.youtube.com/watch?v=A6ZKzLN2CDs diff --git a/content/articles/2019-08-02-icymi-powershell-week-of-2-august-2019.md b/content/articles/2019-08-02-icymi-powershell-week-of-2-august-2019.md deleted file mode 100644 index 402a2de13..000000000 --- a/content/articles/2019-08-02-icymi-powershell-week-of-2-august-2019.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 2-August-2019" -authors: - - Robin Dadswell -date: "2019-08-02T15:00:45+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/08/icymi-powershell-week-of-2-august-2019/ ---- - -Topics include data aggregation, file permission migrations, checking reboots in the registry, credential management, default parameters and setting up for PowerShell Development. - - - -Special thanks to Prasoon Karunan V and Robin Dadswell - -###### [][1][_Aggregating Data with PowerShell_][2] {.wp-block-heading} - -by Jess Pomfret on July 26th - -For DBAs aggregation of data is a given, but how do we do that in PowerShell? Find out with Jess' look into ways to do it. - -###### [][3][_Transferring File Permissions with PowerShell_][4] {.wp-block-heading} - -by Adam Bertram on July 26th - -Maintaining file share permissions across servers can be a major challenge but by using PowerShell, we can automate this process allowing you to go home early. - -###### [][5][_How to Check for a Pending Reboot in the Registry (Windows)_][6] {.wp-block-heading} - -by Adam Bertram on July 28th - -Whenever you install software, updates or make configuration changes, it's common for Windows to need a reboot. Many OS tasks sometimes force Windows to require a reboot. When a reboot is pending, Windows add some registry values to show that. In this blog post, you're going to learn how to check for a pending reboot and how to build a PowerShell script to automate the task. - -###### [][7][_Credential Management Module_][8] {.wp-block-heading} - -by MosaicMK Software on July 30th - -Manage credentials saved to the windows credential manager and call them as clear text or a PSCredential object to be used by other PowerShell Commends - -###### [][9][_What’s in your PowerShell $PSDefaultParameterValues Preference Variable?_][10] {.wp-block-heading} - -by Mike F Robbins on August 1st - -An view into Mike's use of a powerful preference variable added in PowerShell version 3.0. - -###### [][11][_Youtube: Getting setup for PowerShell Development_][12] {.wp-block-heading} - -Learn how to configure and setup your computer for PowerShell Development. In this fourth episode of Learn PowerShell you learn to start coding PowerShell daily with a few free components and easy configuration. Follow along with this video for an easy step-by-step walk-through for getting setup to start writing PowerShell. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190802.MD#aggregating-data-with-powershell - [2]: https://jesspomfret.com/powershell-aggregation/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190802.MD#transferring-file-permissions-with-powershell - [4]: https://adamtheautomator.com/transfer-file-permissions/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190802.MD#how-to-check-for-a-pending-reboot-in-the-registry-windows - [6]: https://adamtheautomator.com/pending-reboot-registry-windows/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190802.MD#credential-management-module - [8]: https://www.mosaicmk.com/2019/07/credential-management-module.html - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190802.MD#whats-in-your-powershell-psdefaultparametervalues-preference-variable - [10]: https://mikefrobbins.com/2019/08/01/whats-in-your-powershell-psdefaultparametervalues-preference-variable/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190802.MD#youtube-getting-setup-for-powershell-development - [12]: https://www.youtube.com/watch?v=4-L7HwLgsf4 diff --git a/content/articles/2019-08-09-icymi-powershell-week-of-9-august-2019.md b/content/articles/2019-08-09-icymi-powershell-week-of-9-august-2019.md deleted file mode 100644 index 9859c99d8..000000000 --- a/content/articles/2019-08-09-icymi-powershell-week-of-9-august-2019.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 9-August-2019" -authors: - - Robin Dadswell -date: "2019-08-09T23:00:02+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/08/icymi-powershell-week-of-9-august-2019/ ---- - -Topics include SharePoint, AD trust relationships, Azure File Sync, working with variables and more. - - - -Special thanks to Prasoon Karunan V and Robin Dadswell - -###### [_Introducing the Azure File Sync DSC resource module_][1] {#introducing-the-azure-file-sync-dsc-resource-module.wp-block-heading} - -by Jan Egil Ring on 4th August - -Introduction to a new PowerShell DSC resource module called AzureFileSyncDsc. Including an overview of what Azure File Sync is. - -###### [_Monitor web server uptime with a PowerShell script_][2] {#monitor-web-server-uptime-with-a-powershell-script.wp-block-heading} - -by Adam Bertram on 4th August - -There are many different tools to monitor whether a web server is running or not. However, if you and/or your team know PowerShell and, perhaps, already have some PowerShell scripts to manage web services, using PowerShell to monitor uptime may be a good option. - -###### [_Testing LDAP and LDAPS connectivity with PowerShell_][3] {#testing-ldap-and-ldaps-connectivity-with-powershell.wp-block-heading} - -by Przemyslaw Klys on 4th August - -One of the common ways to connect to Active Directory is thru LDAP protocol. There are a lot of applications that talk to AD via LDAP. By default Active Directory has LDAP enabled but that's a bit insecure in today's world. That's where LDAPS comes in. It's not easy to set up, but when you get it done, it works. The problem I had recently is that while setting up LDAPS on DC's I only did this on some of the DC's, and not all of them as I should. - -###### [_The End-All Guide to Repairing Active Directory Trust Relationships_][4] {#the-end-all-guide-to-repairing-active-directory-trust-relationships.wp-block-heading} - -by Adam Bertram on 6th August - -Once the most common problems that plagues Windows system administrators is trusted, Active Directory computers seemingly fall off the domain. In this guide, you're going to learn every trick I've come across in my 20+ years managing Active Directory and how to automate it with PowerShell. - -###### [_Modify the Quick Launch in SharePoint Online sites using PowerShell PnP_][5] {#modify-the-quick-launch-in-sharepoint-online-sites-using-powershell-pnp.wp-block-heading} - -by Veronique Lengelle on 7th August - -There are some useful cmdlets in the SharePoint PowerShell PnP module that one wouldn’t think about using, but coupled with a set of other cmdlets, they can be very useful! - -###### [_Reddit /r/PowerShell - Most Popular Weekly Post_][6] {#reddit-rpowershell---most-popular-weekly-post.wp-block-heading} - -Reverse engineering powershell malware - -###### [_Youtube: Working With PowerShell Variables_][7] {#youtube-working-with-powershell-variables.wp-block-heading} - -Learn how to use and work with PowerShell variables. See different PowerShell variable types, and how to identify them. Learn how to get a list of PowerShell constant and environment variables. - - [1]: http://www.powershell.no/powershell,/azure/2019/08/04/azure-filesync-dsc.html - [2]: https://4sysops.com/archives/monitor-web-server-uptime-with-a-powershell-script/ - [3]: https://evotec.xyz/testing-ldap-and-ldaps-connectivity-with-powershell/#utm_source=rss&utm_medium=rss&utm_campaign=testing-ldap-and-ldaps-connectivity-with-powershell - [4]: https://adamtheautomator.com/trust-relationship-between-this-workstation-and-the-primary-domain-failed/?fbclid=IwAR1kl9nheqGadf0gk8z1TK8nfXmfaTWIeBQaXndnbIo1j3RdgIl4BQ6ThMA - [5]: https://veronicageek.com/office-365/sharepoint-online/modify-the-quick-launch-in-sharepoint-online-sites-using-powershell-pnp/2019/08/ - [6]: https://www.reddit.com/r/PowerShell/comments/cmgs6o/reverse_engineering_powershell_malware/ - [7]: https://www.youtube.com/watch?v=4Rc0aEMXiWw diff --git a/content/articles/2019-08-16-icymi-powershell-week-of-16-august-2019.md b/content/articles/2019-08-16-icymi-powershell-week-of-16-august-2019.md deleted file mode 100644 index 5eeed3aa8..000000000 --- a/content/articles/2019-08-16-icymi-powershell-week-of-16-august-2019.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 16-August-2019" -authors: - - Robin Dadswell -date: "2019-08-16T15:00:40+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/08/icymi-powershell-week-of-16-august-2019/ ---- - -Topics include Azure setups, AD reporting, IF statements Out-GridView and other new features coming in PowerShell 7. - - - Special thanks to James Petty, Mark Rollof, Prasoon Karunan V and Robin Dadswell - - -### - [*Pragmatic PowerShell Scripting - Reporting on AD Groups*](https://www.linkedin.com/pulse/pragmatic-powershell-scripting-chris-sharp/) - - - by Chris Sharp on 11th August - - - Learn how Chris approached a requirement to pull various reports from AD using PowerShell and a useful Excel module. - - -### - [*Powershell: Everything you wanted to know about the IF statement*](https://powershellexplained.com/2019-08-11-Powershell-if-then-else-equals-operator/) - - - by Kevin Marquette on 11th August - - - Like many other languages, PowerShell has statements for conditionally executing code in your scripts. One of those statements is the if statement. Today we will take a deep dive into one of the most fundamental commands in PowerShell. - - -### - [*Create an Azure Storage account using PowerShell*](http://www.thatlazyadmin.com/create-an-azure-storage-account-using-powershell/) - - - by Shaun Hardneck on 13th August - - - In this short post, I will show you how you can create a new Azure Storage Account using PowerShell. - - -### - [*Out-GridView Returns!*](https://devblogs.microsoft.com/powershell/out-gridview-returns/) - - - by Jack Zeiders on 14th August - - - It’s been almost 3 years since PowerShell Core debuted for Linux and Mac, and as we’ve increased our cmdlet coverage more and more, one cmdlet has always stood out as a top, cross-platform request. Today, we are excited to announce that Out-GridView is debuting on all Core-supported platforms through the GraphicalTools Module. - - -### - [*Automating an Azure Lab Setup with PowerShell*](https://adamtheautomator.com/azure-lab-setup) - - - by Adam Bertram on 15th August - - - Ever wanted to learn how to boot up an entire Lab with a single line of PowerShell, well Adam Bertram can show you how with this post. - - -### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](vscode-resource:/c:/Users/robin/OneDrive%20-%20Dadswell.Net/Software/Stuff%20I%20Have%20Written/repo/PowerShell_Org/WhatYouMissedThisWeek/URL) - - - Description of Reddit topic - - -### - [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1161666852914778113) - - - Coming in PowerShell 7 Preview.3 is  - - -`ForEach-Object -Parallel -`experimental feature! Easily execute scriptblocks in parallel threads! - - -### - [*Youtube: PowerShell Community Call - August 15, 2019*](https://www.youtube.com/watch?v=cK1xenkF9zs) - - - An overview of upcoming changes, some information and a Q&A session. diff --git a/content/articles/2019-08-20-a-peculiar-parse.md b/content/articles/2019-08-20-a-peculiar-parse.md deleted file mode 100644 index ecf258e12..000000000 --- a/content/articles/2019-08-20-a-peculiar-parse.md +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: A Peculiar Parse -authors: - - Colyn Via -date: "2019-08-20T19:40:17+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks - - Training -aliases: - - /2019/08/a-peculiar-parse/ ---- - -##   {.wp-block-heading} - -One of the best enhancements to Powershell was the inclusion of custom classes in v5. We originally wrote scripts, then we wrote cmdlets, followed by modules, and now we've graduated, with Class. - -I recently decided I wanted to write some code that would build a website. What better way to do that than by creating a class just for me? That's rhetorical by the way. My early class code looked like this: - - - - -`class mysite { - [string]$SiteName = 'mysite' - [string]$PhysPath = 'c:\mysite' - [string]$Binding = '*:8000:' - mysite(){ - Import-Module IISAdministration,WebAdministration - } - [void]CreateSite(){ - $newsite = @{ - Name = $this.SiteName - PhysicalPath = $this.PhysPath - BindingInformation = $this.Binding - } - New-IISSite @newsite - (Get-IISServerManager).CommitChanges() - } -} -`With this code I'm able to create my IIS website and see it in IIS Manager. But then I thought it'd be great to add the object representing the new site to my custom class. To do this I'll need to create another property. It's generally a good idea to cast properties as the appropriate object type.  That means adding a new property to the class and loading the appropriate namespaces so the casting would work.  I also updated my method to pass the object representing my website to the new property. - - -`class mysite { - [string]$SiteName = 'mysite' - [string]$PhysPath = 'c:\mysite' - [string]$Binding = '*:8000:' - [Microsoft.Web.Administration.Site[]]$SiteObject - mysite(){ - [void][System.Reflection.Assembly]::LoadWithPartialName( - 'Microsoft.Web.Administration') - [void][System.Reflection.Assembly]::LoadWithPartialName( - 'Microsoft.Web.Management') - Import-Module IISAdministration,WebAdministration - } - [void]CreateSite(){ - $newsite = @{ - Name = $this.SiteName - PhysicalPath = $this.PhysPath - BindingInformation = $this.Binding - } - $this.SiteObject += New-IISSite @newsite -Passthru - (Get-IISServerManager).CommitChanges() - } -} -`Looks great right?  I was able to create my new site and see it in IIS Manager.  The next day I wanted to try it out again so I deleted my website, loaded my code, and then got hit with a nasty error from the parser. - -![](https://scontent.xx.fbcdn.net/v/wl/t1.15752-0/s480x480/69283328_2866413096703634_4259896023284973568_n.png?_nc_cat=104&_nc_log=1&_nc_oc=AQnsep46eWke901Uzia9GmY3zbuEAnbk9WImb3IVthQegbzYfeL8zjSXiEj6381xEfXtbK1gLIP9kNUgzJ-kXykw&_nc_ht=scontent.xx&oh=95f0b7ade60da2b13897597e64bfdc4f&oe=5DD64557) - - -`PS C:\Dev> . .\powershellorg.ps1 -At C:\Dev\powershellorg.ps1:5 char:4 -+ [Microsoft.Web.Administration.Site[]]$SiteObject -+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Unable to find type [Microsoft.Web.Administration.Site]. - + CategoryInfo : ParserError: (:) [], ParseException - + FullyQualifiedErrorId : TypeNotFound -`Turns out, the parser in powershell is reading my code and sees an object type it doesn't know.  That would be my new property with the casting to [Microsoft.Web.Administration.Site].  At this point, the namespace containing the class I'm casting as hasn't been loaded because that code is in the class constructor.  So I figure, no problem!  I'll just load the namespaces before I define my class, score one point for Colyn! - - -`[void][System.Reflection.Assembly]::LoadWithPartialName( - 'Microsoft.Web.Administration') -[void][System.Reflection.Assembly]::LoadWithPartialName( - 'Microsoft.Web.Management') -class mysite { - [string]$SiteName = 'mysite' - [string]$PhysPath = 'c:\mysite' - [string]$Binding = '*:8000:' - [Microsoft.Web.Administration.Site[]]$SiteObject - mysite(){ - Import-Module IISAdministration,WebAdministration - } - [void]CreateSite(){ - $newsite = @{ - Name = $this.SiteName - PhysicalPath = $this.PhysPath - BindingInformation = $this.Binding - } - $this.SiteObject += New-IISSite @newsite -Passthru - (Get-IISServerManager).CommitChanges() - } -} -`Or so I thought, as it turns out I still receive the same exception.  Going back to my troubleshooting skills I stepped through my code in the ISE, without exception.  Wait, what?  That's right, there was no exception when I stepped through my code.  Thinking I might have fat fingered my code, or maybe didn't save correctly, I tried again.  Same error. - -Upon further research I discovered that the parsing protocol in powershell doesn't read linearly.  In its early passes over my code it observed I was creating a class and decided to load the class first.  Because the [mysite] class is loading before my reflection calls, the code bombs.  +1 for non linear dynamics.  This is true even when implementing the 'using namespace' capability that launched with v5: - - -`using namespace Microsoft.Web.Administration; -using namespace Microsoft.Web.Management; -class mysite { - [string]$SiteName = 'mysite' - [string]$PhysPath = 'c:\mysite' - [string]$Binding = '*:8000:' - [Microsoft.Web.Administration.Site[]]$SiteObject - mysite(){ - Import-Module IISAdministration,WebAdministration - } - [void]CreateSite(){ - $newsite = @{ - Name = $this.SiteName - PhysicalPath = $this.PhysPath - BindingInformation = $this.Binding - } - $this.SiteObject += New-IISSite @newsite -Passthru - (Get-IISServerManager).CommitChanges() - } -} -`I determined two ways around this problem.  The first was to keep the class in a separate file, but create a new .ps1 file that would load the dependent namespaces and then use dot sourcing to load the class file.  I did a quick experiment to test this assumption which gave positive reinforcement for the idea: - -![](https://scontent.xx.fbcdn.net/v/wl/t1.15752-0/s480x480/68576638_490740718161416_4996682901111177216_n.png?_nc_cat=108&_nc_log=1&_nc_oc=AQkZ0I7swgdlk0kzRJoAdY15EGff-nFrtXlSm8-wdGcmEnR3-P_Aa6STzf3v2TiOOReuw2c7x0Q3XWpjIbuLyvAh&_nc_ht=scontent.xx&oh=896b4925e9a6a684a06ba200a974802b&oe=5DD6844A) - -Of course the polymorphism of powershell allows a less cumbersome and equally less exact solution.  I can simply recast the property as a generic object. - - -`class mysite { - [string]$SiteName = 'mysite' - [string]$PhysPath = 'c:\mysite' - [string]$Binding = '*:8000:' - [Object[]]$SiteObject - mysite(){ - [void][System.Reflection.Assembly]::LoadWithPartialName( - 'Microsoft.Web.Administration') - [void][System.Reflection.Assembly]::LoadWithPartialName( - 'Microsoft.Web.Management') - Import-Module IISAdministration,WebAdministration - } - [void]CreateSite(){ - $newsite = @{ - Name = $this.SiteName - PhysicalPath = $this.PhysPath - BindingInformation = $this.Binding - } - $this.SiteObject += New-IISSite @newsite -Passthru - (Get-IISServerManager).CommitChanges() - } -} -`As with anything in Powershell or coding in general, there's always more than one way to achieve a goal.  The lesson learned in this experience is that custom classes will always be loaded ahead of the rest of your code.  You can work around this by abstracting your classes to a separate file or "library" to ensure your code executes in the order you intend.  If you get a TypeNotFound error from a casting call in your class, you can use the code abstraction method or simply recast to a default but similar type. diff --git a/content/articles/2019-08-23-icymi-powershell-week-of-23-august-2019.md b/content/articles/2019-08-23-icymi-powershell-week-of-23-august-2019.md deleted file mode 100644 index 4a1b2a5e0..000000000 --- a/content/articles/2019-08-23-icymi-powershell-week-of-23-august-2019.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 23-August-2019" -authors: - - Robin Dadswell -date: "2019-08-23T15:00:41+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/08/icymi-powershell-week-of-23-august-2019/ ---- - -Topics include PowerShell 7 Preview 3, Universal Dashboard, URI Data Types and more. - - - - - - Special thanks to Robin Dadswell, Mark Roloff, Prasoon Karunan V, and Kevin Laux. - - -### [How to combine the elements of two arrays using PowerShell][1] - - - by Thiyagu on 18th of August - - - Information on the different ways to join Arrays depending on the scenario. - - -### - [PowerShell 7 Preview 3 | PowerShell](https://devblogs.microsoft.com/powershell/powershell-7-preview-3/) - - - by Steve Lee on 20th of August - - - The new preview (3) for PowerShell 7 is available. - - -### - [New Telemetry in PowerShell 7 Preview 3 | PowerShell](https://devblogs.microsoft.com/powershell/new-telemetry-in-powershell-7-preview-3/) - - - by Sydney Smith on 20th of August - - - Additional telemetry data points will be collected starting with PowerShell 7 Preview 3, find out what they are and how to toggle them off if needed. - - -### - [Parallel and ThrottleLimit Parameters added to ForEach-Object in PowerShell 7 Preview 3](https://mikefrobbins.com/2019/08/21/parallel-and-throttlelimit-parameters-added-to-foreach-object-in-powershell-7-preview-3/) - - - by Mike F Robbins on 21st of August - - - Preview 3 of PowerShell 7 was just released. ForEach-Object now has Parameters for Parallel and ThrottleLimit. - - -### - [SCCM Client Health Monitor Script - imab.dk](https://www.imab.dk/sccm-client-health-monitor-script/) - - - by Martin Bengtsson - - - The SCCM Client Health Monitor Script is a PowerShell script which fixes common issues related to SCCM client health. - - -### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/crlmhy/i_bet_you_all_have_been_doing_this_for_years_but/) - - - Using URI Data types instead of strings. - - -### - [*Tweet of the Week*](https://twitter.com/pewa2303/status/1163306192392859649?s=21) - - - PowerShell: Implementing a Progress Bar with Write-Progress - - -### - [Data to Dashboard in under an hour with Universal Dashboard! with Adam Driscoll](https://youtu.be/6eOjRQi4vUU) - - - Adam Driscoll explores his tool Universal Dashboard, learn how to take advantage of a Powerful PowerShell tool - - - [1]: https://dotnet-helpers.com/powershell/how-to-combine-the-elements-of-two-arrays-using-powershell/?fbclid=IwAR2VMOInc6GwiZ4BiPVE46Fn-vQcQLCF5F-AgLSiAkq_XsD1rf0Nbje29rc "https://dotnet-helpers.com/powershell/how-to-combine-the-elements-of-two-arrays-using-powershell/?fbclid=IwAR2VMOInc6GwiZ4BiPVE46Fn-vQcQLCF5F-AgLSiAkq_XsD1rf0Nbje29rc" diff --git a/content/articles/2019-08-30-a-better-way-to-search-events.md b/content/articles/2019-08-30-a-better-way-to-search-events.md deleted file mode 100644 index 105bdd88f..000000000 --- a/content/articles/2019-08-30-a-better-way-to-search-events.md +++ /dev/null @@ -1,237 +0,0 @@ ---- -title: A Better Way To Search Events -authors: - - tobor79 -date: "2019-08-30T17:09:21+00:00" -categories: - - PowerShell for Admins -legacy_featured_image: /wp-content/uploads/2019/08/LegionImageShadowling.png -aliases: - - /2019/08/a-better-way-to-search-events/ ---- - -I have put together a security script to use as an alerting system. Using a CSV file containing information on which users are assigned which computer, the event logs are searched to discover when a user signs into a device outside their normal assignments. The final result of that script can be viewed [HERE](https://github.com/tobor88/BTPS-SecPack/blob/master/Event%20Alerts/UnusualUserSignInAlert.ps1) if interested. I will do my best to provide unique real world search queries for my examples. - - - -In order to accomplish this task, I originally believed I was going to need to search the event logs based on user and computer. Although this turned out to not be the case I figured it was a pretty useful thing to figure out how to do. That is the task that led me here. - - -The best way to search events is using the [Get-WinEvent](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.diagnostics/get-winevent?view=powershell-6) cmdlet. This method is far superior to [Get-EventLog](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-eventlog?view=powershell-5.1) in both speed and filtering ability. The documentation for the Filter Hash related parameters are a little lacking. - -When searching events you will want to keep in mind that each event source is handled as a document containing a sequence of events. Windows Event Log uses query expressions based on a subset of XPath 1.0 for selecting events from their sources. When you specify a query, you are also specifying an event channel for the context of the query. When you select an event with an event query, the entire event is selected, not a portion of the event information. - -**FILTERHASHTABLE** - - - -The FilterHashTable parameter is probably the most straight forward to use. I have taken the below example from Microsoft's TechNet site as this Paramter is the most straight foward and easy to use. The format is easy to understand as we are searching for an array of properties. To accurately describe these properties, it is easiest to view the events in Event Viewer. - - - -`$StartTime = (Get-Date).AddDays(-7) -Get-WinEvent -FilterHashtable@{ Logname='Application'; ProviderName='Application Error'; Data='iexplore.exe'; StartTime=$StartTime } -`If you have experience with the [New-Object](https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Utility/New-Object?view=powershell-6) cmdlet you have most likely added properties to the newly created object in this same fashion. Looking at the list of available property queries below, we are not able to search by computer name. I checked to see what other options were available. Data below is showing as an array. I have known this option to allow the entering of an SID or a username to query the event log. I have not been able to successfully add multiple properties into that value. - - - - * **LogName**= - * **ProviderName**= - * **Path**= - * **Keywords**= - * **ID**= - * **Level**= - * **StartTime**= - * **EndTime**= - * **UserID**= - * **Data**= - * `=`* **SuppressHashFilter**=`Below is a FilterHashTable query that searches the Sysmon events for all Network connections that happened over the last 1.2 hours. - - -`Get-WinEvent -MaxEvents 1 -FilterHashtable @{LogName="Microsoft-Windows-Sysmon/Operational"; Id=3; StartTime=(Get-Date).AddHours(-1.2)} -`**FILTERXPATH** - - -The next parameter defined is the FilterXPath parameter. This ended up being the one I used because it required less typing than FilterXML. More on this towards the end of the juicy stuff we are about to get into. To ensure the correct information is being used open the Event Viewer, (eventvwr.msc) and go to the XML view of the event you wish to query. In my case it was Security Event ID 4624.Below is a sample of the xml format for this event. - - - -`4624 -1 -0 -12544 -0 -0x8020000000000000 - -53282 - - -Security -DC1 - - -S-1-5-0 #### -david.haller -LEGION -0x3e7 -S-1-5-21-1005 -david.haller -LEGION -0x33648 -2 -I_Am_God -Negotiate -Why-Is-It-Blue -{00000000-0000-0000-0000-000000000000} -- -- -0 0x210 -C:\Windows\System32\winlogon.exe -10.0.0.8 0 -%%1833 - - -`=============================================================== - - -Microsoft has given us this syntax:`Get-WinEvent -FilterXPath "*[System[Level=3 and TimeCreated[timediff(@SystemTime) <= 86400000]]]"` - -This starts with a wildcard character which I have to apologize I do not remember the significance of. Each XML section is enclosed inside a set of [ ]. Starting small, If we wanted to query the '**System**' section and the '**EventData**' section it would look like the this. - - -`$XPath = '*[System[] and EventData[]]' -`To define the properties we wish to search for we need to add those properties inside the set of brackets for **System** and or **EventData**. I am going to add on to what we have defined so far. The event id is an integer. Because it is an integer we do not want to add single quotes around the value. - - - -`$XPath = '*[System[EventID=4624] and EventData[]]' -`Adding to the "**EventData**" gets a little more tricky. In the XML format above you can see that a property has been defined for the XML tags and each tag is called Data. Following the format at this TechNet reference: [https://docs.microsoft.com/en-us/previous-versions//aa385231(v=vs.85)](https://docs.microsoft.com/en-us/previous-versions//aa385231(v=vs.85)), we are able to view how to define this type of property. I placed a variable in the value field to demonstrate the need for single quotes as this is a string and single quotes are expected in order for the query to work. - - -`$SamAccountName = 'Amahl.Farouk'; -Get-WinEvent -FilterXPath "*[System[EventID=4624] and EventData[Data[@Name='TargetUserName']='$SamAccountName']"']] -`To add a second field to query the System section is fairly straight forward. To accomplish this we need to follow the last value with 'and' and add the new property as can be seen from the original Microsoft TechNet example. For those of you are unfamliar there are 86400000 seconds in 24 hours. So the time created value below gets the current system time and queries events that are less than or equal to a day old. - - - -`$XPath = "*[System[EventID=4624 and TimeCreated[timediff(@SystemTime) <= 86400000 -]] and EventData[Data[@Name='TargetUserName']='$SamAccountName']" -`Now We are searching for Event ID 4624, over the last 24 hours containing a specific username. Time to add the IP Address property. In the event log this value has an IP address and the computer's name was not able to be found. I have a list of computer names so I will need to convert those names to IP addresses for my query to be successful. This meant for my script, that a [Resolve-DnsName](https://docs.microsoft.com/en-us/powershell/module/dnsclient/resolve-dnsname?view=win10-ps) cmdlet had to be used to get the required value. There are numbers in this value but it is still not an integer so we are going to need single quotes around the value again. - - - -`$XPath = "*[System[EventID=4624 and TimeCreated[timediff(@SystemTime) <= 86400000]] and EventData[Data[@Name='TargetUserName']='$SamAccountName'] and EventData[Data[@Name='IpAddress']='$IPv4Address']]" -`As you can see above, in order to successfully query the computer value and TargetUsername in the EventData XML tags we needed to add a second "and EventData". This successfully finds what I was looking for. - - - -**FI -LTERXML -** - - - -FilterXML was another possible option that could have been used. In Microsoft's TechNet Documentation, one of the examples they gave was as follows. - - -`# Using the FilterXML parameter: -PS> Get-WinEvent -FilterXML "*[System[Level=3 and TimeCreated[timediff(@SystemTime)<= 86400000]]]" -`I should mention you can easily get yourself started with the -FilterXML value using Windows Event Viewer. Simply open Windows Event Viewer, in the right hand pane select "**Create Custom View**" than enter the Event ID values you wish to search for, keywords, time frames, computer names, etc. Then click the XML tab and it will show you what the XML query looks like. This is great for getting started however it will not work for more detailed queries which I will build on in the information below. - -To query the Event Log using the FilterXML parameter we need to add the QueryList and Query tags on the outside of the defining properties we wish to filter by. Using -FilterXML is simply XML formatted text of what we are looking for. The same sectioning rules apply as before except FilterXML wants an XML formatted document when FilterXPath wants just the properties defined. The XPath 1.0 language Windows uses must resolve to "Events" not a single "Event". This seemed to make the most sense for my original situation so it is what I went with.  - - -Why would these two similar options be available for use you might question?!?!?! The Windows Event log does not fully support XPath query language. More information on this can be read -[HERE](https://docs.microsoft.com/en-us/windows/win32/wes/consuming-events#xpath-10-limitations) -and -[HERE](https://docs.microsoft.com/en-us/windows/win32/wes/consuming-events#limitations) -if interested. Windows Event Log uses a subset of XPath 1.0. There are specific limitations of XPath 1.0. The more options available the better the chance you are able to find what you are looking for using this cmdlet. Below we can view an example of why we need to have these two query parameters. - -I wanted to build a query that returns services I do not have record of or know about. To do this I need to filter out known services. Although this list of services below can be extended greatly there is a max limit of 32 expressions that can be added to the XPath query. If you exceed this limit you will receive the PowerShell error message "_Get-WinEvent : The specified query is invalid_". This prevents my ability to accomplish this task. -If you run the below query you will notice that it returns every Event ID under the sun after filtering the one Event ID I am trying to return information on. - - -`$FilterXML = @" - - - *[System[(EventID="7045")]] -and *[EventData[Data[@Name="ServiceName"]!="MpKslDrv"]] -and *[EventData[Data[@Name="ServiceName"]!="Microsoft Edge Update Service (edgeupdate)"]] -and *[EventData[Data[@Name="ServiceName"]!="Microsoft Edge Update Service (edgeupdatem)"]] -and *[EventData[Data[@Name="ServiceName"]!="Microsoft Edge Elevation Service (MicrosoftEdgeElevationService)"]] -and *[EventData[Data[@Name="ServiceName"]!="Wireless Keyboard Filter Device Service"]] -and *[EventData[Data[@Name="ServiceName"]!="FileSyncHelper"]] -and *[EventData[Data[@Name="ServiceName"]!="OneDrive Updater Service"]] -and *[EventData[Data[@Name="ServiceName"]!="Google Update Service (gupdatem)"]] -and *[EventData[Data[@Name="ServiceName"]!="Google Update Service (gupdate)"]] -and *[EventData[Data[@Name="ServiceName"]!="Google Chrome Elevation Service"]] -and *[EventData[Data[@Name="ServiceName"]!="Adobe Genuine Monitor Service"]] -and *[EventData[Data[@Name="ServiceName"]!="Adobe Genuine Software Integrity Service"]] -and *[EventData[Data[@Name="ServiceName"]!="AdobeUpdateService"]] -and *[EventData[Data[@Name="ServiceName"]!="Mozilla Maintenance Service"]] - - - -"@ -Get-WinEvent -FilterXML $FilterXML -`You are able to add Suppress tags to remove Event ID's you do not want returned. Under other circumstances this can work. For the goal of the above query, I will need over 32 'Suppress' tags to filter Event ID's I do not want returned. If you run into a situation such as the one above you **DO NOT NEED** to add the Suppress tags. Simply use the -FilterXPath parameter instead. This would turn my above query into this: - - -`$XPath = '*[System[(EventID="7045")]] and [EventData[Data[@Name="ServiceName"]!="MpKslDrv"]] and [EventData[Data[@Name="ServiceName"]!="Action1 Agent"]] and [EventData[Data[@Name="ServiceName"]!="Microsoft Edge Update Service (edgeupdate)"]] and [EventData[Data[@Name="ServiceName"]!="Microsoft Edge Update Service (edgeupdatem)"]] and [EventData[Data[@Name="ServiceName"]!="Microsoft Edge Elevation Service (MicrosoftEdgeElevationService)"]] and [EventData[Data[@Name="ServiceName"]!="Microsoft Update Health Service"]] and [EventData[Data[@Name="ServiceName"]!="Sysmon"]] and [EventData[Data[@Name="ServiceName"]!="SysmonDrv"]] and [EventData[Data[@Name="ServiceName"]!="Wireless Keyboard Filter Device Service"]] and [EventData[Data[@Name="ServiceName"]!="FileSyncHelper"]] and [EventData[Data[@Name="ServiceName"]!="OneDrive Updater Service"]] and [EventData[Data[@Name="ServiceName"]!="Splashtop Software Updater Service"]] and [EventData[Data[@Name="ServiceName"]!="Splashtop Virtual Hid"]] and [EventData[Data[@Name="ServiceName"]!="Google Update Service (gupdatem)"]] and [EventData[Data[@Name="ServiceName"]!="Google Update Service (gupdate)"]] and [EventData[Data[@Name="ServiceName"]!="Google Chrome Elevation Service"]] and [EventData[Data[@Name="ServiceName"]!="Adobe Genuine Monitor Service"]] and [EventData[Data[@Name="ServiceName"]!="Adobe Genuine Software Integrity Service"]] and [EventData[Data[@Name="ServiceName"]!="AdobeUpdateService"]] and [EventData[Data[@Name="ServiceName"]!="Mozilla Maintenance Service"]]' -Get-WinEvent -FilterXPath $XPath -`The query must have at least one select statement. For each suppress statement, there must be at least one select statement that specifies the same path. If the select and suppress query return the same events, the suppress statement takes precedence. If you select events from multiple sources, the events are returned in time stamp order. If you use the system time stamp and the rate of events is high, it is possible that more than one event will have the same time stamp. When this occurs, the ordering of events becomes ambiguous and the events may appear out of order. Be careful when comparing floating point numbers in XPath queries. Any string representation of a floating point number is approximated and the value displayed in XML might not match the number stored with the event. Floating point numbers should be compared as being less than or greater than a constant. -If you are required to use XML filtering for your situation my conclusion so far is that you need to know what you are looking for. As far as I am aware there is not a solution to perform the above kind of process of elimination without manual overview or FilterXPath. -To compensate for this in my own environment, (where I have centralized important events using Windows Event Forwarding), I import centralized events into a SQL database and perform queries there. There are a lot of benefits to this including speed. If you wish to use the tool I created for this it can be obtained from [HERE][1]. I have set up instructions [HERE][2] if you wish to use the application as well. -The "Suppress" '[Query Schema Element][3]' I mentioned can be used to filter out the extra Event ID's returned by a query. There is a limit of 32 expressions for the 'Suppress' tags as well.  The below example is used to query the event logs for any user accounts that have been added to high privileged administrator groups. The 'Suppress' expression is used to filter out Event ID 4799, preventing the return of unwanted information - - -`$FilterXML = @" - - -(*[EventData[Data[@Name="TargetUserName"] = "Administrators"]]) or -(*[EventData[Data[@Name="TargetUserName"] = "Domain Admins"]]) or -(*[EventData[Data[@Name="TargetUserName"] = "Schema Admins"]]) or -(*[EventData[Data[@Name="TargetUserName"] = "Enterprise Admins"]]) or -(*[EventData[Data[@Name="TargetUserName"] = "Print Operators"]]) or -(*[EventData[Data[@Name="TargetUserName"] = "Server Operators"]]) or -(*[EventData[Data[@Name="TargetUserName"] = "DnsAdmins"]]) or -(*[EventData[Data[@Name="TargetUserName"] = "Backup Operators"]]) -and -*[System[(EventID='4732') or (EventID='4733') or (EventID='4756') or (EventID='4757') or (EventID='4728') or (EventID='4729')]] - -*[System[(EventID=4799)]] - - -"@ -Get-WinEvent -FilterXML $FilterXML -`Another query you might find useful is one that searches the event log for an instance where the local Administrator user entered a password to execute a process with elevated privileges over the last 24 hours. - - - -`$XML = " - - -            *[System[(EventID=4648) and TimeCreated[timediff(@SystemTime) <= 86400000]] and EventData[Data[@Name='ProcessName']='C:\Windows\System32\consent.exe'] and EventData[Data[@Name='TargetUserName']='Administrator']] - - -" -$AdminConsentGiven = Get-WinEvent -FilterXml $XML -MaxEvents 1 | Select-Object -Property * -`It is suggested to use XPath queries when you are searching the event logs for a simple expression from a single source. Use an XML structured query when you are searching from more than one event log source or you are using a compound expression with a dozen or more expressions. - - - - - - -Another example Microsoft gives for filtering events involves the[ Where-Object](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/where-object?view=powershell-6) cmdlet. The overhead on Where-Object is fairly high so I try to avoid using it whenever I can as it will search through everything a second time and can noticeably slow down the execution time of a script. I hope you found this useful and were able to learn what I was able to through this. Until next time... - - - -- [tobor](https://roberthosborne.com) - - - - - [1]: https://github.com/tobor88/BTPS-SecPack/tree/master/WEF%20Application - [2]: https://btps-secpack.com/wef-application - [3]: https://docs.microsoft.com/en-us/windows/win32/wes/queryschema-elements diff --git a/content/articles/2019-08-30-icymi-powershell-week-of-30-august-2019.md b/content/articles/2019-08-30-icymi-powershell-week-of-30-august-2019.md deleted file mode 100644 index 068505a10..000000000 --- a/content/articles/2019-08-30-icymi-powershell-week-of-30-august-2019.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 30-August-2019" -authors: - - Robin Dadswell -date: "2019-08-30T15:21:52+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/08/icymi-powershell-week-of-30-august-2019/ ---- - -Topics include DNS, GUI's, automation of legacy tools, Azure test environment setups and more! - - - - - - Special thanks to Kevin Laux, Prasoon Karunan V, and Robin Dadswell. - - -### - [*Comparing two or more objects visually in PowerShell*](https://evotec.xyz/comparing-two-or-more-objects-visually-in-powershell-cross-platform/) - - - by Przemyslaw Klys on 25th August - - - Compare-Object is good, but how about comparing multiple objects and seeing the results in an easy to see format! - - -### - [*Create your own Dynamic DNS service using Azure DNS - part 2*](https://cirriustech.co.uk/blog/create-dynamic-dns-azure-dns-pt2) - - - by Graham Gold on 26th August - - - Use a very lightweight updater client (windows or linux) that uses an Azure PowerShell function to update the DNS record-set entry. - - -### - [*How to Build a PowerShell GUI for your Scripts*](https://adamtheautomator.com/build-powershell-gui/) - - - by June Castillote on 26th August - - - PowerShell is a command-line tool but did you know it can also be used as a base for graphical interfaces? Sometimes command-line isn't the best kind of interface for a particular instance. Building a PowerShell GUI for for your service desk is a great example. This is one of those times when it is more appropriate to build graphical tools instead. - - -### - [*Automating Quser through PowerShell*](https://devblogs.microsoft.com/scripting/automating-quser-through-powershell/) - - - by Dan Reist on 27th August - - - I need to log a user off every computer they’re logged into. The problem is, I don’t know which ones. How can I discover which computers they’re logged into and then log them off? - - -### - [*Splitting Functions from Scripts in bulk*](https://nocolumnname.blog/2019/08/28/splitting-functions-from-scripts-in-bulk/) - - - by Shane O'Neill on 28th August - - - Ever wanted to use some of the functions within a script and easily call them? Turns out it is incredibly easy, find out more with Shane. - - -### - [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1166801611781312512) - - - A call out from Steve for what we want to be blogged about. - - -### - [*Youtube: Title of Youtube Video*](https://www.youtube.com/watch?v=YAF1sHYAwBY) - - - From the London PSUG, Naw explains in great detail and with passion what he created at The British Museum to automate the setup of test environments using Azure PowerShell, Pester (Unit Test & Infrastructure Test), Azure DevOps/Pipeline. diff --git a/content/articles/2019-09-03-be-a-speaker-at-powershell-and-devops-global-summit-2020.md b/content/articles/2019-09-03-be-a-speaker-at-powershell-and-devops-global-summit-2020.md deleted file mode 100644 index 6f2f571fc..000000000 --- a/content/articles/2019-09-03-be-a-speaker-at-powershell-and-devops-global-summit-2020.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Be a Speaker at PowerShell and DevOps Global Summit 2020! -authors: - - Missy Januszko -date: "2019-09-03T17:42:35+00:00" -categories: - - Announcements - - Events - - News - - PowerShell Summit -aliases: - - /2019/09/be-a-speaker-at-powershell-and-devops-global-summit-2020/ ---- - -We are so excited for the 2020 PowerShell and DevOps Global Summit! We’re about halfway through the CFP season and are still looking for your awesome submissions. If you are hesitating, please don’t... think seriously about submitting a topic or two. To help you, we’d like to give you some ideas about what makes a submission stand out (and what doesn’t). - - * **Something Unique…** We’re looking for a new spin or twist on an old (or new) topic. If something similar has been done at a previous Summit, think about how you’re doing something different from what’s previously been presented. DevOps topics are always popular, but what new thing are you doing with your source control, your testing, or your build pipeline? - * **Failures...** Alternatively, is there something you started out to do and at some point, figured out that you it wasn’t going to work the way it was planned? If you’ve had some good lessons learned that you think would benefit others, we’d love to hear about it. - * **Broad scope vs. deep scope...** If you’ve done a snack “bake-off” and could talk about chips, cookies, and crackers, this session would be attended by folks who prefer chips or cookies or crackers. However, a session that is only about cookies might only be of interest to Rambling Cookie Monsters. If you’re a subject matter expert on chips, though, and can show how to use chips to build a house, that would have that uniqueness factor we’re also looking for. - * **Multiple submissions...** Multiple submissions on different topics help us select a wide variety of topics. It’s hard to say from year to year what topics will be popular. For example, we had a lot of Git and Pester submissions last year... not so many this year. We’re looking for variety so submit as many ideas as you have. - * **Something that wasn’t selected last year...** We may have really liked your submission last year and it may have simply been on the bubble. You’re only up against the submissions that we’ve seen for this year, so if you had a submission from last year that you feel passionate about and is still a hot topic, please submit it! - * **“Post OnRamp” submissions are welcome...** We have a graduated class of OnRamp students from last year who we want to continue learning. Therefore, we’ll be looking for a small number of sessions at this level. - -Some additional things we’d like to add: - - * **We don’t care who you are...** If you’re concerned about not being an MVP, haven’t spoken before, or are simply suffering from imposter syndrome, don’t. Every speaker has been a first-time speaker, and we’re specifically looking to introduce some new speakers to the community every year. - * **Don’t procrastinate...** The CFP closes October 1st, no exceptions. It’s open for two months, which is plenty of time. - * **Repeats are iffy...** If you have a talk that’s been done at multiple conferences already, or a talk that’s been recorded and is available on YouTube, it probably won’t be selected. We’re looking for new content. However, if you have a talk you’ve given at a user group meeting that was well-received? Please submit it. - * **Talk to us...** If you’re on the fence about submitting or have a topic you’re thinking about but want to know if there are a bunch of similar topics, please reach out to us at “content [at] powershell [dot] org” and ask. We won’t tell you that we have 17.5 submissions on write-host, but we will say “yeah that’s a really popular topic this year”. (As of today, there aren’t really any topics that are heavily populated, so keep that in mind. And there aren’t any submissions on write-host yet.) - -In case you've forgotten, here's a link to the CFP:  -Let’s keep the submissions coming and we are looking forward to an AWESOME Summit in 2020! diff --git a/content/articles/2019-09-06-icymi-powershell-week-of-6-september-2019.md b/content/articles/2019-09-06-icymi-powershell-week-of-6-september-2019.md deleted file mode 100644 index b72f4d789..000000000 --- a/content/articles/2019-09-06-icymi-powershell-week-of-6-september-2019.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 6-September-2019" -authors: - - Robin Dadswell -date: "2019-09-06T15:00:20+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/09/icymi-powershell-week-of-6-september-2019/ ---- - -Topics include PowerShell meetups, Network Connections, PowerShell on Android, Regex and more. - - - - - - Special thanks to Robin Dadswell, Mark Roloff, Prasoon Karunan V, and Kevin Laux. - - -###### - [POWERSHELL SATURDAY: RALEIGH 2019](https://www.networkadm.in/rtpsug-powershell-saturday/) - - - by Mike Kanakos on 1st of September - - - Research Triangle PowerShell Users Group is hosting a PowerShell Saturday. Get Mike's insight on what a PowerShell Saturday is and details about how the event will be set up in Raleigh, NC. - - -###### - [Detecting Wired, Wireless, and VPN Connections using PowerShell](https://deploymentresearch.com/detecting-wired-wireless-and-vpn-connections-using-powershell/) - - - by Johan Arwidmark on 2nd of September - - - Johan was having trouble detecting network connection type across 50k machines in his environment. In his blog post he shares some details about a script he used to check if a system was using wired/wireless/VPN. - - -###### - [I run PowerShell on Android and so can you !!](https://dev.to/thementor/i-run-powershell-on-android-and-so-can-you-458k) - - - by TheMentor on 3rd of September - - - Step by Step guide detailing the process of installing PowerShell on an Android device. - - -###### - [*Weekly Module Spotlight: Polaris*](https://www.powershellmagazine.com/2019/09/03/weekly-module-spotlight-polaris/) - - - by Ravikanth Chaganti on September 3rd - - - Polaris is a cross-platform, minimalist web framework for PowerShell that is quick and easy to use. - - -###### - [*PowerShell ForEach-Object Parallel Feature*](https://devblogs.microsoft.com/powershell/powershell-foreach-object-parallel-feature/) - - - by Paul Higinbotham on September 4th - - - PowerShell 7.0 Preview 3 is now available with a new ForEach-Object Parallel Experimental feature. This feature is a great new tool for parallelizing work, but like any tool, it has its uses and drawbacks. This article describes this new feature, how it works, when to use it and when not to. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/d0fovu/speaker_opportunities_for_powershell_southampton/) - - - Speaker Opportunities for PowerShell Southampton User Group - - -###### - [*Tweet of the Week*](https://twitter.com/BrettMiller_IT/status/1169226147315539968) - - - Brett asks about using git with PowerShell. - - -###### - [*Youtube: Detecting Text Patterns with PowerShell Regular Expressions*](https://www.youtube.com/watch?v=GUUF8TIL6Pg) - - - When you want to extract some text from a string, regular expressions come to the rescue. There are a few different ways of using regular expressions in PowerShell, but the -match operator is arguably the easiest. We'll take a look at how to use the -match operator to evaluate regular expressions against singleton and array string values. We'll also explore the built-in $matches variable, which gets populated when you have a positive match against a singleton string value, using the -match operator. diff --git a/content/articles/2019-09-12-the-ternary-cometh.md b/content/articles/2019-09-12-the-ternary-cometh.md deleted file mode 100644 index 6724e4db0..000000000 --- a/content/articles/2019-09-12-the-ternary-cometh.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: The Ternary Cometh -authors: - - Colyn Via -date: "2019-09-12T21:35:34+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks - - Tutorials -aliases: - - /2019/09/the-ternary-cometh/ ---- - -Developers are likely to be familiar with ternary conditional operators as they're legal in many languages (Ruby, Python, C++, etc).  They're also often used in coding interviews to test an applicant as they can be a familiar source of code errors.  While some developers couldn't care less about ternary operators, there's been a cult following waiting for them to show up in Powershell.  That day is [almost upon us.][1] -Any Powershell developer can easily be forgiven for scratching their heads and wondering what a ternary is.  In the most basic sense a ternary evaluates an expression to a binary result and carries out one of two possible outcomes.  Lets start by looking at some code examples: - - -`puts (if 1 then 2 else 3 end) -2`PS > 1 ? 2 : 3 -PS > 2 -`The above is the same conditional expressed first in Ruby, then in Powershell, and both examples have a return of 2.  First off, let's get around the obvious confusion in the Powershell example.  The alias for Where-Object is '?', and that is not what the '?' represents in the powershell ternary operation.  The likely reason for implementing '?' instead of another character is for inter-language operability and reducing the level of effort for migrating code from other languages to Powershell. -The best way to explain how to read the ternary example above is to express it in a more familiar context.  That is to say, let's turn it into an If/Then/Else statement: - - -`if(1){2}else{3} -`Right off we can see one of the benefits of a ternary is that it makes code more succinct.  It should also make more sense why we refer to the ternary as a conditional operator.  It's intended as an optional replacement for If/Than/Else in much the same way that Select/Case is for organizing multiple conditional statements.  Wondering if there's a performance enhancement? -![](https://scontent.xx.fbcdn.net/v/wl/t1.15752-0/s480x480/70352759_377454299851433_6857271860543881216_n.png?_nc_cat=105&_nc_log=1&_nc_oc=AQmAjykQ4CuOWI8SBA_aHRSBjOdpHV-OrzlMs9iI9J6egJ2w6vNGr5AuYIRZkJNQJiQ4JH7ENVdcNKNy-UGUyGb-&_nc_ht=scontent.xx&oh=4db9b829b678c0e87ec610471f7054b5&oe=5DF6EE21) -Nope.  So the ternary is intended to boost readability but does that happen in reality?  Some engineers, who shall remain nameless, misuse its purpose into statements you'll wish you could unsee or will make your eyes bleed.  For example: - - -`Bool c1, c2,c3; -// Assign some values to c1, c2 and c3. -int x = c1?c2?1:2:c3?3:4; -`Who wants to code review that?  Or decipher it while trying to resolve a problem that's affecting your critical operations? -There's a definite place for ternary operators in Powershell.  They have the potential to enhance the programing experience while simplifying readability.  Some will look upon the ternary as a way to show off their elite skills and create code only they can read.  The great engineers will leverage the best syntax for the correct reason at just the right moment in their code.  If you want to experiment with Powershell ternary operators early, grab the build linked above (or any later build) and run ' -Enable - -- - -ExperimentalFeature - -PSTernaryOperator'. - - -Please, enjoy ternary operators responsibly. -Remembering [Dorothy Vaughan][2] on this anniversary of JFK's "We choose to go to the Moon" speech. - - [1]: https://powershell.visualstudio.com/PowerShell/_build/results?buildId=31915 - [2]: https://en.wikipedia.org/wiki/Dorothy_Vaughan diff --git a/content/articles/2019-09-13-icymi-powershell-week-of-13-september-2019.md b/content/articles/2019-09-13-icymi-powershell-week-of-13-september-2019.md deleted file mode 100644 index b89921f76..000000000 --- a/content/articles/2019-09-13-icymi-powershell-week-of-13-september-2019.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 13-September-2019" -authors: - - Robin Dadswell -date: "2019-09-13T15:00:24+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/09/icymi-powershell-week-of-13-september-2019/ ---- - -Topics include Active Directory, SCCM, Security and More. - - - - - - Special thanks to Robin Dadswell, Mark Roloff, Prasoon Karunan V, and Kevin Laux. - - -###### - [*What do we say to health checking Active Directory?*](https://evotec.xyz/what-do-we-say-to-health-checking-active-directory/) - - - by Przemyslaw Klys on 8th September - - - There are plenty of tools out there to check the health of AD, but Przemyslaw shares the tools he's created with the community. - - -###### - [*CLEANING UP (B)ADMIN ACCOUNTS IN CONFIGMGR*](http://www.obvus.be/2019/09/08/cleaning-up-badmin-accounts-in-configmgr/) - - - by Merlijn Van Waeyenberghe on 8th September - - - Find out an easy way to change accounts within SCCM - especially useful when you have that one admin account that is everywhere. - - -###### - [*Run PowerShell without Powershell.exe — Best tools & techniques*](https://medium.com/@Bank_Security/how-to-running-powershell-commands-without-powershell-exe-a6a19595f628) - - - by Bank Security on 9th September - - - During last months, observing how the attackers and consequently the antivirus are moving, I thought of writing this article for all the pen testers and red teamers who are looking for the best technique to use their PowerShell scripts or command lines during post exploitation phase without running PowerShell.exe and thus avoiding being caught by the Next-Gen Antivirus, EDR or from the Blue Team or Threat Hunting team. - - -###### - [*Weekly Module Spotlight: ImportExcel*](https://www.powershellmagazine.com/2019/09/09/weekly-module-spotlight-importexcel/) - - - by Ravikanth Chaganti on 9th September - - - Ravikanth looks at his module of the week ImportExcel giving a good overview of what is happening. - - -###### - [*Can Parallel For Each Loops in PowerShell 7 Tear Me Away from PoshRSJob?*](https://toastit.dev/2019/09/10/powershell7-foreach-parallel/) - - - by Josh King on 10th September - - - PoshRSJob has been my go to module for Parallelization for years... let's see if a head to head test with the new PowerShell 7 feature will change that. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/d3byf0/powershell_all_the_things/) - - - Of course the most popular Reddit post is a meme. Dig into the comments on this post and find some great information on randomness and using Get-Random with an array. - - -###### - [*Tweet of the Week*](https://twitter.com/AndySvints/status/1171405216350126080) - - - Ever wanted to manage Zoom with PowerShell, well now there is a module for that! - - -###### - [*Youtube: Define Cross-Platform System Configuration Requirements with PowerShell*](https://youtu.be/efRnjlZKCGw) - - - Trevor Sullivan looks at how you create PowerShell "Requirements" on a Mac OS system using the PowerShell module called "Requirements". diff --git a/content/articles/2019-09-20-icymi-powershell-week-of-20-september-2019.md b/content/articles/2019-09-20-icymi-powershell-week-of-20-september-2019.md deleted file mode 100644 index 321a20e33..000000000 --- a/content/articles/2019-09-20-icymi-powershell-week-of-20-september-2019.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 20-September-2019" -authors: - - Robin Dadswell -date: "2019-09-20T15:00:15+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/09/icymi-powershell-week-of-20-september-2019/ ---- - -Topics include Active Directory, Azure Labs, Ansible, PowerShell 7 Preview 4 and more. - - - - - - Special thanks to Robin Dadswell, Mark Roloff, Prasoon Karunan V, and Kevin Laux. - - -###### - [*Most Useful PowerShell Cmdlets for Managing and Securing Active Directory*](https://www.petri.com/most-useful-powershell-cmdlets-for-managing-and-securing-active-directory) - - - by Russell Smith on 16th September - - - Examples of some useful Active Directory PowerShell commands and how to use them. - - -###### - [*Building Azure DevTest Labs with PowerShell*](https://mcpmag.com/articles/2019/09/17/azure-devtest-labs-with-powershell.aspx) - - - by Adam Bertram on 17th September - - - Learn how to use a freely available PowerShell module called PSAzDevTestLabs to build Azure DevTest Labs, add VMs to them and more. - - -###### - [*Ansible, Windows and PowerShell: the Basics – Introduction*](https://www.jonathanmedd.net/2019/09/ansible-windows-and-powershell-the-basics-introduction.html) - - - by Jonathan Medd on 18th September - - - A follow up to the a recent session at PowerShell Southampton on using both Ansible and PowerShell together. - - -###### - [*PowerShell 7 Preview 4*](https://devblogs.microsoft.com/powershell/powershell-7-preview-4/) - - - by Steve Lee on 19th September - - - Announcement around PowerShell 7 Preview 4, touching on some of the changes. - - -###### - [*Creating an Azure SQL Database backup via Powershell*](https://demiliani.com/2019/09/20/creating-an-azure-sql-database-backup-via-powershell/) - - - by Stefano Demiliani on 20th September - - - Find yourself needing to backup Azure SQL databases and download that backup? Here's a neat way to automate the process! - - -###### - [*Tweet of the Week*](https://twitter.com/richardhicks/status/1173568514080292864) - - - Richard Hicks puts his Windows 10 Always on VPN and Direct Access scripts on GitHub! - - -###### - [*Youtube: Customize Your PowerShell Prompt with Nerd Fonts & ANSI Escape Sequences*](https://www.youtube.com/watch?v=DhzR7mbFE9I) - - - You can spice up your PowerShell prompt by using a variety of techniques. In this video, we'll take a look at using ANSI escape sequences to colorize various components of your prompt, using Nerd Fonts to add glyphs (icons) to your prompt, and how you can write content anywhere on the terminal using coordinates. diff --git a/content/articles/2019-09-21-last-call-for-summit-2020-cfp.md b/content/articles/2019-09-21-last-call-for-summit-2020-cfp.md deleted file mode 100644 index b329aaadd..000000000 --- a/content/articles/2019-09-21-last-call-for-summit-2020-cfp.md +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Last Call for Summit 2020 CFP -authors: - - pscookiemonster -date: "2019-09-21T01:37:43+00:00" -categories: - - Announcements - - DevOps - - PowerShell for Admins - - PowerShell for Developers - - PowerShell Summit -legacy_featured_image: /wp-content/uploads/2019/09/docs.jpg -aliases: - - /2019/09/last-call-for-summit-2020-cfp/ ---- - -So! [Proposals][1] for the PowerShell + DevOps Global Summit 2020 are due in less than two weeks, on October 1st. We have some solid talks lined up, but we're still behind where we were last year, and need more proposals! -We've heard a lot of questions - _What topics are you looking for?_, _I don't know what to propose!_ and so on. Let's cover some ways to find topics and hopefully spark some ideas! - -## Add some spice - -First things first: We're not going to come up with your topic! [This bit][2] has some solid advice on mixing things up: - - - -* I saw a talk with X format and decided to apply it to Y subject. - - -* While working on a project, I thought, “Wow! I wish I knew X, Y, and Z before I started!” - - -* A conversation with coworkers about X led me to see the potential for a talk on it. - - -The key here is that there are plenty of ways to add variety to a topic - these certainly aren't comprehensive, just a few ideas. - -### Spice up Pester - -As an example, if we asked for _Pester_ sessions, there are plenty of ways to come up with a unique Pester talk. - - * Can you use Pester for security things (compliance, CI/CD, vulnerability assessments, etc.)? - * Can you use Pester for data validation of some sort (e.g. AD, SQL)? - * Have you used Pester for Infrastructure testing? - * Might you use Pester for Monitoring? (even if this might not be the optimal way to monitor things) - -At the end of the day, PowerShell can be used across a variety of fields, and general purpose tools like Pester can be used in each of those, in unique ways. - -### Other spices - -So! We used a few specific-ish variations of Pester as an example.  Take a step back and consider PowerShell itself: - - * How do you use PowerShell in different fields (keeping in mind that each field has it's own set of sub-fields)? Bonus points if the concepts / ideas / code you include are applicable in a variety of fields. - * How do you use PowerShell outside of work, or for general productivity (side note: running this CFP would be a _paaaaain_ without PowerShell!). - * What lessons can we take from other fields, ecosystems, or projects? For example, while these may seem new-ish to some of us, we borrowed and applied testing, CI/CD, and other ideas that have long been integrated in the ecosystems of other languages. - -All this said, please don't think you need something super unique and never-before-seen! - -## Tried and true - -Every day, new folks enter the field, or start learning about PowerShell, automation, DevOps, etc. Yes, people have talked about testing and other topics in the past... but guess what? Chances are we'll still accept some solid talks on important concepts. -So! What are some of these evergreen topics? - - * Release pipelines, including the individual components you might find: - * Source control - * Build systems and frameworks - * Pester and testing - * Deployment - * PowerShell modules or advanced functions - * How to write them - * Best practices - * How to distribute and maintain them - * etc. - * Using common tools/practices with PowerShell - * VSCode and extensions - * Windows Subsystem for Linux - * Debugging - * etc. - -There's plenty more. You can probably think about other core topics that folks will always need to learn, re-learn, or catch up on new ideas for. - -## 2020 specifics - -So!  What about the 2020 summit?  A few notes on our current state: - -### Topics we're looking for - -Keep in mind everything we've said so far. Don't overthink it. Show us something _you_ are interested in or working on. That being said, we haven't seen many submissions on: - - * Monitoring - * Testing and Pester - * DSC, or wrapping DSC (a la dsc_lite) - * Functions - * Modules - -### Topics that will have competition - -Every year, we have some topics that have a bit of competition. This year is no different. If you have something to share on these topics _don't let this scare you off_, just know there will be a little competition. - - * Kubernetes - * Working with web APIs - * Contributing to open source - * Azure (granted, I _much_ prefer attendee talks to vendor happy-path talks, for what it's worth) - -That's about it! We have less than two weeks and need more proposals, now is a good time to start writing them!  We'll close with a few handy links: - - * [2020 PowerShell + DevOps Global Summit CFP][1] - closing October 1st - * [2019 CFP ideas][3] - still applicable, although many of DevOps tools considered _esoteric_ might be worth a proposal - * [2020 CFP ideas][4] - * #Conferences in the [PowerShell Slack team][5] - plenty of folks willing to chat about or review your proposals in there.  You can also ping content@powershell.org, but the Slack route is faster, and has more eyes on it - - [1]: https://www.papercall.io/summit2020 - [2]: https://www.freecodecamp.org/news/how-to-get-a-technical-talk-accepted-at-a-conference-or-event-8ba291d11c62/ - [3]: https://powershell.org/2018/08/the-summit-2019-call-for-topics-some-ideas/ - [4]: https://powershell.org/2019/09/be-a-speaker-at-powershell-and-devops-global-summit-2020/ - [5]: http://bit.ly/PSSlack diff --git a/content/articles/2019-09-27-icymi-powershell-week-of-27-september-2019.md b/content/articles/2019-09-27-icymi-powershell-week-of-27-september-2019.md deleted file mode 100644 index 82e40addd..000000000 --- a/content/articles/2019-09-27-icymi-powershell-week-of-27-september-2019.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 27-September-2019" -authors: - - Robin Dadswell -date: "2019-09-27T15:00:29+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -aliases: - - /2019/09/icymi-powershell-week-of-27-september-2019/ ---- - -Topics include emojis, orchestration, 365 storage, ternary operators, bash and more. - - - - - - Special thanks to Robin Dadswell, Mark Roloff, Prasoon Karunan V, and Kevin Laux. - - -###### - [*VM orchestration using PowerShell Core and Azure Functions*](https://dev.to/omiossec/vm-orchestration-using-powershell-core-and-azure-functions-2faa) - - - by Olivier Miossec on 23rd September - - - Imagine a situation where you need to download data from external sources and you need to make complex calculations and aggregations on it. You don't know in advance the amount of data you will have and the schedule of flow during the day, more calculations and aggregations process are mono-thread. Find out how to setup this using PowerShell! - - -###### - [*Clear Office 365 Storage Size with Versioning*](https://devscopeninjas.azurewebsites.net/2019/09/24/clear-office-365-storage-size-with-versioning/) - - - by Ricardo Calejo on 24th September - - - One of the things most people don’t know when creating a Group or a Team with an associated SharePoint Site, or even a new sitecollection, is that out of the box, its document libraries (or similar) have versioning enabled and supporting a maximum of 500 versions. This a cool feature, but can impact your Office365 storage quota and severely decrease its size. - - -###### - [*Getting Familiar with the Ternary Operator in PowerShell 7*](https://toastit.dev/2019/09/25/ternary-operator-powershell-7/) - - - by Josh King on 25th September - - - What the heck is a "ternary" and what's it doing in my PowerShell?! - - -###### - [*Integrate Linux Commands into Windows with PowerShell and the Windows Subsystem for Linux*](https://devblogs.microsoft.com/commandline/integrate-linux-commands-into-windows-with-powershell-and-the-windows-subsystem-for-linux/) - - - by Mike Battista on 26th September - - - A common question Windows developers have is “why doesn’t Windows have 'INSERT FAVORITE LINUX COMMAND HERE' yet?”. Whether longing for a powerful pager like less or wanting to use familiar commands like grep or sed, Windows developers desire easy access to these commands as part of their core workflow. - - -###### - [*Generate an overview of all Microsoft Flows with PowerShell*](https://www.cloudsecuritea.com/2019/09/generate-an-overview-of-all-microsoft-flows-with-powershell/) - - - by Maarten Peeters on 26th September - - - Users can easily create flows in SharePoint and in their OneDrive so as a company you want to monitor and manage this behaviour. With PowerShell you can generate a list all flows that have been created and who created it. This way you can keep track on who’s building flows, which triggers and actions are users using and the current state of the flow. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/d8exe0/powershell_is_now_part_of_the_net_core_30/) - - - .Net Core 3.0 is now released and with it new container images. By popular demand Microsoft is now including PowerShell Core as part of the .Net Core 3.0 SDK container image. - - -###### - [*Tweet of the Week*](https://twitter.com/lee_ford/status/1177329239806349315) - - - PowerShell and Emojis... say no more! - - -###### - [*Youtube: PowerShell Module Development*](https://www.youtube.com/watch?v=uq5GfJ3dCxg&) - - - Asish Raj Discusses the ins and outs of PowerShell Modules on his PowerShell basics series. diff --git a/content/articles/2019-10-04-icymi-powershell-week-of-4-october-2019.md b/content/articles/2019-10-04-icymi-powershell-week-of-4-october-2019.md deleted file mode 100644 index 0df61d0b1..000000000 --- a/content/articles/2019-10-04-icymi-powershell-week-of-4-october-2019.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 4-October-2019" -authors: - - Robin Dadswell -date: "2019-10-04T15:00:07+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/10/icymi-powershell-week-of-4-october-2019/ ---- - -Topics include PowerShell GUIs, Azure, Exchange and more. - - - - - - Special thanks to Robin Dadswell, Mark Roloff, Prasoon Karunan V, and Kevin Laux. - - -###### - [*How to work with the WSUS PowerShell module*](https://searchwindowsserver.techtarget.com/tutorial/How-to-work-with-the-WSUS-PowerShell-module) - - - by Dan Franciscus on 27th September - - - The PoshWSUS module automates the process to synchronize and approve Windows updates. You can also use it to perform essential maintenance on the WSUS server. - - -###### - [*Report Exchange Online Mailbox Quota Usage Over Set Threshold*](https://office365itpros.com/2019/09/30/report-exchange-online-mailbox-quota-usage-over-threshold/) - - - by Tony Redmond on 30th September - - - A new twist to an old script, find a way to report on Mailbox quota's using PowerShell! - - -###### - [*Azure Sentinel: automating your Use Cases with PowerShell and the #AzSentinel module*](https://medium.com/wortell/azure-sentinel-automating-your-use-cases-with-powershell-and-the-azsentinel-module-380606e601f5) - - - by Maarten Goet on 30th September - - - Say hello to our open-source PowerShell module called AzSentinel. The goal is to provide programmatic access to Azure Sentinel. - - -###### - [*Use powershell to create Azure AD dynamic security group for Azure AD joined (AADJ) devices only*](http://eskonr.com/2019/10/use-powershell-to-create-azure-ad-dynamic-security-group-for-azure-ad-joined-aadj-devices-only/) - - - by Eswar Koneti on 2nd October - - - Need to have a group which is based on attributes which cannot be used in Dynamic AAD groups, well with PowerShell we can make it so! - - -###### - [*How to Build a PowerShell Menu GUI for your PowerShell Scripts*](https://adamtheautomator.com/powershell-menu-gui/) - - - by Nathan Kasco on 3rd of October - - - It's weekend project time again and today you will learn how to build a lightweight system tray context menu where you can quickly and easily launch your most coveted PowerShell scripts. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/darvhv/i_made_a_module_to_download_depressing_lock/) - - - User *stib* shares with us his module in the PowerShell Gallery to update lockscreen images with some that are a bit less cheery. - - -###### - [*Tweet of the Week*](https://twitter.com/Jaykul/status/1179479231769784327) - - - An interesting thread on interview questions that understand enumerations. - - -###### - [*Youtube: Basic Powershell Commands For Beginners*](https://www.youtube.com/watch?v=j9wtAezZ9x0&feature=youtu.be) - - - In this video we will be taking a look at some basic powershell commands which are essential when using powershell. diff --git a/content/articles/2019-10-11-icymi-powershell-week-of-11-october-2019.md b/content/articles/2019-10-11-icymi-powershell-week-of-11-october-2019.md deleted file mode 100644 index 9104cfeba..000000000 --- a/content/articles/2019-10-11-icymi-powershell-week-of-11-october-2019.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 11-October-2019" -authors: - - Robin Dadswell -date: "2019-10-11T15:00:10+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/10/icymi-powershell-week-of-11-october-2019/ ---- - -Topics include PowerShell GUIs, New PS 7 features and more - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. - - -###### - [*Making Sense of Parallel FOREACH-OBJECT in Powershell 7*](https://jdhitsolutions.com/blog/powershell/6840/making-sense-of-parallel-foreach-object-in-powershell-7/) - - - by Jeffery Hicks on 7th October - - - Having this feature as part of the language is a welcome addition. But this isn’t magic and there are real-world consequences when you use it. The -Parallel parameter will spin up a collection of runspaces and run your scriptblock in each one. Running something in parallel does not mean in order. - - -###### - [*Select an Azure Subscription Easily*](https://www.yobyot.com/cloud/select-azure-subscription-easily/2019/10/08/) - - - by Alex Neihaus on 8th of October - - - You can use the power of the PowerShell pipeline with OGV to actually make it easy to select the active Azure subscription you want. - - -###### - [*Ansible, Windows and PowerShell: the Basics – Part 3, Windows Roles and Features*](https://www.jonathanmedd.net/2019/10/ansible-windows-and-powershell-the-basics-part-3-windows-roles-and-features.html) - - - by Jonathan Medd on 8th of October - - - Part 3 of a multipart post about using Ansible and PowerShell to prepare servers with Windows Roles and Features. - - -###### - [*Simple PowerShell Chat*](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/simple-powershell-chat) - - - posted on Idera on 9th of October - - - Here’s a fun PowerShell script that you can use to create a simple multi-channel chat room. All you need is a network share where everyone has read and write permissions. - - -###### - [*Deep Dive: PowerShell Loops and Iterations*](https://ridicurious.com/2019/10/10/powershell-loops-and-iterations/?fbclid=IwAR0vPLDIlpyXEwmxcIkPJlhA5ISk7I_EvCDSZoTJapF1jjVHdqj0ARmF_ig) - - - by Akshi Srivastava on 10th of October - - - PowerShell supports many different types of loops Akshi does a great job of explaining them all. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/dfa89u/psscriptmenugui_use_a_csv_file_to_make_a/) - - - User Weebsnore shares a way to turn a csv file into a GUI for launching multiple powershell scripts. - - -###### - [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1181950525832495104) - - - Stevelee demos a new feature of Select-String in PS 7 Preview 5, text highlighting. - - -###### - [*Youtube: LetsPlay Powershell: PSKoans #14*](https://www.youtube.com/watch?v=aHlI2_0oiws) - - - If you've never used PSKoans before this video shows how it can be a fun way to learn PowerShell with Pester tests. - - -###### - [*Podcast*](https://powershellnews.podbean.com/e/episode-021-interview-with-david-littlejohn-and-james-petty-at-powershell-on-the-river/) - - - This episode was recorded at the PowerShell on the River event. It is a sitdown interview with David Littlejohn and James Petty. We discuss the speakers and topics at the event, while also talking about future PowerShell events across the country. We also discuss the OnRamp program and its value to both the industry and the students. diff --git a/content/articles/2019-10-15-2020-conference-recording-changes.md b/content/articles/2019-10-15-2020-conference-recording-changes.md deleted file mode 100644 index 63109f7ca..000000000 --- a/content/articles/2019-10-15-2020-conference-recording-changes.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: 2020 Conference Recording Changes -authors: - - pscookiemonster -date: "2019-10-15T13:14:41+00:00" -categories: - - PowerShell Summit -aliases: - - /2019/10/2020-conference-recording-changes/ ---- - -Hi all! -So!  You might have seen that the way the PowerShell + DevOps Global Summit records and distributes sessions will be changing.  Long story short:  The presenter will maintain all rights to the material and intellectual property, and Pluralsight will own distribution rights to the recording. -There are many valid reasons to be upset about this.  Let's walk through (1) what we gain from this, and (2) how we can work around some of the valid concerns - -## Why use Pluralsight? - -Money.  I know.  Disappointing.  In 2020, we'll be saving over $100k by using Pluralsight for the two conferences. But... what does this actually mean? Are we trying to turn a profit? Nope! Let's look on the bright side: - - * **More speakers**.  We had 39 last year.  We have 50 this year, pending speaker confirmations ([tentative agenda][1]).  This means more new speakers! - * **Fewer multi-session speakers**.  We needed 16 in 2019.  We have 5 this year.  This means less stress - * **More scholarships**.  Excluding conference book funded scholarships, we had 5 scholarships in 2019, up to 10 ~$4,500 scholarships in 2020 - * **Same small conference.**  We don't need to add seats and can maintain the higher speaker-and-PS-team-to-attendee ratio - -So!  These are all good things, and we should keep them in mind, but let's dive into some of the complaints about this change. - -## Why are you taking away our recordings! - -> Given the response from the community, it seems prudent for the organisers to at least state their intent.  To help stop the perceived (or real) conflict of interest here.  Both with Don and other PluralSight employees in the conference committee -> - Glenn Sarti - -Yep, thanks for getting us to write this, we probably should have had something like this ready.  Next year.  Unless something changes - we do read conference feedback! -Oh!  In case anyone missed [the announcement][2] - while we do occasionally pester Don for advice, he is no longer involved in running the conference.  Of those of us running the conference, Missy authored a course for Pluralsight three years ago, but had no involvement in the decision, and that's the extent of our direct relationships to Pluralsight.  And just to re-iterate - both sides benefit from this contract, assuming you see the bright sides we listed as benefits! - -> Lotta folks in the community going to that event (even some of the speakers, I'm sure) are there because the yt vids of times past helped them immensely along their way -> - Joel Sallow -> That's very unfortunate. I'm still in talks with the wife about being in a financial position to be able to attend this time around. Pluralsight is expensive and my current company isn't keen on paying for anything that they don't deem as necessary. -> - Matt Bobke -> I'm against these sessions which are not only produced for free, but at significant cost for the speakers, being put behind a pay wall -> - Thomas Rayner - -Totally!  I won't lie - this will gate off some of the material.  That said, -(1) speakers can, and should, upload all materials.  These will still be available to everyone, and -(2), speakers are _encouraged_ to get practice speaking ahead of the conference, and would likely be in demand from one of the several PowerShell user groups who do recorded presentations, before or after the conference. -Ultimately, a good portion of these sessions will end up out there in some form or another. - -> This goes against the historical nature of the community and will be detrimental to the conference/s in future -> ... -> it feels like a sell out tbh and will damage your event's reputation going forward -> - Ryan Yates - -I get it - I'd prefer the recordings be out there in the open as well.  Here's the thing though:  If you balance getting new speakers involved, the several all-costs-paid scholarships we've added, the reduced stress from fewer multi-session speakers, that the session materials can and should be distributed openly, and the potential workaround that any user group may record these before or after the fact - is this detrimental to the conference or damaging to the event's reputation?  I guess it depends on who you ask, but it seems a little more nuanced. - -> ", and that a talent release form may be required 30 days prior to the show." -> Not sure how enforcable or even legal for non-US people. This is risk for speakers with only 30 days, given how far out the CFP and acceptance process is. We would do all this work ... to find out we can't sign the release form. -> - Glenn Sarti - -Totally.  As soon as details are finalized we'll be in touch with speakers, the 30 day thing is just a deadline.  I'm hoping they can live with just the e-mail acks, but there's a chance we'll need signatures as mentioned there. - -> Sorry if you're feeling attacked @psjamesp. I know you and the crew work hard to put on a good event. -> - Chris Hunt -> Echoing @cdhunt it's the decision that I disagree with, not the people that collectively make said decision -> - Ryan Yates -> Yeah, we love and appreciate you guys. Just concerned about the impact on the wider community 🙂 -> - Joel Sallow - -<3.  Thank you all for bringing up these points without bringing too many pitchforks : ) - -## What now? - -So!  Yes, it's sad.  But some good will come out of this, and you can help ensure folks without access to Pluralsight or the conference can still access the content: - - * Are you a speaker?  Want to talk at a user group to ensure you are recorded in a publicly available format?  Ping Warren - * Are you interested in a session that is only available on Pluralsight?  Ping the speaker to see if they would be interested in speaking and recording at a user group - * Are you hoping we change this for next year, even with the benefits it gives us?  Be sure to tell us in the conference feedback, or ping summit@powershell.org - * Do you want to convince PluralSight to open these up beyond subscription or conference-goer gates?  This likely won't be possible, but give Thomas Rayner a ping in Discord - -We'll update this post with specifics on how access to the content will work, once this has been finalized. - - - [1]: https://sessions.eventraft.com/PowerShell2020 - [2]: https://powershell.org/2019/07/a-farewell-and-a-bunch-of-hellos/ diff --git a/content/articles/2019-10-18-.md b/content/articles/2019-10-18-.md deleted file mode 100644 index 791d28a0b..000000000 --- a/content/articles/2019-10-18-.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 18-October-2019" -authors: - - Robin Dadswell -date: "2019-10-18T00:00:00+00:00" -categories: - - PowerShell for Admins -draft: true ---- - -# - - - Topics include idempotency, Jenkins, PowerShell for beginners and more. - - - Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. - - -###### - [*PowerShell Beginners Have to Start Somewhere*](https://powershell.anovelidea.org/powershell/iron-scripter-challenge-beginner-walk-through/) - - - by Dave Carroll on 13th October - - - A nice beginners guide to learning PowerShell with an overview of many concepts. - - -###### - [*Writing Idempotent PowerShell scripts*](https://robindadswell.github.io/blog/2019/10/14/writing-idempotent-powershell-scripts) - - - by Robin Dadswell on 14th October 2019 - - - An insight into how to write idempotent PowerShell scripts using a file as a simple example. - - -###### - [*Encrypting Text (Part 1)*](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/encrypting-text-part-1) - - - by Idera website on 15th October 2019 - - - Let’s take a look at a safe way of encrypting text on a computer. The Protect-Text function in this article takes any text and encrypts it automatically, no password needed. Instead of a password, it uses either your user account and machine, or just your machine as a secret. - - -###### - [*Running PowerShell Scripts With Jenkins and Git*](https://adamtheautomator.com/jenkins-powershell-git/) - - - by Phillip Marshall on 17th October - - - Learn how to integrate Git version control with Jenkins to set up and schedule PowerShell scripts to run at predefined schedules. - - -###### - [*Web Scraping with PowerShell*](https://www.pipehow.tech/invoke-webscrape/) - - - by Emanuel Palm on 17th October - - - Sometimes you end up in situations where you want to get information from an online source such as a webpage, but the service has no API available for you to get information through and it’s too much data to manually copy and paste. Or maybe you need to register a lot of entries on a website, but don’t have a bored friend to help out. Fear not, PowerShell can be your bored friend if you ask nicely! - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/dgqty6/list_of_best_online_courses_to_learn_powershell/) - - - User gandhiN puts together a list of the best courses online to learn powershell, linking to sites like pluralsight, skillshare and udemy. - - -###### - [*Tweet of the Week*](https://twitter.com/PSConfEU/status/1183628841828474881) - - - A call for speakers for PSConf Europe June 2020. - - -###### - [*Youtube: PowerShell Errors and Exceptions Handling*](https://www.youtube.com/watch?v=A6afjA5Q9eM) - - - Learn how to handle PowerShell Errors and Exceptions. See how to recognize and deal with non-terminating and terminating PowerShell errors. Take control and handle various errors with try catch. Explore rich PowerShell error objects and see how to drill down into error properties. Wrap up with a practical example where you can provide better feedback to your users when your PowerShell code encounters the unexpected. diff --git a/content/articles/2019-10-18-icymi-powershell-week-of-18-october-2019.md b/content/articles/2019-10-18-icymi-powershell-week-of-18-october-2019.md deleted file mode 100644 index 1f0e8779a..000000000 --- a/content/articles/2019-10-18-icymi-powershell-week-of-18-october-2019.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 18-October-2019" -authors: - - Robin Dadswell -date: "2019-10-18T15:00:38+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/10/icymi-powershell-week-of-18-october-2019/ ---- - -Topics include idempotency, Jenkins, PowerShell for beginners and more. - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. - - -###### - [*PowerShell Beginners Have to Start Somewhere*](https://powershell.anovelidea.org/powershell/iron-scripter-challenge-beginner-walk-through/) - - - by Dave Carroll on 13th October - - - A nice beginners guide to learning PowerShell with an overview of many concepts. - - -###### - [*Writing Idempotent PowerShell scripts*](https://robindadswell.github.io/blog/2019/10/14/writing-idempotent-powershell-scripts) - - - by Robin Dadswell on 14th October 2019 - - - An insight into how to write idempotent PowerShell scripts using a file as a simple example. - - -###### - [*Encrypting Text (Part 1)*](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/encrypting-text-part-1) - - - by Idera website on 15th October 2019 - - - Let’s take a look at a safe way of encrypting text on a computer. The Protect-Text function in this article takes any text and encrypts it automatically, no password needed. Instead of a password, it uses either your user account and machine, or just your machine as a secret. - - -###### - [*Running PowerShell Scripts With Jenkins and Git*](https://adamtheautomator.com/jenkins-powershell-git/) - - - by Phillip Marshall on 17th October - - - Learn how to integrate Git version control with Jenkins to set up and schedule PowerShell scripts to run at predefined schedules. - - -###### - [*Web Scraping with PowerShell*](https://www.pipehow.tech/invoke-webscrape/) - - - by Emanuel Palm on 17th October - - - Sometimes you end up in situations where you want to get information from an online source such as a webpage, but the service has no API available for you to get information through and it’s too much data to manually copy and paste. Or maybe you need to register a lot of entries on a website, but don’t have a bored friend to help out. Fear not, PowerShell can be your bored friend if you ask nicely! - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/dgqty6/list_of_best_online_courses_to_learn_powershell/) - - - User gandhiN puts together a list of the best courses online to learn PowerShell, linking to sites like Pluralsight, Skillshare and Udemy. - - -###### - [*Tweet of the Week*](https://twitter.com/PSConfEU/status/1183628841828474881) - - - A call for speakers for PSConf Europe June 2020. - - -###### - [*Youtube: PowerShell Errors and Exceptions Handling*](https://www.youtube.com/watch?v=A6afjA5Q9eM) - - - Learn how to handle PowerShell Errors and Exceptions. See how to recognize and deal with non-terminating and terminating PowerShell errors. Take control and handle various errors with try catch. Explore rich PowerShell error objects and see how to drill down into error properties. Wrap up with a practical example where you can provide better feedback to your users when your PowerShell code encounters the unexpected. diff --git a/content/articles/2019-10-25-icymi-powershell-week-of-25-october-2019.md b/content/articles/2019-10-25-icymi-powershell-week-of-25-october-2019.md deleted file mode 100644 index 24bb75667..000000000 --- a/content/articles/2019-10-25-icymi-powershell-week-of-25-october-2019.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 25-October-2019" -authors: - - Robin Dadswell -date: "2019-10-25T15:00:13+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/10/icymi-powershell-week-of-25-october-2019/ ---- - -Topics include RepAdmin, Certificates and Testing Teams connections. - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. - - -###### - [*My current #PowerShell #Pomodoro timer*](https://msunified.net/2019/10/22/my-current-powershell-pomodoro-timer/?utm_content=buffer8f30b&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer) - - - by Ståle Hansen on 22nd October - - - Since Microsoft Teams arrived, I have had some issues adjusting and it has taken some time. But now I have incorporated Teams in my PowerShell Pomodoro timer, by simply closing it during my focus session and opening it again. I found that even if I used the newly implemented focus time in Teams, I still saw the number of unread notifications in the client. This was disturbing enough to bring me out of flow. - - -###### - [*Copy certificate to the Windows Services store*](https://www.shellandco.net/blog/2019/10/22/copy-certificate-to-the-windows-services-store/) - - - by Nicolas Hahang on 22nd October - - - Find out how to locate a certificate and utilise them for a Windows Service. - - -###### - [*Microsoft Teams Direct Routing SIP Tester PowerShell Script*](https://tomtalks.blog/2019/10/microsoft-teams-direct-routing-sip-tester-powershell-script/) - - - by Tom Arbuthnot on 21st October - - - “SIP Tester” is a sample PowerShell script from Microsoft that you can use to test Direct Routing Session Border Controller (SBC) connections in Microsoft Teams. This script tests the basic functionality of a customer-paired Session Initiation Protocol (SIP) trunk with Direct Routing. - - -###### - [*Repadmin vs. PowerShell AD replication cmdlets*](https://4sysops.com/archives/repadmin-vs-powershell-replication-cmdlets/) - - - by Krishnamoorthi Gopal on 21st October - - - When it comes to fixing Active Directory replication issues, the Repadmin tool has been your first choice since the launch of Windows 2003. However, the PowerShell replication cmdlets are now offering more flexibility. Find some pros and cons in this article. - - -###### - [*Copy multi-valued Active Directory attributes from one user to another with PowerShell*](https://devblogs.microsoft.com/scripting/copy-multi-valued-active-directory-attributes-from-one-user-to-another-with-powershell/) - - - by Doctor Scripto on 23rd October - - - We are in the middle of an Active Directory migration and need to copy the multi-valued attribute “ProxyAddresses” from old user accounts to new ones. Can you do with a few lines of code? - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/dlgf7f/thanks_to_this_subreddit_i_finally_finished_my/) - - - User shares his success story of building a GUI template cloning tool for VMs with the help of the PowerShell subreddit. - - -###### - [*Tweet of the Week*](https://twitter.com/PowerShell_Team/status/1187084663346454528) - - - PowerShell 7 Preview 5 is officially released check out the post to get details on new features. - - -###### - [*Youtube: From Scripting to Toolmaking- Taking the Next Step with Powershell*](https://www.youtube.com/watch?v=tMDZt7bC6XE) - - - A recent session from Spice World ATX. diff --git a/content/articles/2019-11-01-icymi-powershell-week-of-1-november-2019.md b/content/articles/2019-11-01-icymi-powershell-week-of-1-november-2019.md deleted file mode 100644 index e59f4ca15..000000000 --- a/content/articles/2019-11-01-icymi-powershell-week-of-1-november-2019.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 1-November-2019" -authors: - - Robin Dadswell -date: "2019-11-01T15:00:55+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -aliases: - - /2019/11/icymi-powershell-week-of-1-november-2019/ ---- - -Topics include Teams, Scheduled Jobs, Halloween fun and more - - - Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. - - -###### - [*Managing PowerShell scheduled jobs*](https://4sysops.com/archives/managing-powershell-scheduled-jobs/) - - - by Mike Kanakos on 28th October - - - I'd like to walk you through the management of PowerShell scheduled jobs. The concept of PowerShell jobs is not familiar territory for many PowerShell users. At first glance, the benefits of running any kind of job from the command line may not be obvious. Let's peel back the covers on managing scheduled jobs and the benefits that come with them. - - -###### - [*The PowerShell Magic 8 Ball*](https://jdhitsolutions.com/blog/powershell/6879/the-powershell-magic-8-ball/) - - - by Jeffery Hicks on 28th October - - - Last year I shared some PowerShell code on Twitter about this time of year. I have a short script that uses Windows Presentation Foundation (WPF) to create a spooky graphical prompt that allows you to ask questions of a Magic 8 Ball. - - -###### - [*Automated Microsoft Teams Policy application to Azure AD Groups using PowerShell*](https://robindadswell.github.io/blog/2019/10/28/automated-microsoft-teams-policy-appliation-to-azure-ad-groups-using-powershell) - - - by Robin Dadswell on 28th October - - - Use Azure AD Groups to manage teams policies for users who need different policies. This article provides a framework of how to do it including logging to teams. - - -###### - [*Using PowerShell ArrayLists and Arrays*](https://adamtheautomator.com/powershell-arraylist/) - - - by Nathan Kasco on 29th October - - - Get back to PowerShell basics learning how to use PowerShell arraylists and basic arrays in this how-to walkthrough! - - -###### - [*Port Testing with PowerShell*](https://powershell.one/tricks/network/porttest) - - - by TobiasPSP on 30th of October - - - Let’s check out how to use a TCPClient object to turn PowerShell into a fast and flexible network port tester! - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/dorgmq/monitoring_microsoft_teams_using_powershell/) - - - Monitoring Microsoft Teams using PowerShell Universal Dashboard - - -###### - [*Tweet of the Week*](https://twitter.com/PSJamesP/status/1190267923174240256) - - - Tickets are now on sale for PowerShell Summit! - - -###### - [*Create an Active Directory new user onboarding website with PowerShell*](https://www.youtube.com/watch?v=FvW8hC87OQk) - - - In this video, we use the Active Directory PowerShell Module and Universal Dashboard to create a self-service website for creating new users in Active Directory. diff --git a/content/articles/2019-11-08-icymi-powershell-week-of-8-november-2019.md b/content/articles/2019-11-08-icymi-powershell-week-of-8-november-2019.md deleted file mode 100644 index adc89b2d6..000000000 --- a/content/articles/2019-11-08-icymi-powershell-week-of-8-november-2019.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 8-November-2019" -authors: - - Robin Dadswell -date: "2019-11-08T15:00:58+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/11/icymi-powershell-week-of-8-november-2019/ ---- - -Topics include speeding up the pipeline, while/until loops, why you shouldn't use += and more! - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. - - -###### - [*Speeding Up the Pipeline - powershell.one*](https://powershell.one/tricks/performance/pipeline) - - - by Tobias Weltner on the 3rd November - - - The PowerShell Pipeline is robust but tends to be slow. With a couple of tricks you can speed it up tremendously and make it as fast as classic foreach loops. - - -###### - [*PowerShell: Do-While vs. Do-Until vs. While*](https://sid-500.com/2019/11/04/powershell-do-while-vs-do-until/) - - - by Patrick Gruenauer on the 4th November - - - Understanding the differences between a do-while, do-until and while loop could be confusing. Is it the same? Why are there multiple techniques? In this blog post you will learn the differences. - - -###### - [*PowerShell’s plus equals (+=), the array serial killer*](https://theposhwolf.com/howtos/PS-Plus-Equals-Dangers/) - - - by Anthony Howell on the 4th November - - - "I did a livestream recently where I created a function to parse an HTML table and convert it to a PowerShell object. If you followed along, you probably noticed that I used a += with no shame whatsoever. Luckily, @PrzemyslawKlys caught it and asked that I fix it (you can see the commit history here, the actual request was a Twitter DM). This was a great reminder to me that += should be avoided!" - - -###### - [*Ansible, Windows and PowerShell: the Basics – Part 7, Utilising PowerShell DSC*](https://www.jonathanmedd.net/2019/11/ansible-windows-and-powershell-the-basics-part-7-utilising-powershell-dsc.html) - - - by Jonathan Medd on 5th November - - - In Part 7 of this series we’ll continue our journey with Ansible, Windows and PowerShell and look at how utilise PowerShell DSC. If you or your team already own some automation created using PowerShell DSC then it is possible to re-use that via an Ansible Playbook. Or maybe you think that you or they would prefer to create configuration automation going forward using a perhaps more familiar PowerShell DSC, then this could be a solution for you. - - -###### - [*Creating a PowerShell Backup System*](http://jdhitsolutions.com/blog/powershell/6905/creating-a-powershell-backup-system/) - - - by Jeff Hicks on the 7th November - - - The start of a series of articles demonstrating how Jeff built a PowerShell-based backup system for critical files employing the System.IO.FileSystemWatcher. - - -###### - [*Tweet of the Week*](https://twitter.com/azureposh/status/1192801892314861569) - - - New PowerShell module for managing Azure Functions - - -###### - [*Youtube: Send Email with SendGrid and PowerShell*](https://www.youtube.com/watch?v=AsAQr9XK1Fc&feature=youtu.be) - - - In this video, I set up a free SendGrid account in Azure and send email with the Rest API and PowerShell. I walk through the reusable function that builds the header and body of the message. This function is helpful for anyone who needs to send email from a PowerShell script that doesn’t have access to an SMTP relay or are behind a firewall that blocks outbound SMTP traffic. diff --git a/content/articles/2019-11-15-icymi-powershell-week-of-15-november-2019.md b/content/articles/2019-11-15-icymi-powershell-week-of-15-november-2019.md deleted file mode 100644 index 2323ca18d..000000000 --- a/content/articles/2019-11-15-icymi-powershell-week-of-15-november-2019.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 15-November-2019" -authors: - - Robin Dadswell -date: "2019-11-15T15:09:43+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/11/icymi-powershell-week-of-15-november-2019/ ---- - -Topics include string manipulation, bash, Python and Slack applications. - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. - - -###### - [*Speeding Up String Manipulation*](https://powershell.one/tricks/performance/strings) - - - by Tobias Weltner on 10th November - - - Appending text to strings using “+=” is convenient but slow. Learn how to do string manipulation without slowing down PowerShell. - - -###### - [*Monitoring with PowerShell: Monitoring Active Directory replication*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-active-directory-replication/) - - - by Kelvin Tegelaar on 11th November - - - To make sure that the domain controllers keep replicating correctly and we detect issues early we use the Active Directory cmdlets in combination with our RMM system. This makes it so we can monitor the current status of the replication and alert if it does not work for a longer period of time. - - -###### - [*I sat down to learn enough PowerShell to recreate one of my bash functions.*](https://threadreaderapp.com/thread/1194296021297352705.html) - - - by Jessica Joy Kerr on 12th November - - - As a user of Linux and Bash Jessica details the differences good and bad that she discovered while learning PowerShell. - - -###### - [*Snek - Integrating Python in PowerShell*](https://ironmansoftware.com/snek-integrating-python-in-powershell/) - - - by Adam Driscoll on 14th November - - - Snek is a cross-platform PowerShell module for integrating with Python. It uses the Python for .NET library to load the Python runtime directly into PowerShell. Using the dynamic language runtime, it can then invoke Python scripts and modules and return the result directly to PowerShell as managed .NET objects. - - -###### - [*Automate Azure Disk Encryption for Windows Virtual Machines*](https://www.shudnow.net/2019/11/14/automate-azure-disk-encryption-for-windows-virtual-machines/) - - - by Elan Shudnow on 14th November - - - The purpose of this article is to provide a script and demonstrate different scenarios in which my script can be used to help provide an automated method which can encrypt your OS and Data disks as well as automatically creating a Key Vault if one does not exist including the Access Policy configuration. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/dwebjr/reminder_gethistory_exists_i_completely_forgot/) - - - Get-History exists, don't forget! - - -###### - [*Tweet of the Week*](https://twitter.com/alexandair/status/1195153217740562434?s=20) - - - Happy Birthday PowerShell? - - -###### - [*Youtube: Building a Slack application with PowerShell*](https://www.youtube.com/watch?v=lk0JYDzEoVM&feature=youtu.be) - - - In this video, I show how to create a Slack App with PowerShell using Universal Dashboard. I also show how to tunnel the webserver from localhost via ngrok. diff --git a/content/articles/2019-11-22-icymi-powershell-week-of-22-november-2019.md b/content/articles/2019-11-22-icymi-powershell-week-of-22-november-2019.md deleted file mode 100644 index aed83b994..000000000 --- a/content/articles/2019-11-22-icymi-powershell-week-of-22-november-2019.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 22-November-2019" -authors: - - Robin Dadswell -date: "2019-11-22T15:10:16+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/11/icymi-powershell-week-of-22-november-2019/ ---- - -Topics include Group-Object, Power Platform, Preview 6 and more. - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. - - -###### - [*Speeding Up Group-Object*](https://powershell.one/tricks/performance/group-object) - - - by Tobias Weltner on 17th November - - - There is a design flaw in Group-Object. With a workaround, your scripts can be up tp 50x faster and still 2x faster on PowerShell Core. - - -###### - [*Safely Using WMI in PowerShell (Part 2)*](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/safely-using-wmi-in-powershell-part-2) - - - by Prateik Singh on 18th November - - - In this mini-series, we are looking at the differences between Get-WmiObject and Get-CimInstance. Future PowerShell versions no longer support Get-WmiObject, so it is time to switch to Get-CimInstance if you haven’t already. - - -###### - [*PowerShell: The Software that Changed My Life*](https://adamtheautomator.com/powershell-passion/) - - - by Adam Bertram on 19th November - - - In this personal blog post, learn how one technology managed to change the entire trajectory of a sysadmin. - - -###### - [*How to Block Self-Service Purchase for Power Platform Products Using PowerShell*](https://blog.admindroid.com/block-self-service-purchase-for-power-platform-products-using-powershell/) - - - by the AdminDroid team on 19th November - - - Recently Microsoft announced Self-service purchase capabilities for Power Platform products (Power BI, PowerApps, and Flow). - - - Self-service purchase capability arrives automatically and enabled by default. Due to this change, individuals within the organization can buy subscriptions directly without contacting their IT department. - - -###### - [*PowerShell 7 Preview 6*](https://devblogs.microsoft.com/powershell/powershell-7-preview-6/) - - - by Steve Lee on 21st November - - - Today we shipped PowerShell 7 Preview.6! This release contains a number of new features and many bug fixes from both the community as well as the PowerShell team. This will be the last preview release as we head towards a Release Candidate in December. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/dxvkau/employee_deleted_60000_files_from_company/) - - - Employee deleted 60,000 files from company sharepoint - - -###### - [*Tweet of the Week*](https://twitter.com/jessitron/status/1196861737196277761) - - - @Jessitron shows you how to create your own custom Prompt in PowerShell. - - -###### - [*Youtube: PowerShell Ping Buddy - Part 1*](https://www.youtube.com/watch?v=RTTw4OFR8QM&feature=youtu.be) - - - A video by Adam Driscoll showing off ping buddy a simple grid display for ping results. diff --git a/content/articles/2019-11-29-icymi-powershell-week-of-29-november-2019.md b/content/articles/2019-11-29-icymi-powershell-week-of-29-november-2019.md deleted file mode 100644 index fcd094cb9..000000000 --- a/content/articles/2019-11-29-icymi-powershell-week-of-29-november-2019.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 29-November-2019" -authors: - - Robin Dadswell -date: "2019-11-29T16:15:02+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/11/icymi-powershell-week-of-29-november-2019/ ---- - -Topics include Invoke-Command, Objects, Introspection and more. - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. - - -###### - [*Monday Morning Module Maintenance Monoliners*](https://flxsql.com/monday-morning-module-maintenance-monoliners/) - - - by Andy Levy on 25th November - - - Do enough work with PowerShell and you’ll build up a decent collection of modules installed from the gallery into either your computer or your user profile (or maybe both!). Here are two one-liners to help keep things up to date and tidy. - - -###### - [*SkypeOnlineConnector Session Reconnection*](https://ucstatus.com/2019/11/25/skypeonlineconnector-session-reconnection/) - - - by Randy Chapman on 25th November - - - If you use the SkypeOnlineConnector PowerShell module to connect to and manage Skype for Business Online or Microsoft Teams, I have some exciting news. - - -###### - [*Using Invoke-Command In PowerShell*](https://winsysblog.com/2019/11/using-invoke-command-in-powershell.html) - - - by Dan Franciscus on 26th November - - - In this article, Dan Franciscus covers how to use the Invoke-Command and why it is one of his favorite commands to use in PowerShell. - - -###### - [*Why Do We Write PowerShell (for Office 365) Like We Do?*](https://office365itpros.com/2019/11/28/why-do-we-write-powershell-like-we-do/) - - - by Tony Redmond on 28th November - - - A reader asked why the PowerShell examples in the book (and this site) are “just code.” It’s a reasonable question that deserves a reasonable answer. - - -###### - [*Back to Basics: Understanding PowerShell Objects*](https://adamtheautomator.com/powershell-objects/) - - - by Bill Kindle on 29th November - - - PowerShell is a powerful language. But what makes it so powerful? PowerShell objects. What are these magical objects and how does PowerShell work with them? Stay tuned to find out. - - -###### - [*Youtube: Azure PowerShell Introduction*](https://youtu.be/LbGNQVbb_VI) - - - Learn the basics of using PowerShell with Azure, great primer. diff --git a/content/articles/2019-12-06-icymi-powershell-week-of-06-december-2019.md b/content/articles/2019-12-06-icymi-powershell-week-of-06-december-2019.md deleted file mode 100644 index 9ff4ee178..000000000 --- a/content/articles/2019-12-06-icymi-powershell-week-of-06-december-2019.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 06-December-2019" -authors: - - Robin Dadswell -date: "2019-12-06T16:07:38+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/12/icymi-powershell-week-of-06-december-2019/ ---- - -Topics include Hyper-V, IIS, Ternary Operators and more. - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20191206.md#getting-started-with-powershell-the-first-five-commands-you-need-to-master)[*GETTING STARTED WITH POWERSHELL: THE FIRST FIVE COMMANDS YOU NEED TO MASTER*](https://www.networkadm.in/the-first-five-commands-you-need-to-master/) - -by Mike Kanakos on December 04, 2019 -Getting started with PowerShell is easy. In fact, it’s easy enough for some people that they just dive in and start using it every day with little formal knowledge. At some point though, everyone needs a little help. The PowerShell console has a rich set of cmdlets and built-in help that can be useful for learning how to use the PowerShell language correctly. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20191206.md#building-a-hyper-v-report-using-ad-and-pswritehtml)[*BUILDING A HYPER-V REPORT USING AD AND PSWRITEHTML*](http://www.checkyourlogs.net/?p=71683) - -by Dave Kawula on December 05, 2019 -Display Hyper-V VM details as html using Out-GridViewHTML cmdlet in PSWriteHTML module which has built-in buttons to export as CSV,Excel and PDF. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20191206.md#how-to-manage-iis-websites-in-powershell)[*How To Manage IIS Websites In PowerShell*](https://adamtheautomator.com/powershell-script-to-create-iis-website/) - -by Bill kindle on December 03, 2019 -If you manage Windows Servers, you've likely worked with Internet Information Services (IIS). Websites are one of IIS's main features and, using PowerShell, you can easily manage and automate IIS websites with ease! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20191206.md#powershell-7-ternary-operator)[*PowerShell 7 Ternary Operator*](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/powershell-7-ternary-operator) - -by PowerTip on December 04, 2019 -With PowerShell 7, the language gets a new operator that created a lot of debate. Basically, you don’t have to use it, but users with a developer background will welcome it. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20191206.md#detecting-key-presses)[*Detecting Key Presses*](https://powershell.one/tricks/input-devices/detect-key-press) - -by Tobias Weltner on December 01, 2019 -Wouldn’t it be nice for scripts to detect when a key is pressed? Pressing a key could add a pause to scripts, exit loops prematurely, or skip loading things in your profile script. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20191206.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/e60rrf/catesta_a_powershell_module_project_generator/) - -Catesta is a PowerShell module that can scaffold a PowerShell project with easy integration into several CI/CD options. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20191206.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1202293097293434880) - -If you are contributing to #PowerShell on GitHub or using the daily builds, the master branch is now 7.1 preview.1. We triage and take specific merged PRs into rc.1 branch. Expectation is that 7.1 preview.1 will ship in Jan along with 7.0 GA. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20191206.md#youtube-how-to-export-dhcp-reservation-via-powershell)[*Youtube: How to export dhcp reservation via powershell*](https://www.youtube.com/watch?v=nqki1jFF0hg&feature=emb_logo) - -Exporting IP reservations in DHCP using PowerShell. diff --git a/content/articles/2019-12-10-the-dsc-book-now-open-source.md b/content/articles/2019-12-10-the-dsc-book-now-open-source.md deleted file mode 100644 index 43cc7c5dc..000000000 --- a/content/articles/2019-12-10-the-dsc-book-now-open-source.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: “The DSC Book” now Open Source! -authors: - - Don Jones -date: "2019-12-10T21:20:36+00:00" -categories: - - PowerShell for Admins -aliases: - - /2019/12/the-dsc-book-now-open-source/ ---- - -“The DSC Book” is now open source! It remains available at Leanpub, but the source is now at . Everyone is invited to contribute corrections and expansions, and the results will publish roughly monthly on Leanpub. In addition, the book is now $0 on Leanpub, although you may choose to pay whatever you like, with all proceeds going to The DevOps Collective’s scholarship programs. diff --git a/content/articles/2019-12-13-icymi-powershell-week-of-13-december-2019.md b/content/articles/2019-12-13-icymi-powershell-week-of-13-december-2019.md deleted file mode 100644 index 0aac10ba9..000000000 --- a/content/articles/2019-12-13-icymi-powershell-week-of-13-december-2019.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 13-December-2019" -authors: - - Robin Dadswell -date: "2019-12-13T15:00:42+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/12/icymi-powershell-week-of-13-december-2019/ ---- - -Topics include Functions, String, Certificate Management and more. - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. - - -###### - [*9 Tips for Writing Better PowerShell Functions*](https://dev.to/devblackops/9-tips-for-writing-better-powershell-functions-4ai6) - - - by Brandon Olin on 7th December - - - PowerShell has a lot of functionality tucked away into functions that sometimes are not known, ignored, or forgotten about entirely. Let's talk about some basic things we can add to functions that improve our scripts and ultimately make us better tool makers. - - -###### - [*The (Happy) Fate of "The DSC Book"*](https://donjones.com/2019/12/10/the-happy-fate-of-the-dsc-book/) - - - by Don Jones on 10th December - - - An announcement about the fate of "The DSC Book". - - -###### - [*Finally Making Sense of How Windows Manages Certificates*](https://adamtheautomator.com/windows-certificate-manager/) - - - by Michael Soule on 11th December - - - Get up to speed on how Windows manages certificates both in the GUI and PowerShell in this deep dive article. - - -###### - [*String Operations in PowerShell*](https://kpatnayakuni.com/2019/12/12/string-operations-in-powershell/) - - - by Kiran Patnayakuni on 12th December - - - A deep dive into all things strings in PowerShell. - - -###### - [*Managing My PowerShell Backup Files*](http://jdhitsolutions.com/blog/powershell/7081/managing-my-powershell-backup-files/) - - - by Jeff Hicks on 12th December - - - I've been backing up files with PowerShell. Now I need a way to trim old backup files automatically. This is how I do it with Group-Object and regular expressions. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/e9q5la/the_kemp_powershell_module_is_now_available/) - - - Announcement from Kemp about their module being available on the PowerShell Gallery. - - -###### - [*Tweet of the Week*](https://twitter.com/adamdriscoll/status/1204234854394556416) - - - Universal Dashboard is on the adopters page for PowerShell. - - -###### - [*Youtube: Core Concept: Regex for N00bs with Thomas Rayner*](https://www.youtube.com/watch?v=EcASUAi1B0k&feature=emb_logo) - - - REGEX!!! It's often misunderstood and hated by many! But the truth is regex is super powerful and sometimes it's the best tool for the job! diff --git a/content/articles/2019-12-20-icymi-powershell-week-of-20-december-2019.md b/content/articles/2019-12-20-icymi-powershell-week-of-20-december-2019.md deleted file mode 100644 index 0488f62ad..000000000 --- a/content/articles/2019-12-20-icymi-powershell-week-of-20-december-2019.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 20-December-2019" -authors: - - Robin Dadswell -date: "2019-12-20T16:09:01+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/12/icymi-powershell-week-of-20-december-2019/ ---- - -Topics include New PowerShell in the old ISE, Azure DevOps, Automating Twitter, and Searching Bing with PowerShell to creat a Word Cloud. - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. - - -###### - [*Using PowerShell Core 6 and 7 in the Windows PowerShell ISE*](https://ironmansoftware.com/using-powershell-core-6-and-7-in-the-windows-powershell-ise/) - - - by Adam Driscoll on 15th December - - - You probably should be using VSCode, but if you're not heres a great post on using PowerShell Core 6 and PowerShell 7 in PowerShell ISE. - - -###### - [*Azure Devops for PowerShell*](https://toastit.dev/2019/12/15/azure-devops-for-powershell-azureadventcalendar-2019-day-15/) - - - by Josh King on 15th December - - - This is a great step by step of using Azure DevOps to manage and test your PowerShell code. - - -###### - [*How to Automate Following Interesting Twitter Users*](https://adamtheautomator.com/follow-twitter-users/) - - - by Adam Bertram on 17th December - - - Adam shows you how to use the PSTwitterAPI module to scour twitter and find some interesting people to follow. - - -###### - [*PowerShell Web Search and Generating Word Cloud from Results*](https://ridicurious.com/2019/12/18/powershell-web-search-and-generating-world-cloud-from-results/) - - - by Prateek Singh on 18th December - - - This is a quick fun blog post to demonstrate how to perform a programmatical web search (A Bing search! 😎) and create a word cloud using the preview snippets - - -###### - [*Automatically Forward All-Company Meetings to New Hire Calendars Using Graph API*](https://www.kicka5h.io/post/automatically-forward-all-company-meetings-to-new-hire-calendars-using-graph-api) - - - by Ash K. on 19th December - - - How many times are all company meetings not given to new starters? Well no more using the Graph API. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ebalj7/some_powershell_spotted_on_tonights_episode_of_mr/) - - - When someone finds some PowerShell in an episode of Mr. Robot it becomes the top post of the week. - - -###### - [*Youtube: PSS: Why you Should be Using PSReadline Every Day with Jeffery Hayes*](https://www.youtube.com/watch?v=wz19NEIakn4) - - - Jeffery goes into detail about the PSReadline Module. PSReadline is a improvement to the command line interface, providing colored syntax, history, and much more. Learn how to make PSReadline a powerful tool in your PowerShell arsenal. diff --git a/content/articles/2019-12-27-icymi-powershell-week-of-28-december-2019.md b/content/articles/2019-12-27-icymi-powershell-week-of-28-december-2019.md deleted file mode 100644 index 7addbe0dc..000000000 --- a/content/articles/2019-12-27-icymi-powershell-week-of-28-december-2019.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 28-December-2019" -authors: - - Robin Dadswell -date: "2019-12-27T18:06:33+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2019/12/icymi-powershell-week-of-28-december-2019/ ---- - -Topics include: Automating Excel, Customizing your profile, a New Year's module and more... - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - - -###### - [*Testing for PowerShell in Windows Terminal*](https://jdhitsolutions.com/blog/powershell/7112/testing-for-powershell-in-windows-terminal/) - - - by Jeff Hicks on 20th December - - - How do you know if a script is running inside Windows Terminal, Jeff shows you a few ways. - - -###### - [*PowerShell and Excel: Yes, They Work Together*](https://adamtheautomator.com/powershell-excel-tutorial/) - - - by Adam Bertram on 22nd December - - - Microsoft Excel is one of those ubiquitous tools most of us can't escape even if we tried. Many IT professionals use Excel as a little database storing tons of data in various automation routines. What's the best scenario of automation and Excel? PowerShell! - - -###### - [*Sending to Microsoft Teams from PowerShell just got easier and better*](https://evotec.xyz/sending-to-microsoft-teams-from-powershell-just-got-easier-and-better/) - - - by Przemyslaw Klys on 22nd December - - - Christmas time is upon us, and I've decided that my PSTeams module needs some love. I wrote it in late 2018 and updated it a few times at the beginning of 2019. This release hopefully is worth of having 1.0 version number. - - -###### - [*HOMELAND SECURITY’S TRUSTED TRAVELERS API AND POWERSHELL – GETTING A BETTER GLOBAL ENTRY INTERVIEW USING POWERSHELL*](https://www.thelazyadministrator.com/2019/12/23/homeland-securitys-trusted-travelers-api-and-powershell-getting-a-better-global-entry-interview-using-powershell/) - - - by Brad Wyatt on 23rd December - - - Using the API for Global Entry/Pre-Check you can find out when you can schedule your interview. - - -###### - [*PowerShell Profiles*](https://www.sconstantinou.com/powershell-profiles/) - - - by Stephanos Constantinou on 24th December - - - In this tutorial we will see about PowerShell Profiles and their use. PowerShell profiles help you to customize your environment and add elements for every PowerShell session that you start. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/eftv7p/gethappynewyear_yes_bored_at_work/) - - - u/Bugibugi shares a function that tells you how much longer til the New Year. - - -###### - [*Tweet of the Week*](https://twitter.com/JeffHicks/status/1209992722263625728?s=09) - - - Never assume that any PowerShell code you find online is production ready. - - -###### - [*Youtube: Access Windows 10 With Empire Framework via Powershell*](https://www.youtube.com/watch?v=L5Ad4lWdbSo) - - - The video is a step by step guide on how to use Empire Framework to gain access to a Windows 10 machine via PowerShell. diff --git a/content/articles/2019/01/_index.md b/content/articles/2019/01/_index.md new file mode 100644 index 000000000..4230a6aad --- /dev/null +++ b/content/articles/2019/01/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from January 2019" +description: "PowerShell.org Articles published in January 2019." +--- diff --git a/content/articles/2019/01/icymi-powershell-week-of-11-january-2019/index.md b/content/articles/2019/01/icymi-powershell-week-of-11-january-2019/index.md new file mode 100644 index 000000000..02cd4a986 --- /dev/null +++ b/content/articles/2019/01/icymi-powershell-week-of-11-january-2019/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2019-01-11-icymi-powershell-week-of-11-january-2019/ +title: "ICYMI: PowerShell Week of 11-January-2019" +authors: + - Mark Roloff +date: "2019-01-11T16:00:56+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/01/icymi-powershell-week-of-11-january-2019/ +--- + +Topics include posting to Teams, creating bootable USBs, fun with paths, and a new module for Dyn managed DNS. + + + +Content sifted and sorted by Brett Bunker, Robin Dadswell, Mark Roloff, and several cups of questionably roasted Starbucks K-Cups. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190111.md#the-powershell-docs-repo-is-moving)[*The PowerShell-Docs repo is moving*](https://blogs.msdn.microsoft.com/powershell/2019/01/07/the-powershell-docs-repo-is-moving/) + +by Sean Wheeler on January 7th +If you're at all involved in maintaining the official PowerShell documentation, this is a heads up that the repo is being relocated. Take a look at this post from the PS team for details. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190111.md#joining-paths-in-powershell)[*Joining Paths in PowerShell*](https://devblackops.io/joining-paths-in-powershell/) + +by Brandon Olin on January 7th +Brandon has a great new post covering some of the various ways that we can handle constructing paths in PowerShell, and some of the considerations that we should keep in mind when thinking about the portability of our tools. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190111.md#how-to-trigger-incoming-webhooks-in-microsoft-teams-with-powershell)[*How to trigger incoming webhooks in Microsoft Teams with Powershell*](https://www.scriptinglibrary.com/languages/powershell/how-to-trigger-incoming-webhooks-in-microsoft-teams-with-powershell/) + +by Paolo Frigo on January 8th +"Ya know what? I wish I could have more alerts in my inbox," said no one, ever. If you're using Teams, Paolo has a handy post about how you can send automated alerts to it from PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190111.md#introducing-the-poshdyndnsapi-module)[*Introducing the PoShDynDnsApi Module*](https://powershell.anovelidea.org/powershell/module-poshdyndnsapi/) + +by Dave Carrol on January 7th +Should you find yourself using DNS managed by Dyn, you're in luck. There's a module for that now. Or perhaps you just like digging into the code to see how it all works? It's on GitHub, so that's cool. In addition to introducing his module, Dave also covers a few lessons learned during development. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190111.md#create-a-bootable-usb-stick-with-powershell-create-bootableusbstick)[*Create a bootable USB stick with PowerShell (Create-BootableUSBStick)*](https://sid-500.com/2019/01/08/create-a-bootable-usb-stick-with-powershell-create-bootableusbstick/) + +by Patrick Gruenauer on January 8th +A sometimes overlooked application of PowerShell is that it can handily wrap classic cmdline tools. This handy function will tackle creating your boot sticks with some modern razzmatazz. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190111.md#powershell--devops-global-summit-2019)[*PowerShell + DevOps Global Summit 2019*](https://powershell.org/summit/) + +If you're still on the fence about joining us for Summit this year, now is a good time to sign up. Tickets to this fantastic line-up of speakers are beginning to get scarce. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190111.md#reddit-rpowershell---popular-weekly-post)[*Reddit /r/PowerShell - Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/acm9j2/tip_how_to_check_on_the_progress_of_an_already) + +On the chance that you're still working with the ISE, /u/omers has a handy tip to help you check your position in a loop without breaking. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190111.md#youtube-azposh-make-your-transition-from-powershell-ise-to-visual)[*Youtube: AZPosh: Make Your Transition from PowerShell ISE to Visual Studio Code Painless*](https://www.youtube.com/watch?v=TJfWgcag6Q4) + +Are you still working in the ISE? Keep hearing about this VS Code thing but just haven't looked at it yet? From the Arizona PowerShell Users Group, Timothy Warner has a great presentation this week to help you make the transition to the new editor of choice for PowerShell. diff --git a/content/articles/2019/01/icymi-powershell-week-of-25-january-2019/index.md b/content/articles/2019/01/icymi-powershell-week-of-25-january-2019/index.md new file mode 100644 index 000000000..3e10d5cd9 --- /dev/null +++ b/content/articles/2019/01/icymi-powershell-week-of-25-january-2019/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2019-01-25-icymi-powershell-week-of-25-january-2019/ +title: "ICYMI: PowerShell Week of 25-January-2019" +authors: + - Mark Roloff +date: "2019-01-25T16:39:42+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/01/icymi-powershell-week-of-25-january-2019/ +--- + +Topics include SCCM, DSC, an intro for people in infosec, sweet dashboards, and more. + + + +Content pulled together by Brett Bunker, Robin Dadswell, and the less-than-punctual this week Mark Roloff. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190125.md#wake-up-single-computer-or-collection-of-computers-in-configmgr-1810-using-powershell)[*Wake up single Computer or collection of Computers in ConfigMgr 1810 using PowerShell*](https://ccmexec.com/2019/01/wake-up-single-computer-or-collection-of-computers-in-configmgr-1810-using-powershell/) + +by Jörgen Nilsson on January 22nd +SCCM has a fancy new way of waking systems and Jörgen walks through how to get that setup, and initiate the wake up from PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190125.md#logging-powershell-scripts)[*Logging PowerShell Scripts*](https://powershell.getchell.org/2019/01/23/logging-powershell-scripts/) + +by Nicholas M. Getchell on January 23rd +Log files are an invaluable tool, so why not include the functionality in your scripts? Nicholas shares a few methods for accomplishing this. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190125.md#applying-basic-system-configuration-using-powershell-dsc)[*Applying basic system configuration using PowerShell DSC*](https://www.markou.me/2019/01/applying-basic-system-configuration-using-powershell-dsc/) + +by George Markou on January 20th +If you're looking to take a quick dive into configuration management, George has a nice intro to DSC to help you take that first step. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190125.md#parsing-text-with-powershell-23)[*Parsing Text with PowerShell (2/3)*](https://blogs.msdn.microsoft.com/powershell/2019/01/24/parsing-text-with-powershell-2-3/) + +by Steve Lee on January 24th +This 2 for 3 in a series from Steve about working with text. You're bound to pick up some handy new tricks in here. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190125.md#group-policy-backup-with-a-powershell-script)[*Group Policy backup with a PowerShell script*](https://4sysops.com/archives/group-policy-backup-with-a-powershell/) + +by Mike Kanakos on January 18th +Understandably frustrated with the default behavior, Mike creates a better GPO backup. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190125.md#reddit-rpowershell---popular-weekly-post)[*Reddit /r/PowerShell - Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ahon00/universal_dashboard_sample/?st=jrc9cq84&sh=ac8d7eb4) + +/u/PorreKaj made a pretty sweet dashboard using the Universal Dashboard and, true to his promise, delivers sample code. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190125.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/PSPester/status/1087438839227006977) + +A new version of Pester is out: 4.6.0! Time to start polishing up your tests with new functionality. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190125.md#youtube-powershell-basics-for-security-professionals-part-1)[*Youtube: PowerShell Basics for Security Professionals Part 1*](https://www.youtube.com/watch?v=B0EsL1j_-qw) + +Mr Carlos Perez gives a livestreamed presentation for people in infosec dipping into PowerShell. diff --git a/content/articles/2019/01/icymi-powershell-weeks-of-x-mas-4-january-2019/index.md b/content/articles/2019/01/icymi-powershell-weeks-of-x-mas-4-january-2019/index.md new file mode 100644 index 000000000..56806f70c --- /dev/null +++ b/content/articles/2019/01/icymi-powershell-weeks-of-x-mas-4-january-2019/index.md @@ -0,0 +1,66 @@ +--- +url: /articles/2019-01-04-icymi-powershell-weeks-of-x-mas-4-january-2019/ +title: "ICYMI: PowerShell Weeks of X-mas & 4-January-2019" +authors: + - Mark Roloff +date: "2019-01-04T16:00:52+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/01/icymi-powershell-weeks-of-x-mas-4-january-2019/ +--- + +Topics include checking SCCM patch compliance, a little regex, some more AoC, a deep dive into $null, and PowerShell...streaming?... You betcha! +Content pulled together by Brett Bunker, Robin Dadswell, and Mark Roloff +From all of us, we hope you enjoyed your holidays! Our sabbatical is over and things have been understandably quiet the last couple of weeks, so we're adding a little more this week to help make it up to you. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#powershell-everything-you-wanted-to-know-about-null)[*PowerShell: Everything you wanted to know about $null*](https://powershellexplained.com/2018-12-23-Powershell-null-everything-you-wanted-to-know/) + +by Kevin Marquette on December 23rd +Kevin's deep dives deserve their own special place in your bookmarks. Carve out some free time and read on to become a _$null_ expert. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#advent-of-powershell-2018-pt-i)[*Advent of PowerShell 2018, pt I*](https://blog.iisreset.me/advent-of-powershell-pt-i/) + +by Mathias R. Jessen on December 25th +Here's another take on the first two AoC challenges, with some really nice explanations for why you should avoid the += operator in favor of more performant alternatives. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#identifying-and-installing-sccm-client-software-updates-remotely-with-powershell-and-trigger-a-vmware-snapshot-before-remediation--part-1-of-3)[*Identifying and Installing SCCM Client Software Updates Remotely with PowerShell and trigger a VMware Snapshot before Remediation – Part 1 of 3*](https://byteben.com/bb/identifying-and-installing-sccm-client-software-updates-remotely-with-powershell-and-trigger-a-vmware-snapshot-before-remediation-part-1-of-3/) + +by Ben Whitmore on December 28th +In charge of managing patching in your environment? Ben has a great post that dives into using PowerShell to audit patch compliance on SCCM clients. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#teams-module-or-graph-api)[*Teams module or Graph API?*](https://alexholmeset.blog/2018/12/29/teams-module-or-graph-api/) + +by Alexander Holmeset on December 29th +As the Teams module moves along through development, you may wonder when it's appropriate to use the module vs using the Graph API. Alex does a quick comparison to help you see how and where they line up. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#powershell-basics-detecting-if-a-string-ends-with-a-certain-character)[*PowerShell Basics: Detecting if a String Ends with a Certain Character*](https://techcommunity.microsoft.com/t5/ITOps-Talk-Blog/PowerShell-Basics-Detecting-if-a-String-Ends-with-a-Certain/ba-p/307848) + +by Anthony Bartolo on January 2nd +Regex is an elusive beast that plenty of us are probably less acquianted with than we should be. We can correct that by just a little with these examples of using it to check the first or last characters in a string. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#adding-caching-to-your-powershell-scripts)[*Adding caching to your PowerShell scripts*](https://tjaddison.com/2018/12/24/Adding-caching-to-your-PowerShell-scripts) + +by Tim Addison on December 24th +Suppose you've got an expensive function thats needs to be called multiple times. Tim has a clever method for allowing a function to cache its results, thus allowing you to call it repeatedly without going through the initial workload again. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#reddit-rpowershell---most-popular-post)[*Reddit /r/PowerShell - Most Popular Post*](https://www.reddit.com/r/PowerShell/comments/abjl6m/eat_better_in_2018_a_script_to_generate_a_weekly/) + +The applications for PowerShell in a professional environment are legion. But what about at home? And for meal planning? /u/n3rden wrote a script for just that. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#reddit-rpowershell---announcement)[*Reddit /r/PowerShell - Announcement*](https://old.reddit.com/r/PowerShell/comments/a8xtfp/new_powershelllive_switch_channel_will_auto_host/) + +Worth mentioning... If the thought of watching livestreams of PowerShell coding is appealing, look no further. A handful of figures in the community are now on Twitch, which can be a good glimple into the thought-process behind their projects. Also be sure to follow the channel on Twitter [@PowerShellLive](https://twitter.com/PowerShellLive) + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#tweet-of-the-weeks)[*Tweet of the Week(s)*](https://twitter.com/devblackops/status/1078791129967976449) + +From @devblackops, here's a brief sample of using GitHub Actions to run PSScriptAnalyzer on a pull request. This could be useful as a quick litmus test for public or group projects. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190104.md#youtube-psdayuk-2018)[*Youtube: PSDay.UK 2018*](https://www.youtube.com/playlist?list=PLLKI4jlvx_96sw_FFic9ybQ-3g0RO2cbD) + +PSDay.UK happened back in October but videos from the event are up on YouTube now. This playlist has a ton of great content that's well worth your time! diff --git a/content/articles/2019/01/icymi-week-of-18-january-2018/index.md b/content/articles/2019/01/icymi-week-of-18-january-2018/index.md new file mode 100644 index 000000000..223f9a091 --- /dev/null +++ b/content/articles/2019/01/icymi-week-of-18-january-2018/index.md @@ -0,0 +1,61 @@ +--- +url: /articles/2019-01-18-icymi-week-of-18-january-2018/ +title: "ICYMI: Week of 18-January-2018" +authors: + - Robin Dadswell +date: "2019-01-18T15:00:35+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/01/icymi-week-of-18-january-2018/ +--- + +# ICYMI: PowerShell Week of 18-January-2019 + +Topics include SQL Server Errors, Out Verbs, Out-Grid in PS Core, Puzzles, Drawing with PowerShell and more. + + + +Content filtered through by Brett Bunker and Robin Dadswell. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190118.md#resolving-microsoft-sql-server-error-4064-with-powershell)[*Resolving Microsoft SQL Server Error 4064 with PowerShell*](https://mikefrobbins.com/2019/01/11/resolving-microsoft-sql-server-error-4064-with-powershell/) + +by Mike F Robbins on January 11th +Learn about how to troubleshoot 4064 errors and more using the dbatools module. + +### [*How To Use PowerShell's Out Verb*](https://redmondmag.com/articles/2019/01/11/how-to-use-powershell-out-verb.aspx) + +by Brien Posey on January 11th +Your screen doesn't have to be PowerShell's only output device. As Brien shows, the Out verb lets you redirect PowerShell's output in a variety of useful ways. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190118.md#a-powershell-core-out-gridview-soltion)[*A PowerShell Core Out-GridView Soltion*](https://jdhitsolutions.com/blog/powershell-core/6428/a-powershell-core-out-gridview-solution/) + +by Jerffery Hicks on January 15th +Were you reluctant to use PowerShell Core because there's no Out-Gridview? Allow me to explain how I solved that problem. In PS Core I can now pipe to ogv! + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190118.md#schr%C3%B6dingers--argumentlist)[*Schrödinger's -ArgumentList*](https://blog.iisreset.me/schrodingers-argumentlist/amp/?__twitter_impression=true) + +by Mathias R. Jessen on January 16th +An interesting puzzle about when is a $null value a $null value. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190118.md#playing-around-with-systemdrawing-in-powershell)[*Playing Around with System.Drawing in PowerShell*](https://vexx32.github.io/2019/01/17/Playing-Around-System-Drawing-PowerShell/) + +by Joel (Sallow) Francis on January 17th +Some neat features of System.Drawing by the author of PSWordCloud. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190118.md#twitter-powershell-cheat-sheet)[*Twitter: PowerShell Cheat Sheet*](https://twitter.com/LawinnSec/status/1085813519164063744) + +A useful PowerShell cheat sheet for those that are both new to PowerShell and those that just sometimes need a prompt. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190118.md#reddit-rpowershell---popular-weekly-post)[*Reddit /r/PowerShell - Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ah2adr/moving_files_in_sharepoint_site_with_ps/) + +u/MaDKidGo0DCitY poses an intersting question about how to move many files in a SharePoint site with PowerShell. + +### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190118.md#youtube-monthly-meetup---jan-16-2019---chris-gardner---powershell-worst-practices)[*Youtube: Monthly Meetup - Jan 16 2019 - Chris Gardner - PowerShell Worst Practices*](https://youtu.be/QV-tu2jqPUc) + +Building PowerShell Modules? Learn some development best practices and design tips diff --git a/content/articles/2019/01/powershell-devops-global-summit-cancellation-and-waitlist-procedure/index.md b/content/articles/2019/01/powershell-devops-global-summit-cancellation-and-waitlist-procedure/index.md new file mode 100644 index 000000000..af43d56e9 --- /dev/null +++ b/content/articles/2019/01/powershell-devops-global-summit-cancellation-and-waitlist-procedure/index.md @@ -0,0 +1,17 @@ +--- +url: /articles/2019-01-17-powershell-devops-global-summit-cancellation-and-waitlist-procedure/ +title: PowerShell + DevOps Global Summit Cancellation and Waitlist Procedure +authors: + - Don Jones +date: "2019-01-17T14:18:40+00:00" +categories: + - PowerShell Summit +aliases: + - /2019/01/powershell-devops-global-summit-cancellation-and-waitlist-procedure/ +--- + +As Summit nears a record sellout (there are 30 tickets remaining as I write this) I want to review our cancellation and waitlist policies and procedures. +After we formally sell out, Eventbrite will start accepting waitlist entries. Use a personal email address that you check regularly; corporate email systems tend to eat the waitlist notifications as spam. If we're able to offer a spot to the waitlist, it'll happen during the week, usually in the morning (US time), and you'll have 24 hours to respond by purchasing a ticket. +Anyone with a ticket can transfer it to someone else. Whoever did the registration needs to simply return to Eventbrite and edit the attendee information. So if you can't go, but someone else in your company can, that's how you do that. You can also email summit@ for assistance. We let this happen until roughly mid-April, at which point we need to order name badges and we stop all transfers. We don't do anything with hotel rooms; that's all on you. +If you need to cancel, e-mail summit@ with your name, email address, and Eventbrite order number. We will release a ticket to the waitlist. They will have 24 hours to complete the purchase of their ticket. If they don't, we'll release the next waitlist entry, and so on. If someone eventually buys a ticket, we'll refund yours. Again, we don't do anything with hotel rooms. +Sometime in mid-April, all of this stops, as we have to start ordering stuff based on current registrations. diff --git a/content/articles/2019/02/_index.md b/content/articles/2019/02/_index.md new file mode 100644 index 000000000..6523e8ce6 --- /dev/null +++ b/content/articles/2019/02/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from February 2019" +description: "PowerShell.org Articles published in February 2019." +--- diff --git a/content/articles/2019/02/icymi-powershell-week-of-1-february-2019/index.md b/content/articles/2019/02/icymi-powershell-week-of-1-february-2019/index.md new file mode 100644 index 000000000..4e3e100e3 --- /dev/null +++ b/content/articles/2019/02/icymi-powershell-week-of-1-february-2019/index.md @@ -0,0 +1,79 @@ +--- +url: /articles/2019-02-01-icymi-powershell-week-of-1-february-2019/ +title: "ICYMI: PowerShell Week of 1-February-2019" +authors: + - Brett +date: "2019-02-01T16:00:40+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/02/icymi-powershell-week-of-1-february-2019/ +--- + +Topics include Active Directory FSMO Roles, text parsing, error handling, and much more. + +Content pulled together by Robin Dadswell, Mark Roloff , and Brett Bunker. + +### [][1][_Finding Active Directory FSMO Role Holders with PowerShell_][2] {.wp-block-heading} + +by Adam Bertram January 25 + +Need to find which DCs hold your FSMO roles? Adam demonstrates a quick way to find their location using PowerShell. + +### [][3][_Parsing Text with PowerShell (3/3)_][4] {.wp-block-heading} + +by Steve Lee [MSFT] January 28 + +Part 3 in the series on parsing text with PowerShell. A nice wrap up to the series with some example uses. + +### [][5][_How To Create Multi-Dimensional Arrays in PowerShell_][6] {.wp-block-heading} + +by Brien Posey January 28 + +Do you need to go beyond basic arrays? Brien shows you how to create and use multi-demonsional arrays + +### [][7][_PowerShell. Don’t Just Throw_][8] {.wp-block-heading} + +by James O'Neill January 30 + +Why put a Return after a Throw? James gives some examples of why to use this technique in your error handling. + +### [][9][_Error Handling in PowerShell - Best Practices_][10] {.wp-block-heading} + +by Joel (Sallow) Francis January 31 + +Terminating errors? Non-Terminating errors? Joel explains them both and how to handle them in your code. + +### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} + +Listing Office365 Outages + +### [][13][_Tweet of the Week_][14] {.wp-block-heading} + +What are some cool things you've added to your prompt? + +### [][15][_Set-Clipboard - Using PowerShell to read and set the clipboard in Windows_][16] {.wp-block-heading} + +John Impallomeni showing some clipboard magic from Powershell. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190201.md#finding-active-directory-fsmo-role-holders-with-powershell + [2]: https://mcpmag.com/articles/2019/01/25/finding-ad-fsmo-role-holders.aspx?m=1 + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190201.md#parsing-text-with-powershell-33 + [4]: https://blogs.msdn.microsoft.com/powershell/2019/01/28/parsing-text-with-powershell-3-3/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190201.md#how-to-create-multi-dimensional-arrays-in-powershell + [6]: https://redmondmag.com/articles/2019/01/28/multi-dimensional-powershell-arrays.aspx?m=1 + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190201.md#powershell-dont-just-throw + [8]: https://jamesone111.wordpress.com/2019/01/30/powershell-dont-just-throw/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190201.md#error-handling-in-powershell---best-practices + [10]: https://vexx32.github.io/2019/01/31/PowerShell-Error-Handling/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190201.md#reddit-rpowershell---most-popular-weekly-post + [12]: https://www.reddit.com/r/PowerShell/comments/algkuo/listing_office365_outages/?st=jrl8papk&sh=3e8672fc + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190201.md#tweet-of-the-week + [14]: https://twitter.com/Steve_MSFT/status/1090393625781972992 + [15]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190201.md#set-clipboard---using-powershell-to-read-and-set-the-clipboard-in-windows + [16]: https://www.youtube.com/watch?v=TBRdvzcxS54 diff --git a/content/articles/2019/02/icymi-powershell-week-of-15-february-2019/index.md b/content/articles/2019/02/icymi-powershell-week-of-15-february-2019/index.md new file mode 100644 index 000000000..a0065ae84 --- /dev/null +++ b/content/articles/2019/02/icymi-powershell-week-of-15-february-2019/index.md @@ -0,0 +1,67 @@ +--- +url: /articles/2019-02-15-icymi-powershell-week-of-15-february-2019/ +title: "ICYMI: PowerShell Week of 15-February-2019" +authors: + - Mark Roloff +date: "2019-02-15T16:00:54+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/02/icymi-powershell-week-of-15-february-2019/ +--- + +Topics include Iron Scripter, monitoring your filesystem, VSCode goodness, and more. + + + +Content curated by Brett Bunker, Robin Dadswell, and Mark Roloff. + +###### [][1][_IRON SCRIPTER 2019 BEGINS!_][2] {.wp-block-heading} + +by Don Jones on February 13th + +In case you missed it, here it is. The Iron Scripter challenges have officially kicked off with the first warm-up challenge having been posted. Solve challenges, join a faction, and show off your scripting-chops! + +###### [][3][_Monitor file changes in Windows with PowerShell and pswatch_][4] {.wp-block-heading} + +by Dan Franciscus on February 11th + +Dan gives a quick look into how easy it is to catch filesystem changes in real time with the PSWatch module. + +###### [][5][_Group Email Notification For Dataset Refresh Failure_][6] {.wp-block-heading} + +by Brett Powell on February 13th + +Here's a nice example of how PS can fit into a chain of other tools to create a novel solution. Brett enables an entire team to be notified in the event of dataset refresh failures. + +###### [][7][_How to save command output to file using Command Prompt or PowerShell_][8] {.wp-block-heading} + +by Mauro Huculak on February 12th + +It's a simple but useful tip. Redirecting your output for later review or sharing can be handy for any number of scenarios. + +###### [][9][_Reddit /r/PowerShell - Popular Weekly Post_][10] {.wp-block-heading} + +PowerShell for education! /u/Crimson_89 created a collection of GUI spelling games for their kids. Be sure to check out the repo in the comments. + +###### [][11][_YouTube: PowerShell ♥️ VSCode_][12] {.wp-block-heading} + +Presenting to the Dutch PowerShell User Group, Tyler Leonhardt demonstrates many of the finer features of VSCode with the PS extension. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190215.md#iron-scripter-2019-begins + [2]: https://powershell.org/2019/02/iron-scripter-2019-begins/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190215.md#monitor-file-changes-in-windows-with-powershell-and-pswatch + [4]: https://4sysops.com/archives/monitor-file-changes-in-windows-with-powershell-and-pswatch/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190215.md#group-email-notification-for-dataset-refresh-failure + [6]: https://insightsquest.com/2019/02/13/group-email-notification-for-dataset-refresh-failure/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190215.md#how-to-save-command-output-to-file-using-command-prompt-or-powershell + [8]: https://www.windowscentral.com/how-save-command-output-file-using-command-prompt-or-powershell + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190215.md#reddit-rpowershell---popular-weekly-post + [10]: https://www.reddit.com/r/PowerShell/comments/aoz36i/made_a_suite_of_powershell_gui_spelling_games_for/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190215.md#youtube-powershell-%EF%B8%8F-vscode + [12]: https://www.youtube.com/watch?v=tQLDRYIhmy0 diff --git a/content/articles/2019/02/icymi-powershell-week-of-22-february-2019/index.md b/content/articles/2019/02/icymi-powershell-week-of-22-february-2019/index.md new file mode 100644 index 000000000..5ed7731cf --- /dev/null +++ b/content/articles/2019/02/icymi-powershell-week-of-22-february-2019/index.md @@ -0,0 +1,79 @@ +--- +url: /articles/2019-02-22-icymi-powershell-week-of-22-february-2019/ +title: "ICYMI: PowerShell Week of 22-February-2019" +authors: + - Brett +date: "2019-02-22T16:00:51+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/02/icymi-powershell-week-of-22-february-2019/ +--- + +Topics include PoshBot, JeaDsc, Azure Pipelines, Arrays and Hashtables, and Pester testing. + +Content curated by Brett Bunker, Robin Dadswell, and Mark Roloff. + +### [][1][_Writing a PoshBot Plugin to Display TOPdesk Tickets and Assets_][2] {.wp-block-heading} + +by Andrew Pla on February 16th + +Creating bots for Teams or Slack can make you more productive and save time by not having to swtich between applications. Come let Andrew show you how to create a bot for Teams using PoshBot. + +### [][3][_[Scriptblock] and ConvertTo-Json: a match made in recursive hell_][4] {.wp-block-heading} + +by Chris Gardner on February 17th + +Interested in deploying JEA in your environment? JeaDsc can help you deploy JEA endpoints across your enterprise, but there may be a gothcha with JSON. Let Chris show you how he resolved this issue. + +### [][5][_How I Failed My Way to Success with Azure Pipelines - Part 2: Release_][6] {.wp-block-heading} + +by Josh King on February 17th + +Josh walks you through setting up and configuring an Azure pipeline to use with PowerShell in this blog post. Testing in production is optional. + +### [][7][_PowerShell – Few tricks about HashTables and Arrays I wish I knew when I started_][8] {.wp-block-heading} + +by Przemyslaw Klys on February 19th + +Dive into some great examples on how to make you HashTables and Arrays look better and perform faster. Follow along with this post filled with great examples to improve your code. + +### [][9][_Pester Testing Self Contained Scripts_][10] {.wp-block-heading} + +by Shane O'Neill on February 20th + +Pestering your code is a good thing. Shane shows how to get started testing with Pester, with a tip for a great video to watch for even more Pester goodness. + +### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} + +Query Powershell Data Types? + +### [][13][_Tweet of the Week_][14] {.wp-block-heading} + +Powershell Core v6.1.3 was just released. + +### [][15][_Youtube: An Introduction to Just Enough Administration with James Petty_][16] {.wp-block-heading} + +Research Triangle PowerShell Users Group Meetup + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190222.md#writing-a-poshbot-plugin-to-display-topdesk-tickets-and-assets + [2]: https://andrewpla.github.io/Writing-a-PoshBot-Plugin/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190222.md#scriptblock-and-convertto-json-a-match-made-in-recursive-hell + [4]: https://chrislgardner.github.io/powershell/2019/02/17/convertto-json-scripblock.html + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190222.md#how-i-failed-my-way-to-success-with-azure-pipelines---part-2-release + [6]: https://king.geek.nz/2019/02/17/how-i-failed-my-way-to-success-with-azure-pipelines-part-2-release/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190222.md#powershell--few-tricks-about-hashtables-and-arrays-i-wish-i-knew-when-i-started + [8]: https://evotec.xyz/powershell-few-tricks-about-hashtable-and-array-i-wish-i-knew-when-i-started/amp/?__twitter_impression=true + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190222.md#pester-testing-self-contained-scripts + [10]: https://nocolumnname.blog/2019/02/20/pester-testing-self-contained-scripts/amp/?__twitter_impression=true + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190222.md#reddit-rpowershell---most-popular-weekly-post + [12]: https://www.reddit.com/r/PowerShell/comments/asabxe/ + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190222.md#tweet-of-the-week + [14]: https://twitter.com/alistek/status/1097961047825309702 + [15]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190222.md#youtube-an-introduction-to-just-enough-administration-with-james-petty + [16]: https://youtu.be/gyfYu-EbfEU diff --git a/content/articles/2019/02/icymi-powershell-week-of-8-february-2019/index.md b/content/articles/2019/02/icymi-powershell-week-of-8-february-2019/index.md new file mode 100644 index 000000000..d04a29b04 --- /dev/null +++ b/content/articles/2019/02/icymi-powershell-week-of-8-february-2019/index.md @@ -0,0 +1,75 @@ +--- +url: /articles/2019-02-08-icymi-powershell-week-of-8-february-2019/ +title: "ICYMI: PowerShell Week of 8-February-2019" +authors: + - Mark Roloff +date: "2019-02-08T16:00:03+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/02/icymi-powershell-week-of-8-february-2019/ +--- + +Topics include adrenaline for your AKS deployments, Azure Pipelines, Universal Dashboard, and more. + + + +Content scoured by Brett Bunker, Robin Dadswell, and Mark Roloff. + +###### [][1][_Deploying a production-ready Azure Kubernetes (AKS) cluster with PSAksDeployment_][2] {.wp-block-heading} + +by Mathieu Buisson on February 4th + +Deploying AKS the officially documented way? Give this a read. Mathieu gives a great look into using this souped-up module to do some heavy lifting for you. + +###### [][3][_PowerShell Function to Connect to All Office 365 Services With Support For MFA_][4] {.wp-block-heading} + +by Brad Wyatt on February 5th + +Say goodbye to your ugly "Log-into-too-many-PowerShell-cloud-services" script and say hello to Brad's one-stop function. I can already think of a few places to start using this. + +###### [][5][_The top 6 PowerShell commands you need to know to manage Office 365_][6] {.wp-block-heading} + +by Steve Goodman on February 5th + +If you're managing O365 and are new to PowerShell, this is a great little intro to the language from that perspective. + +###### [][7][_Retry Commands in PowerShell_][8] {.wp-block-heading} + +by Prateek Singh on February 1st + +Prateek has thrown together a very nice function that's tailor-made to handle all of your retry logic. Give it a whirl in your next script! + +###### [][9][_How I Failed My Way to Success with Azure Pipelines - Part 1: Build_][10] {.wp-block-heading} + +by Josh King on February 7th + +If you've got a public PowerShell project, consider hooking it up with in a release pipeline. Josh's first experiences with that will be a helpful guide in figuring that out. + +###### [][11][_Tweet of the Week_][12] {.wp-block-heading} + +I love RDCMan, so I was pretty stoked to find out that there's a module for generating its config files. Thanks, Brett! + +###### [][13][_AZPosh: PowerShell Universal Dashboard_][14] {.wp-block-heading} + +Curious about Universal Dashboard? Adam Driscoll gives a tour of this awesome tool to the Arizona PSUG. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190208.md#deploying-a-production-ready-azure-kubernetes-aks-cluster-with-psaksdeployment + [2]: https://mathieubuisson.github.io/deploying-aks-cluster-psaksdeployment/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190208.md#powershell-function-to-connect-to-all-office-365-services-with-support-for-mfa + [4]: https://www.thelazyadministrator.com/2019/02/05/powershell-function-to-connect-to-all-office-365-services-with-support-for-mfa/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190208.md#the-top-6-powershell-commands-you-need-to-know-to-manage-office-365 + [6]: https://practical365.com/microsoft-365/the-top-6-powershell-commands-you-need-to-know-to-manage-office-365/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190208.md#retry-commands-in-powershell + [8]: https://ridicurious.com/2019/02/01/retry-command-in-powershell/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190208.md#how-i-failed-my-way-to-success-with-azure-pipelines---part-1-build + [10]: https://king.geek.nz/2019/02/07/how-i-failed-my-way-to-success-with-azure-pipelines/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190208.md#tweet-of-the-week + [12]: https://twitter.com/BrettMiller_IT/status/1092062887957446657 + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190208.md#azposh-powershell-universal-dashboard + [14]: https://www.youtube.com/watch?v=fl1RfXmjvPA diff --git a/content/articles/2019/02/iron-scripter-2019-begins/index.md b/content/articles/2019/02/iron-scripter-2019-begins/index.md new file mode 100644 index 000000000..c95c2ba0f --- /dev/null +++ b/content/articles/2019/02/iron-scripter-2019-begins/index.md @@ -0,0 +1,21 @@ +--- +url: /articles/2019-02-13-iron-scripter-2019-begins/ +title: IRON SCRIPTER 2019 BEGINS! +authors: + - Don Jones +date: "2019-02-13T22:32:50+00:00" +categories: + - PowerShell for Admins +aliases: + - /2019/02/iron-scripter-2019-begins/ +--- + +Go to right away! + +Even if you're not attending Summit, these challenges are a great thing to jump into. They're a fun chance to flex your PowerShell sk1llz, and the official Iron Scripter competition permits remote assistance to each of our three factions - so you can get in on the action from afar! + +We suggest using tags #battlefaction, #daybreakfaction, and #flawlessfaction, and #ironscripter2019 to hook up with fellow coders on social media. Visit the main [Iron Scripter][1] website to learn more. + +Not even sure how to join a faction? It's easy: read up on 'em and decide which one fits you. Then get in touch with your like-minded scripters. Arrange to communicate via Slack, Teams, GitHub, carrier pigeon, or whatever - Iron Scripter is all about mystery and ad-hoc, not about formal structures or rules. + + [1]: http://ironscripter.us diff --git a/content/articles/2019/02/summit-expansion-seeking-feedback/index.md b/content/articles/2019/02/summit-expansion-seeking-feedback/index.md new file mode 100644 index 000000000..8eb262980 --- /dev/null +++ b/content/articles/2019/02/summit-expansion-seeking-feedback/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2019-02-07-summit-expansion-seeking-feedback/ +title: Summit Expansion – Seeking Feedback +authors: + - Will Anderson +date: "2019-02-07T16:00:21+00:00" +categories: + - PowerShell for Admins +aliases: + - /2019/02/summit-expansion-seeking-feedback/ +--- + +Tickets for the 2019 PowerShell + DevOps Summit sold out faster this year than its predecessors by almost exactly a full month. We are all so very excited to see everyone this year at the Meydenbauer in Bellevue, Washington! But as we continue to outpace each year, we also understand that this means that the demand for the content we deliver at Summit is also growing . + +One of the early goals of the Summit was to keep the event relatively small to provide a more intimate feel. In doing so, it allows attendees a chance to see familiar faces as they come back every year, and have a chance to interact with the speakers, staff, and members of the PowerShell team. As the event has grown, we've been very careful to not lose that feel. So the question then is, what do we do in order to meet the demands of the community, and maintain that small event feel? + +James Petty (our CFO), Jeffrey Bernt (our logistics manager), and I have been having this very discussion over the last couple of months. We've been doing a lot of homework on the resources it would require to organize and hold a second event. What would the goals of the event be? When do we have it? And so on, and so forth. + +That's where you come in! + +We're looking for some community feedback in helping us shape this second event. We've put together a short survey (link below) to help us make some decisions on key questions as we look toward moving forward on this project. Ultimately, our goal is to provide the community with the best educational content possible, and there's no better way to do that than to keep you involved in the decisions that affect that content. We'll keep the survey open for a couple of weeks, and share the responses with you after the close. + +From the team here at The DevOps Collective, we're all looking forward to growing with you in the coming future! + + diff --git a/content/articles/2019/02/tips-for-writing-cross-platform-powershell-code/index.md b/content/articles/2019/02/tips-for-writing-cross-platform-powershell-code/index.md new file mode 100644 index 000000000..1f5ff702e --- /dev/null +++ b/content/articles/2019/02/tips-for-writing-cross-platform-powershell-code/index.md @@ -0,0 +1,449 @@ +--- +url: /articles/2019-02-14-tips-for-writing-cross-platform-powershell-code/ +title: Tips for Writing Cross-Platform PowerShell Code +authors: + - Aaron Jensen +date: "2019-02-14T18:17:40+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks +aliases: + - /2019/02/tips-for-writing-cross-platform-powershell-code/ +--- + +I just spent a month updating [one of our PowerShell modules][1] to support Linux and MacOS. I learned a lot that I wanted to share with the community as cross-platform support becomes more and more important. + +## Use "Environment" Class Properties Instead of "env:" Drive {.wp-block-heading} + +Environment variables are different between the different operating systems. All of them have + + +`PATH +`, but not much else. Windows and MacOS both have variables for the temp directory, but they have different names. + +Instead of using environment variables like + + +`$env:USERNAME +`, use the + +[static properties on the Environment class instead][2]. They return the correct values across operating systems. + + +`Instead Of Use +---------- --- +$env:USERNAME [Environment]::UserName +$env:COMPUTERNAME [Environment]::MachineName + + +n [Environment]::NewLine +`r`n [Environment]::NewLine +$env:TEMP [IO.Path]::GetTempDirectory() + + +The + + +`Environment +`class also has neat properties like + + +`Is64BitProcess +`, + + +`Is64BitOperatingSystem +`, and + + +`UserInteractive +`, which aren't exposed in the + + +`env: +`drive. + +## Use the Same Case When Reading/Setting Environment Variables {.wp-block-heading} + +Environment variable names are case-sensitive on MacOS and Linux, regardless of how you access them. So, + + +`$env:Path +[Environment]::GetEnvironmentVariable('Path') +`would return nothing on MacOS or Linux, because the path environment variable is + + +`PATH +`on those platforms. Since environment variable names are case-insensitive on Windows, you should prefer the case from Linux/MacOS. + +## Always Use "Join-Path" to Create Path Strings {.wp-block-heading} + +### When the Path Originates in Your Code {.wp-block-heading} + +Never, ever put paths together with strings, e.g. + + +`"BasePath\ChildPath" +`. That path won't work on Linux or MacOS because their file systems see the + + +`\ +`character as an escape character, not a directory separator. Instead, use + + +`Join-Path +`. Not only does it use the correct directory separator, but it converts directory separators to the directory separator for the current platform. + +For example, + + +`Join-Path -Path '\usr\bin' -ChildPath 'dotnet' +`returns + + +`/usr/bin/dotnet +`on Linux/MacOS and + + +`\usr\bin\dotnet +`on Windows. + +### When the Path Comes from the User {.wp-block-heading} + +In one situation, our module took in a path from the user via a configuration file. Normally, we would use + + +`Resolve-Path +`to get the full path to the file, which normalizes the directory separator, but in this situation, the path may be to a file the user wants us to create and + + +`Resolve-Path +`requires that the path exists. Here's how we got our paths normalized: + + +`# If the user didn't give us an absolute path, +# resolve it from the current directory. +if( -not [IO.Path]::IsPathRooted($archivePath) ) +{ + $archivePath = Join-Path -Path (Get-Location).Path -ChildPath $archivePath +} +$archivePath = Join-Path -Path $archivePath -ChildPath '.' +$archivePath = [IO.Path]::GetFullPath($archivePath) +`This trick relies on: + + + - + +`Join-Path +`normalizing our directory separators (line 7) and + + +- + The +`GetFullPath +`method on the + + +`IO.Path +`object replacing + + +`.. +`and + + +`. +`characters to the parent/current item name, respectively (line 8). + + +This way we don't have to use regular expressions. We let .NET Core/PowerShell do that work for us. + +## Use "[IO.Path]::DirectorySeparatorChar" When You Can't Use "Join-Path" {.wp-block-heading} + +If for some reason you can't use + + +`Join-Path +`to create a path or our strategy above, instead of hard-coding the directory separator character, use the + + +`[IO.Path]::DirectorySeparatorChar +`property to get the correct separator for the current operating system. For example, + + +`'ParentPath{0}ChildPath' -f [IO.Path]::DirectorySeparatorChar +`## Don't Use the "-Qualifier" Switch on "Split-Path" {.wp-block-heading} + +In some of our tests, we want to create a path on the current drive: + + +`$drive = Split-Path -Qualifier -Path $PSScriptRoot +$path = Join-Path -Path $drive -ChildPath 'SomePath' +`This doesn't work on Linux/MacOS because "Qualifier" is synonomous with "Drive" and only Windows has the concept of a drive. Instead, use the + + +`PSDrive +`property on the + + +`FileInfo +`object for the current file (or whatever file whose root path you want) to get the root path: + + +`$root = (Get-Item -Path $PSScriptRoot).PSDrive.Root +$path = Join-Path -Path $root -ChildPath 'SomePath' +`The above code returns + + +`/SomePath +`on Linux/MacOS and + + +`C:\SomePath +`on Windows (assuming the current script is on the C: drive). + +## Use the Same Case for Hashtable Keys {.wp-block-heading} + +On Linux, hashtable keys are case-sensitive. On Windows and MacOS, they aren't. So, + + +`$ht = @{ 'Key' = 'Value' } +$ht['KEY'] +`returns + + +`Value +`on Windows and MacOS, and + + +`$null +`on Linux. + +## Don't Use Aliases {.wp-block-heading} + +Don't use PowerShell's aliases in your scripts. They are different between operating systems. Many of the aliases on Windows were originally added to help non-Windows users find familiar commands, e.g. + + +`ls +`mapping to + + +`Get-ChildItem +`. We had one test fixture that was using + + +`sc +`instead of + + +`Set-Content +`. Those tests failed when run under Linux. + +## Use "[IO.Path]::PathSeparator" for "PATH" Environment Variable {.wp-block-heading} + +Windows uses a different path separator than Linux/MacOS for paths in the + + +`PATH +`environment variable. Windows uses + + +`; +`. Linux/MacOS use + + +`: +`. Instead of hard-coding those characters, use the + + +`[IO.Path]::PathSeparator +`property to use the correct separator for the current operating system. For example, this code shows how to split/join the + + +`PATH +`environment variable in a cross-platform way: + + +`# Get each path in the PATH environment variable. +$env:PATH -split [IO.Path]::PathSeparator +# Add a path to the current session's PATH environment variable +$env:PATH = '{0}{1}{2}' -f $env:PATH,[IO.Path]::PathSeparator,$NewPath +`## Warning: Windows Executables Run Under the Windows Subsystem for Linux {.wp-block-heading} + +The Windows Subsytem for Linux is great. We used it a lot to get our module working under Linux instead of spinning up an entire VM. Even though it's running Linux, it's still on Windows, so Windows executables can still run. This is awesome but be mindful of the trade-off: if you have tests or code that run Windows executables, they'll appear to run fine under WSL, but fail when actually run on a Linux machine. + +## Omit the Extension When Searching for or Running Executables {.wp-block-heading} + +On Windows, executable files have the + + +`.exe +`extension. On Linux/MacOS, an executable has file system permissions that mark a file as executable. If you're searching for or running a command that could exist on all operating systems, omit the extension from the name. On Windows, PowerShell will implicitly add the + + +`.exe +`extension for you (it actually uses the extensions in the + + +`PATHEXT +`environment variable to look for commands). For example, this code will return the path to the .NET Core and Node.js executables, if they exist in your + + +`PATH +`: + + +`# Finding commands +Get-Command -Name 'dotnet' -ErrorAction Ignore +Get-Command -Name 'node' -ErrorAction Ignore +# Running commands +dotnet --version +node --version +`If your commands exists outside a directory in your + + +`PATH +`environment variable, consider adding that directory to your + + +`PATH +`either permanently or temporarily so you don't have to build the logic of cross-platform executable naming yourself. + +## Supporting Windows PowerShell and PowerShell Core {.wp-block-heading} + +Some changes we encountered between operating systems weren't because of the operating systems but because we use PowerShell 5.1 on Windows. PowerShell 6 behaves differently from PowerShell 5.1 in some ways. + +### Use the "FullName" Property on "FileInfo" and "DirectoryInfo" Objects {.wp-block-heading} + +In some situations converting + + +`FileInfo +`and + + +`DirectoryInfo +`objects to strings (i.e. the objects returned by using + + +`Get-ChildItem +`against the file system) behave differently. On Windows PowerShell, you'll get just the file's name. On PowerShell Core, you'll get the item's full name. + +For example, this snippet returns each item's name on Windows PowerShell and each item's full name on PowerShell Core: + + +`Get-ChildItem | ForEach-Object { [string]$_ } +`Instead, use the + + +`FullName +`property to get the full path or + + +`Name +`to get just the name: + + +`# Returns each item's full path +Get-ChildItem | ForEach-Object { $_.FullName } +# Returns each item's name +Get-ChildItem | ForEach-Object { $_.Name } +`### Use an Empty Error Type and Capability Checking When Handling "Invoke-WebRequest" Failures {.wp-block-heading} + +The exception thrown by + + +`Invoke-WebRequest +`is different between Windows PowerShell and PowerShell Core. On Windows PowerShell, it is a + +[System.Net.WebException][3]. On PowerShell Core, it is a [Microsoft.PowerShell.Commands.HttpResponseException][4]. + +So, if you were handling failed web requests like this: + + +`$uri = 'https://httpstat.us/500' +try +{ + Invoke-WebRequest -Uri $uri +} +catch [Net.WebException] +{ + Write-Error -Message ('Failed requesting "{0}": {1}' -f $uri,$_.ErrorDetails) +} +`You should instead do: + + +`$uri = 'https://httpstat.us/500' +try +{ + Invoke-WebRequest -Uri $uri +} +catch +{ + $errorDetails = $null + $response = $_.Exception | Select-Object -ExpandProperty 'Response' -ErrorAction Ignore + if( $response ) + { + $errorDetails = $_.ErrorDetails + } + # Not an exception making the request or the failed request didn't have a response body. + if( $errorDetails -eq $null ) + { + Write-Error -ErrorRecord $_ + } + else + { + Write-Error -Message ('Request to "{0}" failed: {1}' -f $uri,$errorDetails) + } +} +`Notice that instead of checking what version of PowerShell we're on to know if the + + +`ErrorDetails +`contains the error's response body, we instead check for the existence of the + + +`Response +`property on the thrown exception. This property exists on the exception objects thrown by Windows PowerShell and PowerShell Core. This is called a capability check and is the preferred pattern for supporting different ways of doing things across versions and operating systems. When you check for functionality instead of versions, your code will work in more places. + +### Use "IsWindows", "IsLinux", and "IsMacOS" Variables _Sparingly_ {.wp-block-heading} + +PowerShell 6 introduces three global variables that you can use to check which platform you're on. You should use these sparingly, and instead use capability checks (see above). If you absolutely need to know what operating system you're on, the + + +`IsWindows +`, + + +`IsLinux +`, and + + +`IsMacOS +`variables work great. + +We turn on strict mode in all our scripts (i.e. + + +`Set-StrictMode -Version 'Latest' +`), so we can't just use these variables without getting errors on Windows PowerShell. Since they were introduced in PowerShell 6, and that version of PowerShell is the first to run on Linux and MacOS, if any of the variables don't exist, you know you're on Windows. If you have code/modules that need to run on Windows PowerShell + +_and_ PowerShell Core, you can use this snippet to conditionally create these variables: + + +`if( -not (Test-Variable 'variable:IsWindows') ) +{ + # We know we're on Windows PowerShell 5.1 or earlier + $IsWindows = $true + $IsLinux = $IsMacOS = $false +} +`Be a good script/module neighbor by _not_ making these global and instead restricting them to your script/module scope. + +Thanks to [Joseph Larionov][5], who helped edit this article. + + [1]: https://www.powershellgallery.com/packages/Whiskey/ + [2]: https://docs.microsoft.com/en-us/dotnet/api/system.environment + [3]: https://docs.microsoft.com/en-us/dotnet/api/system.net.webexception + [4]: https://docs.microsoft.com/en-us/dotnet/api/microsoft.powershell.commands.httpresponseexception?view=pscore-6.0.0 + [5]: https://github.com/DecoyJoe diff --git a/content/articles/2019/03/2019-community-lightning-demos/index.md b/content/articles/2019/03/2019-community-lightning-demos/index.md new file mode 100644 index 000000000..adde50ac3 --- /dev/null +++ b/content/articles/2019/03/2019-community-lightning-demos/index.md @@ -0,0 +1,133 @@ +--- +url: /articles/2019-03-26-2019-community-lightning-demos/ +title: 2019 Community Lightning Demos +authors: + - pscookiemonster +date: "2019-03-26T12:59:17+00:00" +categories: + - Events + - PowerShell for Admins + - PowerShell Summit +legacy_featured_image: /wp-content/uploads/2018/02/docs.jpg +aliases: + - /2019/03/2019-community-lightning-demos/ +--- + +### Rambling {.wp-block-heading} + +I'm a huge fan of lightning demos. From the community and PowerShell Team lightning demos we get at [the summit][1], to [PSPowerHour][2], to various local groups and conferences using the format. + +At the 2019 PowerShell + DevOps Global Summit, we'll have about 90 minutes for these demos - now we just need proposals from you! + +So! Why might you be interested in lightning demos? + +### Why Lightning Demos {.wp-block-heading} + +Lightning demos are great for the audience and speakers alike. + +For the audience: + + + - + Fast paced (Less than 10 minutes each) + + + - + Many speakers + + + - + Topic or speaker not what you're looking for? They'll change in a few minutes + + + - + Demos offer enough material to give you ideas and point out where to learn more + + + - + Content is more likely to have a high signal-to-noise ratio given the time constraints + + + +For the speakers: + + + - + No need to come up with a full length session and the content behind it + + + - + It can be comforting knowing you have a bunch of peers joining you + + + - + You can get enough info to the audience for them to get excited and want to learn more + + + - + You get a platform to share something awesome with the community + + + +Hopefully you're up for doing a demo! Let's go over how to get involved. + +### Proposing a Lightning Demo {.wp-block-heading} + +There are a few optional fields, but all we really need is your e-mail, your name, a title, and a quick sentence or paragraph abstract on what you'll talk about. + +All you need to do is sign up here: [bit.ly/doademo19][3] + +We'll be in touch, but to give you a quick idea of how things will go… + +### I've Proposed! What's Next? {.wp-block-heading} + + + - + The 10 minute limit is a hard limit. We'll have to cut short if you hit the mark. Hooking up AV equipment counts as your time + + + - + Don't aim for 10 minutes. Show what you want to show. Does it only take 5 minutes? Even better! + + + - + We have 90 minutes. We'll schedule something like 15+ sessions, but if everyone takes their 10 minutes, we may only see 9 + + + - + We'll give you the order of operations. At you in slot 1-9? You're up! 10-12? There's a good chance we'll get to you. 13-18? You *might* make it if things are speedy, if someone drops out, or if we find extra time + + + - + Worst case? We don't get to see your demo at the summit, but Michael Lombardi and I pester you to submit your demo to [PSPowerHour](https://github.com/PSPowerHour/PSPowerHour), an online lightning demo thing we do + + + - + We'll do our best to get everyone on stage, but we'll likely follow last year's preferences: + + + New speakers over breakout session speakers and previous demo speakersWe'll do our best to get everyone on stage, but we'll likely follow last year's preferences: + + + - + New ideas or interesting variations over well trodden topics + + + - + Community sessions over vendors, on similar topics (why? The happy path isn't always the most helpful!) + + + + + + + - + Yes. I mentioned vendors. The PowerShell Team and Community lightning demos will be done together this year. (Attending) Vendors are welcome to submit demos, but we'll be leaning towards the community in many cases + + + +That's it! We'll take [proposals][3] up through April 15th, and will get back to you on April 17th. This gives you ~two weeks to propose, and ~two weeks to put together an awesome demo - I hope to see you all up there on the stage! + + [1]: https://powershell.org/summit/ + [2]: https://github.com/PSPowerHour/PSPowerHour + [3]: http://bit.ly/doademo19 diff --git a/content/articles/2019/03/_index.md b/content/articles/2019/03/_index.md new file mode 100644 index 000000000..9756eda94 --- /dev/null +++ b/content/articles/2019/03/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from March 2019" +description: "PowerShell.org Articles published in March 2019." +--- diff --git a/content/articles/2019/03/icymi-powershell-week-of-1-march-2019/index.md b/content/articles/2019/03/icymi-powershell-week-of-1-march-2019/index.md new file mode 100644 index 000000000..4cc1880a7 --- /dev/null +++ b/content/articles/2019/03/icymi-powershell-week-of-1-march-2019/index.md @@ -0,0 +1,71 @@ +--- +url: /articles/2019-03-01-icymi-powershell-week-of-1-march-2019/ +title: "ICYMI: PowerShell Week of 1-March-2019" +authors: + - Mark Roloff +date: "2019-03-01T16:00:11+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/03/icymi-powershell-week-of-1-march-2019/ +--- + +Topics include more Iron Scripter, a trove of AD and O365 scripts, tons of REST API goodness, and some fundamental lessons from Brisbane. + + + +Special thanks to Brett Bunker, Robin Dadswell, and Mark Roloff. + +###### [][1][_Generating PowerShell Cmdlets from OpenAPI/Swagger with AutoRest_][2] {.wp-block-heading} + +by Garrett Serack on February 22nd + +AutoRest has added support for PowerShell! And I honestly had no idea what it was before this but it looks like a pretty cool way to generate code for hitting REST APIs from yaml files. Definitely worth looking at more closely! + +###### [][3][_Iron Scripter 2019 Prelude Challenge #2_][4] {.wp-block-heading} + +by Jeff Hicks on February 26th + +If you've been doing the Iron Scripter challenges, or would like to, don't forget to share your solutions! Everyone has a different take, so there's probably something new that you can teach somebody just by putting it out there. + +###### [][5][_Understanding the Invoke-RestMethod PowerShell cmdlet_][6] {.wp-block-heading} + +by Adam Bertram on February 23rd + +REST APIs are fun, and + + +`Invoke-RestMethod +`is your gateway to using them. Let Adam take you on a tour of this flexible cmdlet! + +###### [][7][_Get Latest Office 365 Service Status with Flow or PowerShell_][8] {.wp-block-heading} + +by Lee Ford on February 25th + +Lee's guide will walk you through setting up an Azure AD app that can then be used by PowerShell to query your tenant's status. Bonus points for integrating it with your PoshBot deployment! + +###### [][9][_Reddit /r/PowerShell - Popular Weekly Post_][10] {.wp-block-heading} + +Avast! Yonder Reddit post be havin' a bounty o' O365 and AD scripts fer the plunder! Arrrr! + +###### [][11][_Youtube: PowerShell 101 with Michael and Christian_][12] {.wp-block-heading} + +From the Brisbane User Group, Michael gives a lesson on PS fundamentals covering flow control and decision making statements + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190301.md#generating-powershell-cmdlets-from-openapiswagger-with-autorest + [2]: https://devblogs.microsoft.com/powershell/cmdlets-via-autorest/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190301.md#iron-scripter-2019-prelude-challenge-2 + [4]: https://ironscripter.us/iron-scripter-2019-prelude-challenge-2/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190301.md#understanding-the-invoke-restmethod-powershell-cmdlet + [6]: https://4sysops.com/archives/understanding-the-invoke-restmethod-powershell-cmdlet/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190301.md#get-latest-office-365-service-status-with-flow-or-powershell + [8]: https://www.lee-ford.co.uk/get-latest-office-365-service-status-with-flow-or-powershell/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190301.md#reddit-rpowershell---popular-weekly-post + [10]: https://old.reddit.com/r/PowerShell/comments/atop5h/sharing_office_365active_directory_scripts + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190301.md#youtube-powershell-101-with-michael-and-christian + [12]: https://www.youtube.com/watch?v=MeHS-w74BBg diff --git a/content/articles/2019/03/icymi-powershell-week-of-15-march-2019/index.md b/content/articles/2019/03/icymi-powershell-week-of-15-march-2019/index.md new file mode 100644 index 000000000..64adebbed --- /dev/null +++ b/content/articles/2019/03/icymi-powershell-week-of-15-march-2019/index.md @@ -0,0 +1,82 @@ +--- +url: /articles/2019-03-15-icymi-powershell-week-of-15-march-2019/ +title: "ICYMI: PowerShell Week of 15-March-2019" +authors: + - Mark Roloff +date: "2019-03-15T15:00:24+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/03/icymi-powershell-week-of-15-march-2019/ +--- + +Topics include goodies for your prompt, more xplatform support for the SqlServer module, and more. + + + +Content pulled together by Robin Dadswell and Mark Roloff + +###### [_Invoke-Sqlcmd is Now Available Supporting Cross-Platform_][1] {.wp-block-heading} + +by Steve Lee on March 11th + +DBAs rejoice! + + +`Invoke-SqlCmd +`is now xplat with the latest PS Core build. Make sure you check out Steve's post for the details. + +###### [][2][_PowerShell Core – Updating Your SQL Server Linux Docker Containers Images_][3] {.wp-block-heading} + +by Max Trinidad on March 10th + +Speaking of xplat support for that cmdlet... Max demonstrates how to update your Linux Docker image to include the necessary tools for using + + +`Invoke-SqlCmd +`. + +###### [][4][_Programmatically Triggering a Group Licenses Refresh for AzureAD_][5] {.wp-block-heading} + +by Jos Lieben on March 11th + +As nice and the Az module and Graph API are, some things still aren't accessible through those. Jos shows us how to automate with Azure's "hidden" API. + +###### [][6][_Bitlocker Active Directory Recovery Password Backup Compliance_][7] {.wp-block-heading} + +by Mick Pletcher on March 8th + +For SCCM admins, here's a handy way to use PS with a Compliance Policy to make sure your BitLocker keys are properly backed up. + +###### [][8][_The Happy PowerShell Prompt_][9] {.wp-block-heading} + +by Aaron Powell on March 12th + +Who couldn't use a little more positivity in their shell? Using ConEmu, Aaron shows how to inject a little happiness into your prompt. + +###### [][10][_Reddit /r/PowerShell - Popular Weekly Post_][11] {.wp-block-heading} + +May be old news to some but /u/NotNotWrongUsually came across how colorful we can get in the shell now. Time to add a little extra pizazz to my prompt! + +###### [][12][_Youtube: ANZPSUG March 2019_][13] {.wp-block-heading} + +Friedrich Weinmann joins the Australia and New Zealand PSUG to discuss PSFramework. + + [1]: https://devblogs.microsoft.com/powershell/invoke-sqlcmd-is-now-available-supporting-cross-platform/ + [2]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190315.md#powershell-core--updating-your-sql-server-linux-docker-containers-images + [3]: http://www.maxtblog.com/2019/03/powershell-core-updating-your-sql-server-linux-containers-images/ + [4]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190315.md#programmatically-triggering-a-group-licenses-refresh-for-azuread + [5]: https://www.lieben.nu/liebensraum/2019/03/programmatically-triggering-a-group-licenses-refresh-for-azuread/ + [6]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190315.md#bitlocker-active-directory-recovery-password-backup-compliance + [7]: https://mickitblog.blogspot.com/2019/03/bitlocker-active-directory-recover.html + [8]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190315.md#the-happy-powershell-prompt + [9]: https://dev.to/azure/the-happy-powershell-prompt-2l4f + [10]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190315.md#reddit-rpowershell---popular-weekly-post + [11]: https://old.reddit.com/r/PowerShell/comments/b06gtw/til_that_powershell_can_do_colors/?st=jt9jgsxi&sh=20e55b07 + [12]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190315.md#youtube-anzpsug-march-2019 + [13]: https://www.youtube.com/watch?v=1wLJ0yUDoMM diff --git a/content/articles/2019/03/icymi-powershell-week-of-22-march-2019/index.md b/content/articles/2019/03/icymi-powershell-week-of-22-march-2019/index.md new file mode 100644 index 000000000..84bd16696 --- /dev/null +++ b/content/articles/2019/03/icymi-powershell-week-of-22-march-2019/index.md @@ -0,0 +1,69 @@ +--- +url: /articles/2019-03-22-icymi-powershell-week-of-22-march-2019/ +title: "ICYMI: PowerShell Week of 22-March-2019" +authors: + - Mark Roloff +date: "2019-03-22T15:00:14+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/03/icymi-powershell-week-of-22-march-2019/ +--- + +Topics include PowerShell IoT, Nmap in PS, and some livestreamed contributions to PSHTML. + + + +Special thanks to Robin Dadswell and Mark Roloff. + +###### [][1][_List and change BIOS settings with PowerShell_][2] {.wp-block-heading} + +by Damien Van Robaeys on March 19th + +Methods covered are specific to 3 of the major hardware manufacturers, which makes this especially handy. + +###### [][3][_PoshNmap_][4] {.wp-block-heading} + +by Justin Grote + +Not a blog but this was announced a few days ago and seemed worth sharing. PoshNmap is a wrapper for the ubiquitous Nmap tool. + +###### [][5][_Getting Started With PowerShell (Core) on Raspian (Raspberry Pi) – Light Up a LED_][6] {.wp-block-heading} + +by Daniel Silva on March 20th + +I mean... The title really says it all. If you're curious about IoT, this is a great little practical exercise to get you introduced to it. + +###### [][7][_PowerShell Crash Course_][8] {.wp-block-heading} + +by jeikabu on March 15th + +A different kind of crash course. It's really more of a quick primer to PowerShell Core for *nix admins/developers. + +###### [][9][_SQL Database Backups using PowerShell Module – DBATools_][10] {.wp-block-heading} + +by Rajendra Gupta on March 21st + +There's apparently plenty of different configurations for backing up databases with the DBATools module, and Rajendra demonstrates a good number of them here. + +###### [][11][_Youtube: Closing an issue in PSHTML to improve charting in HTML with PowerShell_][12] {.wp-block-heading} + +Anthony livestreams his journey into writing an improvement to a public module. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190322.md#list-and-change-bios-settings-with-powershell + [2]: http://www.systanddeploy.com/2019/03/list-and-change-bios-settings-with.html + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190322.md#poshnmap + [4]: https://github.com/justingrote/poshnmap + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190322.md#getting-started-with-powershell-core-on-raspian-raspberry-pi--light-up-a-led + [6]: https://danielsknowledgebase.wordpress.com/2019/03/20/getting-started-with-powershell-core-on-raspbian-raspberry-pi-light-up-a-led/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190322.md#powershell-crash-course + [8]: https://dev.to/jeikabu/powershell-crash-course-3go5 + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190322.md#sql-database-backups-using-powershell-module--dbatools + [10]: https://www.sqlshack.com/sql-database-backups-using-powershell-module-dbatools/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190322.md#youtube-closing-an-issue-in-pshtml-to-improve-charting-in-html-with-powershell + [12]: https://www.youtube.com/watch?v=X5Yv5CdQYK8 diff --git a/content/articles/2019/03/icymi-powershell-week-of-29-march-2019/index.md b/content/articles/2019/03/icymi-powershell-week-of-29-march-2019/index.md new file mode 100644 index 000000000..c0d28f9a7 --- /dev/null +++ b/content/articles/2019/03/icymi-powershell-week-of-29-march-2019/index.md @@ -0,0 +1,77 @@ +--- +url: /articles/2019-03-29-icymi-powershell-week-of-29-march-2019/ +title: "ICYMI: PowerShell Week of 29-March-2019" +authors: + - Mark Roloff +date: "2019-03-29T15:00:17+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/03/icymi-powershell-week-of-29-march-2019/ +--- + +Topics include an update to PSScriptAnalyzer, Pester, and customizing SharePoint menus. + + + +Content curated by Robin Dadswell and Mark Roloff. + +###### [][1][_PowerShell ScriptAnalyzer Version 1.18.0 Released_][2] {.wp-block-heading} + +by Jim Truher on March 22nd + +A new ScriptAnalyzer is out. Faster, better DSC support, and better handling of multi-line pipelines. Pick it up from the PSGallery! + +###### [][3][_Pee-Object_][4] {.wp-block-heading} + +by Danny Meister on March 26th + +Ever have a need to print some progress or the current object to the console in the middle of your pipeline? Well, now there's a function for that. + +###### [][5][_Programmatically change the New Menu in SharePoint Online using PowerShell_][6] {.wp-block-heading} + +by Paul Matthews on March 24th + +Customizing document library menus in SharePoint gets a fun facelift with Paul's scripted method. + +###### [][7][_F7 is the greatest PowerShell hotkey that no one uses any more. We must fix this_][8] {.wp-block-heading} + +by Scott Hanselman on March 26th + +Scott discusses the absence of this little gem of a feature and a small workaround for using it. There're some nice tips in the comments too. + +###### [][9][_Enforcing Code Style using Pester_][10] {.wp-block-heading} + +by Chris Gardner on March 26th + +If validating code style is something you need, Chris has an interesting approach to it via unit tests. + +###### [][11][_General Availability of PowerShell Core 6.2_][12] {.wp-block-heading} + +by Steve Lee on March 28th + +Has it really been 6 months already? A large number of changes have been packed into this release, so check out the changelog for a little lite reading. + +###### [][13][_Youtube: Pester with Kevin Marquette - March 28, 2019_][14] {.wp-block-heading} + +From the Austin PSUG, Kevin leads a demonstration on using Pester to unit test your scripts. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190329.md#powershell-scriptanalyzer-version-1180-released + [2]: https://devblogs.microsoft.com/powershell/powershell-scriptanalyzer-version-1-18-0-released/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190329.md#pee-object + [4]: https://www.dannymeister.com/2019/03/26/pee-object.html + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190329.md#programmatically-change-the-new-menu-in-sharepoint-online-using-powershell + [6]: https://cann0nf0dder.wordpress.com/2019/03/24/programmatically-change-the-new-menu-in-sharepoint-online-using-powershell/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190329.md#f7-is-the-greatest-powershell-hotkey-that-no-one-uses-any-more-we-must-fix-this + [8]: https://www.hanselman.com/blog/F7IsTheGreatestPowerShellHotkeyThatNoOneUsesAnyMoreWeMustFixThis.aspx + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190329.md#enforcing-code-style-using-pester + [10]: https://chrislgardner.github.io/powershell/2019/03/26/enforcing-style-with-pester.html + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190329.md#general-availability-of-powershell-core-62 + [12]: https://devblogs.microsoft.com/powershell/general-availability-of-powershell-core-6-2/ + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190329.md#youtube-pester-with-kevin-marquette---march-28-2019 + [14]: https://www.youtube.com/watch?v=x3ufUibf6eI diff --git a/content/articles/2019/03/icymi-powershell-week-of-8-march-2019/index.md b/content/articles/2019/03/icymi-powershell-week-of-8-march-2019/index.md new file mode 100644 index 000000000..58bd5b61e --- /dev/null +++ b/content/articles/2019/03/icymi-powershell-week-of-8-march-2019/index.md @@ -0,0 +1,76 @@ +--- +url: /articles/2019-03-08-icymi-powershell-week-of-8-march-2019/ +title: "ICYMI: PowerShell Week of 8-March-2019" +authors: + - Mark Roloff +date: "2019-03-08T16:00:36+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/03/icymi-powershell-week-of-8-march-2019/ +--- + +Topics include the Graph API, status pages, test-driven development, getting your Google 2FA in the shell, and more. + + + +Content curated by Robin Dadswell and Mark Roloff. + +###### [][1][_PowerShell and the Microsoft Graph API : Part 2 – Starting to explore_][2] {.wp-block-heading} + +by James O'Neill on March 3rd + +The Graph API is a vast and powerful tool in MS's cloud. With a little help from James, we can start to poke around at what it brings to the table. Make sure oyu check out pt 1 to see how the connection is built. + +###### [][3][_Connect to Microsoft Graph for Intune with Powershell ISE Add-ons_][4] {.wp-block-heading} + +by Martin Bengtsson on March 4th + +Keeping with the Graph theme, Martin has a great tool for you Intune admins that are still using ISE. + +###### [][5][_Meet Statusimo – PowerShell generated Status Page_][6] {.wp-block-heading} + +by Przemyslaw Klys on March 6th + +Building on his PSWriteHTML module, Przemysław now unveils Statusimo, an impressive new module that can help you create professional looking status pages for your organization. + +###### [][7][_Google Authenticator in PowerShell_][8] {.wp-block-heading} + +by HumanEquivalentUnit on March 7th + +This is pretty cool! Don't want to take out your phone to handle your 2FA login with Google? Get it in the shell! + +###### [][9][_PowerShell Line Counting_][10] {.wp-block-heading} + +by Joel Bennett on March 6th + +Asking how many lines are in a script is easy enough to answer but what about from PowerShell's perspective? Joel uses the AST to find out how the PowerShell parser handles this. + +###### [][11][_Tweet of the Week_][12] {.wp-block-heading} + +Not all heroes wear capes but umm... Somebody needs to buy Taylor Leonhardt a cape. With this little adjustment to VSCode, double-clicking a variable will now include the $ sign. + +###### [][13][_Youtube: How to do Test Driven Development/Design in PowerShell_][14] {.wp-block-heading} + +Doug Finke gives a quick demo on how he approaches test-driven development. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190308.md#powershell-and-the-microsoft-graph-api--part-2--starting-to-explore + [2]: https://jamesone111.wordpress.com/2019/03/03/powershell-and-the-microsoft-graph-api-part-2-starting-to-explore/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190308.md#connect-to-microsoft-graph-for-intune-with-powershell-ise-add-ons + [4]: https://www.imab.dk/connect-to-microsoft-graph-for-intune-with-powershell-ise-add-ons-with-a-single-click/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190308.md#meet-statusimo--powershell-generated-status-page + [6]: https://evotec.xyz/meet-statusimo-powershell-generated-status-page/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190308.md#google-authenticator-in-powershell + [8]: https://humanequivalentunit.github.io/Google-Authenticator-In-PowerShell/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190308.md#powershell-line-counting + [10]: https://gist.github.com/Jaykul/e1056d5182d0c5566a22f72387abf741 + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190308.md#tweet-of-the-week + [12]: https://twitter.com/TylerLeonhardt/status/1102749805233737729 + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190308.md#youtube-how-to-do-test-driven-developmentdesign-in-powershell + [14]: https://www.youtube.com/watch?v=k8rJ8HrN3Ro diff --git a/content/articles/2019/03/running-universal-dashboard-with-ubuntu-and-nginx-with-https/index.md b/content/articles/2019/03/running-universal-dashboard-with-ubuntu-and-nginx-with-https/index.md new file mode 100644 index 000000000..32c1b0af8 --- /dev/null +++ b/content/articles/2019/03/running-universal-dashboard-with-ubuntu-and-nginx-with-https/index.md @@ -0,0 +1,269 @@ +--- +url: /articles/2019-03-22-running-universal-dashboard-with-ubuntu-and-nginx-with-https/ +title: Running Universal Dashboard with Ubuntu and Nginx (With HTTPS!) +authors: + - Nathaniel Webb (ArtisanByteCrafter) +date: "2019-03-22T14:37:28+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tools +aliases: + - /2019/03/running-universal-dashboard-with-ubuntu-and-nginx-with-https/ +--- + +![Imgur](https://i.imgur.com/Rqj22dX.png)*A basic UniversalDashboard running on nginx* + +## Index {.wp-block-heading} + + + - + [Prerequisites](#prerequisites) + + + - + [Configuration](#configuration) + + + - + [HTTPS (Optional)](#configuring-https) + + + +## Prerequisites {.wp-block-heading} + +For this writeup, I'm using Ubuntu 18.04. Software packages are geared toward using that version. + +First, we'll need to install our dependencies + +There are several ways to install Powershell core on Ubuntu. I recommend [Microsoft's documentation for ubuntu 18.04 here][1] + +Once installed, enter Powershell and install the [UniversalDashboard][2] module. This will use the community edition. + + +`pwsh +PS> Install-Module UniversalDashboard.Community -Scope CurrentUser +`Confirm it is installed: + + +`PS> Get-Module -ListAvailable +`Next, we need to install our webserver: + + +`sudo apt install nginx +`## Configuration {.wp-block-heading} + +First we need to have a dashboard to run, along with a place to run it. + +Create a project directory. This example uses + + +`my-site +`at the root of my user profile. + + +`cd ~ +mkdir my-site +cd ./my-site +`Place the following into a file called + + +`dashboard.ps1 +`and place it at the root of your project: + + +`$MyDashboard = New-UDDashboard -Title "Nginx Dashboard" -Content { + New-UDCard -Title "Running UD with Nginx!" +} +Start-UDDashboard -Port 8080 -Dashboard $MyDashboard -Name 'Nginx Dashboard' -Wait +`> + +> NOTE: You may have a dashboard which includes many folders, depending on the structure of your project. In that case, copy the entire folder structure into your project folder +> +> +> `> (my-site) +> `> . Make sure +> +> +> `> dashboard.ps1 +> `> is at the root of this folder. +> + + +Now, we need to configure our webserver to act as a reverse-proxy. This is done to make our site available via SSL in a very simple manner. + +Let's create a very basic reverse-proxy configuration within nginx. Navigate to + + +`/etc/nginx/sites-available +`and remove the + + +`default +`file. This file is symlinked to + + +`/etc/nginx/sites-enabled/default +`, so remove it as well. + +Next, head back to + + +`/etc/nginx/sites-available +`and create a file called + + +`dashboard.conf`sudo nano dashboard.conf +`Place the following in it: + + +`server { + listen 80; + server_name mydashboard; + location / { + proxy_pass http://localhost:8080; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection keep-alive; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} +`Now we need to symlink our proxy's config file to the sites-enabled folder: + + +`sudo ln -s /etc/nginx/sites-available/dashboard.conf /etc/nginx/sites-enabled/dashboard.conf +`Next, we need it to run as a service so we can control our dashboard with + + +`systemctl +`. I'm using Ubuntu, so I'm going to use systemd to manage my service. + +Navigate to + + +`/etc/systemd/system +`and create a service file for our service: + + +`sudo nano uddashboard.service +`Place the following in the service file. Note the path in + + +`ExecStart +`. This will need to match the path of your project's + + +`dashboard.ps1 +`file. Also ensure the user specified to run the service has permissions to access your project folder. + + +`[Unit] +Description=Universal Dashboard Service +After=syslog.target network.target +[Service] +User=nate +Group=nate +Type=simple +StandardOutput=syslog +StandardError=syslog +ExecStart=/usr/bin/pwsh -c "& /home/nate/my-site/dashboard.ps1" +TimeoutStopSec=20 +Restart=on-failure +[Install] +WantedBy=multi-user.target +`Now, start your dashboard: + + +`sudo systemctl start uddashboard.service +`Your site should now be available at http ://localhost:80 + +Finally, we want to enable our service so that it starts at boot and will attempt error correction if stopped unceremoniously. + + +`sudo systemctl enable uddashboard.service +`You should now have a fully functioning dashboard. + +If you'd like to configure SSL, read on! + +## Configuring HTTPS {.wp-block-heading} + +For this tutorial, I'm using Let's Encrypt certificates. For more information on how to obtain LE certs, check out the Let's Encrypt documentation on [getting started][3]. + +Make a directory for your certificates. Exactly where is up to you. + + +`sudo mkdir /etc/nginx/certs +cd /etc/nginx/certs +`Since I'm using Let's Encrypt, I have 2 certificate files I need to put here - + + +`fullchain.pem +`and + + +`privkey.pem +`. + +Be sure to set permissions on both to 400 (user read-only) + + +`sudo chmod 400 ./fullchain.pem +sudo chmod 400 ./privkey.pem +`Next, we need to modify our nginx config file to listen on HTTPS. + + +`sudo nano /etc/nginx/sites-available/dashboard.conf +`Now, we will listen on port 443, and port 80, which will perform a redirect to the secure version of our site: + +> + +> NOTE: Change +> +> +> `> server_name +> `> to your own servername +> + + +`server { + listen 80; + return 301 https://$host$request_uri; +} +server { + listen 443 ssl; + ssl on; + server_name uddashboard.lab.natelab.us; + ssl_protocols TLSv1.2; + ssl_ciphers HIGH:!aNULL:!MD5; + ssl_certificate /etc/nginx/certs/fullchain.pem; + ssl_certificate_key /etc/nginx/certs/privkey.pem; + location / { + proxy_pass http://localhost:8080; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection keep-alive; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} +`Now, simply reload nginx + + +`sudo service nginx reload +`You should now have a secure Universal Dashboard server, running as a service. Huzzah! + +> + +> *NOTE: *This is a cross-post from my original blog post: +[https://blog.natelab.us/running-universal-dashboard-with-ubuntu-and-nginx-with-https](https://blog.natelab.us/running-universal-dashboard-with-ubuntu-and-nginx-with-https) +> + + + [1]: https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-linux?view=powershell-6#ubuntu-1804 + [2]: https://www.poshud.com + [3]: https://letsencrypt.org/getting-started/ diff --git a/content/articles/2019/03/secure-your-powershell-session-with-jea-and-constrained-endpoints/index.md b/content/articles/2019/03/secure-your-powershell-session-with-jea-and-constrained-endpoints/index.md new file mode 100644 index 000000000..9cc8ed36a --- /dev/null +++ b/content/articles/2019/03/secure-your-powershell-session-with-jea-and-constrained-endpoints/index.md @@ -0,0 +1,317 @@ +--- +url: /articles/2019-03-28-secure-your-powershell-session-with-jea-and-constrained-endpoints/ +title: Secure Your Powershell Session with JEA and Constrained Endpoints +authors: + - Nathaniel Webb (ArtisanByteCrafter) +date: "2019-03-28T20:57:51+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks + - Tools + - Tutorials +aliases: + - /2019/03/secure-your-powershell-session-with-jea-and-constrained-endpoints/ +--- + +## Index {.wp-block-heading} + + + - + [What is a Constrained Endpoint and Why Would I Need One?](#what-is-a-constrained-endpoint-and-why-would-i-need-one) + + + - + [Setup and Configuration](#setup-and-configuration) + + + - + [Using our Endpoint](#using-our-endpoint) + + + +## What is a constrained endpoint and why would I need one? {.wp-block-heading} + +Powershell constrained endpoints are a means of interacting with powershell in a manner consistent with the [principal of least privilege][1]. In Powershell terms, this is referred to as Just-Enough-Administration, or JEA. + +JEA is very well documented, so this won't simply be repeating everything those references detail. Instead, we'll go through a simple, real-world use-case of when and why you might need to deploy one. + +**Scenario:** + +A subset of your team needs permissions to do one single action outside the normal scope of their jobs - The ability to restart a service on a server. This particular application will not accept changes to it without a restart, so this access needs to be delegated to the team responsible for maintaining the application, rather than calling you ever 12-15 minutes throughout the day. + +You might be thinking, why not just email them a link to a one-liner of code and say "Hey, run this in the terminal thingy!" + + +`Invoke-Command -Server myserver -ScriptBlock {Get-Service myservice | Restart-Service} +`First, now the **entire team** needs PS-Remoting rights, administrator rights on the remote server (!), and a contract with HR not to replace the contents of + + +`-ScriptBlock { } +`with something more sinister or destructive. Instead, we're going to let them do just enough administration to accomplish what they need to. + +## Setup and Configuration {.wp-block-heading} + +Now that we've established why we need a constrained endpoint, let's use powershell to create one. For this example, we will have a custom module + + +`mymodule.psm1 +`that exposes two functions: + + + - + +`Get-Foo +`- a custom function we wrote for demonstration purposes + + +- + +`Restart-OurCustomService +`- a function that explicitly calls + + +`Restart-Service -Service OurCustomService +`Here is our custom module, + + +`mymodule.psm1 +`: + + +`Function Get-Foo { + param( + [string] $Message = "Hello World!" + ) + Write-Output $Message + Write-EventLog -LogName 'MyPSEndpoint' -Source 'Get-Foo' -EntryType Information -EventId 2000 -Message "Get-Foo -Message '$Message' was run." +} +Function Restart-OurCustomService { + [cmdletbinding()] + param() + Try { + Restart-Service -Name OurCustomService -Force -ErrorAction Stop -ErrorVariable err + Write-Host -ForegroundColor green "OurCustomService was restarted!" + Write-EventLog -LogName 'MyPSEndpoint' -Source 'Restart-OurCustomService' -EntryType Information -EventId 2001 -Message "Successfully restarted." + } + Catch { + Write-Host -ForegroundColor red "OurCustomService could not be restarted." + Write-EventLog -LogName 'MyPSEndpoint' -Source 'Restart-OurCustomService' -EntryType Error -EventId 2002 -Message "$err" + } +} +`These are the only two commands we want our team members to be able to run. + +**Logging** + +It's always good idea to have some type of logging, so before we even create the actual PS-Session, we're going to create a Windows Event Log source for it: + + +`$Sources = @( + 'Get-Foo', + 'Restart-OurCustomService' +) +New-EventLog -LogName "MyPSEndpoint" -Source $Sources +`Now, we'll be able to see what commands were run through the Event Log, as well as audit any errors thrown. + +**Creating the module** + +We'll need to make sure our module is available on the remote computer. There are several ways to do this, but for this demo, we'll simply create a folder for it in one of the standard module directories. + +The file path will end up being: + + +`C:\Windows\system32\WindowsPowerShell\v1.0\Modules\MyModule\mymodule.psm1 +`. + +**Creating the session configuration file** + +Next, we need to actually create the session endpoint. We need to ensure our users can only use the functions and cmdlets we've specified, so in order to do that we need to configure a few parameters. + +First, is + + +`LanguageMode +`, of which we'll be using the + + +`Restricted +`type. The help file for + + +`New-PSSessionConfigurationFile +`explain exactly what this entails: + +> + +> RestrictedLanguage: Users may run cmdlets and functions, but are not permitted to use script blocks or variables except for the following permitted variables: $PSCulture, $PSUICulture, $True, $False, and $Null. Users may use only the basic comparison operators (-eq, -gt, -lt). Assignment statements, property references, and method calls are not permitted. +> + + +Similar to language mode, we also want to set a custom ExecutionPolicy for our endpoint. For this example, since we really only need our 3 defined commands, we'll use + + +`RemoteSigned +`. For more information on various execution policies, see Microsoft's + +[about_Execution_Policies][2] documentation. + +Last, we will configure a + + +`SessionType +`. Another brief look at + + +`Get-Help New-PSSessionConfigurationFile +`shows: + +> + +> RestrictedRemoteServer: Includes only the following proxy functions: +> +> +> `> Exit-PSSession +> `> , +> +> +> `> Get-Command +> `> , +> +> +> `> Get-FormatData +> `> , +> +> +> `> Get-Help +> `> , +> +> +> `> Measure-Object +> `> , +> +> +> `> Out-Default +> `> , and +> +> +> `> Select-Object +> `> . Use the parameters of this cmdlet to add modules, functions, scripts, and other features to the session. +> + + +Our code to create our session should now look like this: + + +`$sessionparams = @{ + 'Path' = "$env:windir\system32\WindowsPowerShell\v1.0\MyPSEndpoint.pssc" + 'LanguageMode' = 'RestrictedLanguage' + 'ExecutionPolicy' = 'RemoteSigned' + 'SessionType' = 'RestrictedRemoteServer' + 'ModulesToImport' = @('MyModule') +} +New-PSSessionConfigurationFile @sessionparams +`The last thing necessary to begin using our constrained endpoint is to register it with Powershell: + + +`$registerparams = @{ + 'Name' = 'MyPSEndpoint' + 'Path' = "$env:windir\system32\WindowsPowerShell\v1.0\MyPSEndpoint.pssc" + 'ShowSecurityDescriptorUI' = $True +} +Register-PSSessionConfiguration @registerparams +`A very important screen should now appear. This is the SecurityDescriptorUI, which will allow us to delegate permissions for who can access our endpoint. + +> + +> NOTE: You won't be able to set the SecurityDescriptorUI over a remote PSSession, so be sure to use the console to do this part. If you mess this up, you can reset it from a console: +> +> +> `> Get-PSSessionConfiguration -Name MyPSEndpoint | SetPSSessionConfiguration -ShowSecurityDescriptorUI +> `> +> + + +Assign permissions as needed, and then verify your configuration has appropriate permissions: + + +`PS C:\Users\nate> Get-PSSessionConfiguration -Name MyPSEndpoint +Name : MyPSEndpoint +PSVersion : 5.1 +StartupScript : +RunAsUser : +Permission : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed +`Without any additional configuration, commands run through the endpoint will execute as the logged in user. For this example, we need to specify other credentials on the server to execute our commands so our users do not need admin rights themselves. + + +`$RunAsCred = (Get-Credential) +Set-PSSessionConfiguration -Name MyPSEndpoint -RunAsCredential $RunAsCred +`## Using our endpoint {.wp-block-heading} + +Now we're ready to connect and use our endpoint. As a user with permissions delegated via the Security Descriptor above, run the following: + + +`New-PSSession -ComputerName 'remoteserver' -ConfigurationName 'MyPSEndpoint' | Enter-PSSession +`If all goes well, we should be greeted with a remote session PS prompt, as denoted by the + + +`[remoteserver] PS> +`in front of the console prompt. + +Now we can start to explore what we can can't do! (As long as we configured our session correctly) + +Familiar commands like 'Get-ChildItem' won't work, and will result in an 'unknown cmdlet' error. In fact there's literally nothing we can run except the commands in our module, and a few pre-defined commands necessary for the session to function. We can list our options with + + +`Get-Command`[wincore2019demo]: PS> Get-Command +CommandType Name Version Source +----------- ---- ------- ------ +Function Clear-Host +Function Exit-PSSession +Function Get-Command +Function Get-Foo 0.0 MyModule +Function Get-FormatData +Function Get-Help +Function Measure-Object +Function Out-Default +Function Restart-OurCustomService 0.0 MyModule +Function Select-Object +`Our two commands are present from our module, and that's essentially it. The other functions are pre-defined by the session type + + +`RestrictedRemoteServer +`, and are needed for the endpoint to function correctly. + +We can run + + +`Get-Foo +`: + + +`[wincore2019demo]: PS>Get-Foo -Message "I love Powershell!" +I love Powershell! +PS> +`We can run + + +`Restart-OurCustomService +`: + + +`PS> Restart-OurCustomService +OurCustomService could not be restarted. +PS> +`We can see the results of our interactions in the event log. My demo VM has no service "OurCustomService" so it displayed a friendly error to the console, and logged the verbose error to the event log. + +> + +> TIP: In Restricted Language Mode, we do not have access to the global variable $error. However, by utilizing advanced functions, we can specify -ErrorVariable to still be able to write the error to the event log, even if we don't present this information to our users in the console. This can be seen in the Restart-OurCustomService function, and in the screenshot below. +> + + +![Imgur](https://i.imgur.com/Jk0Iwaq.png) + +At this point we've gone over creating a Powershell JEA Endpoint using restricted language and an available custom module for restarting a service. There is a massive amount more you can do with this, but I hope this real-world demonstration has made JEA just a little bit less intimidating and easy to use! + + [1]: https://en.wikipedia.org/wiki/Principle_of_least_privilege + [2]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-5.1 diff --git a/content/articles/2019/03/whos-your-2019-powershell-community-hero/index.md b/content/articles/2019/03/whos-your-2019-powershell-community-hero/index.md new file mode 100644 index 000000000..d2d576458 --- /dev/null +++ b/content/articles/2019/03/whos-your-2019-powershell-community-hero/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2019-03-11-whos-your-2019-powershell-community-hero/ +title: "Who's Your 2019 PowerShell Community Hero?" +authors: + - Will Anderson +date: "2019-03-11T15:18:59+00:00" +categories: + - PowerShell for Admins +aliases: + - /2019/03/whos-your-2019-powershell-community-hero/ +--- + +Today we're opening nominations for the 2019 PowerShell Community Heroes! We want to know about those in the community that are doing a wealth of good. Have they written a fantastic script, or posted a blog series that has been exceptionally helpful? Are they doing a mad amount of pull requests in a module or in PowerShell Core? Here is your opportunity to make sure they get the recognition they deserve! + +All you need to do is take a couple of minutes to fill out a quick survey to let us know who you'd like to nominate and why. It's that simple! + +Link: [ +https://survey.sogosurvey.com/r/FsZhCb][1] + +We'll be announcing the top honorees at this year's PowerShell + DevOps Global Summit, followed by an announcement right here on PowerShell.org. The survey closes on April 5th! + + [1]: https://survey.sogosurvey.com/r/FsZhCb diff --git a/content/articles/2019/04/_index.md b/content/articles/2019/04/_index.md new file mode 100644 index 000000000..1cb2df3e3 --- /dev/null +++ b/content/articles/2019/04/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from April 2019" +description: "PowerShell.org Articles published in April 2019." +--- diff --git a/content/articles/2019/04/azure-devops-enable-allow-scripts-to-access-the-oauth-token-using-powershell/index.md b/content/articles/2019/04/azure-devops-enable-allow-scripts-to-access-the-oauth-token-using-powershell/index.md new file mode 100644 index 000000000..7e35fb0d2 --- /dev/null +++ b/content/articles/2019/04/azure-devops-enable-allow-scripts-to-access-the-oauth-token-using-powershell/index.md @@ -0,0 +1,190 @@ +--- +url: /articles/2019-04-20-azure-devops-enable-allow-scripts-to-access-the-oauth-token-using-powershell/ +title: "Azure DevOps – Enable \"Allow scripts to access the OAuth token\" using PowerShell" +authors: + - pwshliquori +date: "2019-04-20T23:20:30+00:00" +categories: + - PowerShell for Admins +aliases: + - /2019/04/azure-devops-enable-allow-scripts-to-access-the-oauth-token-using-powershell/ +--- + +Azure DevOps allows us to run custom scripts to help our software and infrastructure get delivered quickly. There are times that the scripts run without an issue, however, sometimes there is a need to invoke the Azure DevOps Rest API in the release pipeline to get our scripts running. Sure, you can create a script invoking the API, authenticating with Azure DevOps with your personal access token and should work, but there is a better solution. + +Allowing scripts to access the OAuth token authenticates the script with the + + +`System.AccessToken +`variable, which runs as the Project Collection Build Service, a built-in service account in Azure DevOps. Today, we will be taking a look on how to enable this feature using PowerShell. + +Since the feature needs to be enabled per release definition, the first item we need to find is the definitionId of the release definition. This can be found by using the Rest API or in the URL when clicking on the release definition in Azure DevOps. Since we are using PowerShell, let’s try it, but first, be sure to have your personal access token handy. The below commands are for my own blog organization, please substitute with your organization and project name. There will be a function provided at the end that parameterizes these values. + + +`$Params = @{ + Uri = "https://vsrm.dev.azure.com/pwshliquori-blog/blog/_apis/release/definitions/1?api-version=5.0" + Headers = @{ + Authorization = "Basic $PersonalAccessToken" + } +} +$Def = Invoke-RestMethod @Params +`Let’s take a look at the command: + + + - + $Params: A hash table we will splat when we are ready to run the command. + + + - + $Params.Uri: The components needed to get the release definitions. + + + - + pwshliquori-blog: Organization name. + + + - + blog: Project name. + + + - + _apis: Standard for calling the rest API. + + + - + release: The area of the API call. + + + - + definitions: The resource of the API call. + + + - + api-version=5.0: The latest version of the API. + + + - + $Headers: Authorization header using your base 64 encoded personal access token. + + + - + Invoke-RestMethod @Params: Invokes the Rest API splatting the $Params hashtable. + + + +The command should return the release definition in the project with definitionId 1. Now we need to dig down and find the property needed to enable, in this case: “enableAccessToken.” + +The "enableAccessToken" property is set to false by default, lets find and set it to true: + + +`$Def.environments.deployPhases.deploymentInput +parallelExecution : @{parallelExecutionType=none} +skipArtifactsDownload : False +artifactsDownloadInput : @{downloadInputs=System.Object[]} +queueId : 3 +demands : {} +enableAccessToken : False +timeoutInMinutes : 0 +jobCancelTimeoutInMinutes : 1 +condition : succeeded() +overrideInputs : +$Def.environments.deployPhases.deploymentInput.enableAccessToken = $true +$Def.environments.deployPhases.deploymentInput +parallelExecution : @{parallelExecutionType=none} +skipArtifactsDownload : False +artifactsDownloadInput : @{downloadInputs=System.Object[]} +queueId : 3 +demands : {} +enableAccessToken : True +timeoutInMinutes : 0 +jobCancelTimeoutInMinutes : 1 +condition : succeeded() +overrideInputs : +`Now that we set the “enableAccessToken” to true, we need to update the release definition with the changed value. To do this, we need to convert the $Def variable to JSON format and set the ContentType to application/json. + + +`$Body = ConvertTo-Json -InputObject $Def -Depth 10 +$Params = @{ + Uri = "https://dev.azure.com/pwshliquori-blog/blog/_apis/release/definitions/1?api-version=5.0" + Headers = @{ + Authorization = "Basic $ConvertToBase64" + } + Body = $Body + ContentType = 'application/json + Method = 'Put' +} +Invoke-RestMethod @Params +`The body needs to contain the entire release definition with the updated “enableAccessToken” property. After running the command, we can now utilize the + + +`System.AccessToken +`to run scripts and processes using OAuth authentication that uses the Project Collection Build Service account. By using PowerShell, we can now turn the commands above into a function to automate the process of enabling this feature. + + +`function Enable-AzureDevOpsReleaseDefinitionOAuthToken { + [CmdletBinding()] + param + ( + [Parameter(Mandatory, + ValueFromPipeline, + Position = 0)] + [string]$OrganizationName, + [Parameter(Mandatory, + ValueFromPipeline, + Position = 1)] + [string]$ProjectName, + [Parameter(Mandatory, + Position = 2)] + [string]$ReleaseDefinitionId, + [Parameter(Position = 3)] + [string]$PersonalAccessToken + ) + Begin { + $BasicAuth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f '', $PersonalAccessToken))) + } + Process { + Try { + $Params = @{ + Uri = "https://vsrm.dev.azure.com/$OrganizationName/$ProjectName/_apis/release/definitions/$($ReleaseDefinitionId)?api-version=5.0" + Headers = @{ + Authorization = "Basic $BasicAuth" + } + } + $ReleaseDefinition = Invoke-RestMethod @Params + $ReleaseDefinition.environments |ForEach-Object { + $_.deployPhases.deploymentinput.enableAccessToken = $true + } + $JsonObject = foreach ($Definition in $ReleaseDefinition) { + ConvertTo-Json -InputObject $Definition -Depth 10 + } + $Params.Method = 'Put' + $Params.ContentType = 'application/json' + foreach ($Json in $JsonObject) { + $Params.Body = $Json + Invoke-RestMethod @Params + } + } + Catch { + throw $_ + } + } +} +`The function will enable the OAuth token for all environments in the given release definition, which gives us the option to use the + + +`System.AccessToken +`variable. This is handy when we want to run custom scripts without using our own personal access token. Another example is if we needed to create an annotated tag for a release and need to use the Build Service Account to tag the release instead of a release administrators personal access token. + +For purposes of this post, I have provided one function, but this should be split into two separate functions. One function to get the release definition, and then next to enable the OAuth token, taking an + + +`InputObject +`parameter. As the legendary Don Jones states "A function is a tool that should do one thing really well." + + + +To find more information on using the Rest API, visit Microsoft documentation on the Azure DevOps Rest API. + +[https://docs.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-5.0](https://docs.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-5.0) + +pwshliquori diff --git a/content/articles/2019/04/find-module-find-script-dont-recreate-the-wheel/index.md b/content/articles/2019/04/find-module-find-script-dont-recreate-the-wheel/index.md new file mode 100644 index 000000000..a4d1f12b6 --- /dev/null +++ b/content/articles/2019/04/find-module-find-script-dont-recreate-the-wheel/index.md @@ -0,0 +1,230 @@ +--- +url: /articles/2019-04-29-find-module-find-script-dont-recreate-the-wheel/ +title: "Find-Module, Find-Script – Don't Recreate the Wheel" +authors: + - pwshliquori +date: "2019-04-29T18:52:07+00:00" +categories: + - PowerShell for Admins +aliases: + - /2019/04/find-module-find-script-dont-recreate-the-wheel/ +--- + +The PowerShell Gallery is a collection of modules and scripts that is community driven to help us automate everyday tasks. Sometimes, we have an idea that could written into a function or script, however, most of the time, someone else had the same idea and published their work to the PowerShell Gallery. There is no need to recreate the wheel and re-write it, use the community to our advantage. We'll take a look at multiple Cmdlets, + + +`Find-Module +`, + + +`Find-Script +`, + + +`Install-Module +`, and + + +`Install-Script +`, and find out what each of them provide. + +**Find-Module** **and Install-Module** + + +`Find-Module +`allows us the + +_browse_ the PowerShell Gallery and find if there is a module in the community that has been created. Running + + +`Get-Help Find-Module +`, we can see there are multiple parameters to use to help narrow our search. For demonstration, we will find the Azure PowerShell (Az) module by Microsoft using the + + +`Find-Module +`Cmdlet. + + +`Get-Help Find-Module +NAME + Find-Module +SYNTAX + Find-Module [[-Name] ] [-MinimumVersion ] [-MaximumVersion ] [-RequiredVersion ] [-AllVersions] [-IncludeDependencies] [-Filter ] [-Tag + ] [-Includes {DscResource | Cmdlet | Function | RoleCapability}] [-DscResource ] [-RoleCapability ] [-Command ] [-Proxy ] [-ProxyCredential + ] [-Repository ] [-Credential ] [] +ALIASES + fimo +REMARKS + Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help. + -- To download and install Help files for the module that includes this cmdlet, use Update-Help. + -- To view the Help topic for this cmdlet online, type: "Get-Help Find-Module -Online" or + go to http://go.microsoft.com/fwlink/?LinkID=398574. +Find-Module -Name Az +Version Name Repository Description +------- ---- ---------- ----------- +1.8.0 Az PSGallery Microsoft Azure PowerShell - Cmdlets to manage resources in Azure. This module is compatible with WindowsPowerShell and P... +`Great. We were able to find the Az module and returned some information about the module: Version, Name, Repository, and Description. But what if we did not know the name of a module we are looking for? The + + +`-Name +`parameter accepts wildcards for partial searches, we can enter in + + +`Find-Module -Name Az* +`and will return any module in the gallery that starts with "Az". We can also search for DSC Resources using the + + +`Find-Module +`Cmdlet using the + + +`-Includes DscResource +`parameter. This will only return DSC Resources available in the PowerShell Gallery + + +`Find-Module -Name xWeb* -Includes DscResource +`Once we found the module that we want to use, we can install the module using the + + +`Install-Module +`Cmdlet. This will install the community module in our default module install directory: + + +`C:\Program Files\WindowsPowerShell\Modules +`or if using PowerShell Core: + + +`C:\Program Files\PowerShell\Modules +`. Lets take the example above and use it to install the Az Module. + + +`Find-Module -Name Az |Install-Module +`We can take the + + +`Find-Module +`Cmdlet and pipe it to the + + +`Install-Module +`Cmdlet to install the module. But, we also have the ability to install a specific version of a module using the + + +`-RequiredVersion +`parameter. + + +`Install-Module -Name Az -RequiredVersion 1.7 +`Not using the + + +`-RequiredVersion +`parameter will install the latest version of the module. + +**Note:** Find-Module and Install-Module was introduced in PowerShell version 5.0. + +**Find-Script and Install-Script** + + +`Find-Script +`works the same way as + + +`Find-Module +`, however, instead of finding modules, we are now finding scripts. + + +`Find-Script +`will return + + +`.ps1 +`scripts in the PowerShell Gallery that could be installed. Lets take a look at an example to find a script and than later on we will install it. The same rules apply when trying to find a script, we can use wildcards in our search to find a certain script. + + +`Find-Script -Name Get-* +Version Name Repository Description +------- ---- ---------- ----------- +1.4 Get-WindowsAutoPilotInfo PSGallery This script uses WMI to retrieve properties needed by the Microsoft Store for Business to support Windows AutoPilot deplo... +1.0.0 Get-Quotation PSGallery Get-Quote cmdlet data harvests a/multiple quote(s) from Web outputs into your powershell console +1.0.0 Get-UsersOnlineOnReddit PSGallery Script to web data scrape reddit user trend and pump all the data points script captured from Reddit’s Powershell Communi... +1.0.4 Get-PacFile PSGallery This script will access updated information to create a PAC file to prioritize Microsoft 365 Urls for... +1.1.2.7 Get-AzureAutomationDiagnosticRes... PSGallery Capture diagnostic information for Azure Automation accounts. ... +1.1.0 Get-VMotion PSGallery Report on recent vMotion events in your VMware environment. +1.2.1 Get-RemoteProgram PSGallery This function generates a list by querying the registry and returning the installed programs of a local or remote computer. +1.1 get-uptime PSGallery Get the uptime of the current machine. +1.0.1 Get-InstalledProgram PSGallery Get-InstalledProgram retrieves the programs installed on a local or remote machine. To specify a remote computer, use the... +0.0.1 Get-LockoutBlame PSGallery Script to get a Windows Event about Locked Accounts, including the host which caused the lockout.... +0.1.1 get-lastreboot PSGallery Get the last reboot information from multiple machines +1.0 Get-DnsConfiguration PSGallery Retrives primary, secondary, tertiery DNS Servers from on online system using Windows Management Instrimentation. +1.0 Get-Github PSGallery Download a github repository or a gist +1.1 Get-MyIP PSGallery Get your External IP address... +1.3.5 Get-WindowsUpTime PSGallery Get Windows UpTime StartTime and LocalTime by Wmi on local and remote system +2.9 Get-Parameter PSGallery Lists all the parameters of a command, by ParameterSet, including their aliases, type, etc.... +2.0 Get-LastLoggedOnUser PSGallery Gets the last not special user to have a loaded profile on a given system. +`We searched for all scripts that start with + + +`Get-* +`, now lets find the script we want to install: + + +`Join-String`Find-Script -Name Join-String +Version Name Repository Description +------- ---- ---------- ----------- +1.0 Join-String PSGallery Join String from Array +`Now that we found the scripts, lets install it using the same pipeline. Using the + + +`Install-Script +`Cmdlet, the script will install in the default script location: + + +`C:\Program Files\WindowsPowerShell\Scripts +`or if using PowerShell Core: + + +`C:\Program Files\PowerShell\Scripts +`. + + +`Find-Script -Name Join-String |Install-Script +`We can still use the + + +`-RequiredVersion +`parameter if a specified version is required, but using the command above will install the latest. + + +`Find-Module +`, + + +`Find-Script +`, + + +`Install-Module +`, and + + +`Install-Script +`are great to find and install modules or scripts from the PowerShell Gallery, there is no need to recreate the wheel, (Most of the time). You can also search the PowerShell Gallery by visiting the website + +[here][1]. When searching for a module or script, the site will show you the command to run in PowerShell to install the module or script. + +Just a reminder that these Cmdlets were introduced in PowerShell version 5.0 and are in the [PowerShellGet][2] module. The links below are Microsoft's documentation for each Cmdlet with examples and other parameters that can be used. + +[Find-Module][3] +[Install-Module][4] +[Find-Script +][5] [Install-Script][6] + +pwshliquori + + [1]: https://www.powershellgallery.com/ + [2]: https://docs.microsoft.com/en-us/powershell/module/powershellget/?view=powershell-6 + [3]: https://docs.microsoft.com/en-us/powershell/module/powershellget/Find-Module?view=powershell-6%EF%BB%BF + [4]: https://docs.microsoft.com/en-us/powershell/module/powershellget/Install-Module?view=powershell-6%EF%BB%BF + [5]: https://docs.microsoft.com/en-us/powershell/module/powershellget/Find-Script?view=powershell-6 + [6]: https://docs.microsoft.com/en-us/powershell/module/powershellget/Install-Script?view=powershell-6 diff --git a/content/articles/2019/04/get-command-one-of-the-best-cmdlets-besides-get-help/index.md b/content/articles/2019/04/get-command-one-of-the-best-cmdlets-besides-get-help/index.md new file mode 100644 index 000000000..d4fab7e73 --- /dev/null +++ b/content/articles/2019/04/get-command-one-of-the-best-cmdlets-besides-get-help/index.md @@ -0,0 +1,322 @@ +--- +url: /articles/2019-04-19-get-command-one-of-the-best-cmdlets-besides-get-help/ +title: Get-Command – One of the best Cmdlets besides Get-Help +authors: + - pwshliquori +date: "2019-04-19T16:59:06+00:00" +categories: + - PowerShell for Admins +aliases: + - /2019/04/get-command-one-of-the-best-cmdlets-besides-get-help/ +--- + +So laying on the sofa, sick, bored out of my mind, what better way to spend my time then writing a blog post about + + +`Get-Command +`. The + + +`Get-Command +`Cmdlet is apart of the Microsoft.PowerShell.Core module, it was introduced in PowerShell version 1.0 and is one of the most useful Cmdlets to find a command you are looking for. It has a variety of parameters that allow you to search for a command by using a combination of parameters or just using + + +`Get-Command +`on its own. Go ahead and run + + +`Get-Command +`in your console before continuing with this post. As you can see, it returns all commands that are available in your PowerShell session. Later on, we will go through several example on how we can leverage the parameters to find specifics commands. + +Lets start with a basic example and then build on it to get a specific command, + + +`Get-ADUser +`. First, lets get all of the command that are already imported into our PowerShell session. + + +`Get-Command -ListImported +CommandType Name Version Source +----------- ---- ------- ------ +Function New-HiiDistributionGroup 1.0.0.0 ExchangeTools +Function New-HiiExchangeSession 1.0.0.0 ExchangeTools +Function New-HiiMailContact 1.0.0.0 ExchangeTools +Function Add-HiiSmtpEmailAddress 1.0.0.0 ExchangeTools +Function New-HiiMailbox 1.0.0.0 ExchangeTools +Function New-HiiUserMailboxDistributionList 1.0.0.0 ExchangeTools +Function Get-HiiSmtpEmailAddress 1.0.0.0 ExchangeTools +Function Add-HiiDistributionGroupMember 1.0.0.0 ExchangeTools +Function Remove-HiiSmtpEmailAddress 1.0.0.0 ExchangeTools +Function Export-HiiMailboxToPST 1.0.0.0 ExchangeTools +Cmdlet Remove-Job 3.0.0.0 Microsoft.PowerShell.Core +Cmdlet Register-PSSessionConfiguration 3.0.0.0 Microsoft.PowerShell.Core +Cmdlet Get-Help 3.0.0.0 Microsoft.PowerShell.Core +Cmdlet Remove-Module 3.0.0.0 Microsoft.PowerShell.Core +Cmdlet Out-Null 3.0.0.0 Microsoft.PowerShell.Core +Cmdlet Receive-Job 3.0.0.0 Microsoft.PowerShell.Core +Cmdlet Receive-PSSession 3.0.0.0 Microsoft.PowerShell.Core +Cmdlet Register-ArgumentCompleter 3.0.0.0 Microsoft.PowerShell.Core +Cmdlet Get-History 3.0.0.0 Microsoft.PowerShell.Core +Cmdlet Get-Job 3.0.0.0 Microsoft.PowerShell.Core +`The output does not have any Cmdlets from the ActiveDirectory module we need to find the + + +`GetADUser +`. If you have RSAT Tools installed, import the module using + + +`Import-Module ActiveDirectory +`and re-run + + +`Get-Command -ListImported +`. As you can see now, a list of Active Directory Cmdlets are available. We can now start getting more complex to find + + +`Get-ADUser +`. + +Lets get limit the scope of our command to get only the ActiveDirectory module Cmdlets that are available. + + +`Get-Command -Module ActiveDirectory +CommandType Name Version Source +----------- ---- ------- ------ +Cmdlet Add-ADCentralAccessPolicyMember 1.0.1.0 activedirectory +Cmdlet Add-ADComputerServiceAccount 1.0.1.0 activedirectory +Cmdlet Add-ADDomainControllerPasswordReplicationPolicy 1.0.1.0 activedirectory +Cmdlet Add-ADFineGrainedPasswordPolicySubject 1.0.1.0 activedirectory +Cmdlet Add-ADGroupMember 1.0.1.0 activedirectory +Cmdlet Add-ADPrincipalGroupMembership 1.0.1.0 activedirectory +Cmdlet Add-ADResourcePropertyListMember 1.0.1.0 activedirectory +Cmdlet Clear-ADAccountExpiration 1.0.1.0 activedirectory +Cmdlet Clear-ADClaimTransformLink 1.0.1.0 activedirectory +Cmdlet Disable-ADAccount 1.0.1.0 activedirectory +Cmdlet Disable-ADOptionalFeature 1.0.1.0 activedirectory +Cmdlet Enable-ADAccount 1.0.1.0 activedirectory +Cmdlet Enable-ADOptionalFeature 1.0.1.0 activedirectory +Cmdlet Get-ADAccountAuthorizationGroup 1.0.1.0 activedirectory +Cmdlet Get-ADAccountResultantPasswordReplicationPolicy 1.0.1.0 activedirectory +Cmdlet Get-ADAuthenticationPolicy 1.0.1.0 activedirectory +Cmdlet Get-ADAuthenticationPolicySilo 1.0.1.0 activedirectory +Cmdlet Get-ADCentralAccessPolicy 1.0.1.0 activedirectory +Cmdlet Get-ADCentralAccessRule 1.0.1.0 activedirectory +Cmdlet Get-ADClaimTransformPolicy 1.0.1.0 activedirectory +Cmdlet Get-ADClaimType 1.0.1.0 activedirectory +Cmdlet Get-ADComputer 1.0.1.0 activedirectory +`Now we filtered only the ActiveDirectory module and can now filter down even more. + + +`Get-Command +`has a parameter + + +`-Verb +`that allows us to filter by using the verb of the Cmdlet (e.g. Get, Set, Import, Reset). Lets filter by verb + + +`Get +`and view the output. + + +`Get-Command -Module ActiveDirectory -Verb Get +CommandType Name Version Source +----------- ---- ------- ------ +Cmdlet Get-ADAccountAuthorizationGroup 1.0.1.0 activedirectory +Cmdlet Get-ADAccountResultantPasswordReplicationPolicy 1.0.1.0 activedirectory +Cmdlet Get-ADAuthenticationPolicy 1.0.1.0 activedirectory +Cmdlet Get-ADAuthenticationPolicySilo 1.0.1.0 activedirectory +Cmdlet Get-ADCentralAccessPolicy 1.0.1.0 activedirectory +Cmdlet Get-ADCentralAccessRule 1.0.1.0 activedirectory +Cmdlet Get-ADClaimTransformPolicy 1.0.1.0 activedirectory +Cmdlet Get-ADClaimType 1.0.1.0 activedirectory +Cmdlet Get-ADComputer 1.0.1.0 activedirectory +Cmdlet Get-ADComputerServiceAccount 1.0.1.0 activedirectory +Cmdlet Get-ADDCCloningExcludedApplicationList 1.0.1.0 activedirectory +Cmdlet Get-ADDefaultDomainPasswordPolicy 1.0.1.0 activedirectory +Cmdlet Get-ADDomain 1.0.1.0 activedirectory +Cmdlet Get-ADDomainController 1.0.1.0 activedirectory +Cmdlet Get-ADDomainControllerPasswordReplicationPolicy 1.0.1.0 activedirectory +Cmdlet Get-ADDomainControllerPasswordReplicationPolicy... 1.0.1.0 activedirector +`Great! we now have all Cmdlets that start with the verb + + +`Get +`. Lets keep building, another parameter + + +`-Noun +`. We know the prefix for most ActiveDirectory Cmdlets start with AD, so lets use the noun User and see what the output is. + + +`Get-Command -Module ActiveDirectory -Verb Get -Noun *User +CommandType Name Version Source +----------- ---- ------- ------ +Cmdlet Get-ADUser 1.0.1.0 activedirectory +`Success! We found exactly the command we needed to. But did you notice the + + +`* +`character in the noun parameter? This is because we know the prefix is + + +`AD +`and the noun parameter acts as a filter, this tells PowerShell to find anything that has User in the noun. You can do the same for the parameter + + +`-Verb +`. + + + +So now what? We found the command, but what else can we do with + + +`Get-Command +`. Besides just getting the command, we can get syntax, command info, or search by parameter type or parameter name. Lets see the syntax of + + +`Get-ADUser +`so we can better understand what it does. + + +`Get-Command -Module ActiveDirectory -Verb Get -Noun *User -Syntax +Get-ADUser -Filter [-AuthType ] [-Credential ] [-Properties ] [-ResultPageSize ] [-ResultSetSize ] [-SearchBase ] [-SearchScope ] [-Server ] [] +Get-ADUser [-Identity] [-AuthType ] [-Credential ] [-Partition ] [-Properties ] [-Server ] [] +Get-ADUser -LDAPFilter [-AuthType ] [-Credential ] [-Properties ] [-ResultPageSize ] [-ResultSetSize ] [-SearchBase ] [-SearchScope ] [-Server ] [] +`We can now see the parameters and parameter types of each. This is a great way to understand how the Cmdlet works and how we can use it in our own code. + +Now that we built our command to find just the + + +`Get-ADUser +`and get the syntax. Lets look at another example that searches for a certain parameter name + + +`Identity +`. Using the parameter + + +`ParameterName +`will allow us to filter through Cmdlets in the ActiveDirectory module that has an + + +`-Identity +`parameter. + + +`Get-Command -Module ActiveDirectory -ParameterType IdentityCommandType Name Version Source +----------- ---- ------- ------ +Cmdlet Add-ADCentralAccessPolicyMember 1.0.1.0 activedirectory +Cmdlet Add-ADComputerServiceAccount 1.0.1.0 activedirectory +Cmdlet Add-ADDomainControllerPasswordReplicationPolicy 1.0.1.0 activedirectory +Cmdlet Add-ADFineGrainedPasswordPolicySubject 1.0.1.0 activedirectory +Cmdlet Add-ADGroupMember 1.0.1.0 activedirectory +Cmdlet Add-ADPrincipalGroupMembership 1.0.1.0 activedirectory +Cmdlet Add-ADResourcePropertyListMember 1.0.1.0 activedirectory +Cmdlet Clear-ADAccountExpiration 1.0.1.0 activedirectory +Cmdlet Clear-ADClaimTransformLink 1.0.1.0 activedirectory +Cmdlet Disable-ADAccount 1.0.1.0 activedirectory +Cmdlet Disable-ADOptionalFeature 1.0.1.0 activedirectory +Cmdlet Enable-ADAccount 1.0.1.0 activedirectory +Cmdlet Enable-ADOptionalFeature 1.0.1.0 activedirectory +Cmdlet Get-ADAccountAuthorizationGroup 1.0.1.0 activedirectory +Cmdlet Get-ADAccountResultantPasswordReplicationPolicy 1.0.1.0 activedirectory +Cmdlet Get-ADAuthenticationPolicy 1.0.1.0 activedirectory +Cmdlet Get-ADAuthenticationPolicySilo 1.0.1.0 activedirectory +Cmdlet Get-ADCentralAccessPolicy 1.0.1.0 activedirectory +Cmdlet Get-ADCentralAccessRule 1.0.1.0 activedirectory +Cmdlet Get-ADClaimTransformPolicy 1.0.1.0 activedirectory +Cmdlet Get-ADClaimType 1.0.1.0 activedirectory +Cmdlet Get-ADComputer 1.0.1.0 activedirectory +Cmdlet Get-ADComputerServiceAccount 1.0.1.0 activedirectory +Cmdlet Get-ADDefaultDomainPasswordPolicy 1.0.1.0 activedirectory +Cmdlet Get-ADDomain 1.0.1.0 activedirectory +`We have found all of the command that have a parameter name of + + +`Identity +`. For purposes, there are a limited set listed above, the actual total number of Cmdlets that have the parameter of + + +`Identity +`is 117. + + + +The last two parameters to take a look at are the + + +`-Name +`and + + +`-ShowCommandInfo +`parameters. If we already know the Cmdlet name and want to find which module it is in, we can use the + + +`-Name +`parameter and view the Source. + + +`Get-Command -Name Get-ADUser +CommandType Name Version Source +----------- ---- ------- ------ +Cmdlet Get-ADUser 1.0.1.0 activedirectory +`The command found the Cmdlet and is found in the ActiveDirectory module. The final parameter will build on the previous example, but we will add the + + +`-ShowCommandInfo +`parameter. The + + +`-ShowCommandInfo +`show the information pertaining to the command you a attempting to get. + + +`Get-Command -Name Get-ADUser -ShowCommandInfo +Name : Get-ADUser +ModuleName : activedirectory +Module : @{Name=activedirectory} +CommandType : Cmdlet +Definition : + Get-ADUser -Filter [-AuthType ] [-Credential ] [-Properties ] [-ResultPageSize ] [-ResultSetSize ] [-SearchBase + ] [-SearchScope ] [-Server ] [] + Get-ADUser [-Identity] [-AuthType ] [-Credential ] [-Partition ] [-Properties ] [-Server ] [] + Get-ADUser -LDAPFilter [-AuthType ] [-Credential ] [-Properties ] [-ResultPageSize ] [-ResultSetSize ] [-SearchBase + ] [-SearchScope ] [-Server ] [] +ParameterSets : {@{Name=Filter; IsDefault=True; Parameters=System.Management.Automation.PSObject[]}, @{Name=Identity; IsDefault=False; Parameters=System.Management.Automation.PSObject[]}, + @{Name=LdapFilter; IsDefault=False; Parameters=System.Management.Automation.PSObject[]}} +`Now we can see all of the information in the + + +`Get-ADUser +`Cmdlet, including syntax information. + + + +We took a look at multiple examples of the + + +`Get-Command +`Cmdlet that can help us build tools in our scripts and module. It is a very help tool and that is why, (IMHO), it is one of the best Cmdlets to use besides + + +`Get-Help +`. To find out more information about + + +`Get-Command +`view Microsoft's documentation. + +[Get-Command ](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/get-command?view=powershell-6) + +Note: At the time of writing this post, PowerShell is in version 6. The + + +`-ShowCommandInfo +`parameter was introduced in PowerShell version 5.0. + +Update: Get-Command was introduced in PowerShell v1.0, not 3.0. Thanks to Ryan Yates for the correction. Microsoft's docs on Get-Command only goes back to v3.0. + +pwshliquori diff --git a/content/articles/2019/04/hear-hear-for-here-strings/index.md b/content/articles/2019/04/hear-hear-for-here-strings/index.md new file mode 100644 index 000000000..ea649e902 --- /dev/null +++ b/content/articles/2019/04/hear-hear-for-here-strings/index.md @@ -0,0 +1,122 @@ +--- +url: /articles/2019-04-09-hear-hear-for-here-strings/ +title: Hear, Hear for Here-Strings +authors: + - pwshliquori +date: "2019-04-09T01:40:55+00:00" +categories: + - Tips and Tricks + - Tools +aliases: + - /2019/04/hear-hear-for-here-strings/ +--- + +Running commands in PowerShell that require a format that will not run natively in PowerShell could be a difficult task, or can it? PowerShell provides a way to store, for example, a JSON as a string, enter here-string. A here-string is a single or double quoted string in which the quotation marks are interpreted literally. An example would be invoking a Rest API that requires a JSON body. Lets take a look at an example and see how here-strings work. + +Trying to store JSON in a variable will return the following error: + + +`$Body = +{ + "apple": [ + "red", + "green" + ], + "grape": [ + "green", + "red" + ], + "blueberry": "blue" +} +At line:3 char:12 ++ "apple": [ ++ ~ +Unexpected token ':' in expression or statement. +At line:6 char:6 ++ ], ++ ~ +Missing argument in parameter list. +At line:10 char:6 ++ ], ++ ~ +Missing argument in parameter list. + + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + + FullyQualifiedErrorId : UnexpectedToken +`Oh man... What happened? PowerShell does not understand what is being done and throws an error for an unexpected token. Lets declare this as a here-string by using + + +`@' +`at the start and end of the JSON variable. + + +`$Body = @' +{ + "apple": [ + "red", + "green" + ], + "grape": [ + "green", + "red" + ], + "blueberry": "blue" +} +'@ +`Great! No errors were thrown, but… Why? + +Notice the + + +`@' +`at the beginning and end, this tells PowerShell to create a here-string and store this string in a variable. Also, a rule to follow: the + + +`@' +`must be on their own line at the start and end of the declaration or the here-string will not be declared. + + +`# This will not work, PowerShell will not throw an error, but thinks you are still working to create something. +$Body = @'{ + "apple": [ + "red", + "green" + ], + "grape": [ + "green", + "red" + ], + "blueberry": "blue" +} +'@ +`We can also store variables in a here-string, but that requires double quotes after the + + +`@ +`. The same rules apply as using single quoted here-strings. + + +`$Red = 'red' +$Green = 'green' +$Blue = 'blue' +$Body = @" +{ + "apple": [ + $Red, + $Green + ], + "grape": [ + $Green, + $Red + ], + "blueberry": $Blue +} +"@ +`Now that we built our here-string, we can now invoke a Rest API and do something with it. This will help when a vendor supplies a JSON payload to be used in a Rest API, all that needs to be done is substitute your values in a here-string and invoke the Rest API. As always, practice makes perfect, try running examples in the console before running in a production environment. Here-strings will save you some lines of code and time when building your PowerShell scripts. + +To learn about here-strings, visit Microsoft's documentation on quoting rules. +[https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-6][1] + +Chris Liquori - Twitter: [@pwshliquori][2] + + [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-6 + [2]: https://twitter.com/pwshliquori diff --git a/content/articles/2019/04/icymi-powershell-week-of-12-april-2019/index.md b/content/articles/2019/04/icymi-powershell-week-of-12-april-2019/index.md new file mode 100644 index 000000000..191d80c44 --- /dev/null +++ b/content/articles/2019/04/icymi-powershell-week-of-12-april-2019/index.md @@ -0,0 +1,69 @@ +--- +url: /articles/2019-04-12-icymi-powershell-week-of-12-april-2019/ +title: "ICYMI: PowerShell Week of 12-April-2019" +authors: + - Mark Roloff +date: "2019-04-12T15:00:00+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/04/icymi-powershell-week-of-12-april-2019/ +--- + +Topics include splatting, PSRemoting to Azure VMs, and honey users. + + + +Special thanks to Robin Dadswell and Mark Roloff + +###### [][1][_Moving my blog comments from Disqus to Github issues using PowerShell_][2] {.wp-block-heading} + +by François-Xavier Cat on April 7th + +More than a few fun goodies in here, from working with XML to using the PS GitHub module. + +###### [][3][_PowerShell tricks: Splatting_][4] {.wp-block-heading} + +by Roberth Strand on April 5th + +If you're not already splatting, take a look in here. All the cool kids are doing it and anyone that has to read your scripts later on will likely thank you. It's a very simple, yet seriously versatile addition to your toolbox. + +###### [][5][_PowerShell Basics: Connecting to VMs with Azure PSRemoting_][6] {.wp-block-heading} + +by Michael Bender on April 10th + +Whether from the comfort of your local shell or the Cloud Shell, remote PowerShell to your Azure VMs is quick and easy to get started with. + +###### [][7][_BlueHive_][8] {.wp-block-heading} + +Built with Universal Dashboard, BlueHive is a utility that lets you create and manage honey users in your environment. Thanks for this awesome tool, Lee Berg! + +###### [][9][_Reddit /r/PowerShell - Popular Weekly Post_][10] {.wp-block-heading} + +Less educational or interesting, and more encouraging. If you're on the fence with jumping deeper into PowerShell, here's someone sharing their story of how it helped kick their career up a few notches. + +###### [][11][_Tweet of the Week_][12] {.wp-block-heading} + +Playing with + + +`Invoke-WebRequest +`is a little bit more fun with Chrome's DevTools letting you copy requests to your clipboard. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190412.md#moving-my-blog-comments-from-disqus-to-github-issues-using-powershell + [2]: https://lazywinadmin.com/2019/04/moving_blog_comments.html + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190412.md#powershell-tricks-splatting + [4]: https://blog.destruktive.one/powershell-tricks-splatting/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190412.md#powershell-basics-connecting-to-vms-with-azure-psremoting + [6]: https://techcommunity.microsoft.com/t5/ITOps-Talk-Blog/PowerShell-Basics-Connecting-to-VMs-with-Azure-PSRemoting/ba-p/428403 + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190412.md#bluehive + [8]: https://github.com/leeberg/BlueHive + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190412.md#reddit-rpowershell---popular-weekly-post + [10]: https://old.reddit.com/r/PowerShell/comments/bbz6vj/i_got_a_job_for_my_ability_with_powershell_and_im/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190412.md#tweet-of-the-week + [12]: https://twitter.com/DanielSilv9/status/1116375543581216770 diff --git a/content/articles/2019/04/icymi-powershell-week-of-19-april-2019/index.md b/content/articles/2019/04/icymi-powershell-week-of-19-april-2019/index.md new file mode 100644 index 000000000..116e9e505 --- /dev/null +++ b/content/articles/2019/04/icymi-powershell-week-of-19-april-2019/index.md @@ -0,0 +1,65 @@ +--- +url: /articles/2019-04-19-icymi-powershell-week-of-19-april-2019/ +title: "ICYMI: PowerShell Week of 19-April-2019" +authors: + - Mark Roloff +date: "2019-04-19T15:00:35+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/04/icymi-powershell-week-of-19-april-2019/ +--- + +Topics include DSC, Pester, validation attributes, and Azure AD. + + + +Special thanks to Robin Dadswell and Mark Roloff. + +###### [][1][_Defensive PowerShell_][2] {.wp-block-heading} + +by Christopher Kuech on April 13th + +Did you know that you can use validation attributes outside of a _param_ block? Mind. Blown. + +###### [][3][_Desired State Configuration (DSC) – Get Started_][4] {.wp-block-heading} + +by Nedim Mehic on April 16th + +If you're still looking to get your feet wet with DSC, this is one of the more detailed intros we've run across and is well worth your time. + +###### [][5][_Get Users from Azure AD with a large number of Registered Devices_][6] {.wp-block-heading} + +by Ben Whitmore on April 16th + +A quick and easy way to report on the number of registered devices for multiple users, rather than one at a time. + +###### [][7][_Tweet of the Week_][8] {.wp-block-heading} + +Here's a fun graphical cheatsheet for various PowerShell concepts. + +###### [][9][_Youtube: SoCal PowerShell: Kevin Marquette Unplugged_][10] {.wp-block-heading} + +Kevin Marquette talks some shop before jumping into debugging with VSCode. + +###### [][11][_Youtube: Pester: Why You Should -Be Using Pester with Jonathan Moss_][12] {.wp-block-heading} + +From the Raleigh Triangle User Group, Jonathon Moss will sell you on using Pester. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190419.md#defensive-powershell + [2]: https://medium.com/@cjkuech/defensive-powershell-with-validation-attributes-8e7303e179fd + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190419.md#desired-state-configuration-dsc--get-started + [4]: https://nedimmehic.org/2019/04/16/desired-state-configuration-dsc-get-started/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190419.md#get-users-from-azure-ad-with-a-large-number-of-registered-devices + [6]: https://byteben.com/bb/get-users-from-azure-ad-with-a-large-number-of-registered-devices/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190419.md#tweet-of-the-week + [8]: https://twitter.com/ADTipsTricks/status/664261417588146176 + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190419.md#youtube-socal-powershell-kevin-marquette-unplugged + [10]: https://youtu.be/hRhFwDnneJw + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190419.md#youtube-pester-why-you-should--be-using-pester-with-jonathan-moss + [12]: https://www.youtube.com/watch?v=FP7W4kP7Dig diff --git a/content/articles/2019/04/icymi-powershell-week-of-26-april-2019/index.md b/content/articles/2019/04/icymi-powershell-week-of-26-april-2019/index.md new file mode 100644 index 000000000..314af77e8 --- /dev/null +++ b/content/articles/2019/04/icymi-powershell-week-of-26-april-2019/index.md @@ -0,0 +1,75 @@ +--- +url: /articles/2019-04-26-icymi-powershell-week-of-26-april-2019/ +title: "ICYMI: PowerShell Week of 26-April-2019" +authors: + - Mark Roloff +date: "2019-04-26T15:00:53+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/04/icymi-powershell-week-of-26-april-2019/ +--- + +Topics include building functions for cleaning your $PATH, xplat GUIs with Core, and the EXO module makes its way to the Cloud Shell. + + + +Special thanks to Robin Dadswell, Prasoon Karunan, and Mark Roloff. + +###### [][1][_Introducing PSCVSS: A PowerShell & PowerShell Core Module to calculate a CVSS Score_][2] {.wp-block-heading} + +by Josh Rickard on April 19th + +In the security arena? Being able to locally calculate CVSS scores might be pretty handy for you, then. + +###### [][3][_PowerShell way to get all information about Office 365 Service Health_][4] {.wp-block-heading} + +by Przemyslaw Klys on April 22nd + +The title alone doesn't do much justice to how cool this is. Przemyslaw's new module pulls the service health out and fits it nicely into other visualization tools that he's published. + +###### [][5][_More PowerShell Adventures in Cleaning Your Path_][6] {.wp-block-heading} + +by Jeffrey Hicks on April 24th + +Follow along with Jeff as he walks you through building a few functions that can help you learn a little .NET and how to implement the _WhatIf_ switch. + +###### [][7][_Building Cross-Platform WPF-Style Applications in PowerShell Core_][8] {.wp-block-heading} + +by Adam Driscoll on April 23rd + +Xplatform GUIs are making their way to PS Core. Leveraging the Avalonia project, Adam's latest PowerShell Pro Tools update opens the door to creating XAML windows. + +###### [][9][_Customizing the Title Bar of your PowerShell Console Window_][10] {.wp-block-heading} + +by Patrick Gruenauer on April 23rd + +Want a little personal branding for presentations? Maybe toss something fun or uplifting into your shell's window? Patrick has you covered. + +###### [][11][_Tweet of the Week_][12] {.wp-block-heading} + +Making the Azure Cloud Shell even more appealing, the Exchange Online module is now available there. + +###### [][13][_Youtube: Powershell Universal Dashboard with Adam Driscoll_][14] {.wp-block-heading} + +Speaking at the Austin PSUG, Adam gives a rundown on the Universal Dashboard. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190426.md#introducing-pscvss-a-powershell--powershell-core-module-to-calculate-a-cvss-score + [2]: https://www.secopshub.com/t/introducing-pscvss-a-powershell-powershell-core-module-to-calculate-a-cvss-score/743 + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190426.md#powershell-way-to-get-all-information-about-office-365-service-health + [4]: https://evotec.xyz/powershell-way-to-get-all-information-about-office-365-service-health/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190426.md#more-powershell-adventures-in-cleaning-your-path + [6]: https://jdhitsolutions.com/blog/powershell/6700/more-powershell-adventures-in-cleaning-your-path/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190426.md#building-cross-platform-wpf-style-applications-in-powershell-core + [8]: https://ironmansoftware.com/building-cross-platform-wpf-style-applications-in-powershell-core/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190426.md#customizing-the-title-bar-of-your-powershell-console-window + [10]: https://sid-500.com/2019/04/23/powershell-customizing-the-title-bar-of-your-powershell-console-window/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190426.md#tweet-of-the-week + [12]: https://twitter.com/maertend33/status/1121103069867986944 + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190426.md#youtube-powershell-universal-dashboard-with-adam-driscoll + [14]: https://www.youtube.com/watch?v=5LWXrgstfe8 diff --git a/content/articles/2019/04/icymi-powershell-week-of-5-april-2019/index.md b/content/articles/2019/04/icymi-powershell-week-of-5-april-2019/index.md new file mode 100644 index 000000000..2ecb32f93 --- /dev/null +++ b/content/articles/2019/04/icymi-powershell-week-of-5-april-2019/index.md @@ -0,0 +1,73 @@ +--- +url: /articles/2019-04-05-icymi-powershell-week-of-5-april-2019/ +title: "ICYMI: PowerShell Week of 5-April-2019" +authors: + - Mark Roloff +date: "2019-04-05T15:00:51+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/04/icymi-powershell-week-of-5-april-2019/ +--- + +Topics include remoting with SSH, sending SMS alerts, some live stream coding, and keybinds that you may not have known about. + + + +Content curated by Robin Dadswell and Mark Roloff + +###### [][1][_Master User Creator [PowerShell GUI Software] v2 Update_][2] {.wp-block-heading} + +by Brad Wyatt on April 1st + +MUC, if you haven't seen it, is a powerful little tool that makes account creation in AD or O365 a real snap. + +###### [][3][_The PowerShell Gallery is now more Accessible_][4] {.wp-block-heading} + +by Sydney Smith on April 1st + +Screen readers rejoice! The Gallery has received some usability improvements to make everyone's experience a little nicer. + +###### [][5][_Sending text messages from PowerShell_][6] {.wp-block-heading} + +by Mike Treit on March 30th + +Maybe you get enough emails as it is, so text alerts from your scripts can be a gentler and lighter alternative. + +###### [][7][_Setup Powershell SSH Remoting In Powershell 6_][8] {.wp-block-heading} + +by Thomas Maurer on April 4th + +If you've been curious about using SSH with PowerShell, Thomas has a great step-by-step guide to help you get going. + +###### [][9][_Reddit /r/PowerShell - Popular Weekly Post_][10] {.wp-block-heading} + +Awesome Reddit tips strikes again, as /u/RC-7201 discovers a keybind to clear your screen and more people chime in with their hidden keybind gems. + +###### [][11][_Tweet of the Week_][12] {.wp-block-heading} + +A Docker container loaded up with everything you need to get crackin' with PowerShell development? Yes, please! + +###### [][13][_Twitch: PowerShell Adventures w/ Nate @ SCRT HQ_][14] {.wp-block-heading} + +Hang out with Nate Ferrel while he works through some open issues with the PSGSuite module. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190405.md#master-user-creator-powershell-gui-software-v2-update + [2]: https://www.thelazyadministrator.com/2019/04/01/master-user-creator-powershell-gui-software-v2-update/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190405.md#the-powershell-gallery-is-now-more-accessible + [4]: https://devblogs.microsoft.com/powershell/the-powershell-gallery-is-now-more-accessible/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190405.md#sending-text-messages-from-powershell + [6]: https://mtreit.net/notestoself/2019/03/30/sending-text-messages-from-powershell/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190405.md#setup-powershell-ssh-remoting-in-powershell-6 + [8]: https://www.thomasmaurer.ch/2019/04/setup-powershell-ssh-remoting-in-powershell-6/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190405.md#reddit-rpowershell---popular-weekly-post + [10]: https://old.reddit.com/r/PowerShell/comments/b8y4mx/i_was_today_years_old/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190405.md#tweet-of-the-week + [12]: https://twitter.com/TylerLeonhardt/status/1113078631771799553 + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190405.md#twitch-powershell-adventures-w-nate--scrt-hq + [14]: https://www.twitch.tv/videos/403373735 diff --git a/content/articles/2019/04/learn-to-use-verbose-output-streams-in-your-pester-tests/index.md b/content/articles/2019/04/learn-to-use-verbose-output-streams-in-your-pester-tests/index.md new file mode 100644 index 000000000..ec3155826 --- /dev/null +++ b/content/articles/2019/04/learn-to-use-verbose-output-streams-in-your-pester-tests/index.md @@ -0,0 +1,175 @@ +--- +url: /articles/2019-04-18-learn-to-use-verbose-output-streams-in-your-pester-tests/ +title: Learn To Use Verbose Output Streams In Your Pester Tests +authors: + - Nathaniel Webb (ArtisanByteCrafter) +date: "2019-04-18T19:51:31+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks + - Tutorials +aliases: + - /2019/04/learn-to-use-verbose-output-streams-in-your-pester-tests/ +--- + +I'm going to file this under "Either I'm a genius, or there's a much better way and everyone knows it except for me." + +I recently began adding a suite of Pester tests to one of my projects and I found myself needing to mock some unit tests against a particular function that would modify a variable based on the parameter specified. Since all the functions I write nowadays are considered advanced functions (and yours should be too, they're free!), I discovered a nice way to test the function's actions using the + + +`-Verbose +`stream output. + +> + +> Full source code for these examples is available on the Pester branch of my KaceSMA project [on GitHub](https://github.com/ArtisanByteCrafter/KaceSMA/tree/pester) +> + + +## A Real World Example {.wp-block-heading} + +I'm going to use a public function Get-SmaAsset for this example. For this particular function, I'm wrapping an API call and passing a specific endpoint as a string, determined by the parameter set(s) given. Here is the relevant bit of code: + + +`Begin { + $Endpoint = '/api/asset/assets/' + If ($AssetID) { + $Endpoint = "/api/asset/assets/$AssetID/" + If ($AsBarcodes) { + $Endpoint = "/api/asset/assets/$AssetID/barcodes" + } + } +} +`We see + + +`$Endpoint +`being dynamically defined according to the parameters fed to the parent + + +`Get-SmaAsset +`function. I needed to ensure that the correct value of + + +`$Endpoint +`was being fed to the next part of the chain, which was the + + +`Invoke-RestMethod +`call to the API itself. The last thing I want to debug is why my API call is hitting the wrong endpoint. (Not to mention the potentially disastrous results when HTTP methods other than GET are used!) + +You don't need an intimate knowledge of the project to understand what's going on here - I'm really just wanting to make sure that this particular function only uses a single GET method, and that it calls the correct endpoint. An easy way to do this is by leveraging the verbose output stream to ensure that + + +`Get-SmaAsset +`is in fact, seeking out the correct endpoint with the correct HTTP method. + +Here's part of what the function returns when run verbosely under normal circumstances: + + +`PS> Get-SmaAsset -Server 'https://server.example.com' -Credential (Get-Credential) -Verbose +VERBOSE: Performing the operation "GET /api/asset/assets/" on target "https://server.example.com". +`## Plugging It Into Pester {.wp-block-heading} + +Pester is the perfect tool to test that my API calls go out consistently every time, and to do so I just need to use the Verbose output stream, then mock some response data, and then I should get a pretty clear idea exactly what is going on within my function scope. + +Let's see what the 'Backend Calls' context block looks like for this particular test: + + +`Context 'Backend Calls' { + Mock New-ApiGetRequest { } -ModuleName KaceSMA + Mock New-ApiPostRequest { } -ModuleName KaceSMA + Mock New-ApiPutRequest { } -ModuleName KaceSMA + Mock New-ApiDeleteRequest { } -ModuleName KaceSMA + $MockCred = New-Object System.Management.Automation.PSCredential ('fooUser', (ConvertTo-SecureString 'bar' -AsPlainText -Force)) + $GenericParams = @{ + Server = 'https://foo' + Credential = $MockCred + Org = 'Default' + QueryParameters = "?paging=50" + } + $AssetIDParams = @{ + Server = 'https://foo' + Credential = $MockCred + Org = 'Default' + AssetID = '1234' + QueryParameters = "?paging=50" + } + $AsBarcodesParams = @{ + Server = 'https://foo' + Credential = $MockCred + Org = 'Default' + AssetID = '1234' + AsBarcodes = $True + QueryParameters = "?paging=50" + } + Get-SmaAsset @AssetIDParams + It 'should call New-ApiGETRequest' { + Assert-MockCalled -CommandName New-ApiGETRequest -ModuleName KaceSMA -Times 1 + } + It 'should not call additional HTTP request methods' { + $Methods = @('POST', 'DELETE', 'PUT') + Foreach ($Method in $Methods) { + Assert-MockCalled -CommandName ("New-Api$Method" + "Request") -ModuleName KaceSMA -Times 0 + } + } + It "should call generic endpoint if AssetID parameter is NOT specified" { + $Generic = $(Get-SmaAsset @GenericParams -Verbose) 4>&1 + $Generic | Should -Be 'Performing the operation "GET /api/asset/assets" on target "https://foo".' + } + It "should call AssetID endpoint if AssetID parameter is specified" { + $WithAssetID = $(Get-SmaAsset @AssetIDParams -Verbose) 4>&1 + $WithAssetID | Should -Be 'Performing the operation "GET /api/asset/assets/1234" on target "https://foo".' + } + It "should call AsBarcodes endpoint if AsBarcodes parameter is specified" { + $AsBarcodes = $(Get-SmaAsset @AsBarcodesParams -Verbose) 4>&1 + $AsBarcodes | Should -Be 'Performing the operation "GET /api/asset/assets/1234/barcodes" on target "https://foo".' + } +} +`Now, let's focus on a single test. This is where the 'cool' factor of output streams comes into play. $Generic performs a mocked call to our function, which has a curious bit at the end, + + +`4>&1 +`. + + +`It "should call generic endpoint if AssetID parameter is NOT specified" { + $Generic = $(Get-SmaAsset @GenericParams -Verbose) 4>&1 + $Generic | Should -Be 'Performing the operation "GET /api/asset/assets" on target "https://foo".' + } +`What this does is take the verbose output stream ( + + +`4 +`) and redirect it to stdout ( + + +`>&1 +`) for our test to report on. The beauty of this is in it's simplicity. We don't have to modify anything in our code itself since it's an advanced function, and + + +`-Verbose +`is included by default. + +When we do this we get several key benefits. By explicitly stating the known-good verbose output in our tests, it would begin failing if any of these scenarios occurred in our codebase: + + + - + If the endpoint is changed intentionally + + + - + If the endpoint selection logic is flawed + + + - + If the HTTP method declared is changed + + + - + If the HTTP Method is ever used more than once + + + +I hope this has been helpful in exploring how the verbose output stream can help detect stealthy bugs in your codebase. diff --git a/content/articles/2019/04/phenomenal-number-of-acls-itty-bitty-living-space/index.md b/content/articles/2019/04/phenomenal-number-of-acls-itty-bitty-living-space/index.md new file mode 100644 index 000000000..023abe035 --- /dev/null +++ b/content/articles/2019/04/phenomenal-number-of-acls-itty-bitty-living-space/index.md @@ -0,0 +1,100 @@ +--- +url: /articles/2019-04-26-phenomenal-number-of-acls-itty-bitty-living-space/ +title: Phenomenal number of ACLs, itty-bitty living space +authors: + - Mark Roloff +date: "2019-04-26T16:19:53+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +legacy_featured_image: /wp-content/uploads/2019/04/itty-bitty_living_space.png +aliases: + - /2019/04/phenomenal-number-of-acls-itty-bitty-living-space/ +--- + +I recently had a need to backup file and folder ACLs for a client that would then need to restore them to their original objects following a hardware upgrade that would wipe them out. Easy enough, but the catch was that there was 1.5 million of them. Fortunately, getting ACLs in PowerShell is easy. + + +`PS > Get-Acl -Path somefile.txt + Directory: C:\ +Path Owner Access +---- ----- ------ +somefile.txt BUILTIN\Administrators BUILTIN\Administrators Allow... +`See? + +Now, if you needed multiple ACLs, say, all 1.5 million of them on a file share, you could use **Get-ChildItem** to feed files and folders to **Get-Acl**. But then what? **Export-Clixml** is a generally great way to convert a PowerShell object to XML and save it to file. + + +`PS > Get-Acl -Path somefile.txt | Export-Clixml -Path AclBackup.ps1xml +`You then get an ugly monstrosity that looks like this. + +![](https://powershell.org/wp-content/uploads/2019/04/image.png) + +In my case, there's a serious problem with this approach. Ballpark 100 lines per ACL x 1.5 million filesystem objects = 150 million lines of backup data, and my small test on several thousand files and folders was already about 32MB on disk. In production, it would balloon to a hefty size and this needed to run on a server with 3.5GB of RAM and space constraints. Yeah... I'm not offering that as a solution to anybody. + +Luckily, we can do a little dotnet black magic to trim this down to something much more manageable. Thanks to sk82jack and Chris Dent in the PowerShell Discord, I learned that the [SDDL][1] is the only component that's really necessary for recreating the ACL object. They look like this: + + +`O:BAG:S-1-5-21-1192226125-608885206-469304335-1001D:AI(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU) +`File ACLs are **[System.Security.AccessControl.FileSecurity]** type objects and folder ACLs are **[System.Security.AccessControl.DirectorySecurity]** type objects. + + +`PS > [System.Security.AccessControl.FileSecurity]::new() +Path Owner Access +---- ----- ------ +`Instantiating one of these just gives us a blank object, but we can feed the SDDL as a string to the **SetSecurityDescriptorSddlForm()** method in order to populate it. + + +`PS > $a = [System.Security.AccessControl.FileSecurity]::new() +PS > $a.SetSecurityDescriptorSddlForm('O:BAG:S-1-5-21-1192226125-608885206-469304335-1001D:AI(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)') +PS > $a +Path Owner Access +---- ----- ------ + NT SERVICE\TrustedInstaller NT AUTHORITY\SYSTEM Allow Modify, Synchronize... +`I haven't seen a way to fill in the path but that's easily worked around. Armed with this information, I would only need to backup the full path of each object, whether it is a file or a folder, and the SDDL. + + +`Get-ChildItem -Path C:\apps -Recurse | Foreach-Object { + [pscustomobject]@{ + Path = $_.Fullname + IsContainer = $_.PSIsContainer + Sddl = $(Get-Acl -Path $_.Fullname).Sddl + } +} +Path IsContainer Sddl +---- ----------- ---- +C:\apps\aclbackup.ps1xml False O:S-1-5-21-1192226125-608885206-469304335... +C:\apps\az_tenant2tenant.ps1 False O:BAG:S-1-5-21-1192226125-608885206-46930... +C:\apps\bb_saml_resp_success.xml False O:S-1-5-21-1192226125-608885206-469304335... +C:\apps\somefile.txt False O:S-1-5-21-1192226125-608885206-469304335... +C:\apps\testvnet.json False O:BAG:S-1-5-21-1192226125-608885206-46930... +`Now we're getting somewhere. Flat objects like this will export nicely to CSV, which would be significantly smaller on disk than the ps1xml we started with. When I run the code above against a directory tree with about 56k objects and pipe it to **Export-Csv**, I end up with a 16MB CSV. Some PowerShell napkin math to double-check this... + + +`PS > 16MB / 56000 +299.593142857143 # Just shy of 300 bytes per ACL +PS > (300 * 1500000) / 1MB # Per ACL size by the number of ACLs, converted to MBs +429.153442382813 +`... So around 430MB. That sounds like a much more reasonable backup size to me and it won't chew through what little RAM I have to work with. If we went with **Export-Clixml**, it would have ended up around 8GB, taken significantly longer to run, and probably would have crashed. + +So how would we restore these? + + +`$ACLs = Import-Csv -Path AclsBackup.csv +foreach ($ACL in $ACLs) { + switch ($ACL.IsContainer) { + $true { + $AclObj = [System.Security.AccessControl.DirectorySecurity]::new() + $AclObj.SetSecurityDescriptorSddlForm($ACL.Sddl) + Set-Acl -Path $ACL.Path -AclObject $AclObj + } + $false { + $AclObj = [System.Security.AccessControl.FileSecurity]::new() + $AclObj.SetSecurityDescriptorSddlForm($ACL.Sddl) + Set-Acl -Path $ACL.Path -AclObject $AclObj + } + } +} +`And simple as that the ACLs right back where they came from. + + [1]: https://docs.microsoft.com/en-us/windows/desktop/secauthz/security-descriptor-definition-language-for-conditional-aces- diff --git a/content/articles/2019/05/__trashed/index.md b/content/articles/2019/05/__trashed/index.md new file mode 100644 index 000000000..7cee1daff --- /dev/null +++ b/content/articles/2019/05/__trashed/index.md @@ -0,0 +1,63 @@ +--- +url: /articles/2019-05-30-__trashed/ +title: "PowerShell Summit: A First Time Experience" +authors: + - Mark Roloff +date: "2019-05-30T05:13:01+00:00" +categories: + - PowerShell for Admins + - PowerShell Summit +legacy_featured_image: /wp-content/uploads/2018/08/Full-Logo-No-year.png +aliases: + - /2019/05/__trashed/ +--- + +It's been a few weeks since Summit and I feel like my mind has finally started to settle from all of the ideas that I came back with. Plus, being away from home for a week means I had a lot of domestic work and daddy time to catch up on. When Will asked for volunteers to write about their first time experience, I decided to see if I could offer my take on the matter considering gulf between what I expected to get and what I ended up getting. + +### Expectations going in {.wp-block-heading} + +I've known about Summit for a few years, so had an idea of what I was flying off to. Prior year's sessions are easily available on YouTube and I've picked my way through them for particular topics that I've had a need to learn about. I've also seen plenty of post-Summit conversation about how much people have enjoyed it, how valuable the connections they made are, and how they can't wait to go back. I never dug terribly deep into it, though. + +My expectations were that I would arrive, awkwardly socialize with colleagues, maybe some sales or marketing folks, exchange company info with a phone number that I never answer, and attend sessions where I'd learn some cool new things. + +Enjoyably, I was quite wrong... + +### Straight to it {.wp-block-heading} + +I won't mince words here. If you're looking for a conference where the latest doodads and features (available in 6-12 months, I'm looking at you Ignite) are in your face, move along. This isn't it. There aren't really any sales or marketing at Summit (some sponsor booths, but you really have to seek them out). Unless you want to count Summit talking about how great Summit is for you, but I'm chalking that up as more a statement of fact than any kind of pitch. + +When Don Jones gave his keynote, he offered a lot of poignant observations about the state of our industry and where ops fits in with an ever-changing landscape that is more and more dominated by software methodologies. He talked about not letting your job own your career, about taking control of it for yourself, and about building a supportive community around the ownership and growth of our careers. It was all about climbing that pyramid toward self-actualization, and that's where communities like Summit seek to create an environment to help you along that climb. + +By the end of the first afternoon, I was already feeling pretty jazzed up on that alone. + + + ![](https://powershell.org/wp-content/uploads/2019/05/no_ordinary_conference.gif) + + +### Sessions, hallway talks, and stickers {.wp-block-heading} + +Sessions are Summit's bread and butter, and definitely the primary place to see examples of cool tools, best practices, and novel ways of approaching problems that you may not have even known you had. + +Leading up to the event, I spent time in the mobile app going over the sessions to plan out my agenda. Unfortunately, and this is a good problem to have, there was often more than one that I wanted to see during any given time slot. So, I took some advice that I was given during Sunday's reception; I sat in the ones that felt I would potentially want to ask questions in. This, along with prioritizing those sessions that I felt would be most beneficial to the direction I hope to steer my career, ended up working out pretty well for me. + +Each presenter that I saw, and I'm certainly not discounting those I didn't, did a fantastic job of really making their material something that I walked out thirsting for more of. And these sessions really dominated a lot of my thoughts for several days after getting home. My coworker (whom also attended) and I started to immediately brainstorm on how we could apply a lot of what was learned to our workflows and future projects, and I think our boss is both terrified and excited by that. + +Between sessions though, you've got a good opportunity to quickly chat up other attendees in the hall (or the speaker you just saw). People discussing the talk they saw, mentioning details of how they use $x in their environments... Before you know it, you're having mini-sessions between sessions and making mental notes to catch up with particular people during lunch r after-hours activities for more brain-picking. If you follow the community online, it's also common to run across the bloggers and maintainers whose work you probably use frequently. It's cool; they don't bite and everyone is happy to hear about how their contributions have helped others, and a lot of them want to know about _you_ too. + +Stickers, now, are a curious point and a surprisingly omnipresent part of the event. If you think you're not really into stickers, you may very well leave Summit changed in that respect. They're everywhere. Custom stickers, vendor stickers, event stickers, stickers getting ooh'd and ah'd over like grade school kids and their pogs, and whenever someone enters a room to drop a pile on a table, people flock over them like pigeons at the park. It's a fun and geeky collectible to be proudly displayed on laptops or peg boards back home, and you may quickly find yourself hunting down the creators of certain designs. This, again, leads to making even more connections and getting to know the community. + +### A little coffee and casual chat {.wp-block-heading} + +The side sessions are late/last minute planned break outs that would typically not be recorded. Some examples included a meet and greet with the event's organizers, a meeting of user group organizers, and a brief introduction to PowerShell live streaming. Depending on your level of interest, these could easily be more valuable to you than the standard sessions and I decided to give them a little focus on my last day, when Brandon Lundt hosted a lean coffee session. + +This was an interesting format that I had never seen or heard of before; they honestly just had me at "coffee" and "deep discussion" in the description. This is how it works... + +Everyone writes a few topics on paper, puts them into a hat, those get sorted, and we'd move through them in order of popularity. Majority votes would keep a topic alive or move to the next every 10-15 minutes. + +What we spent most of our time on was concerns around community engagement in user groups. Having recently taken up a co-leadership role in Denver's user group, my interest was piqued and I learned that lots of groups share similar struggles... Location, expanding their number of regulars with fresh faces, topics... And I walked away with some good ideas for addressing some of that. One of my favorites being a semi-regular event to simply get newcomers introduced to PowerShell, and once they've tasted the sweet freedom of automation, give them more. We may also try rotating our location every month or so to better appeal to more people across our sprawling city. Definitely plenty to discuss with my other partners in crime at the group. + +### Departing impressions {.wp-block-heading} + +I have difficulty imagining that anyone could attend Summit and _not_ walk away feeling at least a little humbled by how invested in itself this community is. Everybody you meet is happy to share their experiences and knowledge, eager to help others learn, and enthusiastic to see others grow. And I left with a strong desire to see if we can bring some of that flavor into our local group, and provide some support and guidance for people looking to own their careers. + +I'm definitely hoping to attend again next year and I'd absolutely encourage anyone else to as well. Even if you feel like a bit of a wallflower, there's tremendous value in it for you; both personally and professionally. diff --git a/content/articles/2019/05/_index.md b/content/articles/2019/05/_index.md new file mode 100644 index 000000000..f3d06a03d --- /dev/null +++ b/content/articles/2019/05/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from May 2019" +description: "PowerShell.org Articles published in May 2019." +--- diff --git a/content/articles/2019/05/icymi-powershell-week-of-10-may-2019/index.md b/content/articles/2019/05/icymi-powershell-week-of-10-may-2019/index.md new file mode 100644 index 000000000..1f8cc24e7 --- /dev/null +++ b/content/articles/2019/05/icymi-powershell-week-of-10-may-2019/index.md @@ -0,0 +1,65 @@ +--- +url: /articles/2019-05-10-icymi-powershell-week-of-10-may-2019/ +title: "ICYMI: PowerShell Week of 10-May-2019" +authors: + - Mark Roloff +date: "2019-05-10T15:00:16+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/05/icymi-powershell-week-of-10-may-2019/ +--- + +Topics include PowerShell Summit, finding account lockouts, certs, and learning PS via Pester. + +Content curated by Robin Dadswell, Prasoon Karunan, and Mark Roloff. + +###### [][1][_Takeaways from the PowerShell + DevOps Global Summit 2019_][2] {.wp-block-heading} + +by Matt Bobke on May 2nd + +If you couldn't make it to Summit, fret not! While waiting for videos you can read about it from attendees, like Matt, whom participated in the OnRamp track. + +###### [][3][_Execute a script block accepting pipeline input and show your progress_][4] {.wp-block-heading} + +by Yves Rosius on May 5th + +_Show-Progress_ is essentially a clever little wrapper around _Write-Progress_ but it works in the pipeline. Handy for those long-running one-liners. + +###### [][5][_Tracking down bad password attempts with PowerShell_][6] {.wp-block-heading} + +by Anthony Howell on May 9th + +Keeping an eye on account lockouts can give you a heads up in case of malicious shenanigans or just incoming help desk calls. Anthony walks us through writing a function that can quickly pull that information together. + +###### [][7][_Powershell Generate Self-signed certificate with Self-Signed Root CA Signer_][8] {.wp-block-heading} + +by Kunal Udapi on May 5th + +If self-signed certs are on your agenda, Kunal has your quick and dirty intro to making and installing them. + +###### [][9][_Reddit /r/PowerShell - Popular Weekly Post_][10] {.wp-block-heading} + +Curious about complementary languages or knowledge-areas once you're comfortable with PowerShell? Stop in this thread for a few ideas. + +###### [][11][_Youtube: Learn PowerShell concepts using Pester! with Joel Sallow_][12] {.wp-block-heading} + +Learning PowerShell almost goes hand-in-hand with Pester these days. Since you need to learn both, why not all at once? + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190510.md#takeaways-from-the-powershell--devops-global-summit-2019 + [2]: https://mattbobke.com/2019/05/02/takeaways-from-the-powershell-+-devops-global-summit-2019/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190510.md#execute-a-script-block-accepting-pipeline-input-and-show-your-progress + [4]: https://yvez.be/2019/05/05/execute-a-script-block-accepting-pipeline-input-and-show-your-progress/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190510.md#tracking-down-bad-password-attempts-with-powershell + [6]: https://theposhwolf.com/howtos/Get-ADUserBadPasswords/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190510.md#powershell-generate-self-signed-certificate-with-self-signed-root-ca-signer + [8]: http://vcloud-lab.com/entries/powershell/powershell-generate-self-signed-certificate-with-self-signed-root-ca-signer + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190510.md#reddit-rpowershell---popular-weekly-post + [10]: https://old.reddit.com/r/PowerShell/comments/bl13qi/sysadmin_learning_powershell_what_other_languages/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190510.md#youtube-learn-powershell-concepts-using-pester-with-joel-sallow + [12]: https://www.youtube.com/watch?v=ahYfLzqKDM0 diff --git a/content/articles/2019/05/icymi-powershell-week-of-17-may-2019/index.md b/content/articles/2019/05/icymi-powershell-week-of-17-may-2019/index.md new file mode 100644 index 000000000..f686b4d1b --- /dev/null +++ b/content/articles/2019/05/icymi-powershell-week-of-17-may-2019/index.md @@ -0,0 +1,74 @@ +--- +url: /articles/2019-05-17-icymi-powershell-week-of-17-may-2019/ +title: "ICYMI: PowerShell Week of 17-May-2019" +authors: + - Mark Roloff +date: "2019-05-17T15:00:32+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/05/icymi-powershell-week-of-17-may-2019/ +--- + +Topics include working with the Graph API, Chocolatey, jazzing up your functions with pipeline support, and shrinking VMDKs. + +Special thanks to Robin Dadswell, Prasoon Karunan V, and Mark Roloff. + +###### [][1][_How to shrink VMDK with a couple of PowerShell scripts?_][2] {.wp-block-heading} + +by Kevin Soltow on May 8th + +Not just a set of useful scripts for anyone still working in a space-constrained environment, but a great bit of interesting detail has also gone into this. + +###### [][3][_Powershell Script - MassDownloader - Efficient, Automated, Fault Tolerant, idempotent downloader with real time metrics_][4] {.wp-block-heading} + +by Bryan Vine on May 12th + +Taking BITS to the next level, Bryan has a nice script that automates some of the features and adds a progress indicator for each download. + +###### [][5][_Advanced PowerShell Functions: Begin to Process to End_][6] {.wp-block-heading} + +by Brittney Ryn on May 13th + +Interested in making your functions work in a pipeline? Brittney has put together an excellent guide to understanding how to do this, as well as a peek into some of the under-the-hood behavior. + +###### [][7][_PowerShell Module For JSON Schema Validation_][8] {.wp-block-heading} + +by Tao Yang on May 12th + +Tao needed to validate multiple JSON files, so he did what any self-respecting scripter would do. He wrote a new function that leverages Core's native _Test-Json_ in combination with Pester to validate an entire directory of files. + +###### [][9][_PowerShell, MS Graph API, Azure Automation, and Intune_][10] {.wp-block-heading} + +by Timothy Gruber on May 8th + +Knowing how to work with Graph opens up a lot of cool doors for your projects and Timothy's guide is a fantastic place to start. + +###### [][11][_Tweet of the Week_][12] {.wp-block-heading} + +Did you know that PowerShell Core has some significant performance improvements over 5.1? @jeremytbrun stumbled across the enhancements in _Group-Object_ after making the switch. + +###### [][13][_Youtube: Chocolatey: From zero to software deployment hero in 60 minutes!_][14] {.wp-block-heading} + +Tired of installing applications the hard way? Take a little tour of Chocolatey with Steven Valdinger and learn to do it like the pros! + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190517.md#how-to-shrink-vmdk-with-a-couple-of-powershell-scripts + [2]: https://www.vmwareblog.org/shrink-vmdk-couple-powershell-scripts/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190517.md#powershell-script---massdownloader---efficient-automated-fault-tolerant-idempotent-downloader-with-real-time-metrics + [4]: https://www.bryanvine.com/2019/05/powershell-script-massdownloader.html?m=1 + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190517.md#advanced-powershell-functions-begin-to-process-to-end + [6]: https://www.sapien.com/blog/2019/05/13/advanced-powershell-functions-begin-to-process-to-end/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190517.md#powershell-module-for-json-schema-validation + [8]: https://blog.tyang.org/2019/05/12/powershell-module-for-json-schema-validation/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190517.md#powershell-ms-graph-api-azure-automation-and-intune + [10]: https://timothygruber.com/scripts/powershell/powershell-ms-graph-api-azure-automation-and-intune/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190517.md#tweet-of-the-week + [12]: https://twitter.com/jeremytbrun/status/1126895640674488321 + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190517.md#youtube-chocolatey-from-zero-to-software-deployment-hero-in-60-minutes + [14]: https://www.youtube.com/watch?v=5pgLPgIO7fI diff --git a/content/articles/2019/05/icymi-powershell-week-of-24-may-2019/index.md b/content/articles/2019/05/icymi-powershell-week-of-24-may-2019/index.md new file mode 100644 index 000000000..896f9406f --- /dev/null +++ b/content/articles/2019/05/icymi-powershell-week-of-24-may-2019/index.md @@ -0,0 +1,68 @@ +--- +url: /articles/2019-05-24-icymi-powershell-week-of-24-may-2019/ +title: "ICYMI: PowerShell Week of 24-May-2019" +authors: + - Mark Roloff +date: "2019-05-24T15:00:16+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +aliases: + - /2019/05/icymi-powershell-week-of-24-may-2019/ +--- + +Topics include unit testing your NetApp, logging, Office templates, and \*DRUM ROLL\* recordings from Summit! + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, and Mark Roloff + +###### [][1][_ONTAP Configuration Compliance Auditing with PowerShell and Pester_][2] {.wp-block-heading} + +by Donny Lang on May 19th + +Validating that your infrastructure is configured as expected at any given time is a valuable skill these days. Donny goes into detail on how he combines Pester with the NetApp PowerShell Toolkit to make sure everything as it should be. + +###### [][3][_Producing Live Visuals From a PowerShell REST API_][4] {.wp-block-heading} + +by James Montgomery on May 17th + +Universal Dashboard + vis.js -eq A pretty cool way to build visualizations of relationships between sets of data. + +###### [][5][_Using the AST to Find Module Dependencies in PowerShell Functions and Scripts_][6] {.wp-block-heading} + +by Mike F Robbins on May 17th + +Showcasing his MrModuleBuildTools module, Mike demonstrates how easy it is (and how _powerful_ the AST is) to list out required modules, private functions, or even function definitions in a directory. + +###### [][7][_Office Templates in the Cloud_][8] {.wp-block-heading} + +by Michael Mardahl on May 21st + +If you're itching for a little automated distribution of Office templates in your company, Michael has worked out a method of getting them into users' hands via OneDrive with this script. + +###### [][9][_PowerShell: When and Where Writing Logs Matters_][10] {.wp-block-heading} + +by Paolo Frigo on May 21st + +You do implement logging in your scripts, right? Shh... I won't tell anyone. Paolo makes a great case for why we should be doing it more often though, and introduces several methods that can be used to get there. + +###### [][11][_PowerShell + DevOps Global Summit 2019_][12] {.wp-block-heading} + +Session recordings from this year's Summit went live this week! + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190524.md#ontap-configuration-compliance-auditing-with-powershell-and-pester + [2]: https://www.langhq.com/2019/05/ontap-configuration-compliance-auditing.html + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190524.md#producing-live-visuals-from-a-powershell-rest-api + [4]: https://ja.mesmontgomery.co.uk/2019/05/producing-live-visuals-from-a-powershell-rest-api/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190524.md#using-the-ast-to-find-module-dependencies-in-powershell-functions-and-scripts + [6]: https://mikefrobbins.com/2019/05/17/using-the-ast-to-find-module-dependencies-in-powershell-functions-and-scripts/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190524.md#office-templates-in-the-cloud + [8]: https://www.iphase.dk/office-templates-in-the-cloud/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190524.md#powershell-when-and-where-writing-logs-matters + [10]: https://www.scriptinglibrary.com/languages/powershell/powershell-when-and-where-writing-logs-matters/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190524.md#powershell--devops-global-summit-2019 + [12]: https://www.youtube.com/playlist?list=PLfeA8kIs7Cocir1-TuSN3mOnj3qzyRShA diff --git a/content/articles/2019/05/icymi-powershell-week-of-3-may-2019/index.md b/content/articles/2019/05/icymi-powershell-week-of-3-may-2019/index.md new file mode 100644 index 000000000..bdc5dff92 --- /dev/null +++ b/content/articles/2019/05/icymi-powershell-week-of-3-may-2019/index.md @@ -0,0 +1,81 @@ +--- +url: /articles/2019-05-03-icymi-powershell-week-of-3-may-2019/ +title: "ICYMI: PowerShell Week of 3-May-2019" +authors: + - Robin Dadswell +date: "2019-05-03T14:20:27+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/05/icymi-powershell-week-of-3-may-2019/ +--- + +Topics include GUI development, Azure Cloud Shell, Live streaming, Azure functions and more! + + + +Special thanks to Mark Roloff and Robin Dadswelll + +###### [][1][_New Video - Handling Progress with a Background Job in a GUI Application_][2] {.wp-block-heading} + +by Max Trinidad on May 1st + +Learn how to create forms and have tasks running behind them with Sapien + +###### [][3][_Deploy SSIS Packages with PowerShell .ISPAC Deployment, using the SSIS Provider_][4] {.wp-block-heading} + +by Aaron Neslon on May 1st + +Learn an easy and repeatable way to deploy SSIS packages with PowerShell + +###### [][5][_Visualising your DNS cache with PSGraph_][6] {.wp-block-heading} + +by James Montgomery on April 26th + +Have a bit of fun with the PSGraph model and your DNS cache, who knows what more can be done from here! + +###### [][7][_Using PowerShell with Azure Cloud Shell_][8] {.wp-block-heading} + +by Michael Bender on April 27th + +There are many ways to switch to PowerShell within the Azure Cloud Shell, find out more about them here! + +###### [][9][_Public Preview of PowerShell in Azure Functions 2.x_][10] {.wp-block-heading} + +by Joey Aiello on April 29th + +An announcement from the project team for PowerShell Core + +###### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} + +Have a look through some suggestions for beginners or help out someone new, either way it's great to see the community helping one another out! + +###### [][13][_Tweet of the Week_][14] {.wp-block-heading} + +A quick start quide to getting started streaming PowerShell live! + +###### [][15][_Youtube: PSKoans: Learn PowerShell concepts using Pester! with Joel Sallow_][16] {.wp-block-heading} + +A forray into PSKoans, the goal of the PowerShell koans is to teach you PowerShell by presenting you with a set of questions. Each kōan (each question) is represented by a failing Pester test. Your goal is to make those tests pass by filling out the correct answer, or writing the correct code. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190503.md#new-video---handling-progress-with-a-background-job-in-a-gui-application + [2]: https://www.sapien.com/blog/2019/05/01/new-video-handling-progress-with-a-background-job-in-a-gui-application/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190503.md#deploy-ssis-packages-with-powershell-ispac-deployment-using-the-ssis-provider + [4]: http://sqlvariant.com/2019/05/deploy-ssis-packages-with-powershell-ispac-deployment-using-the-ssis-provider/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190503.md#visualising-your-dns-cache-with-psgraph + [6]: https://ja.mesmontgomery.co.uk/2019/04/visualising-your-dns-cache-with-psgraph/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190503.md#using-powershell-with-azure-cloud-shell + [8]: https://dev.to/azure/using-powershell-with-azure-cloud-shell-4iio + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190503.md#public-preview-of-powershell-in-azure-functions-2x + [10]: https://devblogs.microsoft.com/powershell/public-preview-of-powershell-in-azure-functions-2-x/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190503.md#reddit-rpowershell---most-popular-weekly-post + [12]: https://www.reddit.com/r/PowerShell/comments/bk1ic1/powershell_for_beginners/ + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190503.md#tweet-of-the-week + [14]: https://twitter.com/PowerShellLive/status/1124052193060032512 + [15]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190503.md#youtube-pskoans-learn-powershell-concepts-using-pester-with-joel-sallow + [16]: https://www.youtube.com/watch?v=ahYfLzqKDM0 diff --git a/content/articles/2019/05/icymi-powershell-week-of-31-may-2019/index.md b/content/articles/2019/05/icymi-powershell-week-of-31-may-2019/index.md new file mode 100644 index 000000000..589c9efe6 --- /dev/null +++ b/content/articles/2019/05/icymi-powershell-week-of-31-may-2019/index.md @@ -0,0 +1,75 @@ +--- +url: /articles/2019-05-31-icymi-powershell-week-of-31-may-2019/ +title: "ICYMI: PowerShell Week of 31-May-2019" +authors: + - Mark Roloff +date: "2019-05-31T15:00:46+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/10/default-image.png +aliases: + - /2019/05/icymi-powershell-week-of-31-may-2019/ +--- + +Topics include the PowerShell 7 preview, exporting SCCM task sequences, integration testing, and cloud automation. + + + +Content curated by Robin Dadswell, Prasoon Karunan V, and Mark Roloff. + +###### [][1][_Follow this step-by-step guide to use AWS Lambda with PowerShell_][2] {.wp-block-heading} + +by Prateek Singh on May 27th + +A great and detailed starting point for Lambda Functions, and all from the shell. + +###### [][3][_An Example Azure DevOps Build Pipeline for PowerShell modules_][4] {.wp-block-heading} + +by Adam Rush on May 27th + +If you're looking to dip a toe into the current best practice for building modules, this blog from Adam is a good place to start. + +###### [][5][_Export Task Sequences, Packages, Baselines with Logging_][6] {.wp-block-heading} + +by Gary Blok on May 25th + +For those in the SCCM world, Gary's script works through a handy process of exporting task sequences and comparing them to a backed up copy to determine if any changes have been made. There's lots of nice little nuggets in here. + +###### [][7][_PowerShell – Testing endpoints that perform Anti-forgery verification_][8] {.wp-block-heading} + +by Stephen Owen on May 29th + +Testing is so hot right now, and Stephen has a pretty cool example of integration testing to validate that a web app is properly catching CSRF attacks. + +###### [][9][_PowerShell 7 Road Map_][10] {.wp-block-heading} + +by Steve Lee on May 30th + +PowerShell 7 is coming! The first preview version is out. The road map is here. There're some exciting changes with this, including line continuation with the pipe at the start of a newline. + +###### [][11][_Reddit /r/PowerShell - Script Sharing_][12] {.wp-block-heading} + +/u/atoomepuu shares a great little script with a WPF GUI for viewing and removing user profiles. + +###### [][13][_Podcast: CloudSkills.fm Ep.23: Cloud Development and Automation with PowerShell_][14] {.wp-block-heading} + +If you haven't listened to Mike Pfeiffer's podcast, it's well worth your time. This episode features MVP Adam Driscoll, of Universal Dashboard and PowerShell Pro Tools fame. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190531.md#follow-this-step-by-step-guide-to-use-aws-lambda-with-powershell + [2]: https://searchaws.techtarget.com/tutorial/Follow-this-step-by-step-guide-to-use-AWS-Lambda-with-PowerShell + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190531.md#an-example-azure-devops-build-pipeline-for-powershell-modules + [4]: https://adamrushuk.github.io/example-azure-devops-build-pipeline-for-powershell-modules/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190531.md#export-task-sequences-packages-baselines-with-logging + [6]: https://garytown.com/export-task-sequences-packages-baselines-with-logging + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190531.md#powershell--testing-endpoints-that-perform-anti-forgery-verification + [8]: https://foxdeploy.com/2019/05/29/powershell-testing-endpoints-that-perform-anti-forgery-verification/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190531.md#powershell-7-road-map + [10]: https://devblogs.microsoft.com/powershell/powershell-7-road-map/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190531.md#reddit-rpowershell---script-sharing + [12]: https://old.reddit.com/r/PowerShell/comments/bslu5n/powershell_script_to_view_and_delete_local/ + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190531.md#podcast-cloudskillsfm-ep23-cloud-development-and-automation-with-powershell + [14]: https://cloudskills.fm/023 diff --git a/content/articles/2019/05/summit-2020-a-new-addition/index.md b/content/articles/2019/05/summit-2020-a-new-addition/index.md new file mode 100644 index 000000000..bfa794ea6 --- /dev/null +++ b/content/articles/2019/05/summit-2020-a-new-addition/index.md @@ -0,0 +1,37 @@ +--- +url: /articles/2019-05-06-summit-2020-a-new-addition/ +title: Summit 2020 – A New Addition +authors: + - Will Anderson +date: "2019-05-06T16:00:29+00:00" +categories: + - Announcements + - PowerShell Summit +aliases: + - /2019/05/summit-2020-a-new-addition/ +--- + +Last week at the PowerShell + DevOps Global Summit, we announced the dates for next year's summit. The event will again be held at the Meydenbauer Center in Bellevue, Washington on April 27th to April 30th. + +**DevOps + Automation Summit - Nashville** + +We are also proud to announce that our flagship summit event would be getting a new addition to the family in the form of the DevOps + Automation Summit being held on October 21st to October 23rd, 2020 at the Renaissance Hotel in Downtown Nashville! + +![](https://powershell.org/wp-content/uploads/2019/04/image-1-1024x275.png) * +* + +A lot of thought went into the decision to launch a new event. This last year, the PowerShell + DevOps Global Summit again exceeded expectations by not only selling out a full month ahead of last year's event, but we had over 250 people on the waiting list for tickets. + +There has also been increased demand for broader DevOps content beyond PowerShell, and with us reaching the upper limit of capacity at the primary event, it became a challenge to introduce new content. For every session of new content that we would add, we would have to take a slot away from our primary focus in Bellevue, which is PowerShell. + +**So who should attend which conference?** + +Ideally, you could attend both! These two events aren't duplicates of each other, but rather are designed to be complimentary. But to break it down a bit easier, the PowerShell + DevOps Summit will remain the focus for an admin whose job is 70% or more PowerShell-centric, and maybe doing some DevOps and cloud work. Whereas, the DevOps + Automation Summit will be much more focused on the broader tools, methodologies, and concepts of DevOps and cloud. + +There will still be quite a bit of PowerShell content at the Nashville event, and there could be some overlap of sessions - especially if a speaker submits a session that would be the right fit at both events. But you would be able to attend both and have enough unique content that it would be justifiable. + +**How big will the new event be?** + +While we've set our initial budgets at the Nashville event for 250 people, we will be capping the event attendance to 400 for the time being. One of the things that we pride ourselves on is the ability to have a level of intimacy between the attendees, as well as the speakers. We have the additional capacity to grow in Nashville, but we don't want to do so in a way that compromises that. + +We're looking forward to answering any questions that you may have. I may update this article as we get those questions so that everyone is on the same page. In the meantime, it was wonderful to see everyone again in Bellevue, and the team is looking forward to seeing all of you again next year! diff --git a/content/articles/2019/06/_index.md b/content/articles/2019/06/_index.md new file mode 100644 index 000000000..d8e6cd803 --- /dev/null +++ b/content/articles/2019/06/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from June 2019" +description: "PowerShell.org Articles published in June 2019." +--- diff --git a/content/articles/2019/06/icymi-powershell-week-of-14-june-2019/index.md b/content/articles/2019/06/icymi-powershell-week-of-14-june-2019/index.md new file mode 100644 index 000000000..299eb0e4a --- /dev/null +++ b/content/articles/2019/06/icymi-powershell-week-of-14-june-2019/index.md @@ -0,0 +1,69 @@ +--- +url: /articles/2019-06-14-icymi-powershell-week-of-14-june-2019/ +title: "ICYMI: PowerShell Week of 14-June-2019" +authors: + - Mark Roloff +date: "2019-06-14T15:00:33+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/06/icymi-powershell-week-of-14-june-2019/ +--- + +Topics include Pester goodness, auto cleanup of Azure resources, PSPowerHour, and more. + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, and Mark Roloff. + +###### [][1][_Testing Self-contained Scripts With Pester_][2] {.wp-block-heading} + +by Jakub Jareš on June 9th + +Unit testing your scripts can be a pain if you're in the habit of calling functions in the same file that you declare them in. + +###### [][3][_Azure Garbage Collection_][4] {.wp-block-heading} + +by Charles Féval on June 10th + +If you're forgetful and sometimes leave test resources in Azure longer than necessary, Charles has a great Function App that automatically categorizes and cleans up specially marked resources. Our wallets rejoice! + +###### [][5][_Using PowerShell to retrieve CAC Information_][6] {.wp-block-heading} + +by Peter Vanhaverbeke on June 12th + +Those of you in the military space may be working with Federal Agency Smartcard Numbers. Peter has whipped together a script for pulling certificate information from those cards. + +###### [][7][_Project: Terminal-Icons_][8] {.wp-block-heading} + +by Brandon Olin + +Need to class your shell up a bit? Brandon has released a module that'll display folder and file icons right in the shell. + +###### [][9][_YouTube: Powershell Is DEAD-Epic Learnings!_][10] {.wp-block-heading} + +by Ben Turner, Doug McLeod, Rob Maslen on June 9th + +From Security BSides London, this is a pretty damn cool deep dive into some of the latest techniques used by red and blue teams with PowerShell and it's underlying or related technologies. + +###### [][11][_Youtube: PSPowerHour 008: 2019-06-13_][12] {.wp-block-heading} + +It's been a while but PSPowerHour is back with some great lightning content. Azure pipelines, web servers, fonts, and more! + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190614.md#testing-self-contained-scripts-with-pester + [2]: http://jakubjares.com/2019/06/09/2019-07-testing-whole-scripts/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190614.md#azure-garbage-collection + [4]: https://www.feval.ca/posts/azure-garbage-collection/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190614.md#using-powershell-to-retrieve-cac-information + [6]: https://sccmf12twice.com/2019/06/using-powershell-to-retrieve-cac-information/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190614.md#project-terminal-icons + [8]: https://github.com/devblackops/Terminal-Icons + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190614.md#youtube-powershell-is-dead-epic-learnings + [10]: https://www.youtube.com/watch?v=wIhlchiRmKQ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190614.md#youtube-pspowerhour-008-2019-06-13 + [12]: https://www.youtube.com/watch?v=9go5hF5S7Ig diff --git a/content/articles/2019/06/icymi-powershell-week-of-21-june-2019/index.md b/content/articles/2019/06/icymi-powershell-week-of-21-june-2019/index.md new file mode 100644 index 000000000..9573b4962 --- /dev/null +++ b/content/articles/2019/06/icymi-powershell-week-of-21-june-2019/index.md @@ -0,0 +1,77 @@ +--- +url: /articles/2019-06-21-icymi-powershell-week-of-21-june-2019/ +title: "ICYMI: PowerShell Week of 21-June-2019" +authors: + - Robin Dadswell +date: "2019-06-21T14:00:46+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/06/icymi-powershell-week-of-21-june-2019/ +--- + +Topics include security tools, security fixes, operation validation and module updates and open source UI creation. + + + +Special thanks to Prasoon Karunan V,Mark Roloff and Robin Dadswell. + +###### [][1][_WINSpect - Powershell based Windows Auditing Tool_][2] {.wp-block-heading} + +by Bala Ganesh on June 20th + +An over view of the WINSpect Tool. + +###### [][3][_PSAvalonia – Open source PowerShell bindings for Avalonia_][4] {.wp-block-heading} + +by Adam Driscoll on June 17th + +Avalonia is a WPF-style cross-platform UI library. Today, we are open sourcing a PowerShell module to create UIs using the Avalonia library. The Avalonia bindings that were once part of PowerShell Pro Tools are now open source and up on GitHub and the PowerShell Gallery. + +###### [][5][_Distributed and Flexible Operations Validation Framework – Introduction_][6] {.wp-block-heading} + +by Ravikanth Chaganti on June 17th + +Learn about the various options for operation validations are, and the limitations each come with. + +###### [][7][_New Release: VMware PowerCLI 11.3.0_][8] {.wp-block-heading} + +by Kyle Ruddy on June 20th + +See what updates have been made in PowerCLI 11.3.0 from speed improvements to new cmdlets. + +###### [][9][_Mitigating BlueKeep with PowerShell_][10] {.wp-block-heading} + +by Mike F Robbins on June 14th + +Ways to mitigate the BlueKeep vulnerability using remote PowerShell + +###### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} + +Help out in a discussion about SSL PowerShell Remoting, should it be done, or shouldn't it? + +###### [][13][_Youtube: Tyler Leonhardt - Simply REST API testing with Autorest and PowerShell_][14] {.wp-block-heading} + +Simplify testing of REST APIs using PowerShell and AutoRest + +Testing REST APIs can be a pain. First you must construct you URI, then you decide what headers you need, maybe it needs a body… Then you’ll throw it in tools like cURL or Postman and hope you’ve formatted it correctly. What if it didn’t have to be that way? What if you could interact with your REST API from the comfort of your terminal without having to build a single URL. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190621.md#winspect---powershell-based-windows-auditing-tool + [2]: https://gbhackers.com/winspect-windows-auditing-tool/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190621.md#psavalonia--open-source-powershell-bindings-for-avalonia + [4]: https://ironmansoftware.com/psavalonia-open-source-powershell-bindings-for-avalonia/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190621.md#distributed-and-flexible-operations-validation-framework--introduction + [6]: https://www.powershellmagazine.com/2019/06/17/distributed-and-flexible-operations-validation-framework-introduction/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190621.md#new-release-vmware-powercli-1130 + [8]: https://blogs.vmware.com/PowerCLI/2019/06/new-release-powercli-11-3-0.html + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190621.md#mitigating-bluekeep-with-powershell + [10]: https://mikefrobbins.com/2019/06/14/mitigating-bluekeep-with-powershell/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190621.md#reddit-rpowershell---most-popular-weekly-post + [12]: https://www.reddit.com/r/PowerShell/comments/c349xf/enabling_ssl_for_powershell_remoting_by_default/ + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190621.md#youtube-tyler-leonhardt---simply-rest-api-testing-with-autorest-and-powershell + [14]: https://www.youtube.com/watch?v=LGQOGj0upZM&feature=youtu.be diff --git a/content/articles/2019/06/icymi-powershell-week-of-28-june-2019/index.md b/content/articles/2019/06/icymi-powershell-week-of-28-june-2019/index.md new file mode 100644 index 000000000..317c7877a --- /dev/null +++ b/content/articles/2019/06/icymi-powershell-week-of-28-june-2019/index.md @@ -0,0 +1,73 @@ +--- +url: /articles/2019-06-28-icymi-powershell-week-of-28-june-2019/ +title: "ICYMI: PowerShell Week of 28-June-2019" +authors: + - Mark Roloff +date: "2019-06-28T17:29:40+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/06/icymi-powershell-week-of-28-june-2019/ +--- + +Topics include working with ARM templates, shells, shells, shells, and DSC. + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, and Mark Roloff. + +###### [][1][_Garuda – Architecture and Plan_][2] {.wp-block-heading} + +by Ravikanth Chaganti on June 24th + +Looking to develop a new OVF, Ravikanth details the his proposed architecture for Garuda, as was demonstrated at PSConfEU. + +###### [][3][_How To Modify Azure ARM Templates with PowerShell_][4] {.wp-block-heading} + +by Adam Bertram on June 26th + +A nice thing about ARM templates is that they're JSON, which can be nicely converted into objects in PS for easy automation or testing. Adam's article gets you going with some guidance there. + +###### [][5][_DSC Resource Kit Release June 2019_][6] {.wp-block-heading} + +by Katie Kragenbrink on June 26th + +A new DSC Resource Kit has landed with updates to several modules. + +###### [][7][_Last time I saw this many shells, someone sold them by the sea shore_][8] {.wp-block-heading} + +by James O'Neill on June 22nd + +We have a lot of options for shells on Windows nows and James digs into some of the pros and cons of several of them. Figuring out how you like to run your PS? There's good detail for you here then. + +###### [][9][_Reddit /r/PowerShell_][10] {.wp-block-heading} + +Lots of fun stuff happening with the new Windows Terminal and now there's a script to automatically set the shell's color scheme to match your desktop wallpaper. Très beau! + +###### [][11][_Youtube: Publishing and Managing Modules in an Internal Repository by Kevin Marquette_][12] {.wp-block-heading} + +If you've got some PS tools that need internal distribution, let Kevin give you a hand with building a solution to address that. + +###### [][13][_Youtube: 13 Years in a Shell: Lessons, Practices, and Achievements in PowerShell_][14] {.wp-block-heading} + +Presenting at the New York PSUG, Don Jones shares some knowledge, mistakes, and best practices spanning his career around PowerShell. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190628.md#garuda--architecture-and-plan + [2]: https://www.powershellmagazine.com/2019/06/24/garuda-architecture-and-plan/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190628.md#how-to-modify-azure-arm-templates-with-powershell + [4]: https://mcpmag.com/articles/2019/06/26/modify-azure-arm-templates-with-powershell.aspx + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190628.md#dsc-resource-kit-release-june-2019 + [6]: https://devblogs.microsoft.com/powershell/dsc-resource-kit-release-june-2019/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190628.md#last-time-i-saw-this-many-shells-someone-sold-them-by-the-sea-shore + [8]: https://jamesone111.wordpress.com/2019/06/22/last-time-i-saw-this-many-shells-someone-sold-them-by-the-sea-shore/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190628.md#reddit-rpowershell + [10]: https://old.reddit.com/r/PowerShell/comments/c4dzmz/poshwal_now_has_initial_support_for_the_new/?st=jxfmt6wv&sh=584a379a + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190628.md#youtube-publishing-and-managing-modules-in-an-internal-repository-by-kevin-marquette + [12]: https://www.youtube.com/watch?v=__Px5pyGvSs + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190628.md#youtube-13-years-in-a-shell-lessons-practices-and-achievements-in-powershell + [14]: https://www.youtube.com/watch?v=_RbsYJxONww diff --git a/content/articles/2019/06/icymi-powershell-week-of-7-june-2019/index.md b/content/articles/2019/06/icymi-powershell-week-of-7-june-2019/index.md new file mode 100644 index 000000000..5d27d9da2 --- /dev/null +++ b/content/articles/2019/06/icymi-powershell-week-of-7-june-2019/index.md @@ -0,0 +1,79 @@ +--- +url: /articles/2019-06-07-icymi-powershell-week-of-7-june-2019/ +title: "ICYMI: PowerShell Week of 7-June-2019" +authors: + - Mark Roloff +date: "2019-06-07T15:30:56+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/06/icymi-powershell-week-of-7-june-2019/ +--- + +Topics include checking patch status, About help docs, variable scoping, and proposed changes to PowerShellGet. + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, and Mark Roloff + +###### [][1][_Demo: Debug PowerShell Azure Functions locally_][2] {.wp-block-heading} + +by Dan O'Sullivan on June 3rd + +Looking to dip into Azure Functions? Dan has a nice demo on local debugging that can help iron out any kinks in your code. + +###### [][3][_PowerShell Script to Find Out Patch Installation Status on Remote Computers_][4] {.wp-block-heading} + +by Hareesh Jampani on June 4th + +Hareesh has put together a script that can help you quickly determine the status of patches on your systems. + +###### [][5][_Dude, where’s my var? – Understanding scoping in Universal Dashboard_][6] {.wp-block-heading} + +by Adam Driscoll on June 5th + +Scoping can sometimes get confusing. Especially in runspaces, which are a core component of how UD works. Adam does a great job of breaking this down for the rest of us neophytes. + +###### [][7][_PowerShell Basics: Meet About - The Owner’s Manual for PowerShell_][8] {.wp-block-heading} + +by Michael Bender on June 6th + +The About pages in PowerShell's help docs are some of the best places to learn new concepts. Everyone should know about them, use them, love them. + +###### [][9][_RFC - DSC Community Logo_][10] {.wp-block-heading} + +The DSC community has decided that it's time for a logo. Hop in, check out the options, vote on your favorite! + +###### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} + +Description of Reddit topic + +###### [][13][_Tweet of the Week_][14] {.wp-block-heading} + +Steve Lee inherits PowerShellGet (Find/Install-Module) and issues an RFC to discuss proposed breaking changes with the new version. + +###### [][15][_Youtube: Automating Active Directory Health Checks with PSADHealth_][16] {.wp-block-heading} + +From the London PowerShell Meetup, Daniel Krebs covers the PSADHealth module and how it can help you monitor AD for any issues. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190607.md#demo-debug-powershell-azure-functions-locally + [2]: https://blog.osull.com/2019/06/03/demo-debug-powershell-azure-functions-locally/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190607.md#powershell-script-to-find-out-patch-installation-status-on-remote-computers + [4]: https://www.anoopcnair.com/powershell-script-patch-installation-status/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190607.md#dude-wheres-my-var--understanding-scoping-in-universal-dashboard + [6]: https://ironmansoftware.com/dude-wheres-my-variable-understanding-scoping-in-universal-dashboard/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190607.md#powershell-basics-meet-about---the-owners-manual-for-powershell + [8]: https://techcommunity.microsoft.com/t5/ITOps-Talk-Blog/PowerShell-Basics-Meet-About-The-Owner-s-Manual-for-PowerShell/ba-p/668443?WT.mc_id=ITOPSTALK-reddit-abartolo + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190607.md#rfc---dsc-community-logo + [10]: https://github.com/PowerShell/DscResources/issues/507 + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190607.md#reddit-rpowershell---most-popular-weekly-post + [12]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/URL + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190607.md#tweet-of-the-week + [14]: https://twitter.com/Steve_MSFT/status/1134513315973980160?s=19 + [15]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190607.md#youtube-automating-active-directory-health-checks-with-psadhealth + [16]: https://www.youtube.com/watch?v=Xldbaxw4vJI diff --git a/content/articles/2019/06/universal-dashboard-templates-scaffolding-a-new-ud-project-with-powershell/index.md b/content/articles/2019/06/universal-dashboard-templates-scaffolding-a-new-ud-project-with-powershell/index.md new file mode 100644 index 000000000..da7bef5ce --- /dev/null +++ b/content/articles/2019/06/universal-dashboard-templates-scaffolding-a-new-ud-project-with-powershell/index.md @@ -0,0 +1,216 @@ +--- +url: /articles/2019-06-14-universal-dashboard-templates-scaffolding-a-new-ud-project-with-powershell/ +title: Universal Dashboard Templates – Scaffolding a New UD Project with Powershell +authors: + - Nathaniel Webb (ArtisanByteCrafter) +date: "2019-06-14T15:28:58+00:00" +categories: + - PowerShell for Admins +aliases: + - /2019/06/universal-dashboard-templates-scaffolding-a-new-ud-project-with-powershell/ +--- + +_All code from this article is freely available on Github as a template repository. Just click "Use this template" on the repository page here:_ + + + https://github.com/ArtisanByteCrafter/ud-template + + + +## The Why {.wp-block-heading} + +Why should you consider scaffolding a new project? While we're here, what exactly is scaffolding? Much like the term's origin a project scaffold is meant to build a consistent framework and design that you can use to build your projects with. + +If you've used products like Visual Studio, you're already familiar with scaffolding when you choose to begin a "New Project". The IDE will auto-generate commonly used files and folder structures for the language you're writing in. + +I'm taking this same approach with my ud-template utility. By simply running the included + + +`New-UDProject +`script with a single parameter + + +`-ProjectName 'myProject' +`we invoke all the necessary steps to create a running dashboard with some pretty handy features already enabled. + +Let's take a look at what we get and how it works. + +## The How {.wp-block-heading} + +![Imgur](https://i.imgur.com/y7nBe0G.gif) + + +`New-UDProject -ProjectName 'myProject' +`is the only command you need to run in order to create a new project framework for UD. It performs several things on your behalf: + +**Creating the module** + +We start by creating a module for our dashboard. We're going to use this module along with some boilerplate code in the .psm1 file to automatically import and source our functions. + +It's definitely possible to import functions into all runspaces without a module using a + + +`New-EndpointInitialization +`declaration in the + + +`dashboard.ps1 +`but I find this get's unwieldy very quickly on more robust projects, so I prefer each function in it's own file in a standard location, + + +`/src +`. + +**Creating the file/folder structure** + +The basic strucutre of our project is laid out as follows: + + +`│ dashboard.ps1 +│ dbconfig.json +│ New-UDProject.ps1 +│ README.md +│ +├───assets +├───pages +│ home.ps1 +│ +├───src +└───themes + SampleTheme.ps1 +`- + Functions + + + +Every function we want to declare will be in it's own + + +`function.ps1 +`file in the + + +`/src +`folder, which our module will pick up and dot-source for all runspaces. This means every function should automatically be available for use in every script block of our dashboard. + + + - + Pages + + + +I like to keep every page of my dashboard in it's own + + +`page.ps1 +`file in + + +`/pages +`. Every file in this directory will be appended automatically to our dashboard and available from the navigation menu. a home page is included by default. + + + - + Themes + + + +Similar to functions, every theme should be in it's own .ps1 file in + + +`/themes +`and will be sourced for the dashboard. Note, only a single theme can be used at a time, as this is the design of Universal Dashboard. By default, the dark-themed + + +`SampleTheme.ps1 +`is enabled, as seen in the screenshot above. + + + - + Dashboard Configuration + + + +I love json. It's ok if you don't but you're wrong and you should feel bad <3 that's fine. For this project however, I'm using a very simple json configuration to keep track of the project name, root module, and port our dashboard is running on. This is auto-generated from + + +`New-UDProject +`when you run it the first time. I'm sure this will evolve to include more aspects of my dashboards in the future. + +> + +> If you're considering storing any form of credential in your json file…don't. Please. Think of the kittens. There are excellent ways to deal with [authentication requests in code](https://github.com/ArtisanByteCrafter/KaceSMA/wiki/FAQ#q-i-want-to-run-my-api-script-in-an-automated-fashion-can-i-store-credentials-to-use-rather-than-being-prompted). +> + + + - + Assets + + + +Assets are anything that needs to be included with your project and don't have another home- for example, fonts or images. This empty folder is created by + + +`New-UDProject +`as well. + + + - + Running the dashboard + + + +The last aspect i want to cover is how this project runs the dashboard. Our + + +`dashboard.ps1 +`covers several areas. + +Import our config file + + +`$ConfigurationFile = Get-Content (Join-Path $PSScriptRoot dbconfig.json) | ConvertFrom-Json +`Import our module we created + + +`Try { + Import-Module (Join-Path $PSScriptRoot $ConfigurationFile.dashboard.rootmodule) -ErrorAction Stop +} Catch { + Write-Warning "Valid function module not found. Generate one by running $(Join-Path $PSScriptRoot New-UDProject.ps1) -ProjectName 'myProject'" + break; +} +`Source our themes folder + + +`. (Join-Path $PSScriptRoot "themes\*.ps1") +`Generate our pages + + +`$PageFolder = Get-ChildItem (Join-Path $PSScriptRoot pages) +$Pages = Foreach ($Page in $PageFolder){ + . (Join-Path $PSScriptRoot "pages\$Page") +} +`Auto-import our module, and thus our functions in /src + + +`$Initialization = New-UDEndpointInitialization -Module @(Join-Path $PSScriptRoot $ConfigurationFile.dashboard.rootmodule) +`Start our dashboard + + +`$DashboardParams=@{ + Title = $ConfigurationFile.dashboard.title + Theme = $SampleTheme + Pages = $Pages + EndpointInitialization = $Initialization +} +$MyDashboard = New-UDDashboard @DashboardParams +Start-UDDashboard -Port $ConfigurationFile.dashboard.port -Dashboard $MyDashboard -Name $ConfigurationFile.dashboard.title +`This project is completely open source and I always like to hear feedback, or even a pull request for something you think is neat. + +Happy dashboarding! + +Nate + +This is a cross-post of the original blog post on my personal blog here: [https://www.natelab.us/universal-dashboard-templates-scaffolding-a-new-ud-project-with-powershell][1] + + [1]: https://www.natelab.us/universal-dashboard-templates-scaffolding-a-new-ud-project-with-powershell/ diff --git a/content/articles/2019/07/_index.md b/content/articles/2019/07/_index.md new file mode 100644 index 000000000..e881a55e2 --- /dev/null +++ b/content/articles/2019/07/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from July 2019" +description: "PowerShell.org Articles published in July 2019." +--- diff --git a/content/articles/2019/07/a-farewell-and-a-bunch-of-hellos/index.md b/content/articles/2019/07/a-farewell-and-a-bunch-of-hellos/index.md new file mode 100644 index 000000000..c3226c8ec --- /dev/null +++ b/content/articles/2019/07/a-farewell-and-a-bunch-of-hellos/index.md @@ -0,0 +1,89 @@ +--- +url: /articles/2019-07-01-a-farewell-and-a-bunch-of-hellos/ +title: A Farewell, and a Bunch of Hellos +authors: + - Don Jones +date: "2019-07-01T13:55:37+00:00" +categories: + - PowerShell for Admins +legacy_featured_image: /wp-content/uploads/2018/10/PowerShell-Summit-2018.png +aliases: + - /2019/07/a-farewell-and-a-bunch-of-hellos/ +--- + +As many of you know, The DevOps Collective recently concluded its 7th US event, PowerShell + DevOps Global Summit 2019 in Bellevue, WA. Head to the [organization's YouTube page][1] for the breakout session recordings, which are live. + +I mentioned going into it that this Summit would be bittersweet for me, as it's the last one I'll be directly involved with. My career's simply taking me in a new direction, and it's much less connected to the day-to-day of technology and more connected with business leadership and strategy. I'll also be stepping back from my involvement with PowerShell.org, and I will not receive a Microsoft MVP Award for this cycle (I'm proud to be one of the few who earned 15 consecutive awards, so I've zero complaints, and this is entirely in line with my expectations). I'm stepping back from the "Month of Lunches" and other technical books as well, although I've still got plenty of writing in me (many of my [Leanpub books][2] are "pay what you think they're worth and remember I've got a mortgage"). I'm going to remain titular President for the DevOps Collective for a year or so while we get all the legal stuff lined up, but I won't be involved in day-to-day activities. I’ll drop a note later this week on [DonJones.com][3] about what’s happening with all “my” stuff. + +It's worth noting that the _entire_ original team for PowerShell.org has now stepped back from daily management of the organization, with only one person remaining active via our new Board. I take that as a huge compliment, and it's something I'm proud of - we all wanted to build something we could hand off, and that a "next generation" could do even better with. And they are. The new team is amazing. They ran the 2019 Summit essentially on their own, just asking a question now and then - something they'll still be welcome to do as they move forward. + +So with that in mind, let's meet them. + +## The Board {.wp-block-heading} + +The main point of the Board is to provide a semiannual sounding board for the CEO of the organization, and that requires broad, diverse perspectives. They're also the legal backstop for the organization, and can replace corporate officers. They can expand or contract the Board size as needed (within legal guardrails) and confirm their own members. I think we've lined up a great group of volunteers: + +**Michael Bender +** Michael's run The Krewe event at TechEd/Ignite for years, and been a huge community supporter. His experience will provide an invaluable perspective to the incoming officers. + +**Jeffrey Hicks +** Jeff's been a collaborator of mine since the VBScript days, and was one of the original PowerShell.org founders. + +**Melissa Jones +** Melissa joined us for our first OnRamp track, and she'll be a voice for the entry-level folks we're trying to offer support to. She's a database administrator, introverted multipotentialite, and avid reader who likes solving problems and figuring out how things work. + +**Paula Kingsley** +Paula has been with Summit pretty much since the beginning, and recently co-starred as an Iron Scripter judge. She's a long-running PowerShell enthusiast and a real IT expert. + + +**Rob Reynolds +** Rob runs Chocolatey, and he's been a big Summit supporter for years. His perspective as a business in our space will be a truly valuable one as we try to further engage a broader community. + +**Bonnie Runimas +** Bonnie's been with Summit since Year 1, and helps run a successful user group in Chicago. She'll provide valuable input on how the organization can help groups like hers across the world. + +## The Team {.wp-block-heading} + +These volunteers run the organization's day-to-day functions: + +**Jeffrey Bernt** runs logistics for events, including Summit and DevOps Camp. + +**Missy Januszko & Warren Frame** will once again be our co-directors of content for both PowerShell + DevOps Summit as well at our new DevOps + Automation Summit in Nashville TN. + +**Mike Kanakos** will be joining the team as our Director of Community Engagement. He will mainly be focusing on engaging with PowerShell user groups and helping with PowerShell / Automation Saturdays. + +**Tim Warner** is heading up the new OnRamp program, handling all the entry-level education at PowerShell + DevOps Global Summit. + +**Rob Pleau** is running the Scholarship aspect of OnRamp, and will coordinate the process of getting new blood into the community. + +**Mark Roloff , Robin Dadswell,** and **Prasoon Karunan V** continue to run the "[In Case You Missed It][4]" (ICYMI) weekly posts. + +Our Forums continue to be moderated by **James Ruskin, Alexander Wittig, Prasoon Karunan V**, and **Wes Stahler**. + +**Harjit Dhaliwal** runs the organization's Social Media accounts, including [@PshOrg][5] , [@PSHSummit][6] , and [@DevOpsOrg][7] + +**Tommy Maynard** will also continue to be a contributing writer to PowerShell.org. + +## **The Officers** {.wp-block-heading} + +Finally, these are the people who are legally accountable for the organization. As I've mentioned, I'll remain as President for some time as we work through the legal paperwork. Also, for the first time, we'll have a paid CEO. As the organization launches new events (Automation + DevOps Summit 2020 in Nashville, new Automation Saturday events, and more), this is just a full-time job, and having someone in that role gives the organization both flexibility and stability. + +**James Petty** will be that CEO, also formally serving as Vice-President and Treasurer. I anticipate James formally stepping into the President role in the future, and we'll need to replace both the Vice-President and Treasurer roles to make that happen. Those will remain volunteer, with the Treasurer's primary job being interfacing with our professional accounting firm. + +**Warren Frame** will step in as Secretary, our fourth legally mandated corporate officer (Nevada permits the Vice-President to hold a dual role, which is what James will do for now). + +## So That's All, Folks {.wp-block-heading} + +So that's the new team. I strongly encourage you to connect with them on Twitter and GitHub, and lend them your help whenever you can. + +In closing, I just want to tell you what an awesome, amazing, kind, supportive group of people you all are. I've been doing the PowerShell 'thang' for 13+ years, and my career as an IT Ops guy goes back to the mid-1990s. For much of that time, you've supported me by buying books, coming to conferences, signing up for classes, and (and this really is the bit that helped) just telling me "thank you." Well, thank _you,_ because it's been amazing. I'm looking forward to the next chapter in my career, and I hope I'll still run into some of you from time to time. If they ask, I'll definitely come up with a session for Summit, if for no other reason than so Chris and I can come hang out with you and all of our other friends for a day or two. + +Again, thank you. + + [1]: http://youtube.com/powershellorg + [2]: http://leanpub.com/u/donjones + [3]: http://donjones.com + [4]: https://powershell.org/category/powershell-admins/ + [5]: https://twitter.com/pshorg + [6]: https://twitter.com/pshsummit + [7]: https://twitter.com/devopsorg diff --git a/content/articles/2019/07/icymi-powershell-week-of-12-july-2019/index.md b/content/articles/2019/07/icymi-powershell-week-of-12-july-2019/index.md new file mode 100644 index 000000000..0fdcf992c --- /dev/null +++ b/content/articles/2019/07/icymi-powershell-week-of-12-july-2019/index.md @@ -0,0 +1,71 @@ +--- +url: /articles/2019-07-12-icymi-powershell-week-of-12-july-2019/ +title: "ICYMI: PowerShell Week of 12-July-2019" +authors: + - Robin Dadswell +date: "2019-07-12T15:00:20+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/07/icymi-powershell-week-of-12-july-2019/ +--- + +Topics include WPF GUIs, BitLocker and LAPS reporting, more APIs, and tips from a consultant. + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, and Mark Roloff. + +###### [][1][_[Tutorial] Creating Extensive PowerShell GUI Applications – PART 1_][2] {.wp-block-heading} + +by Dom Ruggeri on July 6th + +For those interested in dipping their toes into creating GUIs with PowerShell, Dom has started a great series covering his approach to keeping the GUI elements organized and wiring them up to some code. + +###### [][3][_Managing the Ghost API with PowerShell: Oh the Possibilities!_][4] {.wp-block-heading} + +by Adam Bertram on July 11th + +Perhaps to celebrate migrating his blog to the Ghost platform, Adam explores how to work with the service's REST API via PowerShell. + +###### [][5][_Getting Bitlocker and LAPS summary report with PowerShell_][6] {.wp-block-heading} + +by Przemyslaw Klys on July 11th + +Need a presentable report for management? This fun script will put one in your hands. Or, take some time to poke at it and learn some cool new tricks with collecting data. + +###### [][7][_3 Ways to Create Custom TypeNames on PowerShell Objects_][8] {.wp-block-heading} + +by Prateek Singh on July 11th + +If you're using the + + +`types.ps1xml +`to format how your objects are displayed, here are a few different ways to define your object typename. + +###### [][9][_Quantum Computing with... PowerShell?_][10] {.wp-block-heading} + +Quantum chemistry your thing? We stumbled across a portion of MS's Quantum Development Kit that integrates a little functionality with our favorite language. + +###### [][11][_Youtube: Lessons from the field: How an IT consultant uses PowerShell to get the job done with David Stein_][12] {.wp-block-heading} + +Presenting to the Research Triangle PowerShell User Group, David gives a glimpse into how PS has changed the landscape of his job as a consultant. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190712.md#tutorial-creating-extensive-powershell-gui-applications--part-1 + [2]: https://domruggeri.com/2019/07/06/creating-extensive-powershell-gui-applications-part-1/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190712.md#managing-the-ghost-api-with-powershell-oh-the-possibilities + [4]: https://adamtheautomator.com/psghost-automate-your-ghost-blog-with-powershell/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190712.md#getting-bitlocker-and-laps-summary-report-with-powershell + [6]: https://evotec.xyz/getting-bitlocker-and-laps-summary-report-with-powershell/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190712.md#3-ways-to-create-custom-typenames-on-powershell-objects + [8]: https://ridicurious.com/2019/07/11/3-ways-to-create-custom-typenames-in-powershell/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190712.md#quantum-computing-with-powershell + [10]: https://github.com/microsoft/Quantum/tree/master/Chemistry/GetGateCount + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190712.md#youtube-lessons-from-the-field-how-an-it-consultant-uses-powershell-to-get-the-job-done-with-david-stein + [12]: https://www.youtube.com/watch?v=vAcQzjKcfrM diff --git a/content/articles/2019/07/icymi-powershell-week-of-17-july-2019/index.md b/content/articles/2019/07/icymi-powershell-week-of-17-july-2019/index.md new file mode 100644 index 000000000..638a64b63 --- /dev/null +++ b/content/articles/2019/07/icymi-powershell-week-of-17-july-2019/index.md @@ -0,0 +1,85 @@ +--- +url: /articles/2019-07-19-icymi-powershell-week-of-17-july-2019/ +title: "ICYMI: PowerShell Week of 17-July-2019" +authors: + - Mark Roloff +date: "2019-07-19T16:22:40+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/07/icymi-powershell-week-of-17-july-2019/ +--- + +Topics include PowerShell 7, Ubiquiti APIs, Chocolatey, and DSC. + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, and Mark Roloff. + +###### [][1][_Accessing your Ubiquiti Unifi network configuration with PowerShell_][2] {.wp-block-heading} + +by Darren Robinson on July 15th + +Ubiquiti is a popular choice for budget-conscious techies and Darren demonstrates how you can start pulling useful information out of your network with their REST API. + +###### [][3][_PowerShell Scripting Techniques and Gems – Part 1_][4] {.wp-block-heading} + +by Martijn van Geffen on July 16th + +Are you familiar with the + + +`Where +`method? It's a feature of collections that not many people are aware of, and Martijn does a nice dive into its usage and performance. + +###### [][5][_Introducing the Chocolatey Remote Management PowerShell GUI_][6] {.wp-block-heading} + +by Dan Franciscus on July 16th + +Dan shows a handy GUI tool that his helpdesk can use for assistance in remote Chocolatey management. Code available on GitHub. + +###### [][7][_How to create archive with PowerShell?_][8] {.wp-block-heading} + +by Robert Senktas on July 15th + +Robert explores the relative performance of + + +`Compress-Archive +`versus directly calling .NET. + +###### [][9][_Diagnosing Common Windows Problems With PowerShell Troubleshooting Packs_][10] {.wp-block-heading} + +by Brien Posey on July 15th + +It never hurts to have an extra tool in your bag of tricks, so if you're supporting Windows 10 you could give these troubleshooting packs a whirl with PowerShell. + +###### [][11][_Desired State Configuration (DSC) – Configuration Data_][12] {.wp-block-heading} + +by Nedim Mehic on July 18th + +In part 3 of this series, Nedim takes a deep dive into DSC configuration data, covering some less obvious details and pointing out pitfalls to avoid. + +###### [][13][_PowerShell 7 Preview 2_][14] {.wp-block-heading} + +Preview 2 of PS v7 has been released. Get it. Play with it. Break it. Send feedback. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190719.md#accessing-your-ubiquiti-unifi-network-configuration-with-powershell + [2]: https://blog.darrenjrobinson.com/accessing-your-ubiquiti-unifi-network-configuration-with-powershell/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190719.md#powershell-scripting-techniques-and-gems--part-1 + [4]: https://www.tech-savvy.nl/2019/07/16/powershell-scripting-techniques-and-gems-part-1/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190719.md#introducing-the-chocolatey-remote-management-powershell-gui + [6]: https://winsysblog.com/2019/07/introducing-the-chocolatey-remote-management-powershell-gui.html + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190719.md#how-to-create-archive-with-powershell + [8]: http://blog.senktas.net/2019/07/15/how-to-create-archive-with-powershell/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190719.md#diagnosing-common-windows-problems-with-powershell-troubleshooting-packs + [10]: http://techgenix.com/powershell-troubleshooting-packs/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190719.md#desired-state-configuration-dsc--configuration-data + [12]: https://nedimmehic.org/2019/07/18/desired-state-configuration-dsc-configuration-data/ + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190719.md#powershell-7-preview-2 + [14]: https://github.com/PowerShell/PowerShell/releases/tag/v7.0.0-preview.2 diff --git a/content/articles/2019/07/icymi-powershell-week-of-26-july-2019/index.md b/content/articles/2019/07/icymi-powershell-week-of-26-july-2019/index.md new file mode 100644 index 000000000..4a142f00a --- /dev/null +++ b/content/articles/2019/07/icymi-powershell-week-of-26-july-2019/index.md @@ -0,0 +1,76 @@ +--- +url: /articles/2019-07-26-icymi-powershell-week-of-26-july-2019/ +title: "ICYMI: PowerShell Week of 26-July-2019" +authors: + - Mark Roloff +date: "2019-07-26T15:00:09+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/07/icymi-powershell-week-of-26-july-2019/ +--- + +Topics include an in-depth tutorial, extending PS with Rust, mail archives, and Pester reports. + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, and Mark Roloff. + +###### [][1][_PowerShell Tutorial Mini-Course: Building a Server Inventory Script_][2] {.wp-block-heading} + +by Adam Bertram on July 22nd + +Stepping from one-liners to a full script can be a daunting threshold. Fortunately, Adam has a great tutorial that walks you through his thought-process behind piecing together a reusable tool. + +###### [][3][_Extending PowerShell with Rust_][4] {.wp-block-heading} + +by Doug Finke on July 21st + +Need to squeeze more performance out of your PowerShell but the thought of writing C# isn't sitting well with you? Well, how about Rust? + +###### [][5][_Mission Impossible Code Part 2: Extreme Multilingual IaC (via Standard Code for Preflight TCP Connect Testing a List of Endpoints in Both Bash and PowerShell)_][6] {.wp-block-heading} + +by Darwin Sanoy on July 23rd + +Join Darwin's trip down the rabbit hole of working out a xplat method for validating critical network connectivity before onboarding new systems. + +###### [][7][_Disconnect, migrate and reconnect your PST with PowerShell_][8] {.wp-block-heading} + +by Damien Van Robaeys on July 23rd + +I've long believed that PSTs are the handiwork of Satan but they're often a necessary evil that we endure. Fortunately, locating and migrating them is a snap with Damien's script. + +###### [][9][_Pester Result Reporting With Suggestions And XSL Support_][10] {.wp-block-heading} + +by Prasoon Karunan V on July 25rd + +Desiring nicer looking test results, Prasoon extends Pester, allowing it to generate browser-friendly reports. + +###### [][11][_Tweet of the Week_][12] {.wp-block-heading} + +It's always cool to see what new PowerShell tools the InfoSec community comes up with. ThreatHunt simulates attack methods by raising alerts for you to practice hunting down. + +###### [][13][_Youtube: Powershell and Selenium_][14] {.wp-block-heading} + +Presenting at the St. Louis User Group, Ken Maglio covers everything you need to know to start automating Chrome with the help of Selenium. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190726.md#powershell-tutorial-mini-course-building-a-server-inventory-script + [2]: https://adamtheautomator.com/powershell-tutorial-mini-course/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190726.md#extending-powershell-with-rust + [4]: https://dfinke.github.io/powershell/2019/07/21/Extending-PowerShell-with-Rust.html + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190726.md#mission-impossible-code-part-2-extreme-multilingual-iac-via-standard-code-for-preflight-tcp-connect-testing-a-list-of-endpoints-in-both-bash-and-powershell + [6]: https://cloudywindows.io/post/mission-impossible-code-part-2-extreme-multilingual-iac-via-standard-code-for-preflight-tcp-connect-testing-a-list-of-endpoints-in-both-bash-and-powershell/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190726.md#disconnect-migrate-and-reconnect-your-pst-with-powershell + [8]: http://www.systanddeploy.com/2019/07/disconnect-migrate-and-reconnect-your.html + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190726.md#pester-result-reporting-with-suggestions-and-xsl-support + [10]: https://www.powershellmagazine.com/2019/07/25/pester-result-reporting-with-suggestions-and-xsl-support/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190726.md#tweet-of-the-week + [12]: https://twitter.com/MiladMSFT/status/1152222809747329024?s=20 + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190726.md#youtube-powershell-and-selenium + [14]: https://www.youtube.com/watch?v=A6ZKzLN2CDs diff --git a/content/articles/2019/07/icymi-powershell-week-of-5-july-2019/index.md b/content/articles/2019/07/icymi-powershell-week-of-5-july-2019/index.md new file mode 100644 index 000000000..b4d5c7ab7 --- /dev/null +++ b/content/articles/2019/07/icymi-powershell-week-of-5-july-2019/index.md @@ -0,0 +1,67 @@ +--- +url: /articles/2019-07-05-icymi-powershell-week-of-5-july-2019/ +title: "ICYMI: PowerShell Week of 5-July-2019" +authors: + - Mark Roloff +date: "2019-07-05T15:00:08+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/07/icymi-powershell-week-of-5-july-2019/ +--- + +Topics include pop-ups, dbatools, unit testing galore, and chatops. + + + +Curated by Robin Dadswell, Prasoon Karunan V, and Mark Roloff. + +###### [][1][_Get-PwshUpdates: Check if there is a PowerShell update available and install it_][2] {.wp-block-heading} + +by Barbara Forbes on June 30th + +Life happening and you forgot that there's an update for PS Core? Thankfully, Barbara has put together a module to remind you of when there's a new version available for download and lets you install it with a click. + +###### [][3][_How to Show a Pop-Up or Balloon Tip Notification from PowerShell?_][4] {.wp-block-heading} + +July 2nd + +If you need a way to notify your end users when a script completes or otherwise quickly communicate to their desktop, this post runs you through a couple of methods to achieve the task. + +###### [][5][_Unit testing in PowerShell, introduction to Pester_][6] {.wp-block-heading} + +by Olivier Miossec on July 2nd + +The foundations of Pester laid bare, Olivier brings everyone a great first step into the world of unit testing. + +###### [][7][_Hiding Warnings in dbatools_][8] {.wp-block-heading} + +by Shane O’Neill on June 28th + +Error handling is a great notch to have on your belt but if you're working with dbatools, there are a few special considerations that are worth knowing. + +###### [][9][_Youtube: ChatOps and Bots with PowerShell!_][10] {.wp-block-heading} + +From PSConfEU, Steve Lee runs you through the benefits of ChatOps and demonstrates how to build your first PowerShell chat bot. + +###### [][11][Twitch: PowerShell 101 with Michael and Christian - Part 13_][12] {.wp-block-heading} + +From the Brisbane user group, Michael continues a learning series with some work in PS Core. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190705.md#get-pwshupdates-check-if-there-is-a-powershell-update-available-and-install-it + [2]: https://4bes.nl/2019/06/30/get-pwshupdates-check-if-there-is-a-powershell-update-available-and-install-it/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190705.md#how-to-show-a-pop-up-or-balloon-tip-notification-from-powershell + [4]: http://woshub.com/popup-notification-powershell/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190705.md#unit-testing-in-powershell-introduction-to-pester + [6]: https://dev.to/omiossec/unit-testing-in-powershell-introduction-to-pester-1de7 + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190705.md#hiding-warnings-in-dbatools + [8]: https://nocolumnname.blog/2019/06/28/hiding-warnings-in-dbatools/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190705.md#youtube-chatops-and-bots-with-powershell + [10]: https://www.youtube.com/watch?v=8a4kAe766F4 + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190705.md#twitch-powershell-101-with-michael-and-christian---part-13_ + [12]: https://www.twitch.tv/videos/447586518 diff --git a/content/articles/2019/07/quick-protip-negotiate-tls-connections-in-powershell-with-a-minimum-tls-version-requirement/index.md b/content/articles/2019/07/quick-protip-negotiate-tls-connections-in-powershell-with-a-minimum-tls-version-requirement/index.md new file mode 100644 index 000000000..20aa5ee80 --- /dev/null +++ b/content/articles/2019/07/quick-protip-negotiate-tls-connections-in-powershell-with-a-minimum-tls-version-requirement/index.md @@ -0,0 +1,97 @@ +--- +url: /articles/2019-07-08-quick-protip-negotiate-tls-connections-in-powershell-with-a-minimum-tls-version-requirement/ +title: "Quick ProTip: Negotiate TLS Connections In Powershell With A Minimum TLS Version Requirement" +authors: + - Nathaniel Webb (ArtisanByteCrafter) +date: "2019-07-08T21:28:23+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks +aliases: + - /2019/07/quick-protip-negotiate-tls-connections-in-powershell-with-a-minimum-tls-version-requirement/ +--- + +## Synopsis {#synopsis.wp-block-heading} + +This is a quick post to highlight the nuances of Powershell and protocol management in regard to TLS connections. If you've ever attempted to make a secure connection (for example, an API request) to a service with certain net security requirements, you might have run into this problem. + +While TLS is negotiated at the highest level existing on both the server and the client, the minimum protocols defined by Powershell may include ones that you explicitly do not want. While explicitly declaring an enumerated protocol list is easy enough, what happens when Tls13 becomes more common, and we want to start utilizing it when it's available? Then Tls14, and beyond? + +Surely there's a way to give both a minimum version and account for newer protocols once they become available. + +## Retrieving and Configuring TLS {#retrieving-and-configuring-tls.wp-block-heading} + +The first thing we'll want to do is figure out what the default security protocol for our system is, and what all versions are supported. To do this, we leverage the .NET method + + +`[Net.ServicePointManager]::SecurityProtocol +`. + + +`PS> [Net.ServicePointManager]::SecurityProtocol +SystemDefault +`On my Windows 10 system with Powershell v5.1, this returns a value of + + +`SystemDefault +`. This value was introduced in .NET 4.7 (prior versions of .NET return no default value, only an enumerated list), and allows your operating system to pick the protocol to best negotiate the connection with. Under normal circumstances, this would be the best option to use, as defaults change based on the current security landscape. + +However,  + + +`SystemDefault +`might be a bit too lenient in it's declared available protocols. SSLv3?! - yeah,  + +[no thanks][1]. + +We can see the default available protocols with the following: + + +`PS> [enum]::GetValues('Net.SecurityProtocolType') +SystemDefault +Ssl3 +Tls +Tls11 +Tls12 +Tls13 +`Changing the protocol list is a fairly straight forward command: + + +`[System.Net.ServicePointManager]::SecurityProtocol = 'Tls11, Tls12' +`This would declare Tls 1.1 and 1.2 all valid protocols to use. As long as those are present on your computer, this works perfectly fine, and I've seen this method used a lot. This will accomplish our goal of setting a minimum required security protocol. + +Herein lies the nuance of what we're trying to accomplish. While TLS is negotiated at the highest level existing on both the server and the client, the minimum protocols defined in + + +`SystenDefault +`may include ones that you explicitly do not want. If Tls protocols are explicitly defined, we'd need to update our code whenever a new protocol became available. This might be preferable in certain circumstances where you need exact control over how your application communicates, but for my use case, I want this to be a dynamic declaration. + +It turns out that adding support for newer available protocols on a client machine is fairly easy to implement. + + +`PS> $CurrentVersionTls = [Net.ServicePointManager]::SecurityProtocol +PS> $AvailableTls = [enum]::GetValues('Net.SecurityProtocolType') | Where-Object { $_ -ge 'Tls12' } +PS> $AvailableTls.ForEach({ + [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor $_ + }) +PS> [Net.ServicePointManager]::SecurityProtocol +Tls12, Tls13 +`What we've done here is enumerated all available protocols on our computer and declared everything above Tls12 as fit for negotiation. This allows us to be able to both specify a minimum, and include newer protocols once they are available - effectively leveraging the best of + + +`SystemDefault +`and explicit declarations. + +As a courtesy to your users, I would recommend setting the security protocol back to the way it was once your connection or request is finished. + + +`# Be nice and set session security protocols back to how we found them. +[Net.ServicePointManager]::SecurityProtocol = $currentVersionTls +`Happy (secure) shelling! + +Note: This is a cross-post of my original blog post here: + + + + [1]: https://disablessl3.com/ diff --git a/content/articles/2019/08/_index.md b/content/articles/2019/08/_index.md new file mode 100644 index 000000000..40eedc68a --- /dev/null +++ b/content/articles/2019/08/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from August 2019" +description: "PowerShell.org Articles published in August 2019." +--- diff --git a/content/articles/2019/08/a-better-way-to-search-events/index.md b/content/articles/2019/08/a-better-way-to-search-events/index.md new file mode 100644 index 000000000..088ae5472 --- /dev/null +++ b/content/articles/2019/08/a-better-way-to-search-events/index.md @@ -0,0 +1,238 @@ +--- +url: /articles/2019-08-30-a-better-way-to-search-events/ +title: A Better Way To Search Events +authors: + - tobor79 +date: "2019-08-30T17:09:21+00:00" +categories: + - PowerShell for Admins +legacy_featured_image: /wp-content/uploads/2019/08/LegionImageShadowling.png +aliases: + - /2019/08/a-better-way-to-search-events/ +--- + +I have put together a security script to use as an alerting system. Using a CSV file containing information on which users are assigned which computer, the event logs are searched to discover when a user signs into a device outside their normal assignments. The final result of that script can be viewed [HERE](https://github.com/tobor88/BTPS-SecPack/blob/master/Event%20Alerts/UnusualUserSignInAlert.ps1) if interested. I will do my best to provide unique real world search queries for my examples. + + + +In order to accomplish this task, I originally believed I was going to need to search the event logs based on user and computer. Although this turned out to not be the case I figured it was a pretty useful thing to figure out how to do. That is the task that led me here. + + +The best way to search events is using the [Get-WinEvent](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.diagnostics/get-winevent?view=powershell-6) cmdlet. This method is far superior to [Get-EventLog](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-eventlog?view=powershell-5.1) in both speed and filtering ability. The documentation for the Filter Hash related parameters are a little lacking. + +When searching events you will want to keep in mind that each event source is handled as a document containing a sequence of events. Windows Event Log uses query expressions based on a subset of XPath 1.0 for selecting events from their sources. When you specify a query, you are also specifying an event channel for the context of the query. When you select an event with an event query, the entire event is selected, not a portion of the event information. + +**FILTERHASHTABLE** + + + +The FilterHashTable parameter is probably the most straight forward to use. I have taken the below example from Microsoft's TechNet site as this Paramter is the most straight foward and easy to use. The format is easy to understand as we are searching for an array of properties. To accurately describe these properties, it is easiest to view the events in Event Viewer. + + + +`$StartTime = (Get-Date).AddDays(-7) +Get-WinEvent -FilterHashtable@{ Logname='Application'; ProviderName='Application Error'; Data='iexplore.exe'; StartTime=$StartTime } +`If you have experience with the [New-Object](https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Utility/New-Object?view=powershell-6) cmdlet you have most likely added properties to the newly created object in this same fashion. Looking at the list of available property queries below, we are not able to search by computer name. I checked to see what other options were available. Data below is showing as an array. I have known this option to allow the entering of an SID or a username to query the event log. I have not been able to successfully add multiple properties into that value. + + + + * **LogName**= + * **ProviderName**= + * **Path**= + * **Keywords**= + * **ID**= + * **Level**= + * **StartTime**= + * **EndTime**= + * **UserID**= + * **Data**= + * `=`* **SuppressHashFilter**=`Below is a FilterHashTable query that searches the Sysmon events for all Network connections that happened over the last 1.2 hours. + + +`Get-WinEvent -MaxEvents 1 -FilterHashtable @{LogName="Microsoft-Windows-Sysmon/Operational"; Id=3; StartTime=(Get-Date).AddHours(-1.2)} +`**FILTERXPATH** + + +The next parameter defined is the FilterXPath parameter. This ended up being the one I used because it required less typing than FilterXML. More on this towards the end of the juicy stuff we are about to get into. To ensure the correct information is being used open the Event Viewer, (eventvwr.msc) and go to the XML view of the event you wish to query. In my case it was Security Event ID 4624.Below is a sample of the xml format for this event. + + + +`4624 +1 +0 +12544 +0 +0x8020000000000000 + +53282 + + +Security +DC1 + + +S-1-5-0 #### +david.haller +LEGION +0x3e7 +S-1-5-21-1005 +david.haller +LEGION +0x33648 +2 +I_Am_God +Negotiate +Why-Is-It-Blue +{00000000-0000-0000-0000-000000000000} +- +- +0 0x210 +C:\Windows\System32\winlogon.exe +10.0.0.8 0 +%%1833 + + +`=============================================================== + + +Microsoft has given us this syntax:`Get-WinEvent -FilterXPath "*[System[Level=3 and TimeCreated[timediff(@SystemTime) <= 86400000]]]"` + +This starts with a wildcard character which I have to apologize I do not remember the significance of. Each XML section is enclosed inside a set of [ ]. Starting small, If we wanted to query the '**System**' section and the '**EventData**' section it would look like the this. + + +`$XPath = '*[System[] and EventData[]]' +`To define the properties we wish to search for we need to add those properties inside the set of brackets for **System** and or **EventData**. I am going to add on to what we have defined so far. The event id is an integer. Because it is an integer we do not want to add single quotes around the value. + + + +`$XPath = '*[System[EventID=4624] and EventData[]]' +`Adding to the "**EventData**" gets a little more tricky. In the XML format above you can see that a property has been defined for the XML tags and each tag is called Data. Following the format at this TechNet reference: [https://docs.microsoft.com/en-us/previous-versions//aa385231(v=vs.85)](https://docs.microsoft.com/en-us/previous-versions//aa385231(v=vs.85)), we are able to view how to define this type of property. I placed a variable in the value field to demonstrate the need for single quotes as this is a string and single quotes are expected in order for the query to work. + + +`$SamAccountName = 'Amahl.Farouk'; +Get-WinEvent -FilterXPath "*[System[EventID=4624] and EventData[Data[@Name='TargetUserName']='$SamAccountName']"']] +`To add a second field to query the System section is fairly straight forward. To accomplish this we need to follow the last value with 'and' and add the new property as can be seen from the original Microsoft TechNet example. For those of you are unfamliar there are 86400000 seconds in 24 hours. So the time created value below gets the current system time and queries events that are less than or equal to a day old. + + + +`$XPath = "*[System[EventID=4624 and TimeCreated[timediff(@SystemTime) <= 86400000 +]] and EventData[Data[@Name='TargetUserName']='$SamAccountName']" +`Now We are searching for Event ID 4624, over the last 24 hours containing a specific username. Time to add the IP Address property. In the event log this value has an IP address and the computer's name was not able to be found. I have a list of computer names so I will need to convert those names to IP addresses for my query to be successful. This meant for my script, that a [Resolve-DnsName](https://docs.microsoft.com/en-us/powershell/module/dnsclient/resolve-dnsname?view=win10-ps) cmdlet had to be used to get the required value. There are numbers in this value but it is still not an integer so we are going to need single quotes around the value again. + + + +`$XPath = "*[System[EventID=4624 and TimeCreated[timediff(@SystemTime) <= 86400000]] and EventData[Data[@Name='TargetUserName']='$SamAccountName'] and EventData[Data[@Name='IpAddress']='$IPv4Address']]" +`As you can see above, in order to successfully query the computer value and TargetUsername in the EventData XML tags we needed to add a second "and EventData". This successfully finds what I was looking for. + + + +**FI +LTERXML +** + + + +FilterXML was another possible option that could have been used. In Microsoft's TechNet Documentation, one of the examples they gave was as follows. + + +`# Using the FilterXML parameter: +PS> Get-WinEvent -FilterXML "*[System[Level=3 and TimeCreated[timediff(@SystemTime)<= 86400000]]]" +`I should mention you can easily get yourself started with the -FilterXML value using Windows Event Viewer. Simply open Windows Event Viewer, in the right hand pane select "**Create Custom View**" than enter the Event ID values you wish to search for, keywords, time frames, computer names, etc. Then click the XML tab and it will show you what the XML query looks like. This is great for getting started however it will not work for more detailed queries which I will build on in the information below. + +To query the Event Log using the FilterXML parameter we need to add the QueryList and Query tags on the outside of the defining properties we wish to filter by. Using -FilterXML is simply XML formatted text of what we are looking for. The same sectioning rules apply as before except FilterXML wants an XML formatted document when FilterXPath wants just the properties defined. The XPath 1.0 language Windows uses must resolve to "Events" not a single "Event". This seemed to make the most sense for my original situation so it is what I went with.  + + +Why would these two similar options be available for use you might question?!?!?! The Windows Event log does not fully support XPath query language. More information on this can be read +[HERE](https://docs.microsoft.com/en-us/windows/win32/wes/consuming-events#xpath-10-limitations) +and +[HERE](https://docs.microsoft.com/en-us/windows/win32/wes/consuming-events#limitations) +if interested. Windows Event Log uses a subset of XPath 1.0. There are specific limitations of XPath 1.0. The more options available the better the chance you are able to find what you are looking for using this cmdlet. Below we can view an example of why we need to have these two query parameters. + +I wanted to build a query that returns services I do not have record of or know about. To do this I need to filter out known services. Although this list of services below can be extended greatly there is a max limit of 32 expressions that can be added to the XPath query. If you exceed this limit you will receive the PowerShell error message "_Get-WinEvent : The specified query is invalid_". This prevents my ability to accomplish this task. +If you run the below query you will notice that it returns every Event ID under the sun after filtering the one Event ID I am trying to return information on. + + +`$FilterXML = @" + + + *[System[(EventID="7045")]] +and *[EventData[Data[@Name="ServiceName"]!="MpKslDrv"]] +and *[EventData[Data[@Name="ServiceName"]!="Microsoft Edge Update Service (edgeupdate)"]] +and *[EventData[Data[@Name="ServiceName"]!="Microsoft Edge Update Service (edgeupdatem)"]] +and *[EventData[Data[@Name="ServiceName"]!="Microsoft Edge Elevation Service (MicrosoftEdgeElevationService)"]] +and *[EventData[Data[@Name="ServiceName"]!="Wireless Keyboard Filter Device Service"]] +and *[EventData[Data[@Name="ServiceName"]!="FileSyncHelper"]] +and *[EventData[Data[@Name="ServiceName"]!="OneDrive Updater Service"]] +and *[EventData[Data[@Name="ServiceName"]!="Google Update Service (gupdatem)"]] +and *[EventData[Data[@Name="ServiceName"]!="Google Update Service (gupdate)"]] +and *[EventData[Data[@Name="ServiceName"]!="Google Chrome Elevation Service"]] +and *[EventData[Data[@Name="ServiceName"]!="Adobe Genuine Monitor Service"]] +and *[EventData[Data[@Name="ServiceName"]!="Adobe Genuine Software Integrity Service"]] +and *[EventData[Data[@Name="ServiceName"]!="AdobeUpdateService"]] +and *[EventData[Data[@Name="ServiceName"]!="Mozilla Maintenance Service"]] + + + +"@ +Get-WinEvent -FilterXML $FilterXML +`You are able to add Suppress tags to remove Event ID's you do not want returned. Under other circumstances this can work. For the goal of the above query, I will need over 32 'Suppress' tags to filter Event ID's I do not want returned. If you run into a situation such as the one above you **DO NOT NEED** to add the Suppress tags. Simply use the -FilterXPath parameter instead. This would turn my above query into this: + + +`$XPath = '*[System[(EventID="7045")]] and [EventData[Data[@Name="ServiceName"]!="MpKslDrv"]] and [EventData[Data[@Name="ServiceName"]!="Action1 Agent"]] and [EventData[Data[@Name="ServiceName"]!="Microsoft Edge Update Service (edgeupdate)"]] and [EventData[Data[@Name="ServiceName"]!="Microsoft Edge Update Service (edgeupdatem)"]] and [EventData[Data[@Name="ServiceName"]!="Microsoft Edge Elevation Service (MicrosoftEdgeElevationService)"]] and [EventData[Data[@Name="ServiceName"]!="Microsoft Update Health Service"]] and [EventData[Data[@Name="ServiceName"]!="Sysmon"]] and [EventData[Data[@Name="ServiceName"]!="SysmonDrv"]] and [EventData[Data[@Name="ServiceName"]!="Wireless Keyboard Filter Device Service"]] and [EventData[Data[@Name="ServiceName"]!="FileSyncHelper"]] and [EventData[Data[@Name="ServiceName"]!="OneDrive Updater Service"]] and [EventData[Data[@Name="ServiceName"]!="Splashtop Software Updater Service"]] and [EventData[Data[@Name="ServiceName"]!="Splashtop Virtual Hid"]] and [EventData[Data[@Name="ServiceName"]!="Google Update Service (gupdatem)"]] and [EventData[Data[@Name="ServiceName"]!="Google Update Service (gupdate)"]] and [EventData[Data[@Name="ServiceName"]!="Google Chrome Elevation Service"]] and [EventData[Data[@Name="ServiceName"]!="Adobe Genuine Monitor Service"]] and [EventData[Data[@Name="ServiceName"]!="Adobe Genuine Software Integrity Service"]] and [EventData[Data[@Name="ServiceName"]!="AdobeUpdateService"]] and [EventData[Data[@Name="ServiceName"]!="Mozilla Maintenance Service"]]' +Get-WinEvent -FilterXPath $XPath +`The query must have at least one select statement. For each suppress statement, there must be at least one select statement that specifies the same path. If the select and suppress query return the same events, the suppress statement takes precedence. If you select events from multiple sources, the events are returned in time stamp order. If you use the system time stamp and the rate of events is high, it is possible that more than one event will have the same time stamp. When this occurs, the ordering of events becomes ambiguous and the events may appear out of order. Be careful when comparing floating point numbers in XPath queries. Any string representation of a floating point number is approximated and the value displayed in XML might not match the number stored with the event. Floating point numbers should be compared as being less than or greater than a constant. +If you are required to use XML filtering for your situation my conclusion so far is that you need to know what you are looking for. As far as I am aware there is not a solution to perform the above kind of process of elimination without manual overview or FilterXPath. +To compensate for this in my own environment, (where I have centralized important events using Windows Event Forwarding), I import centralized events into a SQL database and perform queries there. There are a lot of benefits to this including speed. If you wish to use the tool I created for this it can be obtained from [HERE][1]. I have set up instructions [HERE][2] if you wish to use the application as well. +The "Suppress" '[Query Schema Element][3]' I mentioned can be used to filter out the extra Event ID's returned by a query. There is a limit of 32 expressions for the 'Suppress' tags as well.  The below example is used to query the event logs for any user accounts that have been added to high privileged administrator groups. The 'Suppress' expression is used to filter out Event ID 4799, preventing the return of unwanted information + + +`$FilterXML = @" + + +(*[EventData[Data[@Name="TargetUserName"] = "Administrators"]]) or +(*[EventData[Data[@Name="TargetUserName"] = "Domain Admins"]]) or +(*[EventData[Data[@Name="TargetUserName"] = "Schema Admins"]]) or +(*[EventData[Data[@Name="TargetUserName"] = "Enterprise Admins"]]) or +(*[EventData[Data[@Name="TargetUserName"] = "Print Operators"]]) or +(*[EventData[Data[@Name="TargetUserName"] = "Server Operators"]]) or +(*[EventData[Data[@Name="TargetUserName"] = "DnsAdmins"]]) or +(*[EventData[Data[@Name="TargetUserName"] = "Backup Operators"]]) +and +*[System[(EventID='4732') or (EventID='4733') or (EventID='4756') or (EventID='4757') or (EventID='4728') or (EventID='4729')]] + +*[System[(EventID=4799)]] + + +"@ +Get-WinEvent -FilterXML $FilterXML +`Another query you might find useful is one that searches the event log for an instance where the local Administrator user entered a password to execute a process with elevated privileges over the last 24 hours. + + + +`$XML = " + + +            *[System[(EventID=4648) and TimeCreated[timediff(@SystemTime) <= 86400000]] and EventData[Data[@Name='ProcessName']='C:\Windows\System32\consent.exe'] and EventData[Data[@Name='TargetUserName']='Administrator']] + + +" +$AdminConsentGiven = Get-WinEvent -FilterXml $XML -MaxEvents 1 | Select-Object -Property * +`It is suggested to use XPath queries when you are searching the event logs for a simple expression from a single source. Use an XML structured query when you are searching from more than one event log source or you are using a compound expression with a dozen or more expressions. + + + + + + +Another example Microsoft gives for filtering events involves the[ Where-Object](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/where-object?view=powershell-6) cmdlet. The overhead on Where-Object is fairly high so I try to avoid using it whenever I can as it will search through everything a second time and can noticeably slow down the execution time of a script. I hope you found this useful and were able to learn what I was able to through this. Until next time... + + + +- [tobor](https://roberthosborne.com) + + + + + [1]: https://github.com/tobor88/BTPS-SecPack/tree/master/WEF%20Application + [2]: https://btps-secpack.com/wef-application + [3]: https://docs.microsoft.com/en-us/windows/win32/wes/queryschema-elements diff --git a/content/articles/2019/08/a-peculiar-parse/index.md b/content/articles/2019/08/a-peculiar-parse/index.md new file mode 100644 index 000000000..39bf1c040 --- /dev/null +++ b/content/articles/2019/08/a-peculiar-parse/index.md @@ -0,0 +1,157 @@ +--- +url: /articles/2019-08-20-a-peculiar-parse/ +title: A Peculiar Parse +authors: + - Colyn Via +date: "2019-08-20T19:40:17+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks + - Training +aliases: + - /2019/08/a-peculiar-parse/ +--- + +##   {.wp-block-heading} + +One of the best enhancements to Powershell was the inclusion of custom classes in v5. We originally wrote scripts, then we wrote cmdlets, followed by modules, and now we've graduated, with Class. + +I recently decided I wanted to write some code that would build a website. What better way to do that than by creating a class just for me? That's rhetorical by the way. My early class code looked like this: + + + + +`class mysite { + [string]$SiteName = 'mysite' + [string]$PhysPath = 'c:\mysite' + [string]$Binding = '*:8000:' + mysite(){ + Import-Module IISAdministration,WebAdministration + } + [void]CreateSite(){ + $newsite = @{ + Name = $this.SiteName + PhysicalPath = $this.PhysPath + BindingInformation = $this.Binding + } + New-IISSite @newsite + (Get-IISServerManager).CommitChanges() + } +} +`With this code I'm able to create my IIS website and see it in IIS Manager. But then I thought it'd be great to add the object representing the new site to my custom class. To do this I'll need to create another property. It's generally a good idea to cast properties as the appropriate object type.  That means adding a new property to the class and loading the appropriate namespaces so the casting would work.  I also updated my method to pass the object representing my website to the new property. + + +`class mysite { + [string]$SiteName = 'mysite' + [string]$PhysPath = 'c:\mysite' + [string]$Binding = '*:8000:' + [Microsoft.Web.Administration.Site[]]$SiteObject + mysite(){ + [void][System.Reflection.Assembly]::LoadWithPartialName( + 'Microsoft.Web.Administration') + [void][System.Reflection.Assembly]::LoadWithPartialName( + 'Microsoft.Web.Management') + Import-Module IISAdministration,WebAdministration + } + [void]CreateSite(){ + $newsite = @{ + Name = $this.SiteName + PhysicalPath = $this.PhysPath + BindingInformation = $this.Binding + } + $this.SiteObject += New-IISSite @newsite -Passthru + (Get-IISServerManager).CommitChanges() + } +} +`Looks great right?  I was able to create my new site and see it in IIS Manager.  The next day I wanted to try it out again so I deleted my website, loaded my code, and then got hit with a nasty error from the parser. + +![](https://scontent.xx.fbcdn.net/v/wl/t1.15752-0/s480x480/69283328_2866413096703634_4259896023284973568_n.png?_nc_cat=104&_nc_log=1&_nc_oc=AQnsep46eWke901Uzia9GmY3zbuEAnbk9WImb3IVthQegbzYfeL8zjSXiEj6381xEfXtbK1gLIP9kNUgzJ-kXykw&_nc_ht=scontent.xx&oh=95f0b7ade60da2b13897597e64bfdc4f&oe=5DD64557) + + +`PS C:\Dev> . .\powershellorg.ps1 +At C:\Dev\powershellorg.ps1:5 char:4 ++ [Microsoft.Web.Administration.Site[]]$SiteObject ++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Unable to find type [Microsoft.Web.Administration.Site]. + + CategoryInfo : ParserError: (:) [], ParseException + + FullyQualifiedErrorId : TypeNotFound +`Turns out, the parser in powershell is reading my code and sees an object type it doesn't know.  That would be my new property with the casting to [Microsoft.Web.Administration.Site].  At this point, the namespace containing the class I'm casting as hasn't been loaded because that code is in the class constructor.  So I figure, no problem!  I'll just load the namespaces before I define my class, score one point for Colyn! + + +`[void][System.Reflection.Assembly]::LoadWithPartialName( + 'Microsoft.Web.Administration') +[void][System.Reflection.Assembly]::LoadWithPartialName( + 'Microsoft.Web.Management') +class mysite { + [string]$SiteName = 'mysite' + [string]$PhysPath = 'c:\mysite' + [string]$Binding = '*:8000:' + [Microsoft.Web.Administration.Site[]]$SiteObject + mysite(){ + Import-Module IISAdministration,WebAdministration + } + [void]CreateSite(){ + $newsite = @{ + Name = $this.SiteName + PhysicalPath = $this.PhysPath + BindingInformation = $this.Binding + } + $this.SiteObject += New-IISSite @newsite -Passthru + (Get-IISServerManager).CommitChanges() + } +} +`Or so I thought, as it turns out I still receive the same exception.  Going back to my troubleshooting skills I stepped through my code in the ISE, without exception.  Wait, what?  That's right, there was no exception when I stepped through my code.  Thinking I might have fat fingered my code, or maybe didn't save correctly, I tried again.  Same error. + +Upon further research I discovered that the parsing protocol in powershell doesn't read linearly.  In its early passes over my code it observed I was creating a class and decided to load the class first.  Because the [mysite] class is loading before my reflection calls, the code bombs.  +1 for non linear dynamics.  This is true even when implementing the 'using namespace' capability that launched with v5: + + +`using namespace Microsoft.Web.Administration; +using namespace Microsoft.Web.Management; +class mysite { + [string]$SiteName = 'mysite' + [string]$PhysPath = 'c:\mysite' + [string]$Binding = '*:8000:' + [Microsoft.Web.Administration.Site[]]$SiteObject + mysite(){ + Import-Module IISAdministration,WebAdministration + } + [void]CreateSite(){ + $newsite = @{ + Name = $this.SiteName + PhysicalPath = $this.PhysPath + BindingInformation = $this.Binding + } + $this.SiteObject += New-IISSite @newsite -Passthru + (Get-IISServerManager).CommitChanges() + } +} +`I determined two ways around this problem.  The first was to keep the class in a separate file, but create a new .ps1 file that would load the dependent namespaces and then use dot sourcing to load the class file.  I did a quick experiment to test this assumption which gave positive reinforcement for the idea: + +![](https://scontent.xx.fbcdn.net/v/wl/t1.15752-0/s480x480/68576638_490740718161416_4996682901111177216_n.png?_nc_cat=108&_nc_log=1&_nc_oc=AQkZ0I7swgdlk0kzRJoAdY15EGff-nFrtXlSm8-wdGcmEnR3-P_Aa6STzf3v2TiOOReuw2c7x0Q3XWpjIbuLyvAh&_nc_ht=scontent.xx&oh=896b4925e9a6a684a06ba200a974802b&oe=5DD6844A) + +Of course the polymorphism of powershell allows a less cumbersome and equally less exact solution.  I can simply recast the property as a generic object. + + +`class mysite { + [string]$SiteName = 'mysite' + [string]$PhysPath = 'c:\mysite' + [string]$Binding = '*:8000:' + [Object[]]$SiteObject + mysite(){ + [void][System.Reflection.Assembly]::LoadWithPartialName( + 'Microsoft.Web.Administration') + [void][System.Reflection.Assembly]::LoadWithPartialName( + 'Microsoft.Web.Management') + Import-Module IISAdministration,WebAdministration + } + [void]CreateSite(){ + $newsite = @{ + Name = $this.SiteName + PhysicalPath = $this.PhysPath + BindingInformation = $this.Binding + } + $this.SiteObject += New-IISSite @newsite -Passthru + (Get-IISServerManager).CommitChanges() + } +} +`As with anything in Powershell or coding in general, there's always more than one way to achieve a goal.  The lesson learned in this experience is that custom classes will always be loaded ahead of the rest of your code.  You can work around this by abstracting your classes to a separate file or "library" to ensure your code executes in the order you intend.  If you get a TypeNotFound error from a casting call in your class, you can use the code abstraction method or simply recast to a default but similar type. diff --git a/content/articles/2019/08/icymi-powershell-week-of-16-august-2019/index.md b/content/articles/2019/08/icymi-powershell-week-of-16-august-2019/index.md new file mode 100644 index 000000000..920ea057a --- /dev/null +++ b/content/articles/2019/08/icymi-powershell-week-of-16-august-2019/index.md @@ -0,0 +1,96 @@ +--- +url: /articles/2019-08-16-icymi-powershell-week-of-16-august-2019/ +title: "ICYMI: PowerShell Week of 16-August-2019" +authors: + - Robin Dadswell +date: "2019-08-16T15:00:40+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/08/icymi-powershell-week-of-16-august-2019/ +--- + +Topics include Azure setups, AD reporting, IF statements Out-GridView and other new features coming in PowerShell 7. + + + Special thanks to James Petty, Mark Rollof, Prasoon Karunan V and Robin Dadswell + + +### + [*Pragmatic PowerShell Scripting - Reporting on AD Groups*](https://www.linkedin.com/pulse/pragmatic-powershell-scripting-chris-sharp/) + + + by Chris Sharp on 11th August + + + Learn how Chris approached a requirement to pull various reports from AD using PowerShell and a useful Excel module. + + +### + [*Powershell: Everything you wanted to know about the IF statement*](https://powershellexplained.com/2019-08-11-Powershell-if-then-else-equals-operator/) + + + by Kevin Marquette on 11th August + + + Like many other languages, PowerShell has statements for conditionally executing code in your scripts. One of those statements is the if statement. Today we will take a deep dive into one of the most fundamental commands in PowerShell. + + +### + [*Create an Azure Storage account using PowerShell*](http://www.thatlazyadmin.com/create-an-azure-storage-account-using-powershell/) + + + by Shaun Hardneck on 13th August + + + In this short post, I will show you how you can create a new Azure Storage Account using PowerShell. + + +### + [*Out-GridView Returns!*](https://devblogs.microsoft.com/powershell/out-gridview-returns/) + + + by Jack Zeiders on 14th August + + + It’s been almost 3 years since PowerShell Core debuted for Linux and Mac, and as we’ve increased our cmdlet coverage more and more, one cmdlet has always stood out as a top, cross-platform request. Today, we are excited to announce that Out-GridView is debuting on all Core-supported platforms through the GraphicalTools Module. + + +### + [*Automating an Azure Lab Setup with PowerShell*](https://adamtheautomator.com/azure-lab-setup) + + + by Adam Bertram on 15th August + + + Ever wanted to learn how to boot up an entire Lab with a single line of PowerShell, well Adam Bertram can show you how with this post. + + +### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](vscode-resource:/c:/Users/robin/OneDrive%20-%20Dadswell.Net/Software/Stuff%20I%20Have%20Written/repo/PowerShell_Org/WhatYouMissedThisWeek/URL) + + + Description of Reddit topic + + +### + [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1161666852914778113) + + + Coming in PowerShell 7 Preview.3 is  + + +`ForEach-Object -Parallel +`experimental feature! Easily execute scriptblocks in parallel threads! + + +### + [*Youtube: PowerShell Community Call - August 15, 2019*](https://www.youtube.com/watch?v=cK1xenkF9zs) + + + An overview of upcoming changes, some information and a Q&A session. diff --git a/content/articles/2019/08/icymi-powershell-week-of-2-august-2019/index.md b/content/articles/2019/08/icymi-powershell-week-of-2-august-2019/index.md new file mode 100644 index 000000000..1a2f9cc92 --- /dev/null +++ b/content/articles/2019/08/icymi-powershell-week-of-2-august-2019/index.md @@ -0,0 +1,69 @@ +--- +url: /articles/2019-08-02-icymi-powershell-week-of-2-august-2019/ +title: "ICYMI: PowerShell Week of 2-August-2019" +authors: + - Robin Dadswell +date: "2019-08-02T15:00:45+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/08/icymi-powershell-week-of-2-august-2019/ +--- + +Topics include data aggregation, file permission migrations, checking reboots in the registry, credential management, default parameters and setting up for PowerShell Development. + + + +Special thanks to Prasoon Karunan V and Robin Dadswell + +###### [][1][_Aggregating Data with PowerShell_][2] {.wp-block-heading} + +by Jess Pomfret on July 26th + +For DBAs aggregation of data is a given, but how do we do that in PowerShell? Find out with Jess' look into ways to do it. + +###### [][3][_Transferring File Permissions with PowerShell_][4] {.wp-block-heading} + +by Adam Bertram on July 26th + +Maintaining file share permissions across servers can be a major challenge but by using PowerShell, we can automate this process allowing you to go home early. + +###### [][5][_How to Check for a Pending Reboot in the Registry (Windows)_][6] {.wp-block-heading} + +by Adam Bertram on July 28th + +Whenever you install software, updates or make configuration changes, it's common for Windows to need a reboot. Many OS tasks sometimes force Windows to require a reboot. When a reboot is pending, Windows add some registry values to show that. In this blog post, you're going to learn how to check for a pending reboot and how to build a PowerShell script to automate the task. + +###### [][7][_Credential Management Module_][8] {.wp-block-heading} + +by MosaicMK Software on July 30th + +Manage credentials saved to the windows credential manager and call them as clear text or a PSCredential object to be used by other PowerShell Commends + +###### [][9][_What’s in your PowerShell $PSDefaultParameterValues Preference Variable?_][10] {.wp-block-heading} + +by Mike F Robbins on August 1st + +An view into Mike's use of a powerful preference variable added in PowerShell version 3.0. + +###### [][11][_Youtube: Getting setup for PowerShell Development_][12] {.wp-block-heading} + +Learn how to configure and setup your computer for PowerShell Development. In this fourth episode of Learn PowerShell you learn to start coding PowerShell daily with a few free components and easy configuration. Follow along with this video for an easy step-by-step walk-through for getting setup to start writing PowerShell. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190802.MD#aggregating-data-with-powershell + [2]: https://jesspomfret.com/powershell-aggregation/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190802.MD#transferring-file-permissions-with-powershell + [4]: https://adamtheautomator.com/transfer-file-permissions/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190802.MD#how-to-check-for-a-pending-reboot-in-the-registry-windows + [6]: https://adamtheautomator.com/pending-reboot-registry-windows/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190802.MD#credential-management-module + [8]: https://www.mosaicmk.com/2019/07/credential-management-module.html + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190802.MD#whats-in-your-powershell-psdefaultparametervalues-preference-variable + [10]: https://mikefrobbins.com/2019/08/01/whats-in-your-powershell-psdefaultparametervalues-preference-variable/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20190802.MD#youtube-getting-setup-for-powershell-development + [12]: https://www.youtube.com/watch?v=4-L7HwLgsf4 diff --git a/content/articles/2019/08/icymi-powershell-week-of-23-august-2019/index.md b/content/articles/2019/08/icymi-powershell-week-of-23-august-2019/index.md new file mode 100644 index 000000000..ecd3faee5 --- /dev/null +++ b/content/articles/2019/08/icymi-powershell-week-of-23-august-2019/index.md @@ -0,0 +1,97 @@ +--- +url: /articles/2019-08-23-icymi-powershell-week-of-23-august-2019/ +title: "ICYMI: PowerShell Week of 23-August-2019" +authors: + - Robin Dadswell +date: "2019-08-23T15:00:41+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/08/icymi-powershell-week-of-23-august-2019/ +--- + +Topics include PowerShell 7 Preview 3, Universal Dashboard, URI Data Types and more. + + + + + + Special thanks to Robin Dadswell, Mark Roloff, Prasoon Karunan V, and Kevin Laux. + + +### [How to combine the elements of two arrays using PowerShell][1] + + + by Thiyagu on 18th of August + + + Information on the different ways to join Arrays depending on the scenario. + + +### + [PowerShell 7 Preview 3 | PowerShell](https://devblogs.microsoft.com/powershell/powershell-7-preview-3/) + + + by Steve Lee on 20th of August + + + The new preview (3) for PowerShell 7 is available. + + +### + [New Telemetry in PowerShell 7 Preview 3 | PowerShell](https://devblogs.microsoft.com/powershell/new-telemetry-in-powershell-7-preview-3/) + + + by Sydney Smith on 20th of August + + + Additional telemetry data points will be collected starting with PowerShell 7 Preview 3, find out what they are and how to toggle them off if needed. + + +### + [Parallel and ThrottleLimit Parameters added to ForEach-Object in PowerShell 7 Preview 3](https://mikefrobbins.com/2019/08/21/parallel-and-throttlelimit-parameters-added-to-foreach-object-in-powershell-7-preview-3/) + + + by Mike F Robbins on 21st of August + + + Preview 3 of PowerShell 7 was just released. ForEach-Object now has Parameters for Parallel and ThrottleLimit. + + +### + [SCCM Client Health Monitor Script - imab.dk](https://www.imab.dk/sccm-client-health-monitor-script/) + + + by Martin Bengtsson + + + The SCCM Client Health Monitor Script is a PowerShell script which fixes common issues related to SCCM client health. + + +### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/crlmhy/i_bet_you_all_have_been_doing_this_for_years_but/) + + + Using URI Data types instead of strings. + + +### + [*Tweet of the Week*](https://twitter.com/pewa2303/status/1163306192392859649?s=21) + + + PowerShell: Implementing a Progress Bar with Write-Progress + + +### + [Data to Dashboard in under an hour with Universal Dashboard! with Adam Driscoll](https://youtu.be/6eOjRQi4vUU) + + + Adam Driscoll explores his tool Universal Dashboard, learn how to take advantage of a Powerful PowerShell tool + + + [1]: https://dotnet-helpers.com/powershell/how-to-combine-the-elements-of-two-arrays-using-powershell/?fbclid=IwAR2VMOInc6GwiZ4BiPVE46Fn-vQcQLCF5F-AgLSiAkq_XsD1rf0Nbje29rc "https://dotnet-helpers.com/powershell/how-to-combine-the-elements-of-two-arrays-using-powershell/?fbclid=IwAR2VMOInc6GwiZ4BiPVE46Fn-vQcQLCF5F-AgLSiAkq_XsD1rf0Nbje29rc" diff --git a/content/articles/2019/08/icymi-powershell-week-of-30-august-2019/index.md b/content/articles/2019/08/icymi-powershell-week-of-30-august-2019/index.md new file mode 100644 index 000000000..e66dfd580 --- /dev/null +++ b/content/articles/2019/08/icymi-powershell-week-of-30-august-2019/index.md @@ -0,0 +1,88 @@ +--- +url: /articles/2019-08-30-icymi-powershell-week-of-30-august-2019/ +title: "ICYMI: PowerShell Week of 30-August-2019" +authors: + - Robin Dadswell +date: "2019-08-30T15:21:52+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/08/icymi-powershell-week-of-30-august-2019/ +--- + +Topics include DNS, GUI's, automation of legacy tools, Azure test environment setups and more! + + + + + + Special thanks to Kevin Laux, Prasoon Karunan V, and Robin Dadswell. + + +### + [*Comparing two or more objects visually in PowerShell*](https://evotec.xyz/comparing-two-or-more-objects-visually-in-powershell-cross-platform/) + + + by Przemyslaw Klys on 25th August + + + Compare-Object is good, but how about comparing multiple objects and seeing the results in an easy to see format! + + +### + [*Create your own Dynamic DNS service using Azure DNS - part 2*](https://cirriustech.co.uk/blog/create-dynamic-dns-azure-dns-pt2) + + + by Graham Gold on 26th August + + + Use a very lightweight updater client (windows or linux) that uses an Azure PowerShell function to update the DNS record-set entry. + + +### + [*How to Build a PowerShell GUI for your Scripts*](https://adamtheautomator.com/build-powershell-gui/) + + + by June Castillote on 26th August + + + PowerShell is a command-line tool but did you know it can also be used as a base for graphical interfaces? Sometimes command-line isn't the best kind of interface for a particular instance. Building a PowerShell GUI for for your service desk is a great example. This is one of those times when it is more appropriate to build graphical tools instead. + + +### + [*Automating Quser through PowerShell*](https://devblogs.microsoft.com/scripting/automating-quser-through-powershell/) + + + by Dan Reist on 27th August + + + I need to log a user off every computer they’re logged into. The problem is, I don’t know which ones. How can I discover which computers they’re logged into and then log them off? + + +### + [*Splitting Functions from Scripts in bulk*](https://nocolumnname.blog/2019/08/28/splitting-functions-from-scripts-in-bulk/) + + + by Shane O'Neill on 28th August + + + Ever wanted to use some of the functions within a script and easily call them? Turns out it is incredibly easy, find out more with Shane. + + +### + [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1166801611781312512) + + + A call out from Steve for what we want to be blogged about. + + +### + [*Youtube: Title of Youtube Video*](https://www.youtube.com/watch?v=YAF1sHYAwBY) + + + From the London PSUG, Naw explains in great detail and with passion what he created at The British Museum to automate the setup of test environments using Azure PowerShell, Pester (Unit Test & Infrastructure Test), Azure DevOps/Pipeline. diff --git a/content/articles/2019/08/icymi-powershell-week-of-9-august-2019/index.md b/content/articles/2019/08/icymi-powershell-week-of-9-august-2019/index.md new file mode 100644 index 000000000..9e57d9273 --- /dev/null +++ b/content/articles/2019/08/icymi-powershell-week-of-9-august-2019/index.md @@ -0,0 +1,68 @@ +--- +url: /articles/2019-08-09-icymi-powershell-week-of-9-august-2019/ +title: "ICYMI: PowerShell Week of 9-August-2019" +authors: + - Robin Dadswell +date: "2019-08-09T23:00:02+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/08/icymi-powershell-week-of-9-august-2019/ +--- + +Topics include SharePoint, AD trust relationships, Azure File Sync, working with variables and more. + + + +Special thanks to Prasoon Karunan V and Robin Dadswell + +###### [_Introducing the Azure File Sync DSC resource module_][1] {#introducing-the-azure-file-sync-dsc-resource-module.wp-block-heading} + +by Jan Egil Ring on 4th August + +Introduction to a new PowerShell DSC resource module called AzureFileSyncDsc. Including an overview of what Azure File Sync is. + +###### [_Monitor web server uptime with a PowerShell script_][2] {#monitor-web-server-uptime-with-a-powershell-script.wp-block-heading} + +by Adam Bertram on 4th August + +There are many different tools to monitor whether a web server is running or not. However, if you and/or your team know PowerShell and, perhaps, already have some PowerShell scripts to manage web services, using PowerShell to monitor uptime may be a good option. + +###### [_Testing LDAP and LDAPS connectivity with PowerShell_][3] {#testing-ldap-and-ldaps-connectivity-with-powershell.wp-block-heading} + +by Przemyslaw Klys on 4th August + +One of the common ways to connect to Active Directory is thru LDAP protocol. There are a lot of applications that talk to AD via LDAP. By default Active Directory has LDAP enabled but that's a bit insecure in today's world. That's where LDAPS comes in. It's not easy to set up, but when you get it done, it works. The problem I had recently is that while setting up LDAPS on DC's I only did this on some of the DC's, and not all of them as I should. + +###### [_The End-All Guide to Repairing Active Directory Trust Relationships_][4] {#the-end-all-guide-to-repairing-active-directory-trust-relationships.wp-block-heading} + +by Adam Bertram on 6th August + +Once the most common problems that plagues Windows system administrators is trusted, Active Directory computers seemingly fall off the domain. In this guide, you're going to learn every trick I've come across in my 20+ years managing Active Directory and how to automate it with PowerShell. + +###### [_Modify the Quick Launch in SharePoint Online sites using PowerShell PnP_][5] {#modify-the-quick-launch-in-sharepoint-online-sites-using-powershell-pnp.wp-block-heading} + +by Veronique Lengelle on 7th August + +There are some useful cmdlets in the SharePoint PowerShell PnP module that one wouldn’t think about using, but coupled with a set of other cmdlets, they can be very useful! + +###### [_Reddit /r/PowerShell - Most Popular Weekly Post_][6] {#reddit-rpowershell---most-popular-weekly-post.wp-block-heading} + +Reverse engineering powershell malware + +###### [_Youtube: Working With PowerShell Variables_][7] {#youtube-working-with-powershell-variables.wp-block-heading} + +Learn how to use and work with PowerShell variables. See different PowerShell variable types, and how to identify them. Learn how to get a list of PowerShell constant and environment variables. + + [1]: http://www.powershell.no/powershell,/azure/2019/08/04/azure-filesync-dsc.html + [2]: https://4sysops.com/archives/monitor-web-server-uptime-with-a-powershell-script/ + [3]: https://evotec.xyz/testing-ldap-and-ldaps-connectivity-with-powershell/#utm_source=rss&utm_medium=rss&utm_campaign=testing-ldap-and-ldaps-connectivity-with-powershell + [4]: https://adamtheautomator.com/trust-relationship-between-this-workstation-and-the-primary-domain-failed/?fbclid=IwAR1kl9nheqGadf0gk8z1TK8nfXmfaTWIeBQaXndnbIo1j3RdgIl4BQ6ThMA + [5]: https://veronicageek.com/office-365/sharepoint-online/modify-the-quick-launch-in-sharepoint-online-sites-using-powershell-pnp/2019/08/ + [6]: https://www.reddit.com/r/PowerShell/comments/cmgs6o/reverse_engineering_powershell_malware/ + [7]: https://www.youtube.com/watch?v=4Rc0aEMXiWw diff --git a/content/articles/2019/09/_index.md b/content/articles/2019/09/_index.md new file mode 100644 index 000000000..c3e5484bb --- /dev/null +++ b/content/articles/2019/09/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from September 2019" +description: "PowerShell.org Articles published in September 2019." +--- diff --git a/content/articles/2019/09/be-a-speaker-at-powershell-and-devops-global-summit-2020/index.md b/content/articles/2019/09/be-a-speaker-at-powershell-and-devops-global-summit-2020/index.md new file mode 100644 index 000000000..1d660ef7e --- /dev/null +++ b/content/articles/2019/09/be-a-speaker-at-powershell-and-devops-global-summit-2020/index.md @@ -0,0 +1,33 @@ +--- +url: /articles/2019-09-03-be-a-speaker-at-powershell-and-devops-global-summit-2020/ +title: Be a Speaker at PowerShell and DevOps Global Summit 2020! +authors: + - Missy Januszko +date: "2019-09-03T17:42:35+00:00" +categories: + - Announcements + - Events + - News + - PowerShell Summit +aliases: + - /2019/09/be-a-speaker-at-powershell-and-devops-global-summit-2020/ +--- + +We are so excited for the 2020 PowerShell and DevOps Global Summit! We’re about halfway through the CFP season and are still looking for your awesome submissions. If you are hesitating, please don’t... think seriously about submitting a topic or two. To help you, we’d like to give you some ideas about what makes a submission stand out (and what doesn’t). + + * **Something Unique…** We’re looking for a new spin or twist on an old (or new) topic. If something similar has been done at a previous Summit, think about how you’re doing something different from what’s previously been presented. DevOps topics are always popular, but what new thing are you doing with your source control, your testing, or your build pipeline? + * **Failures...** Alternatively, is there something you started out to do and at some point, figured out that you it wasn’t going to work the way it was planned? If you’ve had some good lessons learned that you think would benefit others, we’d love to hear about it. + * **Broad scope vs. deep scope...** If you’ve done a snack “bake-off” and could talk about chips, cookies, and crackers, this session would be attended by folks who prefer chips or cookies or crackers. However, a session that is only about cookies might only be of interest to Rambling Cookie Monsters. If you’re a subject matter expert on chips, though, and can show how to use chips to build a house, that would have that uniqueness factor we’re also looking for. + * **Multiple submissions...** Multiple submissions on different topics help us select a wide variety of topics. It’s hard to say from year to year what topics will be popular. For example, we had a lot of Git and Pester submissions last year... not so many this year. We’re looking for variety so submit as many ideas as you have. + * **Something that wasn’t selected last year...** We may have really liked your submission last year and it may have simply been on the bubble. You’re only up against the submissions that we’ve seen for this year, so if you had a submission from last year that you feel passionate about and is still a hot topic, please submit it! + * **“Post OnRamp” submissions are welcome...** We have a graduated class of OnRamp students from last year who we want to continue learning. Therefore, we’ll be looking for a small number of sessions at this level. + +Some additional things we’d like to add: + + * **We don’t care who you are...** If you’re concerned about not being an MVP, haven’t spoken before, or are simply suffering from imposter syndrome, don’t. Every speaker has been a first-time speaker, and we’re specifically looking to introduce some new speakers to the community every year. + * **Don’t procrastinate...** The CFP closes October 1st, no exceptions. It’s open for two months, which is plenty of time. + * **Repeats are iffy...** If you have a talk that’s been done at multiple conferences already, or a talk that’s been recorded and is available on YouTube, it probably won’t be selected. We’re looking for new content. However, if you have a talk you’ve given at a user group meeting that was well-received? Please submit it. + * **Talk to us...** If you’re on the fence about submitting or have a topic you’re thinking about but want to know if there are a bunch of similar topics, please reach out to us at “content [at] powershell [dot] org” and ask. We won’t tell you that we have 17.5 submissions on write-host, but we will say “yeah that’s a really popular topic this year”. (As of today, there aren’t really any topics that are heavily populated, so keep that in mind. And there aren’t any submissions on write-host yet.) + +In case you've forgotten, here's a link to the CFP:  +Let’s keep the submissions coming and we are looking forward to an AWESOME Summit in 2020! diff --git a/content/articles/2019/09/icymi-powershell-week-of-13-september-2019/index.md b/content/articles/2019/09/icymi-powershell-week-of-13-september-2019/index.md new file mode 100644 index 000000000..096f385da --- /dev/null +++ b/content/articles/2019/09/icymi-powershell-week-of-13-september-2019/index.md @@ -0,0 +1,95 @@ +--- +url: /articles/2019-09-13-icymi-powershell-week-of-13-september-2019/ +title: "ICYMI: PowerShell Week of 13-September-2019" +authors: + - Robin Dadswell +date: "2019-09-13T15:00:24+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/09/icymi-powershell-week-of-13-september-2019/ +--- + +Topics include Active Directory, SCCM, Security and More. + + + + + + Special thanks to Robin Dadswell, Mark Roloff, Prasoon Karunan V, and Kevin Laux. + + +###### + [*What do we say to health checking Active Directory?*](https://evotec.xyz/what-do-we-say-to-health-checking-active-directory/) + + + by Przemyslaw Klys on 8th September + + + There are plenty of tools out there to check the health of AD, but Przemyslaw shares the tools he's created with the community. + + +###### + [*CLEANING UP (B)ADMIN ACCOUNTS IN CONFIGMGR*](http://www.obvus.be/2019/09/08/cleaning-up-badmin-accounts-in-configmgr/) + + + by Merlijn Van Waeyenberghe on 8th September + + + Find out an easy way to change accounts within SCCM - especially useful when you have that one admin account that is everywhere. + + +###### + [*Run PowerShell without Powershell.exe — Best tools & techniques*](https://medium.com/@Bank_Security/how-to-running-powershell-commands-without-powershell-exe-a6a19595f628) + + + by Bank Security on 9th September + + + During last months, observing how the attackers and consequently the antivirus are moving, I thought of writing this article for all the pen testers and red teamers who are looking for the best technique to use their PowerShell scripts or command lines during post exploitation phase without running PowerShell.exe and thus avoiding being caught by the Next-Gen Antivirus, EDR or from the Blue Team or Threat Hunting team. + + +###### + [*Weekly Module Spotlight: ImportExcel*](https://www.powershellmagazine.com/2019/09/09/weekly-module-spotlight-importexcel/) + + + by Ravikanth Chaganti on 9th September + + + Ravikanth looks at his module of the week ImportExcel giving a good overview of what is happening. + + +###### + [*Can Parallel For Each Loops in PowerShell 7 Tear Me Away from PoshRSJob?*](https://toastit.dev/2019/09/10/powershell7-foreach-parallel/) + + + by Josh King on 10th September + + + PoshRSJob has been my go to module for Parallelization for years... let's see if a head to head test with the new PowerShell 7 feature will change that. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/d3byf0/powershell_all_the_things/) + + + Of course the most popular Reddit post is a meme. Dig into the comments on this post and find some great information on randomness and using Get-Random with an array. + + +###### + [*Tweet of the Week*](https://twitter.com/AndySvints/status/1171405216350126080) + + + Ever wanted to manage Zoom with PowerShell, well now there is a module for that! + + +###### + [*Youtube: Define Cross-Platform System Configuration Requirements with PowerShell*](https://youtu.be/efRnjlZKCGw) + + + Trevor Sullivan looks at how you create PowerShell "Requirements" on a Mac OS system using the PowerShell module called "Requirements". diff --git a/content/articles/2019/09/icymi-powershell-week-of-20-september-2019/index.md b/content/articles/2019/09/icymi-powershell-week-of-20-september-2019/index.md new file mode 100644 index 000000000..7f4db508f --- /dev/null +++ b/content/articles/2019/09/icymi-powershell-week-of-20-september-2019/index.md @@ -0,0 +1,88 @@ +--- +url: /articles/2019-09-20-icymi-powershell-week-of-20-september-2019/ +title: "ICYMI: PowerShell Week of 20-September-2019" +authors: + - Robin Dadswell +date: "2019-09-20T15:00:15+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/09/icymi-powershell-week-of-20-september-2019/ +--- + +Topics include Active Directory, Azure Labs, Ansible, PowerShell 7 Preview 4 and more. + + + + + + Special thanks to Robin Dadswell, Mark Roloff, Prasoon Karunan V, and Kevin Laux. + + +###### + [*Most Useful PowerShell Cmdlets for Managing and Securing Active Directory*](https://www.petri.com/most-useful-powershell-cmdlets-for-managing-and-securing-active-directory) + + + by Russell Smith on 16th September + + + Examples of some useful Active Directory PowerShell commands and how to use them. + + +###### + [*Building Azure DevTest Labs with PowerShell*](https://mcpmag.com/articles/2019/09/17/azure-devtest-labs-with-powershell.aspx) + + + by Adam Bertram on 17th September + + + Learn how to use a freely available PowerShell module called PSAzDevTestLabs to build Azure DevTest Labs, add VMs to them and more. + + +###### + [*Ansible, Windows and PowerShell: the Basics – Introduction*](https://www.jonathanmedd.net/2019/09/ansible-windows-and-powershell-the-basics-introduction.html) + + + by Jonathan Medd on 18th September + + + A follow up to the a recent session at PowerShell Southampton on using both Ansible and PowerShell together. + + +###### + [*PowerShell 7 Preview 4*](https://devblogs.microsoft.com/powershell/powershell-7-preview-4/) + + + by Steve Lee on 19th September + + + Announcement around PowerShell 7 Preview 4, touching on some of the changes. + + +###### + [*Creating an Azure SQL Database backup via Powershell*](https://demiliani.com/2019/09/20/creating-an-azure-sql-database-backup-via-powershell/) + + + by Stefano Demiliani on 20th September + + + Find yourself needing to backup Azure SQL databases and download that backup? Here's a neat way to automate the process! + + +###### + [*Tweet of the Week*](https://twitter.com/richardhicks/status/1173568514080292864) + + + Richard Hicks puts his Windows 10 Always on VPN and Direct Access scripts on GitHub! + + +###### + [*Youtube: Customize Your PowerShell Prompt with Nerd Fonts & ANSI Escape Sequences*](https://www.youtube.com/watch?v=DhzR7mbFE9I) + + + You can spice up your PowerShell prompt by using a variety of techniques. In this video, we'll take a look at using ANSI escape sequences to colorize various components of your prompt, using Nerd Fonts to add glyphs (icons) to your prompt, and how you can write content anywhere on the terminal using coordinates. diff --git a/content/articles/2019/09/icymi-powershell-week-of-27-september-2019/index.md b/content/articles/2019/09/icymi-powershell-week-of-27-september-2019/index.md new file mode 100644 index 000000000..faa1f1f8c --- /dev/null +++ b/content/articles/2019/09/icymi-powershell-week-of-27-september-2019/index.md @@ -0,0 +1,94 @@ +--- +url: /articles/2019-09-27-icymi-powershell-week-of-27-september-2019/ +title: "ICYMI: PowerShell Week of 27-September-2019" +authors: + - Robin Dadswell +date: "2019-09-27T15:00:29+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +aliases: + - /2019/09/icymi-powershell-week-of-27-september-2019/ +--- + +Topics include emojis, orchestration, 365 storage, ternary operators, bash and more. + + + + + + Special thanks to Robin Dadswell, Mark Roloff, Prasoon Karunan V, and Kevin Laux. + + +###### + [*VM orchestration using PowerShell Core and Azure Functions*](https://dev.to/omiossec/vm-orchestration-using-powershell-core-and-azure-functions-2faa) + + + by Olivier Miossec on 23rd September + + + Imagine a situation where you need to download data from external sources and you need to make complex calculations and aggregations on it. You don't know in advance the amount of data you will have and the schedule of flow during the day, more calculations and aggregations process are mono-thread. Find out how to setup this using PowerShell! + + +###### + [*Clear Office 365 Storage Size with Versioning*](https://devscopeninjas.azurewebsites.net/2019/09/24/clear-office-365-storage-size-with-versioning/) + + + by Ricardo Calejo on 24th September + + + One of the things most people don’t know when creating a Group or a Team with an associated SharePoint Site, or even a new sitecollection, is that out of the box, its document libraries (or similar) have versioning enabled and supporting a maximum of 500 versions. This a cool feature, but can impact your Office365 storage quota and severely decrease its size. + + +###### + [*Getting Familiar with the Ternary Operator in PowerShell 7*](https://toastit.dev/2019/09/25/ternary-operator-powershell-7/) + + + by Josh King on 25th September + + + What the heck is a "ternary" and what's it doing in my PowerShell?! + + +###### + [*Integrate Linux Commands into Windows with PowerShell and the Windows Subsystem for Linux*](https://devblogs.microsoft.com/commandline/integrate-linux-commands-into-windows-with-powershell-and-the-windows-subsystem-for-linux/) + + + by Mike Battista on 26th September + + + A common question Windows developers have is “why doesn’t Windows have 'INSERT FAVORITE LINUX COMMAND HERE' yet?”. Whether longing for a powerful pager like less or wanting to use familiar commands like grep or sed, Windows developers desire easy access to these commands as part of their core workflow. + + +###### + [*Generate an overview of all Microsoft Flows with PowerShell*](https://www.cloudsecuritea.com/2019/09/generate-an-overview-of-all-microsoft-flows-with-powershell/) + + + by Maarten Peeters on 26th September + + + Users can easily create flows in SharePoint and in their OneDrive so as a company you want to monitor and manage this behaviour. With PowerShell you can generate a list all flows that have been created and who created it. This way you can keep track on who’s building flows, which triggers and actions are users using and the current state of the flow. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/d8exe0/powershell_is_now_part_of_the_net_core_30/) + + + .Net Core 3.0 is now released and with it new container images. By popular demand Microsoft is now including PowerShell Core as part of the .Net Core 3.0 SDK container image. + + +###### + [*Tweet of the Week*](https://twitter.com/lee_ford/status/1177329239806349315) + + + PowerShell and Emojis... say no more! + + +###### + [*Youtube: PowerShell Module Development*](https://www.youtube.com/watch?v=uq5GfJ3dCxg&) + + + Asish Raj Discusses the ins and outs of PowerShell Modules on his PowerShell basics series. diff --git a/content/articles/2019/09/icymi-powershell-week-of-6-september-2019/index.md b/content/articles/2019/09/icymi-powershell-week-of-6-september-2019/index.md new file mode 100644 index 000000000..5e615d459 --- /dev/null +++ b/content/articles/2019/09/icymi-powershell-week-of-6-september-2019/index.md @@ -0,0 +1,95 @@ +--- +url: /articles/2019-09-06-icymi-powershell-week-of-6-september-2019/ +title: "ICYMI: PowerShell Week of 6-September-2019" +authors: + - Robin Dadswell +date: "2019-09-06T15:00:20+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/09/icymi-powershell-week-of-6-september-2019/ +--- + +Topics include PowerShell meetups, Network Connections, PowerShell on Android, Regex and more. + + + + + + Special thanks to Robin Dadswell, Mark Roloff, Prasoon Karunan V, and Kevin Laux. + + +###### + [POWERSHELL SATURDAY: RALEIGH 2019](https://www.networkadm.in/rtpsug-powershell-saturday/) + + + by Mike Kanakos on 1st of September + + + Research Triangle PowerShell Users Group is hosting a PowerShell Saturday. Get Mike's insight on what a PowerShell Saturday is and details about how the event will be set up in Raleigh, NC. + + +###### + [Detecting Wired, Wireless, and VPN Connections using PowerShell](https://deploymentresearch.com/detecting-wired-wireless-and-vpn-connections-using-powershell/) + + + by Johan Arwidmark on 2nd of September + + + Johan was having trouble detecting network connection type across 50k machines in his environment. In his blog post he shares some details about a script he used to check if a system was using wired/wireless/VPN. + + +###### + [I run PowerShell on Android and so can you !!](https://dev.to/thementor/i-run-powershell-on-android-and-so-can-you-458k) + + + by TheMentor on 3rd of September + + + Step by Step guide detailing the process of installing PowerShell on an Android device. + + +###### + [*Weekly Module Spotlight: Polaris*](https://www.powershellmagazine.com/2019/09/03/weekly-module-spotlight-polaris/) + + + by Ravikanth Chaganti on September 3rd + + + Polaris is a cross-platform, minimalist web framework for PowerShell that is quick and easy to use. + + +###### + [*PowerShell ForEach-Object Parallel Feature*](https://devblogs.microsoft.com/powershell/powershell-foreach-object-parallel-feature/) + + + by Paul Higinbotham on September 4th + + + PowerShell 7.0 Preview 3 is now available with a new ForEach-Object Parallel Experimental feature. This feature is a great new tool for parallelizing work, but like any tool, it has its uses and drawbacks. This article describes this new feature, how it works, when to use it and when not to. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/d0fovu/speaker_opportunities_for_powershell_southampton/) + + + Speaker Opportunities for PowerShell Southampton User Group + + +###### + [*Tweet of the Week*](https://twitter.com/BrettMiller_IT/status/1169226147315539968) + + + Brett asks about using git with PowerShell. + + +###### + [*Youtube: Detecting Text Patterns with PowerShell Regular Expressions*](https://www.youtube.com/watch?v=GUUF8TIL6Pg) + + + When you want to extract some text from a string, regular expressions come to the rescue. There are a few different ways of using regular expressions in PowerShell, but the -match operator is arguably the easiest. We'll take a look at how to use the -match operator to evaluate regular expressions against singleton and array string values. We'll also explore the built-in $matches variable, which gets populated when you have a positive match against a singleton string value, using the -match operator. diff --git a/content/articles/2019/09/last-call-for-summit-2020-cfp/index.md b/content/articles/2019/09/last-call-for-summit-2020-cfp/index.md new file mode 100644 index 000000000..e1c5a5414 --- /dev/null +++ b/content/articles/2019/09/last-call-for-summit-2020-cfp/index.md @@ -0,0 +1,116 @@ +--- +url: /articles/2019-09-21-last-call-for-summit-2020-cfp/ +title: Last Call for Summit 2020 CFP +authors: + - pscookiemonster +date: "2019-09-21T01:37:43+00:00" +categories: + - Announcements + - DevOps + - PowerShell for Admins + - PowerShell for Developers + - PowerShell Summit +legacy_featured_image: /wp-content/uploads/2019/09/docs.jpg +aliases: + - /2019/09/last-call-for-summit-2020-cfp/ +--- + +So! [Proposals][1] for the PowerShell + DevOps Global Summit 2020 are due in less than two weeks, on October 1st. We have some solid talks lined up, but we're still behind where we were last year, and need more proposals! +We've heard a lot of questions - _What topics are you looking for?_, _I don't know what to propose!_ and so on. Let's cover some ways to find topics and hopefully spark some ideas! + +## Add some spice + +First things first: We're not going to come up with your topic! [This bit][2] has some solid advice on mixing things up: + + + +* I saw a talk with X format and decided to apply it to Y subject. + + +* While working on a project, I thought, “Wow! I wish I knew X, Y, and Z before I started!” + + +* A conversation with coworkers about X led me to see the potential for a talk on it. + + +The key here is that there are plenty of ways to add variety to a topic - these certainly aren't comprehensive, just a few ideas. + +### Spice up Pester + +As an example, if we asked for _Pester_ sessions, there are plenty of ways to come up with a unique Pester talk. + + * Can you use Pester for security things (compliance, CI/CD, vulnerability assessments, etc.)? + * Can you use Pester for data validation of some sort (e.g. AD, SQL)? + * Have you used Pester for Infrastructure testing? + * Might you use Pester for Monitoring? (even if this might not be the optimal way to monitor things) + +At the end of the day, PowerShell can be used across a variety of fields, and general purpose tools like Pester can be used in each of those, in unique ways. + +### Other spices + +So! We used a few specific-ish variations of Pester as an example.  Take a step back and consider PowerShell itself: + + * How do you use PowerShell in different fields (keeping in mind that each field has it's own set of sub-fields)? Bonus points if the concepts / ideas / code you include are applicable in a variety of fields. + * How do you use PowerShell outside of work, or for general productivity (side note: running this CFP would be a _paaaaain_ without PowerShell!). + * What lessons can we take from other fields, ecosystems, or projects? For example, while these may seem new-ish to some of us, we borrowed and applied testing, CI/CD, and other ideas that have long been integrated in the ecosystems of other languages. + +All this said, please don't think you need something super unique and never-before-seen! + +## Tried and true + +Every day, new folks enter the field, or start learning about PowerShell, automation, DevOps, etc. Yes, people have talked about testing and other topics in the past... but guess what? Chances are we'll still accept some solid talks on important concepts. +So! What are some of these evergreen topics? + + * Release pipelines, including the individual components you might find: + * Source control + * Build systems and frameworks + * Pester and testing + * Deployment + * PowerShell modules or advanced functions + * How to write them + * Best practices + * How to distribute and maintain them + * etc. + * Using common tools/practices with PowerShell + * VSCode and extensions + * Windows Subsystem for Linux + * Debugging + * etc. + +There's plenty more. You can probably think about other core topics that folks will always need to learn, re-learn, or catch up on new ideas for. + +## 2020 specifics + +So!  What about the 2020 summit?  A few notes on our current state: + +### Topics we're looking for + +Keep in mind everything we've said so far. Don't overthink it. Show us something _you_ are interested in or working on. That being said, we haven't seen many submissions on: + + * Monitoring + * Testing and Pester + * DSC, or wrapping DSC (a la dsc_lite) + * Functions + * Modules + +### Topics that will have competition + +Every year, we have some topics that have a bit of competition. This year is no different. If you have something to share on these topics _don't let this scare you off_, just know there will be a little competition. + + * Kubernetes + * Working with web APIs + * Contributing to open source + * Azure (granted, I _much_ prefer attendee talks to vendor happy-path talks, for what it's worth) + +That's about it! We have less than two weeks and need more proposals, now is a good time to start writing them!  We'll close with a few handy links: + + * [2020 PowerShell + DevOps Global Summit CFP][1] - closing October 1st + * [2019 CFP ideas][3] - still applicable, although many of DevOps tools considered _esoteric_ might be worth a proposal + * [2020 CFP ideas][4] + * #Conferences in the [PowerShell Slack team][5] - plenty of folks willing to chat about or review your proposals in there.  You can also ping content@powershell.org, but the Slack route is faster, and has more eyes on it + + [1]: https://www.papercall.io/summit2020 + [2]: https://www.freecodecamp.org/news/how-to-get-a-technical-talk-accepted-at-a-conference-or-event-8ba291d11c62/ + [3]: https://powershell.org/2018/08/the-summit-2019-call-for-topics-some-ideas/ + [4]: https://powershell.org/2019/09/be-a-speaker-at-powershell-and-devops-global-summit-2020/ + [5]: http://bit.ly/PSSlack diff --git a/content/articles/2019/09/the-ternary-cometh/index.md b/content/articles/2019/09/the-ternary-cometh/index.md new file mode 100644 index 000000000..78b82b2d0 --- /dev/null +++ b/content/articles/2019/09/the-ternary-cometh/index.md @@ -0,0 +1,51 @@ +--- +url: /articles/2019-09-12-the-ternary-cometh/ +title: The Ternary Cometh +authors: + - Colyn Via +date: "2019-09-12T21:35:34+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks + - Tutorials +aliases: + - /2019/09/the-ternary-cometh/ +--- + +Developers are likely to be familiar with ternary conditional operators as they're legal in many languages (Ruby, Python, C++, etc).  They're also often used in coding interviews to test an applicant as they can be a familiar source of code errors.  While some developers couldn't care less about ternary operators, there's been a cult following waiting for them to show up in Powershell.  That day is [almost upon us.][1] +Any Powershell developer can easily be forgiven for scratching their heads and wondering what a ternary is.  In the most basic sense a ternary evaluates an expression to a binary result and carries out one of two possible outcomes.  Lets start by looking at some code examples: + + +`puts (if 1 then 2 else 3 end) +2`PS > 1 ? 2 : 3 +PS > 2 +`The above is the same conditional expressed first in Ruby, then in Powershell, and both examples have a return of 2.  First off, let's get around the obvious confusion in the Powershell example.  The alias for Where-Object is '?', and that is not what the '?' represents in the powershell ternary operation.  The likely reason for implementing '?' instead of another character is for inter-language operability and reducing the level of effort for migrating code from other languages to Powershell. +The best way to explain how to read the ternary example above is to express it in a more familiar context.  That is to say, let's turn it into an If/Then/Else statement: + + +`if(1){2}else{3} +`Right off we can see one of the benefits of a ternary is that it makes code more succinct.  It should also make more sense why we refer to the ternary as a conditional operator.  It's intended as an optional replacement for If/Than/Else in much the same way that Select/Case is for organizing multiple conditional statements.  Wondering if there's a performance enhancement? +![](https://scontent.xx.fbcdn.net/v/wl/t1.15752-0/s480x480/70352759_377454299851433_6857271860543881216_n.png?_nc_cat=105&_nc_log=1&_nc_oc=AQmAjykQ4CuOWI8SBA_aHRSBjOdpHV-OrzlMs9iI9J6egJ2w6vNGr5AuYIRZkJNQJiQ4JH7ENVdcNKNy-UGUyGb-&_nc_ht=scontent.xx&oh=4db9b829b678c0e87ec610471f7054b5&oe=5DF6EE21) +Nope.  So the ternary is intended to boost readability but does that happen in reality?  Some engineers, who shall remain nameless, misuse its purpose into statements you'll wish you could unsee or will make your eyes bleed.  For example: + + +`Bool c1, c2,c3; +// Assign some values to c1, c2 and c3. +int x = c1?c2?1:2:c3?3:4; +`Who wants to code review that?  Or decipher it while trying to resolve a problem that's affecting your critical operations? +There's a definite place for ternary operators in Powershell.  They have the potential to enhance the programing experience while simplifying readability.  Some will look upon the ternary as a way to show off their elite skills and create code only they can read.  The great engineers will leverage the best syntax for the correct reason at just the right moment in their code.  If you want to experiment with Powershell ternary operators early, grab the build linked above (or any later build) and run ' +Enable + +- + +ExperimentalFeature + +PSTernaryOperator'. + + +Please, enjoy ternary operators responsibly. +Remembering [Dorothy Vaughan][2] on this anniversary of JFK's "We choose to go to the Moon" speech. + + [1]: https://powershell.visualstudio.com/PowerShell/_build/results?buildId=31915 + [2]: https://en.wikipedia.org/wiki/Dorothy_Vaughan diff --git a/content/articles/2019/10/2020-conference-recording-changes/index.md b/content/articles/2019/10/2020-conference-recording-changes/index.md new file mode 100644 index 000000000..b13485599 --- /dev/null +++ b/content/articles/2019/10/2020-conference-recording-changes/index.md @@ -0,0 +1,83 @@ +--- +url: /articles/2019-10-15-2020-conference-recording-changes/ +title: 2020 Conference Recording Changes +authors: + - pscookiemonster +date: "2019-10-15T13:14:41+00:00" +categories: + - PowerShell Summit +aliases: + - /2019/10/2020-conference-recording-changes/ +--- + +Hi all! +So!  You might have seen that the way the PowerShell + DevOps Global Summit records and distributes sessions will be changing.  Long story short:  The presenter will maintain all rights to the material and intellectual property, and Pluralsight will own distribution rights to the recording. +There are many valid reasons to be upset about this.  Let's walk through (1) what we gain from this, and (2) how we can work around some of the valid concerns + +## Why use Pluralsight? + +Money.  I know.  Disappointing.  In 2020, we'll be saving over $100k by using Pluralsight for the two conferences. But... what does this actually mean? Are we trying to turn a profit? Nope! Let's look on the bright side: + + * **More speakers**.  We had 39 last year.  We have 50 this year, pending speaker confirmations ([tentative agenda][1]).  This means more new speakers! + * **Fewer multi-session speakers**.  We needed 16 in 2019.  We have 5 this year.  This means less stress + * **More scholarships**.  Excluding conference book funded scholarships, we had 5 scholarships in 2019, up to 10 ~$4,500 scholarships in 2020 + * **Same small conference.**  We don't need to add seats and can maintain the higher speaker-and-PS-team-to-attendee ratio + +So!  These are all good things, and we should keep them in mind, but let's dive into some of the complaints about this change. + +## Why are you taking away our recordings! + +> Given the response from the community, it seems prudent for the organisers to at least state their intent.  To help stop the perceived (or real) conflict of interest here.  Both with Don and other PluralSight employees in the conference committee +> - Glenn Sarti + +Yep, thanks for getting us to write this, we probably should have had something like this ready.  Next year.  Unless something changes - we do read conference feedback! +Oh!  In case anyone missed [the announcement][2] - while we do occasionally pester Don for advice, he is no longer involved in running the conference.  Of those of us running the conference, Missy authored a course for Pluralsight three years ago, but had no involvement in the decision, and that's the extent of our direct relationships to Pluralsight.  And just to re-iterate - both sides benefit from this contract, assuming you see the bright sides we listed as benefits! + +> Lotta folks in the community going to that event (even some of the speakers, I'm sure) are there because the yt vids of times past helped them immensely along their way +> - Joel Sallow +> That's very unfortunate. I'm still in talks with the wife about being in a financial position to be able to attend this time around. Pluralsight is expensive and my current company isn't keen on paying for anything that they don't deem as necessary. +> - Matt Bobke +> I'm against these sessions which are not only produced for free, but at significant cost for the speakers, being put behind a pay wall +> - Thomas Rayner + +Totally!  I won't lie - this will gate off some of the material.  That said, +(1) speakers can, and should, upload all materials.  These will still be available to everyone, and +(2), speakers are _encouraged_ to get practice speaking ahead of the conference, and would likely be in demand from one of the several PowerShell user groups who do recorded presentations, before or after the conference. +Ultimately, a good portion of these sessions will end up out there in some form or another. + +> This goes against the historical nature of the community and will be detrimental to the conference/s in future +> ... +> it feels like a sell out tbh and will damage your event's reputation going forward +> - Ryan Yates + +I get it - I'd prefer the recordings be out there in the open as well.  Here's the thing though:  If you balance getting new speakers involved, the several all-costs-paid scholarships we've added, the reduced stress from fewer multi-session speakers, that the session materials can and should be distributed openly, and the potential workaround that any user group may record these before or after the fact - is this detrimental to the conference or damaging to the event's reputation?  I guess it depends on who you ask, but it seems a little more nuanced. + +> ", and that a talent release form may be required 30 days prior to the show." +> Not sure how enforcable or even legal for non-US people. This is risk for speakers with only 30 days, given how far out the CFP and acceptance process is. We would do all this work ... to find out we can't sign the release form. +> - Glenn Sarti + +Totally.  As soon as details are finalized we'll be in touch with speakers, the 30 day thing is just a deadline.  I'm hoping they can live with just the e-mail acks, but there's a chance we'll need signatures as mentioned there. + +> Sorry if you're feeling attacked @psjamesp. I know you and the crew work hard to put on a good event. +> - Chris Hunt +> Echoing @cdhunt it's the decision that I disagree with, not the people that collectively make said decision +> - Ryan Yates +> Yeah, we love and appreciate you guys. Just concerned about the impact on the wider community 🙂 +> - Joel Sallow + +<3.  Thank you all for bringing up these points without bringing too many pitchforks : ) + +## What now? + +So!  Yes, it's sad.  But some good will come out of this, and you can help ensure folks without access to Pluralsight or the conference can still access the content: + + * Are you a speaker?  Want to talk at a user group to ensure you are recorded in a publicly available format?  Ping Warren + * Are you interested in a session that is only available on Pluralsight?  Ping the speaker to see if they would be interested in speaking and recording at a user group + * Are you hoping we change this for next year, even with the benefits it gives us?  Be sure to tell us in the conference feedback, or ping summit@powershell.org + * Do you want to convince PluralSight to open these up beyond subscription or conference-goer gates?  This likely won't be possible, but give Thomas Rayner a ping in Discord + +We'll update this post with specifics on how access to the content will work, once this has been finalized. + + + [1]: https://sessions.eventraft.com/PowerShell2020 + [2]: https://powershell.org/2019/07/a-farewell-and-a-bunch-of-hellos/ diff --git a/content/articles/2019/10/_index.md b/content/articles/2019/10/_index.md new file mode 100644 index 000000000..91d63c2ed --- /dev/null +++ b/content/articles/2019/10/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from October 2019" +description: "PowerShell.org Articles published in October 2019." +--- diff --git a/content/articles/2019/10/icymi-powershell-week-of-11-october-2019/index.md b/content/articles/2019/10/icymi-powershell-week-of-11-october-2019/index.md new file mode 100644 index 000000000..55315d01e --- /dev/null +++ b/content/articles/2019/10/icymi-powershell-week-of-11-october-2019/index.md @@ -0,0 +1,102 @@ +--- +url: /articles/2019-10-11-icymi-powershell-week-of-11-october-2019/ +title: "ICYMI: PowerShell Week of 11-October-2019" +authors: + - Robin Dadswell +date: "2019-10-11T15:00:10+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/10/icymi-powershell-week-of-11-october-2019/ +--- + +Topics include PowerShell GUIs, New PS 7 features and more + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. + + +###### + [*Making Sense of Parallel FOREACH-OBJECT in Powershell 7*](https://jdhitsolutions.com/blog/powershell/6840/making-sense-of-parallel-foreach-object-in-powershell-7/) + + + by Jeffery Hicks on 7th October + + + Having this feature as part of the language is a welcome addition. But this isn’t magic and there are real-world consequences when you use it. The -Parallel parameter will spin up a collection of runspaces and run your scriptblock in each one. Running something in parallel does not mean in order. + + +###### + [*Select an Azure Subscription Easily*](https://www.yobyot.com/cloud/select-azure-subscription-easily/2019/10/08/) + + + by Alex Neihaus on 8th of October + + + You can use the power of the PowerShell pipeline with OGV to actually make it easy to select the active Azure subscription you want. + + +###### + [*Ansible, Windows and PowerShell: the Basics – Part 3, Windows Roles and Features*](https://www.jonathanmedd.net/2019/10/ansible-windows-and-powershell-the-basics-part-3-windows-roles-and-features.html) + + + by Jonathan Medd on 8th of October + + + Part 3 of a multipart post about using Ansible and PowerShell to prepare servers with Windows Roles and Features. + + +###### + [*Simple PowerShell Chat*](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/simple-powershell-chat) + + + posted on Idera on 9th of October + + + Here’s a fun PowerShell script that you can use to create a simple multi-channel chat room. All you need is a network share where everyone has read and write permissions. + + +###### + [*Deep Dive: PowerShell Loops and Iterations*](https://ridicurious.com/2019/10/10/powershell-loops-and-iterations/?fbclid=IwAR0vPLDIlpyXEwmxcIkPJlhA5ISk7I_EvCDSZoTJapF1jjVHdqj0ARmF_ig) + + + by Akshi Srivastava on 10th of October + + + PowerShell supports many different types of loops Akshi does a great job of explaining them all. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/dfa89u/psscriptmenugui_use_a_csv_file_to_make_a/) + + + User Weebsnore shares a way to turn a csv file into a GUI for launching multiple powershell scripts. + + +###### + [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1181950525832495104) + + + Stevelee demos a new feature of Select-String in PS 7 Preview 5, text highlighting. + + +###### + [*Youtube: LetsPlay Powershell: PSKoans #14*](https://www.youtube.com/watch?v=aHlI2_0oiws) + + + If you've never used PSKoans before this video shows how it can be a fun way to learn PowerShell with Pester tests. + + +###### + [*Podcast*](https://powershellnews.podbean.com/e/episode-021-interview-with-david-littlejohn-and-james-petty-at-powershell-on-the-river/) + + + This episode was recorded at the PowerShell on the River event. It is a sitdown interview with David Littlejohn and James Petty. We discuss the speakers and topics at the event, while also talking about future PowerShell events across the country. We also discuss the OnRamp program and its value to both the industry and the students. diff --git a/content/articles/2019/10/icymi-powershell-week-of-18-october-2019/index.md b/content/articles/2019/10/icymi-powershell-week-of-18-october-2019/index.md new file mode 100644 index 000000000..fe5d0827d --- /dev/null +++ b/content/articles/2019/10/icymi-powershell-week-of-18-october-2019/index.md @@ -0,0 +1,96 @@ +--- +url: /articles/2019-10-18-icymi-powershell-week-of-18-october-2019/ +title: "ICYMI: PowerShell Week of 18-October-2019" +authors: + - Robin Dadswell +date: "2019-10-18T15:00:38+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/10/icymi-powershell-week-of-18-october-2019/ +--- + +Topics include idempotency, Jenkins, PowerShell for beginners and more. + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. + + +###### + [*PowerShell Beginners Have to Start Somewhere*](https://powershell.anovelidea.org/powershell/iron-scripter-challenge-beginner-walk-through/) + + + by Dave Carroll on 13th October + + + A nice beginners guide to learning PowerShell with an overview of many concepts. + + +###### + [*Writing Idempotent PowerShell scripts*](https://robindadswell.github.io/blog/2019/10/14/writing-idempotent-powershell-scripts) + + + by Robin Dadswell on 14th October 2019 + + + An insight into how to write idempotent PowerShell scripts using a file as a simple example. + + +###### + [*Encrypting Text (Part 1)*](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/encrypting-text-part-1) + + + by Idera website on 15th October 2019 + + + Let’s take a look at a safe way of encrypting text on a computer. The Protect-Text function in this article takes any text and encrypts it automatically, no password needed. Instead of a password, it uses either your user account and machine, or just your machine as a secret. + + +###### + [*Running PowerShell Scripts With Jenkins and Git*](https://adamtheautomator.com/jenkins-powershell-git/) + + + by Phillip Marshall on 17th October + + + Learn how to integrate Git version control with Jenkins to set up and schedule PowerShell scripts to run at predefined schedules. + + +###### + [*Web Scraping with PowerShell*](https://www.pipehow.tech/invoke-webscrape/) + + + by Emanuel Palm on 17th October + + + Sometimes you end up in situations where you want to get information from an online source such as a webpage, but the service has no API available for you to get information through and it’s too much data to manually copy and paste. Or maybe you need to register a lot of entries on a website, but don’t have a bored friend to help out. Fear not, PowerShell can be your bored friend if you ask nicely! + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/dgqty6/list_of_best_online_courses_to_learn_powershell/) + + + User gandhiN puts together a list of the best courses online to learn PowerShell, linking to sites like Pluralsight, Skillshare and Udemy. + + +###### + [*Tweet of the Week*](https://twitter.com/PSConfEU/status/1183628841828474881) + + + A call for speakers for PSConf Europe June 2020. + + +###### + [*Youtube: PowerShell Errors and Exceptions Handling*](https://www.youtube.com/watch?v=A6afjA5Q9eM) + + + Learn how to handle PowerShell Errors and Exceptions. See how to recognize and deal with non-terminating and terminating PowerShell errors. Take control and handle various errors with try catch. Explore rich PowerShell error objects and see how to drill down into error properties. Wrap up with a practical example where you can provide better feedback to your users when your PowerShell code encounters the unexpected. diff --git a/content/articles/2019/10/icymi-powershell-week-of-25-october-2019/index.md b/content/articles/2019/10/icymi-powershell-week-of-25-october-2019/index.md new file mode 100644 index 000000000..3fc91b2c9 --- /dev/null +++ b/content/articles/2019/10/icymi-powershell-week-of-25-october-2019/index.md @@ -0,0 +1,96 @@ +--- +url: /articles/2019-10-25-icymi-powershell-week-of-25-october-2019/ +title: "ICYMI: PowerShell Week of 25-October-2019" +authors: + - Robin Dadswell +date: "2019-10-25T15:00:13+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/10/icymi-powershell-week-of-25-october-2019/ +--- + +Topics include RepAdmin, Certificates and Testing Teams connections. + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. + + +###### + [*My current #PowerShell #Pomodoro timer*](https://msunified.net/2019/10/22/my-current-powershell-pomodoro-timer/?utm_content=buffer8f30b&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer) + + + by Ståle Hansen on 22nd October + + + Since Microsoft Teams arrived, I have had some issues adjusting and it has taken some time. But now I have incorporated Teams in my PowerShell Pomodoro timer, by simply closing it during my focus session and opening it again. I found that even if I used the newly implemented focus time in Teams, I still saw the number of unread notifications in the client. This was disturbing enough to bring me out of flow. + + +###### + [*Copy certificate to the Windows Services store*](https://www.shellandco.net/blog/2019/10/22/copy-certificate-to-the-windows-services-store/) + + + by Nicolas Hahang on 22nd October + + + Find out how to locate a certificate and utilise them for a Windows Service. + + +###### + [*Microsoft Teams Direct Routing SIP Tester PowerShell Script*](https://tomtalks.blog/2019/10/microsoft-teams-direct-routing-sip-tester-powershell-script/) + + + by Tom Arbuthnot on 21st October + + + “SIP Tester” is a sample PowerShell script from Microsoft that you can use to test Direct Routing Session Border Controller (SBC) connections in Microsoft Teams. This script tests the basic functionality of a customer-paired Session Initiation Protocol (SIP) trunk with Direct Routing. + + +###### + [*Repadmin vs. PowerShell AD replication cmdlets*](https://4sysops.com/archives/repadmin-vs-powershell-replication-cmdlets/) + + + by Krishnamoorthi Gopal on 21st October + + + When it comes to fixing Active Directory replication issues, the Repadmin tool has been your first choice since the launch of Windows 2003. However, the PowerShell replication cmdlets are now offering more flexibility. Find some pros and cons in this article. + + +###### + [*Copy multi-valued Active Directory attributes from one user to another with PowerShell*](https://devblogs.microsoft.com/scripting/copy-multi-valued-active-directory-attributes-from-one-user-to-another-with-powershell/) + + + by Doctor Scripto on 23rd October + + + We are in the middle of an Active Directory migration and need to copy the multi-valued attribute “ProxyAddresses” from old user accounts to new ones. Can you do with a few lines of code? + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/dlgf7f/thanks_to_this_subreddit_i_finally_finished_my/) + + + User shares his success story of building a GUI template cloning tool for VMs with the help of the PowerShell subreddit. + + +###### + [*Tweet of the Week*](https://twitter.com/PowerShell_Team/status/1187084663346454528) + + + PowerShell 7 Preview 5 is officially released check out the post to get details on new features. + + +###### + [*Youtube: From Scripting to Toolmaking- Taking the Next Step with Powershell*](https://www.youtube.com/watch?v=tMDZt7bC6XE) + + + A recent session from Spice World ATX. diff --git a/content/articles/2019/10/icymi-powershell-week-of-4-october-2019/index.md b/content/articles/2019/10/icymi-powershell-week-of-4-october-2019/index.md new file mode 100644 index 000000000..ea5f59463 --- /dev/null +++ b/content/articles/2019/10/icymi-powershell-week-of-4-october-2019/index.md @@ -0,0 +1,95 @@ +--- +url: /articles/2019-10-04-icymi-powershell-week-of-4-october-2019/ +title: "ICYMI: PowerShell Week of 4-October-2019" +authors: + - Robin Dadswell +date: "2019-10-04T15:00:07+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/10/icymi-powershell-week-of-4-october-2019/ +--- + +Topics include PowerShell GUIs, Azure, Exchange and more. + + + + + + Special thanks to Robin Dadswell, Mark Roloff, Prasoon Karunan V, and Kevin Laux. + + +###### + [*How to work with the WSUS PowerShell module*](https://searchwindowsserver.techtarget.com/tutorial/How-to-work-with-the-WSUS-PowerShell-module) + + + by Dan Franciscus on 27th September + + + The PoshWSUS module automates the process to synchronize and approve Windows updates. You can also use it to perform essential maintenance on the WSUS server. + + +###### + [*Report Exchange Online Mailbox Quota Usage Over Set Threshold*](https://office365itpros.com/2019/09/30/report-exchange-online-mailbox-quota-usage-over-threshold/) + + + by Tony Redmond on 30th September + + + A new twist to an old script, find a way to report on Mailbox quota's using PowerShell! + + +###### + [*Azure Sentinel: automating your Use Cases with PowerShell and the #AzSentinel module*](https://medium.com/wortell/azure-sentinel-automating-your-use-cases-with-powershell-and-the-azsentinel-module-380606e601f5) + + + by Maarten Goet on 30th September + + + Say hello to our open-source PowerShell module called AzSentinel. The goal is to provide programmatic access to Azure Sentinel. + + +###### + [*Use powershell to create Azure AD dynamic security group for Azure AD joined (AADJ) devices only*](http://eskonr.com/2019/10/use-powershell-to-create-azure-ad-dynamic-security-group-for-azure-ad-joined-aadj-devices-only/) + + + by Eswar Koneti on 2nd October + + + Need to have a group which is based on attributes which cannot be used in Dynamic AAD groups, well with PowerShell we can make it so! + + +###### + [*How to Build a PowerShell Menu GUI for your PowerShell Scripts*](https://adamtheautomator.com/powershell-menu-gui/) + + + by Nathan Kasco on 3rd of October + + + It's weekend project time again and today you will learn how to build a lightweight system tray context menu where you can quickly and easily launch your most coveted PowerShell scripts. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/darvhv/i_made_a_module_to_download_depressing_lock/) + + + User *stib* shares with us his module in the PowerShell Gallery to update lockscreen images with some that are a bit less cheery. + + +###### + [*Tweet of the Week*](https://twitter.com/Jaykul/status/1179479231769784327) + + + An interesting thread on interview questions that understand enumerations. + + +###### + [*Youtube: Basic Powershell Commands For Beginners*](https://www.youtube.com/watch?v=j9wtAezZ9x0&feature=youtu.be) + + + In this video we will be taking a look at some basic powershell commands which are essential when using powershell. diff --git a/content/articles/2019/10/untitled/index.md b/content/articles/2019/10/untitled/index.md new file mode 100644 index 000000000..44102c8cc --- /dev/null +++ b/content/articles/2019/10/untitled/index.md @@ -0,0 +1,89 @@ +--- +url: /articles/2019-10-18-/ +title: "ICYMI: PowerShell Week of 18-October-2019" +authors: + - Robin Dadswell +date: "2019-10-18T00:00:00+00:00" +categories: + - PowerShell for Admins +draft: true +--- + +# + + + Topics include idempotency, Jenkins, PowerShell for beginners and more. + + + Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. + + +###### + [*PowerShell Beginners Have to Start Somewhere*](https://powershell.anovelidea.org/powershell/iron-scripter-challenge-beginner-walk-through/) + + + by Dave Carroll on 13th October + + + A nice beginners guide to learning PowerShell with an overview of many concepts. + + +###### + [*Writing Idempotent PowerShell scripts*](https://robindadswell.github.io/blog/2019/10/14/writing-idempotent-powershell-scripts) + + + by Robin Dadswell on 14th October 2019 + + + An insight into how to write idempotent PowerShell scripts using a file as a simple example. + + +###### + [*Encrypting Text (Part 1)*](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/encrypting-text-part-1) + + + by Idera website on 15th October 2019 + + + Let’s take a look at a safe way of encrypting text on a computer. The Protect-Text function in this article takes any text and encrypts it automatically, no password needed. Instead of a password, it uses either your user account and machine, or just your machine as a secret. + + +###### + [*Running PowerShell Scripts With Jenkins and Git*](https://adamtheautomator.com/jenkins-powershell-git/) + + + by Phillip Marshall on 17th October + + + Learn how to integrate Git version control with Jenkins to set up and schedule PowerShell scripts to run at predefined schedules. + + +###### + [*Web Scraping with PowerShell*](https://www.pipehow.tech/invoke-webscrape/) + + + by Emanuel Palm on 17th October + + + Sometimes you end up in situations where you want to get information from an online source such as a webpage, but the service has no API available for you to get information through and it’s too much data to manually copy and paste. Or maybe you need to register a lot of entries on a website, but don’t have a bored friend to help out. Fear not, PowerShell can be your bored friend if you ask nicely! + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/dgqty6/list_of_best_online_courses_to_learn_powershell/) + + + User gandhiN puts together a list of the best courses online to learn powershell, linking to sites like pluralsight, skillshare and udemy. + + +###### + [*Tweet of the Week*](https://twitter.com/PSConfEU/status/1183628841828474881) + + + A call for speakers for PSConf Europe June 2020. + + +###### + [*Youtube: PowerShell Errors and Exceptions Handling*](https://www.youtube.com/watch?v=A6afjA5Q9eM) + + + Learn how to handle PowerShell Errors and Exceptions. See how to recognize and deal with non-terminating and terminating PowerShell errors. Take control and handle various errors with try catch. Explore rich PowerShell error objects and see how to drill down into error properties. Wrap up with a practical example where you can provide better feedback to your users when your PowerShell code encounters the unexpected. diff --git a/content/articles/2019/11/_index.md b/content/articles/2019/11/_index.md new file mode 100644 index 000000000..6e900bbd5 --- /dev/null +++ b/content/articles/2019/11/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from November 2019" +description: "PowerShell.org Articles published in November 2019." +--- diff --git a/content/articles/2019/11/icymi-powershell-week-of-1-november-2019/index.md b/content/articles/2019/11/icymi-powershell-week-of-1-november-2019/index.md new file mode 100644 index 000000000..ea3184337 --- /dev/null +++ b/content/articles/2019/11/icymi-powershell-week-of-1-november-2019/index.md @@ -0,0 +1,92 @@ +--- +url: /articles/2019-11-01-icymi-powershell-week-of-1-november-2019/ +title: "ICYMI: PowerShell Week of 1-November-2019" +authors: + - Robin Dadswell +date: "2019-11-01T15:00:55+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +aliases: + - /2019/11/icymi-powershell-week-of-1-november-2019/ +--- + +Topics include Teams, Scheduled Jobs, Halloween fun and more + + + Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. + + +###### + [*Managing PowerShell scheduled jobs*](https://4sysops.com/archives/managing-powershell-scheduled-jobs/) + + + by Mike Kanakos on 28th October + + + I'd like to walk you through the management of PowerShell scheduled jobs. The concept of PowerShell jobs is not familiar territory for many PowerShell users. At first glance, the benefits of running any kind of job from the command line may not be obvious. Let's peel back the covers on managing scheduled jobs and the benefits that come with them. + + +###### + [*The PowerShell Magic 8 Ball*](https://jdhitsolutions.com/blog/powershell/6879/the-powershell-magic-8-ball/) + + + by Jeffery Hicks on 28th October + + + Last year I shared some PowerShell code on Twitter about this time of year. I have a short script that uses Windows Presentation Foundation (WPF) to create a spooky graphical prompt that allows you to ask questions of a Magic 8 Ball. + + +###### + [*Automated Microsoft Teams Policy application to Azure AD Groups using PowerShell*](https://robindadswell.github.io/blog/2019/10/28/automated-microsoft-teams-policy-appliation-to-azure-ad-groups-using-powershell) + + + by Robin Dadswell on 28th October + + + Use Azure AD Groups to manage teams policies for users who need different policies. This article provides a framework of how to do it including logging to teams. + + +###### + [*Using PowerShell ArrayLists and Arrays*](https://adamtheautomator.com/powershell-arraylist/) + + + by Nathan Kasco on 29th October + + + Get back to PowerShell basics learning how to use PowerShell arraylists and basic arrays in this how-to walkthrough! + + +###### + [*Port Testing with PowerShell*](https://powershell.one/tricks/network/porttest) + + + by TobiasPSP on 30th of October + + + Let’s check out how to use a TCPClient object to turn PowerShell into a fast and flexible network port tester! + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/dorgmq/monitoring_microsoft_teams_using_powershell/) + + + Monitoring Microsoft Teams using PowerShell Universal Dashboard + + +###### + [*Tweet of the Week*](https://twitter.com/PSJamesP/status/1190267923174240256) + + + Tickets are now on sale for PowerShell Summit! + + +###### + [*Create an Active Directory new user onboarding website with PowerShell*](https://www.youtube.com/watch?v=FvW8hC87OQk) + + + In this video, we use the Active Directory PowerShell Module and Universal Dashboard to create a self-service website for creating new users in Active Directory. diff --git a/content/articles/2019/11/icymi-powershell-week-of-15-november-2019/index.md b/content/articles/2019/11/icymi-powershell-week-of-15-november-2019/index.md new file mode 100644 index 000000000..f62ec69a0 --- /dev/null +++ b/content/articles/2019/11/icymi-powershell-week-of-15-november-2019/index.md @@ -0,0 +1,96 @@ +--- +url: /articles/2019-11-15-icymi-powershell-week-of-15-november-2019/ +title: "ICYMI: PowerShell Week of 15-November-2019" +authors: + - Robin Dadswell +date: "2019-11-15T15:09:43+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/11/icymi-powershell-week-of-15-november-2019/ +--- + +Topics include string manipulation, bash, Python and Slack applications. + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. + + +###### + [*Speeding Up String Manipulation*](https://powershell.one/tricks/performance/strings) + + + by Tobias Weltner on 10th November + + + Appending text to strings using “+=” is convenient but slow. Learn how to do string manipulation without slowing down PowerShell. + + +###### + [*Monitoring with PowerShell: Monitoring Active Directory replication*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-active-directory-replication/) + + + by Kelvin Tegelaar on 11th November + + + To make sure that the domain controllers keep replicating correctly and we detect issues early we use the Active Directory cmdlets in combination with our RMM system. This makes it so we can monitor the current status of the replication and alert if it does not work for a longer period of time. + + +###### + [*I sat down to learn enough PowerShell to recreate one of my bash functions.*](https://threadreaderapp.com/thread/1194296021297352705.html) + + + by Jessica Joy Kerr on 12th November + + + As a user of Linux and Bash Jessica details the differences good and bad that she discovered while learning PowerShell. + + +###### + [*Snek - Integrating Python in PowerShell*](https://ironmansoftware.com/snek-integrating-python-in-powershell/) + + + by Adam Driscoll on 14th November + + + Snek is a cross-platform PowerShell module for integrating with Python. It uses the Python for .NET library to load the Python runtime directly into PowerShell. Using the dynamic language runtime, it can then invoke Python scripts and modules and return the result directly to PowerShell as managed .NET objects. + + +###### + [*Automate Azure Disk Encryption for Windows Virtual Machines*](https://www.shudnow.net/2019/11/14/automate-azure-disk-encryption-for-windows-virtual-machines/) + + + by Elan Shudnow on 14th November + + + The purpose of this article is to provide a script and demonstrate different scenarios in which my script can be used to help provide an automated method which can encrypt your OS and Data disks as well as automatically creating a Key Vault if one does not exist including the Access Policy configuration. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/dwebjr/reminder_gethistory_exists_i_completely_forgot/) + + + Get-History exists, don't forget! + + +###### + [*Tweet of the Week*](https://twitter.com/alexandair/status/1195153217740562434?s=20) + + + Happy Birthday PowerShell? + + +###### + [*Youtube: Building a Slack application with PowerShell*](https://www.youtube.com/watch?v=lk0JYDzEoVM&feature=youtu.be) + + + In this video, I show how to create a Slack App with PowerShell using Universal Dashboard. I also show how to tunnel the webserver from localhost via ngrok. diff --git a/content/articles/2019/11/icymi-powershell-week-of-22-november-2019/index.md b/content/articles/2019/11/icymi-powershell-week-of-22-november-2019/index.md new file mode 100644 index 000000000..efa678d76 --- /dev/null +++ b/content/articles/2019/11/icymi-powershell-week-of-22-november-2019/index.md @@ -0,0 +1,100 @@ +--- +url: /articles/2019-11-22-icymi-powershell-week-of-22-november-2019/ +title: "ICYMI: PowerShell Week of 22-November-2019" +authors: + - Robin Dadswell +date: "2019-11-22T15:10:16+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/11/icymi-powershell-week-of-22-november-2019/ +--- + +Topics include Group-Object, Power Platform, Preview 6 and more. + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. + + +###### + [*Speeding Up Group-Object*](https://powershell.one/tricks/performance/group-object) + + + by Tobias Weltner on 17th November + + + There is a design flaw in Group-Object. With a workaround, your scripts can be up tp 50x faster and still 2x faster on PowerShell Core. + + +###### + [*Safely Using WMI in PowerShell (Part 2)*](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/safely-using-wmi-in-powershell-part-2) + + + by Prateik Singh on 18th November + + + In this mini-series, we are looking at the differences between Get-WmiObject and Get-CimInstance. Future PowerShell versions no longer support Get-WmiObject, so it is time to switch to Get-CimInstance if you haven’t already. + + +###### + [*PowerShell: The Software that Changed My Life*](https://adamtheautomator.com/powershell-passion/) + + + by Adam Bertram on 19th November + + + In this personal blog post, learn how one technology managed to change the entire trajectory of a sysadmin. + + +###### + [*How to Block Self-Service Purchase for Power Platform Products Using PowerShell*](https://blog.admindroid.com/block-self-service-purchase-for-power-platform-products-using-powershell/) + + + by the AdminDroid team on 19th November + + + Recently Microsoft announced Self-service purchase capabilities for Power Platform products (Power BI, PowerApps, and Flow). + + + Self-service purchase capability arrives automatically and enabled by default. Due to this change, individuals within the organization can buy subscriptions directly without contacting their IT department. + + +###### + [*PowerShell 7 Preview 6*](https://devblogs.microsoft.com/powershell/powershell-7-preview-6/) + + + by Steve Lee on 21st November + + + Today we shipped PowerShell 7 Preview.6! This release contains a number of new features and many bug fixes from both the community as well as the PowerShell team. This will be the last preview release as we head towards a Release Candidate in December. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/dxvkau/employee_deleted_60000_files_from_company/) + + + Employee deleted 60,000 files from company sharepoint + + +###### + [*Tweet of the Week*](https://twitter.com/jessitron/status/1196861737196277761) + + + @Jessitron shows you how to create your own custom Prompt in PowerShell. + + +###### + [*Youtube: PowerShell Ping Buddy - Part 1*](https://www.youtube.com/watch?v=RTTw4OFR8QM&feature=youtu.be) + + + A video by Adam Driscoll showing off ping buddy a simple grid display for ping results. diff --git a/content/articles/2019/11/icymi-powershell-week-of-29-november-2019/index.md b/content/articles/2019/11/icymi-powershell-week-of-29-november-2019/index.md new file mode 100644 index 000000000..235ae6e4b --- /dev/null +++ b/content/articles/2019/11/icymi-powershell-week-of-29-november-2019/index.md @@ -0,0 +1,82 @@ +--- +url: /articles/2019-11-29-icymi-powershell-week-of-29-november-2019/ +title: "ICYMI: PowerShell Week of 29-November-2019" +authors: + - Robin Dadswell +date: "2019-11-29T16:15:02+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/11/icymi-powershell-week-of-29-november-2019/ +--- + +Topics include Invoke-Command, Objects, Introspection and more. + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. + + +###### + [*Monday Morning Module Maintenance Monoliners*](https://flxsql.com/monday-morning-module-maintenance-monoliners/) + + + by Andy Levy on 25th November + + + Do enough work with PowerShell and you’ll build up a decent collection of modules installed from the gallery into either your computer or your user profile (or maybe both!). Here are two one-liners to help keep things up to date and tidy. + + +###### + [*SkypeOnlineConnector Session Reconnection*](https://ucstatus.com/2019/11/25/skypeonlineconnector-session-reconnection/) + + + by Randy Chapman on 25th November + + + If you use the SkypeOnlineConnector PowerShell module to connect to and manage Skype for Business Online or Microsoft Teams, I have some exciting news. + + +###### + [*Using Invoke-Command In PowerShell*](https://winsysblog.com/2019/11/using-invoke-command-in-powershell.html) + + + by Dan Franciscus on 26th November + + + In this article, Dan Franciscus covers how to use the Invoke-Command and why it is one of his favorite commands to use in PowerShell. + + +###### + [*Why Do We Write PowerShell (for Office 365) Like We Do?*](https://office365itpros.com/2019/11/28/why-do-we-write-powershell-like-we-do/) + + + by Tony Redmond on 28th November + + + A reader asked why the PowerShell examples in the book (and this site) are “just code.” It’s a reasonable question that deserves a reasonable answer. + + +###### + [*Back to Basics: Understanding PowerShell Objects*](https://adamtheautomator.com/powershell-objects/) + + + by Bill Kindle on 29th November + + + PowerShell is a powerful language. But what makes it so powerful? PowerShell objects. What are these magical objects and how does PowerShell work with them? Stay tuned to find out. + + +###### + [*Youtube: Azure PowerShell Introduction*](https://youtu.be/LbGNQVbb_VI) + + + Learn the basics of using PowerShell with Azure, great primer. diff --git a/content/articles/2019/11/icymi-powershell-week-of-8-november-2019/index.md b/content/articles/2019/11/icymi-powershell-week-of-8-november-2019/index.md new file mode 100644 index 000000000..28dbbb2dd --- /dev/null +++ b/content/articles/2019/11/icymi-powershell-week-of-8-november-2019/index.md @@ -0,0 +1,89 @@ +--- +url: /articles/2019-11-08-icymi-powershell-week-of-8-november-2019/ +title: "ICYMI: PowerShell Week of 8-November-2019" +authors: + - Robin Dadswell +date: "2019-11-08T15:00:58+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/11/icymi-powershell-week-of-8-november-2019/ +--- + +Topics include speeding up the pipeline, while/until loops, why you shouldn't use += and more! + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. + + +###### + [*Speeding Up the Pipeline - powershell.one*](https://powershell.one/tricks/performance/pipeline) + + + by Tobias Weltner on the 3rd November + + + The PowerShell Pipeline is robust but tends to be slow. With a couple of tricks you can speed it up tremendously and make it as fast as classic foreach loops. + + +###### + [*PowerShell: Do-While vs. Do-Until vs. While*](https://sid-500.com/2019/11/04/powershell-do-while-vs-do-until/) + + + by Patrick Gruenauer on the 4th November + + + Understanding the differences between a do-while, do-until and while loop could be confusing. Is it the same? Why are there multiple techniques? In this blog post you will learn the differences. + + +###### + [*PowerShell’s plus equals (+=), the array serial killer*](https://theposhwolf.com/howtos/PS-Plus-Equals-Dangers/) + + + by Anthony Howell on the 4th November + + + "I did a livestream recently where I created a function to parse an HTML table and convert it to a PowerShell object. If you followed along, you probably noticed that I used a += with no shame whatsoever. Luckily, @PrzemyslawKlys caught it and asked that I fix it (you can see the commit history here, the actual request was a Twitter DM). This was a great reminder to me that += should be avoided!" + + +###### + [*Ansible, Windows and PowerShell: the Basics – Part 7, Utilising PowerShell DSC*](https://www.jonathanmedd.net/2019/11/ansible-windows-and-powershell-the-basics-part-7-utilising-powershell-dsc.html) + + + by Jonathan Medd on 5th November + + + In Part 7 of this series we’ll continue our journey with Ansible, Windows and PowerShell and look at how utilise PowerShell DSC. If you or your team already own some automation created using PowerShell DSC then it is possible to re-use that via an Ansible Playbook. Or maybe you think that you or they would prefer to create configuration automation going forward using a perhaps more familiar PowerShell DSC, then this could be a solution for you. + + +###### + [*Creating a PowerShell Backup System*](http://jdhitsolutions.com/blog/powershell/6905/creating-a-powershell-backup-system/) + + + by Jeff Hicks on the 7th November + + + The start of a series of articles demonstrating how Jeff built a PowerShell-based backup system for critical files employing the System.IO.FileSystemWatcher. + + +###### + [*Tweet of the Week*](https://twitter.com/azureposh/status/1192801892314861569) + + + New PowerShell module for managing Azure Functions + + +###### + [*Youtube: Send Email with SendGrid and PowerShell*](https://www.youtube.com/watch?v=AsAQr9XK1Fc&feature=youtu.be) + + + In this video, I set up a free SendGrid account in Azure and send email with the Rest API and PowerShell. I walk through the reusable function that builds the header and body of the message. This function is helpful for anyone who needs to send email from a PowerShell script that doesn’t have access to an SMTP relay or are behind a firewall that blocks outbound SMTP traffic. diff --git a/content/articles/2019/12/_index.md b/content/articles/2019/12/_index.md new file mode 100644 index 000000000..8cc19e4bc --- /dev/null +++ b/content/articles/2019/12/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from December 2019" +description: "PowerShell.org Articles published in December 2019." +--- diff --git a/content/articles/2019/12/icymi-powershell-week-of-06-december-2019/index.md b/content/articles/2019/12/icymi-powershell-week-of-06-december-2019/index.md new file mode 100644 index 000000000..6dcdd4b37 --- /dev/null +++ b/content/articles/2019/12/icymi-powershell-week-of-06-december-2019/index.md @@ -0,0 +1,60 @@ +--- +url: /articles/2019-12-06-icymi-powershell-week-of-06-december-2019/ +title: "ICYMI: PowerShell Week of 06-December-2019" +authors: + - Robin Dadswell +date: "2019-12-06T16:07:38+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/12/icymi-powershell-week-of-06-december-2019/ +--- + +Topics include Hyper-V, IIS, Ternary Operators and more. + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20191206.md#getting-started-with-powershell-the-first-five-commands-you-need-to-master)[*GETTING STARTED WITH POWERSHELL: THE FIRST FIVE COMMANDS YOU NEED TO MASTER*](https://www.networkadm.in/the-first-five-commands-you-need-to-master/) + +by Mike Kanakos on December 04, 2019 +Getting started with PowerShell is easy. In fact, it’s easy enough for some people that they just dive in and start using it every day with little formal knowledge. At some point though, everyone needs a little help. The PowerShell console has a rich set of cmdlets and built-in help that can be useful for learning how to use the PowerShell language correctly. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20191206.md#building-a-hyper-v-report-using-ad-and-pswritehtml)[*BUILDING A HYPER-V REPORT USING AD AND PSWRITEHTML*](http://www.checkyourlogs.net/?p=71683) + +by Dave Kawula on December 05, 2019 +Display Hyper-V VM details as html using Out-GridViewHTML cmdlet in PSWriteHTML module which has built-in buttons to export as CSV,Excel and PDF. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20191206.md#how-to-manage-iis-websites-in-powershell)[*How To Manage IIS Websites In PowerShell*](https://adamtheautomator.com/powershell-script-to-create-iis-website/) + +by Bill kindle on December 03, 2019 +If you manage Windows Servers, you've likely worked with Internet Information Services (IIS). Websites are one of IIS's main features and, using PowerShell, you can easily manage and automate IIS websites with ease! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20191206.md#powershell-7-ternary-operator)[*PowerShell 7 Ternary Operator*](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/powershell-7-ternary-operator) + +by PowerTip on December 04, 2019 +With PowerShell 7, the language gets a new operator that created a lot of debate. Basically, you don’t have to use it, but users with a developer background will welcome it. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20191206.md#detecting-key-presses)[*Detecting Key Presses*](https://powershell.one/tricks/input-devices/detect-key-press) + +by Tobias Weltner on December 01, 2019 +Wouldn’t it be nice for scripts to detect when a key is pressed? Pressing a key could add a pause to scripts, exit loops prematurely, or skip loading things in your profile script. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20191206.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/e60rrf/catesta_a_powershell_module_project_generator/) + +Catesta is a PowerShell module that can scaffold a PowerShell project with easy integration into several CI/CD options. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20191206.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1202293097293434880) + +If you are contributing to #PowerShell on GitHub or using the daily builds, the master branch is now 7.1 preview.1. We triage and take specific merged PRs into rc.1 branch. Expectation is that 7.1 preview.1 will ship in Jan along with 7.0 GA. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20191206.md#youtube-how-to-export-dhcp-reservation-via-powershell)[*Youtube: How to export dhcp reservation via powershell*](https://www.youtube.com/watch?v=nqki1jFF0hg&feature=emb_logo) + +Exporting IP reservations in DHCP using PowerShell. diff --git a/content/articles/2019/12/icymi-powershell-week-of-13-december-2019/index.md b/content/articles/2019/12/icymi-powershell-week-of-13-december-2019/index.md new file mode 100644 index 000000000..5ad2d98e7 --- /dev/null +++ b/content/articles/2019/12/icymi-powershell-week-of-13-december-2019/index.md @@ -0,0 +1,96 @@ +--- +url: /articles/2019-12-13-icymi-powershell-week-of-13-december-2019/ +title: "ICYMI: PowerShell Week of 13-December-2019" +authors: + - Robin Dadswell +date: "2019-12-13T15:00:42+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/12/icymi-powershell-week-of-13-december-2019/ +--- + +Topics include Functions, String, Certificate Management and more. + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. + + +###### + [*9 Tips for Writing Better PowerShell Functions*](https://dev.to/devblackops/9-tips-for-writing-better-powershell-functions-4ai6) + + + by Brandon Olin on 7th December + + + PowerShell has a lot of functionality tucked away into functions that sometimes are not known, ignored, or forgotten about entirely. Let's talk about some basic things we can add to functions that improve our scripts and ultimately make us better tool makers. + + +###### + [*The (Happy) Fate of "The DSC Book"*](https://donjones.com/2019/12/10/the-happy-fate-of-the-dsc-book/) + + + by Don Jones on 10th December + + + An announcement about the fate of "The DSC Book". + + +###### + [*Finally Making Sense of How Windows Manages Certificates*](https://adamtheautomator.com/windows-certificate-manager/) + + + by Michael Soule on 11th December + + + Get up to speed on how Windows manages certificates both in the GUI and PowerShell in this deep dive article. + + +###### + [*String Operations in PowerShell*](https://kpatnayakuni.com/2019/12/12/string-operations-in-powershell/) + + + by Kiran Patnayakuni on 12th December + + + A deep dive into all things strings in PowerShell. + + +###### + [*Managing My PowerShell Backup Files*](http://jdhitsolutions.com/blog/powershell/7081/managing-my-powershell-backup-files/) + + + by Jeff Hicks on 12th December + + + I've been backing up files with PowerShell. Now I need a way to trim old backup files automatically. This is how I do it with Group-Object and regular expressions. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/e9q5la/the_kemp_powershell_module_is_now_available/) + + + Announcement from Kemp about their module being available on the PowerShell Gallery. + + +###### + [*Tweet of the Week*](https://twitter.com/adamdriscoll/status/1204234854394556416) + + + Universal Dashboard is on the adopters page for PowerShell. + + +###### + [*Youtube: Core Concept: Regex for N00bs with Thomas Rayner*](https://www.youtube.com/watch?v=EcASUAi1B0k&feature=emb_logo) + + + REGEX!!! It's often misunderstood and hated by many! But the truth is regex is super powerful and sometimes it's the best tool for the job! diff --git a/content/articles/2019/12/icymi-powershell-week-of-20-december-2019/index.md b/content/articles/2019/12/icymi-powershell-week-of-20-december-2019/index.md new file mode 100644 index 000000000..252e70ff7 --- /dev/null +++ b/content/articles/2019/12/icymi-powershell-week-of-20-december-2019/index.md @@ -0,0 +1,89 @@ +--- +url: /articles/2019-12-20-icymi-powershell-week-of-20-december-2019/ +title: "ICYMI: PowerShell Week of 20-December-2019" +authors: + - Robin Dadswell +date: "2019-12-20T16:09:01+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/12/icymi-powershell-week-of-20-december-2019/ +--- + +Topics include New PowerShell in the old ISE, Azure DevOps, Automating Twitter, and Searching Bing with PowerShell to creat a Word Cloud. + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, and Kevin Laux. + + +###### + [*Using PowerShell Core 6 and 7 in the Windows PowerShell ISE*](https://ironmansoftware.com/using-powershell-core-6-and-7-in-the-windows-powershell-ise/) + + + by Adam Driscoll on 15th December + + + You probably should be using VSCode, but if you're not heres a great post on using PowerShell Core 6 and PowerShell 7 in PowerShell ISE. + + +###### + [*Azure Devops for PowerShell*](https://toastit.dev/2019/12/15/azure-devops-for-powershell-azureadventcalendar-2019-day-15/) + + + by Josh King on 15th December + + + This is a great step by step of using Azure DevOps to manage and test your PowerShell code. + + +###### + [*How to Automate Following Interesting Twitter Users*](https://adamtheautomator.com/follow-twitter-users/) + + + by Adam Bertram on 17th December + + + Adam shows you how to use the PSTwitterAPI module to scour twitter and find some interesting people to follow. + + +###### + [*PowerShell Web Search and Generating Word Cloud from Results*](https://ridicurious.com/2019/12/18/powershell-web-search-and-generating-world-cloud-from-results/) + + + by Prateek Singh on 18th December + + + This is a quick fun blog post to demonstrate how to perform a programmatical web search (A Bing search! 😎) and create a word cloud using the preview snippets + + +###### + [*Automatically Forward All-Company Meetings to New Hire Calendars Using Graph API*](https://www.kicka5h.io/post/automatically-forward-all-company-meetings-to-new-hire-calendars-using-graph-api) + + + by Ash K. on 19th December + + + How many times are all company meetings not given to new starters? Well no more using the Graph API. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ebalj7/some_powershell_spotted_on_tonights_episode_of_mr/) + + + When someone finds some PowerShell in an episode of Mr. Robot it becomes the top post of the week. + + +###### + [*Youtube: PSS: Why you Should be Using PSReadline Every Day with Jeffery Hayes*](https://www.youtube.com/watch?v=wz19NEIakn4) + + + Jeffery goes into detail about the PSReadline Module. PSReadline is a improvement to the command line interface, providing colored syntax, history, and much more. Learn how to make PSReadline a powerful tool in your PowerShell arsenal. diff --git a/content/articles/2019/12/icymi-powershell-week-of-28-december-2019/index.md b/content/articles/2019/12/icymi-powershell-week-of-28-december-2019/index.md new file mode 100644 index 000000000..54d663309 --- /dev/null +++ b/content/articles/2019/12/icymi-powershell-week-of-28-december-2019/index.md @@ -0,0 +1,96 @@ +--- +url: /articles/2019-12-27-icymi-powershell-week-of-28-december-2019/ +title: "ICYMI: PowerShell Week of 28-December-2019" +authors: + - Robin Dadswell +date: "2019-12-27T18:06:33+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2019/12/icymi-powershell-week-of-28-december-2019/ +--- + +Topics include: Automating Excel, Customizing your profile, a New Year's module and more... + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + + +###### + [*Testing for PowerShell in Windows Terminal*](https://jdhitsolutions.com/blog/powershell/7112/testing-for-powershell-in-windows-terminal/) + + + by Jeff Hicks on 20th December + + + How do you know if a script is running inside Windows Terminal, Jeff shows you a few ways. + + +###### + [*PowerShell and Excel: Yes, They Work Together*](https://adamtheautomator.com/powershell-excel-tutorial/) + + + by Adam Bertram on 22nd December + + + Microsoft Excel is one of those ubiquitous tools most of us can't escape even if we tried. Many IT professionals use Excel as a little database storing tons of data in various automation routines. What's the best scenario of automation and Excel? PowerShell! + + +###### + [*Sending to Microsoft Teams from PowerShell just got easier and better*](https://evotec.xyz/sending-to-microsoft-teams-from-powershell-just-got-easier-and-better/) + + + by Przemyslaw Klys on 22nd December + + + Christmas time is upon us, and I've decided that my PSTeams module needs some love. I wrote it in late 2018 and updated it a few times at the beginning of 2019. This release hopefully is worth of having 1.0 version number. + + +###### + [*HOMELAND SECURITY’S TRUSTED TRAVELERS API AND POWERSHELL – GETTING A BETTER GLOBAL ENTRY INTERVIEW USING POWERSHELL*](https://www.thelazyadministrator.com/2019/12/23/homeland-securitys-trusted-travelers-api-and-powershell-getting-a-better-global-entry-interview-using-powershell/) + + + by Brad Wyatt on 23rd December + + + Using the API for Global Entry/Pre-Check you can find out when you can schedule your interview. + + +###### + [*PowerShell Profiles*](https://www.sconstantinou.com/powershell-profiles/) + + + by Stephanos Constantinou on 24th December + + + In this tutorial we will see about PowerShell Profiles and their use. PowerShell profiles help you to customize your environment and add elements for every PowerShell session that you start. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/eftv7p/gethappynewyear_yes_bored_at_work/) + + + u/Bugibugi shares a function that tells you how much longer til the New Year. + + +###### + [*Tweet of the Week*](https://twitter.com/JeffHicks/status/1209992722263625728?s=09) + + + Never assume that any PowerShell code you find online is production ready. + + +###### + [*Youtube: Access Windows 10 With Empire Framework via Powershell*](https://www.youtube.com/watch?v=L5Ad4lWdbSo) + + + The video is a step by step guide on how to use Empire Framework to gain access to a Windows 10 machine via PowerShell. diff --git a/content/articles/2019/12/the-dsc-book-now-open-source/index.md b/content/articles/2019/12/the-dsc-book-now-open-source/index.md new file mode 100644 index 000000000..312dc187b --- /dev/null +++ b/content/articles/2019/12/the-dsc-book-now-open-source/index.md @@ -0,0 +1,13 @@ +--- +url: /articles/2019-12-10-the-dsc-book-now-open-source/ +title: “The DSC Book” now Open Source! +authors: + - Don Jones +date: "2019-12-10T21:20:36+00:00" +categories: + - PowerShell for Admins +aliases: + - /2019/12/the-dsc-book-now-open-source/ +--- + +“The DSC Book” is now open source! It remains available at Leanpub, but the source is now at . Everyone is invited to contribute corrections and expansions, and the results will publish roughly monthly on Leanpub. In addition, the book is now $0 on Leanpub, although you may choose to pay whatever you like, with all proceeds going to The DevOps Collective’s scholarship programs. diff --git a/content/articles/2019/_index.md b/content/articles/2019/_index.md new file mode 100644 index 000000000..48c9b7488 --- /dev/null +++ b/content/articles/2019/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from 2019" +description: "PowerShell.org Articles published in 2019." +--- diff --git a/content/articles/2020-01-03-196307-2.md b/content/articles/2020-01-03-196307-2.md deleted file mode 100644 index 7248220cd..000000000 --- a/content/articles/2020-01-03-196307-2.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Keeping Your Secrets Secure -authors: - - Eric Brookman (scriptingcaveman) -date: "2020-01-03T19:47:36+00:00" -categories: - - PowerShell for Admins -aliases: - - /2020/01/196307-2/ ---- - -Azure Key Vault: Keeping your Secrets Secure -I was tasked with creating a PowerShell script that would connect to a SFTP server and place a file. I immediately jumped at the opportunity and started thinking about what all I would need to accomplish this task. I knew I needed the script to be as secure as possible, but also knew I needed the username, password, and a key file so I could connect securely to the SFTP site. This brought up a number of security concerns. How could I be fully automated and not put that sensitive information in plain text in my script. Immediately I went to Powershell.org and started searching for ideas. I found there were a couple of really good ideas for securing this kind of data using built in encryption ( Protect-CMSMessage) and an extension that Dave Wyatt created, ProtectedData ( https://github.com/dlwyatt/ProtectedData). I spent numerous hours scraping through documentation from both sources. At the end of my quest through the wonderful world encryption, I ended up with the same problem. The decryption key and the data were still on the server and I had no way of monitoring its use. I started looking at third party key vaults. They would allow me to secure my data, log when it was accessed, and provide me the data easily when called through a REST API. The only thing was I was on a budget and very short timeline so I couldn’t write the PowerShell connector to the API. What a bust! -Alas! I found a Key Vault that not only had a REST API but had native PowerShell commandlets. Thanks, Microsoft! I started asking, what can I put in the vault and call from my script? I quickly discovered everything! -I created a key vault and started populating the data I wanted to secure. I chose to use Secrets to hold my username, password, SFTP server IP address, and Private Key. I connected to my Azure RM Account using my username / password. Using the built in commandlets, I would be able to pull the data I wanted. Obviously, I would need the server address: - - -`Get-AzureKeyVaultSecret -VaultName BlogVault -Name IPAddress -`This will return the secure object: -![](https://powershell.org/wp-content/uploads/2020/01/secure-object-300x108.png) -As you can see it is a secure string, but using POSH-SSH, I can’t pass this object as the computer name for the connection. Slight modification was needed: - - -`(Get-AzureKeyVaultSecret -VaultName BlogVault -Name IPAddress).SecretValueText -`This command gives me the string value of the secret that I stored. SUCCESS!! You could see the smoke coming from my keyboard as I typed my script with this knowledge. I didn’t even see the brick wall coming at me until I smacked it hard with my face. I connected to my Azure environment with my username and password! I am back at square one! Or so I thought. The Azure key vault has an API, which means it has to have a way for an application to connect. I found App Registrations in Azure. Create a new app, ignore the URI, add the application to the permissions for your key vault, copy the Application ID, Directory (Tenant) ID, and the Thumbprint of the certificate you used when creating the app. Now use that information to connect securely to your Azure RM Account. Using splatting, you can create the login information and log in with ease. When connecting using an application you need to specify “-ServicePrincipal”. - - -`$azureconnection = @{ - ApplicationID = “a3k43802-ckde-2kk3-5k4k-k2olsk30shhe8”; - TenantID = “28skckhh49-3983-28cj-dj3n-akcnfsio3983k”; - CertificateThumbprint = “A42695B978976C0925948DBA94AF0AC2D4BE425D” -} -Connect-AzureRmAccount -ServicePrincipal @azureconnection -`Back in business! After connecting to my Azure RM Account using the application, I started creating splats for the rest of my communications. I embedded the get commands inside my splats so I am not assigning any of the secret information to variables directly. I have now created an application that is fully automated. I wrapped it in a file watcher script recommended by kvprasson, so as soon as a file is put into the directory a SFTP session is created, the file is placed in the root of the SFTP server, and reusing part of a module I built I verify the hash is the same on both ends of the transfer. -As is true in many situations, there are many ways to skin this cat. The method I used may not be the best for your situation, however, it is a good way to keep sensitive data away from the server on which you are working. I am excited to see how many other ways I am able to use Azure Key Vaults in future applications. diff --git a/content/articles/2020-01-03-icymi-powershell-week-of-03-january-2020.md b/content/articles/2020-01-03-icymi-powershell-week-of-03-january-2020.md deleted file mode 100644 index 428a89f84..000000000 --- a/content/articles/2020-01-03-icymi-powershell-week-of-03-january-2020.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 03-January-2020" -authors: - - Robin Dadswell -date: "2020-01-03T16:10:53+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/01/icymi-powershell-week-of-03-january-2020/ ---- - -In the first ICYMI of 2020 the topics include: working with PDFs, AD Users, Remote Computers and more... - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - - -###### - [*Using PowerShell to Get (and Export) AD Group Members*](https://adamtheautomator.com/powershell-get-ad-group-members/?utm_source=linkedinstatusupdates&utm_medium=social&utm_campaign=newblogpostnotifications) - - - by Adam Bertram on 27th December - - - A popular use of PowerShell is working with Active Directory Directory Services (AD). There are so many time-saving things PowerShell can do with AD objects. Using PowerShell get AD group members and groups saves a ton of time. - - -###### - [*Merging, splitting and creating PDF files with PowerShell*](https://evotec.xyz/merging-splitting-and-creating-pdf-files-with-powershell/) - - - by Przemyslaw Klys on 29th December - - - What better way to end a good year than with the release of the new PowerShell module. If the title of today's blog post isn't giving it up yet, I wanted to share a PowerShell module called PSWritePDF that can help you create and modify (split/merge) PDF documents. - - -###### - [*Invoke-Command: Dealing with offline computers*](https://4sysops.com/archives/invoke-command-dealing-with-offline-computers) - - - by Mike Kanakos on 30th December - - - When you need to run PowerShell commands against a large set of computers with the PowerShell cmdlet Invoke-Command, you often have to deal with offline computers. In this post, you will learn how to deal with unresponsive machines. - - -###### - [*Using PowerShell to View and Change BIOS Settings*](http://woshub.com/powershell-view-change-bios-settings/) - - - posted on 30th December - - - Good article detailing how you can read and edit bios settings using WMI and PowerShell. - - -###### - [*Step-by-Step Guide: Crete Azure VM using Managed Image*](http://www.rebeladmin.com/2019/12/step-step-guide-crete-azure-vm-using-managed-image-powershell-guide/) - - - by Dishan M. Francis on 30th December - - - If you have a custom image to deploy on prem you would use something like WDS. In this post Dishan explains how to deploy your managed images in Azure. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/eia1a9/helpdeskremote_support_powershell_script_expedite/) - - - Reddit user shares a github project. The project is a PowerShell based command line tool to help with routine tech support tasks. - - -###### - [*Tweet of the Week*](https://twitter.com/JeffHicks/status/1212370429060567042?s=20) - - - Happy New Year [https://github.com/jdhitsolutions/PSCalendar](https://github.com/jdhitsolutions/PSCalendar) - - -###### - [*Youtube: PowerShell Notebook Module*](https://www.youtube.com/watch?v=3b_LQn18oHI&feature=youtu.be) - - - Doug Finke talks through automation of PowerShell Notebooks with PowerShell at the command line, exports to Excel and more. diff --git a/content/articles/2020-01-10-icymi-powershell-week-of-10-january-2020.md b/content/articles/2020-01-10-icymi-powershell-week-of-10-january-2020.md deleted file mode 100644 index 5af5e8465..000000000 --- a/content/articles/2020-01-10-icymi-powershell-week-of-10-january-2020.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 10-January-2020" -authors: - - Robin Dadswell -date: "2020-01-10T15:00:25+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/01/icymi-powershell-week-of-10-january-2020/ ---- - -Topics include reinstalling Windows Store Apps, Auditing Computers, PowerShell 7 and more. - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - - -###### - [*Reprovision Windows 10 Apps... Wait, What? - Systems Management Squad*](https://sysmansquad.com/2020/01/06/reprovision-windows-10-apps-wait-what/) - - - by Cody Mathis on 6th January - - - Reverse Windows 10 AppX Deprovisioning. Restore the Windows Store, and any other AppX Package that has been removed. - - -###### - [*How to Revoke Azure AD Tokens from Expired AD Users*](https://adamtheautomator.com/azure-ad-token-expire/) - - - by Adam Bertram on 6th January - - - Learn how to build a PowerShell script that finds all expired AD user accounts and revoke Azure AD tokens in this tutorial. - - -###### - [*PowerShell 7 – Pipeline Chain Operators*](https://blog.ukotic.net/2020/01/07/powershell-7-pipeline-chain-operators/) - - - by Mark Ukotic on 7th January - - - With this release comes several new features that continue to build upon the previous versions. One of these new features being introduced are two new operators, && and ||, referred to as pipeline chain operators. - - -###### - [*Computer Auditing – Part 4 – Windows Services, DHCP Scopes, and IIS Websites*](https://hkeylocalmachine.com/?p=960) - - - by Kamal on 7th January - - - I’ve recently been looking at extending the standard set of auditing (from the previous scripts mentioned in Part 1, Part 2, and Part 3) to include DHCP scope information, and IIS-based website information. - - -###### - [*PowerShell's Secret Wildcard*](https://toastit.dev/2020/01/09/powershells-secret-wildcard/) - - - by Josh King on 9th of January - - - It's funny how you can be a daily PowerShell user for years and completely miss something about a feature you regularly use... such as the "like" operators accepting more than two different wildcards. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ekwwvb/powershell_modules_i_worked_on_in_2019/) - - - u/MadBoyEvo details all of his work in PowerShell during 2019, over 40 modules. - - -###### - [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1214711909301121027) - - - PowerShell 7 GA will come in February after an RC2 release. - - -###### - [*Youtube: Foreach-Object -Parallel*](https://www.youtube.com/watch?v=GSXFnk8UwQ0&feature=youtu.be) - - - Jason Helmick does a video discussing the -Parallel parameter in PS Core's Foreach-Object cmdlet. diff --git a/content/articles/2020-01-17-icymi-powershell-week-of-16-january-2020.md b/content/articles/2020-01-17-icymi-powershell-week-of-16-january-2020.md deleted file mode 100644 index 857f56d69..000000000 --- a/content/articles/2020-01-17-icymi-powershell-week-of-16-january-2020.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 16-January-2020" -authors: - - Robin Dadswell -date: "2020-01-17T15:00:38+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/01/icymi-powershell-week-of-16-january-2020/ ---- - -Topics include Azure Monitor Logs, Office 365 Mailbox sizes, Brackets and more. - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - - -###### - [*Creating Linked HTML with PowerShell*](http://jdhitsolutions.com/blog/powershell/7163/creating-linked-html-with-powershell/) - - - by Jeff Hicks on 13th January - - - Take a dive into solving the niche problem of hyperlinks in HTML reports. - - -###### - [*JUST A TIP #12 – GET ALL THE ALIASES BY CMDLET IN POWERSHELL*](https://kpatnayakuni.com/2020/01/13/just-a-tip-12-get-all-the-aliases-by-cmdlet-in-powershell/?utm_source=dlvr.it&utm_medium=twitter) - - - by Kiran Patnayakuni on 13th January - - - A small tip about aliases. - - -###### - [*PowerShell: Unterstanding Parentheses, Braces and Square Brackets*](https://sid-500.com/2020/01/14/powershell-unterstanding-parentheses-braces-and-square-brackets/) - - - by Patrick Gruenauer on 14th January - - - The goal for this blog post is to demystify the usage of PowerShell brackets for scripters and PowerShell enthusiasts. You can find braces everywhere, in scripts, in the PowerShell help and in simple one-liners. And there are three types. Let’s dive in. - - -###### - [*How to Monitor for Large Office 365 Mailbox Size with PowerShell*](https://adamtheautomator.com/monitor-office-365-mailbox-size/) - - - by June Castillote on 15th January - - - Learn how to monitor Office 365 mailbox sizes with PowerShell in this informative, how-to article. - - -###### - [*Sending and Querying Custom Log Data to Azure Monitor Logs*](https://blog.darrenjrobinson.com/sending-and-querying-custom-log-data-to-azure-monitor-logs/) - - - by Darren Robinson on 17th January - - - Learn how to not only send but query data from Azure Monitor Logs using PowerShell. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/eprre9/automating_fears/) - - - I’m a big advocate of automation. But my co-sysadmin often tell me to slow down and not make it do all for them because they wish to learn the hard way with point and click and typing all the cmdlets one by one so that when the scripts fails they are not completely lost... See some thoughts around this. - - -###### - [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1217956062092857344?s=20) - - - PowerShell 7 RC2 is out! One month till GA. - - -###### - [*Youtube: Event-based automation across hybrid environments using PowerShell in Azure Functions | THR2160*](https://www.youtube.com/watch?v=z0DCFxlTN8k) - - - An Ignite session discussing the just released support for PowerShell in Azure Functions and how this can be used to deliver event-based automation. diff --git a/content/articles/2020-01-22-book-shell-of-an-idea-the-untold-history-of-powershell.md b/content/articles/2020-01-22-book-shell-of-an-idea-the-untold-history-of-powershell.md deleted file mode 100644 index 0a44ae3ef..000000000 --- a/content/articles/2020-01-22-book-shell-of-an-idea-the-untold-history-of-powershell.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Book: \"Shell of an Idea,\" the Untold History of PowerShell" -authors: - - Don Jones -date: "2020-01-22T16:42:23+00:00" -categories: - - Books -aliases: - - /2020/01/book-shell-of-an-idea-the-untold-history-of-powershell/ ---- - -I've launched a new book project, which I'm hoping you'll support: [**Shell of an Idea, the Untold History of PowerShell**][1] is now available for pre-purchase at a $10 discount on Leanpub. You'll get the initial introductory chapters right now, and when I start pumping out the main manuscript in April-May 2020, you'll get that too. The price will rise to the final $30 after the first 100 preorders, so don't delay too much if you want in on the deal. -This is a big project, and it's involving a few flights up to Redmond for sit-down interviews with key folks - hence the pre-order, to help fund those trips. I'm going _all_ the way back in time to the earliest days of PowerShell Monad Babylon Kermit, yeah it went through a lot of names and concepts! I plan to fill this not only with interesting facts, but also personal anecdotes from the folks who were there, and some back-of-house stories about the inevitable politics and challenges the shell saw on its path to life. -I'm also [collecting personal anecdotes][2] from people who've been impacted by PowerShell. I'd love to hear about life before PowerShell (how easy was automation back then, and how important was it to you?), how PowerShell changed your job or career, or anything like that. I'll weave all of that into the book too, because the story of PowerShell is _mainly_ the story of the people who made it and the people who adopted it. -Thanks for your support, and tell a friend! - - [1]: https://leanpub.com/shell-of-an-idea/ - [2]: https://donjones.com/2020/01/17/be-a-part-of-powershell-history-please/ diff --git a/content/articles/2020-01-24-icymi-powershell-week-of-24-january-2020.md b/content/articles/2020-01-24-icymi-powershell-week-of-24-january-2020.md deleted file mode 100644 index 5100f0e2a..000000000 --- a/content/articles/2020-01-24-icymi-powershell-week-of-24-january-2020.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 24-January-2020" -authors: - - Robin Dadswell -date: "2020-01-24T15:00:24+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/01/icymi-powershell-week-of-24-january-2020/ ---- - -Topics include PSboundparamters, Email with SendGrid, Universal Automation and more. - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - - -###### - [*Using $PSBoundParameters in PowerShell*](https://www.gngrninja.com/script-ninja/2020/1/19/using-psboundparameters-in-powershell) - - - by Mike Roberts on 19th January - - - Ever use $PSBoundParameters to see what parameters are passed into your function. Mike will tell you everything you need to know about $PSBoundParameters in his blog post. - - -###### - [*Send email from PowerShell with SendGrid*](https://4bes.nl/2020/01/19/send-email-from-powershell-with-sendgrid/) - - - by Barbara Forbes on 19th January - - - Since the system behind Send-MailMessage is no longer maintained Barbara explores an alternative method of sending email from PowerShell, SendGrid. - - -###### - [*Monitoring Active Directory with the PowerShell module PSADHealth*](https://4sysops.com/archives/monitoring-active-directory-with-the-powershell-module-psadhealth/) - - - by Mike Kanakos on 20th January - - - The goal of this module is to enable you to know when the core pieces of Active Directory aren't working as expected so you can take action. - - -###### - [*Deep Dive: Break, Continue, Return, Exit in PowerShell*](https://ridicurious.com/2020/01/23/deep-dive-break-continue-return-exit-in-powershell/) - - - by Manoj Sahoo on 23rd January - - - Manoj does a deep dive on code execution terminators in PowerShell. - - -###### - [*The PowerShell foreach Loop: Examples, Demos and Learning*](https://adamtheautomator.com/powershell-foreach/) - - - by June Castillote on 23rd January - - - Learn how all the PowerShell foreach loops work with tons of examples and real-world use cases in this informative article. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/er0lfv/four_commands_to_help_you_track_down_insecure/) - - - Four commands to help you track down insecure LDAP Bindings before March 2020. In march 2020, Microsoft is supposed to block insecure LDAP bindings. I've updated my 3 Powershell modules to help you track down machines/accounts doing that. - - -###### - [*Youtube: Introducing Universal Automation*](https://www.youtube.com/watch?v=u9Hq4X8V7VY&feature=youtu.be) - - - Universal Automation is the automation platform for PowerShell. This video is a recording of a webinar that we produced on 1-22-2020. We provide an overview of UA followed by several demos of the product. diff --git a/content/articles/2020-01-27-.md b/content/articles/2020-01-27-.md deleted file mode 100644 index 25345acec..000000000 --- a/content/articles/2020-01-27-.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Using Powershell with Ansible – Part 1 -authors: - - adazlian12 -date: "2020-01-27T00:00:00+00:00" -categories: - - PowerShell for Admins -draft: true ---- - -This is the first part of a 5 part series on working with Powershell & Ansible. In this first part we'll be discussing the basics of Ansible itself. -For those unfamiliar Ansible is a free & open source infrastructure configuration tool. If you're familiar with tools such as Chef, Puppet, or Terraform it's broadly similar. Tools like Ansible are designed to configure infrastructure solely through code and allow you to easily test & audit that configuration. Infrastructure can be anything from servers, to databases, to network switches, to cloud resources. Thee tools define a configuration language as well as the means of testing state, pushing out changes, verifying changes, etc. -Using a tool like Ansible lets you maintain the state - how its configured - of your infrastructure in code. This lets you easily deploy configuration changes to many servers at once, satisfy security or regulatory compliance issues with infrastructure, apply peer review to configurations (as its all just code), reduce errors in configuration due to missed settings, and rapidly roll out changes to many pieces of infrastructure at once. Scripting tools like Powershell let you extend Ansible to other scenarios. diff --git a/content/articles/2020-01-31-icymi-powershell-week-of-31-january-2020.md b/content/articles/2020-01-31-icymi-powershell-week-of-31-january-2020.md deleted file mode 100644 index bd945dd2e..000000000 --- a/content/articles/2020-01-31-icymi-powershell-week-of-31-january-2020.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 31-January-2020" -authors: - - Robin Dadswell -date: "2020-01-31T15:00:24+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/01/icymi-powershell-week-of-31-january-2020/ ---- - -Topics include Azure service updates, Publishing to the PowerShell Gallery, Office 365, Clusters and more. - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - - -###### - [*Retrieve Azure Service Updates and Publish as News Letter*](https://chen.about-powershell.com/2020/01/retrieve-azure-service-updates-and-publish-as-news-letter-powershell/?fbclid=IwAR1SJZGqMtG_flaw4Y-Oh7npAlSKfgTZWc3_YbYVCI8eutRI-CJi4zmHFds) - - - by Chen V on 26th January - - - It was a simple ask “How do we know Azure Service Updates?” The answer is to use the link (Azure Service Updates)! But, in this blog post I will show how to retrieve the feed information programmatically, store in Azure Table Storage and send weekly newsletter to business users - - -###### - [*How to Publish Your First PowerShell Gallery Package*](https://www.jeffbrown.tech/post/how-to-publish-your-first-powershell-gallery-package) - - - by Jeff Brown on 26th January - - - If you've written a module or script that you feel others could benefit using, definitely check out publishing it to the broader community. In fact, that's what this post is about. - - -###### - [*Office 365: Add User Accounts and Mailboxes with PowerShell*](https://sid-500.com/2020/01/28/office-365-add-user-accounts-and-mailboxes-with-powershell/) - - - by Patrick Gruenauer on 28th January - - - More and more companies are moving to the cloud. Subscribing cloud services means less hardware maintenance, more comfort, and an “always-on” feeling. As an administrator, you have to get familiar with the administration of cloud services, especially with the basics like creating user accounts and user mailboxes. In this article I will carry out adding user accounts along with adding user mailboxes with Powershell. - - -###### - [*Downloading PowerShell Language Reference (or any file)*](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/downloading-powershell-language-reference-or-any-file) - - - by Prateik Singh on 29th January - - - Invoke-WebRequest can easily download files for you. The code below downloads the PowerShell Language Reference published by PowerShell Magazine, and opens it with the associated program. - - -###### - [*Parsing Failover Cluster Validation Report in PowerShell*](https://www.powershellmagazine.com/2020/01/30/parsing-failover-cluster-validation-report-in-powershell/) - - - by Ravikanth C on 30th January - - - Test-Cluster can create an HTML report but it isn't very useable. Ravikanth's blog post goes into detail about converting the Test-Cluster output into something more usable for automation. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/etg1ct/pop_up_a_simcitystyle_powershell_loading_screen/) - - - User Weebsnore shares a Sim city style loading screen for the PowerShell console. - - -###### - [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1221921759852523520) - - - #PowerShell Core 6.2.4 is out! - - -###### - [*Youtube: PSS: Code, Commit, Deploy. Starting your 3 step journey to using Pipelines with Stephen Valdinger*](https://www.youtube.com/watch?v=h-ZJ1UlLVis&feature=youtu.be) - - - PowerShell Saturday is a training event for all things PowerShell. The event was held in Raleigh, North Carolina and hosted by Research Triangle PowerShell User Group. Stephen Valdinger goes through the process of using an Azure Dev Ops Pipeline. This process is useful in developing, maintaining, and deploying code. diff --git a/content/articles/2020-02-07-icymi-powershell-week-of-07-february-2020.md b/content/articles/2020-02-07-icymi-powershell-week-of-07-february-2020.md deleted file mode 100644 index 03915f5b3..000000000 --- a/content/articles/2020-02-07-icymi-powershell-week-of-07-february-2020.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 07-February-2020" -authors: - - Robin Dadswell -date: "2020-02-07T16:24:49+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/02/icymi-powershell-week-of-07-february-2020/ ---- - -Topics include PowerShell Secrets Management, Regex, DBA Tools and More. - - - - - - Special thanks to Robin, Kevin, Prasoon and Kiran. - - -###### - [*Setup Azure VM with user assigned managed identity to access Azure Key Vault.*](https://kpatnayakuni.com/2020/02/04/azure-powershell-setup-azure-vm-with-user-assigned-managed-identity-to-access-azure-key-vault/) - - - by Kiran Patnayakuni on 4th February - - - Kiran talks about securing your Azure key vault by using a managed identity - - -###### - [*Intune + Chocolatey: A Match Made in Heaven*](https://www.thelazyadministrator.com/2020/02/05/intune-chocolatey-a-match-made-in-heaven/) - - - by Brad Wyatt on 5th February - - - One time consuming task of Microsoft Intune is packaging up applications. Brad goes into how he uses Chocolatey to simplify this process - - -###### - [*Publishing NuGet Packages to Azure Artifacts*](https://adamtheautomator.com/azure-artifacts-nuget/) - - - by Adam Bertram on 6th February - - - Learn how to publish Azure Artifacts NuGet packages automatically with Azure Pipelines in this step-by-step tutorial! - - -###### - [*Learn More about PowerShell and Regular Expressions*](http://jdhitsolutions.com/blog/powershell/7222/learn-more-about-powershell-and-regular-expressions/) - - - by Jeff Hicks on 5th February - - - If you've never used regular expressions before you are missing out. Regex is a valuable tool for parsing strings, get a quick overview of it in this post. - - -###### - [*Secrets Management Development Release*](https://devblogs.microsoft.com/powershell/secrets-management-development-release/) - - - by Sydney Smith on 6th February - - - Microsoft released a development version of their secrets management module. Check out this article to find out more. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ewpljo/blog_post_learn_how_to_use_exception_messages/) - - - Learn about using Try Catch and providing valuable feedback to your users with error messages. - - -###### - [*Tweet of the Week*](https://twitter.com/rsrychro/status/1224898531212787714?s=20) - - - RTPSUG is continuing to release content from their PowerShell Saturday 2019, if you've never used DBA tools you should check it out. - - -###### - [*Youtube: Handling Errors in PowerShell with Try..Catch..Finally*](https://www.youtube.com/watch?v=LFWxH-bexNk) - - - The try..catch..finally statements in PowerShell allow you to handle exceptions (errors) in your scripts. One of the unique concepts in PowerShell exceptions is the notion of a terminating error versus a non-terminating error. In this video, we'll explore the difference between both types of exceptions, and learn how to effectively use try..catch..finally to handle exceptions in a calculated manner. In addition, we'll take a look at how to use multiple catch blocks to handle specific types of errors uniquely. diff --git a/content/articles/2020-02-14-icymi-powershell-week-of-14-february-2020.md b/content/articles/2020-02-14-icymi-powershell-week-of-14-february-2020.md deleted file mode 100644 index 9a60206de..000000000 --- a/content/articles/2020-02-14-icymi-powershell-week-of-14-february-2020.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 14-February-2020" -authors: - - Robin Dadswell -date: "2020-02-14T15:12:19+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/02/icymi-powershell-week-of-14-february-2020/ ---- - -Topics include Windows Terminal, Pesterv5, Monitoring and More. - - - - - - Special thanks to Robin, Kevin, Prasoon and Kiran - - -###### - [*The real purpose of the Finally statement in PowerShell*](https://itluke.online/2020/02/10/the-real-purpose-of-the-finally-statement-in-powershell/) - - - by Luc Fullenwarth on 10th February - - - You've heard of try/catch but there is another part to it, try/catch/finally. A lot of people struggle with the purpose of 'finally' but Luc tries to help out in this post. - - -###### - [*PowerShell Remoting Profiles with Windows Terminal*](http://jdhitsolutions.com/blog/powershell/7242/powershell-remoting-profiles-with-windows-terminal/) - - - by @JeffHicks on 10th February - - - Configuring the Windows Terminal as a PowerShell console and creating profiles for remote sessions. - - -###### - [*Monitoring with PowerShell: Monitoring psexec execution*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-psexec-execution/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-psexec-execution&fbclid=IwAR2uuQ8ET43gfO3rXZFs5XE8wKRMLHCsaoox51PvUOhvdeshbMe02YCFHAo) - - - by @KelvinTegelaar on 10th February - - - A nice way to monitor psexec execution using certificate thumbprint - - -###### - [*How to Apply DSC Configurations to VMs in Azure ARM Templates*](http://adamtheautomator.com/azure-dsc-arm-template/) - - - by Adam Bertram on 12th February - - - If you're deploying Azure Windows virtual machines (VMs) via ARM templates and need to configure Windows, this article is for you. In this tutorial, you're going to learn how to use the Desired State Configuration (DSC) extension for ARM templates to seamlessly deploy and configure an Azure VM Scale Set with a single template. - - -###### - [*Monitoring the Network Load with Powershell*](https://www.scriptinglibrary.com/languages/powershell/monitoring-the-network-load-with-powershell/) - - - by Paolo Frigo on 13th February - - - Paolo shares a script he created for monitoring Network usage using PowerShell - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/f0sy6y/cleaning_data/) - - - User akaBrotherNature shared some great RegEx that helped him clean up data by removing trailing spaces, multiple spaces and more. - - -###### - [*Tweet of the Week*](https://twitter.com/nohwnd/status/1226290016445517824) - - - Announcement of Pester v5 beta release. - - -###### - [*YouTube: Register for Filesystem Events with PowerShell*](https://www.youtube.com/watch?v=Gf-xHknIS9g) - - - In this video, you'll learn about the Docker, PowerShell, and Remote-Containers extensions for Microsoft Visual Studio Code. Once we review the essentials of these useful extensions, we'll use them to explore the process of registering for filesystem events using native PowerShell code. diff --git a/content/articles/2020-02-21-icymi-powershell-week-of-21-february-2020.md b/content/articles/2020-02-21-icymi-powershell-week-of-21-february-2020.md deleted file mode 100644 index 502885b5d..000000000 --- a/content/articles/2020-02-21-icymi-powershell-week-of-21-february-2020.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 21-February-2020" -authors: - - Robin Dadswell -date: "2020-02-21T16:17:51+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/02/icymi-powershell-week-of-21-february-2020/ ---- - -Topics include PowerShell Arrays, Monitoring your bandwidth, Azure Pipelines and more - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - -###### - [*Building Arrays and Collections in PowerShell*](https://vexx32.github.io/2020/02/15/Building-Arrays-Collections/) - - - by Joel Sallow on 15th February - - - Joel explained in detailed approach of building Arrays and Collections in PowerShell - - -###### - [*Monitoring with PowerShell: Monitoring internet speeds*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-internet-speeds/) - - - by @KelvinTegelaar on 16th February - - - Kelvin made the following PowerShell script that uses the CLI utility from [speedtest.net](http://speedtest.net) in order to monitor and alert on - - -###### - [*IntelliSense for Parameters*](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/intellisense-for-parameters-part-2) - - - by @PowerTip on 17th February - - - You are a PowerShell Professional, passionate about improving your code and skills? You take security seriously and are always looking for the latest advice and guidance to make your code more secure and faster? - - -###### - [*Running PowerShell Scripts in Azure DevOps Pipelines*](https://adamtheautomator.com/azure-devops-pipelines-powershell/) - - - by @adbertram on 18th February - - - Did you know you can natively run scripts like PowerShell in Azure DevOps (AzDo) pipelines? By using the tips and techniques you’ll learn in this article, you’ll be well on your way to scripting your way to automation greatness. - - -###### - [*AzureRM PowerShell Commands that Don’t Exist when Enabling Compatibility Aliases in the Az Module*](https://mikefrobbins.com/2020/02/19/azurerm-powershell-commands-that-dont-exist-when-enabling-compatibility-aliases-in-the-az-module/) - - - by Mike F. Robbins on 19th February - - - AzureRM PowerShell module is only supported until December of 2020. It has been replaced by the Az PowerShell module which was introduced in December of 2018 - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/f6gn9q/finding_gpos_missing_permissions_that_may_prevent/) - - - User MadBoyEvo shares a script he used to fix broken permissions on 50+ GPOs in one of his domains - - -###### - [*Tweet of the Week*](https://twitter.com/dfinke/status/1229104907518693376) - - - Turn PowerShell docs into "executable documents" with this. - - -###### - [*Youtube: How to change creation, modified and accessed dates for files using PowerShell*](https://youtu.be/n9C81jtEZHI) - - - In this video I show you how to modify the dates for the file attributes, Created, Modified and Access. This can be handy when creating test files for log rotation or for testing backups. diff --git a/content/articles/2020-02-28-icymi-powershell-week-of-28-february-2020.md b/content/articles/2020-02-28-icymi-powershell-week-of-28-february-2020.md deleted file mode 100644 index b548ebc4c..000000000 --- a/content/articles/2020-02-28-icymi-powershell-week-of-28-february-2020.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 28-February-2020" -authors: - - Robin Dadswell -date: "2020-02-28T17:05:14+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/02/icymi-powershell-week-of-28-february-2020/ ---- - -Topics include Subexpression, For Loops, Hyper-V and more - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - -###### - [*Handling PowerShell's Versatile Subexpressions*](https://vexx32.github.io/2020/02/24/Handling-PowerShell-Subexpressions/) - - - by @vexx32 on 24th February - - - Subexpressions are kind of like an inline function that always gets invoked immediately. You define a set of commands that all get invoked one after another, and then PowerShell processes all the output and either stores or outputs the results - - -###### - [*Documenting with Powershell: Documenting Hyper-V settings*](https://www.cyberdrain.com/documenting-with-powershell-documenting-hyper-v-settings/?utm_source=rss&utm_medium=rss&utm_campaign=documenting-with-powershell-documenting-hyper-v-settings) - - - by Kelvin Tegelaar on 24th February - - - Kelvin shares a tool which pull information from Hyper-V and turns the information into a document - - -###### - [*Fast Folder Sizes with PowerShell*](https://jdhitsolutions.com/blog/powershell/7317/fast-folder-sizes-with-powershell/) - - - by Jeff Hicks on 25th February - - - Jeff shows off a tool from his PSScriptTools module that uses .Net to speed up retrieving of file sizes. - - -###### - [*Back to Basics: The PowerShell For Loop*](https://adamtheautomator.com/powershell-for-loop/) - - - by June Castillote on 25th February - - - In this article, you will learn what the for loop in PowerShell is, understand its syntax and what makes up a for loop statement. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/f7h6se/powershell_7s_parallel_foreachobject_is_mind/) - - - u/Sunsparc discovers and explores Foreach-Object's new Parallel parameter in PowerShell 7 - - -###### - [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1233106090256035840?s=20) - - - Steve Lee anouncing some big news for the GA of PowerShell 7 - - -###### - [*Youtube: Getting started with customizing lists using PnP PowerShell*](https://youtu.be/1GPPxunPI40) - - - Community Demo from the SharePoint Developer Community bi-weekly meeting diff --git a/content/articles/2020-03-05-10-tips-for-powershell-summit-presenters.md b/content/articles/2020-03-05-10-tips-for-powershell-summit-presenters.md deleted file mode 100644 index d88aaf81d..000000000 --- a/content/articles/2020-03-05-10-tips-for-powershell-summit-presenters.md +++ /dev/null @@ -1,258 +0,0 @@ ---- -title: 10 Tips for PowerShell Summit Presenters -authors: - - Mike Kanakos -date: "2020-03-05T21:55:59+00:00" -categories: - - PowerShell Summit -aliases: - - /2020/03/10-tips-for-powershell-summit-presenters/ ---- - -PowerShell Summit 2020 is less than 60 days away! The list of presenters is final, and those presenters are putting finishing touches on their presentations. PowerShell Summit is a unique opportunity for presenters to show off their work to the community. For some, it’s a once in a lifetime opportunity, but it's also a nerve-wracking experience for many. - I have been lucky enough to be a presenter at Summit 2019. Now, I am on the team helping run the event. I am one of the few individuals who can say they were an attendee, a presenter and event planner for the summit. I thought I would offer some tips and advice for first-time presenters who are not sure what their first Summit presentation experience may be like. - I've come up with a handful of tips that presenters can use to help prepare for PowerShell summit. The list reads like a top 10 list, but there's no real order here. Rather, it is a list of useful things for presenters to consider as they prepare their work. - - - - - - - Tell a story - - - - - Don't count on the conference WiFi - - - - - Don't kill the audience with slides - - - - - Limit the amount of words on slides - - - - - Present live demos - - - - - Have a backup plan - - - - - Plan to finish your session early - - - - - Pre-stage everything! - - - - - Finish your presentation BEFORE you arrive - - - - - Practice, Practice, Practice - - - - - Relax Let’s dive in on each one of these items and discuss them in depth. - - - - - - - - -### - Tell a Story - - - - - - I am not advocating presenters share meaningless stories about their life or work. What I mean by "Tell a story" is to **make your presentation a complete thought**. Why are you presenting this data? What led you to this point? How can this data help people? What problem does it solve? Sometimes presenters know all those answers in their head but forget to share them with their audience. - Consider saying something similar to, "For years, We’ve been looking to automate these arcane processes at work, and I have been trying to find a product that would help me get there. With the release of this tool, my company has achieved unbelievable efficiency. I'd like to show you how you can too, and what we struggled with. Let's dive into how we did it and what challenges we faced along the way.” - - - - -### - Don't count on the conference WiFi - - - - - - You have come up with this awesome idea to run a live demo that reaches out to the internet and grab some live data. You know this going to be a killer demo and the crowd will love it! When its time to present, the WiFi is saturated and you can't get your data. Bummer... - How would you proceed if the hotel wireless went down for the afternoon? The point here is: **don't rely on the conference wireless!** - Many presenters have had their sessions crash and burn because they weren't able to run their demos as expected. If you need to connect to the internet for your demo, rent a hotspot for the day or the week. A good plan would include having the data you need on your laptop as a backup. Also, I would caution against running a demo from the AWS or Azure cloud if you can avoid it. Everything could work out as you plan, but past data says otherwise. - Last year, Azure cloud was offline when Joey Aiello was trying to show off some Cloud awesomeness. It happens! Hotel WiFi and cloud resources are the short paths to having a presentation not go as planned. - - - - -### - Don't kill the audience with slides - - - - - - **The key to a great summit demo is fewer slides, not more.** It takes a very skilled presenter who can pull off using many slides and not boring the audience. People come to summit to see cool demos, not slick slides. Keep your slides to a minimum and leave more time for your demos! The audience will thank you. - - - - -### - Limit the amount of words on slides - - - - - - While we're discussing about slides, let's talk about good slide etiquette. - People hate watching slideshows. Why? Because most slide shows are boring and unimaginative. Slide presentations can be great tools; but they need to be succinct. Well done slides can be excellent visual aids to help you tell your story. The key point here is **you tell the story, not the slides.** - If you are considering using slides at summit, you need to view a video called [How to avoid Death by PowerPoint](https://youtu.be/Iwpi1Lm6dFo) before you design your slides. See it once and you will change the way you make slides for the rest of your life. - - - - -### - Present live demos - - - - - - At summit, **attendees want to see the code in action** and what happens when you execute the code. However, a word of caution, live demos are one of the biggest things that go bad for presenters. So what's a n00b presenter to do? - Present data/execute code in the moment and have a backup in case it doesn't work out as planned. Another option is to record or pre-stage your work, so all you have to do is start a pre-canned process and you know what the output will be. - - - - -### - Have a backup plan - - - - - - Things can go bump in the night! The demo gods sometimes come and slay presenters. Be prepared! - - - - - - - - Do you have a backup plan? - - - - - What happens if X doesn't work? - - - - - - - - Think it through now and hopefully you wont need to go to your backup plan. But you will be glad if you you end up with Plan B or C and you know you can still nail the demo! - - - - -### - -Plan to finish your session early - - - - - - - People are awful at estimating the time required to complete a task. This holds true for presenters also. We all have witnessed a presenter say, “I’m running low on time, let me skip these last 10 slides..." Don't let that be you. Plan to finish sooner. That means you may need to cut out some irrelevant content. - **Edit your content ruthlessly and only present the most important items**. If you finish early, you can always show some extra stuff. **Leave your audience on a high note.** - - - - -### - Pre-stage everything - - - - - - You've been preparing for this for over 6 months. You get on that stage; you look at the crowd, and you’re ready to go! You get started and then you forget small bits you intended to mention. You can't think straight; things are not going as hoped. Getting back on track seems impossible. - This is all avoidable. You can pre-stage your work so you can go from A to B to C without thinking and without having to type complex commands or code. **Minimize your opportunities to make mistakes.** - - - - - - - - Create a script. - - - - - Pre-stage all the commands in a PS1 file so you only have to select the next command. - - - - - Have your demos in number order so you can find them easily. - - - - - Create shortcuts. - - - - - Have a cheat sheet of notes you can refer to. - - - - - - - - Avoid leaving things to chance when it's go time. You will be nervous; understand this and have your things ready to go beforehand. - - - - -### - Finish your presentation BEFORE you arrive - - - - - - Last year I presented on the third day of summit. I was working on code on the two days prior and the day of my presentation. I pulled it off, but I missed a lot of stuff at summit because I was busy fixing bugs. Don’t be like me.** Finish before you arrive and then resist the urge to make last-minute changes.** - - - - -### - Practice, Practice, Practice - - - - - - This one is obvious. Presenting at Summit will be a highlight of your career. **Practice your entire presentation in its entirety at least three times before you get to the summit event.** The more you practice, the better your presentation will be. - - - - -### - Relax - - - - - - A bonus tip to serve as a reminder. Try to relax and enjoy the moment. It always goes faster than you think. the first five minutes are hard and then it just gets easier. Take a deep breath and relax. The summit committee picked you because they like what you had to say. Now just execute. You got this! - Good luck to all presenters this year. We're all excited to see the wonderful things you all have produced. If someone has questions what it was like to be a presenter, please feel to reach out to me. They can find me on Twitter (@MikeKanakos), Discord (@MikeKanakos) or at my website ([www.networkadm.in](http://www.networkadm.in/)). diff --git a/content/articles/2020-03-06-icymi-powershell-week-of-06-march-2020.md b/content/articles/2020-03-06-icymi-powershell-week-of-06-march-2020.md deleted file mode 100644 index 666180074..000000000 --- a/content/articles/2020-03-06-icymi-powershell-week-of-06-march-2020.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 06-March-2020" -authors: - - Robin Dadswell -date: "2020-03-06T17:25:28+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/03/icymi-powershell-week-of-06-march-2020/ ---- - -Topics include PowerShell 7 GA, SCCM, Group Policy and more... - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - -###### - [*Step-by-Step Guide to Azure Private Endpoints (PowerShell Guide)*](http://www.rebeladmin.com/2020/02/step-step-guide-azure-private-endpoints-powershell-guide/) - - - by Dishan M. Francis on 29th February - - - Dishan is trying to explain how to configure Azure Private Endpoints using PowerShell to access your Azure PaaS services securely. - - -###### - [*Using PowerShell to generate and deploy Group Policies for non-domain environments*](https://www.cyberdrain.com/using-powershell-to-generate-and-deploy-group-policies-for-non-domain-environments/) - - - by Kelvin Tegelaar on 1st March - - - Kelvin explains how to generate and deploy GPOs for non-domain environments using PowerShell - - -###### - [*Designing Professional Parameters*](https://powershell.one/powershell-internals/attributes/parameters) - - - by Dr. Tobias Weltner on 2nd March - - - With the help of [Parameter()], you define sophisticated PowerShell parameters that enhance usability and versatility of your functions. - - -###### - [*SCCM deployment validation using PowerShell Pester*](https://secureinfra.blog/2020/03/03/sccm-deployment-validation-using-powershell-pester/) - - - by lynfordh on 3rd March - - - lynfordh is explaining how to validate the deployment of System Center Configuration Manager (SCCM) using PowerShell Pester. - - -###### - [*What's new in PowerShell 7 – Check it out!*](https://www.thomasmaurer.ch/2020/03/whats-new-in-powershell-7-check-it-out/) - - - by Thomas Maurer on 4th March - - - Thomas breaks down the new features in PS7 - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/fckbsb/i_wrote_my_first_3_scripts_today_and_it_feels/) - - - [UnderCoverITBoss](https://www.reddit.com/user/UnderCoverITBoss/%7Cu/UnderCoverITBoss) writes their first scripts and is now on a mission to script everything - - -###### - [*Tweet of the Week*](https://twitter.com/PowerShell_Team/status/1235252089552396288) - - - The PowerShell team announced the general availability of version 7 on Wednesday. - - -###### - [*Youtube: Core Concept: PowerShell 7 New Features*](https://www.youtube.com/watch?v=u3zXMv69uNA) - - - RTPSUG Met for their monthly virtual meeting and it was the perfect time to review some of the new features of PowerShell 7 diff --git a/content/articles/2020-03-11-not-so-intutive-powershell-behavior.md b/content/articles/2020-03-11-not-so-intutive-powershell-behavior.md deleted file mode 100644 index 185ae2ed5..000000000 --- a/content/articles/2020-03-11-not-so-intutive-powershell-behavior.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Not So Intutive PowerShell Behavior -authors: - - tobor79 -date: "2020-03-11T21:36:45+00:00" -categories: - - Tips and Tricks -aliases: - - /2020/03/not-so-intutive-powershell-behavior/ ---- - -The below link leads to the module I am writing about in this blog post. -**[ -LINK TO POWERSHELL MODULE -](https://github.com/tobor88/PowerShell/blob/master/Set-LockScreenImage.psm1)** -At my place of work a task needed to be completed that would allow us IT administrators to set the default lock screen image for our devices. Group Policy was my first thought however it was to broad of a solution. The rules basically became, set the default lock screen on some of the newer laptops and if a default lock screen has been manually chosen by a user; don't change it. -I figured great that is an easy module to write. I wanted to add the option to execute the command on remote computers as well which is what brought up a couple great unexpected behaviors. -The cmdlets these include are New-PsDrive being executed on a remote machine and Copy-Item from a network location to a local location. - - -** - -COPY-ITEM - -** -In order to set the lock screen image for a laptop, we first need to ensure the image will always available. If something ever changes where the laptop needs to pull the image file again and the image is not reachable; the default image will be a black screen. I prefer to save the image file locally on the laptops. In order to do that, when I execute my function, I need to copy the file from a shared resource onto the local device. This is done with Copy-Item because PowerShell is object oriented where Command Prompt's robocopy is text/string oriented. We are not able to just copy a file from a local location. -The first line in [Microsoft's Documentation](https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Management/Copy-Item?view=powershell-5.0) states the function only works between objects in the same namespace. This prevents copying a file to a Certificate Drive or Registry Drive. This rule is what prevents '\\networkshare\folder$\image.png' from being copied to 'C:\Users\Public\Pictures\image.png'. A fairly simple concept. -What this means is that if we want to copy an item from one location to another the drive needs to be seen by PowerShell to have a 'Provider' property with the value 'FileSystem'. This can be seen in the image below. - - - - - - ![Type Information for Get-PsDrive](https://img1.wsimg.com/isteam/ip/8f3c0f3f-85e4-413f-bd91-f19d4f317a5a/Get-Member.png/:/cr=t:0%25,l:0%25,w:100%25,h:100%25/rs=w:1280) - - - -*Type Information for Get-PsDrive* - - - - - ![Results for the cmdlet Get-PsDrive in PowerShell](https://img1.wsimg.com/isteam/ip/8f3c0f3f-85e4-413f-bd91-f19d4f317a5a/GetPsDrive.png/:/cr=t:0%25,l:0%25,w:100%25,h:100%25/rs=w:1280) - - - -*Get-PsDrive Results* - -In the above images we see that Provider is a property of the Get-PsDrive function. The Provider property must share a value in order to copy an item from one FileSystem to another FileSystem. -The location of the lock screen image for this blog and the function on GitHub is located at '\\networkshare\files$\Backgrounds'. We need to map this location to a drive letter in order to move the file to a local or remote computer.  How do we do that? New-PsDrive is how. -** - -NEW-PSDRIVE - -** -Here is the [Microsoft Documentation](https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Management/New-PSDrive?view=powershell-5.0) for New-PsDrive. New-PsDrive can be used to create temporary or persistent drives. When the '-Persist' parameter is used, a persistent Windows mapped  network drive that is associated with a file system location on a  remote computer is created. -Temporary drives exist only in the current PowerShell session and in  sessions that you create in the current session. This in essence means we need to use the "New-PsSession" cmdlet in order for New-PsDrive to work. Without reading the documentation as I have done before trying this command you may believe that an "Access Denied" PowerShell error has to do with using the '-Credential' parameter. I have demonstrated a few misleading events below. - - - - - ![New-PsDrive's not so intuitive behavior](https://img1.wsimg.com/isteam/ip/8f3c0f3f-85e4-413f-bd91-f19d4f317a5a/Tricky-0002.png/:/cr=t:0%25,l:0%25,w:100%25,h:100%25/rs=w:1280) - - - -*New-PsDrive's not so intuitive behavior* - -** -FIRST:  -**The first attempt above gives us an Access Denied error. No credentials were entered. It was just me executing a command. -** -SECOND: -** My next attempt/reaction to that adds the -Credential parameter to the Invoke-Command cmdlet. Invoke-Command runs commands on a remote computer and displays the output in the PowerShell terminal. I added this to ensure the command was running as an administrator. I received another access is denied error. - -**THIRD:**  -My response to that was to cover all basis and add another -Credential parameter to the New-PsDrive command to map the drive and have the remote computer authenticate my credentials. This time it returned a result as though it was successful and it was for a brief moment. -Even though I added the -Persist parameter it was only persistent for that session and closed as soon as Invoke-Command's ScriptBlock finished running. -If I were to run Get-PsDrive right after mapping the drive in that version of Invoke-Command it would return a result showing the T drive I just mapped. A PowerShell function should do one thing and one thing only. To better adhere to that rule for the Set-LockScreenImage function  we should use New-PsSession to create a $Session variable. This way we have one session that can be used to execute multiple commands instead of multiple commands being executed in multiple sessions. -I believe these to be a couple of great examples to explain to someone who is just getting into PowerShell or decided those functions did not work. Hope you found this helpfule. - -- tobor -https://roberthosborne.com diff --git a/content/articles/2020-03-13-icymi-powershell-week-of-13-march-2020.md b/content/articles/2020-03-13-icymi-powershell-week-of-13-march-2020.md deleted file mode 100644 index 7b683bfc6..000000000 --- a/content/articles/2020-03-13-icymi-powershell-week-of-13-march-2020.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 13-March-2020" -authors: - - Robin Dadswell -date: "2020-03-13T15:21:49+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/03/icymi-powershell-week-of-13-march-2020/ ---- - -Topics include Splatting, PS7 Experimental features, VSCode and more... - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - -###### - [*Running PowerShell 7 Commands Directly on Ansible Localhost*](https://www.jonathanmedd.net/2020/03/running-powershell-7-commands-directly-on-ansible-localhost.html) - - - by Jonathan Medd on 11th March - - - Jonathan updates his blog post about using ansible with PSCore to now cover PS7. - - -###### - [*PowerShell and DevOps conference 2020*](https://www.powershellmagazine.com/2020/03/12/powershell-and-devops-conference-asia-2020/) - - - by @ravikanth on 12th March - - - PowerShell Conference Asia 2019 was held in Bangalore (India). It was such a great event and fun hosting it here. For the first time in the history of PowerShell Conference Asia we had 220+ PowerShell lovers at the conference. - - -###### - [*PowerShell 7 Profile paths and locations*](https://ridicurious.com/2020/03/12/powershell-7-profile-paths-and-locations/) - - - by singhprateik on 12th March - - - PowerShell v7 ships with some new shiny features, significant changes and slew of performance improvements and bug fixes, so lets just quickly go through them without going into the details before we can look into PowerShell 7 Profile - - -###### - [*PowerShell 7 Experimental Features*](https://powershell.anovelidea.org/powershell/ps7now-experimental-features/) - - - by Dave Carroll on 12th March - - - PowerShell 7 has a new experimental feature option learn more about it. - - -###### - [*PowerShell 7, VS Code, and the PowerShell 7 ISE Extension*](https://tfl09.blogspot.com/2020/03/powershell-7-vs-code-and-powershell-7.html) - - - by Thomas Lee on 12th March - - - Learn more about VS Code and how to write PS7 scripts just like you would in the ISE. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/fer93d/im_a_ps_noob_who_created_a_750_line_script_that/) - - - Reddit user gets help from the community to improve a business critical script. - - -###### - [*Tweet of the Week*](https://twitter.com/yobyot/status/1238267095319752710) - - - Thank you for the Out-ConsoleGridView - - -###### - [*Youtube: PowerShell Splatting How-To: I should use it more and so should you!*](https://youtu.be/qOU6UHOY0SE) - - - A quick overview of just how easy it is to use splatting and why you should do it using the New-ADUser CMDlet as an example. diff --git a/content/articles/2020-03-20-icymi-powershell-week-of-20-march-2020.md b/content/articles/2020-03-20-icymi-powershell-week-of-20-march-2020.md deleted file mode 100644 index 2131cd86e..000000000 --- a/content/articles/2020-03-20-icymi-powershell-week-of-20-march-2020.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 20-March-2020" -authors: - - Robin Dadswell -date: "2020-03-20T18:38:47+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/03/icymi-powershell-week-of-20-march-2020/ ---- - -Topics include Select-String, Should Process, PowerShell Summit and more... - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - -###### - [*WHAT'S NEW WITH SELECT-STRING IN POWERSHELL7*](https://www.networkadm.in/select-string-powershell7/) - - - by @MikeKanakos on 14th March - - - With PS7 Select-String has some cool changes, Mike goes over some of those changes. - - -###### - [*PowerShell functions for which cmdlets can autocomplete properties*](https://itluke.online/2020/03/15/powershell-functions-for-which-cmdlets-can-autocomplete-properties/) - - - by ITLuke on 15th March - - - So you noticed that when you pipe some cmdlets to the  - - -`Select-Object -`cmdlet, you can hit the TAB key and enumerate all properties of the former cmdlet. This works with other cmdlets too. Here is a non-exhaustive list - - -###### - [*Powershell: Everything you wanted to know about ShouldProcess*](https://powershellexplained.com/2020-03-15-Powershell-shouldprocess-whatif-confirm-shouldcontinue-everything/?utm_source=twitter&utm_medium=post) - - - by @KevinMarquette on 15th March - - - PowerShell functions are very robust with several features that greatly improves the way users interact with them. One important feature that is often overlooked is -WhatIf and -Confirm support and it is easy to add to your functions. In this article, we will dive deep into how to implement this feature. - - -###### - [*Infrastructure as Code: Where Continuous Delivery All Begins*](https://adamtheautomator.com/infrastructure-as-code-ci-cd/) - - - by @adbertram on 17th March - - - The larger the organization and team, the larger the problems. All of these issues can be eliminated or, at least, mitigated with a concept called Infrastructure as Code (IaC). - - -###### - [*Monitoring with PowerShell: Monitoring OneDrive and Sharepoint file limits*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-onedrive-and-sharepoint-file-limits/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-onedrive-and-sharepoint-file-limits) - - - by Kelvin Tegelaar on 20th March - - - Kevin shares his scripts for monitoring the amount of files in a library, to prevent issues with the OneDrive sync client. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/fjjglr/microsoft_is_gonna_delete_thousands_of_scripts/) - - - TechNet Gallery is being retired see what reddit has to say. - - -###### - [*Youtube: PowerScripting Podcast - 334 - Glenn Sarti & Michael Lombardi*](https://youtu.be/Xirv6WQFmSs) - - - Catch up on the latest PowerScripting Podcast. diff --git a/content/articles/2020-03-21-powershell-conference-book-volume-3-call-for-authors.md b/content/articles/2020-03-21-powershell-conference-book-volume-3-call-for-authors.md deleted file mode 100644 index 47e528618..000000000 --- a/content/articles/2020-03-21-powershell-conference-book-volume-3-call-for-authors.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: PowerShell Conference Book Volume 3 Call For Authors -authors: - - Mark Kraus (markekraus) -date: "2020-03-21T13:00:38+00:00" -categories: - - Announcements - - Books -aliases: - - /2020/03/powershell-conference-book-volume-3-call-for-authors/ ---- - -**EDIT**: We have extended the CFA to May 25th! - -The  -_ -PowerShell Conference Book Volume 3 -_ - Call for Authors (CFA) is now open! - -[ -http://bit.ly/PSConfBook3CFA -](http://bit.ly/PSConfBook3CFA) - -The timeline for this process should be as follows: - - - * -Close submissions on Monday, May 4th, at 11:00 PM PDT - - * -Notify everyone by May 25th - - * -Final drafts will be due by June 1st - - - * -Finalize publication by September 30th - - -We are looking for one chapter per author on the topics of PowerShell, DevOps, WinOps, Open Source, or IT Careers. Topic depths can range from novice to expert. Chapters can be technical or cover cultural aspects. Authors can be new or well established. The book will be written in American English, but non-native speakers are welcome (our editorial team will support you)! - - -You may submit up to 5 chapter proposals in the [CFA](http://bit.ly/PSConfBook3CFA), but we will choose only one (1) chapter per author. Chapters will be selected based on the contents of the abstract. The more information and clarity you provide about your chapter, the better chance we will choose it over vague abstracts on the same topic. Submitting multiple abstracts will help in case someone else submitted an abstract on the same topic. You may return the form and edit it as many times as you like until the close date. - - - -Published authors will receive one (1) free e-book copy. We will attempt to provide one (1) at-cost physical copy but can make no advanced guarantees.  - - -## -About Volume 3 - - -_ -PowerShell Conference Book Volume 3  -_ -furthers the traditions of Volume 1 and Volume 3 by acting as a "conference in a book." It will contain all-new chapters and is not just a new edition of the previous volumes. A different author will write each chapter. Topics will cover PowerShell, DevOps, WinOps, Open Source, or IT Careers. The authors will be a mix of well-known PowerShell community members, new faces, bloggers, authors, trainers, and presenters. - - -Everyone has something to share that everyone can learn from! - -** -100% of proceeds -** - will go to the  -[ -OnRamp scholarship program -](https://powershell.org/summit/summit-onramp/onramp-scholarship/) -. The editors and authors will only be compensated with a complimentary e-copy of the book. The true payment will come in the authors and editors knowing that the knowledge they shared has helped not only those they shared it with but to new and diverse professionals awarded OnRamp scholarships! - - -## -About the Editorial Staff - - -For Volume 3, Mark E. Kraus will act as Editor-in-Chief with support from Senior Editor Michael Zanatta. The rest of the editorial staff includes Phil Bossman, Christian Coventry, Justin Gehman, Joe Houghee, Steven Judd, Bill Kindle, Adil Leghari, and Arnaud Petitjean. - - -We learned our lessons from Volume 2 and have increased our editorial staff. This increase should help us compress our timelines so we can publish sooner and start supporting the OnRamp program even earlier! - -We look forward to reading your submissions at ! diff --git a/content/articles/2020-03-27-icymi-powershell-week-of-27-march-2020.md b/content/articles/2020-03-27-icymi-powershell-week-of-27-march-2020.md deleted file mode 100644 index bd8dc05e2..000000000 --- a/content/articles/2020-03-27-icymi-powershell-week-of-27-march-2020.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 27-March-2020" -authors: - - Robin Dadswell -date: "2020-03-27T15:00:11+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/03/icymi-powershell-week-of-27-march-2020/ ---- - -Topics include Switch Statements, Try Catch, Python and more... - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - -###### - [*Use cases for the new null coalescing operator in PowerShell 7*](https://itluke.online/2020/03/22/use-cases-for-the-new-null-coalescing-operator-in-powershell-7/) - - - by Luc on 22nd March - - - Tips and use cases for the new null coalescing operator in PowerShell 7. - - -###### - [*Getting into Python by Referencing PowerShell*](https://nocolumnname.blog/2020/03/23/getting-into-python-by-referencing-powershell/) - - - by @SOZDBA on 23rd March - - - Trying to break his PowerShell dependency Shane shares an example for a script he wrote in both Python and PowerShell. - - -###### - [*Back to Basics: Understanding the PowerShell Switch Statement*](https://adamtheautomator.com/powershell-switch/) - - - by [https://twitter.com/@junecastillote|@junecastillote](https://twitter.com/@junecastillote%7C@junecastillote)> on 25th March - - - In this article, you will learn what the PowerShell switch statement is, understand its syntax and how it works. - - -###### - [*Monitoring with PowerShell: monitor and enabling WOL for HP, Lenovo, Dell*](https://www.cyberdrain.com/monitoring-with-powershell-monitor-and-enabling-wol-for-hp-lenovo-dell/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitor-and-enabling-wol-for-hp-lenovo-dell) - - - by @KelvinTegelaar on 26th March - - - Kevin shares a script he wrote to detect if machines are setup for wake on LAN, and another script to enable WOL if it's not already enabled. - - -###### - [*#PS7Now Ebook Available*](https://jdhitsolutions.com/blog/powershell/7371/ps7now-ebook-available/) - - - by @JeffHicks on 26th March - - - With the PowerShell 7 release Jeff Hicks hosted a weeks worth of blogs and compiled into a leanpub ebook that is now available, check it out. - - -###### - [Tweet of the Week](https://twitter.com/TrebuchetOps/status/1243331005173424129) - - -Michael T Lombardi shares his book for free or a voluntary donation! - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/fo3z38/windows_virtual_desktop_deployment_tutorial/) - - - [https://www.reddit.com/user/Arcontar/|u/Arcontar](https://www.reddit.com/user/Arcontar/%7Cu/Arcontar)shares a tutorial on setting up WVD in Azure for remote workers using PowerShell. - - -###### - [*Youtube: Tools: Build your first Serverless App in Azure in under 60 minutes!*](https://youtu.be/UblF7aJWqAA) - - - RTPSUG got into Azure serverless with a presentation from Jeremy Brown. diff --git a/content/articles/2020-04-03-icymi-powershell-week-of-03-april-2020.md b/content/articles/2020-04-03-icymi-powershell-week-of-03-april-2020.md deleted file mode 100644 index c2416f38a..000000000 --- a/content/articles/2020-04-03-icymi-powershell-week-of-03-april-2020.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 03-April-2020" -authors: - - Robin Dadswell -date: "2020-04-03T15:12:06+00:00" -categories: - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/04/icymi-powershell-week-of-03-april-2020/ ---- - -Topics include Windows Terminal, Event Logs, String Basics and more. - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - -###### - [*Dynamic PowerShell and SSH remoting tabs for Windows Terminal*](https://itluke.online/2020/03/29/dynamic-powershell-and-ssh-remoting-tabs-for-windows-terminal/) - - - by Luke on 29th March - - - I am a SysAdmin and have to connect to dozen of different computers every day, I needed to bring this a little further and make it more “dynamic”: every time I open a remoting tab, it should ask for the computer name and the username if necessary. - - -###### - [*NEW Oneliner to Tail the Windows Eventlog*](https://cloudywindows.io/post/new-oneliner-to-tail-the-windows-eventlog/) - - - by Darwin Sanoy on 30th March - - - Equivalent of tail -f on Linux for the Windows Event Log - - -###### - [*Monitoring with PowerShell: Monitoring client VPN settings*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-client-vpn-settings/) - - - by Kelvin Tegelaar on 31st March - - - Learn how to monitor Always on VPN connections from the clients. - - -###### - [*Back to Basics: PowerShell Strings*](https://adamtheautomator.com/powershell-strings/) - - - by June Castillote on 1st April - - - In this article, you'll learn that strings are not just for reading and displaying. They can also be manipulated to fit the purpose of whatever task you may be writing the script for. - - -###### - [*PowerShell Basics: How to Upload Files to Azure Storage*](https://techcommunity.microsoft.com/t5/itops-talk-blog/powershell-basics-how-to-upload-files-to-azure-storage/ba-p/1273322?utm_source=dlvr.it&utm_medium=twitter) - - - by Anthony Bartolo on 2nd April - - - Learn how to easily add files to Azure Blob Storage - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ftwmtj/pluralsight_offering_1_month_free_courses_i_didnt/) - - - u/BlackV shared some information about Pluralsight giving a free month of training away. - - -###### - [*Tweet of the Week*](https://twitter.com/MGrafnetter/status/1245725537462636545) - - - Audit FIDO Keys registered in Azure AD using PowerShell - - -###### - [*Youtube: Creating Restore Points Using PowerShell!*](https://youtu.be/bu8FCZsrkQg) - - - Creating restore points using PowerShell will allow a user to restore their machine from a previous system state. diff --git a/content/articles/2020-04-10-icymi-powershell-week-of-10-april-2020.md b/content/articles/2020-04-10-icymi-powershell-week-of-10-april-2020.md deleted file mode 100644 index 0133b100d..000000000 --- a/content/articles/2020-04-10-icymi-powershell-week-of-10-april-2020.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 10-April-2020" -authors: - - Robin Dadswell -date: "2020-04-10T17:35:44+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/04/icymi-powershell-week-of-10-april-2020/ ---- - -Topics include Azure, GPOs, Bits and more... - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - -###### - [*Simple file and folder transfer using Bits*](https://www.mczerniawski.pl/powershell/transfer-with-bits/) - - - by Mateusz Czerniawski on 6th April - - - We all heard of Bits. It’s the demo service most scripts fiddle with, when Windows services are concerned. But what it is and how we can benefit from it? - - -###### - [*How to Parse ARM Output Variables in Azure DevOps Pipelines*](https://adamtheautomator.com/arm-output-variables-in-azure-pipelines-powershell/) - - - by Adam Bertram on 7th April - - - In this article, you're to learn one of the most troublesome (personal opinion) aspects of using ARM templates in AzDo pipelines - managing output variables. - - -###### - [*GPO from zero to hero - How to backup GPO*](http://jm2k69.github.io/2020-04-07-GPO-from-zero-to-hero-How-to-backup-GPO/) - - - by @JM2K69 on 7th April - - - This post discusses the Backup of GPO and how to restore them in Active Directory with and without PowerShell. - - -###### - [*Enabling Clickable PowerPoint Actions.*](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/enabling-clickable-powerpoint-actions) - - - by @singhprateik on 7th April - - - Using clickable actions in PowerPoint presentations can be super useful to launch Visual Studio Code or PowerShell ISE, and seamlessly open and demo PowerShell code.. - - -###### - [*PowerShell supports a powerful pipeline concept.*](http://powershell.one/powershell-internals/scriptblocks/powershell-pipeline) - - - by @TobiasPSP on 7th April - - - PowerShell supports a powerful pipeline concept. Learn how the PowerShell pipeline works, and how you can pipeline-enable your own PowerShell functions. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/futc19/how_not_to_find_installed_applications_and_how_to/) - - - u/mdj_ makes the case to not use win32_product for checking installed software and shares a blog post explaining his position. - - -###### - [*Tweet of the Week*](https://twitter.com/JeffHicks/status/1248343716336672770) - - - Jeff Hicks provides a link to a repo of useful code in his Github gists - - -###### - [*Youtube: April Fools Day: PowerShell Tips, Tricks & Dad Jokes with Steven Judd*](https://youtu.be/BZZM6i8AE1Y) - - - RTPSUG hosted a special April Fools users group meeting with fun jokes and PowerShell. diff --git a/content/articles/2020-04-17-icymi-powershell-week-of-17-april-2020.md b/content/articles/2020-04-17-icymi-powershell-week-of-17-april-2020.md deleted file mode 100644 index 17ed9e604..000000000 --- a/content/articles/2020-04-17-icymi-powershell-week-of-17-april-2020.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 17-April-2020" -authors: - - Robin Dadswell -date: "2020-04-17T16:21:21+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/04/icymi-powershell-week-of-17-april-2020/ ---- - -Topics include Windows Terminal, LAPS, HTML and more... - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - -###### - [*I'm Josh King, Sysadmin, and This Is How I Work (During Lockdown)*](https://toastit.dev/2020/04/13/how-i-work-lockdown/) - - - by @WindosNZ on 13th April - - - PowerShell Blogger Josh King shares his work from home setup in a blog post. - - -###### - [*How to Rotate Windows Admin Passwords with Microsoft LAPS*](https://adamtheautomator.com/microsoft-laps/) - - - by @AlexAsplund on 14th April - - - If you haven't set up Microsoft LAPS this article details how to set it up and secure the local admin passwords on your windows machines. - - -###### - [*PSDrives, Shortcuts and Links*](https://jdhitsolutions.com/blog/powershell/7386/psdrives-shortcuts-and-links/) - - - by Jeffery Hicks on 15th April - - - Jeffery tried to explain how to create OneDrive folder as a PSDrive and creating shortcuts to it in PowerShell and made available on all the computers. - - -###### - [*PowerShell (Tab) Titles*](https://tommymaynard.com/powershell-tab-titles/) - - - by Tommy Maynard on 16th April - - - In this post you learn how to use PowerShell to set the tab titles in Windows terminal to help keep things in order. - - -###### - [*How To Create An HTML Report With PowerShell*](https://adamtheautomator.com/powershell-convertto-html) - - - by Dan Dimalanta on 16th April - - - In this article, you will learn how to use the ConvertTo-HTML combined with Out-File cmdlets to generate an HTML report. You will also learn the basic scripting for CSS and how it can be useful in formatting the design of your HTML based report. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/g0mh8i/i_created_a_discord_bot_to_host_jackbox_party/) - - - u/alduron set up a discord bot to manage a VM running Jackbox Party games and shared it with the community. - - -###### - [*Tweet of the Week*](https://twitter.com/TylerLeonhardt/status/1250793530265530368) - - - Tyler shares an exciting new update for GitHub actions. - - -###### - [*Youtube: PowerScripting Podcast - 335 - Mike Kanakos*](https://www.youtube.com/watch?v=8q9C5rlST8c) - - - This months video of the PowerScripting Podcast with PowerShell Blogger Mike Kanakos. diff --git a/content/articles/2020-04-24-icymi-powershell-week-of-24-april-2020.md b/content/articles/2020-04-24-icymi-powershell-week-of-24-april-2020.md deleted file mode 100644 index 23649ace6..000000000 --- a/content/articles/2020-04-24-icymi-powershell-week-of-24-april-2020.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 24-April-2020" -authors: - - Robin Dadswell -date: "2020-04-24T16:32:35+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/04/icymi-powershell-week-of-24-april-2020/ ---- - -Topics include Azure functions, Windows Performance, O365 and more... - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - -###### - [*Measure Windows Performance*](https://powershell.one/code/8.html) - - - by @TobiasPSP on 19th April - - - Windows comes with a built-in performance assessment tool. It can be used to compare system performance, and you'll also learn a lot about PowerShell techniques. - - -###### - [*PowerShell Left-Center-Right*](https://jdhitsolutions.com/blog/powershell/7401/powershell-left-center-right/) - - - by Jeff Hicks on 20th April - - - Jeff shares his PowerShell version of a game he plays called LCR. - - -###### - [*Azure Functions: Creating a PowerShell Event Based Function*](https://cloudskills.io/blog/azure-event-driven-function) - - - by Matt Allford on 21st April - - - Learn how to use PowerShell based Azure Functions in this informative guide. - - -###### - [*PowerShell: Invoke-RestMethod*](https://alainassaf.github.io/2020-04-22-Powershell-Invoke-RestMethod/) - - - by Alain Assaf on 22nd April - - - Alain has a great breakdown of Invoke-RestMethod and how its used. - - -###### - [*How to Restore an Office 365 Mailbox for Free*](https://adamtheautomator.com/restore-mailbox-office-365/) - - - by June Castillote on 22nd April - - - In this article, you will learn the different ways to restore or recover a deleted mailbox in Office 365 with real, step-by-step examples using PowerShell. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/g67tic/windows_terminal_preview_v011_release_windows/) - - - If you have been using the new Windows Terminal there is a new version available. Thomas Maurer shares the release info. - - -###### - [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1253383835951091712?s=19) - - - #PowerShell 7.1-Preview.2 is officially out!  Built on .NET 5 Preview.3!  Try it out and give us feedback. - - -###### - [*Youtube: Utilities: Getting started with API's with Jonathan Moss*](https://youtu.be/ZbpbissNlCs) - - - Join Jonathan Moss as he shares the basics of APIs. diff --git a/content/articles/2020-05-01-icymi-powershell-week-of-01-may-2020.md b/content/articles/2020-05-01-icymi-powershell-week-of-01-may-2020.md deleted file mode 100644 index 83d2fd597..000000000 --- a/content/articles/2020-05-01-icymi-powershell-week-of-01-may-2020.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 01-May-2020" -authors: - - Robin Dadswell -date: "2020-05-01T17:58:03+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/05/icymi-powershell-week-of-01-may-2020/ ---- - -Topics include Ansible, Documentation, Windows Terminal and more... - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - -###### - [*Validating ARM Templates with ARM What-if Operations*](https://blog.tyang.org/2020/04/26/validating-arm-templates-with-arm-what-if-operations/) - - - by Tao Yang on 26th April - - - Tao Yang tries to explain the new preview feature "What-If" in validating the ARM templates. - - -###### - [*Documenting with PowerShell: Using PowerShell to create faster partner portal*](https://www.cyberdrain.com/documenting-with-powershell-using-powershell-to-create-faster-partner-portal/?utm_source=rss&utm_medium=rss&utm_campaign=documenting-with-powershell-using-powershell-to-create-faster-partner-portal) - - - by Kelvin Tegelaar on 27th April - - - I love having the ability to manage all clients from a single portal. My only issue is that the partner portal is quite error prone and sluggish, and it seems to get worse with each added client. - - -###### - [*Deploy and Manage Azure Infrastructure Using Terraform, Remote State, and Azure DevOps Pipelines (YAML)*](https://www.thelazyadministrator.com/2020/04/28/deploy-and-manage-azure-infrastructure-using-terraform-remote-state-and-azure-devops-pipelines-yaml/) - - - by Brad Wyatt on 28th April - - - n this article, I will be showing you how to create an Azure DevOps CI/CD (continuous integration / continuous deployment) Pipeline that will deploy and manage an Azure environment using Terraform. Terraform is a tool for building, changing, and versioning infrastructure safely and efficiently. - - -###### - [*How to Configure WinRM over HTTPS for Ansible*](https://adamtheautomator.com/winrm-https-ansible/) - - - by Adam Bertram on 29th April - - - If you want to configure Windows with Ansible you are probably going to use WinRM. Learn how to set it up. - - -###### - [*Backing Up Windows Terminal Settings with PowerShell*](https://jdhitsolutions.com/blog/powershell/7422/backing-up-windows-terminal-settings-with-powershell/) - - - by Jeff Hicks on 30th April - - - With the terminal constantly changing Jeff shares his method for backing up Terminal settings with PowerShell. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/gaa2ip/never_write_a_batch_wrapper_again/) - - - The purpose of this post is to share a batch script wrapper for powershell scripts with the goal that you don't have to reinvent the wheel and write one yourself. - - -###### - [*Tweet of the Week*](https://twitter.com/_Flavien/status/1254569119560671233?s=20) - - - First demo of PowerShell on WebAssembly - - -###### - [*Youtube: Serverless Event-based Automation with PowerShell & Azure Functions*](https://www.youtube.com/watch?v=x_5v23HS3AI%3E) - - - Automate and manage your cloud-native, hybrid, and even on-premises resources using PowerShell. Eamon O'Reilly, who's leading the efforts at Microsoft for serverless automation, shows you how to get started. diff --git a/content/articles/2020-05-01-icymi-powershell-week-of-03-april-2020-2.md b/content/articles/2020-05-01-icymi-powershell-week-of-03-april-2020-2.md deleted file mode 100644 index 35b8b6037..000000000 --- a/content/articles/2020-05-01-icymi-powershell-week-of-03-april-2020-2.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 03-April-2020" -authors: - - Robin Dadswell -date: "2020-05-01T15:00:04+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/05/icymi-powershell-week-of-03-april-2020-2/ ---- - -Topics include Windows Terminal, Event Logs, String Basics and more. - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - -###### - [*Dynamic PowerShell and SSH remoting tabs for Windows Terminal*](https://itluke.online/2020/03/29/dynamic-powershell-and-ssh-remoting-tabs-for-windows-terminal/) - - - by Luc Fullenwarth on 29th March - - - I am a SysAdmin and have to connect to dozen of different computers every day, I needed to bring this a little further and make it more “dynamic”: every time I open a remoting tab, it should ask for the computer name and the username if necessary. - - -###### - [*NEW Oneliner to Tail the Windows Eventlog*](https://cloudywindows.io/post/new-oneliner-to-tail-the-windows-eventlog/) - - - by Darwin Sanoy on 30th March - - - Equivalent of tail -f on Linux for the Windows Event Log - - -###### - [*Monitoring with PowerShell: Monitoring client VPN settings*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-client-vpn-settings/) - - - by Kelvin Tegelaar on 31st March - - - Learn how to monitor Always on VPN connections from the clients. - - -###### - [*Back to Basics: PowerShell Strings*](https://adamtheautomator.com/powershell-strings/) - - - by June Castillote on 1st April - - - In this article, you'll learn that strings are not just for reading and displaying. They can also be manipulated to fit the purpose of whatever task you may be writing the script for. - - -###### - [*PowerShell Basics: How to Upload Files to Azure Storage*](https://techcommunity.microsoft.com/t5/itops-talk-blog/powershell-basics-how-to-upload-files-to-azure-storage/ba-p/1273322?utm_source=dlvr.it&utm_medium=twitter) - - - by Anthony Bartolo on 2nd April - - - Learn how to easily add files to Azure Blob Storage - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ftwmtj/pluralsight_offering_1_month_free_courses_i_didnt/) - - - u/BlackV shared some information about Pluralsight giving a free month of training away. - - -###### - [*Tweet of the Week*](https://twitter.com/MGrafnetter/status/1245725537462636545) - - - Audit FIDO Keys registered in Azure AD using PowerShell - - -###### - [*Youtube: Creating Restore Points Using PowerShell!*](https://youtu.be/bu8FCZsrkQg) - - - Creating restore points using PowerShell will allow a user to restore their machine from a previous system state. diff --git a/content/articles/2020-05-08-icymi-powershell-week-of-08-may-2020.md b/content/articles/2020-05-08-icymi-powershell-week-of-08-may-2020.md deleted file mode 100644 index c0ade2383..000000000 --- a/content/articles/2020-05-08-icymi-powershell-week-of-08-may-2020.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 08-May-2020" -authors: - - Robin Dadswell -date: "2020-05-08T16:26:33+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/05/icymi-powershell-week-of-08-may-2020/ ---- - -Topics include Mother's day scripts, securing credentials, new PS7 behaviors and more... - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - -###### - [*Usefulness Of The Last Command Result New Behavior In PowerShell 7.*](https://itluke.online/2020/05/03/more-about-the-last-command-result-new-behavior-in-powershell-7/) - - - by @LFullenwarth on 3rd May - - - Luke tries to explain the behavioural change in the 'Last Command Result' in PowerShell 7. - - -###### - [*Automating with PowerShell: Automating Warranty information reporting.*](https://www.cyberdrain.com/automating-with-powershell-automating-warranty-information-reporting/) - - - by @KelvinTegelaar on 4th May - - - Kelvin wrote a PowerShell wrapper to grab the warranty information for most major manufactures and it will generate a warranty report based on the input data. - - -###### - [*A PowerShell Windows Terminal Toolbox*](https://jdhitsolutions.com/blog/powershell/7429/a-powershell-windows-terminal-toolbox/) - - - by @JeffHicks on 5th May - - - Jeff has created a PowerShell module called  - - -`WTToolBox -`to managing and working with the Windows Terminal application from Microsoft. - - -###### - [*Multiple Azure credentials in PowerShell*](https://adatum.no/powershell/multiple-azure-credentials-in-powershell) - - - by @ehrnst on 6th May - - - Martin is explaining, how to connect to the multiple Azure environments and switch between the accounts using context. - - -###### - [*A PowerShell script to remotely install SQL Server service packs*](https://www.veeam.com/blog/remotely-install-sql-server-service-packs-powershell.html) - - - by Adam Bertram on 7th May - - - In this article, Adam explains how to build a simple script for patching the Sql Server with the Service Packs. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/gf1wcc/getmomflowers/) - - - u/sleightof52 shares a video of a "get-MomFlower" script that orders flowers for his Mom for Mother's day automatically. - - -###### - [*Tweet of the Week*](https://twitter.com/rsrychro/status/1258509618474414082?s=20) - - - RTPSUG tweeted out the link to the recording of their virtual meeting this week. Don Jones presented what would have been his PowerShell summit talk. - - -###### - [*Youtube: How to secure passwords in PowerShell Scripts*](https://youtu.be/DKbLFhGJLyA) - - - Great short video showing how to use and secure passwords in your PowerShell scripts. diff --git a/content/articles/2020-05-15-icymi-powershell-week-of-15-may-2020.md b/content/articles/2020-05-15-icymi-powershell-week-of-15-may-2020.md deleted file mode 100644 index 29c9dda6e..000000000 --- a/content/articles/2020-05-15-icymi-powershell-week-of-15-may-2020.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 15-May-2020" -authors: - - Robin Dadswell -date: "2020-05-15T15:00:07+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/05/icymi-powershell-week-of-15-may-2020/ ---- - -Topics include Github Actions, PS7, Network Monitoring and more... - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - -###### - [*Get-History*](https://powershell.city/2020/05/11/get-history/) - - - by Xajuan Smith on 11th May - - - If you don't know your history you are bound to repeat your mistakes. Xajuan suggests you Get-History and learn from your past. - - -###### - [*Publish a Post for a Jekyll Site on a Schedule*](https://powershell.anovelidea.org/blog/publish-post-jekyll-on-a-schedule/) - - - by Dave Carroll on 11th May - - - Learn how to use Github Actions to schedule updates to your Jekyll site. If you've never used Github Actions this is a great walkthrough. - - -###### - [*PowerShell 7 Video Series*](https://devblogs.microsoft.com/powershell/powershell-7-video-series/) - - - by @sydneysmithreal on 11th May - - - The PowerShell Team put together a series of videos explaining and demoing aspects of the release. The intent of these videos was for User Groups to host events celebrating and discussing PowerShell 7 - - -###### - [*A PowerShell Network Monitor*](https://jdhitsolutions.com/blog/powershell/7471/a-powershell-network-monitor/) - - - by @JeffHicks on 12th May - - - Build a Network Monitor inside of PowerShell to see data in/out of your network interfaces. - - -###### - [*The most useful PowerShell cmdlet I didn’t know existed*](https://oofhours.com/2020/05/13/the-most-useful-powershell-cmdlet-i-didnt-know-existed/amp/) - - - by Michael Niehaus on 13th May - - - Sometimes I should probably pay more attention. I use PowerShell a lot. I use Windows 10 a lot. But I still missed these. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/gihjw2/mr_ulee_dailey_thanks_for_what_you_do/) - - - Memes - - -###### - [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1261079788984233985?s=20) - - - #PowerShell 7.0.1 and #PowerShell Core 6.2.5 are out! - - -###### - [*Youtube:*Technado, Ep. 151: Microsoft’s Jeffrey Snover](https://www.youtube.com/watch?v=W7p6iN8izj8) - - - Jeffrey Snover, the father of PowerShell, was this week's guest on Technado. He talked about where the original idea came from, as well as what he's working on now at Microsoft. diff --git a/content/articles/2020-05-22-icymi-powershell-week-of-22-may-2020.md b/content/articles/2020-05-22-icymi-powershell-week-of-22-may-2020.md deleted file mode 100644 index 68dbe4949..000000000 --- a/content/articles/2020-05-22-icymi-powershell-week-of-22-may-2020.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 22-May-2020" -authors: - - Robin Dadswell -date: "2020-05-22T15:00:00+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/05/icymi-powershell-week-of-22-may-2020/ ---- - -Topics include Sophos temp files, Database restoration, ARM templates and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [_Azure ARM template deployment scripts_][1] {#azure-arm-template-deployment-scripts.wp-block-heading} - -by Alex Neihaus on 18th May - -After you finish reading this post and experimenting with the Azure sample template below, you may never again have to write a nested or linked template. And, believe me, that’s a good thing. - -###### [_Documenting with PowerShell: Documenting Unifi infrastructure_][2] {#documenting-with-powershell-documenting-unifi-infrastructure.wp-block-heading} - -by Kelvin Tegelaar on 18th May - -Learn how to create a basic document about your Unifi Network setup. - -###### [_Using PowerShell to Clean Up Sophos Temp Files_][3] {#using-powershell-to-clean-up-sophos-temp-files.wp-block-heading} - -by Paolo Frigo on 19th May - -Recently I’ve encountered a strange issue that affected one Windows workstation with Sophos AV (Endpoint) software installed. Sometimes this software creates some temporary files with ‘$$$’ extension and apparently it never removes them. - -###### [_PowerShell Word Play_][4] {#powershell-word-play.wp-block-heading} - -by Jeff Hicks on 19th May - -Join Jeff as he talks you through his solution to a recent Iron Scripter challenge. - -###### [_Refresh databases that belongs to Availability Group using dbatools_][5] {#refresh-databases-that-belongs-to-availability-group-using-dbatools.wp-block-heading} - -by Cláudio Silva on 20th May - -When the client says, “please restore this backup or the most recent backup on our instance.”. But what if the databases belong to an availability group? It’s not as simple as a standalone installation. Here is how to do it with PowerShell. - -###### [_Reddit /r/PowerShell - Most Popular Weekly Post_][6] {#reddit-rpowershell---most-popular-weekly-post.wp-block-heading} - -u/farag2 shares his script for setting up a Windows 10 machine. - -###### [_Tweet of the Week_][7] {#tweet-of-the-week.wp-block-heading} - -PowerShell 7.1 preview.3 is out! - -###### [_Youtube: Advanced PowerShell Debugging Techniques_][8] {#youtube-advanced-powershell-debugging-techniques.wp-block-heading} - -In this video, I show you how to use some advanced PowerShell debugging techniques. We look at how to debug in the console, debug job, background runspaces, and remote processes. We also used some of the advanced debugging features of Visual Studio Code. - - [1]: https://www.yobyot.com/powershell/azure-deployment-scripts-arm-template/2020/05/18/ - [2]: https://www.cyberdrain.com/documenting-with-powershell-documenting-unifi-infrastructure/?utm_source=rss&utm_medium=rss&utm_campaign=documenting-with-powershell-documenting-unifi-infrastructure - [3]: https://www.scriptinglibrary.com/languages/powershell/using-powershell-to-clean-up-sophos-temp-files/ - [4]: https://jdhitsolutions.com/blog/powershell/7489/powershell-word-play/ - [5]: https://claudioessilva.eu/2020/05/20/refresh-databases-that-belongs-to-availability-group-using-dbatools/ - [6]: https://www.reddit.com/r/PowerShell/comments/go2n5v/powershell_script_setup_windows_10/ - [7]: https://twitter.com/Steve_MSFT/status/1262809289778851840 - [8]: https://www.youtube.com/watch?v=O-dksknPQBw diff --git a/content/articles/2020-05-29-icymi-powershell-week-of-29-may-2020.md b/content/articles/2020-05-29-icymi-powershell-week-of-29-may-2020.md deleted file mode 100644 index db3514f8d..000000000 --- a/content/articles/2020-05-29-icymi-powershell-week-of-29-may-2020.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 29-May-2020" -authors: - - Robin Dadswell -date: "2020-05-29T21:35:39+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/05/icymi-powershell-week-of-29-may-2020/ ---- - -Topics include Performance Counters, Out-buffer, Pester and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [][1][_Automating with PowerShell: Creating dynamic distribution groups in all O365 tenants_][2] {.wp-block-heading} - -by @KelvinTegelaar on 27th May - -Kelvin came up with a script to create a distribution group and add users dynamically in the O365 tenants. - -###### [][3][_Solving the PowerShell Counting Challenge_][4] {.wp-block-heading} - -by @JeffHicks on 27th May - -A few great challenge snippets by Jeff Hicks - -###### [][5][_Using Performance Counters_][6] {.wp-block-heading} - -by @TobiasPSP on 28th May - -Learn how to automate CPU load monitoring with performance counters. - -###### [][7][_So That's What OutBuffer Is For!_][8] {.wp-block-heading} - -by @WindosNZ on 28th May - -In this post, Josh explains about what is -OutBuffer and what is it for. - -###### [][9][_Reddit /r/PowerShell - Most Popular Weekly Post_][10] {.wp-block-heading} - -As a long time fish shell user who recently returned to Windows, I really wanted to recreate the prompt from the fish shell, so I wrote a little script to do it! It's my first Powershell script, and I'm amazed by how easy it is to script things; it's just like C#! - -###### [][11][_Tweet of the Week_][12] {.wp-block-heading} - -#pester #pspester #powershell It is finally true, Pester 5.0.0 is out, go grab it in PSGallery. - -###### [][13][_Youtube: Run PowerShell in VS Code on WSL2_][14] {.wp-block-heading} - -In this video, I show how to install PowerShell in Windows Subsystem for Linux version 2. After it's copied to the machine, I then show how to configure the VS Code PowerShell extension so that you can execute PowerShell on the Linux WSL instance. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200529-functiondraft.md#automating-with-powershell-creating-dynamic-distribution-groups-in-all-o365-tenants - [2]: https://www.cyberdrain.com/automating-with-powershell-creating-dynamic-distribution-groups-in-all-o365-tenants/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200529-functiondraft.md#solving-the-powershell-counting-challenge - [4]: https://jdhitsolutions.com/blog/powershell/7494/solving-the-powershell-counting-challenge/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200529-functiondraft.md#using-performance-counters - [6]: https://powershell.one/tricks/performance/performance-counters - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200529-functiondraft.md#so-thats-what-outbuffer-is-for - [8]: https://toastit.dev/2020/05/27/what-outbuffer-is-for/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200529-functiondraft.md#reddit-rpowershell---most-popular-weekly-post - [10]: https://www.reddit.com/r/PowerShell/comments/gpqct8/fishlike_prompt_that_autoshrinks_your_current/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200529-functiondraft.md#tweet-of-the-week - [12]: https://twitter.com/nohwnd/status/1265540452515827715?s=20 - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200529-functiondraft.md#youtube-run-powershell-in-vs-code-on-wsl2 - [14]: https://www.youtube.com/watch?v=HgCOkMe6jBA diff --git a/content/articles/2020-06-07-iron-scripter-learn-powershell-through-code-challenges.md b/content/articles/2020-06-07-iron-scripter-learn-powershell-through-code-challenges.md deleted file mode 100644 index b6db14cd3..000000000 --- a/content/articles/2020-06-07-iron-scripter-learn-powershell-through-code-challenges.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Iron Scripter: Learn PowerShell through code challenges" -authors: - - Mike Kanakos -date: "2020-06-07T15:00:00+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks - - Training -tags: - - Iron Scripter - - Code Challenges - - Learning -aliases: - - /2020/06/iron-scripter-learn-powershell-through-code-challenges/ ---- - -Hello, friends! Today I want to talk about the Iron Scripter code challenges and the accompanying website. The challenges are excellent for practicing challenging concepts. What’s that you say? Not familiar with Iron Scripter? Let’s get you up to speed. - -## Iron Scripter: A brief history lesson {.wp-block-heading} - -The [Iron Scripter][1] website is part of the PowerShell.org family and provides material for the Iron Scripter challenge that takes place at PowerShell Summit each year. For those unfamiliar with the Iron Scripter event at PowerShell summit, let me give you a brief introduction. - -The Iron Scripter challenge was a concept dreamed up by Don Jones, Jeff Hicks and Richard Siddaway. The concept was to challenge small teams of participants to work out a complex problem through teamwork in front of a live audience with a limited amount of time. Three teams (known as factions) battle to solve the same problem and each present their solution at the end of the allotted time. Each faction must be creative and divide workloads to complete the complex challenge in the scant time allotted. The factions must work as a team to make meaningful progress. - -Iron Scripter is one of the most popular events at PowerShell Summit. The winning faction is crowned “champions” and hold the title for a full year until next years’ competition. Many faction members display their affiliation on their websites as a badge of honor. - -## Learning with Iron Scripter {.wp-block-heading} - -The Iron Scripter website is used to explain the competition, share code hints, and give general tips to help faction members prepare for the upcoming challenge. But along the way, the Iron Scripter team began posting other challenges that anyone could do on their own. These stand-alone challenges are lesser known in the PowerShell community and are a missed opportunity for people looking to learn basic code principles or hone their skills. Taking part in these stand-alone code challenges can help you get better at writing great code. - -The challenges I am referring to are scripting puzzles designed to test your knowledge. You can solve most puzzles using multiple methods, but to do so requires you to dive deep into your knowledge of scripting and code principles to figure out interesting ways to solve the challenges. The challenges are the brainchild of the legendary [Jeff Hicks][2]. Jeff has been an integral part of the Iron Scripter competition since its first beginnings. Jeff has been educating people about PowerShell and its usage for system administration for many years. He is revered for his blog posts, books and customized training seminars. His challenges on Iron Scripter are challenging but educational. - -## Challenges for all skill levels {.wp-block-heading} - -If you haven’t visited yet, head over to the [IronScripter][1] website and locate the tags on the left-hand side of the page. You’ll notice three tags related to skill levels: [Beginner][3], [Intermediate][4] and [Advanced][5]. Each of those tags will point you toward individual challenges sorted by skill level. Each challenge has a simple set of instructions (rules) for what you are trying to solve, and for each post, there should be comments from community members that have shared their solution to the puzzle. - -If you worried that maybe you don’t know enough to take part, don’t let that stop you. The point of these puzzles is to challenge all skills levels with targeted exercises that reinforce basic coding concepts. These challenges help you get better at techniques used to write efficient code. - -The brilliance in these puzzles is that they age well. You can try any of the puzzles on the website, regardless of their age, because the basic concepts that these challenges test change little with each release of PowerShell. The puzzles have variations based on skill level with each variation becoming more challenging. This allows you to go back and try the more challenging versions of the puzzles you already completed. - -If you haven’t tried the challenges yet, you can dive right in with the latest puzzle and when you think you have solved it, post your solution in the comments and wait for someone to review your answer. If you’re struggling to solve a puzzle, you can peek at previous solutions for how someone else attempted to solve the puzzle. - -When learning how to code, it’s important to try unique methods of learning. Books, blogs and videos are fantastic resources to learn from, but real-world problem solving scenarios can offer unique opportunities to see how code concepts work “in the wild”. The puzzles designed by Jeff are building blocks that will help you write better code for your own scripting solutions. - -I’ll be featuring Jeff’s code challenges in the coming weeks and months and I hope you take part in trying to solve the challenges and share your work. Watch here for more information on upcoming Iron Scripter challenges! - - [1]: https://ironscripter.us/ - [2]: https://jdhitsolutions.com/blog/about-me/ - [3]: https://ironscripter.us/tag/beginner/ - [4]: https://ironscripter.us/tag/intermediate/ - [5]: https://ironscripter.us/tag/advanced/ diff --git a/content/articles/2020-06-12-icymi-powershell-week-of-12-june-2020.md b/content/articles/2020-06-12-icymi-powershell-week-of-12-june-2020.md deleted file mode 100644 index c2d8da64a..000000000 --- a/content/articles/2020-06-12-icymi-powershell-week-of-12-june-2020.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 12-June-2020" -authors: - - Robin Dadswell -date: "2020-06-12T15:33:59+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/06/icymi-powershell-week-of-12-june-2020/ ---- - -Topics include Jekyll, Documentation, Scripting Challenges and more... - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - - ***[A small blog on how to start in PowerShell on this boring #FridayEvening enjoy](https://medium.com/@browninfosecguy/how-to-start-in-powershell-82fc2144210c?source=social.tw)*** - - - by Sonny on 6th June - - - Sonny explains on why, how and where to start learning powershell. - - - ***[Documenting with PowerShell: Documenting Microsoft Teams](https://www.cyberdrain.com/documenting-with-powershell-documenting-microsoft-teams/?utm_source=rss&utm_medium=rss&utm_campaign=documenting-with-powershell-documenting-microsoft-teams)*** - - - by Kelvin Tegelaar on 7th June - - - Kelvin shares his script for documenting Teams using Graph API. - - - ***[ForEach-Object and its scriptblocks](https://sergeyvasin.com/2020/06/09/foreach-object-scriptblocks/)*** - - - by Sergey Vasin on 9th June - - - Detailed description of the Foreach-Object cmdlet - - - ***[How to Create a Static Website Using Jekyll and Publish to GitHub Pages for Free](https://adamtheautomator.com/github-pages-jekyll/)*** - - - by June Castillote on 9th June - - - Great tutorial on setting up a Jekyll page on github, these pages can be used to highlight your PowerShell code or start your own blog. - - - ***[Solving the PowerShell Object Age Challenge – Part 1](https://jdhitsolutions.com/blog/powershell/7537/solving-the-powershell-object-age-challenge-part-1/)*** - - - by @JeffHicks on 9th June - - - Jeff describes how he worked out a solution to the Object Age Challenge on Iron Scripter. - - - ***[Auto-Learning Argument Completion](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/auto-learning-argument-completion)*** - - - by Tobias Weltner on 12th June - - - Argument completion is awesome for a user because valid arguments are always suggested. Many built-in PowerShell commands come with argument completion. - - - ***[Reddit /r/PowerShell - Most Popular Weekly Post](https://www.reddit.com/r/PowerShell/comments/gyfurg/iron_scripter_learn_powershell_through_code/)*** - - - A thread on fun scripting challenges to help you get better at scripting. - - - ***[Tweet of the Week](https://twitter.com/Steve_MSFT/status/1271187749752586241?s=20)*** - - - PowerShell 7.0.2 is our latest stable version and is out! - - - ***[Youtube: Don Jones - Shell of an Idea Exploring the Origins of PowerShell](https://www.youtube.com/watch?v=hlPrRTqVjz4)*** - - - Join Don and tale a deep look in to the untold history of PowerShell, a topic he’s been exploring for his upcoming book, “Shell of an Idea: The Untold History of PowerShell” diff --git a/content/articles/2020-06-16-a-new-home-for-plaster.md b/content/articles/2020-06-16-a-new-home-for-plaster.md deleted file mode 100644 index b509ad327..000000000 --- a/content/articles/2020-06-16-a-new-home-for-plaster.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: A New Home for Plaster -authors: - - Jeffery Hicks -date: "2020-06-16T21:17:21+00:00" -categories: - - Announcements - - PowerShell for Admins - - PowerShell for Developers - - Tools -tags: - - Plaster - - Modules - - Community -aliases: - - /2020/06/a-new-home-for-plaster/ ---- - -![](https://powershell.org/wp-content/uploads/2020/06/scaffold-thumb.jpg)Some of you may be familiar with the Plaster PowerShell module. This slick tool lets you build out a new module in seconds. Actually, Plaster can be used to scaffold a framework for any type of project. You can install the [current version from the PowerShell Gallery.](https://www.powershellgallery.com/packages/Plaster/1.1.3) However, the project has been in limbo for a while with no updates or progress. After discussions with the PowerShell Team about the module, a decision was made to transfer ownership to the PowerShell community. We're happy to report that the Plaster repository is now under the auspices of PowerShell.org. The GitHub repo, including pull requests and issues, can now be found at https://github.com/PowerShellOrg/Plaster. -It will take some time to get re-organized and work through the backlog of issues and pull requests. Although it is possible that we'll simply zero out things like pull requests and start with a fresh slate. The basic functionality of the module should work just fine in its current state. Enough members of the PowerShell community recognize the value in the Plaster module which is why this transfer was made. -And frankly, this is one of PowerShell.org's primary purposes: to serve the community. In this case, Microsoft had a languishing asset that needed more attention than what they could provide. Which is exactly where PowerShell.org fits in. We can step in providing the resources and in the end contribute back to the community. A big thank you to Steve Lee at Microsoft for making this possible. diff --git a/content/articles/2020-06-17-simple-powershell-gui.md b/content/articles/2020-06-17-simple-powershell-gui.md deleted file mode 100644 index 95e8e162b..000000000 --- a/content/articles/2020-06-17-simple-powershell-gui.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Simple PowerShell GUI -authors: - - n2501r -date: "2020-06-17T21:57:31+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks - - Tools - - Tutorials -tags: - - GUI - - Automation -aliases: - - /2020/06/simple-powershell-gui/ ---- - -Over the years, I have supported and created multiple types of GUIs.  I finally decided a few years ago to create a very simple menu driven PowerShell GUI.  I wanted something that was very powerful yet very simple to maintain.  I really enjoy automating manual administrative tasks, so that is what drove this project in the first place.  Before I created the menu driven PowerShell GUI, I had directories and directories of very specific scripts to do specific tasks.  I decided to standardize and consolidate all of those scripts into one menu driven PowerShell GUI.  By doing this, I took the guess work out of determining which PowerShell script to run for a given task.  This has greatly helped my colleagues know exactly what to run and how. -Feel free to check it out for yourself at my site: -[SpiderZebra.com](https://spiderzebra.com/2020/05/21/how-to-create-a-simple-powershell-gui/) -.  While you're there, you can take a look at a few of my other related posts: - - * -[Create a Text Box to Accept User Input for PowerShell GUI](https://spiderzebra.com/2020/06/17/create-a-text-box-to-accept-user-input-for-powershell-gui/) - - * [Utilizing PowerShell Out-GridView as a GUI Alternative](https://spiderzebra.com/2020/05/26/utilizing-powershell-out-gridview-as-a-gui-alternative/) - -**Nick Richardson (@ChiefNSR)** diff --git a/content/articles/2020-06-19-icymi-powershell-week-of-19-june-2020.md b/content/articles/2020-06-19-icymi-powershell-week-of-19-june-2020.md deleted file mode 100644 index adc15d40f..000000000 --- a/content/articles/2020-06-19-icymi-powershell-week-of-19-june-2020.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 19-June-2020" -authors: - - Robin Dadswell -date: "2020-06-19T14:00:53+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -aliases: - - /2020/06/icymi-powershell-week-of-19-june-2020/ ---- - -Topics include PSReadLine, Active Directory Monitoring, PowerShell Inventory and more... - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - -###### - [*Monitoring with PowerShell: Monitoring Active Directory Health*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-active-directory-health/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-active-directory-health) - - - by Kelvin Tegelaar on 15th June - - - A Script for monitoring the entire general health of a domain controller - - -###### - [*PowerShell command history*](https://sergeyvasin.com/2020/06/16/powershell-history/) - - - by СЕРГЕЙ ВАСИН on 16th June - - - Exploring your PS History with PSReadLine - - -###### - [*Building a PowerShell Inventory*](https://jdhitsolutions.com/blog/powershell/7549/building-a-powershell-inventory/) - - - by Jeff Hicks on 16th June - - - PowerShell code that we could use to inventory our PowerShell script library. - - -###### - [*Resolving PowerShell Module Assembly Dependency Conflicts*](https://devblogs.microsoft.com/powershell/resolving-powershell-module-assembly-dependency-conflicts) - - - by Robert Holt on 17th June - - - When writing a PowerShell module, especially a binary module (i.e. one written in a language like C# and loaded into PowerShell as an assembly/DLL), it’s natural to take dependencies on other packages or libraries to provide functionality. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/h7jk81/how_to_scan_ip_addresses_range_and_get_important/) - - - Part 4 of a blog post sharing a script to scan IP Address and provide details. - - -###### - [*Tweet of the Week*](https://twitter.com/cinnamon_msft/status/1273662560202416128?s=20) - - - The first update to Windows Terminal Preview is out now! - - -###### - [*Youtube: Intro to REST API calls with Powershell*](https://www.youtube.com/watch?v=-NVh5cVOeO4) - - - CodeDoge's video to help you get started with APIs using PowerShell. diff --git a/content/articles/2020-06-26-icymi-powershell-week-of-26-june-2020.md b/content/articles/2020-06-26-icymi-powershell-week-of-26-june-2020.md deleted file mode 100644 index 5e2b188e0..000000000 --- a/content/articles/2020-06-26-icymi-powershell-week-of-26-june-2020.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 26-June-2020" -authors: - - Robin Dadswell -date: "2020-06-26T14:00:00+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/06/icymi-powershell-week-of-26-june-2020/ ---- - -Topics include Native PowerShell Commands, Splatting Program Parameters, Windows Terminal and more... - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - - -###### - [*Getting file metadata with PowerShell similar to what Windows Explorer provides*](https://evotec.xyz/getting-file-metadata-with-powershell-similar-to-what-windows-explorer-provides/) - - - by Przemyslaw Klys on 20th June - - - When you use Get-Item in PowerShell you get a ton of properties, but it is not all the properties. You can find out more about your Files with this blog post. - - -###### - [*Fun with Azure Key Vault Part 2: Integration with Azure Functions*](https://toastit.dev/2020/06/21/azure-key-vault-2/) - - - by Josh King on 21st June - - - The second part of Josh King's dive into Azure Key Vaults showing how to store and use values in azure functions. - - -###### - [*How to Send Emails Using Amazon Simple Email Service (SES): Installation and Configuration*](https://adamtheautomator.com/hmailserver-getting-started/) - - - by @junecastillote on 23rd June - - - Learn how to set up SES and send emails with PowerShell. - - -###### - [*Native Commands in PowerShell – A New Approach*](https://devblogs.microsoft.com/powershell/native-commands-in-powershell-a-new-approach) - - - by James W Truher on 23rd June - - - In this two part blog post James is going to investigate how PowerShell can take better advantage of native executables. - - -###### - [*Formatting PowerShell TimeSpans*](https://jdhitsolutions.com/blog/powershell/7565/formatting-powershell-timespans/) - - - by Jeffery Hicks on 24th June - - - Jeff Hicks wrote his notes on  - - -`Formating the TimeSpans -`using PowerShell, just take a look. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/hbz17e/til_you_can_splat_program_parameters_too/) - - - u/purplemonkeymad shares otherways to splat arguments other than just sending them to cmdlets. - - -###### - [*Tweet of the Week*](https://twitter.com/PowerShellMich1/status/1276427895305416704) - - - Take part in a poll about where you run your production scripts! - - -###### - [*Youtube: Windows Terminal Deep Dive with Justin Grote*](https://youtu.be/Wfvi1Yac1fw) - - - If you missed RTPSUG's virtual meetup last week you can watch the recording. Justin Grote does a deep dive on Windows Terminal. diff --git a/content/articles/2020-06-30-manage-citrix-tags-with-powershell.md b/content/articles/2020-06-30-manage-citrix-tags-with-powershell.md deleted file mode 100644 index 71074d448..000000000 --- a/content/articles/2020-06-30-manage-citrix-tags-with-powershell.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Manage Citrix Tags with PowerShell -authors: - - n2501r -date: "2020-06-30T15:58:07+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -tags: - - Citrix - - Automation -aliases: - - /2020/06/manage-citrix-tags-with-powershell/ ---- - -Managing Citrix tags can be a long painful process if done the traditional way through Citrix Studio, that is what drove me to PowerShell for this task.  Citrix Studio is a great tool, but it can be very time consuming especially if you have to do bulk tag actions. Citrix tags can be used in several methods, but I have focused on desktop tagging. This post will cover the following scenarios: - - - * List all current Citrix tags - * List the members of a specific Citrix tag - * Creation of a new Citrix tag - * Removing a Citrix tag from a list of desktop names - * Adding a Citrix tag from a list of desktop names - * Deleting a Citrix tag while removing it from all members - -Give it a look: -[SpiderZebra.com](https://spiderzebra.com/2020/06/29/manage-citrix-tags-with-powershell/) - -**Nick Richardson (@ChiefNSR)** diff --git a/content/articles/2020-07-03-icymi-powershell-week-of-03-july-2020.md b/content/articles/2020-07-03-icymi-powershell-week-of-03-july-2020.md deleted file mode 100644 index 8dd163c96..000000000 --- a/content/articles/2020-07-03-icymi-powershell-week-of-03-july-2020.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 03-July-2020" -authors: - - Robin Dadswell -date: "2020-07-03T14:00:34+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/07/icymi-powershell-week-of-03-july-2020/ ---- - -Topics include PSRemoting, Loops, C# and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200703-functiondraft.md#a-book-powershell-to-c-and-back)[*A Book: PowerShell to C# and Back*](https://tommymaynard.com/a-book-powershell-to-c-sharp-and-back/) - -by Tommy Maynard on 29th June -Announcement of New book. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200703-functiondraft.md#powershell-classes---validating-arm-parameters)[*PowerShell Classes - Validating ARM Parameters*](https://dexterposh.github.io/posts/007-pwsh-class-usecase/) - -by Deepak Dhami(DexterPosh) on 29th June -A PowerShell class to model the ARM parameters file and use that to validate the ARM template parameter inputs. - -###### [*Modern Auth and Unattended Scripts in Exchange Online PowerShell V2*](https://techcommunity.microsoft.com/t5/exchange-team-blog/modern-auth-and-unattended-scripts-in-exchange-online-powershell/ba-p/1497387) - -by The Exchange Team on 30th June -Preview of the new ability within Exchange Online PowerShell for unattended Modern Auth! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200703-functiondraft.md#magic-of-myinvocation-in-powershell)[*Magic of $MyInvocation in PowerShell*](https://kpatnayakuni.com/2020/07/01/powershell-magic-of-myinvocation/) - -by @kpatnayakuni on 1st July -Convert a key parameter value into a true PowerShell command with the help of automatic variable  - - -`$MyInvocation -`. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200703-functiondraft.md#setup-ftp-server-with-powershell)[*Setup FTP Server with PowerShell*](https://ridicurious.com/2020/07/02/setup-ftp-server-with-powershell) - -by Madhav Bhandari on 2nd July -Step by step installation and configuration of the FTP server using PowerShell and IIS from installing the required Windows features, setting up sites, ports, and root folder to creating FTP users and authenticating them on FTP site to allow access to the FTP servers. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200703-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/hhvf1l/free_online_wpf_designer_for_powershell_released/) - -u/nepronen announces an alpha version of a useful too to help create GUIs in PowerShell - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200703-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/PowerShellMich1/status/1278971370265694208) - -Let's have a discussion about PS Remoting - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200703-functiondraft.md#youtube-powershell-tutorial---chapter-7---loops)[*Youtube: PowerShell Tutorial - Chapter 7 - Loops*](https://www.youtube.com/watch?v=_WIZPgPB8Wk) - -A 25 minute overview of the various types of loops within PowerShell diff --git a/content/articles/2020-07-10-icymi-powershell-week-of-10-july-2020.md b/content/articles/2020-07-10-icymi-powershell-week-of-10-july-2020.md deleted file mode 100644 index 0c58a9015..000000000 --- a/content/articles/2020-07-10-icymi-powershell-week-of-10-july-2020.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 10-July-2020" -authors: - - Robin Dadswell -date: "2020-07-10T16:08:28+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/07/icymi-powershell-week-of-10-july-2020/ ---- - -Topics include Hyper-V, Windows Terminal, VMWare and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200710-functiondraft.md#powershell-to-c--back-hello-world-explained)[*PowerShell to C# & back: Hello World Explained*](https://ridicurious.com/2020/07/07/powershell-to-csharp-and-back-hello-world-explained/) - -by Prateek Singh on 6th July -Creating a Hello World app in c# using dotnet cli. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200710-functiondraft.md#cloud-director-service---part-1--vmwarecdscommunity-powershell-module)[*Cloud Director service - Part 1 : VMware.CDS.Community PowerShell module*](https://pigeonnuggets.com/blog/Cloud-Director-service-VMware.CDS.Community-PowerShell-module/) - -by Adrian Begg on 7th July -PowerShell module to facilitate code based deployments of VMware Cloud Director instances using VMWare’s recently announced Cloud Director service. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200710-functiondraft.md#windows-terminal-the-ultimate-guide)[*Windows Terminal: The Ultimate Guide*](https://adamtheautomator.com/new-windows-terminal/) - -by @devbyaccident on 7th July -In this ultimate guide, you're going to get a full rundown of nearly all features of Windows Terminal and learn how it can help you get things on Windows at the command line. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200710-functiondraft.md#how-to-manage-hyper-v-vm-checkpoints-with-powershell)[*How To Manage Hyper-V VM Checkpoints With Powershell*](https://www.thomasmaurer.ch/2020/07/how-to-manage-hyper-v-vm-checkpoints-with-powershell/) - -by @ThomasMaurer on 7th July -In this blog post Thomas explains how to create, manage, apply, and remove VM Checkpoints in Hyper-V using PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200710-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/hma63m/findcmdlet_a_search_engine_for_powershell_cmdlets/) - -u/mrmonday announces an alpha version of a search engine for PowerShell cmdlets - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200710-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1280262725625511936?s=20) - -PowerShell 7.1-Preview.5 is out! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200710-functiondraft.md#youtube-pspowerhour-epsiode-3---powershell-71-the-modernnext-gen-shell)[*Youtube: PSPowerHour Epsiode 3 - PowerShell 7.1: The Modern/Next-Gen Shell*](https://www.youtube.com/watch?v=YDEbQlxumzg) - -Join Steve and Jason to discuss future shell improvements, Predictive IntelliSense, Dynamic Help, Native Commands and more in this exciting look at PowerShell 7.1. diff --git a/content/articles/2020-07-17-icymi-powershell-week-of-17-july-2020.md b/content/articles/2020-07-17-icymi-powershell-week-of-17-july-2020.md deleted file mode 100644 index 3e53ae5a0..000000000 --- a/content/articles/2020-07-17-icymi-powershell-week-of-17-july-2020.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 17-July-2020" -authors: - - Robin Dadswell -date: "2020-07-17T16:00:13+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/07/icymi-powershell-week-of-17-july-2020/ ---- - -Topics include OneDrive client, HTML reports, Beautiful code and more... -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200717-functiondraft.md#automate-azure-update-management-scheduling-with-powershell)[*Automate Azure update management scheduling with PowerShell*](https://4bes.nl/2020/07/12/automate-azure-update-management-scheduling-with-powershell/) - -by Barbara Forbes on 12th July -Barbara is explaining about how to automate Azure update management and scheduling updates using PowerShell - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200717-functiondraft.md#active-directory-dhcp-report-to-html-or-email-with-zero-html-knowledge)[*Active Directory DHCP Report to HTML or EMAIL with zero HTML knowledge*](https://evotec.xyz/active-directory-dhcp-report-to-html-or-email-with-zero-html-knowledge/) - -by Przemyslaw Klys on 12th July -Przemyslaw is using PSWriteHTML module and and demonstrating how to generate html reports seamlessly. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200717-functiondraft.md#monitoring-with-powershell-monitoring-the-onedrive-client-limitations)[*Monitoring with PowerShell: Monitoring the Onedrive client limitations*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-the-onedrive-client-limitations/) - -by Kelvin Tegelaar on 13th July -Kelvin shared a script to monitor the Onedrive sysc status and client limitations. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200717-functiondraft.md#elevate-your-documentation-with-powershell-jupyter-notebook)[*Elevate your documentation with PowerShell Jupyter Notebook*](https://blog.darrenjrobinson.com/elevate-your-documentation-with-powershell-jupyter-notebook/) - -by Darren Robinson on 16th July -Some more information on using PowerShell Jupyter Notebooks - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200717-functiondraft.md#want-to-write-beautiful-powershell-code-heres-how)[*Want to Write Beautiful PowerShell Code? Here's How.*](https://adamtheautomator.com/beautiful-powershell-code/) - -by Adam Bertram on 16th July -Adam explains the best pratices in writing the beautiful PowerShell Code - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200717-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/hqwftf/automatically_set_desktop_wallpaper_to_the/) - -u/Otacrow shared a script to set the desktop wallpaper from the current spotlight image - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200717-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1283830975131078656?s=20) - -PowerShell 7.0.3 and 6.2.7 are out! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200717-functiondraft.md#youtube-change-your-world-the-way-you-want-a-simple-contribution-to-powershell-7)[*Youtube: Change your world the way you want: A simple contribution to PowerShell 7*](https://www.youtube.com/watch?v=BDEAA_oF3ss) - -Prasoon Karunan took a session on how to contribute to PowerShell, that includes finding the issues, identifying the code changes, fixing, testing and raising a pull request. diff --git a/content/articles/2020-07-24-icymi-powershell-week-of-24-july-2020.md b/content/articles/2020-07-24-icymi-powershell-week-of-24-july-2020.md deleted file mode 100644 index bb414f020..000000000 --- a/content/articles/2020-07-24-icymi-powershell-week-of-24-july-2020.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 24-July-2020" -authors: - - Robin Dadswell -date: "2020-07-24T14:00:15+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/07/icymi-powershell-week-of-24-july-2020/ ---- - -Topics include SSH Remoting without SSH, VS Code, SQL Server and more. - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200724-functiondraft.md#adding-custom-types-to-powershell-objects)[*Adding custom types to PowerShell objects*](https://sergeyvasin.com/2020/07/21/adding-types-to-objects/) - -by Sergey Vasin on 21st July -Objects that result from PowerShell commands execution belong to some data type, but this doesn’t prevent us from adding a custom type. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200724-functiondraft.md#discovering-provider-specific-commands)[*Discovering Provider Specific Commands*](https://jdhitsolutions.com/blog/powershell/7604/discovering-provider-specific-commands/) - -by @JeffHicks on 22nd July -With the loss of provider aware help Jeff offers some suggestions to know what commands are available to with specific providers. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200724-functiondraft.md#using-secret-management-module-to-run-ssms-vs-code-and-azure-data-studio-as-another-user)[*Using Secret Management module to run SSMS, VS Code and Azure Data Studio as another user.*](https://sqldbawithabeard.com/2020/07/20/using-secret-management-module-to-run-ssms-vs-code-and-azure-data-studio-as-another-user/) - -by @sqldbawithbeard on 22nd July -Discusses using the Secret Management Module to run applications as other users, specifically an admin account. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200724-functiondraft.md#finding--downloading-required-sql-server-updates)[*Finding & Downloading Required SQL Server Updates*](https://flxsql.com/downloading-latest-sql-server-updates/?utm_source=rss&utm_medium=rss&utm_campaign=downloading-latest-sql-server-updates) - -by Andy Levy on 22nd July -An interesting look at downloading SQL updates via PowerShell - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200724-functiondraft.md#powershell-remoting-over-ssh-without-ssh)[*PowerShell Remoting Over SSH, Without SSH!*](https://blog.devolutions.net/2020/07/powershell-remoting-over-ssh-without-ssh) - -by @awakecoding on 22nd July -Marc-Andre shows how to use socat instead of ssh to do PowerShell remoting in PowerShell core. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200724-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/hulpid/free_virtual_powershell_conference_with_keynote/) - -Chicago PowerShell user Group is doing a virtual conference with keynote speaker Jeffrey Snover. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200724-functiondraft.md#youtube-weaning-yourself-away-from-gui-based-ad-administration-with-mike-kanakos)[*Youtube: Weaning Yourself Away From GUI-Based AD Administration with Mike Kanakos*](https://youtu.be/H5BPr_b26vA) - -On the Hybrid Identity Podcast Mike discusses IT pros who have not yet made the jump to the cmd line, scripting and automation. diff --git a/content/articles/2020-07-27-creating-a-powershell-module-to-improve-your-code.md b/content/articles/2020-07-27-creating-a-powershell-module-to-improve-your-code.md deleted file mode 100644 index b1eff6f72..000000000 --- a/content/articles/2020-07-27-creating-a-powershell-module-to-improve-your-code.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Creating a PowerShell Module to Improve Your Code -authors: - - n2501r -date: "2020-07-27T18:24:52+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks - - Tutorials -tags: - - Modules - - SQL - - Best Practices -aliases: - - /2020/07/creating-a-powershell-module-to-improve-your-code/ ---- - -Do you have PowerShell code that you reuse in your scripts over and over? Do you have server names hard coded in variables? Are you using a text file or CSV file to import server names? Do you find yourself only utilizing one server out of a cluster of servers to make your PowerShell commands? These are the questions I asked myself and the answer used to be YES. In this post, I will go over how you can store your infrastructure server information in a SQL database and call that data from a custom PowerShell module. By utilizing this method, you can expect the below benefits: - - - - - Centralized code means less places to modify if you want to make a change - - - - - Randomized server selection to prevent over usage of one server - - - - - Centralized location to store server information - - - - - Easily add or remove server infrastructure as your environment changes - - - - - Flexibility to pull server data from multiple sites and locations - - - - - Standardized scripts make for easier readability and debugging - - - -Feel free to check it out for yourself at my site: -[SpiderZebra.com](https://spiderzebra.com/2020/07/27/creating-a-powershell-module-to-improve-your-code/) - **Nick Richardson (@ChiefNSR)** diff --git a/content/articles/2020-07-31-icymi-powershell-week-of-31-july-2020.md b/content/articles/2020-07-31-icymi-powershell-week-of-31-july-2020.md deleted file mode 100644 index 7e414d705..000000000 --- a/content/articles/2020-07-31-icymi-powershell-week-of-31-july-2020.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 31-July-2020" -authors: - - Robin Dadswell -date: "2020-07-31T14:00:02+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/07/icymi-powershell-week-of-31-july-2020/ ---- - -Topics include Windows Sandbox, Pausing scripts, PowerCLI, SendGrid and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200731-functiondraft.md#pssendgrid-send-email-from-powershell-with-sendgrid)[*PSSendgrid: Send email from PowerShell with Sendgrid*](https://4bes.nl/2020/07/26/pssendgrid-send-email-from-powershell-with-sendgrid/) - -by @Ba4bes on 26th July -In this post, Barbara will show you how to send email from PowerShell with SendGrid. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200731-functiondraft.md#doing-more-with-windows-sandbox)[*Doing More with Windows Sandbox*](https://jdhitsolutions.com/blog/powershell/7621/doing-more-with-windows-sandbox/) - -by @JeffHicks on 29th July -Jeff is showing us on how to enable and play around with the Windows Sandbox using PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200731-functiondraft.md#documenting-with-powershell-documenting-azure-vms-and-lighthouse-setup)[*Documenting with PowerShell: Documenting Azure VMs (And lighthouse setup)*](https://www.cyberdrain.com/documenting-with-powershell-documenting-azure-vms-and-lighthouse-setup/) - -by @KelvinTegelaar on 29th July -Kelvin shows how to setup Azure Lighthouse and manage via PowerShell, and demonstrate how to document the VMs. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200731-functiondraft.md#how-to-pause-a-powershell-script)[*How to Pause a PowerShell Script*](https://adamtheautomator.com/how-to-pause-a-powershell-script/) - -by @alistek on 30th July -In this article, Adam is going to break down the ability to pause into either native and non-native commands in PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200731-functiondraft.md#managing-vcd-vm-disks-from-powercli--powershell)[*Managing VCD VM Disks from PowerCLI / PowerShell.*](https://kiwicloud.ninja/?p=1221) - -by @jondwaite on 30th July -A way to manage the internal hard disks attached to some of their virtual machines from code. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200731-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/hytigy/retro_synthwave_theme_for_powershell_in_windows/?utm_source=share&utm_medium=web2x) - -u/thebeersgoodnbelgium made a synthwave-y type theme for PowerShell for Windows Terminal, please take a look. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200731-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1288182455325716480?s=20) - -Checkout the new blog post from @sydneysmithreal on the latest PSScriptAnalyzer 1.19.1 release! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200731-functiondraft.md#youtube-how-to-use-net-interactive-jupyter-notebooks-in-daily-work-life--data-exposed-mvp-edition)[*Youtube: How to Use .NET Interactive Jupyter Notebooks in Daily Work-Life | Data Exposed: MVP Edition*](https://youtu.be/W-F0gO7dVOE) - -In this episode, MVP Rob Sewell will introduce Jupyter Notebooks and show you how useful they could be for you in your daily work-life for Incident Resolution, Repeatable Tasks, and Demoing New Features. diff --git a/content/articles/2020-08-07-icymi-powershell-week-of-07-august-2020.md b/content/articles/2020-08-07-icymi-powershell-week-of-07-august-2020.md deleted file mode 100644 index 8a84ad570..000000000 --- a/content/articles/2020-08-07-icymi-powershell-week-of-07-august-2020.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 07-August-2020" -authors: - - Robin Dadswell -date: "2020-08-07T14:00:14+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/08/icymi-powershell-week-of-07-august-2020/ ---- - -Topics include Azure VMs, PSReadline, Terraform and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200807-functiondraft.md#terraform---uploading-a-local-powershell-module-to-an-azure-automation-account)[*Terraform - Uploading a local PowerShell module to an Azure Automation account*](http://feedproxy.google.com/~r/Lazywinadmin/~3/m6v1hvsEk00/terraform_azure-automationacc_psmoduleupload.html) - -by François-Xavier Cat on 2nd August -I had a scenario where some of my runbooks were using a custom PowerShell module that was not publicly available. This short article document my approach. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200807-functiondraft.md#monitoring-with-powershell-monitoring-b-series-vm-credits)[*Monitoring with PowerShell: Monitoring B-Series VM credits*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-b-series-vm-credits/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-b-series-vm-credits) - -by Kelvin Tegelaar on 3rd August -A lot of MSPs use the B-Series VMs for tasks, and why wouldn’t you? This script helps you monitor those VMs for remaining credits. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200807-functiondraft.md#powershell-201-2-vms-internal-load-balancer)[*PowerShell: 201-2-vms-internal-load-balancer*](https://kpatnayakuni.com/projects/arm-templates-to-powershell-scripts/ps-201-2-vms-internal-load-balancer/) - -by Kiran Patnayakuni on 4th August -This is a conversion of ARM template 201-2-vms-internal-load-balancer  from the repository azure\azure-quickstart-templates  to PowerShell Script - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200807-functiondraft.md#enhancing-interaction-with-quotes-and-brackets-by-using-psreadline)[*Enhancing interaction with quotes and brackets by using PSReadline*](https://sergeyvasin.com/2020/08/04/quotes-and-brackets/) - -by Sergey Vasin on 4th August -Using PSReadline to enhance PS Console with things like SmartInsertQuotes and PairedBraces. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200807-functiondraft.md#validating-computer-names-with-powershell)[*Validating Computer Names With Powershell*](https://itluke.online/2020/08/05/validating-computer-names-with-powershell/) - -by @LFullenwarth on 5th August -Luke is explaining about the various parameter validation types in PowerShell, please take a look. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200807-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/i4hjm8/ive_created_my_first_practical_script_and_i_felt/) - -u/DragonToutNu shares his success story. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200807-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1291146520742354944?s=20) - -PowerShell team is making some improvements to DSC support in #PowerShell 7.1. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200807-functiondraft.md#youtube-powershell-live-training---apis-and-web-requests)[*Youtube: PowerShell Live Training - APIs and Web Requests*](https://www.youtube.com/watch?v=GZ2nIErqAvY) - -Follow along in this live training video to learn about using APIs in PowerShell. diff --git a/content/articles/2020-08-14-icymi-powershell-week-of-14-august-2020.md b/content/articles/2020-08-14-icymi-powershell-week-of-14-august-2020.md deleted file mode 100644 index e3650b334..000000000 --- a/content/articles/2020-08-14-icymi-powershell-week-of-14-august-2020.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 14-August-2020" -authors: - - Robin Dadswell -date: "2020-08-14T19:53:53+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/08/icymi-powershell-week-of-14-august-2020/ ---- - -Topics include Selenium, VS Code, Microsoft 365 and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200814-functiondraft.md#how-to-use-the-new-exchange-online-v2-powershell-module-for-unattended-automation-scripts)[*How to Use the New Exchange Online V2 PowerShell Module for Unattended Automation Scripts*](https://adamtheautomator.com/exchange-online-powershell-mfa/) - -by June Castillote on 11th August -In this article, you will learn how to prepare to use the EXO V2 module to run Exchange Online unattended scripts with app-only modern authentication. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200814-functiondraft.md#automating-with-powershell-increasing-the-o365-secure-score)[*Automating with PowerShell: Increasing the O365 Secure Score*](https://www.cyberdrain.com/automating-with-powershell-increasing-the-o365-secure-score/?utm_source=rss&utm_medium=rss&utm_campaign=automating-with-powershell-increasing-the-o365-secure-score) - -by Kelvin Tegelaar on 12th August -Second post by Kevin showing a module that will apply settings to increase 0365 secure score. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200814-functiondraft.md#updated-powershell-tools)[*Updated PowerShell Tools*](https://jdhitsolutions.com/blog/powershell/7648/updated-powershell-tools/) - -by Jeff Hicks on 12th August -New Version of PSScriptTools - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200814-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/prasoonkarunan/status/1294293462779494400) - -Session recording of a run through of Azure PowerShell - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200814-functiondraft.md#youtube-using-selenium-to-test-web-frameworks-with-stephen-valdinger)[*Youtube: Using Selenium to test Web Frameworks with Stephen Valdinger*](https://youtu.be/bynYFT02ACM) - -Join Stephen and discover how you could take your web testing and troubleshooting to the next level with the Selenium module. diff --git a/content/articles/2020-08-17-.md b/content/articles/2020-08-17-.md deleted file mode 100644 index 1341d51a7..000000000 --- a/content/articles/2020-08-17-.md +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: "Enable \"Allow Scripts to Access OAuth Token\" in Azure DevOps using PowerShell" -authors: - - pwshliquori -date: "2020-08-17T00:00:00+00:00" -categories: - - PowerShell for Admins -tags: - - Azure DevOps - - CI/CD - - REST API -draft: true ---- - -Azure DevOps allows us to run custom scripts to help our software and infrastructure get delivered quickly. There are times that the scripts run without an issues, however, sometimes there is a need to invoke the Azure DevOps Rest API in the CD pipeline. Sure, you can create a script using the API, authenticating with Azure DevOps with a personal access token and should work, but there is a better solution. - -Allowing scripts to access the oauth token authenticates the script with the System.AccessToken variable, which runs as the Project Collection Build Service, a built-in service account in Azure DevOps. Today, we will be taking a look on how to enable this feature using PowerShell. - -Since the feature needs to be enabled per release definition, the first item we need to find is the ID of the release definition. This can be found by using the Rest API or in the URL when clicking on the release definition in Azure DevOps. Since we are using PowerShell, let’s try it, but first, be sure to have your personal access token handy. - - -`$Params = @{ - Uri = "https://dev.azure.com/pwshliquori-blog/blog/_apis/release/definitions/1?api-version=5.0" - Headers = @{ - Authorization = "Basic $ConvertToBase64" - } -} -$Def = Invoke-RestMethod @Params -`Let’s take a look at the command: - - - - - $Params: A hash table we will be splatting later on when we are ready to run the command. - - - - - $Params.Uri: The components needed to get the release definitions. pwshliquori-blog: Organization name. - - - - - blog: Project name. - - - - - _apis: Calling the rest api. - - - - - release: The area of the api call. - - - - - definitions: The resource of the api call. - - - - - api-version=5.0: The latest version of the api. - - - - - $Headers: Authorization header using your base 64 encoded personal access token. - - - - - Invoke-RestMethod @Params: Invokes the Rest API using splatting to pass the parameters in the $Params hashtable. - - - -The command should return all release definitions in the project. Now we need to dig down and find the property needed to enable, in this case: “enableAccessToken” - -The enableAccessToken property is set to false by default, lets find and set it to true: - - -`$Def.environments.deployPhases.deploymentInput -$Def.environments.deployPhases.deploymentInput.enableAccessToken = $true -$Def.environments.deployPhases.deploymentInput -`Now that we set the “enableAccessToken” to true, we need to update the release definition with the changed value. To do this, we need to convert the $Def variable to JSON format and set the ContentType to application/json. - - -`$Body = ConvertTo-Json -InputObject $Def -Depth 4 -$Params = @{ - Uri = "https://dev.azure.com/pwshliquori-blog/blog/_apis/release/definitions/1?api-version=5.0" - Headers = @{ - Authorization = "Basic $ConvertToBase64" - } - Body = $Body - ContentType = 'application/json - Method = 'Put' -} -Invoke-RestMethod @Params -`The body needs to contain the entire release definition with the updated “enableAccessToken” property. After running the command, we can now utilize the System.AccessToken to run scripts and processes using OAuth authentication against the Project Collection Build Service account. By using PowerShell, we can now turn the commands above into a function to automate the process of enabling this feature. - - -`function Get-AzureDevOpsReleaseDefinition { - [CmdletBinding()] - param ( - [Parameter(Mandatory, - ValueFromPipeline, - Position = 0)] - [string]$ProjectName, - [Parameter(Mandatory, - Position = 1)] - [string]$ReleaseDefinitionId, - [Parameter(Position = 2)] - [string]$PersonalAccessToken - ) - Begin { - } - Process { - Try { - $BasicAuth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f '', $PersonalAccessToken))) - $Url = New-Object -TypeName System.Text.StringBuilder -$Url.Append("https://vsrm.dev.azure.com/$AzureDevOps_AccountName/$ProjectName/_apis/release/definitions") |Out-Null - if ($ReleaseDefinitionId) { - $Url.Append("/$ReleaseDefinitionId") |Out-Null - } - $Uri = $Url.ToString() - $Params = @{ - Uri = $Uri - Headers = @{ - Authorization = "Basic $BasicAuth" - } - } - Invoke-RestMethod @Params - } - Catch { - throw $_ - } - } -} -` diff --git a/content/articles/2020-08-21-icymi-powershell-week-of-21-august-2020.md b/content/articles/2020-08-21-icymi-powershell-week-of-21-august-2020.md deleted file mode 100644 index bb038a9a0..000000000 --- a/content/articles/2020-08-21-icymi-powershell-week-of-21-august-2020.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 21-August-2020" -authors: - - Robin Dadswell -date: "2020-08-21T14:00:11+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/08/icymi-powershell-week-of-21-august-2020/ ---- - -Topics include Microsoft 365, PowerShell 7.1, Managing Cloud with Powershell and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200821-functiondraft.md#powershell-to-c-and-back-data-types-type-conversion-variables-and-operators)[*PowerShell to C# and Back: Data Types, Type conversion, Variables and Operators*](https://ridicurious.com/2020/08/16/powershell-to-c-and-back-data-types-type-conversion-variables-and-operators/) - -by Prateek Singh on 16th August -It’s like an old tradition to introduce new programming language to the readers using a ‘Hello World!’ program, so keeping that in mind here are the steps to create your first Hello World program in C# and a step by step explanation of each line and keyword used in the program. We also have some examples where we would be consuming C# code in PowerShell and executing it. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200821-functiondraft.md#powershell-71-preview-6)[*PowerShell 7.1 Preview 6*](https://devblogs.microsoft.com/powershell/powershell-7-1-preview-6/) - -by Steve Lee on 17th August -Today, we are releasing the sixth preview of the PowerShell 7.1 release! With a roadmap update to match. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200821-functiondraft.md#how-to-send-email-securely-with-powershell)[*How to Send Email Securely with PowerShell*](https://adamtheautomator.com/how-to-send-email-securely-with-powershell/) - -by Adam Listek on 20th August -Need to notify your team on a failed service, only to find that your PowerShell email has bounced? Unauthenticated email has become difficult to pass in many mail systems. You don’t want to miss an important email notification because you relied on outdated PowerShell cmdlets. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200821-functiondraft.md#how-to-manage-microsoft-teams-via-powershell)[*How to Manage Microsoft Teams via PowerShell*](https://techcommunity.microsoft.com/t5/itops-talk-blog/how-to-manage-microsoft-teams-via-powershell/ba-p/1599167) - -by Anthony Bartolo on 20th August -A quick overview of some commands in the Microsoft Teams Module - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200821-functiondraft.md#monitoring-with-powershell-monitoring-o365-alerts)[*Monitoring With PowerShell: Monitoring O365 Alerts*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-o365-alerts/) - -by Kevin Tegelaar on 21st August -A look at different types of alerting policies within the M365 space. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200821-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ic3nqd/update_i_made_an_automatically_populating_script/) - -Reddit Post to show an automatically populating script menu - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200821-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/JustinWGrote/status/1296541322455654401?s=19) - -Set VS Code default language to PowerShell - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200821-functiondraft.md#youtube-manage-cloud-with-powershell)[*Youtube: Manage Cloud with PowerShell*](https://www.youtube.com/watch?v=x-bAD3RX_P0) - -Learn how to manage cloud with PowerShell on major cloud providers such as AWS, Azure, and Google Cloud. Discover how to authenticate your PowerShell session to your cloud account and then create and manage resources. See how you can use PowerShell to harness the power of the cloud! I wrap up this episode with a fully working example of creating and securing cloud resources demoing AWS and Azure side-by-side! diff --git a/content/articles/2020-08-27-psconfbook-vol3.md b/content/articles/2020-08-27-psconfbook-vol3.md deleted file mode 100644 index 530246bc6..000000000 --- a/content/articles/2020-08-27-psconfbook-vol3.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: The PowerShell Conference Book volume 3 is here! -authors: - - Mike Kanakos -date: "2020-08-27T12:59:35+00:00" -categories: - - Announcements - - Books - - News -tags: - - Books - - Community -aliases: - - /2020/08/psconfbook-vol3/ ---- - -The third edition of the **PowerShell Conference Book** is now available and [on sale][1] at the discounted price of $19.99. But you need to hurry because the **discounted price is only available until Friday evening!** - -### What is the PowerShell Conference Book? - -The book is designed to be a representation of what it's like when you attend a conference. Traditional books have a singular topic, such as _"Windows Server 2019"_ or _"Mastering Ansible"_. But this book is not geared towards a single topic. Instead, much like a conference, it's a collection of ideas all focused around a general theme.  All the chapters are related in some way to PowerShell and DevOps. -The book contains over 20 different chapters, each written by a different author. The authors of the book are community members and subject matter experts who have graciously donated their time and knowledge for a good cause. Each chapter is similar in length and focus to what it would be like if you attended a conference and listened to the author present their topic to a live audience, except now it's in written form. Imagine if you were able to capture those sessions and lock them into a format that you could refer to over and over again. It's a conference in a book format! - -### The essence of community in a book - -As a former contributor to volumes 1 & 2 of the book, I can tell you that these authors have worked VERY HARD to get their work ready for publication. The process started about six months ago when these authors had to submit chapter proposals to a selection committee, much like presenters have to do for a conference. Those CFP's were "pitches" to help explain and sell their topic with the hope they would be selected for inclusion in the book. Once selected, the process to publication can take as long as three months for an author. -The process requires the authors to submit their work to a group of editors who are also community members. Endless revisions and edits take place so that you, the reader, get the most value and an awesome experience from this book. And in true technical form, the entire book is written in markdown and all work is submitted, edited, formatted and managed via a GitHub repo. For many of these authors, writing technical content is not something they do regularly, but they invest time and effort to be able to share information that they believe can help people master a topic. Not only do these authors need to write their content, they need to learn the process of contributing to a shared GitHub repository. -The authors are not compensated at all for their time or knowledge. So why do this? What's the purpose? - -### DevOps Collective and the On-Ramp Program - -The project and time invested by the authors and editors are to help fund a great cause: [The DevOps Collective On-Ramp program][2]. The program and this website are parts of a non-profit organization called "The DevOps Collective". The non-profit is dedicated to education and community in the DevOps field. It is the legal entity behind the PowerShell Summit, the Automation Summit, the On-Ramp program, the PowerShell.org website and other items such as eBooks, free webinars, community events and more. -You may be familiar with the PowerShell summit that occurs take place in Seattle every year in April. It's considered the premiere event in the US for upper tier content related to PowerShell, DevOps and automation. The On-Ramp program is a guided, hands-on week long class that occurs at the same time as the Summit. During the day, the on-ramp attendees attend class and join the summit attendees for lunch, dinner and general sessions attended by the entire conference (i.e. keynote). It's a week of intense learning and helping attendees prepare for careers in infrastructure, automation and DevOps. -On-Ramp is taught by some the industry’s leading PowerShell instructors. It’s more than just an introduction to PowerShell as a technology; On-Ramp is also an introduction to the PowerShell community and ecosystem. By blending classroom time with time in Summit’s general sessions, keynotes, and social events, On-Ramp attendees can supercharge their entry into the broader world of DevOps and IT automation. -The conference book supports the On-Ramp program, but you may be wondering how... -The money earned from book sales goes towards scholarships for the On-Ramp program. 100% of the proceeds from book sales are donated to the program. So what does that mean? The money raised is directly used to pay for people who cannot afford to buy a ticket to the On-Ramp program. When I say "buy a ticket", that means the cost of the conference ticket, hotel room for a week and also includes breakfast and lunch. All told that represents about $3000 dollars per person. -In previous years the sales of the book were able to pay for nearly 10 people to the attend the On-Ramp program each year! Remember these are people who are changing careers or looking to get their start in the field. The winners are people who submitted an application to be considered for the scholarship and had to outline details about their knowledge and background and what they had hoped to achieve in the field. - -### Why should you buy this book - -This book is written, edited by and for the community. Twenty authors have taken a topic they're passionate about and have formulated their topics into something they believe can help you learn and get better at infrastructure and DevOps. This year's edition covers four areas: _Systems Management_, _Tips & Tricks_, _DevOps_ and _PowerShell Language Features_. You can see a full list of topics at the [book website][1]. -For many of these authors, getting their chapter published is one the greatest accomplishments of their careers. For the people who will receive a scholarship from the proceeds, it's an opportunity to benefit from expert tutoring and mentoring from some of the best in the industry and possibly a star to a better career. For you, it's an opportunity to get an amazing reference volume that you can use to tackle new areas of learning and go back and reference for years to come. -The book is on sale for $20 until Friday. For most of us, that is not a major purchase. Imagine how much knowledge you can get for the cost of dinner with friends. Imagine the good you can do by taking that $20 and putting it towards helping someone get started in our field! Please consider purchasing this book to further your knowledge, support the community and give someone else a chance in this community down the road. More details about the book can be found at the [book publisher's website][1]. - - [1]: https://leanpub.com/psconfbook3 - [2]: https://powershell.org/summit-old/summit-onramp/ diff --git a/content/articles/2020-08-28-icymi-powershell-week-of-28-august-2020.md b/content/articles/2020-08-28-icymi-powershell-week-of-28-august-2020.md deleted file mode 100644 index 8ecf29be0..000000000 --- a/content/articles/2020-08-28-icymi-powershell-week-of-28-august-2020.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 28-August-2020" -authors: - - Robin Dadswell -date: "2020-08-28T14:00:00+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/08/icymi-powershell-week-of-28-august-2020/ ---- - -Topics include Data type accelerators, Directory sizes, Monitoring UniFi devices and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200828-functiondraft.md#monitoring-with-powershell-user-experience-issues--unifi-eol-monitoring)[*Monitoring with PowerShell: user experience issues & Unifi EOL Monitoring*](https://www.cyberdrain.com/monitoring-with-powershell-user-experience-issues-unifi-eol-monitoring/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-user-experience-issues-unifi-eol-monitoring) - -by Kelvin Tegelaar on 24th August -Kelvin delivers two scripts in this blog post one to monitor user experience and the other to monitor Unifi for EOL devices. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200828-functiondraft.md#taking-issue-with-powershell)[*Taking Issue with PowerShell*](https://jdhitsolutions.com/blog/powershell/7661/taking-issue-with-powershell/) - -by Jeffery Hicks on 26th August -In this blog post Jeff makes a case for getting involved with PowerShell 7 and contribute to the opensource project. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200828-functiondraft.md#using-powershell-data-types-accelerators-to-speed-up-coding)[*Using PowerShell Data Types Accelerators to Speed up Coding*](https://adamtheautomator.com/using-powershell-data-types-accelerators-to-speed-up-coding/) - -by Adam Listek on 26th August -Accelerators will help you save time and effort for many of the common tasks that a script may need. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200828-functiondraft.md#how-to-add-port-to-firewall-windows-10-from-an-excel-sheet)[*How to Add Port to Firewall Windows 10 from an Excel Sheet*](https://adamtheautomator.com/how-to-add-port-to-firewall-windows-10-from-an-excel-sheet/) - -by Emanuel Halapciuc on 27th August -Use a spreadsheet to add multiple firewall rules depending on the machine role and prevent errors in adding your firewall rules. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200828-functiondraft.md#finding-teams-and-yammer-groups-with-powershell)[*Finding Teams and Yammer Groups with PowerShell*](https://office365itpros.com/2020/08/27/find-teams-yammer-groups-powershell) - -by Tony Redmond on 27th August -Needing to run a report on Teams or Yammer enabled M365 groups, if that's the case then check out this post. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200828-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ief3rm/get_directory_tree_size_using_powershell_recursive/) - -u/theSysadminChannel shares a script for getting recursive directory sizes. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200828-functiondraft.md#youtube-module-monday-powershell-protect)[*Youtube: Module Monday: PowerShell Protect*](https://www.youtube.com/watch?v=3EvFHXsOuy8%3E) - -Module Monday is a video series where I look at a cool PowerShell module every Monday. This Monday, we look at PowerShell Protect. PowerShell Protect is a module and antimalware scan interface provider that allows you to audit and block scripts based on rules. These rules can look at the aspects of a script to determine whether they should be audited or blocked. diff --git a/content/articles/2020-08-31-netneighbor-watch-the-powershell-alternative-to-arpwatch.md b/content/articles/2020-08-31-netneighbor-watch-the-powershell-alternative-to-arpwatch.md deleted file mode 100644 index c5ae99dde..000000000 --- a/content/articles/2020-08-31-netneighbor-watch-the-powershell-alternative-to-arpwatch.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "NetNeighbor Watch: The PowerShell Alternative To Arpwatch" -authors: - - n2501r -date: "2020-08-31T22:12:28+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks - - Tools - - Tutorials -tags: - - Networking - - Raspberry Pi - - Security -aliases: - - /2020/08/netneighbor-watch-the-powershell-alternative-to-arpwatch/ ---- - -In this post, we are going to setup NetNeighbor Watch on a Raspberry Pi. NetNeighbor Watch can keep an eye on your network and send you an email when a new host is discovered. NetNeighbor Watch is done completely in PowerShell. The results are very similar to those of arpwatch. NetNeighbor Watch is for anyone that wants more visibility into the wireless or wired devices on their network. We will also setup a weekly email report with all of the known hosts on your network. In this post, I will walk you through the entire process of setting this up from scratch on a Raspberry Pi, lets get started! - -##### Items Covered in Post: - - 1. Prerequisites - 2. Gmail App Password - 3. NetNeighbor Watch Code - 4. NetNeighbor Report Code - 5. Raspberry Pi 3 Model B+ Setup - 6. Final Results - 7. Resetting Known Hosts - -Take a look for yourself at my site: -[SpiderZebra.com](https://spiderzebra.com/2020/08/31/netneighbor-watch-the-powershell-alternative-to-arpwatch/) - **Nick Richardson (@ChiefNSR)** diff --git a/content/articles/2020-09-04-icymi-powershell-week-of-04-september-2020.md b/content/articles/2020-09-04-icymi-powershell-week-of-04-september-2020.md deleted file mode 100644 index 796f05498..000000000 --- a/content/articles/2020-09-04-icymi-powershell-week-of-04-september-2020.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 04-September-2020" -authors: - - Robin Dadswell -date: "2020-09-04T14:53:24+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/09/icymi-powershell-week-of-04-september-2020/ ---- - -Topics include Machine Learning, Network Monitoring, Active Directory and More... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200904-functiondraft.md#machine-learning-from-idea-to-reality-a-powershell-casestudy)[*Machine learning from idea to reality: a PowerShell case study*](https://blog.fox-it.com/2020/09/02/machine-learning-from-idea-to-reality-a-powershell-case-study/) - -by Joost Jansen on 9th February -This blog provides a ‘look behind the scenes’ at the RIFT Data Science team and describes the process of moving from the need or an idea for research towards models that can be used in practice. More specifically, how known and unknown PowerShell threats can be detected using Windows event log 4104. In this case study it is shown how research into detecting offensive (with the term ‘offensive’ used in the context of ‘offensive security’) and obfuscated PowerShell scripts led to models that can be used in a real-time environment. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200904-functiondraft.md#reading-sccm-logs-with-powershell)[*Reading SCCM Logs with PowerShell*](https://tseknet.com/blog/sccmlogs/) - -by @tseknet on 29th August -This post covers how you can write SCCM logs to the Event Log for an OS upgrade task sequence file (smsts.log), but this script can be adapted to take any log file and write the contents to the Event Log. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200904-functiondraft.md#netneighbor-watch-the-powershell-alternative-to-arpwatch)[*NetNeighbor Watch: The PowerShell Alternative To Arpwatch*](https://spiderzebra.com/2020/08/31/netneighbor-watch-the-powershell-alternative-to-arpwatch/) - -by Nick Richardson on 31st August -In this post, we are going to setup NetNeighbor Watch on a Raspberry Pi. NetNeighbor Watch can keep an eye on your network and send you an email when a new host is discovered. NetNeighbor Watch is done completely in PowerShell. The results are very similar to those of arpwatch. NetNeighbor Watch is for anyone that wants more visibility into the wireless or wired devices on their network. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200904-functiondraft.md#how-to-monitor-a-printer-with-powershell)[*How to monitor a printer with Powershell*](https://www.scriptinglibrary.com/languages/powershell/how-to-monitor-a-printer-with-powershell/) - -by Paolo Frigo on 2nd September -In this article you will find something totally different, I wanted to take the opportunity of helping somebody to solve a real case of a Virtual Printer that was causing issues to users and the ops team. The printer needed to be monitored with a living-off-the-land approach, so without adding any software solution but just a few scripts. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200904-functiondraft.md#visually-display-active-directory-nested-group-membership-using-powershell)[*Visually display Active Directory Nested Group Membership using PowerShell*](https://evotec.xyz/visually-display-active-directory-nested-group-membership-using-powershell/#utm_source=rss&utm_medium=rss&utm_campaign=visually-display-active-directory-nested-group-membership-using-powershell) - -by Przemyslaw Klys on 2nd September -This blog post covers a function called Get-WinADGroupMember. When you use it with a single parameter group it is basically a replacement for Get-ADGroupMember -Recursive. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200904-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/iibkyg/it_admin_toolkit_a_customizable_and_expandable/) - -u/nkasco shares a tool he has been working on and best part is that it is free. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200904-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1301731426648244224) - -@PowerShell_Team has started the release process for #PowerShell 7.1 preview 7 built on .NET 5 preview 8. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200904-functiondraft.md#youtube-getting-started-with-jupyter-notebooks-and-powershell)[*Youtube: Getting started with Jupyter Notebooks and PowerShell*](https://www.youtube.com/watch?v=zNKx6M9kjwM) - -In this video, I show how to get started with Jupyter Notebooks and PowerShell. I first go over the web interface for Jupyter and how to use .NET interactive to run PowerShell scripts in notebooks. I then go into Azure Data Studio to show how to build notebooks with a more rich PowerShell experience. Finally, I show how to build PowerShell notebooks using the Visual Studio Code Insiders edition and the preview edition of the PowerShell extension. diff --git a/content/articles/2020-09-11-icymi-powershell-week-of-11-september-2020.md b/content/articles/2020-09-11-icymi-powershell-week-of-11-september-2020.md deleted file mode 100644 index 613ac921f..000000000 --- a/content/articles/2020-09-11-icymi-powershell-week-of-11-september-2020.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 11-September-2020" -authors: - - Robin Dadswell -date: "2020-09-11T14:00:05+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/09/icymi-powershell-week-of-11-september-2020/ ---- - -Topics include filtering speed increase, PoshBot, error handling and more! - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [*Speeding Access to Office 365 PowerShell Data Using Where Instead of Where-Object*](https://office365itpros.com/2020/09/07/speed-powershell-code-where-method/) - -by Tony Redmond on 7th September -A neat little investigation by Tony Redmond into the benefits of using the .NET where method as opposed to the PowerShell Native Where-Object command. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200911-functiondraft.md#powershell-tips--tricks-that-will-increase-your-productivity)[*PowerShell Tips & Tricks That Will Increase Your Productivity*](https://www.koupi.io/post/awesome-powershell-tricks-you-don-t-want-to-miss) - -by Caroline Chiari on 8th September -See some things that Caroline finds helpful on the command line and maybe learn something new in the process! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200911-functiondraft.md#certificate-based-authentication-for-exchange-online-powershell)[*Certificate-Based Authentication for Exchange Online PowerShell*](https://blog.robindadswell.tech/blog/2020/09/09/certificate-based-authentication-for-exchange-online-powershell/) - -by Robin Dadswell on 9th September -An exploration into a vital part of migrating away from Basic Authentication for Exchange Online - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200911-functiondraft.md#powershell-error-handling)[*PowerShell Error Handling*](https://www.skylinesacademy.com/blog/2020/9/9/powershell-error-handling) - -by Adam Bertram on 9th September -To ensure we set up a net to catch all of the errors that are bound to happen, it's important to understand error handling. Error handling is a concept in all programming languages that outlines steps, procedures and code that's written to intelligently capture errors and do something about them. PowerShell is no different. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200911-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/inpake/are_advanced_functions_i_should_spend_a_lot_of/%7Chttps://www.reddit.com/r/PowerShell/comments/inpake/are_advanced_functions_i_should_spend_a_lot_of/) - -A discussion about Advanced Functions and should you learn about them - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200911-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1303466981253758976) - -#PowerShell 7.1-preview.7 is out! This will be our last preview (unless there's a major issue) before our Release Candidate! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200911-functiondraft.md#youtube-module-monday-poshbot)[*Youtube: Module Monday: PoshBot*](https://www.youtube.com/watch?v=yzOdSGCjyFA) - -Module Monday is a video series where I look at a cool PowerShell module each Monday. This Monday, I looked at PoshBot. PoshBot is a chat bot built with PowerShell. It allows you to issue you commands from your chat client, schedule jobs, trigger messages on events and more! Upgrade your ChatOps! diff --git a/content/articles/2020-09-18-icymi-powershell-week-of-18-september-2020.md b/content/articles/2020-09-18-icymi-powershell-week-of-18-september-2020.md deleted file mode 100644 index f06f59552..000000000 --- a/content/articles/2020-09-18-icymi-powershell-week-of-18-september-2020.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 18-September-2020" -authors: - - Robin Dadswell -date: "2020-09-18T14:00:55+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/09/icymi-powershell-week-of-18-september-2020/ ---- - -Topics include Nested AD groups, Logging, documentation and more. - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200918-functiondraft.md#finding-nested-active-directory-groups-faster-with-powershell)[*Finding nested Active Directory groups faster with PowerShell*](https://4sysops.com/archives/finding-nested-groups-faster-with-powershell/) - -by Mike Kanakos on 15th September -Mike would like to show us how to find nested groups in large Active Directory groups. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200918-functiondraft.md#powershell-logging-recording-and-auditing-all-the-things)[*PowerShell Logging: Recording and Auditing all the Things*](https://adamtheautomator.com/powershell-logging-recording-and-auditing-all-the-things/) - -by Bill Kindle on 15th September -In this article, you’ll learn about the options available for PowerShell logging and auditing. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200918-functiondraft.md#documenting-with-powershell-hyper-v-and-physical-server-settings)[*Documenting with PowerShell: Hyper-v and physical server settings*](https://www.cyberdrain.com/documenting-with-powershell-hyper-v-and-physical-server-settings/) - -by Kelvin Tegelaar on 16th September -Kelvin wrote a PowerShell to document the physical and Hyper-V servers and show them as cards in HTML view. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200918-functiondraft.md#secretmanagement-preview-3)[*SecretManagement Preview 3*](https://devblogs.microsoft.com/powershell/secretmanagement-preview-3/) - -by Sydney Smith on 16th September -A big update to SecretManagement is out including the new SecretStore vault extension. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200918-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/iuifz8/powershell_vs_python_reference/) - -This is a reference between PowerShell and Python language syntax. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200918-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/WindosNZ/status/1306438761278914560) - -Did you know that content from @mikefrobbins' PowerShell 101 book is up on @docsmsft; Such a valuable resource for learning #PowerShell, available directly alongside all the rest of the docs! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200918-functiondraft.md#youtube-module-monday-z)[*Youtube: Module Monday: Z*](https://www.youtube.com/watch?v=OzHIjKEfOhA) - -Z is a port of a popular bash shell script for navigating your file system quickly. It uses a frequency algorithm to determine the correct path to go to. diff --git a/content/articles/2020-10-02-icymi-powershell-week-of-02-october-2020.md b/content/articles/2020-10-02-icymi-powershell-week-of-02-october-2020.md deleted file mode 100644 index 890c4c8ef..000000000 --- a/content/articles/2020-10-02-icymi-powershell-week-of-02-october-2020.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 02-October-2020" -authors: - - Robin Dadswell -date: "2020-10-02T14:43:28+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/10/icymi-powershell-week-of-02-october-2020/ ---- - -Topics include WPF, Azure, Secrets and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201002-functiondraft.md#build-a-powershell-systray-tool-with-menus-sub-menus-and-pictures)[*Build a PowerShell systray tool with menus, sub menus and pictures*](http://www.systanddeploy.com/2020/09/build-powershell-systray-tool-with.html) - -by Damien Van Robaeys on 28th September -In this post, Damien Van Robaeys will demonstrate how to build a tool that displays context menu and sub menus in the systray bar with picture for each menus. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201002-functiondraft.md#wpf-tips)[*WPF Tips*](https://jm2k69.github.io/2020/09/WPF-tips.html) - -by Jérôme Bezet-Torres on 29th September -Investigate how to use WPF in PowerShell to create forms - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201002-functiondraft.md#get-gporeport-how-to-build-fancy-gpo-reports-with-powershell)[*Get-GpoReport: How to Build Fancy GPO Reports with PowerShell*](https://adamtheautomator.com/get-gporeport-how-to-build-fancy-gpo-reports-with-powershell/) - -by Emanuel Halapciuc on 29th September -In this deep dive, have a look at some of the things you can do with Get-GPOReport to create customised GPO reports with only the information you want to see. - -###### [*Answering the WSMan PowerShell Challenge*](http://jdhitsolutions.com/blog/powershell/7712/answering-the-wsman-powershell-challenge/) - -by Jeffrey Hicks on 30th September -Jeffrey Hicks shares his solution to a recent Iron Scripter challenge, a fascinating task and one with a practical result. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201002-functiondraft.md#secretmanagement-and-secretstore-updates)[*SecretManagement and SecretStore Updates*](https://devblogs.microsoft.com/powershell/secretmanagement-and-secretstore-updates/) - -by Sydney Smith on 30th September -Breaking Changes in Secret Store in the lastest update to the SecretManagement and SecretStore Modules - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201002-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/j2wosy/presentation_of_hurry_the_it_admins_companion/) - -Redditor shares tool that allows you to use scripts through a GUI interface - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201002-functiondraft.md#youtube-azurerm-to-az-powershell-module-migration-toolkit)[*Youtube: AzureRM to Az PowerShell Module Migration Toolkit*](https://www.youtube.com/watch?v=YxiPnAcOaxA&feature=emb_logo) - -The Az.Tools.Migration PowerShell module can automatically upgrade your PowerShell scripts and script modules from AzureRM to the Az PowerShell module. diff --git a/content/articles/2020-10-09-icymi-powershell-week-of-09-october-2020.md b/content/articles/2020-10-09-icymi-powershell-week-of-09-october-2020.md deleted file mode 100644 index 85c81a0db..000000000 --- a/content/articles/2020-10-09-icymi-powershell-week-of-09-october-2020.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 09-October-2020" -authors: - - Robin Dadswell -date: "2020-10-09T12:19:12+00:00" -categories: - - PowerShell for Admins -tags: - - ICYMI - - Community - - Weekly Roundup -aliases: - - /2020/10/icymi-powershell-week-of-09-october-2020/ ---- - -Topics include GitHub actions, Azure Functions, WVD, Pentesting and more! - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - - -###### - [*Using GitHub actions to run automatic Pester tests*](https://robstr.dev/using-github-actions-run-automatic-pester-tests/) - - - by Roberth Strand on 4th October - - - But as soon as I started creating PowerShell modules that was more than just small time projects, I had to step up the production quality. As soon as I had written some tests, I wanted to have those tests run every time I did a pull request. This helps me catch bugs before publishing the new version of my module, and saves me from a ton of stress. - - -###### - [*Automating with PowerShell: Deploying Azure Functions*](https://www.cyberdrain.com/automating-with-powershell-deploying-azure-functions/?utm_source=rss&utm_medium=rss&utm_campaign=automating-with-powershell-deploying-azure-functions) - - - by Kelvin Tegelaar on 5th October - - - Kelvin shares come of his Azure Functions and gives the ability to deploy them in a single click. - - -###### - [*Save WVD image with Sysprep as Image Gallery version (part 2)*](https://rozemuller.com/save-wvd-image-with-sysprep-as-image-gallery-version/) - - - by Sander Rozemuller on 6th October - - - Join Sander as he shows us how to automate setting up a WVD Image using PowerShell. - - -###### - [*Creating Your First Azure PowerShell Function App*](https://adamtheautomator.com/creating-your-first-azure-powershell-function-app/) - - - by June Castillote on 7th October - - - In this article, you will learn how to create an Azure PowerShell Function App, develop, test, and execute the code. You’ll also get the chance to build a mini-project where you’ll create a function for getting the status of Azure VMs and display the result on the web. - - -###### - [*Automate Azure Sentinel Deployment*](https://www.saggiehaim.net/automate-azure-sentinel-deployment) - - - by Saggie Haim on 8th October - - - In this post, Saggie Haim will walk us through how to automate the core components of Azure Sentinel using PowerShell - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/j5m9wl/a_great_feeling/) - - - Redditor shares his PowerShell success story. - - -###### - [*Tweet of the Week*](https://twitter.com/pcgeek86/status/1313560760207974405) - - - Level up your #PowerShell skills with this FREE training (one week) over @CBTNuggets. - - -###### - [*Youtube: Using PowerShell For Basic Pentesting Tasks | Looking WebDAV requests*](https://www.youtube.com/watch?v=BiC2WXJl5f4) - - - An overview of how to use PowerShell when pentesting. diff --git a/content/articles/2020-10-16-icymi-powershell-week-of-16-october-2020.md b/content/articles/2020-10-16-icymi-powershell-week-of-16-october-2020.md deleted file mode 100644 index b23cea43a..000000000 --- a/content/articles/2020-10-16-icymi-powershell-week-of-16-october-2020.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 16-October-2020" -authors: - - Robin Dadswell -date: "2020-10-16T15:13:33+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/10/icymi-powershell-week-of-16-october-2020/ ---- - -Topics include DSC, AD Recycle Bin, Pester and more... - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - - -###### - [*Getting familiar with Invoke-Item in PowerShell*](https://www.networkadm.in/invoke-item/) - - - by Mike Kanakos on 12th October - - - Mike does a deep dive on the Invoke-Item cmdlet, showing you all the ways to use it. - - -###### - [*How to Recover Objects with the Active Directory Recycle Bin*](https://adamtheautomator.com/how-to-recover-objects-with-the-active-directory-recycle-bin/) - - - by Adam Listek on 13th October - - - In this article, Adam explores exactly how the recycle bin functions, what can be done with the recycle bin, and how to effectively use it. - - -###### - [*Getting Started in Web Automation with PowerShell and Selenium*](https://adamtheautomator.com/getting-started-in-web-automation-with-powershell-and-selenium/) - - - by June Castillote on 14th October - - - Learn how to get started using the incredible combination of these two excellent tools, Selenium and PowerShell, to automate web-related tasks on web browsers. You’ll learn how to programmatically perform actions such as navigating, logging, searching, clicking, and sending input. - - -###### - [*Beyond Pester 101: Applying testing principles to PowerShell.*](https://sarti.dev/presentation/powershell-global-virtual-pester/) - - - by Glenn Sarti on 15th October - - - We see a lot talks on testing PowerShell with Pester, but are the tests we write good tests? What makes a test “good”? How do we measure how effective our tests are? This talk will help you answer these questions, including why testing is important and how to apply these principles to your project. - - -###### - [*Automating with PowerShell: Creating your own password push.*](https://www.cyberdrain.com/automating-with-powershell-creating-your-own-password-push/.) - - - by Kelvin Tegelaar on 16th October - - - A password pushing tool with an Azure Function. - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/jbndp3/is_dsc_worth_getting_into_at_this_point_or_should/) - - - A discussion around is DSC still relevant to learn today. - - -###### - [*Tweet of the Week*](https://twitter.com/joeyaiello/status/13157699699766435845) - - - A new approach to managing the #PowerShell repository, engine, and Committee. - - -###### - [*Youtube: Power Apps change the app owner with PowerShell.*](https://www.youtube.com/watch?v=YA0IdOZnM78&feature=youtu.be) - - -In this Quick Thursday Tip (QTT) you will learn how to change the owner of one or more Power Apps by using PowerShell. Super handy when someone leaves the company for example. diff --git a/content/articles/2020-10-23-icymi-powershell-week-of-23-october-2020.md b/content/articles/2020-10-23-icymi-powershell-week-of-23-october-2020.md deleted file mode 100644 index 72dfa56bf..000000000 --- a/content/articles/2020-10-23-icymi-powershell-week-of-23-october-2020.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 23-October-2020" -authors: - - Robin Dadswell -date: "2020-10-23T14:01:12+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/10/icymi-powershell-week-of-23-october-2020/ ---- - -Topics include web forms, converting to PDF, Oracle Cloud Infrastructure and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201023-functiondraft.md#building-web-forms-with-powershell-universal)[*Building web forms with PowerShell Universal*](https://blog.ironmansoftware.com/powershell-web-forms/) - -by Adam Driscoll on 17th October -PowerShell Universal provides several features that are capable of building web-based forms using PowerShell. For basic forms, we suggest using Universal Automation. For advanced forms, we suggest using Universal Dashboard. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201023-functiondraft.md#open-up-wide-with-powershell)[*Open Up Wide with PowerShell*](https://jdhitsolutions.com/blog/scripting/7786/open-up-wide-with-powershell/) - -by Jeff Hicks on 19th October -This is Jeff's solution to a recent IronScripter PowerShell challenge. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201023-functiondraft.md#powershell-convert-word-documents-to-pdf-documents-bulk)[*PowerShell: Convert Word documents to PDF documents (Bulk)*](https://sid-500.com/2020/10/20/powershell-convert-word-documentes-to-pdf-documents/) - -by Patrick Gruenauer on 20th October -In this blog post, Patrick will walk us through how to convert multiple documents to PDF files using PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201023-functiondraft.md#announcing-oracle-cloud-infrastructure-modules-for-powershell)[*Announcing Oracle Cloud Infrastructure Modules for PowerShell*](https://blogs.oracle.com/cloud-infrastructure/announcing-oracle-cloud-infrastructure-modules-for-powershell) - -by Viral Modi on 21st October -Big news if you manage an OCI, you can now do it through PowerShell! Learn how in this short post from Oracle - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201023-functiondraft.md#automating-with-powershell-changing-modern-and-basic-authentication-settings)[*Automating with PowerShell: Changing Modern and Basic authentication settings*](https://www.cyberdrain.com/automating-with-powershell-changing-modern-and-basic-authentication-settings/) - -by Kelvin Tegelaar on 23rd October -Kelvin walks us through how to edit the Modern Authentication settings in Office365 using PowerShell - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201023-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1318996485464182790) - -#PowerShell 7.1-RC2 is out! . Some final work (like SNAP pkg, etc...) are being worked still. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201023-functiondraft.md#youtube-power-bi-dev-camp-writing-powershell-scripts-for-power-bi)[*Youtube: Power BI Dev Camp: Writing PowerShell scripts for Power BI*](https://www.youtube.com/watch?v=WaKvZgjTWmo) - -In this #Microsoft Power BI Dev Camp session, we'll explore how to get started with writing and testing PowerShell scripts to automate common administrative tasks in a #PowerBI environment. diff --git a/content/articles/2020-10-30-icymi-powershell-week-of-30-october-2020.md b/content/articles/2020-10-30-icymi-powershell-week-of-30-october-2020.md deleted file mode 100644 index d39d9f504..000000000 --- a/content/articles/2020-10-30-icymi-powershell-week-of-30-october-2020.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 30-October-2020" -authors: - - Robin Dadswell -date: "2020-10-30T21:30:01+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/10/icymi-powershell-week-of-30-october-2020/ ---- - -Topics include SQL, Teams Webhooks, Zombie Files and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201030-functiondraft.md#how-to-manage-sharepoint-and-microsoft-teams-with-powershell-core)[*How to Manage SharePoint and Microsoft Teams with PowerShell Core*](https://techcommunity.microsoft.com/t5/itops-talk-blog/how-to-manage-sharepoint-and-microsoft-teams-with-powershell/ba-p/1792229?WT.mc_id=modinfra-10259-abartolo) - -by Veronique Lengelle on 27th October -If you're as addicted as I am with SharePoint, you might be glad to know that managing SharePoint is now possible with PowerShell Core! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201030-functiondraft.md#creating-adaptive-cards-via-teams-incoming-webhooks-using-powershell)[*Creating Adaptive Cards via Teams Incoming Webhooks Using PowerShell*](https://adamtheautomator.com/creating-adaptive-cards-via-teams-incoming-webhooks-using-powershell/) - -by Adam Listek on 27th October -If you want to create a customized card in Teams you can do so with Adaptive Cards and Adam shows you how to create them with webhooks in Teams via PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201030-functiondraft.md#writing-an-extension-vault-for-powershell-secretmanagement-preview-4)[*Writing an Extension Vault for PowerShell SecretManagement Preview 4*](https://adamtheautomator.com/writing-an-extension-vault-for-powershell-secretmanagement-preview-4/) - -by Adam Listek on 28th October -If you’ve ever hardcoded a password, an API key, or a private certificate in a script, stop! You need to secure that sensitive information! One way to do that is with the PowerShell SecretManagement module. Offering a convenient way for a user to store and retrieve secrets using PowerShell, the SecretManagement module also has the ability to interface with different back-end systems such as Azure KeyStore or KeePass too using an extension vault! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201030-functiondraft.md#pivot-in-powershell)[*PIVOT in PowerShell*](https://nocolumnname.blog/2020/10/29/pivot-in-powershell/) - -by Shane O’Neill on 29th October -Shane improves upon his last post "Attempting SUM() OVER () in PowerShell" by using PIVOT in PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201030-functiondraft.md#finding-zombie-files-with-powershell)[*Finding Zombie Files with PowerShell*](https://jdhitsolutions.com/blog/powershell/7835/finding-zombie-files-with-powershell/) - -by Jeff Hicks on 30th October -Since this is Halloween weekend in the United States, I thought I’d offer up a PowerShell solution to a scary task – finding zombie files. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201030-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/jhte32/i_think_powershell_is_easier_than_python/) - -The title says it all, but dig through the comments and find out some of the finer points of what makes PowerShell great. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201030-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/cl/status/1322104228467396608?s=20) - -Is the PowerShell Gallery down? lets ask twitter. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201030-functiondraft.md#youtube-taking-your-automation-to-the-next-level-with-powershell-7)[*Youtube: Taking your automation to the next level with PowerShell 7*](https://www.youtube.com/watch?v=cLjl_ZtYwYs) - -Great video covering PowerShell 7 with @jsnover diff --git a/content/articles/2020-11-03-the-return-of-the-powershell-devops-global-summit.md b/content/articles/2020-11-03-the-return-of-the-powershell-devops-global-summit.md deleted file mode 100644 index 632b4741f..000000000 --- a/content/articles/2020-11-03-the-return-of-the-powershell-devops-global-summit.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: The Return of the PowerShell + DevOps Global Summit -authors: - - James Petty -date: "2020-11-03T16:00:00+00:00" -categories: - - Announcements - - DevOps - - PowerShell for Admins - - PowerShell Summit -tags: - - PowerShell Summit -legacy_featured_image: /wp-content/uploads/2020/11/Asset-4@1x.png -aliases: - - /2020/11/the-return-of-the-powershell-devops-global-summit/ ---- - -The DevOps Collective INC is pleased to announce the return of the PowerShell + DevOps Global Summit in April of 2021. - -The 2021 event will be a little bit different than those in years past, as this event will be all virtual, hosted in late April 2021. We assure you that this will not be another multi-day webinar! We will do our best to make sure you have the best experience possible. -** -What does that mean for attendees? - -** -Unfortunately, we do not currently have all the answers to your questions, but we are working diligently behind the scenes to iron out the details.  Here is what we do know so far: - - * The event will have a paid attendee ticket. We are not a multibillion-dollar tech giant or a multimillion-dollar media company, so we can't offer the event for free. Believe us, we wish we could. - * The videos will be available on-demand for all paid attendees. Videos will not be released for free until 9-12 months after the event. - -** -What does that mean for presenters? -** - - * The CFP will open in the next week or two as we are still nailing down dates. Keep an eye out on for all the details as well as the official Twitter account of the event [@pshsummit][1]. - * Due to the event being all virtual:  Speakers will be required to record their videos and upload them to us a few weeks in advance (all the exact dates will be in the CFP). - * Below are a few examples of the quality of recordings that are required. We are looking at possible speaker compensations as well. More details to come in the formal CFP announcement. - * - * - - [1]: https://twitter.com/pshsummit diff --git a/content/articles/2020-11-05-writing-your-own-powershell-functions-cmdlets.md b/content/articles/2020-11-05-writing-your-own-powershell-functions-cmdlets.md deleted file mode 100644 index 6f9b381c8..000000000 --- a/content/articles/2020-11-05-writing-your-own-powershell-functions-cmdlets.md +++ /dev/null @@ -1,375 +0,0 @@ ---- -title: Writing Your Own PowerShell Functions / Cmdlets -authors: - - tobor79 -date: "2020-11-05T18:53:35+00:00" -categories: - - PowerShell for Admins -tags: - - Functions - - Modules - - Comment-Based Help - - Best Practices -aliases: - - /2020/11/writing-your-own-powershell-functions-cmdlets/ ---- - -This article is an attempt at describing some of my thought process when building functions. By functions I mean a command that you can execute after importing a module. I am not referring to running a script that accepts parameters and input. Having a task to complete for a function is of course the first objective. Once an idea is in mind I like to write as much as the Help section first as possible as this helps me outline and plan what I am going to do. - - -**Writing The Help Section** - - -Start with the easy part first, the **SYNOPSIS**. Best practice for this states that you should NOT include the name of your function or cmdlet in this section of the help. The idea behind this is similar to the idea that you do not want to use a word to define a word. That is one of those things that has always driven me crazy so I make a point to not be one of the references that does that. This section should be a very short description of what your cmdlet does. I typically start this sentence with the phrase format; "This cmdlet was created to accomplish this task on local and remote devices using WinRM to connect to remote devices". - -The next part I start to write is the **DESCRIPTION**. Depending on how much you have planned out in your head you may not delve to deeply into this section yet. This is the area where you add details that may be useful to know about your function as well as instructions and insights. This might include information on how the pipeline works or settings required for the command to work. - -With those descriptions fresh in mind I like to start the **PARAMETER** section. Parameter names should be singular and not plural, even if your parameter is an array. You do not need to get all of these ahead of time however, if you know you want your cmdlet to work on remote devices it is a good idea to start with the "ComputerName" parameter and if you are using WinRM use the "UseSSL" Parameter to cover all environment situations as best you can. Underneath the parameter's name in the help section you should provide a brief description of the parameters use to describe what the parameter is and the default value if you plan on giving it one. It is best practice to name the parameter with something typical of PowerShell. This is for interoperability as well as maintaining a set of standards. For example, I used the parameter title "ComputerName" and not hostname or FQDN. This should pretty much be the case for that situation every time. In a few cases, Computer is an acceptable parameter. An example of a case where this is acceptable is when your cmdlet is going to be passing the value of the $Computer parameter to a cmdlet that uses -Computer instead of -ComputerName. One such function that uses -Computer is Invoke-GPUpdate. With the "Computer" parameter value going into the Invoke-GPUpdate cmdlet it is best practice to use Computer and not ComputerName. Another thing I do sometimes is if I am going to use the -ComputerName parameter to pass the value to "Invoke-Command" or "New-PSSession" I do the below command : - -`Get-Help -Name Invoke-Command -Parameter ComputerName` - -I then copy and paste the description of that parameter into my functions description for that parameter since they are basically mirrored. This is a good way to provide the best information possible. - -The **EXAMPLE** section I do not write until after I have completed the function. This prevents the need to make any unnecessary changes later on to this section. I have made assumptions thinking this section is done and it is left outdated using parameters that don't exist anymore. That is why I believe this is easiest to do last. If your command accepts pipeline input you should have an example demonstrating how that works and not just assume people will understand by reading everything else you have written. This may be the only thing they read. You should also demonstrate each parameter at least one of your examples. The more use cases you can come up with the better. I have found this practice to really improve my function development as well as my understanding of how PowerShell works. After each command example use a commented line to add a description of what each command example is accomplishing. - -In the **NOTES** section I typically put my name as the author and contact information if someone needs to contact me on the function for whatever reason. Notes about your function can be added here as well. - -I use the **LINK** section to include any documentation I may have used to write the cmdlet however this typically just includes links to my GitHub and other sites related to myself. - -The **INPUTS** section is for defining the .NET class types that your cmdlet accepts as input from the pipeline. Most of the time this is going to be something like System.String or System.Array when used. If you do not have the property value "ValueFromPipeline=$True" set on any of your parameters, the INPUTS section should be set to "None". If you are piping input to a specific cmdlet you can pull the trick I did earlier to obtain the INPUTS information using the below command: - -`Get-Help -Name Enter-PSSession -Full | Out-String -Stream | Select-String -Pattern "INPUTS" -Context 1,4` - -The **OUTPUTS** section is the .NET class type that your cmdlet returns as a value(s). One thing I have been meaning to do to work on expanding my knowledge is to consistently add the expected returned Outputs to the CmdletBinding property in my functions. - - - - -**Outlining The Function** - - -We are now ready to start working on the function. To name the function we need to use one of the PowerShell approved "Verbs". Use the command "Get-Verb" to retrieve a list of possible options as well as what they refer too. It is best practice to use these verbs as they will help with how PowerShell accepts pipeline input. If you need help in choosing a verb for your function I suggest checking out this [Microsoft article][1]. -    If you are going to accept pipeline input in your function; (_One of your parameter properties has a value of "ValueFromPipeline=$True"_) ; you should start out by creating 3 sections. Begin, Process, and End. For each value in the pipeline being passed to your function, the begin section will be carried out first. Typically I use the Begin section to - - * Import modules if any are needed - * Define any variables that need to be defined - * Ensure values are correct if not done already using something such as "ValidateScript". - -Everything in the Begin brackets get executed before moving to the Process brackets and so forth. "Begin" is optional really as is the "End" section. - -    The "End" section I use to - - * Close any open sessions - * Clear variables if that needs to be done - * Return the object or results of the Process section - -The Process section should contain the meat of your cmdlets. This is going to be where the main purpose of your function is carried out. - -If you are not using pipeline input in your function you do not need to include those 3 sections. You can simply just start putting together whatever you need. - - -**Example Using Information So Far** - - -The example function I am going to use here will be for a function I created to encode and decode Base64 values. The verb I am going to use is "Convert". I chose this value because the cmdlet is going to be changing the data from one representation to another. The Noun I am going to choose can be whatever I want really. To make the cmdlet easy to understand I am going to name it Convert-Base64. I could choose to create two different functions, for example ConvertTo-Base64 and ConvertFrom-Base64. I would personally rather use one command to perform both tasks as this is the kind of function that typically gets used both ways. Now that I know the name of my function I can write my help section which is below. - -You can see from the above section that I have a good idea of how this is going to work. I next start my functions build by defining my parameters. I typically will always add **[CmdletBinding()]** to my functions. What this does is allow the use of 7 common parameters in PowerShell functions. Some examples of these are -Verbose, Debug, ErrorAction, ErrorVariable, etc. This also allows me to easily define a Default Parameter Set name which I have found to be a great way of simplifying my functions and improving execution times. - - -`Function Convert-Base64 { - [CmdletBinding(DefaultParameterSetName='Encode')] - param( - [Parameter( - Mandatory=$True, - Position=0, - ValueFromPipeline=$True, - HelpMessage="Enter a string you wish to encode or decode using Base64. Example: Hello World!")] # End Parameter - [String]$Value, - [Parameter( - ParameterSetName='Encode', - Mandatory=$True)] - [Switch][Bool]$Encode, - [Parameter( - ParameterSetName='Decode', - Mandatory=$True)] - [Switch][Bool]$Decode, - [Parameter( - Mandatory=$False, - ValueFromPipeline=$False)] # End Parameter - [ValidateSet('ASCII', 'BigEndianUnicode', 'Default', 'Unicode', 'UTF32', 'UTF7', 'UTF8')] - [String]$TextEncoding = 'UTF8' - ) # End param -BEGIN -{...}} -`Notice in the above I have two "Switch" parameters. I have given them bool values so I can use the attribute "IsPresent" in any "If" statements that come up. For example I could do - - -`If ($Encode.IsPresent) { $Value = 'Encode' } -`I have also created two parameter set names. The reason for this is to ensure that only one option or the other is selected. We need to know whether to Encode or Decode the -Value parameters value. This prevents errors from occurring because the person executing the function may think extra parameters need to be defined. This may not always be as intuitive as this function. It is a best practice that should be adhered too. It eliminates the need to add code in your function that attempts to accomplish this same task. For example, if you did not create the Parameter Set names you would need to do this in your "BEGIN" brackets to ensure one of the other was defined. - - -`If (!($Encode.IsPresent -or $Decode.IsPresent)) -{ - Throw "Switch parameter -Decode or -Encode needs to be defined. " -} # End If -`The Parameter "Value" is mandatory and accepts pipeline input. I did not include the property "ValueFromPipelineByPropertyName" because we want to convert a string and not just the property value of a PowerShell object. This places a limitation on the kind of value placed to cmdlet which we do not want in this scenario. The HelpMessage property for this parameter can be used here because the "Value" property is Mandatory. If the property is not included when the cmdlet is executed, PowerShell will prompt the executor for this value using the message you define there. If you are familiar with bash and python you probably are familiar with positional parameters. This is the same concept here when defining the Position value. I like to set this value to prevent the need for someone using the cmdlet to enter each parameter value. Position=0 is referring to the first value after Convert-Base64. In an example this gives us the ability to do: - - -`Convert-Base64 'Convert me to base64' -Encode -`Instead of: - - -`Convert-Base64 -Value 'Convert me to base64' -Encode -`We can also prevent the need to include -Encode by setting a default Parameter Set Name value. This is done by changing - - -`[CmdletBinding()] -`To - - -`[CmdletBinding(DefaultParameterSetName='Encode')] -`The person executing the command can now simply do this to encode their string : - - -`Convert-Base64 'Convert me to base64' -`In the "TextEncoding" parameter I did my best to name this as I do not know of any functions that offer this kind of option. I have added **[ValidateSet()]** to this parameter because I know all the possible values that can be used and we do not want anything else to be in this value. This also creates a Tab Autocomplete for the person using the cmdlet which saves typing as well. Other options that can be used to validate parameter values are **ValidateRange** and **ValidateScript**. These are the 3 I use most often. Validate your parameters whenever possible as this shows a professionalism in your abilities and will set you apart from others. It also ensures that your cmdlets work as expected. In the PROCESS area of my cmdlet I am using the .NET object System.Text.Encoding to convert the base64 related values. I used Tab autocomplete to come up with the list in "ValidateSet". - - -`[ValidateSet('ASCII', 'BigEndianUnicode', 'Default', 'Unicode', 'UTF32', 'UTF7')] -`** -Building the Body of the Cmdlet -** - -There are a couple of values that exist by default in every function. The main ones to know that get used often are PSCmdlet and PSBoundParameters. I often use these in Switch statements to help guide the direction of my functions script execution. For example you could do something such as - -**$PSCmdlet.ParameterSetName** to refer to the parameter set name your function is using. In my example, the default value for this would be 'Encode'. You can also return the value of your parameters using **$PSBoundParameters.Keys.Value** - -In our situation there is not really a good way to use the BEGIN brackets. This section is optional so I am going to jump right into the PROCESS brackets. I am going to add a Switch statement to my PROCESS brackets using $PSCmdlet.ParameterSetName. If the parameter set name is Encode the commands inside the brackets next to encode will be executed. Same goes for Decode if that is the parameter set name defined. - - -`PROCESS { - Switch ($PSCmdlet.ParameterSetName) - { - 'Encode' { } - 'Decode' { } - } # End Switch -`Now that the cmdlet knows which action to carry out, I need to work with the next parameter value needed to be defined before the convert action can be taken. This is the "TextEncoding" parameter. I am going to make another switch statement for this. - -**NOTE**: As a side note Switch statements are faster than If statements in situations such as this where we have a good amount of options to filter through. - -Below is my switch statement. I am using this to convert the string value into whatever character encoding I want converted to Base64. - - -`Switch ($TextEncoding) -{ - 'ASCII' {$StringValue = [System.Text.Encoding]::ASCII.GetBytes("$Value")} - 'BigEndianUnicode' {$StringValue = [System.Text.Encoding]::BigEndianUnicode.GetBytes("$Value")} - 'Default' {$StringValue = [System.Text.Encoding]::Default.GetBytes("$Value")} - 'Unicode' {$StringValue = [System.Text.Encoding]::Unicode.GetBytes("$Value")} - 'UTF32' {$StringValue = [System.Text.Encoding]::UTF32.GetBytes("$Value")} - 'UTF7' {$StringValue = [System.Text.Encoding]::UTF7.GetBytes("$Value")} - 'UTF8' {$StringValue = [System.Text.Encoding]::UTF8.GetBytes("$Value")} -} # End Switch -`Once that value is defined the convert operation can be carried out. Error handling is another important aspect of cmdlet building. Typically we can accomplish this using Try Catch statements. Also using the -ErrorVariable parameter of a cmdlet is a great way to handle errors and redirect your functions execution. - -**NOTE**: A good thing to know about Try Catch is there is a third option called Finally. If you were to stop the execution of a function using Ctrl + C while inside of a Try Catch statement, the code inside the Finally brackets will still execute. This is great for leaving an infinite"While" loop with a message like "Exiting loop". - -Below is the Try Catch statement I have added: - - -`Try -{ - [System.Convert]::ToBase64String($StringValue) -} # End Try -Catch -{ - Throw "String could not be converted to Base64. The value entered is below. `n$Value" - $Error[0] -} # End Catch -`Notice the value **$Error[0]** I have included in the Catch brackets. This is another value that is automatically assigned when an error occurs inside a cmdlet. Using the first positional value "0" of $Error will put the PowerShell generated error message on screen. Otherwise the only message being displayed would be mine which is not going to give information on what caused the error. You are able to add multiple catch statements where you can catch specific error types to provide your own messaging in each situation. To do this you need to know the object name of the error that will occur. Just to provide an example of this you could catch incorrectly entered credentials in a catch statement using the below: - - -`Catch [System.Security.Authentication.AuthenticationException] -{ - Throw "The credentials you entered were incorrect" -} # End Catch -Catch -{ - $Error[0] -} -`The END brackets are also optional. Usually I use this area to close any session connections and to build a custom object. However to save script execution time, I am not going to do include that in this cmdlet. Whatever results are returned from the Try Catch statements is going to be the result of the command. The final result of these efforts can be view in the code below or at this [LINK:](https://github.com/tobor88/PowerShell-Red-Team/blob/master/Convert-Base64.ps1) - - - - - -`<# -.SYNOPSIS -This cmdlet is used to Encode or Decode Base64 strings. -.DESCRIPTION -Convert a string of text to or from Base64 format. Pipeline input is accepted in string format. Use the switch parameters Encode or Decode to define which action you wish to perform on your string -.PARAMETER Value -Defines the string to be encoded or decoded with base64. -.PARAMETER Encode -This switch parameter is used to tell the cmdlet to encode the base64 string -.PARAMETER Decode -This switch parameter is used to tell the cmdlet to decode the base64 string -.PARAMETER TextEncoding -This parameter is used to define the type of Unicode Character encoding to convert with Base64. This value you can be ASCII, BigEndianUnicode, Default, Unicode, UTF32, UTF7, or UTF8. The default value is UTF8 -.EXAMPLE -Convert-Base64 -Value 'Hello World!'' -Encode -# This example encodes "Hello World into Base64 format. -.EXAMPLE -Convert-Base64 -Value 'SGVsbG8gV29ybGQh' -Decode -Encoding ASCII -# This example decodes Base64 to a string in ASCII format -.NOTES -Author: Robert H. Osborne -Alias: tobor -Contact: rosborne@osbornepro.com -.LINK -https://roberthsoborne.com -https://osbornepro.com -https://btps-secpack.com -https://github.com/tobor88 -https://gitlab.com/tobor88 -https://www.powershellgallery.com/profiles/tobor -https://www.linkedin.com/in/roberthosborne/ -https://www.youracclaim.com/users/roberthosborne/badges -https://www.hackthebox.eu/profile/52286 -.INPUTS -System.String, -Value accepts strings from pipeline. -.OUTPUTS -System.String -#> -Function Convert-Base64 { - [CmdletBinding(DefaultParameterSetName='Encode')] - param( - [Parameter( - Mandatory=$True, - Position=0, - ValueFromPipeline=$True, - HelpMessage="Enter a string you wish to encode or decode using Base64. Example: Hello World!")] # End Parameter - [String]$Value, - [Parameter( - ParameterSetName='Encode', - Mandatory=$True)] - [Switch][Bool]$Encode, - [Parameter( - ParameterSetName='Decode', - Mandatory=$True)] - [Switch][Bool]$Decode, - [Parameter( - Mandatory=$False, - ValueFromPipeline=$False)] # End Parameter - [ValidateSet('ASCII', 'BigEndianUnicode', 'Default', 'Unicode', 'UTF32', 'UTF7', 'UTF8')] - [String]$TextEncoding = 'UTF8' - ) # End param -PROCESS -{ - Switch ($PSCmdlet.ParameterSetName) - { - 'Encode' { - Switch ($TextEncoding) - { - 'ASCII' {$StringValue = [System.Text.Encoding]::ASCII.GetBytes("$Value")} - 'BigEndianUnicode' {$StringValue = [System.Text.Encoding]::BigEndianUnicode.GetBytes("$Value")} - 'Default' {$StringValue = [System.Text.Encoding]::Default.GetBytes("$Value")} - 'Unicode' {$StringValue = [System.Text.Encoding]::Unicode.GetBytes("$Value")} - 'UTF32' {$StringValue = [System.Text.Encoding]::UTF32.GetBytes("$Value")} - 'UTF7' {$StringValue = [System.Text.Encoding]::UTF7.GetBytes("$Value")} - 'UTF8' {$StringValue = [System.Text.Encoding]::UTF8.GetBytes("$Value")} - } # End Switch - Try - { - [System.Convert]::ToBase64String($StringValue) - } # End Try - Catch - { - Throw "String could not be converted to Base64. The value entered is below. `n$Value" - $Error[0] - } # End Catch - } # End Switch Encode - 'Decode' { - $EncodedValue = [System.Convert]::FromBase64String("$Value") - Switch ($TextEncoding) - { - 'ASCII' { - Try - { - [System.Text.Encoding]::ASCII.GetString($EncodedValue) - } # End Try - Catch - { - Throw "Base64 entered was not in a correct format. The value received is below. `n$Value" - } # End Catch - } # End Switch ASCII - 'BigEndianUnicode' { - Try - { - [System.Text.Encoding]::BigEndianUnicode.GetString($EncodedValue) - } # End Try - Catch - { - Throw "Base64 entered was not in a correct format. The value received is below. `n$Value" - } # End Catch - } # End Switch BigEndianUnicode - 'Default' { - Try - { - [System.Text.Encoding]::Default.GetString($EncodedValue) - } # End Try - Catch - { - Throw "Base64 entered was not in a correct format. The value received is below. `n$Value" - } # End Catch - } # End Switch Default - 'Unicode' { - Try - { - [System.Text.Encoding]::Unicode.GetString($EncodedValue) - } # End Try - Catch - { - Throw "Base64 entered was not in a correct format. The value received is below. `n$Value" - } # End Catch - } # End Switch Unicode - 'UTF32' { - Try - { - [System.Text.Encoding]::UTF32.GetString($EncodedValue) - } # End Try - Catch - { - Throw "Base64 entered was not in a correct format. The value received is below. `n$Value" - } # End Catch - } # End Switch UTF32 - 'UTF7' { - Try - { - [System.Text.Encoding]::UTF7.GetString($EncodedValue) - } # End Try - Catch - { - Throw "Base64 entered was not in a correct format. The value received is below. `n$Value" - } # End Catch - } # End Swithc UTF7 - 'UTF8' { - Try - { - [System.Text.Encoding]::UTF8.GetString($EncodedValue) - } # End Try - Catch - { - Throw "Base64 entered was not in a correct format. The value received is below. `n$Value" - } # End Catch - } # End Switch UTF8 - } # End Switch - } # End Switch Decode - } # End Switch -} # End PROCESS -} # End Function Convert-Base64 -`Thanks for reading! - -- [tobor](https://roberthosborne.com) - - [1]: https://docs.microsoft.com/en-us/powershell/scripting/developer/cmdlet/approved-verbs-for-windows-powershell-commands?view=powershell-7 diff --git a/content/articles/2020-11-06-icymi-powershell-week-of-06-november-2020.md b/content/articles/2020-11-06-icymi-powershell-week-of-06-november-2020.md deleted file mode 100644 index 6acd18135..000000000 --- a/content/articles/2020-11-06-icymi-powershell-week-of-06-november-2020.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 06-November-2020" -authors: - - Robin Dadswell -date: "2020-11-06T15:00:57+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/11/icymi-powershell-week-of-06-november-2020/ ---- - -Topics include Containers, Microsoft Teams, AMSI and more - - - - - - Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - - -###### - [*Windows PowerShell vs CMD – What’s the Difference*](https://www.techlila.com/powershell-vs-cmd/) - - - by Ankush Das on 2nd November - - - Most of you must have used the command prompt at some point in time – whether just for the sake of trying out an experiment or fixing an issue like recovering the data after getting affected by a shortcut virus. But, what about PowerShell which came into existence later? What is the difference between PowerShell and cmd? - - -###### - [*PowerShell and Containers*](https://www.phillipsj.net/posts/powershell-and-containers/) - - - by Jamie Phillips on 2nd November - - - Jamie demonstrates how to run PowerShell scripts inside the containers. - - -###### - [*Back to Basics: How to Manage Windows Services with PowerShell*](https://adamtheautomator.com/back-to-basics-how-to-manage-windows-services-with-powershell/) - - - by Adam Bertram on 3rd November - - - Learn how to get, start, stop, and restart services with Adam Bertram. - - -###### - [*Quick Tips: How do I restore a deleted Microsoft Teams Team using PowerShell.*](http://www.blogabout.cloud/2020/11/1930) - - - by Andrew Price on 5th November - - - When the team is deleted, it is held in the “recycle bin” for 30 days until it is permanently deleted. The following is the process of restoring a deleted team in Microsoft Teams. - - -###### - [*Bypass AMSI in PowerShell — A Nice Case Study*](https://medium.com/bugbountywriteup/bypass-amsi-in-powershell-a-nice-case-study-f3c0c7bed24d) - - - by Aidin Naserifard on 5th November - - - Bypass AMSI in PowerShell — A Nice Case Study - - -###### - [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/joiabt/selectstring_with_regex/) - - - working with select-string cmdlet. - - -###### - [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1323408339078946816) - - - PSReadLine 2.1.0 GA has been published! - - -###### - [*Youtube: How to hide the analyzer false positives?*](https://www.youtube.com/watch?v=E8zJyr_OZJ0&feature=emb_logo) - - - How to hide the analyzer false positives? diff --git a/content/articles/2020-11-13-icymi-powershell-week-of-13-november-2020.md b/content/articles/2020-11-13-icymi-powershell-week-of-13-november-2020.md deleted file mode 100644 index 915300374..000000000 --- a/content/articles/2020-11-13-icymi-powershell-week-of-13-november-2020.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 13-November-2020" -authors: - - Robin Dadswell -date: "2020-11-13T15:00:28+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -aliases: - - /2020/11/icymi-powershell-week-of-13-november-2020/ ---- - -Topics include Teams, Azure, Tic-Tac-Toe and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201113-functiondraft.md#introducing-psteams-20--support-for-adaptive-cards-hero-cards-list-cards-and-thumbnail-cards)[*Introducing PSTeams 2.0 – Support for Adaptive Cards, Hero Cards, List Cards and Thumbnail Cards*](https://evotec.xyz/introducing-psteams-2-0-support-for-adaptive-cards-hero-cards-list-cards-and-thumbnail-cards/) - -by Przemyslaw Klys on 9th November -Let's look at enhancements in the Teams PS module about what type of cards that can now be sent via PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201113-functiondraft.md#how-to-survive-refactoring-a-powershell-script-from-hell)[*How to Survive Refactoring a PowerShell Script from Hell.*](https://adamtheautomator.com/how-to-survive-refactoring-a-powershell-script-from-hell/) - -by Adam Bertram on 10th November -If you’ve ever inherited a script or set of PowerShell scripts, you probably know the frustration. You have a specific way of coding honed over years and years of experience and you come across a… let’s say monstrosity. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201113-functiondraft.md#announcing-psreadline-21-with-predictive-intellisense)[*Announcing PSReadLine 2.1+ with Predictive IntelliSense*](https://devblogs.microsoft.com/powershell/announcing-psreadline-2-1-with-predictive-intellisense/) - -by Jason Helmick on 10th November -With the latest release of PowerShell and PSReadLine Beta version, Jason walks us through how to enable and make use of predictive IntelliSense. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201113-functiondraft.md#announcing-az-predictor)[*Announcing Az Predictor.*](https://techcommunity.microsoft.com/t5/azure-tools/announcing-az-predictor/ba-p/1873104) - -by Damien Caro on 11th November -The Azure PowerShell modules expose over 4,000 cmdlets and, on average, ten parameters per cmdlet. Experienced PowerShell users will find the right cmdlet and parameter to achieve their goal but this can be more complicated for casual users. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201113-functiondraft.md#better-performance-counters-with-powershell)[*Better Performance Counters with PowerShell*](https://jdhitsolutions.com/blog/powershell/7872/better-performance-counters-with-powershell/) - -by Jeff Hicks on 12th November -Jeff Hicks show us a new addition to the latest release of PSScriptTools around Performance Counters. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201113-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/jprdli/tictactoe_in_powershell) - -u/Fireburd55 made tic-tac-toe in PowerShell and wanted to share it with the community. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201113-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/joeyaiello/status/1326666733000650752) - -Whether you're a #PowerShell 7.0 user or a Windows PowerShell diehard, make sure to check out latest GA release of PowerShell 7.1! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201113-functiondraft.md#youtube-catch-me-if-you-can-powershell-red-vs-blue)[*Youtube: Catch Me If You Can: PowerShell Red vs Blue*](https://www.youtube.com/watch?v=anFe9PZn3eg) - -A talk about how security and PowerShell interact and in some cases cause problems for each other. diff --git a/content/articles/2020-11-20-icymi-powershell-week-of-20-november-2020.md b/content/articles/2020-11-20-icymi-powershell-week-of-20-november-2020.md deleted file mode 100644 index 1fd4c87d7..000000000 --- a/content/articles/2020-11-20-icymi-powershell-week-of-20-november-2020.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 20-November-2020" -authors: - - Robin Dadswell -date: "2020-11-20T20:00:25+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/11/icymi-powershell-week-of-20-november-2020/ ---- - -Topics include Splatting, Print Servers, Active Directory and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201120-functiondraft.md#using-the-powershell-formatting-system-to-your-advantage)[*Using the PowerShell formatting system to your advantage*](https://joskw.gitbook.io/blog/object_formatting) - -by Jos Koelewijn on 15th November -A nice walkthrough of how PowerShell displays output. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201120-functiondraft.md#answering-the-powershell-registered-user-challenge)[*Answering the PowerShell Registered User Challenge*](https://jdhitsolutions.com/blog/powershell/7881/answering-the-powershell-registered-user-challenge/) - -by Jeff Hicks on 16th November -Take a look at Jeff's solution for the recent Iron Scripter Challenge around a computer's registered user. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201120-functiondraft.md#documenting-with-powershell-documenting-print-servers)[*Documenting with PowerShell: Documenting Print Servers*](https://www.cyberdrain.com/documenting-with-powershell-documenting-print-servers/%7Chttps://www.cyberdrain.com/documenting-with-powershell-documenting-print-servers/) - -by Kelvin Tegelaar on 17th November -Before I start on this; I agree. Printers are the bane of our existence in IT and I am hoping for a paperless environment each day. Unfortunately we’re not at that future just yet, so we have to document print servers and their settings. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201120-functiondraft.md#powershell-splatting-what-is-it-and-how-does-it-work)[*PowerShell Splatting: What is it and How Does it Work?*](https://adamtheautomator.com/powershell-splatting-what-is-it-and-how-does-it-work/) - -by Adam Listek on 18th November -In this article, you’ll learn how best to use PowerShell splatting to enhance your scripts and code! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201120-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/juolpi/whats_the_last_really_useful_powershell_technique/) - -Reddit users share recent PowerShell tips they have learned. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201120-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/joeyaiello/status/1328836828124745730) - -If you're already bored of the #PowerShell 7.1 GA, don't fret! The first PowerShell 7.2 preview is already live - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201120-functiondraft.md#youtube-active-directory-automation-with-powershell)[*Youtube: Active Directory automation with PowerShell*](https://www.youtube.com/watch?v=3k9xcPtE7Cs) - -Live stream showing off using PowerShell for working in Active Directory. diff --git a/content/articles/2020-11-29-update-2021-powershell-devops-global-summit.md b/content/articles/2020-11-29-update-2021-powershell-devops-global-summit.md deleted file mode 100644 index d0925107a..000000000 --- a/content/articles/2020-11-29-update-2021-powershell-devops-global-summit.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: "Update: 2021 PowerShell + DevOps Global Summit" -authors: - - Mike Kanakos -date: "2020-11-29T18:00:38+00:00" -categories: - - Announcements - - PowerShell Summit -tags: - - PowerShell Summit -legacy_featured_image: /wp-content/uploads/2020/11/Asset-4@1x.png -aliases: - - /2020/11/update-2021-powershell-devops-global-summit/ ---- - -Hello PowerShell and Automation family! - - -It’s time to get excited for the PowerShell + DevOps Global Summit, which is  -returning April 27-29, 2021 -as a virtual event - -. I’m here to share with you some details we have planned for this year’s event. The upcoming summit will differ from years past, since -this event will be 100% virtual -. You may wonder what a virtual event would be like, and is it worth it to attend? - - -**What is the PowerShell and DevOps Global Summit? - **PowerShell and DevOps experts from all over the world, including members from the PowerShell team, will join to discuss and learn about maximizing PowerShell in the workplace in 20+ fast-paced, knowledge-packed presentations. The Summit is also the place to explore and further your knowledge of DevOps principles and practices in a cross-platform environment. We will help you make new connections, learn new techniques, and offer something to your peers and colleagues when you return. - - -**When is the event?** - - -The event takes place - - online from April 27-29, 2021 - -. - - -**Is this a free event? - **No, - it is not a free event -. The PowerShell Summit has always been a paid event, and this year is no different. The event will be online, but you will need to purchase a ticket to attend the sessions. -Tickets for past events have been approximately $1700 dollars each -. - - - -The tickets for this year’s virtual event will be significantly less. - - -We’ll announce official ticket pricing at the end of December - -. - - -**What will the tickets cost, and when can I buy them? - ** -Tickets will go on sale Friday, January 15, 2021. - We will announce detailed ticket information at the end of December. The latest information can always can be found at our official event website:** [PowerShellSummit.org](https://events.devopscollective.org/event/powershell-devops-global-summit-2021/)** . - - -**What is planned for the 2021 PowerShell and DevOps Global Summit? - **The PowerShell + Devops Global Summit has always been the premiere event of the year to meet people, share ideas and learn new concepts, and the next conference will be no different. We plan to have the same amazing opportunities for attendees to who attend this virtual PowerShell + Devops Global Summit. - - - -The event this year will be three days long - and will feature some of the brightest minds in the community and from Microsoft. We strive to bring the best content to attendees each year, and this year will be no different. -Our event will have a minimum of 8 speaker led sessions each day for attendees to take part in -. Each session will have opportunities to talk with other attendees and ask the presenters questions. However, this will not be the same as attending an online meeting. The conferencing software will provide for a unique experience that will allow much greater participation than if you were attending a meeting with Teams or Zoom. - - - -There will be keynote sessions - from prominent industry leaders and some deep-dive sessions from vendors who have generously supported our event. - We will also continue our tradition of presenting lightning demos - that are rapid fire, short 5 to 8 minute demos. Presenting the lightning demos in the past has always been a challenge of trying to fit in all the content in the limited time we had in a live event. -This year we will have more options for presenting lightning demos - and we expect to have more demos to share. - - -Besides the three-day event, -all sessions will be available on-demand for Summit attendees for an additional 12 months -; that includes keynotes, speaker & vendor led sessions, and lightning demos. All content from the live event will be available on-demand, plus some additional content that won’t make it into the live event. - - -**What else is offered? ** - - -Each attendee will have access to the recorded sessions after the Summit end for an additional 12 months. There will be some swag for attendees and opportunities to win additional swag from vendors. - - -**Who will be speaking at the PowerShell and DevOps Global Summit 2021? - **Great question! As always, our speakers are from and represent the community. -We will open our speaker submission process on Nov 30th -. Anyone can submit, but we’re -looking for the best of the best -. We are looking for a minimum of 30 speaker sessions, of which 24 will make it to the Summit live event. All accepted submissions will be available after the Summit ends via our Summit Archive catalog. - Anyone looking to submit a lightning demo can also start submitting on Nov 30th -. We’ll have a separate announcement about the submission process and the details involved in that process later in the week. - - - -Our submission process will continue until Jan 15th, 2021 -**.** Once the submission process ends, we will announce the lineup for speakers publicly. Besides our community speakers, - -members of the Microsoft PowerShell team will perform community demos and share product announcements - -. diff --git a/content/articles/2020-12-04-icymi-powershell-week-of-27-november-2020-04-december-2020.md b/content/articles/2020-12-04-icymi-powershell-week-of-27-november-2020-04-december-2020.md deleted file mode 100644 index 1543c523b..000000000 --- a/content/articles/2020-12-04-icymi-powershell-week-of-27-november-2020-04-december-2020.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 27-November-2020 & 04-December-2020" -authors: - - Robin Dadswell -date: "2020-12-04T19:09:00+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/12/icymi-powershell-week-of-27-november-2020-04-december-2020/ ---- - -Topics include Secret Santa, Microsoft Graph, NAS devices and more.. -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201204-functiondraft.md#powershell-secret-santa-sent-via-android-sms)[*Powershell Secret Santa, sent via Android SMS*](https://jackmallender.com/2020/11/25/powershell-secret-santa-sent-via-android-sms/) - -by Jack Mallender on 25th November -Sending SMS via Android using Powershell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201204-functiondraft.md#microsoft-graph-api-powershell-azuread-app)[*Microsoft Graph API PowerShell AzureAD App*](https://itfordummies.net/2020/11/29/microsoft-graph-api-powershell-azuread-app/) - -by edemilliere on 29th November -Today we’ll talk about the Microsoft Graph API, PowerShell & AzureAD application. As you may know, the Microsoft Graph API is the data source where you can find everything about Office 365 and everything that’s interacting with it. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201204-functiondraft.md#monitoring-with-powershell-monitoring-nas-devices)[*Monitoring with PowerShell: Monitoring NAS devices*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-nas-devices/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-nas-devices) - -by Kelvin Tegelaar on 1st December -A quick overview of using SSH to monitor NAS (and other SSH compatible) devices. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201204-functiondraft.md#secrets-management-with-azure-key-vault-and-powershell)[*Secrets management with Azure Key Vault and Powershell*](https://www.scriptinglibrary.com/languages/powershell/secrets-management-with-azure-keyvault-and-powershell/) - -by Paolo Frigo on 2nd December -A short but useful post on using Azure Key Vault to store secrets. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201204-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/k4kk6d/want_to_practice_your_skills_advent_of_code_2020/) - -Join other Redditors and sharpen your PowerShell skills with the 2020 advent of code. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201204-functiondraft.md#youtube-powershell-lightning-talk-advanced-toast-notifications-in-powershell)[*Youtube: PowerShell Lightning Talk: Advanced Toast Notifications in PowerShell*](https://www.youtube.com/watch?v=boNaJv206Tw) - -Join Josh King as he does a fast paced lightning talk for RTPSUG showing you how to use Toast notifications. diff --git a/content/articles/2020-12-11-icymi-powershell-week-of-11-december-2020.md b/content/articles/2020-12-11-icymi-powershell-week-of-11-december-2020.md deleted file mode 100644 index 2ca7d4583..000000000 --- a/content/articles/2020-12-11-icymi-powershell-week-of-11-december-2020.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 11-December-2020" -authors: - - Robin Dadswell -date: "2020-12-11T15:00:57+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/12/icymi-powershell-week-of-11-december-2020/ ---- - -Topics include Graph, DateTimes, JSON, Crescendo and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [*Announcing PowerShell Crescendo Preview.1*](https://devblogs.microsoft.com/powershell/announcing-powershell-crescendo-preview-1/) - -by Jason Helmick on 8th December -Crescendo provides the tools to easily wrap a native command to gain the benefits of PowerShell cmdlets. Wrapping native commands into Crescendo cmdlets can provide parameter handling like prompting for mandatory parameters and tab-completion for parameter values. Crescendo cmdlets can take the text output from the native application and parse it into objects. The output objects allow you to take advantage of all the post processing tools such as Sort-Object, Where-Object, etc. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201211-functiondraft.md#demystifying-powershell-dates-datetime-and-formatting)[*Demystifying PowerShell Dates, DateTime and Formatting*](https://adamtheautomator.com/demystifying-powershell-dates-datetime-and-formatting/) - -by Vignesh Mudliar on 8th December -In this article, you’re going to learn all about dates and PowerShell! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201211-functiondraft.md#creating-powershell-property-names)[*Creating PowerShell Property Names*](https://jdhitsolutions.com/blog/powershell/7937/creating-powershell-property-names/) - -by Jeff Hicks on 8th December -An useful tip from Jeff Hicks on how to convert property names more meaningful - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201211-functiondraft.md#wrangling-rest-apis-and-json-with-powershell-four-demos)[*Wrangling REST APIs and JSON with PowerShell (Four Demos!)*](https://adamtheautomator.com/rest-apis-json-powershell/) - -by Christopher Bisset on 10th December -In this article, you will discover the basics behind JSON and PowerShell. You’ll learn how to use PowerShell to speak directly to a REST API and translate the data into something useful! You’ll also learn how to build a couple of handy ways to use JSON in your everyday PowerShell scripts too! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201211-functiondraft.md#you-should-be-customizing-your-powershell-prompt-with-psreadline)[*You should be customizing your PowerShell Prompt with PSReadLine*](https://www.thetechplatform.com/post/you-should-be-customizing-your-powershell-prompt-with-psreadline) - -by TheTechPlatform on 11th December -This article shows how to customize PowerShell port with PSReadLine. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201211-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/chris_noring/status/1336108042207760389) - -If you want to learn #powershell here we begin from scratch. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201211-functiondraft.md#youtube-microsoft-graph--powershell-script-from-scratch)[*Youtube: Microsoft Graph | Powershell Script from Scratch*](https://www.youtube.com/watch?v=yw5Cz5rO6_Y) - -PowerShell script from scratch to query Microsoft Graph API diff --git a/content/articles/2020-12-16-media-sync-organize-your-photos-and-videos-with-powershell.md b/content/articles/2020-12-16-media-sync-organize-your-photos-and-videos-with-powershell.md deleted file mode 100644 index be37b27b1..000000000 --- a/content/articles/2020-12-16-media-sync-organize-your-photos-and-videos-with-powershell.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: "Media Sync: Organize Your Photos and Videos with PowerShell" -authors: - - n2501r -date: "2020-12-16T22:34:38+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks - - Tools - - Tutorials -tags: - - File Management - - GUI - - Automation -aliases: - - /2020/12/media-sync-organize-your-photos-and-videos-with-powershell/ ---- - -Do you have photos and videos that you have taken over the years that are scattered all over the place? Do you want to have all your photos and videos organized? Do you want all your photos and videos to have a standardized naming scheme? If you answered YES to these questions, then this is the post for you. In this post, I will provide you with the PowerShell code and examples for how to use the Media Sync script. The Media Sync script utilizes the Shell.Application COM object to gather file metadata. Only files that have a picture or video metadata type will be processed. The script uses the date taken for pictures and the media created metadata fields to organize the photos and videos. If there is no date taken or media created available for a given file, the script will use the modify date instead. The script also ensures that you won't have any duplicate files by checking the file hashes of the two files in question. If the script detects duplicate files, it will only keep one copy of the file. There are also tools included to help you cleanup unwanted files or folders, delete empty directories and find duplicate files. The script has a simple menu driven PowerShell GUI similar to what I did in a previous [ -post -](https://spiderzebra.com/2020/05/21/how-to-create-a-simple-powershell-gui/). The Media Sync PowerShell script provides the following features: - - - - - COPY all photos and videos in a given folder structure (maintains original file in original location). - - - - - MOVE all photos and videos in a given folder structure (original file is renamed and moved). - - - - - Rename the photo or video based on the date the photo or video was taken. - - - - - Directory structure organized by year and month the photo or video was taken. - - - - - Ability to delete any empty folders in a given path, this will help with the cleanup process after you have moved photos and videos from the original location. - - - - - Remove all files based off a given file extension, this will help with the cleanup process after you have moved photos and videos from the original location. - - - - - Utilize Out-GridView to highlight and delete files or folders, this can be used to cleanup files of any file extension. - - - - - Find duplicate files in a given directory. - - - - - View files in a given directory via Out-GridView. - - - - Take a look for yourself at my site: - - -[SpiderZebra.com](https://spiderzebra.com/2020/12/16/media-sync-organize-your-pictures-and-videos-with-powershell/) - **Nick Richardson (@ChiefNSR)** diff --git a/content/articles/2020-12-18-icymi-powershell-week-of-18-december-2020.md b/content/articles/2020-12-18-icymi-powershell-week-of-18-december-2020.md deleted file mode 100644 index e857727c3..000000000 --- a/content/articles/2020-12-18-icymi-powershell-week-of-18-december-2020.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 18-December-2020" -authors: - - Robin Dadswell -date: "2020-12-18T15:00:37+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2020/12/icymi-powershell-week-of-18-december-2020/ ---- - -Topics include NuGet feeds, Azure, OpenSSH, PowerShell 7.2 and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201218-functiondraft.md#hosting-and-protecting-your-own-nuget-feed-with-proget)[*Hosting and Protecting Your Own NuGet Feed with ProGet*](https://adamcook.io/p/hosting-and-protecting-your-own-nuget-feed-with-proget/) - -by Adam Cook on 13th December -In this post, Adam will show us how to install Inedo’s ProGet to host your own NuGet feed (effectively your own PowerShell Gallery). - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201218-functiondraft.md#how-to-deploy-an-azure-vm-to-availability-zone-powershell-guide)[*How to Deploy an Azure VM to Availability Zone? (PowerShell Guide)*](https://www.rebeladmin.com/2020/12/how-to-deploy-an-azure-vm-to-availability-zone-powershell-guide/) - -by Dishan Francis on 14th December -Dishan walks us through how we can deploy Azure Windows Virtual Machine to Azure Availability Zone by using Azure PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201218-functiondraft.md#media-sync-organize-your-photos-and-videos-with-powershell)[*Media Sync: Organize Your Photos and Videos with PowerShell*](https://spiderzebra.com/2020/12/16/media-sync-organize-your-pictures-and-videos-with-powershell/) - -by Nick Richardson on 16th December -In this post, Nick walks us through how to organize your media (photos and videos) using PowerShell - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201218-functiondraft.md#deploy-openssh-server-to-windows-10)[*Deploy OpenSSH Server to Windows 10*](https://jdhitsolutions.com/blog/powershell-7/7969/deploy-openssh-server-to-windows-10/) - -by Jeffery Hicks on 16th December -Jeff Hicks walks us through how to setup OpenSSH server and SSH remoting in PowerShell on Windows 10. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201218-functiondraft.md#how-to-copy-active-directory-groups-from-one-user-to-another-with-powershell)[*How to Copy Active Directory Groups from One User to Another with PowerShell*](https://petri.com/how-to-copy-active-directory-groups-from-one-user-to-another-with-powershell) - -by Russell Smith on 17th December -Ever needed to copy a user's group membership in AD - find out how to do it here. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201218-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/kci2ma/josh_duffney_interview_josh_discusses_the/) - -Josh discusses the importance of learning PowerShell and how he started coding. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201218-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1338999597478207488) - -#PowerShell | PowerShell 7.2 Preview 2 release - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201218-functiondraft.md#youtube-run-tasks-on-timers-in-powershell)[*Youtube: Run Tasks on Timers in PowerShell*](https://www.youtube.com/watch?v=8dZbdl3wzW8) - -Instead of using your operating system's task scheduler (ie. systemd on Linux, MacOS, or Windows Task Scheduler), you can use PowerShell to create a Timer. diff --git a/content/articles/2020-12-20-pshsummit2021-call-for-speakers.md b/content/articles/2020-12-20-pshsummit2021-call-for-speakers.md deleted file mode 100644 index 47a5ccc4b..000000000 --- a/content/articles/2020-12-20-pshsummit2021-call-for-speakers.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: "PowerShell + DevOps Global Summit 2021: Calling All Speakers!" -authors: - - Mike Kanakos -date: "2020-12-20T16:00:47+00:00" -categories: - - Announcements - - Events - - News - - PowerShell Summit -tags: - - PowerShell Summit - - Call for Speakers -legacy_featured_image: /wp-content/uploads/2020/11/Asset-4@1x.png -aliases: - - /2020/12/pshsummit2021-call-for-speakers/ ---- - -Hello PowerShell and Automation family! - - -I hope you’re getting excited for the PowerShell + DevOps Global Summit 2021! I can’t wait to get back to seeing fantastic demos, exploring new topics and learning from others. I have written in the past about how the Summit 2021 event will be a little different because of it being a virtual event. But even though we won’t be together in person, there is one thing about Summit you expect over the years: AWESOME DEMOS! - - -The speakers that present at the Summit are some of the best and brightest minds in the community, and Summit 2021 will be no different. PowerShell Summit has always been known for having expert-level content, and Summit 2021 will continue that tradition. **We’re looking to fill about 35 speaking slots** and we’re looking for interesting and thought-provoking submissions. - - -If you would like to be a presenter at PowerShell + DevOps Global Summit 2021, then you need to submit a proposal for your topic. Details about the submission process can be found at [https://www.papercall.io/pshsummit2021](https://www.papercall.io/pshsummit2021), but let me give you a quick idea of what the process is like. The **submission period has already begun and continues through January 15th, 2021.** Once the period closes, we’ll review the submissions, pick our speakers, and notify them shortly after the close of the submission process. **Speakers will have until March 15th to submit their first draft of their Summit talk, and then final versions will be due by April 15th.** - - -So what kinds of topics are we looking for? - - -**We’re looking for unique topics that talk about real-world problems and solutions.** We want engaging content that grabs people and makes them want to come see your session! A general rule of thumb is that Summit sessions are demo heavy with lots of audience interaction but also light on the PowerPoint slides. Our attendees want to see the code and see it in action! Also Summit topics aren’t the same old, everyday topics you see elsewhere. We want unique, creative content that is exciting! - - -**All sessions for PowerShell + DevOps Global Summit 2021 will be 45 minutes and will be pre-recorded.** The presenters will host their sessions live and interact with attendees via chat, but the content they share will be pre-recorded. **When you submit a topic, it is expected that you understand you will be able to record your content and edit it as necessary.** We understand that not everyone is sure if their topic is the right fit for the Summit. If you would like to ask Summit organizers questions about the submissions process or want input on your idea for a topic, please contact us via [content@powershell.org](mailto:content@powershell.org) . We’re happy to discuss proposed sessions and offer some feedback. You can also reach Summit organizers on the #conferences channel inside the PowerShell Slack and Discord forums. - - -There’s plenty more detail at [https://www.papercall.io/pshsummit2021](https://www.papercall.io/pshsummit2021) , so make sure you stop by and read up on all the details. **The deadline for submitting your proposal ends January 15th! Get those submissions submitted ASAP and start getting ready to build your outstanding demos!** - - -Good luck and and I am looking forward to seeing all the amazing content at Summit! diff --git a/content/articles/2020/01/196307-2/index.md b/content/articles/2020/01/196307-2/index.md new file mode 100644 index 000000000..b84ee5d2b --- /dev/null +++ b/content/articles/2020/01/196307-2/index.md @@ -0,0 +1,36 @@ +--- +url: /articles/2020-01-03-196307-2/ +title: Keeping Your Secrets Secure +authors: + - Eric Brookman (scriptingcaveman) +date: "2020-01-03T19:47:36+00:00" +categories: + - PowerShell for Admins +aliases: + - /2020/01/196307-2/ +--- + +Azure Key Vault: Keeping your Secrets Secure +I was tasked with creating a PowerShell script that would connect to a SFTP server and place a file. I immediately jumped at the opportunity and started thinking about what all I would need to accomplish this task. I knew I needed the script to be as secure as possible, but also knew I needed the username, password, and a key file so I could connect securely to the SFTP site. This brought up a number of security concerns. How could I be fully automated and not put that sensitive information in plain text in my script. Immediately I went to Powershell.org and started searching for ideas. I found there were a couple of really good ideas for securing this kind of data using built in encryption ( Protect-CMSMessage) and an extension that Dave Wyatt created, ProtectedData ( https://github.com/dlwyatt/ProtectedData). I spent numerous hours scraping through documentation from both sources. At the end of my quest through the wonderful world encryption, I ended up with the same problem. The decryption key and the data were still on the server and I had no way of monitoring its use. I started looking at third party key vaults. They would allow me to secure my data, log when it was accessed, and provide me the data easily when called through a REST API. The only thing was I was on a budget and very short timeline so I couldn’t write the PowerShell connector to the API. What a bust! +Alas! I found a Key Vault that not only had a REST API but had native PowerShell commandlets. Thanks, Microsoft! I started asking, what can I put in the vault and call from my script? I quickly discovered everything! +I created a key vault and started populating the data I wanted to secure. I chose to use Secrets to hold my username, password, SFTP server IP address, and Private Key. I connected to my Azure RM Account using my username / password. Using the built in commandlets, I would be able to pull the data I wanted. Obviously, I would need the server address: + + +`Get-AzureKeyVaultSecret -VaultName BlogVault -Name IPAddress +`This will return the secure object: +![](https://powershell.org/wp-content/uploads/2020/01/secure-object-300x108.png) +As you can see it is a secure string, but using POSH-SSH, I can’t pass this object as the computer name for the connection. Slight modification was needed: + + +`(Get-AzureKeyVaultSecret -VaultName BlogVault -Name IPAddress).SecretValueText +`This command gives me the string value of the secret that I stored. SUCCESS!! You could see the smoke coming from my keyboard as I typed my script with this knowledge. I didn’t even see the brick wall coming at me until I smacked it hard with my face. I connected to my Azure environment with my username and password! I am back at square one! Or so I thought. The Azure key vault has an API, which means it has to have a way for an application to connect. I found App Registrations in Azure. Create a new app, ignore the URI, add the application to the permissions for your key vault, copy the Application ID, Directory (Tenant) ID, and the Thumbprint of the certificate you used when creating the app. Now use that information to connect securely to your Azure RM Account. Using splatting, you can create the login information and log in with ease. When connecting using an application you need to specify “-ServicePrincipal”. + + +`$azureconnection = @{ + ApplicationID = “a3k43802-ckde-2kk3-5k4k-k2olsk30shhe8”; + TenantID = “28skckhh49-3983-28cj-dj3n-akcnfsio3983k”; + CertificateThumbprint = “A42695B978976C0925948DBA94AF0AC2D4BE425D” +} +Connect-AzureRmAccount -ServicePrincipal @azureconnection +`Back in business! After connecting to my Azure RM Account using the application, I started creating splats for the rest of my communications. I embedded the get commands inside my splats so I am not assigning any of the secret information to variables directly. I have now created an application that is fully automated. I wrapped it in a file watcher script recommended by kvprasson, so as soon as a file is put into the directory a SFTP session is created, the file is placed in the root of the SFTP server, and reusing part of a module I built I verify the hash is the same on both ends of the transfer. +As is true in many situations, there are many ways to skin this cat. The method I used may not be the best for your situation, however, it is a good way to keep sensitive data away from the server on which you are working. I am excited to see how many other ways I am able to use Azure Key Vaults in future applications. diff --git a/content/articles/2020/01/_index.md b/content/articles/2020/01/_index.md new file mode 100644 index 000000000..6b09986aa --- /dev/null +++ b/content/articles/2020/01/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from January 2020" +description: "PowerShell.org Articles published in January 2020." +--- diff --git a/content/articles/2020/01/book-shell-of-an-idea-the-untold-history-of-powershell/index.md b/content/articles/2020/01/book-shell-of-an-idea-the-untold-history-of-powershell/index.md new file mode 100644 index 000000000..1428dc3fb --- /dev/null +++ b/content/articles/2020/01/book-shell-of-an-idea-the-untold-history-of-powershell/index.md @@ -0,0 +1,19 @@ +--- +url: /articles/2020-01-22-book-shell-of-an-idea-the-untold-history-of-powershell/ +title: "Book: \"Shell of an Idea,\" the Untold History of PowerShell" +authors: + - Don Jones +date: "2020-01-22T16:42:23+00:00" +categories: + - Books +aliases: + - /2020/01/book-shell-of-an-idea-the-untold-history-of-powershell/ +--- + +I've launched a new book project, which I'm hoping you'll support: [**Shell of an Idea, the Untold History of PowerShell**][1] is now available for pre-purchase at a $10 discount on Leanpub. You'll get the initial introductory chapters right now, and when I start pumping out the main manuscript in April-May 2020, you'll get that too. The price will rise to the final $30 after the first 100 preorders, so don't delay too much if you want in on the deal. +This is a big project, and it's involving a few flights up to Redmond for sit-down interviews with key folks - hence the pre-order, to help fund those trips. I'm going _all_ the way back in time to the earliest days of PowerShell Monad Babylon Kermit, yeah it went through a lot of names and concepts! I plan to fill this not only with interesting facts, but also personal anecdotes from the folks who were there, and some back-of-house stories about the inevitable politics and challenges the shell saw on its path to life. +I'm also [collecting personal anecdotes][2] from people who've been impacted by PowerShell. I'd love to hear about life before PowerShell (how easy was automation back then, and how important was it to you?), how PowerShell changed your job or career, or anything like that. I'll weave all of that into the book too, because the story of PowerShell is _mainly_ the story of the people who made it and the people who adopted it. +Thanks for your support, and tell a friend! + + [1]: https://leanpub.com/shell-of-an-idea/ + [2]: https://donjones.com/2020/01/17/be-a-part-of-powershell-history-please/ diff --git a/content/articles/2020/01/icymi-powershell-week-of-03-january-2020/index.md b/content/articles/2020/01/icymi-powershell-week-of-03-january-2020/index.md new file mode 100644 index 000000000..b5b6659e3 --- /dev/null +++ b/content/articles/2020/01/icymi-powershell-week-of-03-january-2020/index.md @@ -0,0 +1,96 @@ +--- +url: /articles/2020-01-03-icymi-powershell-week-of-03-january-2020/ +title: "ICYMI: PowerShell Week of 03-January-2020" +authors: + - Robin Dadswell +date: "2020-01-03T16:10:53+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/01/icymi-powershell-week-of-03-january-2020/ +--- + +In the first ICYMI of 2020 the topics include: working with PDFs, AD Users, Remote Computers and more... + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + + +###### + [*Using PowerShell to Get (and Export) AD Group Members*](https://adamtheautomator.com/powershell-get-ad-group-members/?utm_source=linkedinstatusupdates&utm_medium=social&utm_campaign=newblogpostnotifications) + + + by Adam Bertram on 27th December + + + A popular use of PowerShell is working with Active Directory Directory Services (AD). There are so many time-saving things PowerShell can do with AD objects. Using PowerShell get AD group members and groups saves a ton of time. + + +###### + [*Merging, splitting and creating PDF files with PowerShell*](https://evotec.xyz/merging-splitting-and-creating-pdf-files-with-powershell/) + + + by Przemyslaw Klys on 29th December + + + What better way to end a good year than with the release of the new PowerShell module. If the title of today's blog post isn't giving it up yet, I wanted to share a PowerShell module called PSWritePDF that can help you create and modify (split/merge) PDF documents. + + +###### + [*Invoke-Command: Dealing with offline computers*](https://4sysops.com/archives/invoke-command-dealing-with-offline-computers) + + + by Mike Kanakos on 30th December + + + When you need to run PowerShell commands against a large set of computers with the PowerShell cmdlet Invoke-Command, you often have to deal with offline computers. In this post, you will learn how to deal with unresponsive machines. + + +###### + [*Using PowerShell to View and Change BIOS Settings*](http://woshub.com/powershell-view-change-bios-settings/) + + + posted on 30th December + + + Good article detailing how you can read and edit bios settings using WMI and PowerShell. + + +###### + [*Step-by-Step Guide: Crete Azure VM using Managed Image*](http://www.rebeladmin.com/2019/12/step-step-guide-crete-azure-vm-using-managed-image-powershell-guide/) + + + by Dishan M. Francis on 30th December + + + If you have a custom image to deploy on prem you would use something like WDS. In this post Dishan explains how to deploy your managed images in Azure. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/eia1a9/helpdeskremote_support_powershell_script_expedite/) + + + Reddit user shares a github project. The project is a PowerShell based command line tool to help with routine tech support tasks. + + +###### + [*Tweet of the Week*](https://twitter.com/JeffHicks/status/1212370429060567042?s=20) + + + Happy New Year [https://github.com/jdhitsolutions/PSCalendar](https://github.com/jdhitsolutions/PSCalendar) + + +###### + [*Youtube: PowerShell Notebook Module*](https://www.youtube.com/watch?v=3b_LQn18oHI&feature=youtu.be) + + + Doug Finke talks through automation of PowerShell Notebooks with PowerShell at the command line, exports to Excel and more. diff --git a/content/articles/2020/01/icymi-powershell-week-of-10-january-2020/index.md b/content/articles/2020/01/icymi-powershell-week-of-10-january-2020/index.md new file mode 100644 index 000000000..34edee38b --- /dev/null +++ b/content/articles/2020/01/icymi-powershell-week-of-10-january-2020/index.md @@ -0,0 +1,96 @@ +--- +url: /articles/2020-01-10-icymi-powershell-week-of-10-january-2020/ +title: "ICYMI: PowerShell Week of 10-January-2020" +authors: + - Robin Dadswell +date: "2020-01-10T15:00:25+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/01/icymi-powershell-week-of-10-january-2020/ +--- + +Topics include reinstalling Windows Store Apps, Auditing Computers, PowerShell 7 and more. + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + + +###### + [*Reprovision Windows 10 Apps... Wait, What? - Systems Management Squad*](https://sysmansquad.com/2020/01/06/reprovision-windows-10-apps-wait-what/) + + + by Cody Mathis on 6th January + + + Reverse Windows 10 AppX Deprovisioning. Restore the Windows Store, and any other AppX Package that has been removed. + + +###### + [*How to Revoke Azure AD Tokens from Expired AD Users*](https://adamtheautomator.com/azure-ad-token-expire/) + + + by Adam Bertram on 6th January + + + Learn how to build a PowerShell script that finds all expired AD user accounts and revoke Azure AD tokens in this tutorial. + + +###### + [*PowerShell 7 – Pipeline Chain Operators*](https://blog.ukotic.net/2020/01/07/powershell-7-pipeline-chain-operators/) + + + by Mark Ukotic on 7th January + + + With this release comes several new features that continue to build upon the previous versions. One of these new features being introduced are two new operators, && and ||, referred to as pipeline chain operators. + + +###### + [*Computer Auditing – Part 4 – Windows Services, DHCP Scopes, and IIS Websites*](https://hkeylocalmachine.com/?p=960) + + + by Kamal on 7th January + + + I’ve recently been looking at extending the standard set of auditing (from the previous scripts mentioned in Part 1, Part 2, and Part 3) to include DHCP scope information, and IIS-based website information. + + +###### + [*PowerShell's Secret Wildcard*](https://toastit.dev/2020/01/09/powershells-secret-wildcard/) + + + by Josh King on 9th of January + + + It's funny how you can be a daily PowerShell user for years and completely miss something about a feature you regularly use... such as the "like" operators accepting more than two different wildcards. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ekwwvb/powershell_modules_i_worked_on_in_2019/) + + + u/MadBoyEvo details all of his work in PowerShell during 2019, over 40 modules. + + +###### + [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1214711909301121027) + + + PowerShell 7 GA will come in February after an RC2 release. + + +###### + [*Youtube: Foreach-Object -Parallel*](https://www.youtube.com/watch?v=GSXFnk8UwQ0&feature=youtu.be) + + + Jason Helmick does a video discussing the -Parallel parameter in PS Core's Foreach-Object cmdlet. diff --git a/content/articles/2020/01/icymi-powershell-week-of-16-january-2020/index.md b/content/articles/2020/01/icymi-powershell-week-of-16-january-2020/index.md new file mode 100644 index 000000000..a97d0ab72 --- /dev/null +++ b/content/articles/2020/01/icymi-powershell-week-of-16-january-2020/index.md @@ -0,0 +1,96 @@ +--- +url: /articles/2020-01-17-icymi-powershell-week-of-16-january-2020/ +title: "ICYMI: PowerShell Week of 16-January-2020" +authors: + - Robin Dadswell +date: "2020-01-17T15:00:38+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/01/icymi-powershell-week-of-16-january-2020/ +--- + +Topics include Azure Monitor Logs, Office 365 Mailbox sizes, Brackets and more. + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + + +###### + [*Creating Linked HTML with PowerShell*](http://jdhitsolutions.com/blog/powershell/7163/creating-linked-html-with-powershell/) + + + by Jeff Hicks on 13th January + + + Take a dive into solving the niche problem of hyperlinks in HTML reports. + + +###### + [*JUST A TIP #12 – GET ALL THE ALIASES BY CMDLET IN POWERSHELL*](https://kpatnayakuni.com/2020/01/13/just-a-tip-12-get-all-the-aliases-by-cmdlet-in-powershell/?utm_source=dlvr.it&utm_medium=twitter) + + + by Kiran Patnayakuni on 13th January + + + A small tip about aliases. + + +###### + [*PowerShell: Unterstanding Parentheses, Braces and Square Brackets*](https://sid-500.com/2020/01/14/powershell-unterstanding-parentheses-braces-and-square-brackets/) + + + by Patrick Gruenauer on 14th January + + + The goal for this blog post is to demystify the usage of PowerShell brackets for scripters and PowerShell enthusiasts. You can find braces everywhere, in scripts, in the PowerShell help and in simple one-liners. And there are three types. Let’s dive in. + + +###### + [*How to Monitor for Large Office 365 Mailbox Size with PowerShell*](https://adamtheautomator.com/monitor-office-365-mailbox-size/) + + + by June Castillote on 15th January + + + Learn how to monitor Office 365 mailbox sizes with PowerShell in this informative, how-to article. + + +###### + [*Sending and Querying Custom Log Data to Azure Monitor Logs*](https://blog.darrenjrobinson.com/sending-and-querying-custom-log-data-to-azure-monitor-logs/) + + + by Darren Robinson on 17th January + + + Learn how to not only send but query data from Azure Monitor Logs using PowerShell. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/eprre9/automating_fears/) + + + I’m a big advocate of automation. But my co-sysadmin often tell me to slow down and not make it do all for them because they wish to learn the hard way with point and click and typing all the cmdlets one by one so that when the scripts fails they are not completely lost... See some thoughts around this. + + +###### + [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1217956062092857344?s=20) + + + PowerShell 7 RC2 is out! One month till GA. + + +###### + [*Youtube: Event-based automation across hybrid environments using PowerShell in Azure Functions | THR2160*](https://www.youtube.com/watch?v=z0DCFxlTN8k) + + + An Ignite session discussing the just released support for PowerShell in Azure Functions and how this can be used to deliver event-based automation. diff --git a/content/articles/2020/01/icymi-powershell-week-of-24-january-2020/index.md b/content/articles/2020/01/icymi-powershell-week-of-24-january-2020/index.md new file mode 100644 index 000000000..218e49681 --- /dev/null +++ b/content/articles/2020/01/icymi-powershell-week-of-24-january-2020/index.md @@ -0,0 +1,89 @@ +--- +url: /articles/2020-01-24-icymi-powershell-week-of-24-january-2020/ +title: "ICYMI: PowerShell Week of 24-January-2020" +authors: + - Robin Dadswell +date: "2020-01-24T15:00:24+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/01/icymi-powershell-week-of-24-january-2020/ +--- + +Topics include PSboundparamters, Email with SendGrid, Universal Automation and more. + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + + +###### + [*Using $PSBoundParameters in PowerShell*](https://www.gngrninja.com/script-ninja/2020/1/19/using-psboundparameters-in-powershell) + + + by Mike Roberts on 19th January + + + Ever use $PSBoundParameters to see what parameters are passed into your function. Mike will tell you everything you need to know about $PSBoundParameters in his blog post. + + +###### + [*Send email from PowerShell with SendGrid*](https://4bes.nl/2020/01/19/send-email-from-powershell-with-sendgrid/) + + + by Barbara Forbes on 19th January + + + Since the system behind Send-MailMessage is no longer maintained Barbara explores an alternative method of sending email from PowerShell, SendGrid. + + +###### + [*Monitoring Active Directory with the PowerShell module PSADHealth*](https://4sysops.com/archives/monitoring-active-directory-with-the-powershell-module-psadhealth/) + + + by Mike Kanakos on 20th January + + + The goal of this module is to enable you to know when the core pieces of Active Directory aren't working as expected so you can take action. + + +###### + [*Deep Dive: Break, Continue, Return, Exit in PowerShell*](https://ridicurious.com/2020/01/23/deep-dive-break-continue-return-exit-in-powershell/) + + + by Manoj Sahoo on 23rd January + + + Manoj does a deep dive on code execution terminators in PowerShell. + + +###### + [*The PowerShell foreach Loop: Examples, Demos and Learning*](https://adamtheautomator.com/powershell-foreach/) + + + by June Castillote on 23rd January + + + Learn how all the PowerShell foreach loops work with tons of examples and real-world use cases in this informative article. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/er0lfv/four_commands_to_help_you_track_down_insecure/) + + + Four commands to help you track down insecure LDAP Bindings before March 2020. In march 2020, Microsoft is supposed to block insecure LDAP bindings. I've updated my 3 Powershell modules to help you track down machines/accounts doing that. + + +###### + [*Youtube: Introducing Universal Automation*](https://www.youtube.com/watch?v=u9Hq4X8V7VY&feature=youtu.be) + + + Universal Automation is the automation platform for PowerShell. This video is a recording of a webinar that we produced on 1-22-2020. We provide an overview of UA followed by several demos of the product. diff --git a/content/articles/2020/01/icymi-powershell-week-of-31-january-2020/index.md b/content/articles/2020/01/icymi-powershell-week-of-31-january-2020/index.md new file mode 100644 index 000000000..55ccab98d --- /dev/null +++ b/content/articles/2020/01/icymi-powershell-week-of-31-january-2020/index.md @@ -0,0 +1,96 @@ +--- +url: /articles/2020-01-31-icymi-powershell-week-of-31-january-2020/ +title: "ICYMI: PowerShell Week of 31-January-2020" +authors: + - Robin Dadswell +date: "2020-01-31T15:00:24+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/01/icymi-powershell-week-of-31-january-2020/ +--- + +Topics include Azure service updates, Publishing to the PowerShell Gallery, Office 365, Clusters and more. + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + + +###### + [*Retrieve Azure Service Updates and Publish as News Letter*](https://chen.about-powershell.com/2020/01/retrieve-azure-service-updates-and-publish-as-news-letter-powershell/?fbclid=IwAR1SJZGqMtG_flaw4Y-Oh7npAlSKfgTZWc3_YbYVCI8eutRI-CJi4zmHFds) + + + by Chen V on 26th January + + + It was a simple ask “How do we know Azure Service Updates?” The answer is to use the link (Azure Service Updates)! But, in this blog post I will show how to retrieve the feed information programmatically, store in Azure Table Storage and send weekly newsletter to business users + + +###### + [*How to Publish Your First PowerShell Gallery Package*](https://www.jeffbrown.tech/post/how-to-publish-your-first-powershell-gallery-package) + + + by Jeff Brown on 26th January + + + If you've written a module or script that you feel others could benefit using, definitely check out publishing it to the broader community. In fact, that's what this post is about. + + +###### + [*Office 365: Add User Accounts and Mailboxes with PowerShell*](https://sid-500.com/2020/01/28/office-365-add-user-accounts-and-mailboxes-with-powershell/) + + + by Patrick Gruenauer on 28th January + + + More and more companies are moving to the cloud. Subscribing cloud services means less hardware maintenance, more comfort, and an “always-on” feeling. As an administrator, you have to get familiar with the administration of cloud services, especially with the basics like creating user accounts and user mailboxes. In this article I will carry out adding user accounts along with adding user mailboxes with Powershell. + + +###### + [*Downloading PowerShell Language Reference (or any file)*](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/downloading-powershell-language-reference-or-any-file) + + + by Prateik Singh on 29th January + + + Invoke-WebRequest can easily download files for you. The code below downloads the PowerShell Language Reference published by PowerShell Magazine, and opens it with the associated program. + + +###### + [*Parsing Failover Cluster Validation Report in PowerShell*](https://www.powershellmagazine.com/2020/01/30/parsing-failover-cluster-validation-report-in-powershell/) + + + by Ravikanth C on 30th January + + + Test-Cluster can create an HTML report but it isn't very useable. Ravikanth's blog post goes into detail about converting the Test-Cluster output into something more usable for automation. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/etg1ct/pop_up_a_simcitystyle_powershell_loading_screen/) + + + User Weebsnore shares a Sim city style loading screen for the PowerShell console. + + +###### + [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1221921759852523520) + + + #PowerShell Core 6.2.4 is out! + + +###### + [*Youtube: PSS: Code, Commit, Deploy. Starting your 3 step journey to using Pipelines with Stephen Valdinger*](https://www.youtube.com/watch?v=h-ZJ1UlLVis&feature=youtu.be) + + + PowerShell Saturday is a training event for all things PowerShell. The event was held in Raleigh, North Carolina and hosted by Research Triangle PowerShell User Group. Stephen Valdinger goes through the process of using an Azure Dev Ops Pipeline. This process is useful in developing, maintaining, and deploying code. diff --git a/content/articles/2020/01/untitled/index.md b/content/articles/2020/01/untitled/index.md new file mode 100644 index 000000000..5ca358f04 --- /dev/null +++ b/content/articles/2020/01/untitled/index.md @@ -0,0 +1,14 @@ +--- +url: /articles/2020-01-27-/ +title: Using Powershell with Ansible – Part 1 +authors: + - adazlian12 +date: "2020-01-27T00:00:00+00:00" +categories: + - PowerShell for Admins +draft: true +--- + +This is the first part of a 5 part series on working with Powershell & Ansible. In this first part we'll be discussing the basics of Ansible itself. +For those unfamiliar Ansible is a free & open source infrastructure configuration tool. If you're familiar with tools such as Chef, Puppet, or Terraform it's broadly similar. Tools like Ansible are designed to configure infrastructure solely through code and allow you to easily test & audit that configuration. Infrastructure can be anything from servers, to databases, to network switches, to cloud resources. Thee tools define a configuration language as well as the means of testing state, pushing out changes, verifying changes, etc. +Using a tool like Ansible lets you maintain the state - how its configured - of your infrastructure in code. This lets you easily deploy configuration changes to many servers at once, satisfy security or regulatory compliance issues with infrastructure, apply peer review to configurations (as its all just code), reduce errors in configuration due to missed settings, and rapidly roll out changes to many pieces of infrastructure at once. Scripting tools like Powershell let you extend Ansible to other scenarios. diff --git a/content/articles/2020/02/_index.md b/content/articles/2020/02/_index.md new file mode 100644 index 000000000..32709215a --- /dev/null +++ b/content/articles/2020/02/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from February 2020" +description: "PowerShell.org Articles published in February 2020." +--- diff --git a/content/articles/2020/02/icymi-powershell-week-of-07-february-2020/index.md b/content/articles/2020/02/icymi-powershell-week-of-07-february-2020/index.md new file mode 100644 index 000000000..989425afc --- /dev/null +++ b/content/articles/2020/02/icymi-powershell-week-of-07-february-2020/index.md @@ -0,0 +1,96 @@ +--- +url: /articles/2020-02-07-icymi-powershell-week-of-07-february-2020/ +title: "ICYMI: PowerShell Week of 07-February-2020" +authors: + - Robin Dadswell +date: "2020-02-07T16:24:49+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/02/icymi-powershell-week-of-07-february-2020/ +--- + +Topics include PowerShell Secrets Management, Regex, DBA Tools and More. + + + + + + Special thanks to Robin, Kevin, Prasoon and Kiran. + + +###### + [*Setup Azure VM with user assigned managed identity to access Azure Key Vault.*](https://kpatnayakuni.com/2020/02/04/azure-powershell-setup-azure-vm-with-user-assigned-managed-identity-to-access-azure-key-vault/) + + + by Kiran Patnayakuni on 4th February + + + Kiran talks about securing your Azure key vault by using a managed identity + + +###### + [*Intune + Chocolatey: A Match Made in Heaven*](https://www.thelazyadministrator.com/2020/02/05/intune-chocolatey-a-match-made-in-heaven/) + + + by Brad Wyatt on 5th February + + + One time consuming task of Microsoft Intune is packaging up applications. Brad goes into how he uses Chocolatey to simplify this process + + +###### + [*Publishing NuGet Packages to Azure Artifacts*](https://adamtheautomator.com/azure-artifacts-nuget/) + + + by Adam Bertram on 6th February + + + Learn how to publish Azure Artifacts NuGet packages automatically with Azure Pipelines in this step-by-step tutorial! + + +###### + [*Learn More about PowerShell and Regular Expressions*](http://jdhitsolutions.com/blog/powershell/7222/learn-more-about-powershell-and-regular-expressions/) + + + by Jeff Hicks on 5th February + + + If you've never used regular expressions before you are missing out. Regex is a valuable tool for parsing strings, get a quick overview of it in this post. + + +###### + [*Secrets Management Development Release*](https://devblogs.microsoft.com/powershell/secrets-management-development-release/) + + + by Sydney Smith on 6th February + + + Microsoft released a development version of their secrets management module. Check out this article to find out more. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ewpljo/blog_post_learn_how_to_use_exception_messages/) + + + Learn about using Try Catch and providing valuable feedback to your users with error messages. + + +###### + [*Tweet of the Week*](https://twitter.com/rsrychro/status/1224898531212787714?s=20) + + + RTPSUG is continuing to release content from their PowerShell Saturday 2019, if you've never used DBA tools you should check it out. + + +###### + [*Youtube: Handling Errors in PowerShell with Try..Catch..Finally*](https://www.youtube.com/watch?v=LFWxH-bexNk) + + + The try..catch..finally statements in PowerShell allow you to handle exceptions (errors) in your scripts. One of the unique concepts in PowerShell exceptions is the notion of a terminating error versus a non-terminating error. In this video, we'll explore the difference between both types of exceptions, and learn how to effectively use try..catch..finally to handle exceptions in a calculated manner. In addition, we'll take a look at how to use multiple catch blocks to handle specific types of errors uniquely. diff --git a/content/articles/2020/02/icymi-powershell-week-of-14-february-2020/index.md b/content/articles/2020/02/icymi-powershell-week-of-14-february-2020/index.md new file mode 100644 index 000000000..55364c4e7 --- /dev/null +++ b/content/articles/2020/02/icymi-powershell-week-of-14-february-2020/index.md @@ -0,0 +1,96 @@ +--- +url: /articles/2020-02-14-icymi-powershell-week-of-14-february-2020/ +title: "ICYMI: PowerShell Week of 14-February-2020" +authors: + - Robin Dadswell +date: "2020-02-14T15:12:19+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/02/icymi-powershell-week-of-14-february-2020/ +--- + +Topics include Windows Terminal, Pesterv5, Monitoring and More. + + + + + + Special thanks to Robin, Kevin, Prasoon and Kiran + + +###### + [*The real purpose of the Finally statement in PowerShell*](https://itluke.online/2020/02/10/the-real-purpose-of-the-finally-statement-in-powershell/) + + + by Luc Fullenwarth on 10th February + + + You've heard of try/catch but there is another part to it, try/catch/finally. A lot of people struggle with the purpose of 'finally' but Luc tries to help out in this post. + + +###### + [*PowerShell Remoting Profiles with Windows Terminal*](http://jdhitsolutions.com/blog/powershell/7242/powershell-remoting-profiles-with-windows-terminal/) + + + by @JeffHicks on 10th February + + + Configuring the Windows Terminal as a PowerShell console and creating profiles for remote sessions. + + +###### + [*Monitoring with PowerShell: Monitoring psexec execution*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-psexec-execution/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-psexec-execution&fbclid=IwAR2uuQ8ET43gfO3rXZFs5XE8wKRMLHCsaoox51PvUOhvdeshbMe02YCFHAo) + + + by @KelvinTegelaar on 10th February + + + A nice way to monitor psexec execution using certificate thumbprint + + +###### + [*How to Apply DSC Configurations to VMs in Azure ARM Templates*](http://adamtheautomator.com/azure-dsc-arm-template/) + + + by Adam Bertram on 12th February + + + If you're deploying Azure Windows virtual machines (VMs) via ARM templates and need to configure Windows, this article is for you. In this tutorial, you're going to learn how to use the Desired State Configuration (DSC) extension for ARM templates to seamlessly deploy and configure an Azure VM Scale Set with a single template. + + +###### + [*Monitoring the Network Load with Powershell*](https://www.scriptinglibrary.com/languages/powershell/monitoring-the-network-load-with-powershell/) + + + by Paolo Frigo on 13th February + + + Paolo shares a script he created for monitoring Network usage using PowerShell + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/f0sy6y/cleaning_data/) + + + User akaBrotherNature shared some great RegEx that helped him clean up data by removing trailing spaces, multiple spaces and more. + + +###### + [*Tweet of the Week*](https://twitter.com/nohwnd/status/1226290016445517824) + + + Announcement of Pester v5 beta release. + + +###### + [*YouTube: Register for Filesystem Events with PowerShell*](https://www.youtube.com/watch?v=Gf-xHknIS9g) + + + In this video, you'll learn about the Docker, PowerShell, and Remote-Containers extensions for Microsoft Visual Studio Code. Once we review the essentials of these useful extensions, we'll use them to explore the process of registering for filesystem events using native PowerShell code. diff --git a/content/articles/2020/02/icymi-powershell-week-of-21-february-2020/index.md b/content/articles/2020/02/icymi-powershell-week-of-21-february-2020/index.md new file mode 100644 index 000000000..5cdde1452 --- /dev/null +++ b/content/articles/2020/02/icymi-powershell-week-of-21-february-2020/index.md @@ -0,0 +1,96 @@ +--- +url: /articles/2020-02-21-icymi-powershell-week-of-21-february-2020/ +title: "ICYMI: PowerShell Week of 21-February-2020" +authors: + - Robin Dadswell +date: "2020-02-21T16:17:51+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/02/icymi-powershell-week-of-21-february-2020/ +--- + +Topics include PowerShell Arrays, Monitoring your bandwidth, Azure Pipelines and more + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + +###### + [*Building Arrays and Collections in PowerShell*](https://vexx32.github.io/2020/02/15/Building-Arrays-Collections/) + + + by Joel Sallow on 15th February + + + Joel explained in detailed approach of building Arrays and Collections in PowerShell + + +###### + [*Monitoring with PowerShell: Monitoring internet speeds*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-internet-speeds/) + + + by @KelvinTegelaar on 16th February + + + Kelvin made the following PowerShell script that uses the CLI utility from [speedtest.net](http://speedtest.net) in order to monitor and alert on + + +###### + [*IntelliSense for Parameters*](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/intellisense-for-parameters-part-2) + + + by @PowerTip on 17th February + + + You are a PowerShell Professional, passionate about improving your code and skills? You take security seriously and are always looking for the latest advice and guidance to make your code more secure and faster? + + +###### + [*Running PowerShell Scripts in Azure DevOps Pipelines*](https://adamtheautomator.com/azure-devops-pipelines-powershell/) + + + by @adbertram on 18th February + + + Did you know you can natively run scripts like PowerShell in Azure DevOps (AzDo) pipelines? By using the tips and techniques you’ll learn in this article, you’ll be well on your way to scripting your way to automation greatness. + + +###### + [*AzureRM PowerShell Commands that Don’t Exist when Enabling Compatibility Aliases in the Az Module*](https://mikefrobbins.com/2020/02/19/azurerm-powershell-commands-that-dont-exist-when-enabling-compatibility-aliases-in-the-az-module/) + + + by Mike F. Robbins on 19th February + + + AzureRM PowerShell module is only supported until December of 2020. It has been replaced by the Az PowerShell module which was introduced in December of 2018 + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/f6gn9q/finding_gpos_missing_permissions_that_may_prevent/) + + + User MadBoyEvo shares a script he used to fix broken permissions on 50+ GPOs in one of his domains + + +###### + [*Tweet of the Week*](https://twitter.com/dfinke/status/1229104907518693376) + + + Turn PowerShell docs into "executable documents" with this. + + +###### + [*Youtube: How to change creation, modified and accessed dates for files using PowerShell*](https://youtu.be/n9C81jtEZHI) + + + In this video I show you how to modify the dates for the file attributes, Created, Modified and Access. This can be handy when creating test files for log rotation or for testing backups. diff --git a/content/articles/2020/02/icymi-powershell-week-of-28-february-2020/index.md b/content/articles/2020/02/icymi-powershell-week-of-28-february-2020/index.md new file mode 100644 index 000000000..e39d34d1f --- /dev/null +++ b/content/articles/2020/02/icymi-powershell-week-of-28-february-2020/index.md @@ -0,0 +1,86 @@ +--- +url: /articles/2020-02-28-icymi-powershell-week-of-28-february-2020/ +title: "ICYMI: PowerShell Week of 28-February-2020" +authors: + - Robin Dadswell +date: "2020-02-28T17:05:14+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/02/icymi-powershell-week-of-28-february-2020/ +--- + +Topics include Subexpression, For Loops, Hyper-V and more + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + +###### + [*Handling PowerShell's Versatile Subexpressions*](https://vexx32.github.io/2020/02/24/Handling-PowerShell-Subexpressions/) + + + by @vexx32 on 24th February + + + Subexpressions are kind of like an inline function that always gets invoked immediately. You define a set of commands that all get invoked one after another, and then PowerShell processes all the output and either stores or outputs the results + + +###### + [*Documenting with Powershell: Documenting Hyper-V settings*](https://www.cyberdrain.com/documenting-with-powershell-documenting-hyper-v-settings/?utm_source=rss&utm_medium=rss&utm_campaign=documenting-with-powershell-documenting-hyper-v-settings) + + + by Kelvin Tegelaar on 24th February + + + Kelvin shares a tool which pull information from Hyper-V and turns the information into a document + + +###### + [*Fast Folder Sizes with PowerShell*](https://jdhitsolutions.com/blog/powershell/7317/fast-folder-sizes-with-powershell/) + + + by Jeff Hicks on 25th February + + + Jeff shows off a tool from his PSScriptTools module that uses .Net to speed up retrieving of file sizes. + + +###### + [*Back to Basics: The PowerShell For Loop*](https://adamtheautomator.com/powershell-for-loop/) + + + by June Castillote on 25th February + + + In this article, you will learn what the for loop in PowerShell is, understand its syntax and what makes up a for loop statement. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/f7h6se/powershell_7s_parallel_foreachobject_is_mind/) + + + u/Sunsparc discovers and explores Foreach-Object's new Parallel parameter in PowerShell 7 + + +###### + [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1233106090256035840?s=20) + + + Steve Lee anouncing some big news for the GA of PowerShell 7 + + +###### + [*Youtube: Getting started with customizing lists using PnP PowerShell*](https://youtu.be/1GPPxunPI40) + + + Community Demo from the SharePoint Developer Community bi-weekly meeting diff --git a/content/articles/2020/03/10-tips-for-powershell-summit-presenters/index.md b/content/articles/2020/03/10-tips-for-powershell-summit-presenters/index.md new file mode 100644 index 000000000..64726edd4 --- /dev/null +++ b/content/articles/2020/03/10-tips-for-powershell-summit-presenters/index.md @@ -0,0 +1,259 @@ +--- +url: /articles/2020-03-05-10-tips-for-powershell-summit-presenters/ +title: 10 Tips for PowerShell Summit Presenters +authors: + - Mike Kanakos +date: "2020-03-05T21:55:59+00:00" +categories: + - PowerShell Summit +aliases: + - /2020/03/10-tips-for-powershell-summit-presenters/ +--- + +PowerShell Summit 2020 is less than 60 days away! The list of presenters is final, and those presenters are putting finishing touches on their presentations. PowerShell Summit is a unique opportunity for presenters to show off their work to the community. For some, it’s a once in a lifetime opportunity, but it's also a nerve-wracking experience for many. + I have been lucky enough to be a presenter at Summit 2019. Now, I am on the team helping run the event. I am one of the few individuals who can say they were an attendee, a presenter and event planner for the summit. I thought I would offer some tips and advice for first-time presenters who are not sure what their first Summit presentation experience may be like. + I've come up with a handful of tips that presenters can use to help prepare for PowerShell summit. The list reads like a top 10 list, but there's no real order here. Rather, it is a list of useful things for presenters to consider as they prepare their work. + + + + + - + Tell a story + + + - + Don't count on the conference WiFi + + + - + Don't kill the audience with slides + + + - + Limit the amount of words on slides + + + - + Present live demos + + + - + Have a backup plan + + + - + Plan to finish your session early + + + - + Pre-stage everything! + + + - + Finish your presentation BEFORE you arrive + + + - + Practice, Practice, Practice + + + - + Relax Let’s dive in on each one of these items and discuss them in depth. + + + + + + + + +### + Tell a Story + + + + + + I am not advocating presenters share meaningless stories about their life or work. What I mean by "Tell a story" is to **make your presentation a complete thought**. Why are you presenting this data? What led you to this point? How can this data help people? What problem does it solve? Sometimes presenters know all those answers in their head but forget to share them with their audience. + Consider saying something similar to, "For years, We’ve been looking to automate these arcane processes at work, and I have been trying to find a product that would help me get there. With the release of this tool, my company has achieved unbelievable efficiency. I'd like to show you how you can too, and what we struggled with. Let's dive into how we did it and what challenges we faced along the way.” + + + + +### + Don't count on the conference WiFi + + + + + + You have come up with this awesome idea to run a live demo that reaches out to the internet and grab some live data. You know this going to be a killer demo and the crowd will love it! When its time to present, the WiFi is saturated and you can't get your data. Bummer... + How would you proceed if the hotel wireless went down for the afternoon? The point here is: **don't rely on the conference wireless!** + Many presenters have had their sessions crash and burn because they weren't able to run their demos as expected. If you need to connect to the internet for your demo, rent a hotspot for the day or the week. A good plan would include having the data you need on your laptop as a backup. Also, I would caution against running a demo from the AWS or Azure cloud if you can avoid it. Everything could work out as you plan, but past data says otherwise. + Last year, Azure cloud was offline when Joey Aiello was trying to show off some Cloud awesomeness. It happens! Hotel WiFi and cloud resources are the short paths to having a presentation not go as planned. + + + + +### + Don't kill the audience with slides + + + + + + **The key to a great summit demo is fewer slides, not more.** It takes a very skilled presenter who can pull off using many slides and not boring the audience. People come to summit to see cool demos, not slick slides. Keep your slides to a minimum and leave more time for your demos! The audience will thank you. + + + + +### + Limit the amount of words on slides + + + + + + While we're discussing about slides, let's talk about good slide etiquette. + People hate watching slideshows. Why? Because most slide shows are boring and unimaginative. Slide presentations can be great tools; but they need to be succinct. Well done slides can be excellent visual aids to help you tell your story. The key point here is **you tell the story, not the slides.** + If you are considering using slides at summit, you need to view a video called [How to avoid Death by PowerPoint](https://youtu.be/Iwpi1Lm6dFo) before you design your slides. See it once and you will change the way you make slides for the rest of your life. + + + + +### + Present live demos + + + + + + At summit, **attendees want to see the code in action** and what happens when you execute the code. However, a word of caution, live demos are one of the biggest things that go bad for presenters. So what's a n00b presenter to do? + Present data/execute code in the moment and have a backup in case it doesn't work out as planned. Another option is to record or pre-stage your work, so all you have to do is start a pre-canned process and you know what the output will be. + + + + +### + Have a backup plan + + + + + + Things can go bump in the night! The demo gods sometimes come and slay presenters. Be prepared! + + + + + + - + Do you have a backup plan? + + + - + What happens if X doesn't work? + + + + + + + + Think it through now and hopefully you wont need to go to your backup plan. But you will be glad if you you end up with Plan B or C and you know you can still nail the demo! + + + + +### + +Plan to finish your session early + + + + + + + People are awful at estimating the time required to complete a task. This holds true for presenters also. We all have witnessed a presenter say, “I’m running low on time, let me skip these last 10 slides..." Don't let that be you. Plan to finish sooner. That means you may need to cut out some irrelevant content. + **Edit your content ruthlessly and only present the most important items**. If you finish early, you can always show some extra stuff. **Leave your audience on a high note.** + + + + +### + Pre-stage everything + + + + + + You've been preparing for this for over 6 months. You get on that stage; you look at the crowd, and you’re ready to go! You get started and then you forget small bits you intended to mention. You can't think straight; things are not going as hoped. Getting back on track seems impossible. + This is all avoidable. You can pre-stage your work so you can go from A to B to C without thinking and without having to type complex commands or code. **Minimize your opportunities to make mistakes.** + + + + + + - + Create a script. + + + - + Pre-stage all the commands in a PS1 file so you only have to select the next command. + + + - + Have your demos in number order so you can find them easily. + + + - + Create shortcuts. + + + - + Have a cheat sheet of notes you can refer to. + + + + + + + + Avoid leaving things to chance when it's go time. You will be nervous; understand this and have your things ready to go beforehand. + + + + +### + Finish your presentation BEFORE you arrive + + + + + + Last year I presented on the third day of summit. I was working on code on the two days prior and the day of my presentation. I pulled it off, but I missed a lot of stuff at summit because I was busy fixing bugs. Don’t be like me.** Finish before you arrive and then resist the urge to make last-minute changes.** + + + + +### + Practice, Practice, Practice + + + + + + This one is obvious. Presenting at Summit will be a highlight of your career. **Practice your entire presentation in its entirety at least three times before you get to the summit event.** The more you practice, the better your presentation will be. + + + + +### + Relax + + + + + + A bonus tip to serve as a reminder. Try to relax and enjoy the moment. It always goes faster than you think. the first five minutes are hard and then it just gets easier. Take a deep breath and relax. The summit committee picked you because they like what you had to say. Now just execute. You got this! + Good luck to all presenters this year. We're all excited to see the wonderful things you all have produced. If someone has questions what it was like to be a presenter, please feel to reach out to me. They can find me on Twitter (@MikeKanakos), Discord (@MikeKanakos) or at my website ([www.networkadm.in](http://www.networkadm.in/)). diff --git a/content/articles/2020/03/_index.md b/content/articles/2020/03/_index.md new file mode 100644 index 000000000..05d55c36c --- /dev/null +++ b/content/articles/2020/03/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from March 2020" +description: "PowerShell.org Articles published in March 2020." +--- diff --git a/content/articles/2020/03/icymi-powershell-week-of-06-march-2020/index.md b/content/articles/2020/03/icymi-powershell-week-of-06-march-2020/index.md new file mode 100644 index 000000000..d1a0dbed7 --- /dev/null +++ b/content/articles/2020/03/icymi-powershell-week-of-06-march-2020/index.md @@ -0,0 +1,96 @@ +--- +url: /articles/2020-03-06-icymi-powershell-week-of-06-march-2020/ +title: "ICYMI: PowerShell Week of 06-March-2020" +authors: + - Robin Dadswell +date: "2020-03-06T17:25:28+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/03/icymi-powershell-week-of-06-march-2020/ +--- + +Topics include PowerShell 7 GA, SCCM, Group Policy and more... + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + +###### + [*Step-by-Step Guide to Azure Private Endpoints (PowerShell Guide)*](http://www.rebeladmin.com/2020/02/step-step-guide-azure-private-endpoints-powershell-guide/) + + + by Dishan M. Francis on 29th February + + + Dishan is trying to explain how to configure Azure Private Endpoints using PowerShell to access your Azure PaaS services securely. + + +###### + [*Using PowerShell to generate and deploy Group Policies for non-domain environments*](https://www.cyberdrain.com/using-powershell-to-generate-and-deploy-group-policies-for-non-domain-environments/) + + + by Kelvin Tegelaar on 1st March + + + Kelvin explains how to generate and deploy GPOs for non-domain environments using PowerShell + + +###### + [*Designing Professional Parameters*](https://powershell.one/powershell-internals/attributes/parameters) + + + by Dr. Tobias Weltner on 2nd March + + + With the help of [Parameter()], you define sophisticated PowerShell parameters that enhance usability and versatility of your functions. + + +###### + [*SCCM deployment validation using PowerShell Pester*](https://secureinfra.blog/2020/03/03/sccm-deployment-validation-using-powershell-pester/) + + + by lynfordh on 3rd March + + + lynfordh is explaining how to validate the deployment of System Center Configuration Manager (SCCM) using PowerShell Pester. + + +###### + [*What's new in PowerShell 7 – Check it out!*](https://www.thomasmaurer.ch/2020/03/whats-new-in-powershell-7-check-it-out/) + + + by Thomas Maurer on 4th March + + + Thomas breaks down the new features in PS7 + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/fckbsb/i_wrote_my_first_3_scripts_today_and_it_feels/) + + + [UnderCoverITBoss](https://www.reddit.com/user/UnderCoverITBoss/%7Cu/UnderCoverITBoss) writes their first scripts and is now on a mission to script everything + + +###### + [*Tweet of the Week*](https://twitter.com/PowerShell_Team/status/1235252089552396288) + + + The PowerShell team announced the general availability of version 7 on Wednesday. + + +###### + [*Youtube: Core Concept: PowerShell 7 New Features*](https://www.youtube.com/watch?v=u3zXMv69uNA) + + + RTPSUG Met for their monthly virtual meeting and it was the perfect time to review some of the new features of PowerShell 7 diff --git a/content/articles/2020/03/icymi-powershell-week-of-13-march-2020/index.md b/content/articles/2020/03/icymi-powershell-week-of-13-march-2020/index.md new file mode 100644 index 000000000..44622f28b --- /dev/null +++ b/content/articles/2020/03/icymi-powershell-week-of-13-march-2020/index.md @@ -0,0 +1,96 @@ +--- +url: /articles/2020-03-13-icymi-powershell-week-of-13-march-2020/ +title: "ICYMI: PowerShell Week of 13-March-2020" +authors: + - Robin Dadswell +date: "2020-03-13T15:21:49+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/03/icymi-powershell-week-of-13-march-2020/ +--- + +Topics include Splatting, PS7 Experimental features, VSCode and more... + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + +###### + [*Running PowerShell 7 Commands Directly on Ansible Localhost*](https://www.jonathanmedd.net/2020/03/running-powershell-7-commands-directly-on-ansible-localhost.html) + + + by Jonathan Medd on 11th March + + + Jonathan updates his blog post about using ansible with PSCore to now cover PS7. + + +###### + [*PowerShell and DevOps conference 2020*](https://www.powershellmagazine.com/2020/03/12/powershell-and-devops-conference-asia-2020/) + + + by @ravikanth on 12th March + + + PowerShell Conference Asia 2019 was held in Bangalore (India). It was such a great event and fun hosting it here. For the first time in the history of PowerShell Conference Asia we had 220+ PowerShell lovers at the conference. + + +###### + [*PowerShell 7 Profile paths and locations*](https://ridicurious.com/2020/03/12/powershell-7-profile-paths-and-locations/) + + + by singhprateik on 12th March + + + PowerShell v7 ships with some new shiny features, significant changes and slew of performance improvements and bug fixes, so lets just quickly go through them without going into the details before we can look into PowerShell 7 Profile + + +###### + [*PowerShell 7 Experimental Features*](https://powershell.anovelidea.org/powershell/ps7now-experimental-features/) + + + by Dave Carroll on 12th March + + + PowerShell 7 has a new experimental feature option learn more about it. + + +###### + [*PowerShell 7, VS Code, and the PowerShell 7 ISE Extension*](https://tfl09.blogspot.com/2020/03/powershell-7-vs-code-and-powershell-7.html) + + + by Thomas Lee on 12th March + + + Learn more about VS Code and how to write PS7 scripts just like you would in the ISE. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/fer93d/im_a_ps_noob_who_created_a_750_line_script_that/) + + + Reddit user gets help from the community to improve a business critical script. + + +###### + [*Tweet of the Week*](https://twitter.com/yobyot/status/1238267095319752710) + + + Thank you for the Out-ConsoleGridView + + +###### + [*Youtube: PowerShell Splatting How-To: I should use it more and so should you!*](https://youtu.be/qOU6UHOY0SE) + + + A quick overview of just how easy it is to use splatting and why you should do it using the New-ADUser CMDlet as an example. diff --git a/content/articles/2020/03/icymi-powershell-week-of-20-march-2020/index.md b/content/articles/2020/03/icymi-powershell-week-of-20-march-2020/index.md new file mode 100644 index 000000000..3218a0248 --- /dev/null +++ b/content/articles/2020/03/icymi-powershell-week-of-20-march-2020/index.md @@ -0,0 +1,93 @@ +--- +url: /articles/2020-03-20-icymi-powershell-week-of-20-march-2020/ +title: "ICYMI: PowerShell Week of 20-March-2020" +authors: + - Robin Dadswell +date: "2020-03-20T18:38:47+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/03/icymi-powershell-week-of-20-march-2020/ +--- + +Topics include Select-String, Should Process, PowerShell Summit and more... + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + +###### + [*WHAT'S NEW WITH SELECT-STRING IN POWERSHELL7*](https://www.networkadm.in/select-string-powershell7/) + + + by @MikeKanakos on 14th March + + + With PS7 Select-String has some cool changes, Mike goes over some of those changes. + + +###### + [*PowerShell functions for which cmdlets can autocomplete properties*](https://itluke.online/2020/03/15/powershell-functions-for-which-cmdlets-can-autocomplete-properties/) + + + by ITLuke on 15th March + + + So you noticed that when you pipe some cmdlets to the  + + +`Select-Object +`cmdlet, you can hit the TAB key and enumerate all properties of the former cmdlet. This works with other cmdlets too. Here is a non-exhaustive list + + +###### + [*Powershell: Everything you wanted to know about ShouldProcess*](https://powershellexplained.com/2020-03-15-Powershell-shouldprocess-whatif-confirm-shouldcontinue-everything/?utm_source=twitter&utm_medium=post) + + + by @KevinMarquette on 15th March + + + PowerShell functions are very robust with several features that greatly improves the way users interact with them. One important feature that is often overlooked is -WhatIf and -Confirm support and it is easy to add to your functions. In this article, we will dive deep into how to implement this feature. + + +###### + [*Infrastructure as Code: Where Continuous Delivery All Begins*](https://adamtheautomator.com/infrastructure-as-code-ci-cd/) + + + by @adbertram on 17th March + + + The larger the organization and team, the larger the problems. All of these issues can be eliminated or, at least, mitigated with a concept called Infrastructure as Code (IaC). + + +###### + [*Monitoring with PowerShell: Monitoring OneDrive and Sharepoint file limits*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-onedrive-and-sharepoint-file-limits/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-onedrive-and-sharepoint-file-limits) + + + by Kelvin Tegelaar on 20th March + + + Kevin shares his scripts for monitoring the amount of files in a library, to prevent issues with the OneDrive sync client. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/fjjglr/microsoft_is_gonna_delete_thousands_of_scripts/) + + + TechNet Gallery is being retired see what reddit has to say. + + +###### + [*Youtube: PowerScripting Podcast - 334 - Glenn Sarti & Michael Lombardi*](https://youtu.be/Xirv6WQFmSs) + + + Catch up on the latest PowerScripting Podcast. diff --git a/content/articles/2020/03/icymi-powershell-week-of-27-march-2020/index.md b/content/articles/2020/03/icymi-powershell-week-of-27-march-2020/index.md new file mode 100644 index 000000000..8c42e4a94 --- /dev/null +++ b/content/articles/2020/03/icymi-powershell-week-of-27-march-2020/index.md @@ -0,0 +1,93 @@ +--- +url: /articles/2020-03-27-icymi-powershell-week-of-27-march-2020/ +title: "ICYMI: PowerShell Week of 27-March-2020" +authors: + - Robin Dadswell +date: "2020-03-27T15:00:11+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/03/icymi-powershell-week-of-27-march-2020/ +--- + +Topics include Switch Statements, Try Catch, Python and more... + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + +###### + [*Use cases for the new null coalescing operator in PowerShell 7*](https://itluke.online/2020/03/22/use-cases-for-the-new-null-coalescing-operator-in-powershell-7/) + + + by Luc on 22nd March + + + Tips and use cases for the new null coalescing operator in PowerShell 7. + + +###### + [*Getting into Python by Referencing PowerShell*](https://nocolumnname.blog/2020/03/23/getting-into-python-by-referencing-powershell/) + + + by @SOZDBA on 23rd March + + + Trying to break his PowerShell dependency Shane shares an example for a script he wrote in both Python and PowerShell. + + +###### + [*Back to Basics: Understanding the PowerShell Switch Statement*](https://adamtheautomator.com/powershell-switch/) + + + by [https://twitter.com/@junecastillote|@junecastillote](https://twitter.com/@junecastillote%7C@junecastillote)> on 25th March + + + In this article, you will learn what the PowerShell switch statement is, understand its syntax and how it works. + + +###### + [*Monitoring with PowerShell: monitor and enabling WOL for HP, Lenovo, Dell*](https://www.cyberdrain.com/monitoring-with-powershell-monitor-and-enabling-wol-for-hp-lenovo-dell/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitor-and-enabling-wol-for-hp-lenovo-dell) + + + by @KelvinTegelaar on 26th March + + + Kevin shares a script he wrote to detect if machines are setup for wake on LAN, and another script to enable WOL if it's not already enabled. + + +###### + [*#PS7Now Ebook Available*](https://jdhitsolutions.com/blog/powershell/7371/ps7now-ebook-available/) + + + by @JeffHicks on 26th March + + + With the PowerShell 7 release Jeff Hicks hosted a weeks worth of blogs and compiled into a leanpub ebook that is now available, check it out. + + +###### + [Tweet of the Week](https://twitter.com/TrebuchetOps/status/1243331005173424129) + + +Michael T Lombardi shares his book for free or a voluntary donation! + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/fo3z38/windows_virtual_desktop_deployment_tutorial/) + + + [https://www.reddit.com/user/Arcontar/|u/Arcontar](https://www.reddit.com/user/Arcontar/%7Cu/Arcontar)shares a tutorial on setting up WVD in Azure for remote workers using PowerShell. + + +###### + [*Youtube: Tools: Build your first Serverless App in Azure in under 60 minutes!*](https://youtu.be/UblF7aJWqAA) + + + RTPSUG got into Azure serverless with a presentation from Jeremy Brown. diff --git a/content/articles/2020/03/not-so-intutive-powershell-behavior/index.md b/content/articles/2020/03/not-so-intutive-powershell-behavior/index.md new file mode 100644 index 000000000..e1c16f518 --- /dev/null +++ b/content/articles/2020/03/not-so-intutive-powershell-behavior/index.md @@ -0,0 +1,83 @@ +--- +url: /articles/2020-03-11-not-so-intutive-powershell-behavior/ +title: Not So Intutive PowerShell Behavior +authors: + - tobor79 +date: "2020-03-11T21:36:45+00:00" +categories: + - Tips and Tricks +aliases: + - /2020/03/not-so-intutive-powershell-behavior/ +--- + +The below link leads to the module I am writing about in this blog post. +**[ +LINK TO POWERSHELL MODULE +](https://github.com/tobor88/PowerShell/blob/master/Set-LockScreenImage.psm1)** +At my place of work a task needed to be completed that would allow us IT administrators to set the default lock screen image for our devices. Group Policy was my first thought however it was to broad of a solution. The rules basically became, set the default lock screen on some of the newer laptops and if a default lock screen has been manually chosen by a user; don't change it. +I figured great that is an easy module to write. I wanted to add the option to execute the command on remote computers as well which is what brought up a couple great unexpected behaviors. +The cmdlets these include are New-PsDrive being executed on a remote machine and Copy-Item from a network location to a local location. + + +** + +COPY-ITEM + +** +In order to set the lock screen image for a laptop, we first need to ensure the image will always available. If something ever changes where the laptop needs to pull the image file again and the image is not reachable; the default image will be a black screen. I prefer to save the image file locally on the laptops. In order to do that, when I execute my function, I need to copy the file from a shared resource onto the local device. This is done with Copy-Item because PowerShell is object oriented where Command Prompt's robocopy is text/string oriented. We are not able to just copy a file from a local location. +The first line in [Microsoft's Documentation](https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Management/Copy-Item?view=powershell-5.0) states the function only works between objects in the same namespace. This prevents copying a file to a Certificate Drive or Registry Drive. This rule is what prevents '\\networkshare\folder$\image.png' from being copied to 'C:\Users\Public\Pictures\image.png'. A fairly simple concept. +What this means is that if we want to copy an item from one location to another the drive needs to be seen by PowerShell to have a 'Provider' property with the value 'FileSystem'. This can be seen in the image below. + + + + + + ![Type Information for Get-PsDrive](https://img1.wsimg.com/isteam/ip/8f3c0f3f-85e4-413f-bd91-f19d4f317a5a/Get-Member.png/:/cr=t:0%25,l:0%25,w:100%25,h:100%25/rs=w:1280) + + + +*Type Information for Get-PsDrive* + + + + + ![Results for the cmdlet Get-PsDrive in PowerShell](https://img1.wsimg.com/isteam/ip/8f3c0f3f-85e4-413f-bd91-f19d4f317a5a/GetPsDrive.png/:/cr=t:0%25,l:0%25,w:100%25,h:100%25/rs=w:1280) + + + +*Get-PsDrive Results* + +In the above images we see that Provider is a property of the Get-PsDrive function. The Provider property must share a value in order to copy an item from one FileSystem to another FileSystem. +The location of the lock screen image for this blog and the function on GitHub is located at '\\networkshare\files$\Backgrounds'. We need to map this location to a drive letter in order to move the file to a local or remote computer.  How do we do that? New-PsDrive is how. +** + +NEW-PSDRIVE + +** +Here is the [Microsoft Documentation](https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Management/New-PSDrive?view=powershell-5.0) for New-PsDrive. New-PsDrive can be used to create temporary or persistent drives. When the '-Persist' parameter is used, a persistent Windows mapped  network drive that is associated with a file system location on a  remote computer is created. +Temporary drives exist only in the current PowerShell session and in  sessions that you create in the current session. This in essence means we need to use the "New-PsSession" cmdlet in order for New-PsDrive to work. Without reading the documentation as I have done before trying this command you may believe that an "Access Denied" PowerShell error has to do with using the '-Credential' parameter. I have demonstrated a few misleading events below. + + + + + ![New-PsDrive's not so intuitive behavior](https://img1.wsimg.com/isteam/ip/8f3c0f3f-85e4-413f-bd91-f19d4f317a5a/Tricky-0002.png/:/cr=t:0%25,l:0%25,w:100%25,h:100%25/rs=w:1280) + + + +*New-PsDrive's not so intuitive behavior* + +** +FIRST:  +**The first attempt above gives us an Access Denied error. No credentials were entered. It was just me executing a command. +** +SECOND: +** My next attempt/reaction to that adds the -Credential parameter to the Invoke-Command cmdlet. Invoke-Command runs commands on a remote computer and displays the output in the PowerShell terminal. I added this to ensure the command was running as an administrator. I received another access is denied error. + +**THIRD:**  +My response to that was to cover all basis and add another -Credential parameter to the New-PsDrive command to map the drive and have the remote computer authenticate my credentials. This time it returned a result as though it was successful and it was for a brief moment. +Even though I added the -Persist parameter it was only persistent for that session and closed as soon as Invoke-Command's ScriptBlock finished running. +If I were to run Get-PsDrive right after mapping the drive in that version of Invoke-Command it would return a result showing the T drive I just mapped. A PowerShell function should do one thing and one thing only. To better adhere to that rule for the Set-LockScreenImage function  we should use New-PsSession to create a $Session variable. This way we have one session that can be used to execute multiple commands instead of multiple commands being executed in multiple sessions. +I believe these to be a couple of great examples to explain to someone who is just getting into PowerShell or decided those functions did not work. Hope you found this helpfule. + +- tobor +https://roberthosborne.com diff --git a/content/articles/2020/03/powershell-conference-book-volume-3-call-for-authors/index.md b/content/articles/2020/03/powershell-conference-book-volume-3-call-for-authors/index.md new file mode 100644 index 000000000..0d1f2124f --- /dev/null +++ b/content/articles/2020/03/powershell-conference-book-volume-3-call-for-authors/index.md @@ -0,0 +1,84 @@ +--- +url: /articles/2020-03-21-powershell-conference-book-volume-3-call-for-authors/ +title: PowerShell Conference Book Volume 3 Call For Authors +authors: + - Mark Kraus (markekraus) +date: "2020-03-21T13:00:38+00:00" +categories: + - Announcements + - Books +aliases: + - /2020/03/powershell-conference-book-volume-3-call-for-authors/ +--- + +**EDIT**: We have extended the CFA to May 25th! + +The  +_ +PowerShell Conference Book Volume 3 +_ + Call for Authors (CFA) is now open! + +[ +http://bit.ly/PSConfBook3CFA +](http://bit.ly/PSConfBook3CFA) + +The timeline for this process should be as follows: + + + * +Close submissions on Monday, May 4th, at 11:00 PM PDT + + * +Notify everyone by May 25th + + * +Final drafts will be due by June 1st + + + * +Finalize publication by September 30th + + +We are looking for one chapter per author on the topics of PowerShell, DevOps, WinOps, Open Source, or IT Careers. Topic depths can range from novice to expert. Chapters can be technical or cover cultural aspects. Authors can be new or well established. The book will be written in American English, but non-native speakers are welcome (our editorial team will support you)! + + +You may submit up to 5 chapter proposals in the [CFA](http://bit.ly/PSConfBook3CFA), but we will choose only one (1) chapter per author. Chapters will be selected based on the contents of the abstract. The more information and clarity you provide about your chapter, the better chance we will choose it over vague abstracts on the same topic. Submitting multiple abstracts will help in case someone else submitted an abstract on the same topic. You may return the form and edit it as many times as you like until the close date. + + + +Published authors will receive one (1) free e-book copy. We will attempt to provide one (1) at-cost physical copy but can make no advanced guarantees.  + + +## +About Volume 3 + + +_ +PowerShell Conference Book Volume 3  +_ +furthers the traditions of Volume 1 and Volume 3 by acting as a "conference in a book." It will contain all-new chapters and is not just a new edition of the previous volumes. A different author will write each chapter. Topics will cover PowerShell, DevOps, WinOps, Open Source, or IT Careers. The authors will be a mix of well-known PowerShell community members, new faces, bloggers, authors, trainers, and presenters. + + +Everyone has something to share that everyone can learn from! + +** +100% of proceeds +** + will go to the  +[ +OnRamp scholarship program +](https://powershell.org/summit/summit-onramp/onramp-scholarship/) +. The editors and authors will only be compensated with a complimentary e-copy of the book. The true payment will come in the authors and editors knowing that the knowledge they shared has helped not only those they shared it with but to new and diverse professionals awarded OnRamp scholarships! + + +## +About the Editorial Staff + + +For Volume 3, Mark E. Kraus will act as Editor-in-Chief with support from Senior Editor Michael Zanatta. The rest of the editorial staff includes Phil Bossman, Christian Coventry, Justin Gehman, Joe Houghee, Steven Judd, Bill Kindle, Adil Leghari, and Arnaud Petitjean. + + +We learned our lessons from Volume 2 and have increased our editorial staff. This increase should help us compress our timelines so we can publish sooner and start supporting the OnRamp program even earlier! + +We look forward to reading your submissions at ! diff --git a/content/articles/2020/04/_index.md b/content/articles/2020/04/_index.md new file mode 100644 index 000000000..ad99c3e6c --- /dev/null +++ b/content/articles/2020/04/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from April 2020" +description: "PowerShell.org Articles published in April 2020." +--- diff --git a/content/articles/2020/04/icymi-powershell-week-of-03-april-2020/index.md b/content/articles/2020/04/icymi-powershell-week-of-03-april-2020/index.md new file mode 100644 index 000000000..9afb8c9fd --- /dev/null +++ b/content/articles/2020/04/icymi-powershell-week-of-03-april-2020/index.md @@ -0,0 +1,93 @@ +--- +url: /articles/2020-04-03-icymi-powershell-week-of-03-april-2020/ +title: "ICYMI: PowerShell Week of 03-April-2020" +authors: + - Robin Dadswell +date: "2020-04-03T15:12:06+00:00" +categories: + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/04/icymi-powershell-week-of-03-april-2020/ +--- + +Topics include Windows Terminal, Event Logs, String Basics and more. + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + +###### + [*Dynamic PowerShell and SSH remoting tabs for Windows Terminal*](https://itluke.online/2020/03/29/dynamic-powershell-and-ssh-remoting-tabs-for-windows-terminal/) + + + by Luke on 29th March + + + I am a SysAdmin and have to connect to dozen of different computers every day, I needed to bring this a little further and make it more “dynamic”: every time I open a remoting tab, it should ask for the computer name and the username if necessary. + + +###### + [*NEW Oneliner to Tail the Windows Eventlog*](https://cloudywindows.io/post/new-oneliner-to-tail-the-windows-eventlog/) + + + by Darwin Sanoy on 30th March + + + Equivalent of tail -f on Linux for the Windows Event Log + + +###### + [*Monitoring with PowerShell: Monitoring client VPN settings*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-client-vpn-settings/) + + + by Kelvin Tegelaar on 31st March + + + Learn how to monitor Always on VPN connections from the clients. + + +###### + [*Back to Basics: PowerShell Strings*](https://adamtheautomator.com/powershell-strings/) + + + by June Castillote on 1st April + + + In this article, you'll learn that strings are not just for reading and displaying. They can also be manipulated to fit the purpose of whatever task you may be writing the script for. + + +###### + [*PowerShell Basics: How to Upload Files to Azure Storage*](https://techcommunity.microsoft.com/t5/itops-talk-blog/powershell-basics-how-to-upload-files-to-azure-storage/ba-p/1273322?utm_source=dlvr.it&utm_medium=twitter) + + + by Anthony Bartolo on 2nd April + + + Learn how to easily add files to Azure Blob Storage + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ftwmtj/pluralsight_offering_1_month_free_courses_i_didnt/) + + + u/BlackV shared some information about Pluralsight giving a free month of training away. + + +###### + [*Tweet of the Week*](https://twitter.com/MGrafnetter/status/1245725537462636545) + + + Audit FIDO Keys registered in Azure AD using PowerShell + + +###### + [*Youtube: Creating Restore Points Using PowerShell!*](https://youtu.be/bu8FCZsrkQg) + + + Creating restore points using PowerShell will allow a user to restore their machine from a previous system state. diff --git a/content/articles/2020/04/icymi-powershell-week-of-10-april-2020/index.md b/content/articles/2020/04/icymi-powershell-week-of-10-april-2020/index.md new file mode 100644 index 000000000..e1ed822b3 --- /dev/null +++ b/content/articles/2020/04/icymi-powershell-week-of-10-april-2020/index.md @@ -0,0 +1,95 @@ +--- +url: /articles/2020-04-10-icymi-powershell-week-of-10-april-2020/ +title: "ICYMI: PowerShell Week of 10-April-2020" +authors: + - Robin Dadswell +date: "2020-04-10T17:35:44+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/04/icymi-powershell-week-of-10-april-2020/ +--- + +Topics include Azure, GPOs, Bits and more... + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + +###### + [*Simple file and folder transfer using Bits*](https://www.mczerniawski.pl/powershell/transfer-with-bits/) + + + by Mateusz Czerniawski on 6th April + + + We all heard of Bits. It’s the demo service most scripts fiddle with, when Windows services are concerned. But what it is and how we can benefit from it? + + +###### + [*How to Parse ARM Output Variables in Azure DevOps Pipelines*](https://adamtheautomator.com/arm-output-variables-in-azure-pipelines-powershell/) + + + by Adam Bertram on 7th April + + + In this article, you're to learn one of the most troublesome (personal opinion) aspects of using ARM templates in AzDo pipelines - managing output variables. + + +###### + [*GPO from zero to hero - How to backup GPO*](http://jm2k69.github.io/2020-04-07-GPO-from-zero-to-hero-How-to-backup-GPO/) + + + by @JM2K69 on 7th April + + + This post discusses the Backup of GPO and how to restore them in Active Directory with and without PowerShell. + + +###### + [*Enabling Clickable PowerPoint Actions.*](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/enabling-clickable-powerpoint-actions) + + + by @singhprateik on 7th April + + + Using clickable actions in PowerPoint presentations can be super useful to launch Visual Studio Code or PowerShell ISE, and seamlessly open and demo PowerShell code.. + + +###### + [*PowerShell supports a powerful pipeline concept.*](http://powershell.one/powershell-internals/scriptblocks/powershell-pipeline) + + + by @TobiasPSP on 7th April + + + PowerShell supports a powerful pipeline concept. Learn how the PowerShell pipeline works, and how you can pipeline-enable your own PowerShell functions. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/futc19/how_not_to_find_installed_applications_and_how_to/) + + + u/mdj_ makes the case to not use win32_product for checking installed software and shares a blog post explaining his position. + + +###### + [*Tweet of the Week*](https://twitter.com/JeffHicks/status/1248343716336672770) + + + Jeff Hicks provides a link to a repo of useful code in his Github gists + + +###### + [*Youtube: April Fools Day: PowerShell Tips, Tricks & Dad Jokes with Steven Judd*](https://youtu.be/BZZM6i8AE1Y) + + + RTPSUG hosted a special April Fools users group meeting with fun jokes and PowerShell. diff --git a/content/articles/2020/04/icymi-powershell-week-of-17-april-2020/index.md b/content/articles/2020/04/icymi-powershell-week-of-17-april-2020/index.md new file mode 100644 index 000000000..f4eab66a4 --- /dev/null +++ b/content/articles/2020/04/icymi-powershell-week-of-17-april-2020/index.md @@ -0,0 +1,95 @@ +--- +url: /articles/2020-04-17-icymi-powershell-week-of-17-april-2020/ +title: "ICYMI: PowerShell Week of 17-April-2020" +authors: + - Robin Dadswell +date: "2020-04-17T16:21:21+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/04/icymi-powershell-week-of-17-april-2020/ +--- + +Topics include Windows Terminal, LAPS, HTML and more... + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + +###### + [*I'm Josh King, Sysadmin, and This Is How I Work (During Lockdown)*](https://toastit.dev/2020/04/13/how-i-work-lockdown/) + + + by @WindosNZ on 13th April + + + PowerShell Blogger Josh King shares his work from home setup in a blog post. + + +###### + [*How to Rotate Windows Admin Passwords with Microsoft LAPS*](https://adamtheautomator.com/microsoft-laps/) + + + by @AlexAsplund on 14th April + + + If you haven't set up Microsoft LAPS this article details how to set it up and secure the local admin passwords on your windows machines. + + +###### + [*PSDrives, Shortcuts and Links*](https://jdhitsolutions.com/blog/powershell/7386/psdrives-shortcuts-and-links/) + + + by Jeffery Hicks on 15th April + + + Jeffery tried to explain how to create OneDrive folder as a PSDrive and creating shortcuts to it in PowerShell and made available on all the computers. + + +###### + [*PowerShell (Tab) Titles*](https://tommymaynard.com/powershell-tab-titles/) + + + by Tommy Maynard on 16th April + + + In this post you learn how to use PowerShell to set the tab titles in Windows terminal to help keep things in order. + + +###### + [*How To Create An HTML Report With PowerShell*](https://adamtheautomator.com/powershell-convertto-html) + + + by Dan Dimalanta on 16th April + + + In this article, you will learn how to use the ConvertTo-HTML combined with Out-File cmdlets to generate an HTML report. You will also learn the basic scripting for CSS and how it can be useful in formatting the design of your HTML based report. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/g0mh8i/i_created_a_discord_bot_to_host_jackbox_party/) + + + u/alduron set up a discord bot to manage a VM running Jackbox Party games and shared it with the community. + + +###### + [*Tweet of the Week*](https://twitter.com/TylerLeonhardt/status/1250793530265530368) + + + Tyler shares an exciting new update for GitHub actions. + + +###### + [*Youtube: PowerScripting Podcast - 335 - Mike Kanakos*](https://www.youtube.com/watch?v=8q9C5rlST8c) + + + This months video of the PowerScripting Podcast with PowerShell Blogger Mike Kanakos. diff --git a/content/articles/2020/04/icymi-powershell-week-of-24-april-2020/index.md b/content/articles/2020/04/icymi-powershell-week-of-24-april-2020/index.md new file mode 100644 index 000000000..561ef5c61 --- /dev/null +++ b/content/articles/2020/04/icymi-powershell-week-of-24-april-2020/index.md @@ -0,0 +1,95 @@ +--- +url: /articles/2020-04-24-icymi-powershell-week-of-24-april-2020/ +title: "ICYMI: PowerShell Week of 24-April-2020" +authors: + - Robin Dadswell +date: "2020-04-24T16:32:35+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/04/icymi-powershell-week-of-24-april-2020/ +--- + +Topics include Azure functions, Windows Performance, O365 and more... + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + +###### + [*Measure Windows Performance*](https://powershell.one/code/8.html) + + + by @TobiasPSP on 19th April + + + Windows comes with a built-in performance assessment tool. It can be used to compare system performance, and you'll also learn a lot about PowerShell techniques. + + +###### + [*PowerShell Left-Center-Right*](https://jdhitsolutions.com/blog/powershell/7401/powershell-left-center-right/) + + + by Jeff Hicks on 20th April + + + Jeff shares his PowerShell version of a game he plays called LCR. + + +###### + [*Azure Functions: Creating a PowerShell Event Based Function*](https://cloudskills.io/blog/azure-event-driven-function) + + + by Matt Allford on 21st April + + + Learn how to use PowerShell based Azure Functions in this informative guide. + + +###### + [*PowerShell: Invoke-RestMethod*](https://alainassaf.github.io/2020-04-22-Powershell-Invoke-RestMethod/) + + + by Alain Assaf on 22nd April + + + Alain has a great breakdown of Invoke-RestMethod and how its used. + + +###### + [*How to Restore an Office 365 Mailbox for Free*](https://adamtheautomator.com/restore-mailbox-office-365/) + + + by June Castillote on 22nd April + + + In this article, you will learn the different ways to restore or recover a deleted mailbox in Office 365 with real, step-by-step examples using PowerShell. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/g67tic/windows_terminal_preview_v011_release_windows/) + + + If you have been using the new Windows Terminal there is a new version available. Thomas Maurer shares the release info. + + +###### + [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1253383835951091712?s=19) + + + #PowerShell 7.1-Preview.2 is officially out!  Built on .NET 5 Preview.3!  Try it out and give us feedback. + + +###### + [*Youtube: Utilities: Getting started with API's with Jonathan Moss*](https://youtu.be/ZbpbissNlCs) + + + Join Jonathan Moss as he shares the basics of APIs. diff --git a/content/articles/2020/05/_index.md b/content/articles/2020/05/_index.md new file mode 100644 index 000000000..132977f03 --- /dev/null +++ b/content/articles/2020/05/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from May 2020" +description: "PowerShell.org Articles published in May 2020." +--- diff --git a/content/articles/2020/05/icymi-powershell-week-of-01-may-2020/index.md b/content/articles/2020/05/icymi-powershell-week-of-01-may-2020/index.md new file mode 100644 index 000000000..c5ca90c6d --- /dev/null +++ b/content/articles/2020/05/icymi-powershell-week-of-01-may-2020/index.md @@ -0,0 +1,94 @@ +--- +url: /articles/2020-05-01-icymi-powershell-week-of-01-may-2020/ +title: "ICYMI: PowerShell Week of 01-May-2020" +authors: + - Robin Dadswell +date: "2020-05-01T17:58:03+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/05/icymi-powershell-week-of-01-may-2020/ +--- + +Topics include Ansible, Documentation, Windows Terminal and more... + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + +###### + [*Validating ARM Templates with ARM What-if Operations*](https://blog.tyang.org/2020/04/26/validating-arm-templates-with-arm-what-if-operations/) + + + by Tao Yang on 26th April + + + Tao Yang tries to explain the new preview feature "What-If" in validating the ARM templates. + + +###### + [*Documenting with PowerShell: Using PowerShell to create faster partner portal*](https://www.cyberdrain.com/documenting-with-powershell-using-powershell-to-create-faster-partner-portal/?utm_source=rss&utm_medium=rss&utm_campaign=documenting-with-powershell-using-powershell-to-create-faster-partner-portal) + + + by Kelvin Tegelaar on 27th April + + + I love having the ability to manage all clients from a single portal. My only issue is that the partner portal is quite error prone and sluggish, and it seems to get worse with each added client. + + +###### + [*Deploy and Manage Azure Infrastructure Using Terraform, Remote State, and Azure DevOps Pipelines (YAML)*](https://www.thelazyadministrator.com/2020/04/28/deploy-and-manage-azure-infrastructure-using-terraform-remote-state-and-azure-devops-pipelines-yaml/) + + + by Brad Wyatt on 28th April + + + n this article, I will be showing you how to create an Azure DevOps CI/CD (continuous integration / continuous deployment) Pipeline that will deploy and manage an Azure environment using Terraform. Terraform is a tool for building, changing, and versioning infrastructure safely and efficiently. + + +###### + [*How to Configure WinRM over HTTPS for Ansible*](https://adamtheautomator.com/winrm-https-ansible/) + + + by Adam Bertram on 29th April + + + If you want to configure Windows with Ansible you are probably going to use WinRM. Learn how to set it up. + + +###### + [*Backing Up Windows Terminal Settings with PowerShell*](https://jdhitsolutions.com/blog/powershell/7422/backing-up-windows-terminal-settings-with-powershell/) + + + by Jeff Hicks on 30th April + + + With the terminal constantly changing Jeff shares his method for backing up Terminal settings with PowerShell. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/gaa2ip/never_write_a_batch_wrapper_again/) + + + The purpose of this post is to share a batch script wrapper for powershell scripts with the goal that you don't have to reinvent the wheel and write one yourself. + + +###### + [*Tweet of the Week*](https://twitter.com/_Flavien/status/1254569119560671233?s=20) + + + First demo of PowerShell on WebAssembly + + +###### + [*Youtube: Serverless Event-based Automation with PowerShell & Azure Functions*](https://www.youtube.com/watch?v=x_5v23HS3AI%3E) + + + Automate and manage your cloud-native, hybrid, and even on-premises resources using PowerShell. Eamon O'Reilly, who's leading the efforts at Microsoft for serverless automation, shows you how to get started. diff --git a/content/articles/2020/05/icymi-powershell-week-of-03-april-2020-2/index.md b/content/articles/2020/05/icymi-powershell-week-of-03-april-2020-2/index.md new file mode 100644 index 000000000..e7ad66d9a --- /dev/null +++ b/content/articles/2020/05/icymi-powershell-week-of-03-april-2020-2/index.md @@ -0,0 +1,95 @@ +--- +url: /articles/2020-05-01-icymi-powershell-week-of-03-april-2020-2/ +title: "ICYMI: PowerShell Week of 03-April-2020" +authors: + - Robin Dadswell +date: "2020-05-01T15:00:04+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/05/icymi-powershell-week-of-03-april-2020-2/ +--- + +Topics include Windows Terminal, Event Logs, String Basics and more. + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + +###### + [*Dynamic PowerShell and SSH remoting tabs for Windows Terminal*](https://itluke.online/2020/03/29/dynamic-powershell-and-ssh-remoting-tabs-for-windows-terminal/) + + + by Luc Fullenwarth on 29th March + + + I am a SysAdmin and have to connect to dozen of different computers every day, I needed to bring this a little further and make it more “dynamic”: every time I open a remoting tab, it should ask for the computer name and the username if necessary. + + +###### + [*NEW Oneliner to Tail the Windows Eventlog*](https://cloudywindows.io/post/new-oneliner-to-tail-the-windows-eventlog/) + + + by Darwin Sanoy on 30th March + + + Equivalent of tail -f on Linux for the Windows Event Log + + +###### + [*Monitoring with PowerShell: Monitoring client VPN settings*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-client-vpn-settings/) + + + by Kelvin Tegelaar on 31st March + + + Learn how to monitor Always on VPN connections from the clients. + + +###### + [*Back to Basics: PowerShell Strings*](https://adamtheautomator.com/powershell-strings/) + + + by June Castillote on 1st April + + + In this article, you'll learn that strings are not just for reading and displaying. They can also be manipulated to fit the purpose of whatever task you may be writing the script for. + + +###### + [*PowerShell Basics: How to Upload Files to Azure Storage*](https://techcommunity.microsoft.com/t5/itops-talk-blog/powershell-basics-how-to-upload-files-to-azure-storage/ba-p/1273322?utm_source=dlvr.it&utm_medium=twitter) + + + by Anthony Bartolo on 2nd April + + + Learn how to easily add files to Azure Blob Storage + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ftwmtj/pluralsight_offering_1_month_free_courses_i_didnt/) + + + u/BlackV shared some information about Pluralsight giving a free month of training away. + + +###### + [*Tweet of the Week*](https://twitter.com/MGrafnetter/status/1245725537462636545) + + + Audit FIDO Keys registered in Azure AD using PowerShell + + +###### + [*Youtube: Creating Restore Points Using PowerShell!*](https://youtu.be/bu8FCZsrkQg) + + + Creating restore points using PowerShell will allow a user to restore their machine from a previous system state. diff --git a/content/articles/2020/05/icymi-powershell-week-of-08-may-2020/index.md b/content/articles/2020/05/icymi-powershell-week-of-08-may-2020/index.md new file mode 100644 index 000000000..a66b3649d --- /dev/null +++ b/content/articles/2020/05/icymi-powershell-week-of-08-may-2020/index.md @@ -0,0 +1,99 @@ +--- +url: /articles/2020-05-08-icymi-powershell-week-of-08-may-2020/ +title: "ICYMI: PowerShell Week of 08-May-2020" +authors: + - Robin Dadswell +date: "2020-05-08T16:26:33+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/05/icymi-powershell-week-of-08-may-2020/ +--- + +Topics include Mother's day scripts, securing credentials, new PS7 behaviors and more... + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + +###### + [*Usefulness Of The Last Command Result New Behavior In PowerShell 7.*](https://itluke.online/2020/05/03/more-about-the-last-command-result-new-behavior-in-powershell-7/) + + + by @LFullenwarth on 3rd May + + + Luke tries to explain the behavioural change in the 'Last Command Result' in PowerShell 7. + + +###### + [*Automating with PowerShell: Automating Warranty information reporting.*](https://www.cyberdrain.com/automating-with-powershell-automating-warranty-information-reporting/) + + + by @KelvinTegelaar on 4th May + + + Kelvin wrote a PowerShell wrapper to grab the warranty information for most major manufactures and it will generate a warranty report based on the input data. + + +###### + [*A PowerShell Windows Terminal Toolbox*](https://jdhitsolutions.com/blog/powershell/7429/a-powershell-windows-terminal-toolbox/) + + + by @JeffHicks on 5th May + + + Jeff has created a PowerShell module called  + + +`WTToolBox +`to managing and working with the Windows Terminal application from Microsoft. + + +###### + [*Multiple Azure credentials in PowerShell*](https://adatum.no/powershell/multiple-azure-credentials-in-powershell) + + + by @ehrnst on 6th May + + + Martin is explaining, how to connect to the multiple Azure environments and switch between the accounts using context. + + +###### + [*A PowerShell script to remotely install SQL Server service packs*](https://www.veeam.com/blog/remotely-install-sql-server-service-packs-powershell.html) + + + by Adam Bertram on 7th May + + + In this article, Adam explains how to build a simple script for patching the Sql Server with the Service Packs. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/gf1wcc/getmomflowers/) + + + u/sleightof52 shares a video of a "get-MomFlower" script that orders flowers for his Mom for Mother's day automatically. + + +###### + [*Tweet of the Week*](https://twitter.com/rsrychro/status/1258509618474414082?s=20) + + + RTPSUG tweeted out the link to the recording of their virtual meeting this week. Don Jones presented what would have been his PowerShell summit talk. + + +###### + [*Youtube: How to secure passwords in PowerShell Scripts*](https://youtu.be/DKbLFhGJLyA) + + + Great short video showing how to use and secure passwords in your PowerShell scripts. diff --git a/content/articles/2020/05/icymi-powershell-week-of-15-may-2020/index.md b/content/articles/2020/05/icymi-powershell-week-of-15-may-2020/index.md new file mode 100644 index 000000000..e1858c4b0 --- /dev/null +++ b/content/articles/2020/05/icymi-powershell-week-of-15-may-2020/index.md @@ -0,0 +1,95 @@ +--- +url: /articles/2020-05-15-icymi-powershell-week-of-15-may-2020/ +title: "ICYMI: PowerShell Week of 15-May-2020" +authors: + - Robin Dadswell +date: "2020-05-15T15:00:07+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/05/icymi-powershell-week-of-15-may-2020/ +--- + +Topics include Github Actions, PS7, Network Monitoring and more... + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + +###### + [*Get-History*](https://powershell.city/2020/05/11/get-history/) + + + by Xajuan Smith on 11th May + + + If you don't know your history you are bound to repeat your mistakes. Xajuan suggests you Get-History and learn from your past. + + +###### + [*Publish a Post for a Jekyll Site on a Schedule*](https://powershell.anovelidea.org/blog/publish-post-jekyll-on-a-schedule/) + + + by Dave Carroll on 11th May + + + Learn how to use Github Actions to schedule updates to your Jekyll site. If you've never used Github Actions this is a great walkthrough. + + +###### + [*PowerShell 7 Video Series*](https://devblogs.microsoft.com/powershell/powershell-7-video-series/) + + + by @sydneysmithreal on 11th May + + + The PowerShell Team put together a series of videos explaining and demoing aspects of the release. The intent of these videos was for User Groups to host events celebrating and discussing PowerShell 7 + + +###### + [*A PowerShell Network Monitor*](https://jdhitsolutions.com/blog/powershell/7471/a-powershell-network-monitor/) + + + by @JeffHicks on 12th May + + + Build a Network Monitor inside of PowerShell to see data in/out of your network interfaces. + + +###### + [*The most useful PowerShell cmdlet I didn’t know existed*](https://oofhours.com/2020/05/13/the-most-useful-powershell-cmdlet-i-didnt-know-existed/amp/) + + + by Michael Niehaus on 13th May + + + Sometimes I should probably pay more attention. I use PowerShell a lot. I use Windows 10 a lot. But I still missed these. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/gihjw2/mr_ulee_dailey_thanks_for_what_you_do/) + + + Memes + + +###### + [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1261079788984233985?s=20) + + + #PowerShell 7.0.1 and #PowerShell Core 6.2.5 are out! + + +###### + [*Youtube:*Technado, Ep. 151: Microsoft’s Jeffrey Snover](https://www.youtube.com/watch?v=W7p6iN8izj8) + + + Jeffrey Snover, the father of PowerShell, was this week's guest on Technado. He talked about where the original idea came from, as well as what he's working on now at Microsoft. diff --git a/content/articles/2020/05/icymi-powershell-week-of-22-may-2020/index.md b/content/articles/2020/05/icymi-powershell-week-of-22-may-2020/index.md new file mode 100644 index 000000000..1f370b9b5 --- /dev/null +++ b/content/articles/2020/05/icymi-powershell-week-of-22-may-2020/index.md @@ -0,0 +1,73 @@ +--- +url: /articles/2020-05-22-icymi-powershell-week-of-22-may-2020/ +title: "ICYMI: PowerShell Week of 22-May-2020" +authors: + - Robin Dadswell +date: "2020-05-22T15:00:00+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/05/icymi-powershell-week-of-22-may-2020/ +--- + +Topics include Sophos temp files, Database restoration, ARM templates and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [_Azure ARM template deployment scripts_][1] {#azure-arm-template-deployment-scripts.wp-block-heading} + +by Alex Neihaus on 18th May + +After you finish reading this post and experimenting with the Azure sample template below, you may never again have to write a nested or linked template. And, believe me, that’s a good thing. + +###### [_Documenting with PowerShell: Documenting Unifi infrastructure_][2] {#documenting-with-powershell-documenting-unifi-infrastructure.wp-block-heading} + +by Kelvin Tegelaar on 18th May + +Learn how to create a basic document about your Unifi Network setup. + +###### [_Using PowerShell to Clean Up Sophos Temp Files_][3] {#using-powershell-to-clean-up-sophos-temp-files.wp-block-heading} + +by Paolo Frigo on 19th May + +Recently I’ve encountered a strange issue that affected one Windows workstation with Sophos AV (Endpoint) software installed. Sometimes this software creates some temporary files with ‘$$$’ extension and apparently it never removes them. + +###### [_PowerShell Word Play_][4] {#powershell-word-play.wp-block-heading} + +by Jeff Hicks on 19th May + +Join Jeff as he talks you through his solution to a recent Iron Scripter challenge. + +###### [_Refresh databases that belongs to Availability Group using dbatools_][5] {#refresh-databases-that-belongs-to-availability-group-using-dbatools.wp-block-heading} + +by Cláudio Silva on 20th May + +When the client says, “please restore this backup or the most recent backup on our instance.”. But what if the databases belong to an availability group? It’s not as simple as a standalone installation. Here is how to do it with PowerShell. + +###### [_Reddit /r/PowerShell - Most Popular Weekly Post_][6] {#reddit-rpowershell---most-popular-weekly-post.wp-block-heading} + +u/farag2 shares his script for setting up a Windows 10 machine. + +###### [_Tweet of the Week_][7] {#tweet-of-the-week.wp-block-heading} + +PowerShell 7.1 preview.3 is out! + +###### [_Youtube: Advanced PowerShell Debugging Techniques_][8] {#youtube-advanced-powershell-debugging-techniques.wp-block-heading} + +In this video, I show you how to use some advanced PowerShell debugging techniques. We look at how to debug in the console, debug job, background runspaces, and remote processes. We also used some of the advanced debugging features of Visual Studio Code. + + [1]: https://www.yobyot.com/powershell/azure-deployment-scripts-arm-template/2020/05/18/ + [2]: https://www.cyberdrain.com/documenting-with-powershell-documenting-unifi-infrastructure/?utm_source=rss&utm_medium=rss&utm_campaign=documenting-with-powershell-documenting-unifi-infrastructure + [3]: https://www.scriptinglibrary.com/languages/powershell/using-powershell-to-clean-up-sophos-temp-files/ + [4]: https://jdhitsolutions.com/blog/powershell/7489/powershell-word-play/ + [5]: https://claudioessilva.eu/2020/05/20/refresh-databases-that-belongs-to-availability-group-using-dbatools/ + [6]: https://www.reddit.com/r/PowerShell/comments/go2n5v/powershell_script_setup_windows_10/ + [7]: https://twitter.com/Steve_MSFT/status/1262809289778851840 + [8]: https://www.youtube.com/watch?v=O-dksknPQBw diff --git a/content/articles/2020/05/icymi-powershell-week-of-29-may-2020/index.md b/content/articles/2020/05/icymi-powershell-week-of-29-may-2020/index.md new file mode 100644 index 000000000..d8f771380 --- /dev/null +++ b/content/articles/2020/05/icymi-powershell-week-of-29-may-2020/index.md @@ -0,0 +1,73 @@ +--- +url: /articles/2020-05-29-icymi-powershell-week-of-29-may-2020/ +title: "ICYMI: PowerShell Week of 29-May-2020" +authors: + - Robin Dadswell +date: "2020-05-29T21:35:39+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/05/icymi-powershell-week-of-29-may-2020/ +--- + +Topics include Performance Counters, Out-buffer, Pester and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [][1][_Automating with PowerShell: Creating dynamic distribution groups in all O365 tenants_][2] {.wp-block-heading} + +by @KelvinTegelaar on 27th May + +Kelvin came up with a script to create a distribution group and add users dynamically in the O365 tenants. + +###### [][3][_Solving the PowerShell Counting Challenge_][4] {.wp-block-heading} + +by @JeffHicks on 27th May + +A few great challenge snippets by Jeff Hicks + +###### [][5][_Using Performance Counters_][6] {.wp-block-heading} + +by @TobiasPSP on 28th May + +Learn how to automate CPU load monitoring with performance counters. + +###### [][7][_So That's What OutBuffer Is For!_][8] {.wp-block-heading} + +by @WindosNZ on 28th May + +In this post, Josh explains about what is -OutBuffer and what is it for. + +###### [][9][_Reddit /r/PowerShell - Most Popular Weekly Post_][10] {.wp-block-heading} + +As a long time fish shell user who recently returned to Windows, I really wanted to recreate the prompt from the fish shell, so I wrote a little script to do it! It's my first Powershell script, and I'm amazed by how easy it is to script things; it's just like C#! + +###### [][11][_Tweet of the Week_][12] {.wp-block-heading} + +#pester #pspester #powershell It is finally true, Pester 5.0.0 is out, go grab it in PSGallery. + +###### [][13][_Youtube: Run PowerShell in VS Code on WSL2_][14] {.wp-block-heading} + +In this video, I show how to install PowerShell in Windows Subsystem for Linux version 2. After it's copied to the machine, I then show how to configure the VS Code PowerShell extension so that you can execute PowerShell on the Linux WSL instance. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200529-functiondraft.md#automating-with-powershell-creating-dynamic-distribution-groups-in-all-o365-tenants + [2]: https://www.cyberdrain.com/automating-with-powershell-creating-dynamic-distribution-groups-in-all-o365-tenants/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200529-functiondraft.md#solving-the-powershell-counting-challenge + [4]: https://jdhitsolutions.com/blog/powershell/7494/solving-the-powershell-counting-challenge/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200529-functiondraft.md#using-performance-counters + [6]: https://powershell.one/tricks/performance/performance-counters + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200529-functiondraft.md#so-thats-what-outbuffer-is-for + [8]: https://toastit.dev/2020/05/27/what-outbuffer-is-for/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200529-functiondraft.md#reddit-rpowershell---most-popular-weekly-post + [10]: https://www.reddit.com/r/PowerShell/comments/gpqct8/fishlike_prompt_that_autoshrinks_your_current/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200529-functiondraft.md#tweet-of-the-week + [12]: https://twitter.com/nohwnd/status/1265540452515827715?s=20 + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200529-functiondraft.md#youtube-run-powershell-in-vs-code-on-wsl2 + [14]: https://www.youtube.com/watch?v=HgCOkMe6jBA diff --git a/content/articles/2020/06/_index.md b/content/articles/2020/06/_index.md new file mode 100644 index 000000000..dcfe2f0de --- /dev/null +++ b/content/articles/2020/06/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from June 2020" +description: "PowerShell.org Articles published in June 2020." +--- diff --git a/content/articles/2020/06/a-new-home-for-plaster/index.md b/content/articles/2020/06/a-new-home-for-plaster/index.md new file mode 100644 index 000000000..10f5e3b24 --- /dev/null +++ b/content/articles/2020/06/a-new-home-for-plaster/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2020-06-16-a-new-home-for-plaster/ +title: A New Home for Plaster +authors: + - Jeffery Hicks +date: "2020-06-16T21:17:21+00:00" +categories: + - Announcements + - PowerShell for Admins + - PowerShell for Developers + - Tools +tags: + - Plaster + - Modules + - Community +aliases: + - /2020/06/a-new-home-for-plaster/ +--- + +![](https://powershell.org/wp-content/uploads/2020/06/scaffold-thumb.jpg)Some of you may be familiar with the Plaster PowerShell module. This slick tool lets you build out a new module in seconds. Actually, Plaster can be used to scaffold a framework for any type of project. You can install the [current version from the PowerShell Gallery.](https://www.powershellgallery.com/packages/Plaster/1.1.3) However, the project has been in limbo for a while with no updates or progress. After discussions with the PowerShell Team about the module, a decision was made to transfer ownership to the PowerShell community. We're happy to report that the Plaster repository is now under the auspices of PowerShell.org. The GitHub repo, including pull requests and issues, can now be found at https://github.com/PowerShellOrg/Plaster. +It will take some time to get re-organized and work through the backlog of issues and pull requests. Although it is possible that we'll simply zero out things like pull requests and start with a fresh slate. The basic functionality of the module should work just fine in its current state. Enough members of the PowerShell community recognize the value in the Plaster module which is why this transfer was made. +And frankly, this is one of PowerShell.org's primary purposes: to serve the community. In this case, Microsoft had a languishing asset that needed more attention than what they could provide. Which is exactly where PowerShell.org fits in. We can step in providing the resources and in the end contribute back to the community. A big thank you to Steve Lee at Microsoft for making this possible. diff --git a/content/articles/2020/06/icymi-powershell-week-of-12-june-2020/index.md b/content/articles/2020/06/icymi-powershell-week-of-12-june-2020/index.md new file mode 100644 index 000000000..fb9bad2c0 --- /dev/null +++ b/content/articles/2020/06/icymi-powershell-week-of-12-june-2020/index.md @@ -0,0 +1,96 @@ +--- +url: /articles/2020-06-12-icymi-powershell-week-of-12-june-2020/ +title: "ICYMI: PowerShell Week of 12-June-2020" +authors: + - Robin Dadswell +date: "2020-06-12T15:33:59+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/06/icymi-powershell-week-of-12-june-2020/ +--- + +Topics include Jekyll, Documentation, Scripting Challenges and more... + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + + ***[A small blog on how to start in PowerShell on this boring #FridayEvening enjoy](https://medium.com/@browninfosecguy/how-to-start-in-powershell-82fc2144210c?source=social.tw)*** + + + by Sonny on 6th June + + + Sonny explains on why, how and where to start learning powershell. + + + ***[Documenting with PowerShell: Documenting Microsoft Teams](https://www.cyberdrain.com/documenting-with-powershell-documenting-microsoft-teams/?utm_source=rss&utm_medium=rss&utm_campaign=documenting-with-powershell-documenting-microsoft-teams)*** + + + by Kelvin Tegelaar on 7th June + + + Kelvin shares his script for documenting Teams using Graph API. + + + ***[ForEach-Object and its scriptblocks](https://sergeyvasin.com/2020/06/09/foreach-object-scriptblocks/)*** + + + by Sergey Vasin on 9th June + + + Detailed description of the Foreach-Object cmdlet + + + ***[How to Create a Static Website Using Jekyll and Publish to GitHub Pages for Free](https://adamtheautomator.com/github-pages-jekyll/)*** + + + by June Castillote on 9th June + + + Great tutorial on setting up a Jekyll page on github, these pages can be used to highlight your PowerShell code or start your own blog. + + + ***[Solving the PowerShell Object Age Challenge – Part 1](https://jdhitsolutions.com/blog/powershell/7537/solving-the-powershell-object-age-challenge-part-1/)*** + + + by @JeffHicks on 9th June + + + Jeff describes how he worked out a solution to the Object Age Challenge on Iron Scripter. + + + ***[Auto-Learning Argument Completion](https://community.idera.com/database-tools/powershell/powertips/b/tips/posts/auto-learning-argument-completion)*** + + + by Tobias Weltner on 12th June + + + Argument completion is awesome for a user because valid arguments are always suggested. Many built-in PowerShell commands come with argument completion. + + + ***[Reddit /r/PowerShell - Most Popular Weekly Post](https://www.reddit.com/r/PowerShell/comments/gyfurg/iron_scripter_learn_powershell_through_code/)*** + + + A thread on fun scripting challenges to help you get better at scripting. + + + ***[Tweet of the Week](https://twitter.com/Steve_MSFT/status/1271187749752586241?s=20)*** + + + PowerShell 7.0.2 is our latest stable version and is out! + + + ***[Youtube: Don Jones - Shell of an Idea Exploring the Origins of PowerShell](https://www.youtube.com/watch?v=hlPrRTqVjz4)*** + + + Join Don and tale a deep look in to the untold history of PowerShell, a topic he’s been exploring for his upcoming book, “Shell of an Idea: The Untold History of PowerShell” diff --git a/content/articles/2020/06/icymi-powershell-week-of-19-june-2020/index.md b/content/articles/2020/06/icymi-powershell-week-of-19-june-2020/index.md new file mode 100644 index 000000000..565b614e1 --- /dev/null +++ b/content/articles/2020/06/icymi-powershell-week-of-19-june-2020/index.md @@ -0,0 +1,84 @@ +--- +url: /articles/2020-06-19-icymi-powershell-week-of-19-june-2020/ +title: "ICYMI: PowerShell Week of 19-June-2020" +authors: + - Robin Dadswell +date: "2020-06-19T14:00:53+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +aliases: + - /2020/06/icymi-powershell-week-of-19-june-2020/ +--- + +Topics include PSReadLine, Active Directory Monitoring, PowerShell Inventory and more... + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + +###### + [*Monitoring with PowerShell: Monitoring Active Directory Health*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-active-directory-health/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-active-directory-health) + + + by Kelvin Tegelaar on 15th June + + + A Script for monitoring the entire general health of a domain controller + + +###### + [*PowerShell command history*](https://sergeyvasin.com/2020/06/16/powershell-history/) + + + by СЕРГЕЙ ВАСИН on 16th June + + + Exploring your PS History with PSReadLine + + +###### + [*Building a PowerShell Inventory*](https://jdhitsolutions.com/blog/powershell/7549/building-a-powershell-inventory/) + + + by Jeff Hicks on 16th June + + + PowerShell code that we could use to inventory our PowerShell script library. + + +###### + [*Resolving PowerShell Module Assembly Dependency Conflicts*](https://devblogs.microsoft.com/powershell/resolving-powershell-module-assembly-dependency-conflicts) + + + by Robert Holt on 17th June + + + When writing a PowerShell module, especially a binary module (i.e. one written in a language like C# and loaded into PowerShell as an assembly/DLL), it’s natural to take dependencies on other packages or libraries to provide functionality. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/h7jk81/how_to_scan_ip_addresses_range_and_get_important/) + + + Part 4 of a blog post sharing a script to scan IP Address and provide details. + + +###### + [*Tweet of the Week*](https://twitter.com/cinnamon_msft/status/1273662560202416128?s=20) + + + The first update to Windows Terminal Preview is out now! + + +###### + [*Youtube: Intro to REST API calls with Powershell*](https://www.youtube.com/watch?v=-NVh5cVOeO4) + + + CodeDoge's video to help you get started with APIs using PowerShell. diff --git a/content/articles/2020/06/icymi-powershell-week-of-26-june-2020/index.md b/content/articles/2020/06/icymi-powershell-week-of-26-june-2020/index.md new file mode 100644 index 000000000..c42dc0c52 --- /dev/null +++ b/content/articles/2020/06/icymi-powershell-week-of-26-june-2020/index.md @@ -0,0 +1,99 @@ +--- +url: /articles/2020-06-26-icymi-powershell-week-of-26-june-2020/ +title: "ICYMI: PowerShell Week of 26-June-2020" +authors: + - Robin Dadswell +date: "2020-06-26T14:00:00+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/06/icymi-powershell-week-of-26-june-2020/ +--- + +Topics include Native PowerShell Commands, Splatting Program Parameters, Windows Terminal and more... + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + + +###### + [*Getting file metadata with PowerShell similar to what Windows Explorer provides*](https://evotec.xyz/getting-file-metadata-with-powershell-similar-to-what-windows-explorer-provides/) + + + by Przemyslaw Klys on 20th June + + + When you use Get-Item in PowerShell you get a ton of properties, but it is not all the properties. You can find out more about your Files with this blog post. + + +###### + [*Fun with Azure Key Vault Part 2: Integration with Azure Functions*](https://toastit.dev/2020/06/21/azure-key-vault-2/) + + + by Josh King on 21st June + + + The second part of Josh King's dive into Azure Key Vaults showing how to store and use values in azure functions. + + +###### + [*How to Send Emails Using Amazon Simple Email Service (SES): Installation and Configuration*](https://adamtheautomator.com/hmailserver-getting-started/) + + + by @junecastillote on 23rd June + + + Learn how to set up SES and send emails with PowerShell. + + +###### + [*Native Commands in PowerShell – A New Approach*](https://devblogs.microsoft.com/powershell/native-commands-in-powershell-a-new-approach) + + + by James W Truher on 23rd June + + + In this two part blog post James is going to investigate how PowerShell can take better advantage of native executables. + + +###### + [*Formatting PowerShell TimeSpans*](https://jdhitsolutions.com/blog/powershell/7565/formatting-powershell-timespans/) + + + by Jeffery Hicks on 24th June + + + Jeff Hicks wrote his notes on  + + +`Formating the TimeSpans +`using PowerShell, just take a look. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/hbz17e/til_you_can_splat_program_parameters_too/) + + + u/purplemonkeymad shares otherways to splat arguments other than just sending them to cmdlets. + + +###### + [*Tweet of the Week*](https://twitter.com/PowerShellMich1/status/1276427895305416704) + + + Take part in a poll about where you run your production scripts! + + +###### + [*Youtube: Windows Terminal Deep Dive with Justin Grote*](https://youtu.be/Wfvi1Yac1fw) + + + If you missed RTPSUG's virtual meetup last week you can watch the recording. Justin Grote does a deep dive on Windows Terminal. diff --git a/content/articles/2020/06/iron-scripter-learn-powershell-through-code-challenges/index.md b/content/articles/2020/06/iron-scripter-learn-powershell-through-code-challenges/index.md new file mode 100644 index 000000000..55a8d76ee --- /dev/null +++ b/content/articles/2020/06/iron-scripter-learn-powershell-through-code-challenges/index.md @@ -0,0 +1,53 @@ +--- +url: /articles/2020-06-07-iron-scripter-learn-powershell-through-code-challenges/ +title: "Iron Scripter: Learn PowerShell through code challenges" +authors: + - Mike Kanakos +date: "2020-06-07T15:00:00+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks + - Training +tags: + - Iron Scripter + - Code Challenges + - Learning +aliases: + - /2020/06/iron-scripter-learn-powershell-through-code-challenges/ +--- + +Hello, friends! Today I want to talk about the Iron Scripter code challenges and the accompanying website. The challenges are excellent for practicing challenging concepts. What’s that you say? Not familiar with Iron Scripter? Let’s get you up to speed. + +## Iron Scripter: A brief history lesson {.wp-block-heading} + +The [Iron Scripter][1] website is part of the PowerShell.org family and provides material for the Iron Scripter challenge that takes place at PowerShell Summit each year. For those unfamiliar with the Iron Scripter event at PowerShell summit, let me give you a brief introduction. + +The Iron Scripter challenge was a concept dreamed up by Don Jones, Jeff Hicks and Richard Siddaway. The concept was to challenge small teams of participants to work out a complex problem through teamwork in front of a live audience with a limited amount of time. Three teams (known as factions) battle to solve the same problem and each present their solution at the end of the allotted time. Each faction must be creative and divide workloads to complete the complex challenge in the scant time allotted. The factions must work as a team to make meaningful progress. + +Iron Scripter is one of the most popular events at PowerShell Summit. The winning faction is crowned “champions” and hold the title for a full year until next years’ competition. Many faction members display their affiliation on their websites as a badge of honor. + +## Learning with Iron Scripter {.wp-block-heading} + +The Iron Scripter website is used to explain the competition, share code hints, and give general tips to help faction members prepare for the upcoming challenge. But along the way, the Iron Scripter team began posting other challenges that anyone could do on their own. These stand-alone challenges are lesser known in the PowerShell community and are a missed opportunity for people looking to learn basic code principles or hone their skills. Taking part in these stand-alone code challenges can help you get better at writing great code. + +The challenges I am referring to are scripting puzzles designed to test your knowledge. You can solve most puzzles using multiple methods, but to do so requires you to dive deep into your knowledge of scripting and code principles to figure out interesting ways to solve the challenges. The challenges are the brainchild of the legendary [Jeff Hicks][2]. Jeff has been an integral part of the Iron Scripter competition since its first beginnings. Jeff has been educating people about PowerShell and its usage for system administration for many years. He is revered for his blog posts, books and customized training seminars. His challenges on Iron Scripter are challenging but educational. + +## Challenges for all skill levels {.wp-block-heading} + +If you haven’t visited yet, head over to the [IronScripter][1] website and locate the tags on the left-hand side of the page. You’ll notice three tags related to skill levels: [Beginner][3], [Intermediate][4] and [Advanced][5]. Each of those tags will point you toward individual challenges sorted by skill level. Each challenge has a simple set of instructions (rules) for what you are trying to solve, and for each post, there should be comments from community members that have shared their solution to the puzzle. + +If you worried that maybe you don’t know enough to take part, don’t let that stop you. The point of these puzzles is to challenge all skills levels with targeted exercises that reinforce basic coding concepts. These challenges help you get better at techniques used to write efficient code. + +The brilliance in these puzzles is that they age well. You can try any of the puzzles on the website, regardless of their age, because the basic concepts that these challenges test change little with each release of PowerShell. The puzzles have variations based on skill level with each variation becoming more challenging. This allows you to go back and try the more challenging versions of the puzzles you already completed. + +If you haven’t tried the challenges yet, you can dive right in with the latest puzzle and when you think you have solved it, post your solution in the comments and wait for someone to review your answer. If you’re struggling to solve a puzzle, you can peek at previous solutions for how someone else attempted to solve the puzzle. + +When learning how to code, it’s important to try unique methods of learning. Books, blogs and videos are fantastic resources to learn from, but real-world problem solving scenarios can offer unique opportunities to see how code concepts work “in the wild”. The puzzles designed by Jeff are building blocks that will help you write better code for your own scripting solutions. + +I’ll be featuring Jeff’s code challenges in the coming weeks and months and I hope you take part in trying to solve the challenges and share your work. Watch here for more information on upcoming Iron Scripter challenges! + + [1]: https://ironscripter.us/ + [2]: https://jdhitsolutions.com/blog/about-me/ + [3]: https://ironscripter.us/tag/beginner/ + [4]: https://ironscripter.us/tag/intermediate/ + [5]: https://ironscripter.us/tag/advanced/ diff --git a/content/articles/2020/06/manage-citrix-tags-with-powershell/index.md b/content/articles/2020/06/manage-citrix-tags-with-powershell/index.md new file mode 100644 index 000000000..96f8b1ea6 --- /dev/null +++ b/content/articles/2020/06/manage-citrix-tags-with-powershell/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2020-06-30-manage-citrix-tags-with-powershell/ +title: Manage Citrix Tags with PowerShell +authors: + - n2501r +date: "2020-06-30T15:58:07+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +tags: + - Citrix + - Automation +aliases: + - /2020/06/manage-citrix-tags-with-powershell/ +--- + +Managing Citrix tags can be a long painful process if done the traditional way through Citrix Studio, that is what drove me to PowerShell for this task.  Citrix Studio is a great tool, but it can be very time consuming especially if you have to do bulk tag actions. Citrix tags can be used in several methods, but I have focused on desktop tagging. This post will cover the following scenarios: + + + * List all current Citrix tags + * List the members of a specific Citrix tag + * Creation of a new Citrix tag + * Removing a Citrix tag from a list of desktop names + * Adding a Citrix tag from a list of desktop names + * Deleting a Citrix tag while removing it from all members + +Give it a look: +[SpiderZebra.com](https://spiderzebra.com/2020/06/29/manage-citrix-tags-with-powershell/) + +**Nick Richardson (@ChiefNSR)** diff --git a/content/articles/2020/06/simple-powershell-gui/index.md b/content/articles/2020/06/simple-powershell-gui/index.md new file mode 100644 index 000000000..190ef2855 --- /dev/null +++ b/content/articles/2020/06/simple-powershell-gui/index.md @@ -0,0 +1,29 @@ +--- +url: /articles/2020-06-17-simple-powershell-gui/ +title: Simple PowerShell GUI +authors: + - n2501r +date: "2020-06-17T21:57:31+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks + - Tools + - Tutorials +tags: + - GUI + - Automation +aliases: + - /2020/06/simple-powershell-gui/ +--- + +Over the years, I have supported and created multiple types of GUIs.  I finally decided a few years ago to create a very simple menu driven PowerShell GUI.  I wanted something that was very powerful yet very simple to maintain.  I really enjoy automating manual administrative tasks, so that is what drove this project in the first place.  Before I created the menu driven PowerShell GUI, I had directories and directories of very specific scripts to do specific tasks.  I decided to standardize and consolidate all of those scripts into one menu driven PowerShell GUI.  By doing this, I took the guess work out of determining which PowerShell script to run for a given task.  This has greatly helped my colleagues know exactly what to run and how. +Feel free to check it out for yourself at my site: +[SpiderZebra.com](https://spiderzebra.com/2020/05/21/how-to-create-a-simple-powershell-gui/) +.  While you're there, you can take a look at a few of my other related posts: + + * +[Create a Text Box to Accept User Input for PowerShell GUI](https://spiderzebra.com/2020/06/17/create-a-text-box-to-accept-user-input-for-powershell-gui/) + + * [Utilizing PowerShell Out-GridView as a GUI Alternative](https://spiderzebra.com/2020/05/26/utilizing-powershell-out-gridview-as-a-gui-alternative/) + +**Nick Richardson (@ChiefNSR)** diff --git a/content/articles/2020/07/_index.md b/content/articles/2020/07/_index.md new file mode 100644 index 000000000..bbf2777e2 --- /dev/null +++ b/content/articles/2020/07/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from July 2020" +description: "PowerShell.org Articles published in July 2020." +--- diff --git a/content/articles/2020/07/creating-a-powershell-module-to-improve-your-code/index.md b/content/articles/2020/07/creating-a-powershell-module-to-improve-your-code/index.md new file mode 100644 index 000000000..4220262f1 --- /dev/null +++ b/content/articles/2020/07/creating-a-powershell-module-to-improve-your-code/index.md @@ -0,0 +1,49 @@ +--- +url: /articles/2020-07-27-creating-a-powershell-module-to-improve-your-code/ +title: Creating a PowerShell Module to Improve Your Code +authors: + - n2501r +date: "2020-07-27T18:24:52+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks + - Tutorials +tags: + - Modules + - SQL + - Best Practices +aliases: + - /2020/07/creating-a-powershell-module-to-improve-your-code/ +--- + +Do you have PowerShell code that you reuse in your scripts over and over? Do you have server names hard coded in variables? Are you using a text file or CSV file to import server names? Do you find yourself only utilizing one server out of a cluster of servers to make your PowerShell commands? These are the questions I asked myself and the answer used to be YES. In this post, I will go over how you can store your infrastructure server information in a SQL database and call that data from a custom PowerShell module. By utilizing this method, you can expect the below benefits: + + + - + Centralized code means less places to modify if you want to make a change + + + - + Randomized server selection to prevent over usage of one server + + + - + Centralized location to store server information + + + - + Easily add or remove server infrastructure as your environment changes + + + - + Flexibility to pull server data from multiple sites and locations + + + - + Standardized scripts make for easier readability and debugging + + + +Feel free to check it out for yourself at my site: +[SpiderZebra.com](https://spiderzebra.com/2020/07/27/creating-a-powershell-module-to-improve-your-code/) + **Nick Richardson (@ChiefNSR)** diff --git a/content/articles/2020/07/icymi-powershell-week-of-03-july-2020/index.md b/content/articles/2020/07/icymi-powershell-week-of-03-july-2020/index.md new file mode 100644 index 000000000..b8bc84969 --- /dev/null +++ b/content/articles/2020/07/icymi-powershell-week-of-03-july-2020/index.md @@ -0,0 +1,63 @@ +--- +url: /articles/2020-07-03-icymi-powershell-week-of-03-july-2020/ +title: "ICYMI: PowerShell Week of 03-July-2020" +authors: + - Robin Dadswell +date: "2020-07-03T14:00:34+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/07/icymi-powershell-week-of-03-july-2020/ +--- + +Topics include PSRemoting, Loops, C# and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200703-functiondraft.md#a-book-powershell-to-c-and-back)[*A Book: PowerShell to C# and Back*](https://tommymaynard.com/a-book-powershell-to-c-sharp-and-back/) + +by Tommy Maynard on 29th June +Announcement of New book. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200703-functiondraft.md#powershell-classes---validating-arm-parameters)[*PowerShell Classes - Validating ARM Parameters*](https://dexterposh.github.io/posts/007-pwsh-class-usecase/) + +by Deepak Dhami(DexterPosh) on 29th June +A PowerShell class to model the ARM parameters file and use that to validate the ARM template parameter inputs. + +###### [*Modern Auth and Unattended Scripts in Exchange Online PowerShell V2*](https://techcommunity.microsoft.com/t5/exchange-team-blog/modern-auth-and-unattended-scripts-in-exchange-online-powershell/ba-p/1497387) + +by The Exchange Team on 30th June +Preview of the new ability within Exchange Online PowerShell for unattended Modern Auth! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200703-functiondraft.md#magic-of-myinvocation-in-powershell)[*Magic of $MyInvocation in PowerShell*](https://kpatnayakuni.com/2020/07/01/powershell-magic-of-myinvocation/) + +by @kpatnayakuni on 1st July +Convert a key parameter value into a true PowerShell command with the help of automatic variable  + + +`$MyInvocation +`. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200703-functiondraft.md#setup-ftp-server-with-powershell)[*Setup FTP Server with PowerShell*](https://ridicurious.com/2020/07/02/setup-ftp-server-with-powershell) + +by Madhav Bhandari on 2nd July +Step by step installation and configuration of the FTP server using PowerShell and IIS from installing the required Windows features, setting up sites, ports, and root folder to creating FTP users and authenticating them on FTP site to allow access to the FTP servers. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200703-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/hhvf1l/free_online_wpf_designer_for_powershell_released/) + +u/nepronen announces an alpha version of a useful too to help create GUIs in PowerShell + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200703-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/PowerShellMich1/status/1278971370265694208) + +Let's have a discussion about PS Remoting + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200703-functiondraft.md#youtube-powershell-tutorial---chapter-7---loops)[*Youtube: PowerShell Tutorial - Chapter 7 - Loops*](https://www.youtube.com/watch?v=_WIZPgPB8Wk) + +A 25 minute overview of the various types of loops within PowerShell diff --git a/content/articles/2020/07/icymi-powershell-week-of-10-july-2020/index.md b/content/articles/2020/07/icymi-powershell-week-of-10-july-2020/index.md new file mode 100644 index 000000000..bd4077836 --- /dev/null +++ b/content/articles/2020/07/icymi-powershell-week-of-10-july-2020/index.md @@ -0,0 +1,54 @@ +--- +url: /articles/2020-07-10-icymi-powershell-week-of-10-july-2020/ +title: "ICYMI: PowerShell Week of 10-July-2020" +authors: + - Robin Dadswell +date: "2020-07-10T16:08:28+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/07/icymi-powershell-week-of-10-july-2020/ +--- + +Topics include Hyper-V, Windows Terminal, VMWare and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200710-functiondraft.md#powershell-to-c--back-hello-world-explained)[*PowerShell to C# & back: Hello World Explained*](https://ridicurious.com/2020/07/07/powershell-to-csharp-and-back-hello-world-explained/) + +by Prateek Singh on 6th July +Creating a Hello World app in c# using dotnet cli. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200710-functiondraft.md#cloud-director-service---part-1--vmwarecdscommunity-powershell-module)[*Cloud Director service - Part 1 : VMware.CDS.Community PowerShell module*](https://pigeonnuggets.com/blog/Cloud-Director-service-VMware.CDS.Community-PowerShell-module/) + +by Adrian Begg on 7th July +PowerShell module to facilitate code based deployments of VMware Cloud Director instances using VMWare’s recently announced Cloud Director service. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200710-functiondraft.md#windows-terminal-the-ultimate-guide)[*Windows Terminal: The Ultimate Guide*](https://adamtheautomator.com/new-windows-terminal/) + +by @devbyaccident on 7th July +In this ultimate guide, you're going to get a full rundown of nearly all features of Windows Terminal and learn how it can help you get things on Windows at the command line. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200710-functiondraft.md#how-to-manage-hyper-v-vm-checkpoints-with-powershell)[*How To Manage Hyper-V VM Checkpoints With Powershell*](https://www.thomasmaurer.ch/2020/07/how-to-manage-hyper-v-vm-checkpoints-with-powershell/) + +by @ThomasMaurer on 7th July +In this blog post Thomas explains how to create, manage, apply, and remove VM Checkpoints in Hyper-V using PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200710-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/hma63m/findcmdlet_a_search_engine_for_powershell_cmdlets/) + +u/mrmonday announces an alpha version of a search engine for PowerShell cmdlets + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200710-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1280262725625511936?s=20) + +PowerShell 7.1-Preview.5 is out! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200710-functiondraft.md#youtube-pspowerhour-epsiode-3---powershell-71-the-modernnext-gen-shell)[*Youtube: PSPowerHour Epsiode 3 - PowerShell 7.1: The Modern/Next-Gen Shell*](https://www.youtube.com/watch?v=YDEbQlxumzg) + +Join Steve and Jason to discuss future shell improvements, Predictive IntelliSense, Dynamic Help, Native Commands and more in this exciting look at PowerShell 7.1. diff --git a/content/articles/2020/07/icymi-powershell-week-of-17-july-2020/index.md b/content/articles/2020/07/icymi-powershell-week-of-17-july-2020/index.md new file mode 100644 index 000000000..40de74a3a --- /dev/null +++ b/content/articles/2020/07/icymi-powershell-week-of-17-july-2020/index.md @@ -0,0 +1,56 @@ +--- +url: /articles/2020-07-17-icymi-powershell-week-of-17-july-2020/ +title: "ICYMI: PowerShell Week of 17-July-2020" +authors: + - Robin Dadswell +date: "2020-07-17T16:00:13+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/07/icymi-powershell-week-of-17-july-2020/ +--- + +Topics include OneDrive client, HTML reports, Beautiful code and more... +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200717-functiondraft.md#automate-azure-update-management-scheduling-with-powershell)[*Automate Azure update management scheduling with PowerShell*](https://4bes.nl/2020/07/12/automate-azure-update-management-scheduling-with-powershell/) + +by Barbara Forbes on 12th July +Barbara is explaining about how to automate Azure update management and scheduling updates using PowerShell + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200717-functiondraft.md#active-directory-dhcp-report-to-html-or-email-with-zero-html-knowledge)[*Active Directory DHCP Report to HTML or EMAIL with zero HTML knowledge*](https://evotec.xyz/active-directory-dhcp-report-to-html-or-email-with-zero-html-knowledge/) + +by Przemyslaw Klys on 12th July +Przemyslaw is using PSWriteHTML module and and demonstrating how to generate html reports seamlessly. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200717-functiondraft.md#monitoring-with-powershell-monitoring-the-onedrive-client-limitations)[*Monitoring with PowerShell: Monitoring the Onedrive client limitations*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-the-onedrive-client-limitations/) + +by Kelvin Tegelaar on 13th July +Kelvin shared a script to monitor the Onedrive sysc status and client limitations. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200717-functiondraft.md#elevate-your-documentation-with-powershell-jupyter-notebook)[*Elevate your documentation with PowerShell Jupyter Notebook*](https://blog.darrenjrobinson.com/elevate-your-documentation-with-powershell-jupyter-notebook/) + +by Darren Robinson on 16th July +Some more information on using PowerShell Jupyter Notebooks + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200717-functiondraft.md#want-to-write-beautiful-powershell-code-heres-how)[*Want to Write Beautiful PowerShell Code? Here's How.*](https://adamtheautomator.com/beautiful-powershell-code/) + +by Adam Bertram on 16th July +Adam explains the best pratices in writing the beautiful PowerShell Code + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200717-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/hqwftf/automatically_set_desktop_wallpaper_to_the/) + +u/Otacrow shared a script to set the desktop wallpaper from the current spotlight image + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200717-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1283830975131078656?s=20) + +PowerShell 7.0.3 and 6.2.7 are out! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200717-functiondraft.md#youtube-change-your-world-the-way-you-want-a-simple-contribution-to-powershell-7)[*Youtube: Change your world the way you want: A simple contribution to PowerShell 7*](https://www.youtube.com/watch?v=BDEAA_oF3ss) + +Prasoon Karunan took a session on how to contribute to PowerShell, that includes finding the issues, identifying the code changes, fixing, testing and raising a pull request. diff --git a/content/articles/2020/07/icymi-powershell-week-of-24-july-2020/index.md b/content/articles/2020/07/icymi-powershell-week-of-24-july-2020/index.md new file mode 100644 index 000000000..9109ec3ba --- /dev/null +++ b/content/articles/2020/07/icymi-powershell-week-of-24-july-2020/index.md @@ -0,0 +1,55 @@ +--- +url: /articles/2020-07-24-icymi-powershell-week-of-24-july-2020/ +title: "ICYMI: PowerShell Week of 24-July-2020" +authors: + - Robin Dadswell +date: "2020-07-24T14:00:15+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/07/icymi-powershell-week-of-24-july-2020/ +--- + +Topics include SSH Remoting without SSH, VS Code, SQL Server and more. + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200724-functiondraft.md#adding-custom-types-to-powershell-objects)[*Adding custom types to PowerShell objects*](https://sergeyvasin.com/2020/07/21/adding-types-to-objects/) + +by Sergey Vasin on 21st July +Objects that result from PowerShell commands execution belong to some data type, but this doesn’t prevent us from adding a custom type. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200724-functiondraft.md#discovering-provider-specific-commands)[*Discovering Provider Specific Commands*](https://jdhitsolutions.com/blog/powershell/7604/discovering-provider-specific-commands/) + +by @JeffHicks on 22nd July +With the loss of provider aware help Jeff offers some suggestions to know what commands are available to with specific providers. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200724-functiondraft.md#using-secret-management-module-to-run-ssms-vs-code-and-azure-data-studio-as-another-user)[*Using Secret Management module to run SSMS, VS Code and Azure Data Studio as another user.*](https://sqldbawithabeard.com/2020/07/20/using-secret-management-module-to-run-ssms-vs-code-and-azure-data-studio-as-another-user/) + +by @sqldbawithbeard on 22nd July +Discusses using the Secret Management Module to run applications as other users, specifically an admin account. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200724-functiondraft.md#finding--downloading-required-sql-server-updates)[*Finding & Downloading Required SQL Server Updates*](https://flxsql.com/downloading-latest-sql-server-updates/?utm_source=rss&utm_medium=rss&utm_campaign=downloading-latest-sql-server-updates) + +by Andy Levy on 22nd July +An interesting look at downloading SQL updates via PowerShell + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200724-functiondraft.md#powershell-remoting-over-ssh-without-ssh)[*PowerShell Remoting Over SSH, Without SSH!*](https://blog.devolutions.net/2020/07/powershell-remoting-over-ssh-without-ssh) + +by @awakecoding on 22nd July +Marc-Andre shows how to use socat instead of ssh to do PowerShell remoting in PowerShell core. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200724-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/hulpid/free_virtual_powershell_conference_with_keynote/) + +Chicago PowerShell user Group is doing a virtual conference with keynote speaker Jeffrey Snover. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200724-functiondraft.md#youtube-weaning-yourself-away-from-gui-based-ad-administration-with-mike-kanakos)[*Youtube: Weaning Yourself Away From GUI-Based AD Administration with Mike Kanakos*](https://youtu.be/H5BPr_b26vA) + +On the Hybrid Identity Podcast Mike discusses IT pros who have not yet made the jump to the cmd line, scripting and automation. diff --git a/content/articles/2020/07/icymi-powershell-week-of-31-july-2020/index.md b/content/articles/2020/07/icymi-powershell-week-of-31-july-2020/index.md new file mode 100644 index 000000000..89356dad7 --- /dev/null +++ b/content/articles/2020/07/icymi-powershell-week-of-31-july-2020/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2020-07-31-icymi-powershell-week-of-31-july-2020/ +title: "ICYMI: PowerShell Week of 31-July-2020" +authors: + - Robin Dadswell +date: "2020-07-31T14:00:02+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/07/icymi-powershell-week-of-31-july-2020/ +--- + +Topics include Windows Sandbox, Pausing scripts, PowerCLI, SendGrid and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200731-functiondraft.md#pssendgrid-send-email-from-powershell-with-sendgrid)[*PSSendgrid: Send email from PowerShell with Sendgrid*](https://4bes.nl/2020/07/26/pssendgrid-send-email-from-powershell-with-sendgrid/) + +by @Ba4bes on 26th July +In this post, Barbara will show you how to send email from PowerShell with SendGrid. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200731-functiondraft.md#doing-more-with-windows-sandbox)[*Doing More with Windows Sandbox*](https://jdhitsolutions.com/blog/powershell/7621/doing-more-with-windows-sandbox/) + +by @JeffHicks on 29th July +Jeff is showing us on how to enable and play around with the Windows Sandbox using PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200731-functiondraft.md#documenting-with-powershell-documenting-azure-vms-and-lighthouse-setup)[*Documenting with PowerShell: Documenting Azure VMs (And lighthouse setup)*](https://www.cyberdrain.com/documenting-with-powershell-documenting-azure-vms-and-lighthouse-setup/) + +by @KelvinTegelaar on 29th July +Kelvin shows how to setup Azure Lighthouse and manage via PowerShell, and demonstrate how to document the VMs. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200731-functiondraft.md#how-to-pause-a-powershell-script)[*How to Pause a PowerShell Script*](https://adamtheautomator.com/how-to-pause-a-powershell-script/) + +by @alistek on 30th July +In this article, Adam is going to break down the ability to pause into either native and non-native commands in PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200731-functiondraft.md#managing-vcd-vm-disks-from-powercli--powershell)[*Managing VCD VM Disks from PowerCLI / PowerShell.*](https://kiwicloud.ninja/?p=1221) + +by @jondwaite on 30th July +A way to manage the internal hard disks attached to some of their virtual machines from code. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200731-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/hytigy/retro_synthwave_theme_for_powershell_in_windows/?utm_source=share&utm_medium=web2x) + +u/thebeersgoodnbelgium made a synthwave-y type theme for PowerShell for Windows Terminal, please take a look. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200731-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1288182455325716480?s=20) + +Checkout the new blog post from @sydneysmithreal on the latest PSScriptAnalyzer 1.19.1 release! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200731-functiondraft.md#youtube-how-to-use-net-interactive-jupyter-notebooks-in-daily-work-life--data-exposed-mvp-edition)[*Youtube: How to Use .NET Interactive Jupyter Notebooks in Daily Work-Life | Data Exposed: MVP Edition*](https://youtu.be/W-F0gO7dVOE) + +In this episode, MVP Rob Sewell will introduce Jupyter Notebooks and show you how useful they could be for you in your daily work-life for Incident Resolution, Repeatable Tasks, and Demoing New Features. diff --git a/content/articles/2020/08/_index.md b/content/articles/2020/08/_index.md new file mode 100644 index 000000000..a6ea763e9 --- /dev/null +++ b/content/articles/2020/08/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from August 2020" +description: "PowerShell.org Articles published in August 2020." +--- diff --git a/content/articles/2020/08/icymi-powershell-week-of-07-august-2020/index.md b/content/articles/2020/08/icymi-powershell-week-of-07-august-2020/index.md new file mode 100644 index 000000000..1e8efef5b --- /dev/null +++ b/content/articles/2020/08/icymi-powershell-week-of-07-august-2020/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2020-08-07-icymi-powershell-week-of-07-august-2020/ +title: "ICYMI: PowerShell Week of 07-August-2020" +authors: + - Robin Dadswell +date: "2020-08-07T14:00:14+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/08/icymi-powershell-week-of-07-august-2020/ +--- + +Topics include Azure VMs, PSReadline, Terraform and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200807-functiondraft.md#terraform---uploading-a-local-powershell-module-to-an-azure-automation-account)[*Terraform - Uploading a local PowerShell module to an Azure Automation account*](http://feedproxy.google.com/~r/Lazywinadmin/~3/m6v1hvsEk00/terraform_azure-automationacc_psmoduleupload.html) + +by François-Xavier Cat on 2nd August +I had a scenario where some of my runbooks were using a custom PowerShell module that was not publicly available. This short article document my approach. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200807-functiondraft.md#monitoring-with-powershell-monitoring-b-series-vm-credits)[*Monitoring with PowerShell: Monitoring B-Series VM credits*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-b-series-vm-credits/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-b-series-vm-credits) + +by Kelvin Tegelaar on 3rd August +A lot of MSPs use the B-Series VMs for tasks, and why wouldn’t you? This script helps you monitor those VMs for remaining credits. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200807-functiondraft.md#powershell-201-2-vms-internal-load-balancer)[*PowerShell: 201-2-vms-internal-load-balancer*](https://kpatnayakuni.com/projects/arm-templates-to-powershell-scripts/ps-201-2-vms-internal-load-balancer/) + +by Kiran Patnayakuni on 4th August +This is a conversion of ARM template 201-2-vms-internal-load-balancer  from the repository azure\azure-quickstart-templates  to PowerShell Script + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200807-functiondraft.md#enhancing-interaction-with-quotes-and-brackets-by-using-psreadline)[*Enhancing interaction with quotes and brackets by using PSReadline*](https://sergeyvasin.com/2020/08/04/quotes-and-brackets/) + +by Sergey Vasin on 4th August +Using PSReadline to enhance PS Console with things like SmartInsertQuotes and PairedBraces. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200807-functiondraft.md#validating-computer-names-with-powershell)[*Validating Computer Names With Powershell*](https://itluke.online/2020/08/05/validating-computer-names-with-powershell/) + +by @LFullenwarth on 5th August +Luke is explaining about the various parameter validation types in PowerShell, please take a look. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200807-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/i4hjm8/ive_created_my_first_practical_script_and_i_felt/) + +u/DragonToutNu shares his success story. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200807-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1291146520742354944?s=20) + +PowerShell team is making some improvements to DSC support in #PowerShell 7.1. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200807-functiondraft.md#youtube-powershell-live-training---apis-and-web-requests)[*Youtube: PowerShell Live Training - APIs and Web Requests*](https://www.youtube.com/watch?v=GZ2nIErqAvY) + +Follow along in this live training video to learn about using APIs in PowerShell. diff --git a/content/articles/2020/08/icymi-powershell-week-of-14-august-2020/index.md b/content/articles/2020/08/icymi-powershell-week-of-14-august-2020/index.md new file mode 100644 index 000000000..db9c15515 --- /dev/null +++ b/content/articles/2020/08/icymi-powershell-week-of-14-august-2020/index.md @@ -0,0 +1,45 @@ +--- +url: /articles/2020-08-14-icymi-powershell-week-of-14-august-2020/ +title: "ICYMI: PowerShell Week of 14-August-2020" +authors: + - Robin Dadswell +date: "2020-08-14T19:53:53+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/08/icymi-powershell-week-of-14-august-2020/ +--- + +Topics include Selenium, VS Code, Microsoft 365 and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200814-functiondraft.md#how-to-use-the-new-exchange-online-v2-powershell-module-for-unattended-automation-scripts)[*How to Use the New Exchange Online V2 PowerShell Module for Unattended Automation Scripts*](https://adamtheautomator.com/exchange-online-powershell-mfa/) + +by June Castillote on 11th August +In this article, you will learn how to prepare to use the EXO V2 module to run Exchange Online unattended scripts with app-only modern authentication. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200814-functiondraft.md#automating-with-powershell-increasing-the-o365-secure-score)[*Automating with PowerShell: Increasing the O365 Secure Score*](https://www.cyberdrain.com/automating-with-powershell-increasing-the-o365-secure-score/?utm_source=rss&utm_medium=rss&utm_campaign=automating-with-powershell-increasing-the-o365-secure-score) + +by Kelvin Tegelaar on 12th August +Second post by Kevin showing a module that will apply settings to increase 0365 secure score. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200814-functiondraft.md#updated-powershell-tools)[*Updated PowerShell Tools*](https://jdhitsolutions.com/blog/powershell/7648/updated-powershell-tools/) + +by Jeff Hicks on 12th August +New Version of PSScriptTools + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200814-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/prasoonkarunan/status/1294293462779494400) + +Session recording of a run through of Azure PowerShell + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200814-functiondraft.md#youtube-using-selenium-to-test-web-frameworks-with-stephen-valdinger)[*Youtube: Using Selenium to test Web Frameworks with Stephen Valdinger*](https://youtu.be/bynYFT02ACM) + +Join Stephen and discover how you could take your web testing and troubleshooting to the next level with the Selenium module. diff --git a/content/articles/2020/08/icymi-powershell-week-of-21-august-2020/index.md b/content/articles/2020/08/icymi-powershell-week-of-21-august-2020/index.md new file mode 100644 index 000000000..0cef91aee --- /dev/null +++ b/content/articles/2020/08/icymi-powershell-week-of-21-august-2020/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2020-08-21-icymi-powershell-week-of-21-august-2020/ +title: "ICYMI: PowerShell Week of 21-August-2020" +authors: + - Robin Dadswell +date: "2020-08-21T14:00:11+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/08/icymi-powershell-week-of-21-august-2020/ +--- + +Topics include Microsoft 365, PowerShell 7.1, Managing Cloud with Powershell and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200821-functiondraft.md#powershell-to-c-and-back-data-types-type-conversion-variables-and-operators)[*PowerShell to C# and Back: Data Types, Type conversion, Variables and Operators*](https://ridicurious.com/2020/08/16/powershell-to-c-and-back-data-types-type-conversion-variables-and-operators/) + +by Prateek Singh on 16th August +It’s like an old tradition to introduce new programming language to the readers using a ‘Hello World!’ program, so keeping that in mind here are the steps to create your first Hello World program in C# and a step by step explanation of each line and keyword used in the program. We also have some examples where we would be consuming C# code in PowerShell and executing it. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200821-functiondraft.md#powershell-71-preview-6)[*PowerShell 7.1 Preview 6*](https://devblogs.microsoft.com/powershell/powershell-7-1-preview-6/) + +by Steve Lee on 17th August +Today, we are releasing the sixth preview of the PowerShell 7.1 release! With a roadmap update to match. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200821-functiondraft.md#how-to-send-email-securely-with-powershell)[*How to Send Email Securely with PowerShell*](https://adamtheautomator.com/how-to-send-email-securely-with-powershell/) + +by Adam Listek on 20th August +Need to notify your team on a failed service, only to find that your PowerShell email has bounced? Unauthenticated email has become difficult to pass in many mail systems. You don’t want to miss an important email notification because you relied on outdated PowerShell cmdlets. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200821-functiondraft.md#how-to-manage-microsoft-teams-via-powershell)[*How to Manage Microsoft Teams via PowerShell*](https://techcommunity.microsoft.com/t5/itops-talk-blog/how-to-manage-microsoft-teams-via-powershell/ba-p/1599167) + +by Anthony Bartolo on 20th August +A quick overview of some commands in the Microsoft Teams Module + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200821-functiondraft.md#monitoring-with-powershell-monitoring-o365-alerts)[*Monitoring With PowerShell: Monitoring O365 Alerts*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-o365-alerts/) + +by Kevin Tegelaar on 21st August +A look at different types of alerting policies within the M365 space. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200821-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ic3nqd/update_i_made_an_automatically_populating_script/) + +Reddit Post to show an automatically populating script menu + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200821-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/JustinWGrote/status/1296541322455654401?s=19) + +Set VS Code default language to PowerShell + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200821-functiondraft.md#youtube-manage-cloud-with-powershell)[*Youtube: Manage Cloud with PowerShell*](https://www.youtube.com/watch?v=x-bAD3RX_P0) + +Learn how to manage cloud with PowerShell on major cloud providers such as AWS, Azure, and Google Cloud. Discover how to authenticate your PowerShell session to your cloud account and then create and manage resources. See how you can use PowerShell to harness the power of the cloud! I wrap up this episode with a fully working example of creating and securing cloud resources demoing AWS and Azure side-by-side! diff --git a/content/articles/2020/08/icymi-powershell-week-of-28-august-2020/index.md b/content/articles/2020/08/icymi-powershell-week-of-28-august-2020/index.md new file mode 100644 index 000000000..7e7d5fbcb --- /dev/null +++ b/content/articles/2020/08/icymi-powershell-week-of-28-august-2020/index.md @@ -0,0 +1,55 @@ +--- +url: /articles/2020-08-28-icymi-powershell-week-of-28-august-2020/ +title: "ICYMI: PowerShell Week of 28-August-2020" +authors: + - Robin Dadswell +date: "2020-08-28T14:00:00+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/08/icymi-powershell-week-of-28-august-2020/ +--- + +Topics include Data type accelerators, Directory sizes, Monitoring UniFi devices and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200828-functiondraft.md#monitoring-with-powershell-user-experience-issues--unifi-eol-monitoring)[*Monitoring with PowerShell: user experience issues & Unifi EOL Monitoring*](https://www.cyberdrain.com/monitoring-with-powershell-user-experience-issues-unifi-eol-monitoring/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-user-experience-issues-unifi-eol-monitoring) + +by Kelvin Tegelaar on 24th August +Kelvin delivers two scripts in this blog post one to monitor user experience and the other to monitor Unifi for EOL devices. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200828-functiondraft.md#taking-issue-with-powershell)[*Taking Issue with PowerShell*](https://jdhitsolutions.com/blog/powershell/7661/taking-issue-with-powershell/) + +by Jeffery Hicks on 26th August +In this blog post Jeff makes a case for getting involved with PowerShell 7 and contribute to the opensource project. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200828-functiondraft.md#using-powershell-data-types-accelerators-to-speed-up-coding)[*Using PowerShell Data Types Accelerators to Speed up Coding*](https://adamtheautomator.com/using-powershell-data-types-accelerators-to-speed-up-coding/) + +by Adam Listek on 26th August +Accelerators will help you save time and effort for many of the common tasks that a script may need. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200828-functiondraft.md#how-to-add-port-to-firewall-windows-10-from-an-excel-sheet)[*How to Add Port to Firewall Windows 10 from an Excel Sheet*](https://adamtheautomator.com/how-to-add-port-to-firewall-windows-10-from-an-excel-sheet/) + +by Emanuel Halapciuc on 27th August +Use a spreadsheet to add multiple firewall rules depending on the machine role and prevent errors in adding your firewall rules. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200828-functiondraft.md#finding-teams-and-yammer-groups-with-powershell)[*Finding Teams and Yammer Groups with PowerShell*](https://office365itpros.com/2020/08/27/find-teams-yammer-groups-powershell) + +by Tony Redmond on 27th August +Needing to run a report on Teams or Yammer enabled M365 groups, if that's the case then check out this post. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200828-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ief3rm/get_directory_tree_size_using_powershell_recursive/) + +u/theSysadminChannel shares a script for getting recursive directory sizes. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200828-functiondraft.md#youtube-module-monday-powershell-protect)[*Youtube: Module Monday: PowerShell Protect*](https://www.youtube.com/watch?v=3EvFHXsOuy8%3E) + +Module Monday is a video series where I look at a cool PowerShell module every Monday. This Monday, we look at PowerShell Protect. PowerShell Protect is a module and antimalware scan interface provider that allows you to audit and block scripts based on rules. These rules can look at the aspects of a script to determine whether they should be audited or blocked. diff --git a/content/articles/2020/08/netneighbor-watch-the-powershell-alternative-to-arpwatch/index.md b/content/articles/2020/08/netneighbor-watch-the-powershell-alternative-to-arpwatch/index.md new file mode 100644 index 000000000..05805aa77 --- /dev/null +++ b/content/articles/2020/08/netneighbor-watch-the-powershell-alternative-to-arpwatch/index.md @@ -0,0 +1,34 @@ +--- +url: /articles/2020-08-31-netneighbor-watch-the-powershell-alternative-to-arpwatch/ +title: "NetNeighbor Watch: The PowerShell Alternative To Arpwatch" +authors: + - n2501r +date: "2020-08-31T22:12:28+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks + - Tools + - Tutorials +tags: + - Networking + - Raspberry Pi + - Security +aliases: + - /2020/08/netneighbor-watch-the-powershell-alternative-to-arpwatch/ +--- + +In this post, we are going to setup NetNeighbor Watch on a Raspberry Pi. NetNeighbor Watch can keep an eye on your network and send you an email when a new host is discovered. NetNeighbor Watch is done completely in PowerShell. The results are very similar to those of arpwatch. NetNeighbor Watch is for anyone that wants more visibility into the wireless or wired devices on their network. We will also setup a weekly email report with all of the known hosts on your network. In this post, I will walk you through the entire process of setting this up from scratch on a Raspberry Pi, lets get started! + +##### Items Covered in Post: + + 1. Prerequisites + 2. Gmail App Password + 3. NetNeighbor Watch Code + 4. NetNeighbor Report Code + 5. Raspberry Pi 3 Model B+ Setup + 6. Final Results + 7. Resetting Known Hosts + +Take a look for yourself at my site: +[SpiderZebra.com](https://spiderzebra.com/2020/08/31/netneighbor-watch-the-powershell-alternative-to-arpwatch/) + **Nick Richardson (@ChiefNSR)** diff --git a/content/articles/2020/08/psconfbook-vol3/index.md b/content/articles/2020/08/psconfbook-vol3/index.md new file mode 100644 index 000000000..c096880b0 --- /dev/null +++ b/content/articles/2020/08/psconfbook-vol3/index.md @@ -0,0 +1,47 @@ +--- +url: /articles/2020-08-27-psconfbook-vol3/ +title: The PowerShell Conference Book volume 3 is here! +authors: + - Mike Kanakos +date: "2020-08-27T12:59:35+00:00" +categories: + - Announcements + - Books + - News +tags: + - Books + - Community +aliases: + - /2020/08/psconfbook-vol3/ +--- + +The third edition of the **PowerShell Conference Book** is now available and [on sale][1] at the discounted price of $19.99. But you need to hurry because the **discounted price is only available until Friday evening!** + +### What is the PowerShell Conference Book? + +The book is designed to be a representation of what it's like when you attend a conference. Traditional books have a singular topic, such as _"Windows Server 2019"_ or _"Mastering Ansible"_. But this book is not geared towards a single topic. Instead, much like a conference, it's a collection of ideas all focused around a general theme.  All the chapters are related in some way to PowerShell and DevOps. +The book contains over 20 different chapters, each written by a different author. The authors of the book are community members and subject matter experts who have graciously donated their time and knowledge for a good cause. Each chapter is similar in length and focus to what it would be like if you attended a conference and listened to the author present their topic to a live audience, except now it's in written form. Imagine if you were able to capture those sessions and lock them into a format that you could refer to over and over again. It's a conference in a book format! + +### The essence of community in a book + +As a former contributor to volumes 1 & 2 of the book, I can tell you that these authors have worked VERY HARD to get their work ready for publication. The process started about six months ago when these authors had to submit chapter proposals to a selection committee, much like presenters have to do for a conference. Those CFP's were "pitches" to help explain and sell their topic with the hope they would be selected for inclusion in the book. Once selected, the process to publication can take as long as three months for an author. +The process requires the authors to submit their work to a group of editors who are also community members. Endless revisions and edits take place so that you, the reader, get the most value and an awesome experience from this book. And in true technical form, the entire book is written in markdown and all work is submitted, edited, formatted and managed via a GitHub repo. For many of these authors, writing technical content is not something they do regularly, but they invest time and effort to be able to share information that they believe can help people master a topic. Not only do these authors need to write their content, they need to learn the process of contributing to a shared GitHub repository. +The authors are not compensated at all for their time or knowledge. So why do this? What's the purpose? + +### DevOps Collective and the On-Ramp Program + +The project and time invested by the authors and editors are to help fund a great cause: [The DevOps Collective On-Ramp program][2]. The program and this website are parts of a non-profit organization called "The DevOps Collective". The non-profit is dedicated to education and community in the DevOps field. It is the legal entity behind the PowerShell Summit, the Automation Summit, the On-Ramp program, the PowerShell.org website and other items such as eBooks, free webinars, community events and more. +You may be familiar with the PowerShell summit that occurs take place in Seattle every year in April. It's considered the premiere event in the US for upper tier content related to PowerShell, DevOps and automation. The On-Ramp program is a guided, hands-on week long class that occurs at the same time as the Summit. During the day, the on-ramp attendees attend class and join the summit attendees for lunch, dinner and general sessions attended by the entire conference (i.e. keynote). It's a week of intense learning and helping attendees prepare for careers in infrastructure, automation and DevOps. +On-Ramp is taught by some the industry’s leading PowerShell instructors. It’s more than just an introduction to PowerShell as a technology; On-Ramp is also an introduction to the PowerShell community and ecosystem. By blending classroom time with time in Summit’s general sessions, keynotes, and social events, On-Ramp attendees can supercharge their entry into the broader world of DevOps and IT automation. +The conference book supports the On-Ramp program, but you may be wondering how... +The money earned from book sales goes towards scholarships for the On-Ramp program. 100% of the proceeds from book sales are donated to the program. So what does that mean? The money raised is directly used to pay for people who cannot afford to buy a ticket to the On-Ramp program. When I say "buy a ticket", that means the cost of the conference ticket, hotel room for a week and also includes breakfast and lunch. All told that represents about $3000 dollars per person. +In previous years the sales of the book were able to pay for nearly 10 people to the attend the On-Ramp program each year! Remember these are people who are changing careers or looking to get their start in the field. The winners are people who submitted an application to be considered for the scholarship and had to outline details about their knowledge and background and what they had hoped to achieve in the field. + +### Why should you buy this book + +This book is written, edited by and for the community. Twenty authors have taken a topic they're passionate about and have formulated their topics into something they believe can help you learn and get better at infrastructure and DevOps. This year's edition covers four areas: _Systems Management_, _Tips & Tricks_, _DevOps_ and _PowerShell Language Features_. You can see a full list of topics at the [book website][1]. +For many of these authors, getting their chapter published is one the greatest accomplishments of their careers. For the people who will receive a scholarship from the proceeds, it's an opportunity to benefit from expert tutoring and mentoring from some of the best in the industry and possibly a star to a better career. For you, it's an opportunity to get an amazing reference volume that you can use to tackle new areas of learning and go back and reference for years to come. +The book is on sale for $20 until Friday. For most of us, that is not a major purchase. Imagine how much knowledge you can get for the cost of dinner with friends. Imagine the good you can do by taking that $20 and putting it towards helping someone get started in our field! Please consider purchasing this book to further your knowledge, support the community and give someone else a chance in this community down the road. More details about the book can be found at the [book publisher's website][1]. + + [1]: https://leanpub.com/psconfbook3 + [2]: https://powershell.org/summit-old/summit-onramp/ diff --git a/content/articles/2020/08/untitled/index.md b/content/articles/2020/08/untitled/index.md new file mode 100644 index 000000000..488025e2a --- /dev/null +++ b/content/articles/2020/08/untitled/index.md @@ -0,0 +1,132 @@ +--- +url: /articles/2020-08-17-/ +title: "Enable \"Allow Scripts to Access OAuth Token\" in Azure DevOps using PowerShell" +authors: + - pwshliquori +date: "2020-08-17T00:00:00+00:00" +categories: + - PowerShell for Admins +tags: + - Azure DevOps + - CI/CD + - REST API +draft: true +--- + +Azure DevOps allows us to run custom scripts to help our software and infrastructure get delivered quickly. There are times that the scripts run without an issues, however, sometimes there is a need to invoke the Azure DevOps Rest API in the CD pipeline. Sure, you can create a script using the API, authenticating with Azure DevOps with a personal access token and should work, but there is a better solution. + +Allowing scripts to access the oauth token authenticates the script with the System.AccessToken variable, which runs as the Project Collection Build Service, a built-in service account in Azure DevOps. Today, we will be taking a look on how to enable this feature using PowerShell. + +Since the feature needs to be enabled per release definition, the first item we need to find is the ID of the release definition. This can be found by using the Rest API or in the URL when clicking on the release definition in Azure DevOps. Since we are using PowerShell, let’s try it, but first, be sure to have your personal access token handy. + + +`$Params = @{ + Uri = "https://dev.azure.com/pwshliquori-blog/blog/_apis/release/definitions/1?api-version=5.0" + Headers = @{ + Authorization = "Basic $ConvertToBase64" + } +} +$Def = Invoke-RestMethod @Params +`Let’s take a look at the command: + + + - + $Params: A hash table we will be splatting later on when we are ready to run the command. + + + - + $Params.Uri: The components needed to get the release definitions. pwshliquori-blog: Organization name. + + + - + blog: Project name. + + + - + _apis: Calling the rest api. + + + - + release: The area of the api call. + + + - + definitions: The resource of the api call. + + + - + api-version=5.0: The latest version of the api. + + + - + $Headers: Authorization header using your base 64 encoded personal access token. + + + - + Invoke-RestMethod @Params: Invokes the Rest API using splatting to pass the parameters in the $Params hashtable. + + + +The command should return all release definitions in the project. Now we need to dig down and find the property needed to enable, in this case: “enableAccessToken” + +The enableAccessToken property is set to false by default, lets find and set it to true: + + +`$Def.environments.deployPhases.deploymentInput +$Def.environments.deployPhases.deploymentInput.enableAccessToken = $true +$Def.environments.deployPhases.deploymentInput +`Now that we set the “enableAccessToken” to true, we need to update the release definition with the changed value. To do this, we need to convert the $Def variable to JSON format and set the ContentType to application/json. + + +`$Body = ConvertTo-Json -InputObject $Def -Depth 4 +$Params = @{ + Uri = "https://dev.azure.com/pwshliquori-blog/blog/_apis/release/definitions/1?api-version=5.0" + Headers = @{ + Authorization = "Basic $ConvertToBase64" + } + Body = $Body + ContentType = 'application/json + Method = 'Put' +} +Invoke-RestMethod @Params +`The body needs to contain the entire release definition with the updated “enableAccessToken” property. After running the command, we can now utilize the System.AccessToken to run scripts and processes using OAuth authentication against the Project Collection Build Service account. By using PowerShell, we can now turn the commands above into a function to automate the process of enabling this feature. + + +`function Get-AzureDevOpsReleaseDefinition { + [CmdletBinding()] + param ( + [Parameter(Mandatory, + ValueFromPipeline, + Position = 0)] + [string]$ProjectName, + [Parameter(Mandatory, + Position = 1)] + [string]$ReleaseDefinitionId, + [Parameter(Position = 2)] + [string]$PersonalAccessToken + ) + Begin { + } + Process { + Try { + $BasicAuth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f '', $PersonalAccessToken))) + $Url = New-Object -TypeName System.Text.StringBuilder +$Url.Append("https://vsrm.dev.azure.com/$AzureDevOps_AccountName/$ProjectName/_apis/release/definitions") |Out-Null + if ($ReleaseDefinitionId) { + $Url.Append("/$ReleaseDefinitionId") |Out-Null + } + $Uri = $Url.ToString() + $Params = @{ + Uri = $Uri + Headers = @{ + Authorization = "Basic $BasicAuth" + } + } + Invoke-RestMethod @Params + } + Catch { + throw $_ + } + } +} +` diff --git a/content/articles/2020/09/_index.md b/content/articles/2020/09/_index.md new file mode 100644 index 000000000..0c07df59a --- /dev/null +++ b/content/articles/2020/09/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from September 2020" +description: "PowerShell.org Articles published in September 2020." +--- diff --git a/content/articles/2020/09/icymi-powershell-week-of-04-september-2020/index.md b/content/articles/2020/09/icymi-powershell-week-of-04-september-2020/index.md new file mode 100644 index 000000000..984bbb840 --- /dev/null +++ b/content/articles/2020/09/icymi-powershell-week-of-04-september-2020/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2020-09-04-icymi-powershell-week-of-04-september-2020/ +title: "ICYMI: PowerShell Week of 04-September-2020" +authors: + - Robin Dadswell +date: "2020-09-04T14:53:24+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/09/icymi-powershell-week-of-04-september-2020/ +--- + +Topics include Machine Learning, Network Monitoring, Active Directory and More... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200904-functiondraft.md#machine-learning-from-idea-to-reality-a-powershell-casestudy)[*Machine learning from idea to reality: a PowerShell case study*](https://blog.fox-it.com/2020/09/02/machine-learning-from-idea-to-reality-a-powershell-case-study/) + +by Joost Jansen on 9th February +This blog provides a ‘look behind the scenes’ at the RIFT Data Science team and describes the process of moving from the need or an idea for research towards models that can be used in practice. More specifically, how known and unknown PowerShell threats can be detected using Windows event log 4104. In this case study it is shown how research into detecting offensive (with the term ‘offensive’ used in the context of ‘offensive security’) and obfuscated PowerShell scripts led to models that can be used in a real-time environment. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200904-functiondraft.md#reading-sccm-logs-with-powershell)[*Reading SCCM Logs with PowerShell*](https://tseknet.com/blog/sccmlogs/) + +by @tseknet on 29th August +This post covers how you can write SCCM logs to the Event Log for an OS upgrade task sequence file (smsts.log), but this script can be adapted to take any log file and write the contents to the Event Log. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200904-functiondraft.md#netneighbor-watch-the-powershell-alternative-to-arpwatch)[*NetNeighbor Watch: The PowerShell Alternative To Arpwatch*](https://spiderzebra.com/2020/08/31/netneighbor-watch-the-powershell-alternative-to-arpwatch/) + +by Nick Richardson on 31st August +In this post, we are going to setup NetNeighbor Watch on a Raspberry Pi. NetNeighbor Watch can keep an eye on your network and send you an email when a new host is discovered. NetNeighbor Watch is done completely in PowerShell. The results are very similar to those of arpwatch. NetNeighbor Watch is for anyone that wants more visibility into the wireless or wired devices on their network. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200904-functiondraft.md#how-to-monitor-a-printer-with-powershell)[*How to monitor a printer with Powershell*](https://www.scriptinglibrary.com/languages/powershell/how-to-monitor-a-printer-with-powershell/) + +by Paolo Frigo on 2nd September +In this article you will find something totally different, I wanted to take the opportunity of helping somebody to solve a real case of a Virtual Printer that was causing issues to users and the ops team. The printer needed to be monitored with a living-off-the-land approach, so without adding any software solution but just a few scripts. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200904-functiondraft.md#visually-display-active-directory-nested-group-membership-using-powershell)[*Visually display Active Directory Nested Group Membership using PowerShell*](https://evotec.xyz/visually-display-active-directory-nested-group-membership-using-powershell/#utm_source=rss&utm_medium=rss&utm_campaign=visually-display-active-directory-nested-group-membership-using-powershell) + +by Przemyslaw Klys on 2nd September +This blog post covers a function called Get-WinADGroupMember. When you use it with a single parameter group it is basically a replacement for Get-ADGroupMember -Recursive. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200904-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/iibkyg/it_admin_toolkit_a_customizable_and_expandable/) + +u/nkasco shares a tool he has been working on and best part is that it is free. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200904-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1301731426648244224) + +@PowerShell_Team has started the release process for #PowerShell 7.1 preview 7 built on .NET 5 preview 8. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200904-functiondraft.md#youtube-getting-started-with-jupyter-notebooks-and-powershell)[*Youtube: Getting started with Jupyter Notebooks and PowerShell*](https://www.youtube.com/watch?v=zNKx6M9kjwM) + +In this video, I show how to get started with Jupyter Notebooks and PowerShell. I first go over the web interface for Jupyter and how to use .NET interactive to run PowerShell scripts in notebooks. I then go into Azure Data Studio to show how to build notebooks with a more rich PowerShell experience. Finally, I show how to build PowerShell notebooks using the Visual Studio Code Insiders edition and the preview edition of the PowerShell extension. diff --git a/content/articles/2020/09/icymi-powershell-week-of-11-september-2020/index.md b/content/articles/2020/09/icymi-powershell-week-of-11-september-2020/index.md new file mode 100644 index 000000000..21c80b7fa --- /dev/null +++ b/content/articles/2020/09/icymi-powershell-week-of-11-september-2020/index.md @@ -0,0 +1,54 @@ +--- +url: /articles/2020-09-11-icymi-powershell-week-of-11-september-2020/ +title: "ICYMI: PowerShell Week of 11-September-2020" +authors: + - Robin Dadswell +date: "2020-09-11T14:00:05+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/09/icymi-powershell-week-of-11-september-2020/ +--- + +Topics include filtering speed increase, PoshBot, error handling and more! + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [*Speeding Access to Office 365 PowerShell Data Using Where Instead of Where-Object*](https://office365itpros.com/2020/09/07/speed-powershell-code-where-method/) + +by Tony Redmond on 7th September +A neat little investigation by Tony Redmond into the benefits of using the .NET where method as opposed to the PowerShell Native Where-Object command. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200911-functiondraft.md#powershell-tips--tricks-that-will-increase-your-productivity)[*PowerShell Tips & Tricks That Will Increase Your Productivity*](https://www.koupi.io/post/awesome-powershell-tricks-you-don-t-want-to-miss) + +by Caroline Chiari on 8th September +See some things that Caroline finds helpful on the command line and maybe learn something new in the process! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200911-functiondraft.md#certificate-based-authentication-for-exchange-online-powershell)[*Certificate-Based Authentication for Exchange Online PowerShell*](https://blog.robindadswell.tech/blog/2020/09/09/certificate-based-authentication-for-exchange-online-powershell/) + +by Robin Dadswell on 9th September +An exploration into a vital part of migrating away from Basic Authentication for Exchange Online + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200911-functiondraft.md#powershell-error-handling)[*PowerShell Error Handling*](https://www.skylinesacademy.com/blog/2020/9/9/powershell-error-handling) + +by Adam Bertram on 9th September +To ensure we set up a net to catch all of the errors that are bound to happen, it's important to understand error handling. Error handling is a concept in all programming languages that outlines steps, procedures and code that's written to intelligently capture errors and do something about them. PowerShell is no different. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200911-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/inpake/are_advanced_functions_i_should_spend_a_lot_of/%7Chttps://www.reddit.com/r/PowerShell/comments/inpake/are_advanced_functions_i_should_spend_a_lot_of/) + +A discussion about Advanced Functions and should you learn about them + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200911-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1303466981253758976) + +#PowerShell 7.1-preview.7 is out! This will be our last preview (unless there's a major issue) before our Release Candidate! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200911-functiondraft.md#youtube-module-monday-poshbot)[*Youtube: Module Monday: PoshBot*](https://www.youtube.com/watch?v=yzOdSGCjyFA) + +Module Monday is a video series where I look at a cool PowerShell module each Monday. This Monday, I looked at PoshBot. PoshBot is a chat bot built with PowerShell. It allows you to issue you commands from your chat client, schedule jobs, trigger messages on events and more! Upgrade your ChatOps! diff --git a/content/articles/2020/09/icymi-powershell-week-of-18-september-2020/index.md b/content/articles/2020/09/icymi-powershell-week-of-18-september-2020/index.md new file mode 100644 index 000000000..d863fbff8 --- /dev/null +++ b/content/articles/2020/09/icymi-powershell-week-of-18-september-2020/index.md @@ -0,0 +1,54 @@ +--- +url: /articles/2020-09-18-icymi-powershell-week-of-18-september-2020/ +title: "ICYMI: PowerShell Week of 18-September-2020" +authors: + - Robin Dadswell +date: "2020-09-18T14:00:55+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/09/icymi-powershell-week-of-18-september-2020/ +--- + +Topics include Nested AD groups, Logging, documentation and more. + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200918-functiondraft.md#finding-nested-active-directory-groups-faster-with-powershell)[*Finding nested Active Directory groups faster with PowerShell*](https://4sysops.com/archives/finding-nested-groups-faster-with-powershell/) + +by Mike Kanakos on 15th September +Mike would like to show us how to find nested groups in large Active Directory groups. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200918-functiondraft.md#powershell-logging-recording-and-auditing-all-the-things)[*PowerShell Logging: Recording and Auditing all the Things*](https://adamtheautomator.com/powershell-logging-recording-and-auditing-all-the-things/) + +by Bill Kindle on 15th September +In this article, you’ll learn about the options available for PowerShell logging and auditing. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200918-functiondraft.md#documenting-with-powershell-hyper-v-and-physical-server-settings)[*Documenting with PowerShell: Hyper-v and physical server settings*](https://www.cyberdrain.com/documenting-with-powershell-hyper-v-and-physical-server-settings/) + +by Kelvin Tegelaar on 16th September +Kelvin wrote a PowerShell to document the physical and Hyper-V servers and show them as cards in HTML view. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200918-functiondraft.md#secretmanagement-preview-3)[*SecretManagement Preview 3*](https://devblogs.microsoft.com/powershell/secretmanagement-preview-3/) + +by Sydney Smith on 16th September +A big update to SecretManagement is out including the new SecretStore vault extension. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200918-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/iuifz8/powershell_vs_python_reference/) + +This is a reference between PowerShell and Python language syntax. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200918-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/WindosNZ/status/1306438761278914560) + +Did you know that content from @mikefrobbins' PowerShell 101 book is up on @docsmsft; Such a valuable resource for learning #PowerShell, available directly alongside all the rest of the docs! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20200918-functiondraft.md#youtube-module-monday-z)[*Youtube: Module Monday: Z*](https://www.youtube.com/watch?v=OzHIjKEfOhA) + +Z is a port of a popular bash shell script for navigating your file system quickly. It uses a frequency algorithm to determine the correct path to go to. diff --git a/content/articles/2020/10/_index.md b/content/articles/2020/10/_index.md new file mode 100644 index 000000000..5dcaa98da --- /dev/null +++ b/content/articles/2020/10/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from October 2020" +description: "PowerShell.org Articles published in October 2020." +--- diff --git a/content/articles/2020/10/icymi-powershell-week-of-02-october-2020/index.md b/content/articles/2020/10/icymi-powershell-week-of-02-october-2020/index.md new file mode 100644 index 000000000..bf6bdfc27 --- /dev/null +++ b/content/articles/2020/10/icymi-powershell-week-of-02-october-2020/index.md @@ -0,0 +1,55 @@ +--- +url: /articles/2020-10-02-icymi-powershell-week-of-02-october-2020/ +title: "ICYMI: PowerShell Week of 02-October-2020" +authors: + - Robin Dadswell +date: "2020-10-02T14:43:28+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/10/icymi-powershell-week-of-02-october-2020/ +--- + +Topics include WPF, Azure, Secrets and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201002-functiondraft.md#build-a-powershell-systray-tool-with-menus-sub-menus-and-pictures)[*Build a PowerShell systray tool with menus, sub menus and pictures*](http://www.systanddeploy.com/2020/09/build-powershell-systray-tool-with.html) + +by Damien Van Robaeys on 28th September +In this post, Damien Van Robaeys will demonstrate how to build a tool that displays context menu and sub menus in the systray bar with picture for each menus. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201002-functiondraft.md#wpf-tips)[*WPF Tips*](https://jm2k69.github.io/2020/09/WPF-tips.html) + +by Jérôme Bezet-Torres on 29th September +Investigate how to use WPF in PowerShell to create forms + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201002-functiondraft.md#get-gporeport-how-to-build-fancy-gpo-reports-with-powershell)[*Get-GpoReport: How to Build Fancy GPO Reports with PowerShell*](https://adamtheautomator.com/get-gporeport-how-to-build-fancy-gpo-reports-with-powershell/) + +by Emanuel Halapciuc on 29th September +In this deep dive, have a look at some of the things you can do with Get-GPOReport to create customised GPO reports with only the information you want to see. + +###### [*Answering the WSMan PowerShell Challenge*](http://jdhitsolutions.com/blog/powershell/7712/answering-the-wsman-powershell-challenge/) + +by Jeffrey Hicks on 30th September +Jeffrey Hicks shares his solution to a recent Iron Scripter challenge, a fascinating task and one with a practical result. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201002-functiondraft.md#secretmanagement-and-secretstore-updates)[*SecretManagement and SecretStore Updates*](https://devblogs.microsoft.com/powershell/secretmanagement-and-secretstore-updates/) + +by Sydney Smith on 30th September +Breaking Changes in Secret Store in the lastest update to the SecretManagement and SecretStore Modules + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201002-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/j2wosy/presentation_of_hurry_the_it_admins_companion/) + +Redditor shares tool that allows you to use scripts through a GUI interface + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201002-functiondraft.md#youtube-azurerm-to-az-powershell-module-migration-toolkit)[*Youtube: AzureRM to Az PowerShell Module Migration Toolkit*](https://www.youtube.com/watch?v=YxiPnAcOaxA&feature=emb_logo) + +The Az.Tools.Migration PowerShell module can automatically upgrade your PowerShell scripts and script modules from AzureRM to the Az PowerShell module. diff --git a/content/articles/2020/10/icymi-powershell-week-of-09-october-2020/index.md b/content/articles/2020/10/icymi-powershell-week-of-09-october-2020/index.md new file mode 100644 index 000000000..b36a4b7e7 --- /dev/null +++ b/content/articles/2020/10/icymi-powershell-week-of-09-october-2020/index.md @@ -0,0 +1,91 @@ +--- +url: /articles/2020-10-09-icymi-powershell-week-of-09-october-2020/ +title: "ICYMI: PowerShell Week of 09-October-2020" +authors: + - Robin Dadswell +date: "2020-10-09T12:19:12+00:00" +categories: + - PowerShell for Admins +tags: + - ICYMI + - Community + - Weekly Roundup +aliases: + - /2020/10/icymi-powershell-week-of-09-october-2020/ +--- + +Topics include GitHub actions, Azure Functions, WVD, Pentesting and more! + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + + +###### + [*Using GitHub actions to run automatic Pester tests*](https://robstr.dev/using-github-actions-run-automatic-pester-tests/) + + + by Roberth Strand on 4th October + + + But as soon as I started creating PowerShell modules that was more than just small time projects, I had to step up the production quality. As soon as I had written some tests, I wanted to have those tests run every time I did a pull request. This helps me catch bugs before publishing the new version of my module, and saves me from a ton of stress. + + +###### + [*Automating with PowerShell: Deploying Azure Functions*](https://www.cyberdrain.com/automating-with-powershell-deploying-azure-functions/?utm_source=rss&utm_medium=rss&utm_campaign=automating-with-powershell-deploying-azure-functions) + + + by Kelvin Tegelaar on 5th October + + + Kelvin shares come of his Azure Functions and gives the ability to deploy them in a single click. + + +###### + [*Save WVD image with Sysprep as Image Gallery version (part 2)*](https://rozemuller.com/save-wvd-image-with-sysprep-as-image-gallery-version/) + + + by Sander Rozemuller on 6th October + + + Join Sander as he shows us how to automate setting up a WVD Image using PowerShell. + + +###### + [*Creating Your First Azure PowerShell Function App*](https://adamtheautomator.com/creating-your-first-azure-powershell-function-app/) + + + by June Castillote on 7th October + + + In this article, you will learn how to create an Azure PowerShell Function App, develop, test, and execute the code. You’ll also get the chance to build a mini-project where you’ll create a function for getting the status of Azure VMs and display the result on the web. + + +###### + [*Automate Azure Sentinel Deployment*](https://www.saggiehaim.net/automate-azure-sentinel-deployment) + + + by Saggie Haim on 8th October + + + In this post, Saggie Haim will walk us through how to automate the core components of Azure Sentinel using PowerShell + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/j5m9wl/a_great_feeling/) + + + Redditor shares his PowerShell success story. + + +###### + [*Tweet of the Week*](https://twitter.com/pcgeek86/status/1313560760207974405) + + + Level up your #PowerShell skills with this FREE training (one week) over @CBTNuggets. + + +###### + [*Youtube: Using PowerShell For Basic Pentesting Tasks | Looking WebDAV requests*](https://www.youtube.com/watch?v=BiC2WXJl5f4) + + + An overview of how to use PowerShell when pentesting. diff --git a/content/articles/2020/10/icymi-powershell-week-of-16-october-2020/index.md b/content/articles/2020/10/icymi-powershell-week-of-16-october-2020/index.md new file mode 100644 index 000000000..70423a2df --- /dev/null +++ b/content/articles/2020/10/icymi-powershell-week-of-16-october-2020/index.md @@ -0,0 +1,95 @@ +--- +url: /articles/2020-10-16-icymi-powershell-week-of-16-october-2020/ +title: "ICYMI: PowerShell Week of 16-October-2020" +authors: + - Robin Dadswell +date: "2020-10-16T15:13:33+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/10/icymi-powershell-week-of-16-october-2020/ +--- + +Topics include DSC, AD Recycle Bin, Pester and more... + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + + +###### + [*Getting familiar with Invoke-Item in PowerShell*](https://www.networkadm.in/invoke-item/) + + + by Mike Kanakos on 12th October + + + Mike does a deep dive on the Invoke-Item cmdlet, showing you all the ways to use it. + + +###### + [*How to Recover Objects with the Active Directory Recycle Bin*](https://adamtheautomator.com/how-to-recover-objects-with-the-active-directory-recycle-bin/) + + + by Adam Listek on 13th October + + + In this article, Adam explores exactly how the recycle bin functions, what can be done with the recycle bin, and how to effectively use it. + + +###### + [*Getting Started in Web Automation with PowerShell and Selenium*](https://adamtheautomator.com/getting-started-in-web-automation-with-powershell-and-selenium/) + + + by June Castillote on 14th October + + + Learn how to get started using the incredible combination of these two excellent tools, Selenium and PowerShell, to automate web-related tasks on web browsers. You’ll learn how to programmatically perform actions such as navigating, logging, searching, clicking, and sending input. + + +###### + [*Beyond Pester 101: Applying testing principles to PowerShell.*](https://sarti.dev/presentation/powershell-global-virtual-pester/) + + + by Glenn Sarti on 15th October + + + We see a lot talks on testing PowerShell with Pester, but are the tests we write good tests? What makes a test “good”? How do we measure how effective our tests are? This talk will help you answer these questions, including why testing is important and how to apply these principles to your project. + + +###### + [*Automating with PowerShell: Creating your own password push.*](https://www.cyberdrain.com/automating-with-powershell-creating-your-own-password-push/.) + + + by Kelvin Tegelaar on 16th October + + + A password pushing tool with an Azure Function. + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/jbndp3/is_dsc_worth_getting_into_at_this_point_or_should/) + + + A discussion around is DSC still relevant to learn today. + + +###### + [*Tweet of the Week*](https://twitter.com/joeyaiello/status/13157699699766435845) + + + A new approach to managing the #PowerShell repository, engine, and Committee. + + +###### + [*Youtube: Power Apps change the app owner with PowerShell.*](https://www.youtube.com/watch?v=YA0IdOZnM78&feature=youtu.be) + + +In this Quick Thursday Tip (QTT) you will learn how to change the owner of one or more Power Apps by using PowerShell. Super handy when someone leaves the company for example. diff --git a/content/articles/2020/10/icymi-powershell-week-of-23-october-2020/index.md b/content/articles/2020/10/icymi-powershell-week-of-23-october-2020/index.md new file mode 100644 index 000000000..ea77ed54f --- /dev/null +++ b/content/articles/2020/10/icymi-powershell-week-of-23-october-2020/index.md @@ -0,0 +1,55 @@ +--- +url: /articles/2020-10-23-icymi-powershell-week-of-23-october-2020/ +title: "ICYMI: PowerShell Week of 23-October-2020" +authors: + - Robin Dadswell +date: "2020-10-23T14:01:12+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/10/icymi-powershell-week-of-23-october-2020/ +--- + +Topics include web forms, converting to PDF, Oracle Cloud Infrastructure and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201023-functiondraft.md#building-web-forms-with-powershell-universal)[*Building web forms with PowerShell Universal*](https://blog.ironmansoftware.com/powershell-web-forms/) + +by Adam Driscoll on 17th October +PowerShell Universal provides several features that are capable of building web-based forms using PowerShell. For basic forms, we suggest using Universal Automation. For advanced forms, we suggest using Universal Dashboard. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201023-functiondraft.md#open-up-wide-with-powershell)[*Open Up Wide with PowerShell*](https://jdhitsolutions.com/blog/scripting/7786/open-up-wide-with-powershell/) + +by Jeff Hicks on 19th October +This is Jeff's solution to a recent IronScripter PowerShell challenge. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201023-functiondraft.md#powershell-convert-word-documents-to-pdf-documents-bulk)[*PowerShell: Convert Word documents to PDF documents (Bulk)*](https://sid-500.com/2020/10/20/powershell-convert-word-documentes-to-pdf-documents/) + +by Patrick Gruenauer on 20th October +In this blog post, Patrick will walk us through how to convert multiple documents to PDF files using PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201023-functiondraft.md#announcing-oracle-cloud-infrastructure-modules-for-powershell)[*Announcing Oracle Cloud Infrastructure Modules for PowerShell*](https://blogs.oracle.com/cloud-infrastructure/announcing-oracle-cloud-infrastructure-modules-for-powershell) + +by Viral Modi on 21st October +Big news if you manage an OCI, you can now do it through PowerShell! Learn how in this short post from Oracle + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201023-functiondraft.md#automating-with-powershell-changing-modern-and-basic-authentication-settings)[*Automating with PowerShell: Changing Modern and Basic authentication settings*](https://www.cyberdrain.com/automating-with-powershell-changing-modern-and-basic-authentication-settings/) + +by Kelvin Tegelaar on 23rd October +Kelvin walks us through how to edit the Modern Authentication settings in Office365 using PowerShell + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201023-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1318996485464182790) + +#PowerShell 7.1-RC2 is out! . Some final work (like SNAP pkg, etc...) are being worked still. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201023-functiondraft.md#youtube-power-bi-dev-camp-writing-powershell-scripts-for-power-bi)[*Youtube: Power BI Dev Camp: Writing PowerShell scripts for Power BI*](https://www.youtube.com/watch?v=WaKvZgjTWmo) + +In this #Microsoft Power BI Dev Camp session, we'll explore how to get started with writing and testing PowerShell scripts to automate common administrative tasks in a #PowerBI environment. diff --git a/content/articles/2020/10/icymi-powershell-week-of-30-october-2020/index.md b/content/articles/2020/10/icymi-powershell-week-of-30-october-2020/index.md new file mode 100644 index 000000000..3af1bab3a --- /dev/null +++ b/content/articles/2020/10/icymi-powershell-week-of-30-october-2020/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2020-10-30-icymi-powershell-week-of-30-october-2020/ +title: "ICYMI: PowerShell Week of 30-October-2020" +authors: + - Robin Dadswell +date: "2020-10-30T21:30:01+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/10/icymi-powershell-week-of-30-october-2020/ +--- + +Topics include SQL, Teams Webhooks, Zombie Files and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201030-functiondraft.md#how-to-manage-sharepoint-and-microsoft-teams-with-powershell-core)[*How to Manage SharePoint and Microsoft Teams with PowerShell Core*](https://techcommunity.microsoft.com/t5/itops-talk-blog/how-to-manage-sharepoint-and-microsoft-teams-with-powershell/ba-p/1792229?WT.mc_id=modinfra-10259-abartolo) + +by Veronique Lengelle on 27th October +If you're as addicted as I am with SharePoint, you might be glad to know that managing SharePoint is now possible with PowerShell Core! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201030-functiondraft.md#creating-adaptive-cards-via-teams-incoming-webhooks-using-powershell)[*Creating Adaptive Cards via Teams Incoming Webhooks Using PowerShell*](https://adamtheautomator.com/creating-adaptive-cards-via-teams-incoming-webhooks-using-powershell/) + +by Adam Listek on 27th October +If you want to create a customized card in Teams you can do so with Adaptive Cards and Adam shows you how to create them with webhooks in Teams via PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201030-functiondraft.md#writing-an-extension-vault-for-powershell-secretmanagement-preview-4)[*Writing an Extension Vault for PowerShell SecretManagement Preview 4*](https://adamtheautomator.com/writing-an-extension-vault-for-powershell-secretmanagement-preview-4/) + +by Adam Listek on 28th October +If you’ve ever hardcoded a password, an API key, or a private certificate in a script, stop! You need to secure that sensitive information! One way to do that is with the PowerShell SecretManagement module. Offering a convenient way for a user to store and retrieve secrets using PowerShell, the SecretManagement module also has the ability to interface with different back-end systems such as Azure KeyStore or KeePass too using an extension vault! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201030-functiondraft.md#pivot-in-powershell)[*PIVOT in PowerShell*](https://nocolumnname.blog/2020/10/29/pivot-in-powershell/) + +by Shane O’Neill on 29th October +Shane improves upon his last post "Attempting SUM() OVER () in PowerShell" by using PIVOT in PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201030-functiondraft.md#finding-zombie-files-with-powershell)[*Finding Zombie Files with PowerShell*](https://jdhitsolutions.com/blog/powershell/7835/finding-zombie-files-with-powershell/) + +by Jeff Hicks on 30th October +Since this is Halloween weekend in the United States, I thought I’d offer up a PowerShell solution to a scary task – finding zombie files. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201030-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/jhte32/i_think_powershell_is_easier_than_python/) + +The title says it all, but dig through the comments and find out some of the finer points of what makes PowerShell great. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201030-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/cl/status/1322104228467396608?s=20) + +Is the PowerShell Gallery down? lets ask twitter. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201030-functiondraft.md#youtube-taking-your-automation-to-the-next-level-with-powershell-7)[*Youtube: Taking your automation to the next level with PowerShell 7*](https://www.youtube.com/watch?v=cLjl_ZtYwYs) + +Great video covering PowerShell 7 with @jsnover diff --git a/content/articles/2020/11/_index.md b/content/articles/2020/11/_index.md new file mode 100644 index 000000000..72596f690 --- /dev/null +++ b/content/articles/2020/11/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from November 2020" +description: "PowerShell.org Articles published in November 2020." +--- diff --git a/content/articles/2020/11/icymi-powershell-week-of-06-november-2020/index.md b/content/articles/2020/11/icymi-powershell-week-of-06-november-2020/index.md new file mode 100644 index 000000000..fe1863111 --- /dev/null +++ b/content/articles/2020/11/icymi-powershell-week-of-06-november-2020/index.md @@ -0,0 +1,95 @@ +--- +url: /articles/2020-11-06-icymi-powershell-week-of-06-november-2020/ +title: "ICYMI: PowerShell Week of 06-November-2020" +authors: + - Robin Dadswell +date: "2020-11-06T15:00:57+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/11/icymi-powershell-week-of-06-november-2020/ +--- + +Topics include Containers, Microsoft Teams, AMSI and more + + + + + + Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + + +###### + [*Windows PowerShell vs CMD – What’s the Difference*](https://www.techlila.com/powershell-vs-cmd/) + + + by Ankush Das on 2nd November + + + Most of you must have used the command prompt at some point in time – whether just for the sake of trying out an experiment or fixing an issue like recovering the data after getting affected by a shortcut virus. But, what about PowerShell which came into existence later? What is the difference between PowerShell and cmd? + + +###### + [*PowerShell and Containers*](https://www.phillipsj.net/posts/powershell-and-containers/) + + + by Jamie Phillips on 2nd November + + + Jamie demonstrates how to run PowerShell scripts inside the containers. + + +###### + [*Back to Basics: How to Manage Windows Services with PowerShell*](https://adamtheautomator.com/back-to-basics-how-to-manage-windows-services-with-powershell/) + + + by Adam Bertram on 3rd November + + + Learn how to get, start, stop, and restart services with Adam Bertram. + + +###### + [*Quick Tips: How do I restore a deleted Microsoft Teams Team using PowerShell.*](http://www.blogabout.cloud/2020/11/1930) + + + by Andrew Price on 5th November + + + When the team is deleted, it is held in the “recycle bin” for 30 days until it is permanently deleted. The following is the process of restoring a deleted team in Microsoft Teams. + + +###### + [*Bypass AMSI in PowerShell — A Nice Case Study*](https://medium.com/bugbountywriteup/bypass-amsi-in-powershell-a-nice-case-study-f3c0c7bed24d) + + + by Aidin Naserifard on 5th November + + + Bypass AMSI in PowerShell — A Nice Case Study + + +###### + [*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/joiabt/selectstring_with_regex/) + + + working with select-string cmdlet. + + +###### + [*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1323408339078946816) + + + PSReadLine 2.1.0 GA has been published! + + +###### + [*Youtube: How to hide the analyzer false positives?*](https://www.youtube.com/watch?v=E8zJyr_OZJ0&feature=emb_logo) + + + How to hide the analyzer false positives? diff --git a/content/articles/2020/11/icymi-powershell-week-of-13-november-2020/index.md b/content/articles/2020/11/icymi-powershell-week-of-13-november-2020/index.md new file mode 100644 index 000000000..d68dca50f --- /dev/null +++ b/content/articles/2020/11/icymi-powershell-week-of-13-november-2020/index.md @@ -0,0 +1,58 @@ +--- +url: /articles/2020-11-13-icymi-powershell-week-of-13-november-2020/ +title: "ICYMI: PowerShell Week of 13-November-2020" +authors: + - Robin Dadswell +date: "2020-11-13T15:00:28+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +aliases: + - /2020/11/icymi-powershell-week-of-13-november-2020/ +--- + +Topics include Teams, Azure, Tic-Tac-Toe and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201113-functiondraft.md#introducing-psteams-20--support-for-adaptive-cards-hero-cards-list-cards-and-thumbnail-cards)[*Introducing PSTeams 2.0 – Support for Adaptive Cards, Hero Cards, List Cards and Thumbnail Cards*](https://evotec.xyz/introducing-psteams-2-0-support-for-adaptive-cards-hero-cards-list-cards-and-thumbnail-cards/) + +by Przemyslaw Klys on 9th November +Let's look at enhancements in the Teams PS module about what type of cards that can now be sent via PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201113-functiondraft.md#how-to-survive-refactoring-a-powershell-script-from-hell)[*How to Survive Refactoring a PowerShell Script from Hell.*](https://adamtheautomator.com/how-to-survive-refactoring-a-powershell-script-from-hell/) + +by Adam Bertram on 10th November +If you’ve ever inherited a script or set of PowerShell scripts, you probably know the frustration. You have a specific way of coding honed over years and years of experience and you come across a… let’s say monstrosity. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201113-functiondraft.md#announcing-psreadline-21-with-predictive-intellisense)[*Announcing PSReadLine 2.1+ with Predictive IntelliSense*](https://devblogs.microsoft.com/powershell/announcing-psreadline-2-1-with-predictive-intellisense/) + +by Jason Helmick on 10th November +With the latest release of PowerShell and PSReadLine Beta version, Jason walks us through how to enable and make use of predictive IntelliSense. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201113-functiondraft.md#announcing-az-predictor)[*Announcing Az Predictor.*](https://techcommunity.microsoft.com/t5/azure-tools/announcing-az-predictor/ba-p/1873104) + +by Damien Caro on 11th November +The Azure PowerShell modules expose over 4,000 cmdlets and, on average, ten parameters per cmdlet. Experienced PowerShell users will find the right cmdlet and parameter to achieve their goal but this can be more complicated for casual users. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201113-functiondraft.md#better-performance-counters-with-powershell)[*Better Performance Counters with PowerShell*](https://jdhitsolutions.com/blog/powershell/7872/better-performance-counters-with-powershell/) + +by Jeff Hicks on 12th November +Jeff Hicks show us a new addition to the latest release of PSScriptTools around Performance Counters. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201113-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/jprdli/tictactoe_in_powershell) + +u/Fireburd55 made tic-tac-toe in PowerShell and wanted to share it with the community. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201113-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/joeyaiello/status/1326666733000650752) + +Whether you're a #PowerShell 7.0 user or a Windows PowerShell diehard, make sure to check out latest GA release of PowerShell 7.1! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201113-functiondraft.md#youtube-catch-me-if-you-can-powershell-red-vs-blue)[*Youtube: Catch Me If You Can: PowerShell Red vs Blue*](https://www.youtube.com/watch?v=anFe9PZn3eg) + +A talk about how security and PowerShell interact and in some cases cause problems for each other. diff --git a/content/articles/2020/11/icymi-powershell-week-of-20-november-2020/index.md b/content/articles/2020/11/icymi-powershell-week-of-20-november-2020/index.md new file mode 100644 index 000000000..c9e1b1c50 --- /dev/null +++ b/content/articles/2020/11/icymi-powershell-week-of-20-november-2020/index.md @@ -0,0 +1,54 @@ +--- +url: /articles/2020-11-20-icymi-powershell-week-of-20-november-2020/ +title: "ICYMI: PowerShell Week of 20-November-2020" +authors: + - Robin Dadswell +date: "2020-11-20T20:00:25+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/11/icymi-powershell-week-of-20-november-2020/ +--- + +Topics include Splatting, Print Servers, Active Directory and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201120-functiondraft.md#using-the-powershell-formatting-system-to-your-advantage)[*Using the PowerShell formatting system to your advantage*](https://joskw.gitbook.io/blog/object_formatting) + +by Jos Koelewijn on 15th November +A nice walkthrough of how PowerShell displays output. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201120-functiondraft.md#answering-the-powershell-registered-user-challenge)[*Answering the PowerShell Registered User Challenge*](https://jdhitsolutions.com/blog/powershell/7881/answering-the-powershell-registered-user-challenge/) + +by Jeff Hicks on 16th November +Take a look at Jeff's solution for the recent Iron Scripter Challenge around a computer's registered user. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201120-functiondraft.md#documenting-with-powershell-documenting-print-servers)[*Documenting with PowerShell: Documenting Print Servers*](https://www.cyberdrain.com/documenting-with-powershell-documenting-print-servers/%7Chttps://www.cyberdrain.com/documenting-with-powershell-documenting-print-servers/) + +by Kelvin Tegelaar on 17th November +Before I start on this; I agree. Printers are the bane of our existence in IT and I am hoping for a paperless environment each day. Unfortunately we’re not at that future just yet, so we have to document print servers and their settings. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201120-functiondraft.md#powershell-splatting-what-is-it-and-how-does-it-work)[*PowerShell Splatting: What is it and How Does it Work?*](https://adamtheautomator.com/powershell-splatting-what-is-it-and-how-does-it-work/) + +by Adam Listek on 18th November +In this article, you’ll learn how best to use PowerShell splatting to enhance your scripts and code! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201120-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/juolpi/whats_the_last_really_useful_powershell_technique/) + +Reddit users share recent PowerShell tips they have learned. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201120-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/joeyaiello/status/1328836828124745730) + +If you're already bored of the #PowerShell 7.1 GA, don't fret! The first PowerShell 7.2 preview is already live + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201120-functiondraft.md#youtube-active-directory-automation-with-powershell)[*Youtube: Active Directory automation with PowerShell*](https://www.youtube.com/watch?v=3k9xcPtE7Cs) + +Live stream showing off using PowerShell for working in Active Directory. diff --git a/content/articles/2020/11/the-return-of-the-powershell-devops-global-summit/index.md b/content/articles/2020/11/the-return-of-the-powershell-devops-global-summit/index.md new file mode 100644 index 000000000..413463c85 --- /dev/null +++ b/content/articles/2020/11/the-return-of-the-powershell-devops-global-summit/index.md @@ -0,0 +1,41 @@ +--- +url: /articles/2020-11-03-the-return-of-the-powershell-devops-global-summit/ +title: The Return of the PowerShell + DevOps Global Summit +authors: + - James Petty +date: "2020-11-03T16:00:00+00:00" +categories: + - Announcements + - DevOps + - PowerShell for Admins + - PowerShell Summit +tags: + - PowerShell Summit +legacy_featured_image: /wp-content/uploads/2020/11/Asset-4@1x.png +aliases: + - /2020/11/the-return-of-the-powershell-devops-global-summit/ +--- + +The DevOps Collective INC is pleased to announce the return of the PowerShell + DevOps Global Summit in April of 2021. + +The 2021 event will be a little bit different than those in years past, as this event will be all virtual, hosted in late April 2021. We assure you that this will not be another multi-day webinar! We will do our best to make sure you have the best experience possible. +** +What does that mean for attendees? + +** +Unfortunately, we do not currently have all the answers to your questions, but we are working diligently behind the scenes to iron out the details.  Here is what we do know so far: + + * The event will have a paid attendee ticket. We are not a multibillion-dollar tech giant or a multimillion-dollar media company, so we can't offer the event for free. Believe us, we wish we could. + * The videos will be available on-demand for all paid attendees. Videos will not be released for free until 9-12 months after the event. + +** +What does that mean for presenters? +** + + * The CFP will open in the next week or two as we are still nailing down dates. Keep an eye out on for all the details as well as the official Twitter account of the event [@pshsummit][1]. + * Due to the event being all virtual:  Speakers will be required to record their videos and upload them to us a few weeks in advance (all the exact dates will be in the CFP). + * Below are a few examples of the quality of recordings that are required. We are looking at possible speaker compensations as well. More details to come in the formal CFP announcement. + * + * + + [1]: https://twitter.com/pshsummit diff --git a/content/articles/2020/11/update-2021-powershell-devops-global-summit/index.md b/content/articles/2020/11/update-2021-powershell-devops-global-summit/index.md new file mode 100644 index 000000000..90ef8e4fb --- /dev/null +++ b/content/articles/2020/11/update-2021-powershell-devops-global-summit/index.md @@ -0,0 +1,113 @@ +--- +url: /articles/2020-11-29-update-2021-powershell-devops-global-summit/ +title: "Update: 2021 PowerShell + DevOps Global Summit" +authors: + - Mike Kanakos +date: "2020-11-29T18:00:38+00:00" +categories: + - Announcements + - PowerShell Summit +tags: + - PowerShell Summit +legacy_featured_image: /wp-content/uploads/2020/11/Asset-4@1x.png +aliases: + - /2020/11/update-2021-powershell-devops-global-summit/ +--- + +Hello PowerShell and Automation family! + + +It’s time to get excited for the PowerShell + DevOps Global Summit, which is  +returning April 27-29, 2021 +as a virtual event + +. I’m here to share with you some details we have planned for this year’s event. The upcoming summit will differ from years past, since +this event will be 100% virtual +. You may wonder what a virtual event would be like, and is it worth it to attend? + + +**What is the PowerShell and DevOps Global Summit? + **PowerShell and DevOps experts from all over the world, including members from the PowerShell team, will join to discuss and learn about maximizing PowerShell in the workplace in 20+ fast-paced, knowledge-packed presentations. The Summit is also the place to explore and further your knowledge of DevOps principles and practices in a cross-platform environment. We will help you make new connections, learn new techniques, and offer something to your peers and colleagues when you return. + + +**When is the event?** + + +The event takes place + + online from April 27-29, 2021 + +. + + +**Is this a free event? + **No, + it is not a free event +. The PowerShell Summit has always been a paid event, and this year is no different. The event will be online, but you will need to purchase a ticket to attend the sessions. +Tickets for past events have been approximately $1700 dollars each +. + + + +The tickets for this year’s virtual event will be significantly less. + + +We’ll announce official ticket pricing at the end of December + +. + + +**What will the tickets cost, and when can I buy them? + ** +Tickets will go on sale Friday, January 15, 2021. + We will announce detailed ticket information at the end of December. The latest information can always can be found at our official event website:** [PowerShellSummit.org](https://events.devopscollective.org/event/powershell-devops-global-summit-2021/)** . + + +**What is planned for the 2021 PowerShell and DevOps Global Summit? + **The PowerShell + Devops Global Summit has always been the premiere event of the year to meet people, share ideas and learn new concepts, and the next conference will be no different. We plan to have the same amazing opportunities for attendees to who attend this virtual PowerShell + Devops Global Summit. + + + +The event this year will be three days long + and will feature some of the brightest minds in the community and from Microsoft. We strive to bring the best content to attendees each year, and this year will be no different. +Our event will have a minimum of 8 speaker led sessions each day for attendees to take part in +. Each session will have opportunities to talk with other attendees and ask the presenters questions. However, this will not be the same as attending an online meeting. The conferencing software will provide for a unique experience that will allow much greater participation than if you were attending a meeting with Teams or Zoom. + + + +There will be keynote sessions + from prominent industry leaders and some deep-dive sessions from vendors who have generously supported our event. + We will also continue our tradition of presenting lightning demos + that are rapid fire, short 5 to 8 minute demos. Presenting the lightning demos in the past has always been a challenge of trying to fit in all the content in the limited time we had in a live event. +This year we will have more options for presenting lightning demos + and we expect to have more demos to share. + + +Besides the three-day event, +all sessions will be available on-demand for Summit attendees for an additional 12 months +; that includes keynotes, speaker & vendor led sessions, and lightning demos. All content from the live event will be available on-demand, plus some additional content that won’t make it into the live event. + + +**What else is offered? ** + + +Each attendee will have access to the recorded sessions after the Summit end for an additional 12 months. There will be some swag for attendees and opportunities to win additional swag from vendors. + + +**Who will be speaking at the PowerShell and DevOps Global Summit 2021? + **Great question! As always, our speakers are from and represent the community. +We will open our speaker submission process on Nov 30th +. Anyone can submit, but we’re +looking for the best of the best +. We are looking for a minimum of 30 speaker sessions, of which 24 will make it to the Summit live event. All accepted submissions will be available after the Summit ends via our Summit Archive catalog. + Anyone looking to submit a lightning demo can also start submitting on Nov 30th +. We’ll have a separate announcement about the submission process and the details involved in that process later in the week. + + + +Our submission process will continue until Jan 15th, 2021 +**.** Once the submission process ends, we will announce the lineup for speakers publicly. Besides our community speakers, + +members of the Microsoft PowerShell team will perform community demos and share product announcements + +. diff --git a/content/articles/2020/11/writing-your-own-powershell-functions-cmdlets/index.md b/content/articles/2020/11/writing-your-own-powershell-functions-cmdlets/index.md new file mode 100644 index 000000000..61e2b202d --- /dev/null +++ b/content/articles/2020/11/writing-your-own-powershell-functions-cmdlets/index.md @@ -0,0 +1,376 @@ +--- +url: /articles/2020-11-05-writing-your-own-powershell-functions-cmdlets/ +title: Writing Your Own PowerShell Functions / Cmdlets +authors: + - tobor79 +date: "2020-11-05T18:53:35+00:00" +categories: + - PowerShell for Admins +tags: + - Functions + - Modules + - Comment-Based Help + - Best Practices +aliases: + - /2020/11/writing-your-own-powershell-functions-cmdlets/ +--- + +This article is an attempt at describing some of my thought process when building functions. By functions I mean a command that you can execute after importing a module. I am not referring to running a script that accepts parameters and input. Having a task to complete for a function is of course the first objective. Once an idea is in mind I like to write as much as the Help section first as possible as this helps me outline and plan what I am going to do. + + +**Writing The Help Section** + + +Start with the easy part first, the **SYNOPSIS**. Best practice for this states that you should NOT include the name of your function or cmdlet in this section of the help. The idea behind this is similar to the idea that you do not want to use a word to define a word. That is one of those things that has always driven me crazy so I make a point to not be one of the references that does that. This section should be a very short description of what your cmdlet does. I typically start this sentence with the phrase format; "This cmdlet was created to accomplish this task on local and remote devices using WinRM to connect to remote devices". + +The next part I start to write is the **DESCRIPTION**. Depending on how much you have planned out in your head you may not delve to deeply into this section yet. This is the area where you add details that may be useful to know about your function as well as instructions and insights. This might include information on how the pipeline works or settings required for the command to work. + +With those descriptions fresh in mind I like to start the **PARAMETER** section. Parameter names should be singular and not plural, even if your parameter is an array. You do not need to get all of these ahead of time however, if you know you want your cmdlet to work on remote devices it is a good idea to start with the "ComputerName" parameter and if you are using WinRM use the "UseSSL" Parameter to cover all environment situations as best you can. Underneath the parameter's name in the help section you should provide a brief description of the parameters use to describe what the parameter is and the default value if you plan on giving it one. It is best practice to name the parameter with something typical of PowerShell. This is for interoperability as well as maintaining a set of standards. For example, I used the parameter title "ComputerName" and not hostname or FQDN. This should pretty much be the case for that situation every time. In a few cases, Computer is an acceptable parameter. An example of a case where this is acceptable is when your cmdlet is going to be passing the value of the $Computer parameter to a cmdlet that uses -Computer instead of -ComputerName. One such function that uses -Computer is Invoke-GPUpdate. With the "Computer" parameter value going into the Invoke-GPUpdate cmdlet it is best practice to use Computer and not ComputerName. Another thing I do sometimes is if I am going to use the -ComputerName parameter to pass the value to "Invoke-Command" or "New-PSSession" I do the below command : + +`Get-Help -Name Invoke-Command -Parameter ComputerName` + +I then copy and paste the description of that parameter into my functions description for that parameter since they are basically mirrored. This is a good way to provide the best information possible. + +The **EXAMPLE** section I do not write until after I have completed the function. This prevents the need to make any unnecessary changes later on to this section. I have made assumptions thinking this section is done and it is left outdated using parameters that don't exist anymore. That is why I believe this is easiest to do last. If your command accepts pipeline input you should have an example demonstrating how that works and not just assume people will understand by reading everything else you have written. This may be the only thing they read. You should also demonstrate each parameter at least one of your examples. The more use cases you can come up with the better. I have found this practice to really improve my function development as well as my understanding of how PowerShell works. After each command example use a commented line to add a description of what each command example is accomplishing. + +In the **NOTES** section I typically put my name as the author and contact information if someone needs to contact me on the function for whatever reason. Notes about your function can be added here as well. + +I use the **LINK** section to include any documentation I may have used to write the cmdlet however this typically just includes links to my GitHub and other sites related to myself. + +The **INPUTS** section is for defining the .NET class types that your cmdlet accepts as input from the pipeline. Most of the time this is going to be something like System.String or System.Array when used. If you do not have the property value "ValueFromPipeline=$True" set on any of your parameters, the INPUTS section should be set to "None". If you are piping input to a specific cmdlet you can pull the trick I did earlier to obtain the INPUTS information using the below command: + +`Get-Help -Name Enter-PSSession -Full | Out-String -Stream | Select-String -Pattern "INPUTS" -Context 1,4` + +The **OUTPUTS** section is the .NET class type that your cmdlet returns as a value(s). One thing I have been meaning to do to work on expanding my knowledge is to consistently add the expected returned Outputs to the CmdletBinding property in my functions. + + + + +**Outlining The Function** + + +We are now ready to start working on the function. To name the function we need to use one of the PowerShell approved "Verbs". Use the command "Get-Verb" to retrieve a list of possible options as well as what they refer too. It is best practice to use these verbs as they will help with how PowerShell accepts pipeline input. If you need help in choosing a verb for your function I suggest checking out this [Microsoft article][1]. +    If you are going to accept pipeline input in your function; (_One of your parameter properties has a value of "ValueFromPipeline=$True"_) ; you should start out by creating 3 sections. Begin, Process, and End. For each value in the pipeline being passed to your function, the begin section will be carried out first. Typically I use the Begin section to + + * Import modules if any are needed + * Define any variables that need to be defined + * Ensure values are correct if not done already using something such as "ValidateScript". + +Everything in the Begin brackets get executed before moving to the Process brackets and so forth. "Begin" is optional really as is the "End" section. + +    The "End" section I use to + + * Close any open sessions + * Clear variables if that needs to be done + * Return the object or results of the Process section + +The Process section should contain the meat of your cmdlets. This is going to be where the main purpose of your function is carried out. + +If you are not using pipeline input in your function you do not need to include those 3 sections. You can simply just start putting together whatever you need. + + +**Example Using Information So Far** + + +The example function I am going to use here will be for a function I created to encode and decode Base64 values. The verb I am going to use is "Convert". I chose this value because the cmdlet is going to be changing the data from one representation to another. The Noun I am going to choose can be whatever I want really. To make the cmdlet easy to understand I am going to name it Convert-Base64. I could choose to create two different functions, for example ConvertTo-Base64 and ConvertFrom-Base64. I would personally rather use one command to perform both tasks as this is the kind of function that typically gets used both ways. Now that I know the name of my function I can write my help section which is below. + +You can see from the above section that I have a good idea of how this is going to work. I next start my functions build by defining my parameters. I typically will always add **[CmdletBinding()]** to my functions. What this does is allow the use of 7 common parameters in PowerShell functions. Some examples of these are -Verbose, Debug, ErrorAction, ErrorVariable, etc. This also allows me to easily define a Default Parameter Set name which I have found to be a great way of simplifying my functions and improving execution times. + + +`Function Convert-Base64 { + [CmdletBinding(DefaultParameterSetName='Encode')] + param( + [Parameter( + Mandatory=$True, + Position=0, + ValueFromPipeline=$True, + HelpMessage="Enter a string you wish to encode or decode using Base64. Example: Hello World!")] # End Parameter + [String]$Value, + [Parameter( + ParameterSetName='Encode', + Mandatory=$True)] + [Switch][Bool]$Encode, + [Parameter( + ParameterSetName='Decode', + Mandatory=$True)] + [Switch][Bool]$Decode, + [Parameter( + Mandatory=$False, + ValueFromPipeline=$False)] # End Parameter + [ValidateSet('ASCII', 'BigEndianUnicode', 'Default', 'Unicode', 'UTF32', 'UTF7', 'UTF8')] + [String]$TextEncoding = 'UTF8' + ) # End param +BEGIN +{...}} +`Notice in the above I have two "Switch" parameters. I have given them bool values so I can use the attribute "IsPresent" in any "If" statements that come up. For example I could do + + +`If ($Encode.IsPresent) { $Value = 'Encode' } +`I have also created two parameter set names. The reason for this is to ensure that only one option or the other is selected. We need to know whether to Encode or Decode the -Value parameters value. This prevents errors from occurring because the person executing the function may think extra parameters need to be defined. This may not always be as intuitive as this function. It is a best practice that should be adhered too. It eliminates the need to add code in your function that attempts to accomplish this same task. For example, if you did not create the Parameter Set names you would need to do this in your "BEGIN" brackets to ensure one of the other was defined. + + +`If (!($Encode.IsPresent -or $Decode.IsPresent)) +{ + Throw "Switch parameter -Decode or -Encode needs to be defined. " +} # End If +`The Parameter "Value" is mandatory and accepts pipeline input. I did not include the property "ValueFromPipelineByPropertyName" because we want to convert a string and not just the property value of a PowerShell object. This places a limitation on the kind of value placed to cmdlet which we do not want in this scenario. The HelpMessage property for this parameter can be used here because the "Value" property is Mandatory. If the property is not included when the cmdlet is executed, PowerShell will prompt the executor for this value using the message you define there. If you are familiar with bash and python you probably are familiar with positional parameters. This is the same concept here when defining the Position value. I like to set this value to prevent the need for someone using the cmdlet to enter each parameter value. Position=0 is referring to the first value after Convert-Base64. In an example this gives us the ability to do: + + +`Convert-Base64 'Convert me to base64' -Encode +`Instead of: + + +`Convert-Base64 -Value 'Convert me to base64' -Encode +`We can also prevent the need to include -Encode by setting a default Parameter Set Name value. This is done by changing + + +`[CmdletBinding()] +`To + + +`[CmdletBinding(DefaultParameterSetName='Encode')] +`The person executing the command can now simply do this to encode their string : + + +`Convert-Base64 'Convert me to base64' +`In the "TextEncoding" parameter I did my best to name this as I do not know of any functions that offer this kind of option. I have added **[ValidateSet()]** to this parameter because I know all the possible values that can be used and we do not want anything else to be in this value. This also creates a Tab Autocomplete for the person using the cmdlet which saves typing as well. Other options that can be used to validate parameter values are **ValidateRange** and **ValidateScript**. These are the 3 I use most often. Validate your parameters whenever possible as this shows a professionalism in your abilities and will set you apart from others. It also ensures that your cmdlets work as expected. In the PROCESS area of my cmdlet I am using the .NET object System.Text.Encoding to convert the base64 related values. I used Tab autocomplete to come up with the list in "ValidateSet". + + +`[ValidateSet('ASCII', 'BigEndianUnicode', 'Default', 'Unicode', 'UTF32', 'UTF7')] +`** +Building the Body of the Cmdlet +** + +There are a couple of values that exist by default in every function. The main ones to know that get used often are PSCmdlet and PSBoundParameters. I often use these in Switch statements to help guide the direction of my functions script execution. For example you could do something such as + +**$PSCmdlet.ParameterSetName** to refer to the parameter set name your function is using. In my example, the default value for this would be 'Encode'. You can also return the value of your parameters using **$PSBoundParameters.Keys.Value** + +In our situation there is not really a good way to use the BEGIN brackets. This section is optional so I am going to jump right into the PROCESS brackets. I am going to add a Switch statement to my PROCESS brackets using $PSCmdlet.ParameterSetName. If the parameter set name is Encode the commands inside the brackets next to encode will be executed. Same goes for Decode if that is the parameter set name defined. + + +`PROCESS { + Switch ($PSCmdlet.ParameterSetName) + { + 'Encode' { } + 'Decode' { } + } # End Switch +`Now that the cmdlet knows which action to carry out, I need to work with the next parameter value needed to be defined before the convert action can be taken. This is the "TextEncoding" parameter. I am going to make another switch statement for this. + +**NOTE**: As a side note Switch statements are faster than If statements in situations such as this where we have a good amount of options to filter through. + +Below is my switch statement. I am using this to convert the string value into whatever character encoding I want converted to Base64. + + +`Switch ($TextEncoding) +{ + 'ASCII' {$StringValue = [System.Text.Encoding]::ASCII.GetBytes("$Value")} + 'BigEndianUnicode' {$StringValue = [System.Text.Encoding]::BigEndianUnicode.GetBytes("$Value")} + 'Default' {$StringValue = [System.Text.Encoding]::Default.GetBytes("$Value")} + 'Unicode' {$StringValue = [System.Text.Encoding]::Unicode.GetBytes("$Value")} + 'UTF32' {$StringValue = [System.Text.Encoding]::UTF32.GetBytes("$Value")} + 'UTF7' {$StringValue = [System.Text.Encoding]::UTF7.GetBytes("$Value")} + 'UTF8' {$StringValue = [System.Text.Encoding]::UTF8.GetBytes("$Value")} +} # End Switch +`Once that value is defined the convert operation can be carried out. Error handling is another important aspect of cmdlet building. Typically we can accomplish this using Try Catch statements. Also using the -ErrorVariable parameter of a cmdlet is a great way to handle errors and redirect your functions execution. + +**NOTE**: A good thing to know about Try Catch is there is a third option called Finally. If you were to stop the execution of a function using Ctrl + C while inside of a Try Catch statement, the code inside the Finally brackets will still execute. This is great for leaving an infinite"While" loop with a message like "Exiting loop". + +Below is the Try Catch statement I have added: + + +`Try +{ + [System.Convert]::ToBase64String($StringValue) +} # End Try +Catch +{ + Throw "String could not be converted to Base64. The value entered is below. `n$Value" + $Error[0] +} # End Catch +`Notice the value **$Error[0]** I have included in the Catch brackets. This is another value that is automatically assigned when an error occurs inside a cmdlet. Using the first positional value "0" of $Error will put the PowerShell generated error message on screen. Otherwise the only message being displayed would be mine which is not going to give information on what caused the error. You are able to add multiple catch statements where you can catch specific error types to provide your own messaging in each situation. To do this you need to know the object name of the error that will occur. Just to provide an example of this you could catch incorrectly entered credentials in a catch statement using the below: + + +`Catch [System.Security.Authentication.AuthenticationException] +{ + Throw "The credentials you entered were incorrect" +} # End Catch +Catch +{ + $Error[0] +} +`The END brackets are also optional. Usually I use this area to close any session connections and to build a custom object. However to save script execution time, I am not going to do include that in this cmdlet. Whatever results are returned from the Try Catch statements is going to be the result of the command. The final result of these efforts can be view in the code below or at this [LINK:](https://github.com/tobor88/PowerShell-Red-Team/blob/master/Convert-Base64.ps1) + + + + + +`<# +.SYNOPSIS +This cmdlet is used to Encode or Decode Base64 strings. +.DESCRIPTION +Convert a string of text to or from Base64 format. Pipeline input is accepted in string format. Use the switch parameters Encode or Decode to define which action you wish to perform on your string +.PARAMETER Value +Defines the string to be encoded or decoded with base64. +.PARAMETER Encode +This switch parameter is used to tell the cmdlet to encode the base64 string +.PARAMETER Decode +This switch parameter is used to tell the cmdlet to decode the base64 string +.PARAMETER TextEncoding +This parameter is used to define the type of Unicode Character encoding to convert with Base64. This value you can be ASCII, BigEndianUnicode, Default, Unicode, UTF32, UTF7, or UTF8. The default value is UTF8 +.EXAMPLE +Convert-Base64 -Value 'Hello World!'' -Encode +# This example encodes "Hello World into Base64 format. +.EXAMPLE +Convert-Base64 -Value 'SGVsbG8gV29ybGQh' -Decode -Encoding ASCII +# This example decodes Base64 to a string in ASCII format +.NOTES +Author: Robert H. Osborne +Alias: tobor +Contact: rosborne@osbornepro.com +.LINK +https://roberthsoborne.com +https://osbornepro.com +https://btps-secpack.com +https://github.com/tobor88 +https://gitlab.com/tobor88 +https://www.powershellgallery.com/profiles/tobor +https://www.linkedin.com/in/roberthosborne/ +https://www.youracclaim.com/users/roberthosborne/badges +https://www.hackthebox.eu/profile/52286 +.INPUTS +System.String, -Value accepts strings from pipeline. +.OUTPUTS +System.String +#> +Function Convert-Base64 { + [CmdletBinding(DefaultParameterSetName='Encode')] + param( + [Parameter( + Mandatory=$True, + Position=0, + ValueFromPipeline=$True, + HelpMessage="Enter a string you wish to encode or decode using Base64. Example: Hello World!")] # End Parameter + [String]$Value, + [Parameter( + ParameterSetName='Encode', + Mandatory=$True)] + [Switch][Bool]$Encode, + [Parameter( + ParameterSetName='Decode', + Mandatory=$True)] + [Switch][Bool]$Decode, + [Parameter( + Mandatory=$False, + ValueFromPipeline=$False)] # End Parameter + [ValidateSet('ASCII', 'BigEndianUnicode', 'Default', 'Unicode', 'UTF32', 'UTF7', 'UTF8')] + [String]$TextEncoding = 'UTF8' + ) # End param +PROCESS +{ + Switch ($PSCmdlet.ParameterSetName) + { + 'Encode' { + Switch ($TextEncoding) + { + 'ASCII' {$StringValue = [System.Text.Encoding]::ASCII.GetBytes("$Value")} + 'BigEndianUnicode' {$StringValue = [System.Text.Encoding]::BigEndianUnicode.GetBytes("$Value")} + 'Default' {$StringValue = [System.Text.Encoding]::Default.GetBytes("$Value")} + 'Unicode' {$StringValue = [System.Text.Encoding]::Unicode.GetBytes("$Value")} + 'UTF32' {$StringValue = [System.Text.Encoding]::UTF32.GetBytes("$Value")} + 'UTF7' {$StringValue = [System.Text.Encoding]::UTF7.GetBytes("$Value")} + 'UTF8' {$StringValue = [System.Text.Encoding]::UTF8.GetBytes("$Value")} + } # End Switch + Try + { + [System.Convert]::ToBase64String($StringValue) + } # End Try + Catch + { + Throw "String could not be converted to Base64. The value entered is below. `n$Value" + $Error[0] + } # End Catch + } # End Switch Encode + 'Decode' { + $EncodedValue = [System.Convert]::FromBase64String("$Value") + Switch ($TextEncoding) + { + 'ASCII' { + Try + { + [System.Text.Encoding]::ASCII.GetString($EncodedValue) + } # End Try + Catch + { + Throw "Base64 entered was not in a correct format. The value received is below. `n$Value" + } # End Catch + } # End Switch ASCII + 'BigEndianUnicode' { + Try + { + [System.Text.Encoding]::BigEndianUnicode.GetString($EncodedValue) + } # End Try + Catch + { + Throw "Base64 entered was not in a correct format. The value received is below. `n$Value" + } # End Catch + } # End Switch BigEndianUnicode + 'Default' { + Try + { + [System.Text.Encoding]::Default.GetString($EncodedValue) + } # End Try + Catch + { + Throw "Base64 entered was not in a correct format. The value received is below. `n$Value" + } # End Catch + } # End Switch Default + 'Unicode' { + Try + { + [System.Text.Encoding]::Unicode.GetString($EncodedValue) + } # End Try + Catch + { + Throw "Base64 entered was not in a correct format. The value received is below. `n$Value" + } # End Catch + } # End Switch Unicode + 'UTF32' { + Try + { + [System.Text.Encoding]::UTF32.GetString($EncodedValue) + } # End Try + Catch + { + Throw "Base64 entered was not in a correct format. The value received is below. `n$Value" + } # End Catch + } # End Switch UTF32 + 'UTF7' { + Try + { + [System.Text.Encoding]::UTF7.GetString($EncodedValue) + } # End Try + Catch + { + Throw "Base64 entered was not in a correct format. The value received is below. `n$Value" + } # End Catch + } # End Swithc UTF7 + 'UTF8' { + Try + { + [System.Text.Encoding]::UTF8.GetString($EncodedValue) + } # End Try + Catch + { + Throw "Base64 entered was not in a correct format. The value received is below. `n$Value" + } # End Catch + } # End Switch UTF8 + } # End Switch + } # End Switch Decode + } # End Switch +} # End PROCESS +} # End Function Convert-Base64 +`Thanks for reading! + +- [tobor](https://roberthosborne.com) + + [1]: https://docs.microsoft.com/en-us/powershell/scripting/developer/cmdlet/approved-verbs-for-windows-powershell-commands?view=powershell-7 diff --git a/content/articles/2020/12/_index.md b/content/articles/2020/12/_index.md new file mode 100644 index 000000000..2b9b9cfc2 --- /dev/null +++ b/content/articles/2020/12/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from December 2020" +description: "PowerShell.org Articles published in December 2020." +--- diff --git a/content/articles/2020/12/icymi-powershell-week-of-11-december-2020/index.md b/content/articles/2020/12/icymi-powershell-week-of-11-december-2020/index.md new file mode 100644 index 000000000..eea5ce7f6 --- /dev/null +++ b/content/articles/2020/12/icymi-powershell-week-of-11-december-2020/index.md @@ -0,0 +1,55 @@ +--- +url: /articles/2020-12-11-icymi-powershell-week-of-11-december-2020/ +title: "ICYMI: PowerShell Week of 11-December-2020" +authors: + - Robin Dadswell +date: "2020-12-11T15:00:57+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/12/icymi-powershell-week-of-11-december-2020/ +--- + +Topics include Graph, DateTimes, JSON, Crescendo and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [*Announcing PowerShell Crescendo Preview.1*](https://devblogs.microsoft.com/powershell/announcing-powershell-crescendo-preview-1/) + +by Jason Helmick on 8th December +Crescendo provides the tools to easily wrap a native command to gain the benefits of PowerShell cmdlets. Wrapping native commands into Crescendo cmdlets can provide parameter handling like prompting for mandatory parameters and tab-completion for parameter values. Crescendo cmdlets can take the text output from the native application and parse it into objects. The output objects allow you to take advantage of all the post processing tools such as Sort-Object, Where-Object, etc. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201211-functiondraft.md#demystifying-powershell-dates-datetime-and-formatting)[*Demystifying PowerShell Dates, DateTime and Formatting*](https://adamtheautomator.com/demystifying-powershell-dates-datetime-and-formatting/) + +by Vignesh Mudliar on 8th December +In this article, you’re going to learn all about dates and PowerShell! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201211-functiondraft.md#creating-powershell-property-names)[*Creating PowerShell Property Names*](https://jdhitsolutions.com/blog/powershell/7937/creating-powershell-property-names/) + +by Jeff Hicks on 8th December +An useful tip from Jeff Hicks on how to convert property names more meaningful + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201211-functiondraft.md#wrangling-rest-apis-and-json-with-powershell-four-demos)[*Wrangling REST APIs and JSON with PowerShell (Four Demos!)*](https://adamtheautomator.com/rest-apis-json-powershell/) + +by Christopher Bisset on 10th December +In this article, you will discover the basics behind JSON and PowerShell. You’ll learn how to use PowerShell to speak directly to a REST API and translate the data into something useful! You’ll also learn how to build a couple of handy ways to use JSON in your everyday PowerShell scripts too! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201211-functiondraft.md#you-should-be-customizing-your-powershell-prompt-with-psreadline)[*You should be customizing your PowerShell Prompt with PSReadLine*](https://www.thetechplatform.com/post/you-should-be-customizing-your-powershell-prompt-with-psreadline) + +by TheTechPlatform on 11th December +This article shows how to customize PowerShell port with PSReadLine. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201211-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/chris_noring/status/1336108042207760389) + +If you want to learn #powershell here we begin from scratch. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201211-functiondraft.md#youtube-microsoft-graph--powershell-script-from-scratch)[*Youtube: Microsoft Graph | Powershell Script from Scratch*](https://www.youtube.com/watch?v=yw5Cz5rO6_Y) + +PowerShell script from scratch to query Microsoft Graph API diff --git a/content/articles/2020/12/icymi-powershell-week-of-18-december-2020/index.md b/content/articles/2020/12/icymi-powershell-week-of-18-december-2020/index.md new file mode 100644 index 000000000..a65c10528 --- /dev/null +++ b/content/articles/2020/12/icymi-powershell-week-of-18-december-2020/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2020-12-18-icymi-powershell-week-of-18-december-2020/ +title: "ICYMI: PowerShell Week of 18-December-2020" +authors: + - Robin Dadswell +date: "2020-12-18T15:00:37+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/12/icymi-powershell-week-of-18-december-2020/ +--- + +Topics include NuGet feeds, Azure, OpenSSH, PowerShell 7.2 and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201218-functiondraft.md#hosting-and-protecting-your-own-nuget-feed-with-proget)[*Hosting and Protecting Your Own NuGet Feed with ProGet*](https://adamcook.io/p/hosting-and-protecting-your-own-nuget-feed-with-proget/) + +by Adam Cook on 13th December +In this post, Adam will show us how to install Inedo’s ProGet to host your own NuGet feed (effectively your own PowerShell Gallery). + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201218-functiondraft.md#how-to-deploy-an-azure-vm-to-availability-zone-powershell-guide)[*How to Deploy an Azure VM to Availability Zone? (PowerShell Guide)*](https://www.rebeladmin.com/2020/12/how-to-deploy-an-azure-vm-to-availability-zone-powershell-guide/) + +by Dishan Francis on 14th December +Dishan walks us through how we can deploy Azure Windows Virtual Machine to Azure Availability Zone by using Azure PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201218-functiondraft.md#media-sync-organize-your-photos-and-videos-with-powershell)[*Media Sync: Organize Your Photos and Videos with PowerShell*](https://spiderzebra.com/2020/12/16/media-sync-organize-your-pictures-and-videos-with-powershell/) + +by Nick Richardson on 16th December +In this post, Nick walks us through how to organize your media (photos and videos) using PowerShell + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201218-functiondraft.md#deploy-openssh-server-to-windows-10)[*Deploy OpenSSH Server to Windows 10*](https://jdhitsolutions.com/blog/powershell-7/7969/deploy-openssh-server-to-windows-10/) + +by Jeffery Hicks on 16th December +Jeff Hicks walks us through how to setup OpenSSH server and SSH remoting in PowerShell on Windows 10. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201218-functiondraft.md#how-to-copy-active-directory-groups-from-one-user-to-another-with-powershell)[*How to Copy Active Directory Groups from One User to Another with PowerShell*](https://petri.com/how-to-copy-active-directory-groups-from-one-user-to-another-with-powershell) + +by Russell Smith on 17th December +Ever needed to copy a user's group membership in AD - find out how to do it here. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201218-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/kci2ma/josh_duffney_interview_josh_discusses_the/) + +Josh discusses the importance of learning PowerShell and how he started coding. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201218-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1338999597478207488) + +#PowerShell | PowerShell 7.2 Preview 2 release + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201218-functiondraft.md#youtube-run-tasks-on-timers-in-powershell)[*Youtube: Run Tasks on Timers in PowerShell*](https://www.youtube.com/watch?v=8dZbdl3wzW8) + +Instead of using your operating system's task scheduler (ie. systemd on Linux, MacOS, or Windows Task Scheduler), you can use PowerShell to create a Timer. diff --git a/content/articles/2020/12/icymi-powershell-week-of-27-november-2020-04-december-2020/index.md b/content/articles/2020/12/icymi-powershell-week-of-27-november-2020-04-december-2020/index.md new file mode 100644 index 000000000..81d1f39be --- /dev/null +++ b/content/articles/2020/12/icymi-powershell-week-of-27-november-2020-04-december-2020/index.md @@ -0,0 +1,47 @@ +--- +url: /articles/2020-12-04-icymi-powershell-week-of-27-november-2020-04-december-2020/ +title: "ICYMI: PowerShell Week of 27-November-2020 & 04-December-2020" +authors: + - Robin Dadswell +date: "2020-12-04T19:09:00+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2020/12/icymi-powershell-week-of-27-november-2020-04-december-2020/ +--- + +Topics include Secret Santa, Microsoft Graph, NAS devices and more.. +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201204-functiondraft.md#powershell-secret-santa-sent-via-android-sms)[*Powershell Secret Santa, sent via Android SMS*](https://jackmallender.com/2020/11/25/powershell-secret-santa-sent-via-android-sms/) + +by Jack Mallender on 25th November +Sending SMS via Android using Powershell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201204-functiondraft.md#microsoft-graph-api-powershell-azuread-app)[*Microsoft Graph API PowerShell AzureAD App*](https://itfordummies.net/2020/11/29/microsoft-graph-api-powershell-azuread-app/) + +by edemilliere on 29th November +Today we’ll talk about the Microsoft Graph API, PowerShell & AzureAD application. As you may know, the Microsoft Graph API is the data source where you can find everything about Office 365 and everything that’s interacting with it. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201204-functiondraft.md#monitoring-with-powershell-monitoring-nas-devices)[*Monitoring with PowerShell: Monitoring NAS devices*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-nas-devices/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-nas-devices) + +by Kelvin Tegelaar on 1st December +A quick overview of using SSH to monitor NAS (and other SSH compatible) devices. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201204-functiondraft.md#secrets-management-with-azure-key-vault-and-powershell)[*Secrets management with Azure Key Vault and Powershell*](https://www.scriptinglibrary.com/languages/powershell/secrets-management-with-azure-keyvault-and-powershell/) + +by Paolo Frigo on 2nd December +A short but useful post on using Azure Key Vault to store secrets. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201204-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/k4kk6d/want_to_practice_your_skills_advent_of_code_2020/) + +Join other Redditors and sharpen your PowerShell skills with the 2020 advent of code. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20201204-functiondraft.md#youtube-powershell-lightning-talk-advanced-toast-notifications-in-powershell)[*Youtube: PowerShell Lightning Talk: Advanced Toast Notifications in PowerShell*](https://www.youtube.com/watch?v=boNaJv206Tw) + +Join Josh King as he does a fast paced lightning talk for RTPSUG showing you how to use Toast notifications. diff --git a/content/articles/2020/12/media-sync-organize-your-photos-and-videos-with-powershell/index.md b/content/articles/2020/12/media-sync-organize-your-photos-and-videos-with-powershell/index.md new file mode 100644 index 000000000..f3a3464f9 --- /dev/null +++ b/content/articles/2020/12/media-sync-organize-your-photos-and-videos-with-powershell/index.md @@ -0,0 +1,66 @@ +--- +url: /articles/2020-12-16-media-sync-organize-your-photos-and-videos-with-powershell/ +title: "Media Sync: Organize Your Photos and Videos with PowerShell" +authors: + - n2501r +date: "2020-12-16T22:34:38+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks + - Tools + - Tutorials +tags: + - File Management + - GUI + - Automation +aliases: + - /2020/12/media-sync-organize-your-photos-and-videos-with-powershell/ +--- + +Do you have photos and videos that you have taken over the years that are scattered all over the place? Do you want to have all your photos and videos organized? Do you want all your photos and videos to have a standardized naming scheme? If you answered YES to these questions, then this is the post for you. In this post, I will provide you with the PowerShell code and examples for how to use the Media Sync script. The Media Sync script utilizes the Shell.Application COM object to gather file metadata. Only files that have a picture or video metadata type will be processed. The script uses the date taken for pictures and the media created metadata fields to organize the photos and videos. If there is no date taken or media created available for a given file, the script will use the modify date instead. The script also ensures that you won't have any duplicate files by checking the file hashes of the two files in question. If the script detects duplicate files, it will only keep one copy of the file. There are also tools included to help you cleanup unwanted files or folders, delete empty directories and find duplicate files. The script has a simple menu driven PowerShell GUI similar to what I did in a previous [ +post +](https://spiderzebra.com/2020/05/21/how-to-create-a-simple-powershell-gui/). The Media Sync PowerShell script provides the following features: + + + - + COPY all photos and videos in a given folder structure (maintains original file in original location). + + + - + MOVE all photos and videos in a given folder structure (original file is renamed and moved). + + + - + Rename the photo or video based on the date the photo or video was taken. + + + - + Directory structure organized by year and month the photo or video was taken. + + + - + Ability to delete any empty folders in a given path, this will help with the cleanup process after you have moved photos and videos from the original location. + + + - + Remove all files based off a given file extension, this will help with the cleanup process after you have moved photos and videos from the original location. + + + - + Utilize Out-GridView to highlight and delete files or folders, this can be used to cleanup files of any file extension. + + + - + Find duplicate files in a given directory. + + + - + View files in a given directory via Out-GridView. + + + + Take a look for yourself at my site: + + +[SpiderZebra.com](https://spiderzebra.com/2020/12/16/media-sync-organize-your-pictures-and-videos-with-powershell/) + **Nick Richardson (@ChiefNSR)** diff --git a/content/articles/2020/12/pshsummit2021-call-for-speakers/index.md b/content/articles/2020/12/pshsummit2021-call-for-speakers/index.md new file mode 100644 index 000000000..37ca81702 --- /dev/null +++ b/content/articles/2020/12/pshsummit2021-call-for-speakers/index.md @@ -0,0 +1,44 @@ +--- +url: /articles/2020-12-20-pshsummit2021-call-for-speakers/ +title: "PowerShell + DevOps Global Summit 2021: Calling All Speakers!" +authors: + - Mike Kanakos +date: "2020-12-20T16:00:47+00:00" +categories: + - Announcements + - Events + - News + - PowerShell Summit +tags: + - PowerShell Summit + - Call for Speakers +legacy_featured_image: /wp-content/uploads/2020/11/Asset-4@1x.png +aliases: + - /2020/12/pshsummit2021-call-for-speakers/ +--- + +Hello PowerShell and Automation family! + + +I hope you’re getting excited for the PowerShell + DevOps Global Summit 2021! I can’t wait to get back to seeing fantastic demos, exploring new topics and learning from others. I have written in the past about how the Summit 2021 event will be a little different because of it being a virtual event. But even though we won’t be together in person, there is one thing about Summit you expect over the years: AWESOME DEMOS! + + +The speakers that present at the Summit are some of the best and brightest minds in the community, and Summit 2021 will be no different. PowerShell Summit has always been known for having expert-level content, and Summit 2021 will continue that tradition. **We’re looking to fill about 35 speaking slots** and we’re looking for interesting and thought-provoking submissions. + + +If you would like to be a presenter at PowerShell + DevOps Global Summit 2021, then you need to submit a proposal for your topic. Details about the submission process can be found at [https://www.papercall.io/pshsummit2021](https://www.papercall.io/pshsummit2021), but let me give you a quick idea of what the process is like. The **submission period has already begun and continues through January 15th, 2021.** Once the period closes, we’ll review the submissions, pick our speakers, and notify them shortly after the close of the submission process. **Speakers will have until March 15th to submit their first draft of their Summit talk, and then final versions will be due by April 15th.** + + +So what kinds of topics are we looking for? + + +**We’re looking for unique topics that talk about real-world problems and solutions.** We want engaging content that grabs people and makes them want to come see your session! A general rule of thumb is that Summit sessions are demo heavy with lots of audience interaction but also light on the PowerPoint slides. Our attendees want to see the code and see it in action! Also Summit topics aren’t the same old, everyday topics you see elsewhere. We want unique, creative content that is exciting! + + +**All sessions for PowerShell + DevOps Global Summit 2021 will be 45 minutes and will be pre-recorded.** The presenters will host their sessions live and interact with attendees via chat, but the content they share will be pre-recorded. **When you submit a topic, it is expected that you understand you will be able to record your content and edit it as necessary.** We understand that not everyone is sure if their topic is the right fit for the Summit. If you would like to ask Summit organizers questions about the submissions process or want input on your idea for a topic, please contact us via [content@powershell.org](mailto:content@powershell.org) . We’re happy to discuss proposed sessions and offer some feedback. You can also reach Summit organizers on the #conferences channel inside the PowerShell Slack and Discord forums. + + +There’s plenty more detail at [https://www.papercall.io/pshsummit2021](https://www.papercall.io/pshsummit2021) , so make sure you stop by and read up on all the details. **The deadline for submitting your proposal ends January 15th! Get those submissions submitted ASAP and start getting ready to build your outstanding demos!** + + +Good luck and and I am looking forward to seeing all the amazing content at Summit! diff --git a/content/articles/2020/_index.md b/content/articles/2020/_index.md new file mode 100644 index 000000000..c9ebdd7d5 --- /dev/null +++ b/content/articles/2020/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from 2020" +description: "PowerShell.org Articles published in 2020." +--- diff --git a/content/articles/2021-01-08-icymi-powershell-week-of-08-january-2021.md b/content/articles/2021-01-08-icymi-powershell-week-of-08-january-2021.md deleted file mode 100644 index 32b81e7b7..000000000 --- a/content/articles/2021-01-08-icymi-powershell-week-of-08-january-2021.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 08-January-2021" -authors: - - Robin Dadswell -date: "2021-01-08T19:37:07+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/01/icymi-powershell-week-of-08-january-2021/ ---- - -Topics include Phishing, DSC, Regex and more... -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210108-functiondraft.md#set-windows-timezone-via-location-services)[*Set Windows Timezone via Location Services*](https://tseknet.com/blog/timezone) - -by Dan Tsekahnskiy on 4th January -This post aims to help those of you trying to set the Windows time zone without relying on DHCP options or similar solutions. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210108-functiondraft.md#getting-started-with-powershell-and-regex)[*Getting Started with PowerShell and Regex*](https://adamtheautomator.com/powershell-regex/) - -by Christopher Bisset on 5th January -In this article, you’re going to learn the basics of working with regex and PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210108-functiondraft.md#how-to-set-up-azure-dsc-on-an-ubuntu-linux-vm)[*How to Set Up Azure DSC on an Ubuntu Linux VM*](https://adamtheautomator.com/how-to-set-up-azure-dsc-on-an-ubuntu-linux-vm/) - -by Justin Sylvester on 6th January -Justin Shows how to use Azure DSC against an Azure Virtual Machine. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210108-functiondraft.md#monitoring-with-powershell-monitoring-potential-phishing-campaigns)[*Monitoring with PowerShell: Monitoring potential phishing campaigns*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-potential-phishing-campaigns/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-potential-phishing-campaigns) - -by Kelvin Tegelaar on 8th January -Use Office 365 tools to search for potential phishing attacks. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210108-functiondraft.md#answering-the-cim-directory-challenge)[*Answering the CIM Directory Challenge*](https://jdhitsolutions.com/blog/powershell/7992/answering-the-cim-directory-challenge/) - -by Jeff Hicks on 8th January -Jeff explores the his solution to the recent Iron Scripter Challenge. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210108-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/koghqv/how_to_get_the_xbox_series_x/) - -Use Invoke-WebRequest to hopefully score an Xbox before they sell out. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210108-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1347551267472560131) - -Secret Management and Secret Store Release Candidates - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210108-functiondraft.md#youtube-change-filefolder-permissions-with-powershell)[*Youtube: Change File/Folder permissions with Powershell*](https://www.youtube.com/watch?v=0nk2NDYyQT8) - -This video covers how to use modify or set the security settings or permissions to a file or folder using ACL as well as ICACLS. diff --git a/content/articles/2021-01-15-icymi-powershell-week-of-15-january-2021.md b/content/articles/2021-01-15-icymi-powershell-week-of-15-january-2021.md deleted file mode 100644 index bf1fbc450..000000000 --- a/content/articles/2021-01-15-icymi-powershell-week-of-15-january-2021.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 15-January-2021" -authors: - - Robin Dadswell -date: "2021-01-15T18:18:36+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/01/icymi-powershell-week-of-15-january-2021/ ---- - -Topics include PowerShell 7.1, SharePoint Online, WPF and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210115-functiondraft.md#how-to-install-and-upgrade-to-powershell-71)[*How to install and upgrade to PowerShell 7.1.*](https://4sysops.com/archives/how-to-install-and-upgrade-to-powershell-71/) - -by Leos Marek on 11th January -PowerShell 7, currently available in version 7.1, is the most recent release of Microsoft's cross-platform scripting language. This bog post is about how to install and upgrade to PowerShell 7.1. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210115-functiondraft.md#what-the-shell-is-happening)[*What the Shell is Happening?*](https://jdhitsolutions.com/blog/powershell/8013/what-the-shell-is-happening/) - -by Jeffrey Hicks on 13th January -A Virtual sticky note by Jeff,The PowerShell community is beginning another year in the world of PowerShell 7. Most of you know what that means. However, there are newcomers to our community practically every day - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210115-functiondraft.md#sharepoint-online-powershell-commands-for-admin-tasks)[*SharePoint Online PowerShell commands for admin tasks*](https://searchwindowsserver.techtarget.com/tutorial/SharePoint-Online-PowerShell-commands-for-admin-tasks) - -by Adam Bertram on 14th January -This blogs shows how PowerShell can be used to Adminster SharePoint online. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210115-functiondraft.md#how-to-download-a-file-with-powershell-from-the-web)[*How to Download a File with PowerShell from the Web*](https://adamtheautomator.com/powershell-download-file/) - -by June Castillote on 15th January -Discover different ways to download files from the internet with PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210115-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/KevinMarquette/status/1349195755253207041%3E) - -What are your #PowerShell hidden gems? Things you discovered that gave you that "Oh, I had no idea" feeling. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210115-functiondraft.md#youtube-building-wpf-applications-in-visual-studio-code-with-powershell)[*Youtube: Building WPF Applications in Visual Studio Code with PowerShell*](https://www.youtube.com/watch?v=8snKUcvaMmc) - -This video explains how to use Visual Studio Code and PowerShell Pro Tools to build a WPF application. The PSScriptPad integration in PowerShell Pro Tools for Visual Studio Code allows you to use a drag and drop designer to layout and customize your WPF forms. diff --git a/content/articles/2021-01-22-icymi-powershell-week-of-22-january-2021.md b/content/articles/2021-01-22-icymi-powershell-week-of-22-january-2021.md deleted file mode 100644 index f76539288..000000000 --- a/content/articles/2021-01-22-icymi-powershell-week-of-22-january-2021.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 22-January-2021" -authors: - - Robin Dadswell -date: "2021-01-22T21:00:58+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/01/icymi-powershell-week-of-22-january-2021/ ---- - -Topics include GitHub Actions, Linux, SharePoint and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210122-functiondraft.md#step-by-step-deploy-azure-powershell-functions-with-github-actions)[*Step-by-Step: Deploy Azure PowerShell Functions with GitHub Actions*](https://4bes.nl/2021/01/17/step-by-step-deploy-azure-powershell-functions-with-github-actions/) - -by Barbara Forbes on 17th January -In this post we will go through the process to deploy Azure PowerShell Functions with GitHub Actions. I think this will translate to other languages pretty well. The workflow will first deploy the function if it does not exist. After that it will use the publish profile to deploy the PowerShell code in the repository to Azure. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210122-functiondraft.md#linux-and-powershell)[*Linux and Powershell*](https://matteoguadrini.github.io/posts/linux-and-powershell/) - -by Matteo Guadrini on 17th January -Matteo Guadrini shows how to install and start using PowerShell in Linux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210122-functiondraft.md#how-to-upgrade-the-sku-of-the-public-ip-address-in-the-azure)[*How to upgrade the SKU of the public IP address in the Azure?*](https://wachulec.me/posts/how-to-upgrade-sku-of-public-ip-address-azure/) - -by Poitr Wachulec on 21st January -Poitr Wachulec shows how PowerShell can be used to Upgrade SKU of Public IP address in Azure - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210122-functiondraft.md#how-to-write-a-cmdlet-in-powershell-step-by-step)[*How to write a Cmdlet in PowerShell Step-by-Step*](https://www.virtualizationhowto.com/2021/01/how-to-write-a-cmdlet-in-powershell-step-by-step/#disqus_thread/) - -by Brandon Lee on 22nd January -Brandon Lee wrote about the difference between a PowerShell function and cmdlet and how to write them. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210122-functiondraft.md#powershell-secretmanagement-chrome-edge-vault-extension-is-good-enough-for-an-initial-release-check-it-out)[*#Powershell #SecretManagement #Chrome #Edge vault extension is good enough for an initial release, check it out!*](https://twitter.com/JustinWGrote/status/1350367220572950531) - -by Justin Grote on 22nd January - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210122-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/l2bhm3/powershell_code_review/) - -u/TiiimK seeks help for reviewing the code which will is used to verify user identity using MFA and SSO - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210122-functiondraft.md#youtube-find-missing-metadata-in-sharepoint-online-using-powershell-pnp)[*Youtube: Find Missing Metadata in SharePoint Online using PowerShell PnP*](https://www.youtube.com/watch?v=BqNpobTFByI) - -Learn how to build the PowerShell script to find the missing values in required fields in SharePoint Online with Veronica diff --git a/content/articles/2021-01-29-icymi-powershell-week-of-29-january-2021.md b/content/articles/2021-01-29-icymi-powershell-week-of-29-january-2021.md deleted file mode 100644 index 3780ac8db..000000000 --- a/content/articles/2021-01-29-icymi-powershell-week-of-29-january-2021.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 29-January-2021" -authors: - - Robin Dadswell -date: "2021-01-29T15:58:18+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -aliases: - - /2021/01/icymi-powershell-week-of-29-january-2021/ ---- - -Topics include PSRemoting, Active Directory, string manipulation and more.. - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210129-functiondraft.md#an-active-directory-change-report-from-powershell)[*An Active Directory Change Report from PowerShell*](https://jdhitsolutions.com/blog/powershell/8087/an-active-directory-change-report-from-powershell/) - -by Jeff Hicks on 26th January -Jeff walks us through how to track the changes in Active Directory since given date and time using PowerShell - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210129-functiondraft.md#how-to-set-up-psremoting-with-windows-and-linux)[*How to Set up PSRemoting with Windows and Linux*](https://adamtheautomator.com/psremoting-linux/) - -by Tyler Muir on 26th January -In this article, you’re going to learn how to set up a Windows client to connect to a Linux computer (CentOS) using PSRemoting over SSH and vice versa. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210129-functiondraft.md#monitoring-with-powershell-monitoring-powershell-protect)[*Monitoring with PowerShell: Monitoring Powershell Protect*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-powershell-protect/?utm_source=dlvr.it&utm_medium=twitter&utm_campaign=monitoring-with-powershell-monitoring-powershell-protect) - -by Kelvin Tegelaar on 27th January -Monitoring with PowerShell with PowerShell protect. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210129-functiondraft.md#is-powershell-considered-a-programming-language)[*Is Powershell Considered a Programming Language?*](https://itblogpros.com/is-powershell-considered-a-programming-language/) - -by Graeme John on 28th January -Is Powershell Considered a Programming Language? Yes it certainly is, no matter what anyone tells you. Many people that work in dev environments might scoff at the idea that your Powershell creations, are anything more than scripts, but they are dead wrong, and we’ll flesh out the details in our blog post as to why that is the case. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210129-functiondraft.md#powershell-concatenation-how-to-use-this-powerful-feature)[*PowerShell concatenation: How to use this powerful feature*](http://techgenix.com/powershell-concatenation/) - -by Lavanya Rathnan on 28th January -String concatenation is something that we use commonly to create the right data. This blog post show different ways to concatenate them in PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210129-functiondraft.md#youtube-writing-robust-powershell)[*Youtube: Writing Robust PowerShell*](https://www.youtube.com/watch?v=QHqN9Nt5oCY) - -Guy Leech is kicking us off for 2021 with by sharing his tips for writing PowerShell code that will reduce the occurrences of errors and unexpected behavior which helps increase reliability and user confidence. diff --git a/content/articles/2021-02-12-icymi-powershell-week-of-12-february-2021.md b/content/articles/2021-02-12-icymi-powershell-week-of-12-february-2021.md deleted file mode 100644 index 95c466139..000000000 --- a/content/articles/2021-02-12-icymi-powershell-week-of-12-february-2021.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 12-February-2021" -authors: - - Robin Dadswell -date: "2021-02-12T15:00:13+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/02/icymi-powershell-week-of-12-february-2021/ ---- - -Topics include Microsoft Cloud Services, Dynamic parameters, PSRemoting, jobs and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210212-functiondraft.md#powershell-cheat-sheet-connect-to-microsoft-cloud-services-az-azuread-exchange-msteams)[*PowerShell Cheat Sheet: Connect to Microsoft Cloud Services (Az, AzureAD, Exchange, MSTeams)*](https://sid-500.com/2021/02/08/powershell-cheat-sheet-connect-to-microsoft-365-cloud-services-az-azuread-exchange-msteams/) - -by Patrick Gruenauer on 8th February -Patrick is working on PowerShell cheat sheet, and here's few on how to connect to Microsoft Cloud Services (Az, AzureAD, Exchange, MSTeams) - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210212-functiondraft.md#query-db2-from-powershell)[*Query DB2 From PowerShell*](https://sqlvariant.com/2021/02/query-db2-from-powershell/) - -by Aaron Nelson on 9th February -Aaron walks us through how to connect DB2 and query using PowerShell - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210212-functiondraft.md#tips-and-tricks-to-using-powershell-dynamic-parameters)[*Tips and Tricks to Using PowerShell Dynamic Parameters*](https://jeffbrown.tech/tips-and-tricks-to-using-powershell-dynamic-parameters/) - -by Jeff Brown on 10th February -Jeff walks us through about dynamic parameters in PowerShell with real-life examples - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210212-functiondraft.md#how-to-check-the-available-vm-sizes-skus-by-azure-region)[*How to check the available VM Sizes (SKUs) by Azure Region*](https://www.thomasmaurer.ch/2021/02/how-to-check-the-available-vm-sizes-skus-by-azure-region/) - -by Thomas Maurer on 11th February -Thomas shows us how to check the available VM Sizes in Azure in couple of ways that includes PowerShell as well. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210212-functiondraft.md#how-to-set-up-psremoting-in-a-workgroup-environment)[*How to Set Up PSRemoting in a Workgroup Environment*](https://adamtheautomator.com/psremoting-workgroup/) - -by Tyler Muir on 11th February -In this tutorial, you’re going to learn all of the steps necessary to set up a PSRemoting connection using a username and password from a client and server in a workgroup. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210212-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1360038846101032960) - -#PowerShell 7.0.5 and 7.1.2 are out! 7.2 Preview 3 coming soon. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210212-functiondraft.md#youtube-working-with-powershell-background-jobs)[*Youtube: Working with PowerShell background jobs*](https://www.youtube.com/watch?v=vX7az9PDA8Y) - -This video demonstrates how to multitask in PowerShell by using background jobs. diff --git a/content/articles/2021-03-01-icymi-powershell-week-of-26-february-2021.md b/content/articles/2021-03-01-icymi-powershell-week-of-26-february-2021.md deleted file mode 100644 index 785ce3563..000000000 --- a/content/articles/2021-03-01-icymi-powershell-week-of-26-february-2021.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 26-February-2021" -authors: - - Robin Dadswell -date: "2021-03-01T19:28:47+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/03/icymi-powershell-week-of-26-february-2021/ ---- - -Topics include DNS, VMWare, Exchange and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [][1][_Getting Detailed Task Information With PowerCLI (Function)_][2] {.wp-block-heading} - -by Fer Corrales on 22nd February - -The _Get-Task_ default output is quite limited compared to the information displayed by the vCenter or ESXi Task Panel. In this post you will find out how to get more information from PowerCLI. - -###### [][3][_How to Flush DNS in Windows 10_][4] {.wp-block-heading} - -by Anthony Metcalf on 22nd February - -In this article, you’re going to learn how to clear a DNS cache as a troubleshooting method in Windows 10 using the built-in ipconfig command and with PowerShell’s Clear-DnsClientCache cmdlet. - -###### [][5][_Monitoring with PowerShell: Monitoring listening applications_][6] {.wp-block-heading} - -by Kelvin Tegelaar on 23rd February - -Monitor listening ports in Windows to ensure that the expected application is using it. - -###### [][7][_How to Move Exchange Mailboxes with PowerShell_][8] {.wp-block-heading} - -by Faris Malaeb on 23rd February - -Known as a Local Move Request, you can move user, archive, arbitration, discovery, and other types of mailboxes. In this tutorial, you will learn how to start and manage local move requests using Windows Powershell! - -###### [][9][_PowerShell for Visual Studio Code Updates – February 2021_][10] {.wp-block-heading} - -by Sydney Smith on 23rd February - -See both what is new and what is to come in this blog from Microsoft on the PowerShell extension for VS Code. - -###### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} - -Learn to make a simple GUI with the PSScriptMenuGui Module. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210226-functiondraft.md#getting-detailed-task-information-with-powercli-function - [2]: https://fercorrales.com/getting-detailed-task-information-with-powercli-function/?utm_source=rss&utm_medium=rss&utm_campaign=getting-detailed-task-information-with-powercli-function - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210226-functiondraft.md#how-to-flush-dns-in-windows-10 - [4]: https://adamtheautomator.com/flush-dns-in-windows-10/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210226-functiondraft.md#monitoring-with-powershell-monitoring-listening-applications - [6]: https://www.cyberdrain.com/monitoring-with-powershell-monitoring-listening-applications/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-listening-applications - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210226-functiondraft.md#how-to-move-exchange-mailboxes-with-powershell - [8]: https://adamtheautomator.com/new-moverequest/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210226-functiondraft.md#powershell-for-visual-studio-code-updates--february-2021 - [10]: https://devblogs.microsoft.com/powershell/powershell-for-visual-studio-code-updates-february-2021/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210226-functiondraft.md#reddit-rpowershell---most-popular-weekly-post - [12]: https://www.reddit.com/r/PowerShell/comments/lr4mxx/how_to_create_a_simple_powershell_gui_menu_to/ diff --git a/content/articles/2021-03-02-summit-lightning-demos.md b/content/articles/2021-03-02-summit-lightning-demos.md deleted file mode 100644 index 2ae970c3d..000000000 --- a/content/articles/2021-03-02-summit-lightning-demos.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Summit Lightning Demos -authors: - - James Petty -date: "2021-03-02T22:23:07+00:00" -categories: - - PowerShell Summit -tags: - - PowerShell Summit - - Lightning Demos -aliases: - - /2021/03/summit-lightning-demos/ ---- - -This year, the PowerShell + DevOps Summit will be a virtual event. Submissions to present a Lightning Demo are still open? The PowerShell community is looking for you! You Can Do It! - -Lightning Demos are rapid-fire demonstrations of some sort of PowerShell use-case. They are geared towards speakers that aren’t prepared to give a full-length conference presentation but that have something they want to geek out about. Some details that were provided for the 2019 Summit can be found here. - -If you have a demonstration or two that you’d like to give that fits this description, please fill out the form here. Most demonstrations fall into the 7 to 10-minute range in length, but it’s fine if it’s a bit shorter. - -Note that these will be prerecorded demonstrations. You will not be presenting live; the organizers will be reaching out to schedule time to meet with selected individuals and record these demonstrations. They will ultimately be edited together into a final video, the exact format of which is to be determined. - -Some dates to keep in mind: - -March 15th, 2021 – final date to fill out the [submission form][1] -March 31st, 2021 – all demos must be scheduled and recorded -April 27th – April 29th, 2021 – PowerShell + DevOps Summit 2021 -Matt Bobke ([@mattbobke][2]) and Phil Bossman ([@Schlauge][3]) will be working together to organize the Lightning Demo portion of the event. Both Matt and Phil are very active PowerShell community members and leaders of PowerShell User Groups. Matt leads the SoCal PowerShell group. Phil leads the Research Triangle PowerShell User Group. - -Matt’s Testimonial - -I also want to share my thoughts about the Summit itself. The PowerShell + DevOps Summit is the only tech conference that I have ever personally attended; I attended in 2019 as an OnRamp-track scholarship recipient. I have never been surrounded by so many smart, passionate and kind people in my life. I learned so much, not just about PowerShell but about how to take charge of my career. Many speakers that we have hosted for our group, SoCal PowerShell, in the past will be speaking at the Summit. I highly encourage you to consider attending virtually and supporting the organization and the featured speakers. It is unfortunate that it will not be a physical conference this year, but I’m sure the content and the discussions will be just as great. - -Thank you, and we look forward to receiving your submissions! If you have any questions, please do not hesitate to reach out. - - [1]: https://forms.office.com/Pages/ResponsePage.aspx?id=11EApwjKOUO63m1xCi_2FuDegRwcZUJGp8jj-CjdL3xUNTlJV040TUFUUkoyQlZLUkY2SUE4NUNIVi4u - [2]: https://twitter.com/mattbobke - [3]: https://twitter.com/Schlauge diff --git a/content/articles/2021-03-02-website-forum-updates.md b/content/articles/2021-03-02-website-forum-updates.md deleted file mode 100644 index 0b4608246..000000000 --- a/content/articles/2021-03-02-website-forum-updates.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Website & Forum Updates -authors: - - James Petty -date: "2021-03-02T22:20:17+00:00" -categories: - - Announcements -tags: - - Community - - Website -aliases: - - /2021/03/website-forum-updates/ ---- - -The migration is completed and we are happy to announce that the new forums are live and ready to go. If you had an existing powershell.org account you will need to reset your password. Once you have done that you can configure your logging with Twitter, Discord, GitHub, Microsoft 365, and Linkedin SSO options. - -The new link is but we will put in a redirect for powershell.org/forums as well. - -For instructions on how to do this, you can follow this post. - -If you have any feedback on the new software please let us know by posting in the Website and Forum Feedback section. diff --git a/content/articles/2021-03-05-icymi-powershell-week-of-05-march-2021.md b/content/articles/2021-03-05-icymi-powershell-week-of-05-march-2021.md deleted file mode 100644 index cb0b37be4..000000000 --- a/content/articles/2021-03-05-icymi-powershell-week-of-05-march-2021.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 05-March-2021" -authors: - - Robin Dadswell -date: "2021-03-05T15:00:00+00:00" -categories: - - In Case You Missed It - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/03/icymi-powershell-week-of-05-march-2021/ ---- - -Topics include REST APIs, PSRemoting, Azure AD reporting and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [][1][_Replicating VMware NSX-T Services with REST API and PowerShell_][2] {.wp-block-heading} - -by Fer Corrales on 1st March - -I have worked on several NSX-V and NSX-T implementations that required the creation of an important number of objects, in the order of the thousands. Therefore, automation has been a must, so I have gained experience with PowerNSX, the PowerCLI NSX-T Module and REST API calls. Recently, I was working on getting a new NSX-T environment configured exactly the same as an existing one. When I was working on setting up Services, I decided to look for a way to take advantage of the configuration that was already in place on one of the data centers and replicate it on the new one. That is how I ended up writing this script. - -###### [][3][_The Beauty of Progress Bar in PowerShell 7.2 Preview 3_][4] {.wp-block-heading} - -by Schillman on 2nd March - -Old progress bar below, it’s not customisable, quite big and all that green colour & text is always rewritten to the pipeline for every time the progress bar updates, that’s a lot of writing.The New progress bar is minimal, just as the configuration implies. You have the possibilities to change the For/Back-ground colour along with some font changes. - -###### [][5][_How to Set up PSRemoting with WinRM and SSL [Step by Step]_][6] {.wp-block-heading} - -by Tyler Muir on 3rd March - -If you’re already running remote commands with PowerShell Remoting_ _(PSRemoting), you know how convenient the feature is. You’re able to connect to one or more remote computers and manage them like they were local. PSRemoting depends on Windows Remote Management (WinRm) to make it happen, and if you’re not using WinRM over SSL, you might be opening yourself up to some security issues. - -###### [][7][_Graph theory with PowerShell_][8] {.wp-block-heading} - -by Dirk Bremen on 3rd March - -In this post I’m going to explore a bit of graph theory based on chapter 2 of the excellent book “Think Complexity 2e” by Allen B. Downey, with a twist of using PowerShell to do it. - -###### [][9][_Azure AD Authentication Methods Summary Reports using Microsoft Graph and PowerShell_][10] {.wp-block-heading} - -by Darren Robinson on 4th March - -Ever needed to know how to extract Azure AD Authentication Methods Summary Reports using Microsoft Graph and PowerShell; well today is your lucky day! Find out how in this interesting article about using the Microsoft Graph API with PowerShell - -###### [][11][_Tweet of the Week_][12] {.wp-block-heading} - -SecretManagement and SecretStore RC2 is out! - -###### [][13][_Youtube: 45. Secure (HTTPS) DSC Pull Server with SQL Database using a Group Managed Service Account (gMSA)_][14] {.wp-block-heading} - -You have seen on the interwebs many blog posts and videos about setting up a Secure DSC pull server with SQL authentication with a local SQL service account. What I have not seen is a tutorial for how to setup a secure DSC Pull Server with a SQL Database using a Group Managed Service Account (gMSA). - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210305-functiondraft.md#replicating-vmware-nsx-t-services-with-rest-api-and-powershell - [2]: https://fercorrales.com/replicating-vmware-nsx-t-services-with-rest-api-and-powershell/?utm_source=rss&utm_medium=rss&utm_campaign=replicating-vmware-nsx-t-services-with-rest-api-and-powershell - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210305-functiondraft.md#the-beauty-of-progress-bar-in-powershell-72-preview-3 - [4]: https://it-overload.com/2021/03/02/the-beauty-of-progress-bar-in-powershell-7-2-preview-3/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210305-functiondraft.md#how-to-set-up-psremoting-with-winrm-and-ssl-step-by-step - [6]: https://adamtheautomator.com/winrm-ssl/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210305-functiondraft.md#graph-theory-with-powershell - [8]: https://powershellone.wordpress.com/2021/03/03/graph-theory-with-powershell/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210305-functiondraft.md#azure-ad-authentication-methods-summary-reports-using-microsoft-graph-and-powershell - [10]: https://blog.darrenjrobinson.com/azure-ad-authentication-methods-summary-reports-using-microsoft-graph-and-powershell/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210305-functiondraft.md#tweet-of-the-week - [12]: https://twitter.com/steve_msft/status/1367189897153421314?s=12 - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210305-functiondraft.md#youtube-45-secure-https-dsc-pull-server-with-sql-database-using-a-group-managed-service-account-gmsa - [14]: https://www.youtube.com/watch?v=d2IXnrqY48Q diff --git a/content/articles/2021-03-11-call-for-authors-and-editors.md b/content/articles/2021-03-11-call-for-authors-and-editors.md deleted file mode 100644 index 6ad5771ad..000000000 --- a/content/articles/2021-03-11-call-for-authors-and-editors.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Call for Authors and Editors -authors: - - James Petty -date: "2021-03-11T14:50:50+00:00" -categories: - - Announcements - - DevOps -tags: - - Community - - Call for Authors -aliases: - - /2021/03/call-for-authors-and-editors/ ---- - -"I'm pleased to announce the Call for Editors and Call for Authors for the "Modern IT Automation with PowerShell" book. - -This project is a new initiative to develop a textbook resource to connect the PowerShell community with Students and IT Professionals alike. While the previous projects (PowerShell Conference Book) rely on people to submit their own material, this project will depend on set course material to archive this book's goal. Authors / Editors will be required to select which chapters you would be interested in writing/editing. Topics Include security, git, Regex, DevOps, and more! Contributors will have their names included in the book! - -Call for Authors - [https://forms.gle/mSKg567AAaUF7CLD8](https://forms.gle/mSKg567AAaUF7CLD8) - -Call for Editors - [https://forms.gle/G49dQmy8JC1vPc7a9](https://forms.gle/G49dQmy8JC1vPc7a9)" diff --git a/content/articles/2021-03-12-icymi-powershell-week-of-12-march-2021.md b/content/articles/2021-03-12-icymi-powershell-week-of-12-march-2021.md deleted file mode 100644 index 53b901de7..000000000 --- a/content/articles/2021-03-12-icymi-powershell-week-of-12-march-2021.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 12-March-2021" -authors: - - Robin Dadswell -date: "2021-03-12T15:00:00+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/03/icymi-powershell-week-of-12-march-2021/ ---- - -Topics include logging, converting PowerShell scripts to executables, PSJobs with VMWare and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [][1][_Documenting with PowerShell: Documenting admin actions_][2] {.wp-block-heading} - -by Kelvin Tegelaar on 8th March - -Have a look at Kelvin's method to monitor the Admin Audit Log within M365! - -###### [][3][_How to create Logging for your PowerShell Scripts_][4] {.wp-block-heading} - -by Patrick Gruenauer on 8th March - -Patrick will show us how to implement a custom function that captures the errors and writes errors in an error log file. - -###### [][5][_Parallel Execution with PSJobs and PowerCLI: Deploying New VMs_][6] {.wp-block-heading} - -by Fer Corrales on 9th March - -Fer Corrales walks us through how to execute commands simultaneously using PSJobs module and deploy multiple virtual machines - -###### [][7][_The De Facto Guide for Converting a PS1 to EXE (7 Ways)_][8] {.wp-block-heading} - -by Arman Castillote on 9th March - -In this tutorial, you will learn how to use PS1 to EXE generators, and you will also get to compare them so you can decide which one best suits your preference. - -###### [][9][_How to Use PowerShell to Get Free Disk Space [Tutorial]_][10] {.wp-block-heading} - -by Adam Bertram on 10th March - -If you’re using PowerShell to get free disk space on a Windows computer, you’ve come to the right place. In this tutorial, you will learn how to use PowerShell to get free disk space and monitor disk usage. - -###### [][11][_Tweet of the Week_][12] {.wp-block-heading} - -#PowerShell 7.0.6 and 7.1.3 are out! - -###### [][13][_Youtube: Build an event viewer component for Universal Dashboard_][14] {.wp-block-heading} - -Adam Driscoll shows How to build an event viewer component for Universal Dashboard. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210312-functiondraft.md#documenting-with-powershell-documenting-admin-actions - [2]: https://www.cyberdrain.com/documenting-with-powershell-documenting-admin-actions/?utm_source=rss&utm_medium=rss&utm_campaign=documenting-with-powershell-documenting-admin-actions - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210312-functiondraft.md#how-to-create-logging-for-your-powershell-scripts - [4]: https://sid-500.com/2021/03/08/powershell-how-to-create-logging-for-your-powershell-scripts/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210312-functiondraft.md#parallel-execution-with-psjobs-and-powercli-deploying-new-vms - [6]: https://fercorrales.com/parallel-execution-with-psjobs-and-powercli-deploying-new-vms/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210312-functiondraft.md#the-de-facto-guide-for-converting-a-ps1-to-exe-7-ways - [8]: https://adamtheautomator.com/ps1-to-exe/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210312-functiondraft.md#how-to-use-powershell-to-get-free-disk-space-tutorial - [10]: https://adamtheautomator.com/powershell-get-disk-space/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210312-functiondraft.md#tweet-of-the-week - [12]: https://twitter.com/Steve_MSFT/status/1370156693976272899 - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210312-functiondraft.md#youtube-build-an-event-viewer-component-for-universal-dashboard - [14]: https://www.youtube.com/watch?v=haub8JX-2Ag diff --git a/content/articles/2021-03-15-last-call-for-summit-lightning-demos.md b/content/articles/2021-03-15-last-call-for-summit-lightning-demos.md deleted file mode 100644 index a2339ccba..000000000 --- a/content/articles/2021-03-15-last-call-for-summit-lightning-demos.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Last Call for Summit Lightning Demos -authors: - - James Petty -date: "2021-03-15T17:36:34+00:00" -categories: - - Announcements - - Events - - PowerShell Summit -tags: - - PowerShell Summit - - Lightning Demos -aliases: - - /2021/03/last-call-for-summit-lightning-demos/ ---- - -**The CFP for Lightning demos will be closing 15 march at 11:59 Pacific Daylight Time** - - -This year, the PowerShell + DevOps Summit will be a virtual event. Submissions to present a Lightning Demo are still open? The PowerShell community is looking for you! You Can Do It! - -Lightning Demos are rapid-fire demonstrations of some sort of PowerShell use-case. They are geared towards speakers that aren’t prepared to give a full-length conference presentation but that have something they want to geek out about. Some details that were provided for the 2019 Summit can be found here. - -If you have a demonstration or two that you’d like to give that fits this description, please fill out the form here. Most demonstrations fall into the 7 to 10-minute range in length, but it’s fine if it’s a bit shorter. - -Note that these will be prerecorded demonstrations. You will not be presenting live; the organizers will be reaching out to schedule time to meet with selected individuals and record these demonstrations. They will ultimately be edited together into a final video, the exact format of which is to be determined. - -Some dates to keep in mind: - -March 15th, 2021 – final date to fill out the [submission form][1] -March 31st, 2021 – all demos must be scheduled and recorded -April 27th – April 29th, 2021 – PowerShell + DevOps Summit 2021 -Matt Bobke ([@mattbobke][2]) and Phil Bossman ([@Schlauge][3]) will be working together to organize the Lightning Demo portion of the event. Both Matt and Phil are very active PowerShell community members and leaders of PowerShell User Groups. Matt leads the SoCal PowerShell group. Phil leads the Research Triangle PowerShell User Group. - -Matt’s Testimonial - -I also want to share my thoughts about the Summit itself. The PowerShell + DevOps Summit is the only tech conference that I have ever personally attended; I attended in 2019 as an OnRamp-track scholarship recipient. I have never been surrounded by so many smart, passionate and kind people in my life. I learned so much, not just about PowerShell but about how to take charge of my career. Many speakers that we have hosted for our group, SoCal PowerShell, in the past will be speaking at the Summit. I highly encourage you to consider attending virtually and supporting the organization and the featured speakers. It is unfortunate that it will not be a physical conference this year, but I’m sure the content and the discussions will be just as great. - -Thank you, and we look forward to receiving your submissions! If you have any questions, please do not hesitate to reach out. - - [1]: https://forms.office.com/Pages/ResponsePage.aspx?id=11EApwjKOUO63m1xCi_2FuDegRwcZUJGp8jj-CjdL3xUNTlJV040TUFUUkoyQlZLUkY2SUE4NUNIVi4u - [2]: https://twitter.com/mattbobke - [3]: https://twitter.com/Schlauge diff --git a/content/articles/2021-03-19-icymi-powershell-week-of-19-march-2021.md b/content/articles/2021-03-19-icymi-powershell-week-of-19-march-2021.md deleted file mode 100644 index 2e52c5200..000000000 --- a/content/articles/2021-03-19-icymi-powershell-week-of-19-march-2021.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 19-March-2021" -authors: - - Robin Dadswell -date: "2021-03-19T14:00:00+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/03/icymi-powershell-week-of-19-march-2021/ ---- - -Topics include DSC, Active Directory, Compare-Object and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [][1][_Simple Simple Microsoft Crescendo Example Part II_][2] {.wp-block-heading} - -by Tommy Maynard on 15th March - -The Microsoft.PowerShell.Crescendo module is mostly brand new. It’s still early on in its development. It’s currently at version 0.4.1.. Tomyy gives you an idea of his first experience working with the module. - -###### [][3][_PowerShell Execution Policies: Understanding and Managing_][4] {.wp-block-heading} - -by Chaitanya on 16th March - -In this post, you’re going to learn about PowerShell execution policies and how to manage them with the Set-ExecutionPolicy cmdlet. By the end of this post, you’ll know not only to run scripts but how to use execution policies too! - -###### [][5][_Extending PowerShell’s Compare-Object to handle custom classes and arrays_][6] {.wp-block-heading} - -by Dirk Bremen on 16th March - -In this post, Dirk will walk you through the process of extending the built-in Compare-Object cmdlet to support “deep” comparison of custom objects, arrays, and classes. - -###### [][7][_Advanced HTML reporting using PowerShell_][8] {.wp-block-heading} - -by Przemysław Kłys on 16th March - -Have a look at Przemysław Klys's Advanced HTML reporting using PowerShell - -###### [][9][_Better Active Directory Reporting with PowerShell_][10] {.wp-block-heading} - -by Jeff Hicks on 18th March - -Jeff shares his ADReportingScripts tools, built from a collection of scripts to deal with common AD tasks and frustrations. - -###### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} - -Redditor discovers the "Copy as PowerShell" feature, also available in Chrome. - -###### [][13][_Tweet of the Week_][14] {.wp-block-heading} - -#PowerShell 7.2-preview.4 is out! - -###### [][15][_Youtube: Testing DSC Pull Server and apply localhost.mof to a client node that disables Windows Firewall_][16] {.wp-block-heading} - -As a follow on from last week, In this video we will use this same infrastructure to configure the Windows Firewall on a client node. I will use the FirewallProfile resource from the NetworkingDSC Module on the PowerShell Gallery to accomplish the task. The video has all the step-by-step instructions, and you can download the code used at my website linked below. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210319-functiondraft.md#simple-simple-microsoft-crescendo-example-part-ii - [2]: https://tommymaynard.com/simple-simple-microsoft-crescendo-example-part-ii/l - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210319-functiondraft.md#powershell-execution-policies-understanding-and-managing - [4]: https://adamtheautomator.com/set-executionpolicy-2/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210319-functiondraft.md#extending-powershells-compare-object-to-handle-custom-classes-and-arrays - [6]: https://powershellone.wordpress.com/2021/03/16/extending-powershells-compare-object-to-handle-custom-classes-and-arrays/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210319-functiondraft.md#advanced-html-reporting-using-powershell - [8]: https://evotec.xyz/advanced-html-reporting-using-powershell/#utm_source=rss&utm_medium=rss&utm_campaign=advanced-html-reporting-using-powershell - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210319-functiondraft.md#better-active-directory-reporting-with-powershell - [10]: https://jdhitsolutions.com/blog/active-directory/8228/better-active-directory-reporting-with-powershell/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210319-functiondraft.md#reddit-rpowershell---most-popular-weekly-post - [12]: https://www.reddit.com/r/PowerShell/comments/m4k7bh/just_found_out_you_can_copy_as_powershell_a_web/ - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210319-functiondraft.md#tweet-of-the-week - [14]: https://twitter.com/Steve_MSFT/status/1371969606290599936 - [15]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210319-functiondraft.md#youtube-testing-dsc-pull-server-and-apply-localhostmof-to-a-client-node-that-disables-windows-firewall - [16]: https://www.youtube.com/watch?v=gp8zraXL2f4 diff --git a/content/articles/2021-03-26-icymi-powershell-week-of-26-march-2021.md b/content/articles/2021-03-26-icymi-powershell-week-of-26-march-2021.md deleted file mode 100644 index 2d5b5f467..000000000 --- a/content/articles/2021-03-26-icymi-powershell-week-of-26-march-2021.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 26-March-2021" -authors: - - Robin Dadswell -date: "2021-03-26T14:00:00+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/03/icymi-powershell-week-of-26-march-2021/ ---- - -Topics include PoshGUI, Foreach-Parallel, Azure CLI and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [][1][_Solving Another PowerShell Math Challenge_][2] {.wp-block-heading} - -by Jeff Hicks on 22nd March - -Solving Another #PowerShell Math Challenge from the Iron Scripter Chairman - -###### [][3][_Installing the RSAT (Remote Server Administration Tools for Windows 10) tools using PowerShell_][4] {.wp-block-heading} - -by Luke Murray on 24th March - -Installing the RSAT (Remote Server Administration Tools for Windows 10) tools using PowerShell. This is just a quick article, written purely as an easy reference. - -###### [][5][_How to Install the Azure CLI (Windows, Linux, macOS, Azure Shell)_][6] {.wp-block-heading} - -by Nick Rimmer on 24th March - -Nick shows us how to install Azure CLI across multiple platforms. - -###### [][7][_How to chain multiple PowerShell commands on one line_][8] {.wp-block-heading} - -by Thomas Maurer on 25th March - -In this blog post, we will look at how you can chain and run multiple PowerShell commands on one line using pipelines and chaining commands. - -###### [][9][_Reddit /r/PowerShell - Most Popular Weekly Post_][10] {.wp-block-heading} - -PoshGUI has switched to a subscription model with a lifetime access tier. The comments are filled with mixed reactions and suggestions for alternatives as well. - -###### [][11][_Tweet of the Week_][12] {.wp-block-heading} - -SecretManagement and SecretStore are officially GA! - -###### [][13][_Youtube: ForEach-Parallel_][14] {.wp-block-heading} - -When PowerShellv7 came out, it came with a foreach -parallel parameter. Now I finally get to learn how to use this new parameter and take you along for the ride. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210326-functiondraft.md#solving-another-powershell-math-challenge - [2]: https://jdhitsolutions.com/blog/powershell/8236/solving-another-powershell-math-challenge/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210326-functiondraft.md#installing-the-rsat-remote-server-administration-tools-for-windows-10-tools-using-powershell - [4]: https://luke.geek.nz/installing-the-rsat-remote-server-administration-tools-for-windows-10-tools-using-powershell - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210326-functiondraft.md#how-to-install-the-azure-cli-windows-linux-macos-azure-shell - [6]: https://adamtheautomator.com/install-azure-cli/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210326-functiondraft.md#how-to-chain-multiple-powershell-commands-on-one-line - [8]: https://www.thomasmaurer.ch/2021/03/how-to-chain-multiple-powershell-commands-on-one-line/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210326-functiondraft.md#reddit-rpowershell---most-popular-weekly-post - [10]: https://www.reddit.com/r/PowerShell/comments/mbvlt6/poshgui_is_no_longer_free/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210326-functiondraft.md#tweet-of-the-week - [12]: https://twitter.com/sydneysmithreal/status/1375151909988802560 - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210326-functiondraft.md#youtube-foreach-parallel - [14]: https://www.youtube.com/watch?v=h7_271o9RuI diff --git a/content/articles/2021-04-02-icymi-powershell-week-of-02-april-2021.md b/content/articles/2021-04-02-icymi-powershell-week-of-02-april-2021.md deleted file mode 100644 index 220897034..000000000 --- a/content/articles/2021-04-02-icymi-powershell-week-of-02-april-2021.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 02-April-2021" -authors: - - Robin Dadswell -date: "2021-04-02T15:06:22+00:00" -categories: - - In Case You Missed It - - PowerShell for Admins - - PowerShell for Developers - - Tips and Tricks -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/04/icymi-powershell-week-of-02-april-2021/ ---- - -Topics include help sections, Approved Verbs, Identity Management and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [][1][_PowerShell Scripts: Help yourself and others._][2] {.wp-block-heading} - -by Michaël Militoni on 28th March - -Learn how to write a help section in your scripts to help yourself and others. - -###### [][3][_Active Directory Reporting Tools Released_][4] {.wp-block-heading} - -by Jeff Hicks on 29th March - -Jeff shares the release of his AD Reporting Tools Module. - -###### [][5][_Using the new Granfeldt FIM/MIM PowerShell Management Features_][6] {.wp-block-heading} - -by Darren Robinson on 1st April - -This post looks at the latest release and using the new Granfeldt FIM/MIM PowerShell Management Features. - -###### [][7][_PowerShell Approved Verb Synonyms_][8] {.wp-block-heading} - -by Tommy Maynard on 2nd April - -Learn about Tommy's approved verb synonym function, to help you find the right verb for your situation. - -###### [][9][_Reddit /r/PowerShell - Most Popular Weekly Post_][10] {.wp-block-heading} - -u/krzydoug shares his script for getting an accurate last log on time in a multi DC domain. - -###### [][11][_Youtube: PSCommander - Command your desktop with PowerShell_][12] {.wp-block-heading} - -Adam shows you how to install and use PSCommander to manage and control aspects of your desktop. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210402-functiondraft.md#powershell-scripts-help-yourself-and-others - [2]: https://v-itpassion.be/2021/03/28/powershell-scripts-help-yourself-and-others/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210402-functiondraft.md#active-directory-reporting-tools-released - [4]: https://jdhitsolutions.com/blog/powershell/8259/active-directory-reporting-tools-released/#utm_source=feed&utm_medium=feed&utm_campaign=feed - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210402-functiondraft.md#using-the-new-granfeldt-fimmim-powershell-management-features - [6]: https://blog.darrenjrobinson.com/using-the-new-granfeldt-fim-mim-powershell-management-features/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210402-functiondraft.md#powershell-approved-verb-synonyms - [8]: https://tommymaynard.com/powershell-approved-verb-synonyms/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210402-functiondraft.md#reddit-rpowershell---most-popular-weekly-post - [10]: https://www.reddit.com/r/PowerShell/comments/mfvgwn/getlastlogon_get_accurate_last_logon_time_for_user/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210402-functiondraft.md#youtube-pscommander---command-your-desktop-with-powershell - [12]: https://www.youtube.com/watch?v=Pzjr88j8yL4 diff --git a/content/articles/2021-04-09-icymi-powershell-week-of-09-april-2021.md b/content/articles/2021-04-09-icymi-powershell-week-of-09-april-2021.md deleted file mode 100644 index 34571731d..000000000 --- a/content/articles/2021-04-09-icymi-powershell-week-of-09-april-2021.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 09-April-2021" -authors: - - Robin Dadswell -date: "2021-04-09T14:00:00+00:00" -categories: - - In Case You Missed It - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/04/icymi-powershell-week-of-09-april-2021/ ---- - -Topics include PowerShell profiles, Parameter defaults, ARM and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [][1][_Optimizing your $Profile_][2] {.wp-block-heading} - -by Steve Lee on 6th April - -Great blog by Steve on optimizing your PowerShell $Profile - -###### [][3][_How to Find Listening Ports with Netstat and PowerShell_][4] {.wp-block-heading} - -by Anthony Metcalf on 7th April - -In this tutorial, you will learn how to inspect listening ports and established TCP connections on your Windows computer with Netstat and the native PowerShell command Get-NetTCPConnection. - -###### [][5][_Make Defaults a Way of Life_][6] {.wp-block-heading} - -by Jeff Hicks on 8th April - -A small tip from Jeff on the ease that comes with an automatic variable $PSDefaultParameterValues. - -###### [][7][_Visualize and Document Azure Infrastructure with PowerShell_][8] {.wp-block-heading} - -by Prateek Singh on 8th April - -Prateek will walk us through on how we can visualize and document Azure infrastructure using PowerShell - -###### [][9][_Getting Started with PSArm_][10] {.wp-block-heading} - -by Ravikanth Chaganti on 5th April - -In the first part of this series, you learned about PSArm — a PowerShell embedded DSL — that you can use to declaratively define your Azure infrastructure and generate an ARM template. - -###### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} - -[u/][13][tbakerweb][14] creates a PowerShell script that checks Walgreens and CVS for COVID vaccine appointments. - -###### [][15][_Tweet of the Week_][16] {.wp-block-heading} - -Level up your #PowerShell debugging by seeing values of variables right inline in your @code editor! - -###### [][17][_Youtube: Transforming PowerShell experience with PSReadLine_][18] {.wp-block-heading} - -In this video John introduces PSReadLine as a way to transform your day-to-day PowerShell experience! - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210409-functiondraft.md#optimizing-your-profile - [2]: https://devblogs.microsoft.com/powershell/optimizing-your-profile/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210409-functiondraft.md#how-to-find-listening-ports-with-netstat-and-powershell - [4]: https://adamtheautomator.com/netstat-port-2/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210409-functiondraft.md#make-defaults-a-way-of-life - [6]: https://jdhitsolutions.com/blog/powershell/8293/make-defaults-a-way-of-life/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210409-functiondraft.md#visualize-and-document-azure-infrastructure-with-powershell - [8]: https://ridicurious.com/2021/04/08/visualize-and-document-azure-infrastructure-with-powershell/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210409-functiondraft.md#getting-started-with-psarm - [10]: https://www.powershellmagazine.com/2021/04/05/getting-started-with-psarm/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210409-functiondraft.md#reddit-rpowershell---most-popular-weekly-post - [12]: https://www.reddit.com/r/PowerShell/comments/mm6q86/covid19_vaccine_appointment_availability_checker/ - [13]: https://www.reddit.com/user/tbakerweb/%7Cu/tbakerweb%3E - [14]: https://www.reddit.com/user/tbakerweb/ - [15]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210409-functiondraft.md#tweet-of-the-week - [16]: https://twitter.com/TylerLeonhardt/status/1380382095445389315 - [17]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210409-functiondraft.md#youtube-transforming-powershell-experience-with-psreadline - [18]: https://www.youtube.com/watch?v=Q11sSltuTE0 diff --git a/content/articles/2021-04-17-icymi-powershell-week-of-16-april-2021.md b/content/articles/2021-04-17-icymi-powershell-week-of-16-april-2021.md deleted file mode 100644 index 7f922160e..000000000 --- a/content/articles/2021-04-17-icymi-powershell-week-of-16-april-2021.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 16-April-2021" -authors: - - Robin Dadswell -date: "2021-04-17T09:21:24+00:00" -categories: - - In Case You Missed It - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/04/icymi-powershell-week-of-16-april-2021/ ---- - -Topics include Azure Functions, Default Parameters, AWS, Text to Speech and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [][1][_Getting Started with Azure Functions Tutorial [Example-Driven Guide]_][2] {.wp-block-heading} - -by Jeff Brown on 12th April - -Learn how to create an Azure Function that runs PowerShell code. - -###### [][3][_Text-To-Speech in PowerShell_][4] {.wp-block-heading} - -by Tommy Maynard on 12th April - -Using System.Speech to make a function that reads text. - -###### [][5][_More About PowerShell PSDefaultParameterValues_][6] {.wp-block-heading} - -by Jeff Hicks on 12th April - -Due to the positive feedback Jeff has a follow up to his PSDefaultParameterValues post from last week. - -###### [][7][_Automating with PowerShell: Deploying Unifi DHCP Options_][8] {.wp-block-heading} - -by Kelvin Tegelarr on 12th April - -Kelvin shares a quick post to help setup DHCP on Unifi. - -###### [][9][_AWS S3 server-side encryption_][10] {.wp-block-heading} - -by Alex Neihaus on 13th April - -Alex Neihaus shares his experience setting up AWS s3 standards for a client, and the script he created to help. - -###### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} - -u/4604Spartan117 is just getting started with PowerShell and shares his first script. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210416-functiondraft.md#getting-started-with-azure-functions-tutorial-example-driven-guide - [2]: https://adamtheautomator.com/azure-functions-tutorial/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210416-functiondraft.md#text-to-speech-in-powershell - [4]: https://tommymaynard.com/text-to-speech-in-powershell/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210416-functiondraft.md#more-about-powershell-psdefaultparametervalues - [6]: https://jdhitsolutions.com/blog/powershell/8307/more-about-powershell-psdefaultparametervalues/#utm_source=feed&utm_medium=feed&utm_campaign=feed - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210416-functiondraft.md#automating-with-powershell-deploying-unifi-dhcp-options - [8]: https://www.cyberdrain.com/automating-with-powershell-deploying-unifi-dhcp-options/?utm_source=rss&utm_medium=rss&utm_campaign=automating-with-powershell-deploying-unifi-dhcp-options - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210416-functiondraft.md#aws-s3-server-side-encryption - [10]: https://www.yobyot.com/aws/encrypted-aws-s3-buckets-server-side-encryption/2021/04/13/ - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210416-functiondraft.md#reddit-rpowershell---most-popular-weekly-post - [12]: https://www.reddit.com/r/PowerShell/comments/mofz3l/i_made_my_first_windows_powershell_script/ diff --git a/content/articles/2021-04-23-icymi-powershell-week-of-23-april-2021.md b/content/articles/2021-04-23-icymi-powershell-week-of-23-april-2021.md deleted file mode 100644 index dab4b9c3f..000000000 --- a/content/articles/2021-04-23-icymi-powershell-week-of-23-april-2021.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 23-April-2021" -authors: - - Robin Dadswell -date: "2021-04-23T19:57:14+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/04/icymi-powershell-week-of-23-april-2021/ ---- - -Topics include Script signing, Item Insights Security via Graph, Microsoft Learn and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [][1][_Unlocking PowerShell Secrets_][2] {.wp-block-heading} - -by Jeff Hicks on 19th April - -Using Secrets Management modules from Microsoft to handle secrets - -###### [][3][_How to Sign a PowerShell Script (And Run It)_][4] {.wp-block-heading} - -by June Castillote on 22nd April - -Do you need to ensure that nobody makes modifications to your scripts and pass them as the original? If so, then you need to learn how to sign PowerShell scripts. Signing adds the publisher’s identity to the script so that users can decide whether to trust the script’s source in this article, learn how to ensure that only trusted scripts are run in your environment by learning how to sign PowerShell scripts. - -###### [][5][_Using 1Password with PowerShell_][6] {.wp-block-heading} - -by Darren J Robinson on 23rd April - -Darren shows a PowerShell Module which is a wrapper for the 1Password CLI that allows full use of 1Password with PowerShell. - -###### [][7][_Altering Item Insights Security In Microsoft Graph Using PowerShell Commands_][8] {.wp-block-heading} - -by Dipen Shah on 23rd April - -Dipen Shah writes in the bloh on altering Item Insights Security In Microsoft Graph Using PowerShell Commands - -###### [][9][_Getting started and Learn PowerShell on Microsoft Learn!_][10] {.wp-block-heading} - -by Thomas Maurer on 23rd April - -Wanting to get started with PowerShell, well find out how with this informative post on the new Microsoft Learn modules to help you with exactly that - -###### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} - -Be nice to tech workers and watch what you put into someone else's script as input. - -###### [][13][_Youtube: PowerShell File cannot be loaded because running scripts is disabled on this system_][14] {.wp-block-heading} - -If PowerShell throws up an error message – File cannot be loaded because running scripts is disabled on this system, then you need to enable script running on your Windows 10 computer. The cause of this error comes to the fact that your user account does not have enough permissions to execute that script. This does not mean that you need to have an Administrator level permissions, it also means that you also need to be unrestricted to run these type of PowerShell scripts or cmdlets. - - [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210423-functiondraft.md#unlocking-powershell-secrets - [2]: https://jdhitsolutions.com/blog/powershell/8334/unlocking-powershell-secrets/ - [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210423-functiondraft.md#how-to-sign-a-powershell-script-and-run-it - [4]: https://adamtheautomator.com/how-to-sign-powershell-script/ - [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210423-functiondraft.md#using-1password-with-powershell - [6]: https://blog.darrenjrobinson.com/using-1password-with-powershell/ - [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210423-functiondraft.md#altering-item-insights-security-in-microsoft-graph-using-powershell-commands - [8]: https://www.c-sharpcorner.com/article/altering-item-insights-security-in-microsoft-graph/ - [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210423-functiondraft.md#getting-started-and-learn-powershell-on-microsoft-learn - [10]: https://techcommunity.microsoft.com/t5/itops-talk-blog/getting-started-and-learn-powershell-on-microsoft-learn/ba-p/2282347 - [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210423-functiondraft.md#reddit-rpowershell---most-popular-weekly-post - [12]: https://www.reddit.com/r/PowerShell/comments/mvl4kp/your_stupid_powershell_script_is_broken/ - [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210423-functiondraft.md#youtube-powershell-file-cannot-be-loaded-because-running-scripts-is-disabled-on-this-system - [14]: https://www.youtube.com/watch?v=XMyvU6chht0 diff --git a/content/articles/2021-04-26-live-shows-powershell-devops-global-summit.md b/content/articles/2021-04-26-live-shows-powershell-devops-global-summit.md deleted file mode 100644 index d0916898e..000000000 --- a/content/articles/2021-04-26-live-shows-powershell-devops-global-summit.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Live Shows – PowerShell + DevOps Global Summit -authors: - - James Petty -date: "2021-04-26T19:11:09+00:00" -categories: - - Announcements -tags: - - PowerShell Summit - - Community -aliases: - - /2021/04/live-shows-powershell-devops-global-summit/ ---- - -#### We will be producing live shows twice a day during Summit. The first show will be at 6:20 AM PDTand the second show will be at 3:00 PM PDT. The links will be available in the theater tab of the event. Make sure to add them to your agenda as well! - -Did we mention there will be giveaways during each of these live shows? - -## April 27 -  6:20 AM PDT / 9:20 AM EDT - -Join the DevOps collective as we kick off the start of the PowerShell summit. We'll then discuss the Iron Scripter challenge built for PowerShell Summit.  **Our guests will be Missy Janusko, Warren Frame, James Petty, and Jeff Hicks**. - -Session Hosts: Mike Kanakos and Steven Judd - - -## April 27 -  3:00 PM PDT / 6:00 PM EDT - -Join us for a recap of the day's sessions and get a visit from **Jason Helmick and Jeffrey Snover**! Jason and Jeffrey will **talk about the state of PowerShell and automation in general**. - -Session Hosts: Mike Kanakos and Steven Judd - - -* * * - - -## April 28 -  6:20 AM PDT / 9:20 AM EDT - -Join us as we discuss the day's schedule and welcome two well know community members: **Ashley McGlone and Chrissy LeMaire** **to talk about community** and presenting at Summit. We'll wrap up with a visit from **Matt Bobke and Phil Bossman to talk about the lightning demo sessions** that are available on-demand for all summit attendees. - -Session Hosts: Mike Kanakos and Steven Judd - - -## April 28 -  3:00 PM PDT / 6:00 PM EDT - -Join us for a recap of the day's sessions and get a visit from the PowerShell team! **Joey Aiello, Steve Lee, and Sydney Smith will stop by to talk about the Microsoft sessions at this year's summit and what's going on in the world of PowerShell**. - -Session Hosts: Mike Kanakos and Steven Judd - - -* * * - -## April 29 -  6:20 AM PDT / 9:20 AM EDT - -Join us as we discuss the day's schedule and welcome **Michael Bender and Fernando Tomlinson to the live show to discuss career, certifications, and being a continual learner in IT.** We then follow that up with a visit from **Brandon Olin and Andrew Pla to discuss what is the Automation Summit** that is happening in November. - -Session Hosts: Mike Kanakos and Steven Judd - - -## April 29 -  3:00 PM PDT / 6:00 PM EDT - -It's time to say goodbye to another year of the PowerShell summit. **We'll recap the event and welcome Damien Caro and Danny Maertens from Microsoft to talk about PowerShell and Azure!** A that it will, unfortunately, be time to say goodbye. But as one great event ends, it's time to think about the next great event: Automation Summit, occurring in November! James Petty will help us say goodbye and also give some early details about Automation Summit. - -Session Hosts: Mike Kanakos and Steven Judd diff --git a/content/articles/2021-04-30-icymi-powershell-week-of-30-april-2021.md b/content/articles/2021-04-30-icymi-powershell-week-of-30-april-2021.md deleted file mode 100644 index 4d9fb1f69..000000000 --- a/content/articles/2021-04-30-icymi-powershell-week-of-30-april-2021.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 30-April-2021" -authors: - - Robin Dadswell -date: "2021-04-30T14:00:51+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/04/icymi-powershell-week-of-30-april-2021/ ---- - -Topics include SendAs, Intune, Hyper-V, Secrets Management and more... - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - - - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210430-functiondraft.md#automating-with-powershell-deploying-send-as-alias-for-m365)[*Automating with PowerShell: Deploying Send as Alias for M365*](https://www.cyberdrain.com/automating-with-powershell-deploying-send-as-alias-for-m365/?utm_source=rss&utm_medium=rss&utm_campaign=automating-with-powershell-deploying-send-as-alias-for-m365) - -by Kelvin Tegelaar on 29th April - -How to Deploy Send as Alias for M365 using PowerShell - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210430-functiondraft.md#use-powershell-and-ms-graph-to-locate-an-intune-device)[*Use PowerShell and MS Graph to locate an Intune device*](https://www.systanddeploy.com/2021/04/use-powershell-and-ms-graph-to-locate.html) - -by Damien Van Robaeys on 29th April - -In this post Damien shows you how to use PowerShell and MS Graph to locate an Intune device. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210430-functiondraft.md#azure-visualizer-powershell-module-v112-released)[*Azure Visualizer PowerShell module v1.1.2 released!*](https://ridicurious.com/2021/04/29/azure-visualizer-powershell-module-v1-1-2-released/) - -by Prateek Sing on 30th April - -Azure Visualizer aka 'AzViz' - PowerShell module to automatically generate Azure resource topology diagrams by just typing a PowerShell cmdlet and passing the name of one or more Azure Resource Group(s). - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210430-functiondraft.md#how-to-set-up-hyper-v-nested-virtualization-step-by-step)[*How to Set Up Hyper-V Nested Virtualization [Step-by-Step]*](https://adamtheautomator.com/nested-virtualization/) - -by June Castillote on 30th April - -Do you need to set up a lab that needs multiple hosts? Or test an application in an isolated environment? Hyper-V nested virtualization could be the right setup you need. Hyper-V is a built-in feature or role to Windows you only need to enable to start using. And it’s free! You will learn how to set up Hyper-V to enable nested virtualization using PowerShell in the post. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210430-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/n0qmc1/i_created_a_powershell_script_for_our_hr/) - -u/ZebulaJams created a script for his HR Dept and sharing with us. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210430-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/PSHSummit/status/1387896980718956548) - -PowerShell + DevOps Global summit 2022 Announcement! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210430-functiondraft.md#youtube-new-powershell-secrets-management-module---easily-use-any-secret-provider)[*Youtube: New PowerShell Secrets Management Module - Easily use any secret provider*](https://www.youtube.com/watch?v=7b0KGVI4VLY) - -In this video John explores a solution to the problem of handling secrets in scripts and having to use secret implementation specific code. The new Secrets Management module solves this. diff --git a/content/articles/2021-05-05-automation-summit.md b/content/articles/2021-05-05-automation-summit.md deleted file mode 100644 index 28bc757f9..000000000 --- a/content/articles/2021-05-05-automation-summit.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Meet the Automation Summit team -authors: - - James Petty -date: "2021-05-05T07:00:33+00:00" -categories: - - Announcements - - DevOps - - Events -tags: - - Automation Summit -legacy_featured_image: /wp-content/uploads/2021/05/FullLogoWithDatedefault.png -aliases: - - /2021/05/meet-the-automation-summit-team/ ---- - -We would like to introduce you to the core team for the Automation + DevOps Summit which will be held November 1-3 at the Renaissance Hotel in downtown Nashville TN. - -More information will be posted as it becomes available. - -## The Team - -- **Brad Wyatt** — Communications / Website — [Twitter](https://twitter.com/thelazyadministrator) -- **Andrew Pla** — Content — [Twitter](https://twitter.com/AndrewPlaTech) -- **Brandon Olin** — Content — [Twitter](https://twitter.com/devblackops) -- **Bonnie Runimas** — Logistics — [Twitter](https://twitter.com/socavalier) -- **James Petty** — CEO, The DevOps Collective Inc. — [Twitter](https://twitter.com/psjamesp) - -We are always looking for dedicated volunteers to help make our events run as smoothly as possible. If you are interested in joining the team, [reach out to us](https://powershell.org/contact/) and we will get in touch with you. diff --git a/content/articles/2021-05-21-icymi-powershell-week-of-21-may-2021.md b/content/articles/2021-05-21-icymi-powershell-week-of-21-may-2021.md deleted file mode 100644 index ef189b03a..000000000 --- a/content/articles/2021-05-21-icymi-powershell-week-of-21-may-2021.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 21-May-2021" -authors: - - Robin Dadswell -date: "2021-05-21T20:33:47+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/05/icymi-powershell-week-of-21-may-2021/ ---- - -Topics include Pester, AD, Chrome and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210521-functiondraft.md#pester-5-and-group-object---best-friends)[*Pester 5 and Group-Object - Best Friends*](https://nocolumnname.blog/2021/05/17/pester-5-and-group-object-best-friends/) - -by Shane O'Neill on 17th May - -Let's talk about testing and the differences with Pester 5 - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210521-functiondraft.md#custom-csv-import-with-powershell)[*Custom CSV Import with PowerShell*](https://jdhitsolutions.com/blog/powershell/8409/custom-csv-import-with-powershell/#utm_source=feed&utm_medium=feed&utm_campaign=feed) - -by Jeff Hicks on 18th May - -Want to do more with the native Import-Csv command. Want to keep the original functionality, but want it to do more. Here’s how! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210521-functiondraft.md#how-to-manage-active-directory-sites-with-powershell)[*How to Manage Active Directory Sites with PowerShell*](https://adamtheautomator.com/active-directory-site/) - -by Anthony Metcalf on 18th May - -In this tutorial, you will learn how to manage AD sites using PowerShell, so you never have to open a Windows MMC ever again! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210521-functiondraft.md#automating-with-powershell-unifi-powershell-module-and-creating-network-maps)[*Automating with PowerShell: Unifi PowerShell module and creating network maps*](https://www.cyberdrain.com/automating-with-powershell-unifi-powershell-module-and-creating-network-maps/?utm_source=rss&utm_medium=rss&utm_campaign=automating-with-powershell-unifi-powershell-module-and-creating-network-maps) - -by Kelvin Tegelaar on 18th May - -Learn a little bit about PowerShell maps and how to use them with Unifi netowrking - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210521-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/theJasonHelmick/status/1395456852306001921) - -PlatyPS is back. Announcing PlatyPS 2.0.0-Preview1 - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210521-functiondraft.md#youtube-chrome-automation-using-powershell)[*Youtube: Chrome automation using PowerShell*](https://www.youtube.com/watch?v=ZZjp6zIgkLU) - -This video is on chrome automation with PowerShell. The video explains everything step by step and also discusses how to identify a web element. diff --git a/content/articles/2021-05-28-icymi-powershell-week-of-28-may-2021.md b/content/articles/2021-05-28-icymi-powershell-week-of-28-may-2021.md deleted file mode 100644 index fc9cbfd0f..000000000 --- a/content/articles/2021-05-28-icymi-powershell-week-of-28-may-2021.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 28-May-2021" -authors: - - Robin Dadswell -date: "2021-05-28T18:20:18+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/05/icymi-powershell-week-of-28-may-2021/ ---- - -Topics include PowerBI SQL, Exchange online and more - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210528-functiondraft.md#hiding-taskbar-search-with-powershell)[*Hiding TaskBar Search with PowerShell*](https://jdhitsolutions.com/blog/powershell/8424/hiding-taskbar-search-with-powershell/) - -by Jeff Hicks on 21st May - -Here are some PowerShell functions that will hide and unhide the Search box in a Windows 10 desktop. Yes, there are manual steps to hide this feature, but I’m automating here! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210528-functiondraft.md#monitoring-with-powershell-monitoring-oauth-application-changes)[*Monitoring with PowerShell: Monitoring oAuth application changes*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-oauth-application-changes/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-oauth-application-changes) - -by Kelvin Tegelaar on 25th May - -Sometimes you approve an application that wants too many permissions or sometimes there’s an admin that is not 100% sure on what they are doing. This blog helps you cover those, or cover situations in which you cannot disable app consent by normal users. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210528-functiondraft.md#how-to-create-an-azure-sql-database-with-powershell)[*How to Create an Azure SQL Database with PowerShell*](https://adamtheautomator.com/create-azure-sql-database/) - -by Gijs Reijn on 25th May - -If you need to make changes to a SQL database, you could open SQL Server Management Studio, click around a little bit and make it happen. But what happens when you need to create an Azure SQL database 10 or 100 times or in some automation script? You need to use PowerShell! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210528-functiondraft.md#most-useful-powershell-cmdlets-to-manage-exchange-online-mailboxes)[*Most Useful PowerShell Cmdlets to Manage Exchange Online Mailboxes*](https://o365reports.com/2021/05/25/most-useful-powershell-cmdlets-to-manage-exchange-online-mailboxes/) - -by Unknown on 25th May - -This blog lists the top 15 use-cases to monitor your Exchange Online environment in a better way. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210528-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/njdt6n/i_like_making_dumb_little_games_in_powershell_my/) - -Redditor shares his script for hangman in PowerShell - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210528-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1397971127750828038%3E) - -#PowerShell 7.2-preview.6 is out! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210528-functiondraft.md#youtube-refresh-power-bi-dataset-using-rest-api--powershell)[*Youtube: Refresh Power BI Dataset Using Rest API & PowerShell*](https://www.youtube.com/watch?v=XtVzBNwQYFk) - -Amazing cool tricks to refresh Power BI Deataset using Rest API & Power Shell diff --git a/content/articles/2021-06-04-icymi-powershell-week-of-04-june-2021.md b/content/articles/2021-06-04-icymi-powershell-week-of-04-june-2021.md deleted file mode 100644 index 834000225..000000000 --- a/content/articles/2021-06-04-icymi-powershell-week-of-04-june-2021.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 04-June-2021" -authors: - - Robin Dadswell -date: "2021-06-04T20:21:02+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/06/icymi-powershell-week-of-04-june-2021/ ---- - -Topics include AD, Azure AD,  Debugging and more... - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210604-functiondraft.md#how-to-reset-an-active-directory-password-with-powershell)[*How to Reset an Active Directory Password with PowerShell*](https://adamtheautomator.com/set-adaccountpassword/) - -by Chaitanya on 31st May - -The GUI is not always an efficient tool, especially when resetting multiple user passwords. Luckily, you have an alternative, which is the Set-ADAccountPassword PowerShell cmdlet. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210604-functiondraft.md#subscribing-to-azure-ad-change-notifications-with-powershell)[*Subscribing to Azure AD Change Notifications with PowerShell*](https://blog.darrenjrobinson.com/subscribing-to-azure-ad-change-notifications-with-powershell/) - -by Darren Robinson on 1st June - -This post details an example solution to get started with Azure AD Change Notifications. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210604-functiondraft.md#powershell-move-item-examples-for-file-folder-management)[*PowerShell Move-Item examples for file, folder management*](https://searchwindowsserver.techtarget.com/tutorial/PowerShell-Move-Item-examples-for-file-folder-management) - -by Anthony Howell on 2nd June - -Anthony highlights several ways with examples to use Move-Item to keep your folders and files organized. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210604-functiondraft.md#automate-and-manage-azure-ad-tasks-at-scale-with-the-microsoft-graph-powershell-sdk)[*Automate and manage Azure AD tasks at scale with the Microsoft Graph PowerShell SDK*](https://techcommunity.microsoft.com/t5/azure-active-directory-identity/automate-and-manage-azure-ad-tasks-at-scale-with-the-microsoft/ba-p/1942489) - -by Alex Simons on 2nd June - -Alex announces Azure AD APIs added to Microsoft graph. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210604-functiondraft.md#how-to-set-up-an-azure-file-share-with-on-prem-ad-authentication)[*How to Set Up an Azure File Share with On-Prem AD Authentication*](https://adamtheautomator.com/how-to-set-up-an-azure-file-share-with-on-prem-ad-authentication/) - -by Ryan Kowalewski on 2nd June - -In this tutorial, you’ll learn how to set up an Azure file share backed by a storage account that can authenticate user access to the share based on on-prem AD user accounts. You’ll do all this using PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210604-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/noy1t6/this_is_a_collection_of_useful_scripts_from/) - -User put together a GitHub repository of many useful scripts they have found. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210604-functiondraft.md#youtube-debug-powershell-with-and-without-vs-code)[*Youtube: Debug PowerShell with and without VS Code*](https://youtu.be/2cpU82i6YPU) - -In this video John will walk through how to debug PowerShell code using VS Code native features and the native PowerShell debugger. diff --git a/content/articles/2021-06-11-icymi-powershell-week-of-11-june-2021.md b/content/articles/2021-06-11-icymi-powershell-week-of-11-june-2021.md deleted file mode 100644 index aa890c61a..000000000 --- a/content/articles/2021-06-11-icymi-powershell-week-of-11-june-2021.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 11-June-2021" -authors: - - Robin Dadswell -date: "2021-06-11T16:34:02+00:00" -categories: - - In Case You Missed It - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/06/icymi-powershell-week-of-11-june-2021/ ---- - -Topics include BluebirdPS, Scripting Challenge, Wifi and WMI - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210611-functiondraft.md#your-goto-guide-for-working-with-windows-wmi-events-and-powershell)[*Your Goto Guide for Working with Windows WMI Events and PowerShell*](https://adamtheautomator.com/your-goto-guide-for-working-with-windows-wmi-events-and-powershell/) - -by Faris Malaeb on 7th June - -Did you know you can monitor for just about every action in Windows? No, you don’t need to buy some fancy software. The infrastructure monitors events like when services start and stop when someone creates a file or folder and more is already there via Windows Management Instrumentation (WMI) events. Find out more about working with WMI and PowerShell in this blog - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210611-functiondraft.md#how-to-show-all-known-wi-fi-network-ssids-and-passphrases-with-powershell)[*How to show all known Wi-Fi network SSIDs and Passphrases with Powershell*](https://www.scriptinglibrary.com/languages/powershell/how-to-show-all-known-wi-fi-network-ssids-and-passphrases-with-powershell/) - -by Paolo Frigo on 8th June - -Format netsh output in a more friendly manner with PowerShell - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210611-functiondraft.md#psfollowfriday-tweet-with-bluebirdps)[*#PSFollowFriday Tweet with BluebirdPS*](https://powershell.anovelidea.org/powershell/psfollowfriday-tweet-with-bluebirdps/) - -by Dave Carroll on 9th June - -Learn how to use BluebirdPS to generate and publish a #PSFollowFriday Tweet. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210611-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/thedavecarroll/status/1401209874231566336) - -#BlueBirdPS release news - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210611-functiondraft.md#youtube-powershell-scripting-challenges-jeff-hicks)[*Youtube: PowerShell Scripting Challenges (Jeff Hicks)*](https://www.youtube.com/watch?v=SmW2TFS--mU) - -Think you’re good with code? Join us for a fun night of scripting challenges that range from simple to challenging! Our guest speaker for the evening is the author and creator of the “Month of Lunches” series of PowerShell learning books, Jeff Hicks! diff --git a/content/articles/2021-06-18-icymi-powershell-week-of-18-june-2021.md b/content/articles/2021-06-18-icymi-powershell-week-of-18-june-2021.md deleted file mode 100644 index 18f782ce0..000000000 --- a/content/articles/2021-06-18-icymi-powershell-week-of-18-june-2021.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 18-June-2021" -authors: - - Robin Dadswell -date: "2021-06-18T15:15:42+00:00" -categories: - - In Case You Missed It - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/06/icymi-powershell-week-of-18-june-2021/ ---- - -Topics include Password Auditing, PowerShell 7.2, WiFi Password Recovery and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210618-functiondraft.md#how-to-show-all-known-wi-fi-network-ssids-and-passphrases-with-powershell)[*How to show all known Wi-Fi network SSIDs and Passphrases with Powershell*](https://www.scriptinglibrary.com/languages/powershell/how-to-show-all-known-wi-fi-network-ssids-and-passphrases-with-powershell/) - -by Paolo Frigo on 8th June - -Paolo simply needed the list of all the known wi-fi networks presented in a key-value pair format, so he wrote this script a few months ago and took the opportunity to write an article about it. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210618-functiondraft.md#audit-your-active-directory-user-passwords-against-haveibeenpwnedcom)[*Audit your Active Directory user passwords against haveibeenpwned.com*](https://doitpsway.com/audit-your-active-directory-user-passwords-against-haveibeenpwnedcom-safely-using-powershell) - -by Ondrej Sebela on 13th June - -In this article, Andrew will show you, how to easily and securely check, whether some of your users are using leaked passwords with PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210618-functiondraft.md#monitoring-with-powershell-predict-when-disk-is-full)[*Monitoring with PowerShell: Predict when disk is full*](https://www.cyberdrain.com/monitoring-with-powershell-predict-when-disk-is-full/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-predict-when-disk-is-full) - -by Kelvin Tegelaar on 15th June - -Learn how to start doing predictive monitoring with PowerShell in this article - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210618-functiondraft.md#how-to-work-with-rest-apis-and-powershells-invoke-restmethod)[*How to Work with REST APIs and PowerShell’s Invoke-RestMethod*](https://adamtheautomator.com/invoke-restmethod/?utm_source=powershellorg&utm_medium=icymi) - -by Ryan Kowalewskik on 18th June - -Do you often access application programming interfaces (APIs) using PowerShell? Maybe you want to but don’t know where to start? Whether you’re a PowerShell pro or just starting, this tutorial has you covered with a built-in PowerShell cmdlet that interacts with APIs called Invoke-RestMethod. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210618-functiondraft.md#preview-updating-powershell-72-with-microsoft-update)[*Preview updating PowerShell 7.2 with Microsoft Update*](https://devblogs.microsoft.com/powershell/preview-updating-powershell-7-2-with-microsoft-update/%3E) - -by Travis Plunk on 18th June - -Update PowerShell using Microsoft updates coming soon - find out more about it here - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210618-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/o1d9z5/ipconfig_all_posh_version/) - -u/richie65 shares his module for a PowerShell version of ipconfig. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210618-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/JustinWGrote/status/1405772902243332109?s=20) - -A look at Justin's @code native Pester test adapter - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210618-functiondraft.md#youtube-i-need-coffee-episode-56---get-bc-version-from-docker-container-using-powershell)[*Youtube: I Need Coffee: Episode 56 - Get BC Version from Docker Container using PowerShell*](https://www.youtube.com/watch?v=ejud9xuG6o0) - -Get BC Version from Docker Container using PowerShell diff --git a/content/articles/2021-07-02-icymi-powershell-week-of-02-july-2021.md b/content/articles/2021-07-02-icymi-powershell-week-of-02-july-2021.md deleted file mode 100644 index 7ff1175c7..000000000 --- a/content/articles/2021-07-02-icymi-powershell-week-of-02-july-2021.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 02-July-2021" -authors: - - Robin Dadswell -date: "2021-07-02T18:06:05+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/07/icymi-powershell-week-of-02-july-2021/ ---- - -Topics include Monitoring Azure, Filtering objects, Generating SQL reports and more... - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210702-functiondraft.md#from-sql-to-excel-with-powershell)[*From SQL to Excel with PowerShell*](https://sqladm.in/posts/from-sql-to-excel-with-powershell/) - -by Jeff Hill on 30th June - -Learn to pull data from SQL and generate reports for your manager using PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210702-functiondraft.md#error-0x800700c1-when-launching-cprogram-filespowershell7pwshexe)[*[error 0x800700c1 when launching `C:\Program Files\PowerShell\7\pwsh.exe’]*](https://blog.darrenjrobinson.com/error-0x800700c1-when-launching-cprogram-filespowershell7pwsh-exe/) - -by Darren Robinson on 30th June - -How to fix an issue after updating Windows Teminal. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210702-functiondraft.md#monitoring-with-powershell-monitoring-azure-app-proxies)[*Monitoring with PowerShell: Monitoring Azure App Proxies*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-azure-app-proxies/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-azure-app-proxies) - -by Kelvin Tegelaar on 1st July - -Following up on a previous Azure App Proxy post, learn how to monitor your Azure App for up/down status. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210702-functiondraft.md#filtering-for-unique-objects-in-powershell)[*Filtering for Unique Objects in PowerShell*](https://jdhitsolutions.com/blog/powershell/8465/filtering-powershell-unique-objects/#utm_source=feed&utm_medium=feed&utm_campaign=feed) - -by Jeff Hicks on 1st July - -There is more to filtering unique objects than you would think. In Jeff's blog post he dives into finding unique objects in multiple ways. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210702-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ob3fxw/just_passed_250000_views_of_lesson_1_of_the/) - -John Savill posted a thanks to the community for the support of his master class on YouTube. videos. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210702-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/cl/status/1410501417077456900) - -Chirssy got some PowerShell code auto created via Github AutoPilot! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210702-functiondraft.md#youtube-workflows-tutorial-execute-on-premise-powershell-with-okta-workflows)[*Youtube: Workflows Tutorial: Execute On-Premise PowerShell with Okta Workflows*](https://youtu.be/cbcNCzARDxI) - -Learn to execute PowerShell code with Okta Workflows. diff --git a/content/articles/2021-07-08-so-you-want-to-start-a-user-group.md b/content/articles/2021-07-08-so-you-want-to-start-a-user-group.md deleted file mode 100644 index fe742c865..000000000 --- a/content/articles/2021-07-08-so-you-want-to-start-a-user-group.md +++ /dev/null @@ -1,210 +0,0 @@ ---- -title: So you want to start a User Group -authors: - - Ryan Yates -date: "2021-07-08T15:57:09+00:00" -categories: - - PowerShell for Admins - - Tips and Tricks -tags: - - User Groups - - Community -aliases: - - /2021/07/so-you-want-to-start-a-user-group/ ---- - -> FYI - this was originally posted here around 2016, then a content migration happened where it was seemingly lost. I recreated this and published it to my own [blog][0] - -#### But where do you begin? - -I’ve blogged about this from the reversed perspective on my own blog about finding user groups with a small section about what you can do if your thinking about getting one off the ground which you can read at [http://blog.kilasuit.org/2016/04/17/how-to-find-local-user-groups-events-my-experience/][1] and it was only natural to eventually blog from the other side too although this has come up a bit earlier than I had planned to but alas it gets it done ![Smile](http://web.archive.org/web/20200811154303im_/https://cdn-powershell.pressidium.com/wp-content/uploads/2016/05/wlEmoticon-smile.png) - -As the Coordinator for the UK PowerShell User Groups I learned a few things the hard way with setting up a user group and here are just a few things that you will need to get sorted first which will hopefully help you on your way. - - * Venue - * Speaker/s - * A way to Publicise the User Group - * A method to get details of attendees including the number of them - * Drive and Determination - -Let's look at these in more detail and make a start with Venue. - -### The Venue - -This is in my opinion the single most important thing to get started with first as without a venue you will be unable to have a user group meeting unless you decide to go down the Virtual meeting route which is certainly the simplest way to get a user group setup and means that you can get speakers and users easier. This is certainly the cheapest option although it has the downside that you don’t really get the networking side of the meetings. - -If you want to go down the virtual meeting route then you will need a way to host the meetings which could include the following - - * Skype – the free consumer version - * Teams – Free edition –  - * Cisco WebEx - * GoToMeeting - * OBS & Streaming to Twitch/Youtube (as we do with [PowerScripting Podcast][2]) - -Personally, I would be going down the Teams route here for virtual events, as this is often the easiest way for the presenter to join and present and doesn’t need lots of additional setup, unlike OBS. - -You should also look at Gael Colas ( [T][3] | [B][4] ) who posted a 7 part series on his blog about streaming in-person events –  - -However if like myself you enjoy the networking side of things at a user group then what does the ideal venue look like to me. - -There are a few avenues that I would try and go down first of all before looking for a venue elsewhere and these would include - - * Checking with your employer if they had a venue space that could be used at all - * Checking with other people that you know locally to see if their employers have an event space available. - * Checking with local libraries, schools, colleges & universities - * Reach out to other local user groups to see if the venue they use could also be available for you to use as well. - * Reach out to any local Microsoft contacts that you may have. - * Reach out to other PowerShell User Group Organisers worldwide – there are a number of us and we can help out with any questions you may have - * Reach out to local MVPs as well. - * Reach out to other local but well-known community members - * Reach out to any companies that make tools around the products – so SAPIEN for PowerShell & Red Gate for SQL Server as examples - * Are there any companies that you know locally that may host your user group? - * Are there any big national/international companies in the area that could host your user group? - -When you’ve gone down these paths and still need to find somewhere then there are a few things that I look out for in a venue which includes - - * Location – is it easy to get to and is there parking nearby especially for those traveling from out of town. - * Do they already host other user groups? (See the linked post at the top to check this) If yes then they are friendly to User Groups – this is a big bonus and makes your time dealing with them much easier. - * Cost – I’ve been quoted over £500 for the hire of a venue for an evening before any catering costs for the evening. - -If you're still struggling for a venue that has a technical background then ask at your local Pubs & hotels what their function room hire costs are – some of them can be quite cheap and pubs especially are good as they will sometimes do reduced rates on food and drinks for the User Groups – so win-win  – Note this is what we do for the Yorkshire PowerShell User Group as do many other UK User Groups. - -### Speakers - -This can then be the next most difficult thing to get sorted when your getting the group off the ground so I’ll be honest here and tell you it straight. Be very prepared to be the only speaker. This is of course if in talking to the people in line with trying to get a venue you were unable to get any of them to commit to being a speaker as well, especially MVP’s and other local companies. - -If that is the case then I would be very suggestive of doing an “Introduction to x” type session. Ones that I would suggest include - - * Pester - * DSC - * Building GUI’s for PowerShell Scripts - * General PowerShell 101 - * Tips and Tricks with PowerShell - -These are all PowerShell specific but you can also use introductory talks about any topic at any type of user group – I personally find these go down really well with attendees of all skill sets and these tend to be relatively easy to pull together a session on in a short amount of time. - -These topics are still highly requested by attendees especially if you can do a hands-on session and/or can get any locally known community members or MVP’s to present. - -Over time you will start to get attendees that will want to present as well so be open to giving them the opportunity to do so in whichever form suits them to do so, whether it be a lightning talk of 5-15 minutes or a 45minute session or an hour session or a 2-hour session. One thing you want to make sure is that you ask for this at each event as you’ll find some people will come back to you after the event with an idea for a session. - -Also, have a look at for potential speakers as this is a community-driven initiative to help share potential speakers with organizers & if you are a speaker please look to get yourself listed on this site. - -### Publicizing the User Group - -Next, we will cover the ways to publicize the User Group. - -The places that you will want to do so are - - * PowerShell.org Calendar and Blog Posts - * PowerShellgroups.org – I’m still trying to get the UK Groups published on there so if you know who runs that site please let me know! (This is unfortunately no longer active) - * Twitter – set up a Twitter Account for the User Group - * Facebook – in the PowerShell Group and also in your own timeline - * LinkedIn – In the PowerShell Groups there and also by publishing it in your feeds and in the new LinkedIn posts too - * Your own blog - * The PowerShell Slack team – if your not already on slack then sign up at slack.poshcode.org - * Reddit - * Email using a distribution list or service like MailChimp (integrates well with Eventbrite) - * Eventbrite (because its free to use) - * Meetup although I’m not a fan of the cost structure for it but it is a good place for visibility. Please see my notes at the bottom of this section. - * Group Website – doesn’t have to be fancy and GitHub pages are a good free way to get this sorted as well. - * Buy the Domain Name for your User Group - * Create Excel Surveys / Forms / SurveyMonkey’s for Speaker Submissions, Topic Requests, Session Feedback etc and use subdomains for easy links - * Tell MVP’s as its the best form of free advertising you will ever get ![Winking smile](http://web.archive.org/web/20200811154303im_/https://cdn-powershell.pressidium.com/wp-content/uploads/2016/05/wlEmoticon-winkingsmile.png) - * Attend other User Groups and tell people there about it - * Cold call/mass marketing to local/national/international companies and let them know about it – LinkedIn is a great source for doing things like this and you can do this via existing connections or just search for people in your local area and message them about it. - -**_Notes_**_ –_ There’s a lot of discussions about which platform out of EventBrite and Meetup provides the best value and feature set. - -I was of the opinion that Eventbrite was the better of the 2 options for getting off the ground, however, meetup has a more polished feel to it with features like shared groups, group search, discussion forums, etc and also Organisations. - -Organizations in Meetup allow for Collectives like the UK PowerShell Collective that have many groups across the UK to centrally manage them and also have a single place to view all meetup groups as per of which there is a cost to this but if you are organizing many events in towns and cities that may be a better option for you. Another good example of using this functionality is the .NET Foundation –  - -Meetup overall is a more social platform and therefore I would recommend using that one if you can justify the costs behind it. - -### Attendee Details and Numbers - -So this is really a rehash of a little bit of the above however I’m going to give some pros and cons to both Meetup and Eventbrite so that you can decide which one you want to go with. - -#### Eventbrite - -Pros - - * Free if you don’t charge for the event - * Easy to use - * PowerShell Module to automate it is partially built (because I built it, please feel free to help extend it at  ) - * Social plugins to see if anyone your friends with on Facebook is going - * An easy method to share about the event - * Can have a subdomain for your group like get-psuguk.eventbrite.co.uk - * Can send out invitations to previous attendees when you make an event live - * Mail Chimp can be integrated very easily as well - * Can get Name badges etc from it very easily if required - * Can add in questions and different ticket types – useful if you want to have organizers / attendees / sponsors tickets - * Can also ask questions on the ticket types – may help you plan for the audience of the event. - * Has mobile Apps - -Cons - - * Not as widely used as Meetup for user groups now - * It's more pushed for larger events where there are tickets being sold as there are a number of marketing options built into it. - * Perhaps too clunky as it tries to do too much - -#### Meetup - -Pros - - * Much more social experience – Good to see you feature - * Can see if other friends are group members - * Can see other similar groups as well from the members that are part of the group - * Sponsor Section which is quite cool - * Share Stats, files run polls have discussions - * Has mobile apps - * Also, has a PowerShell module is built to help automate Meetups see - * Meetups can be integrated into the Community Connect Site I mentioned earlier on over at  - -Cons - - * It isn’t free to use - * Again has perhaps too much it's trying to accomplish so can feel clunky - -#### Attending.io - -This is one that is used by a group I try and attend called DigiCurry and it is just easy and simple – so perhaps start off with that at [https://attending.io/][5] - -Pros - - * Signups integrate with Facebook, Twitter, LinkedIn - * Simple - * Easy - * Quick - -Cons - - * Perhaps too simple - * Not really great for bigger meetups - * Not well known - -### Drive and Determination - -Going down the road of running a user group can be a lot more work than most realize so before you go down this road please be mindful to plan for the group to scale out depending on where you are located. The UK User Groups are growing at a rate where we are having to look at other possible venues to the ones that we have been using but as we are also a National User Group we also have to plan for new venues in new towns and cities around the UK. - -Also, be prepared to have to write a presentation in an afternoon or have a few presentations prepared to pull out of the bag in case of speakers drop out – which can happen last minute. - -If that doesn’t scare you and you want to plow ahead and do it (which you really really do) then I hope that this post has been useful to you - -I would recommend as a final piece of advice I would look to decide on a schedule for the group for a full year and stick to it – you can plan what topics/speakers you have as the time comes closer but get a schedule put together. - -Lastly, I would like to point you to another blog post on this by one of the other PowerShell User Group leads Thom Schumacher – [https://powershellposse.com/starting-a-powershell-users-group-tips-and-tricks/][6] -I hope that you’ve enjoyed reading and I will update this post as I learn more that can be helpful for you too and from what the community gives as suggestions - -Feel free to leave any comments on here or to [tweet me][7] and have a read of the other articles I’ve written on [here][8] or my own [blog][9] and good luck on the path you are taking to become one of the PowerShell UG Leads – perhaps I’ll get chance to come to speak at your user group in the future. - - [0]: https://blog.kilasuit.org/2023/08/19/so-you-want-to-start-a-user-group/ - [1]: https://blog.kilasuit.org/2016/04/17/how-to-find-local-user-groups-events-my-experience/ - [2]: https://www.youtube.com/channel/UC1xcgLFT2Q9UneeQCr_4WoQ - [3]: https://twitter.com/gaelcolas - [4]: https://gaelcolas.com/ - [5]: https://attending.io/ "https://attending.io/" - [6]: https://powershellposse.com/starting-a-powershell-users-group-tips-and-tricks/ "https://powershellposse.com/starting-a-powershell-users-group-tips-and-tricks/" - [7]: https://twitter.com/ryanyates1990 - [8]: http://blog.kilasuit.org/2016/03/09/updated-quick-win-install-powershell-package-management-on-systems-running-powershell-v3-v4/ - [9]: http://blog.kilasuit.org/ diff --git a/content/articles/2021-07-09-icymi-powershell-week-of-09-july-2021.md b/content/articles/2021-07-09-icymi-powershell-week-of-09-july-2021.md deleted file mode 100644 index 6fd9f48bd..000000000 --- a/content/articles/2021-07-09-icymi-powershell-week-of-09-july-2021.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 09-July-2021" -authors: - - Robin Dadswell -date: "2021-07-09T20:00:25+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/07/icymi-powershell-week-of-09-july-2021/ ---- - -Topics include Exchange Migrations, APIs, PrintNightmare and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210709-functiondraft.md#migrating-mailboxes-to-exchange-online-with-powershell--part-2)[*Migrating Mailboxes to Exchange Online with PowerShell – Part 2*](https://www.scriptrunner.com/en/blog/migrating-mailboxes-to-exchange-online-with-powershell-part-2?utm_content=172171349&utm_medium=social&utm_source=twitter&hss_channel=tw-2485091353) - -by Damian Scoles on 6th July - -In the first part of this series, Migrating Mailboxes to Exchange Online with PowerShell – Part 1, we covered how to prepare for a mailbox migration, which included a series of preflight checks for mailbox moves. Now we move on to the PowerShell code for moving mailboxes from Exchange Server to Exchange Online. We will walk through the various Move Request cmdlets and how we can use these to perform our main migration tasks. On to the code! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210709-functiondraft.md#add-credentials-to-powershell-functions)[*Add Credentials To PowerShell Functions*](https://duffney.io/addcredentialstopowershellfunctions/) - -by Josh Duffney on 6th July - -In this blog post, you'll learn how to add credential parameters to PowerShell functions. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210709-functiondraft.md#build-a-powershell-api-with-pode)[*Build a Powershell API with Pode*](https://scomnewbie.github.io/posts/apiwithpode/) - -by Francois LEON on 7th July - -cross platforms Powershell module to help you to create websites, schedulers API and more… - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210709-functiondraft.md#how-to-hide-teams-enabled-groups-from-exchange-online)[*How to Hide Teams-Enabled Groups from Exchange Online*](https://office365itpros.com/2021/07/08/how-hide-teams-enabled-groups-from-exchange-online/) - -by Tony Redmond on 8th July - -Microsoft 365 Groups created for new teams were hidden from Exchange clients (like OWA) and Exchange address lists (like the GAL). This was accomplished by setting the HiddenFromExchangeClientsEnabled and HiddenFromAddressListsEnabled properties of the groups to False using PowerShell. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210709-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/odrivg/new_vscode_extension_blockman_to_highlight_nested/) - -Redditor shares his extension called Blockman, check it out as it is a great way to help organize your code blocks. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210709-functiondraft.md#youtube-printnightmare-rce---temporary-fix-using-acls---new-cve-number---new-powershell-poc)[*Youtube: PrintNightmare RCE - Temporary Fix Using ACLs - New CVE Number - New Powershell PoC*](https://www.youtube.com/watch?v=OdfYXsxULo4) - -Andi Li shares some information on the Printer Nightmare Vulnerability along with a temporary fix using PowerShell. diff --git a/content/articles/2021-07-16-icymi-powershell-week-of-16-july-2021.md b/content/articles/2021-07-16-icymi-powershell-week-of-16-july-2021.md deleted file mode 100644 index 2aad92732..000000000 --- a/content/articles/2021-07-16-icymi-powershell-week-of-16-july-2021.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 16-July-2021" -authors: - - Robin Dadswell -date: "2021-07-16T16:55:28+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/07/icymi-powershell-week-of-16-july-2021/ ---- - -Topics include Azure Devops, Microsoft Defender, Azure and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210716-functiondraft.md#deploy-powershell-7x-on-windows-10-machine)[*Deploy PowerShell 7.x on Windows 10 machine*](https://v-itpassion.be/2021/07/12/deploy-powershell-7-x-on-windows-10-machine/) - -by 77Snake77 on 12th July - -PowerShell 7 has been out for a while, if you want to know more about installing it, take a look at this blog post which talks you through the process. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210716-functiondraft.md#adding-a-year-worth-of-sprints-in-azure-devops-with-powershell)[*Adding a year worth of sprints in Azure DevOps with PowerShell*](https://www.robstr.dev/adding-a-year-worth-of-sprints-in-azure-devops/) - -by Roberth Strand on 14th July - -If you are working with Azure DevOps to keep track of your projects, you probably have to deal with sprints. Depending on the length of your sprints, and the fact that you can bulk add sprints, you probably either end up creating the next sprint during sprint planning or create every sprint manually. This blog shows how to do the same using PowerShell - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210716-functiondraft.md#how-to-run-on-demand-av-scanning-on-a-file-with-ms-defender-using-powershell)[*How to run on-demand AV scanning on a file with MS Defender using Powershell*](https://www.scriptinglibrary.com/languages/powershell/how-to-run-on-demand-av-scanning-on-a-file-using-ms-defender-using-powershell/) - -by Paola Frigo on 15th July - -Running Windows defender and need to run an on demand scan - this blog shows you how and also how to view the log files - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210716-functiondraft.md#searching-for-powershell-with-cim)[*Searching for PowerShell with CIM*](https://jdhitsolutions.com/blog/powershell/8492/searching-for-powershell-with-cim/) - -by Jeff Hicks on 15th July - -Find installed PowerShell versions using CIM with the script in this blog from Jeff - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210716-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/okcu5w/windows_terminal_preview_110_release/) - -Link and discussion about what's new in windows terminal 1.10. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210716-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/StefanIvemo/status/1415780737320722435) - -Bicep #PowerShell Module, 2.0.0-Preview1 released! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210716-functiondraft.md#youtube-lets-learn-some-powershell)[*Youtube: Let's Learn Some PowerShell*](https://www.youtube.com/watch?v=aHyoER486WA) - -In this stream, I'll try to take you from not knowing PowerShell to being able to use it in the cloud (Azure). diff --git a/content/articles/2021-09-03-icymi-powershell-week-of-03-september-2021.md b/content/articles/2021-09-03-icymi-powershell-week-of-03-september-2021.md deleted file mode 100644 index 3effd6e84..000000000 --- a/content/articles/2021-09-03-icymi-powershell-week-of-03-september-2021.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 03-September-2021" -authors: - - Robin Dadswell -date: "2021-09-03T17:03:01+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/09/icymi-powershell-week-of-03-september-2021/ ---- - -Topics include O365, SQL, Code Formatting and more... - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210903-functiondraft.md#automating-with-powershell-setting-up-application-consent)[*Automating with PowerShell: Setting up application consent*](https://www.cyberdrain.com/automating-with-powershell-setting-up-application-consent/?utm_source=rss&utm_medium=rss&utm_campaign=automating-with-powershell-setting-up-application-consent) - -by Kelvin Tegelaar on 29th August - -In this post you will learn two things about 0365 application consent: how to setup the OAuth consent workflow and how to monitor for application requests. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210903-functiondraft.md#easy-way-to-connect-to-ftps-and-sftp-using-powershell)[*Easy way to connect to FTPS and SFTP using PowerShell*](https://evotec.xyz/easy-way-to-connect-to-ftps-and-sftp-using-powershell/#utm_source=rss&utm_medium=rss&utm_campaign=easy-way-to-connect-to-ftps-and-sftp-using-powershell) - -by Przemyslaw Klys on 29th August - -In this post learn how to use the Transferfto module and make ftp easier. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210903-functiondraft.md#stop-or-start-sql-server-with-powershell)[*Stop or Start SQL Server With PowerShell*](https://sqladm.in/posts/stop-start-sql-server-with-powershell/) - -by Jeff Hill on 31st August - -Stop and Start SQL with easy by following this blog post. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210903-functiondraft.md#understanding-when--when-not-to-create-powershell-new-lines)[*Understanding When & When Not to Create PowerShell New Lines*](https://adamtheautomator.com/powershell-new-line/) - -by Bill Kindle on 31st August - -Great post showing how and when to format your code with new lines. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210903-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/pgur5p/powershell_beginner_information/) - -Great curated list of beginner PowerShell content. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210903-functiondraft.md#youtube-azure-automation-tutorial---remote-powershell-execution-on-an-azure-virtual-machine)[*Youtube: Azure Automation Tutorial - Remote PowerShell Execution on an Azure virtual machine*](https://www.youtube.com/watch?v=sj_l19hL9W8) - -Learn to run remote code against an Azure VM with a managed identity in PowerShell diff --git a/content/articles/2021-09-20-automation-summit-going-virtual-and-new-date.md b/content/articles/2021-09-20-automation-summit-going-virtual-and-new-date.md deleted file mode 100644 index 15264333d..000000000 --- a/content/articles/2021-09-20-automation-summit-going-virtual-and-new-date.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Automation Summit Going Virtual and New Date -authors: - - James Petty -date: "2021-09-20T14:00:16+00:00" -categories: - - Announcements - - Events - - PowerShell Summit -tags: - - Automation Summit -legacy_featured_image: /wp-content/uploads/2021/05/AutoMation-Summit-No-Citydefault.png -aliases: - - /2021/09/automation-summit-going-virtual-and-new-date/ ---- - -## We are Going Virtual - -We want to let everyone know the Automation + DevOps Summit team has decided that it is in the best interest for everyone to move the event to a 100% virtual platform. We were planning on a hybrid event, but with the rising Covid19 cases across the US, and especially TN, we felt this was the best decision for everyone. - -## New Dates - -The content team has also decided to move the event back two weeks. The new dates are November 15-17. There are two reasons for this - - 1. Ignite was announced that it will take place November 2-4 (at the same time as our original event) - 2. We want to celebrate PowerShell's 15th birthday with all of our closest friends. - -### What does this mean for me? - -If you were offered a session at the Automation summit regardless if you accepted or declined we will be reaching out to you this week to verify if you are still willing and able to present your session. - -### I Purchased an In-Person Ticket Already - -To the the way our backend system works we cannot process a partial refund. We will issue a 100% refund for your ticket. Then you will need to purchase a virtual ticket. This should happen this week - -### I Purchased an Virtual Ticket Already - -You don't have to do anything. We will process refunds if you can no longer attend the new dates. - -## New Schedule and Lineup - -We will have an updated schedule and speaker lineup coming soon (we are hoping by the end of the week as speakers re confirm their speaking status). - -## Tickets are $300 - -[Register now](https://www.automationsummit.org) diff --git a/content/articles/2021-10-02-powershell-devops-global-summit-2022-update.md b/content/articles/2021-10-02-powershell-devops-global-summit-2022-update.md deleted file mode 100644 index e4caf3469..000000000 --- a/content/articles/2021-10-02-powershell-devops-global-summit-2022-update.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: PowerShell + DevOps Global Summit 2022 Update -authors: - - James Petty -date: "2021-10-02T15:45:17+00:00" -categories: - - PowerShell Summit -tags: - - PowerShell Summit -aliases: - - /2021/10/powershell-devops-global-summit-2022-update/ ---- - -## Join us April 25-28, 2022 in Bellevue WA - -We are pleased to announce the PowerShell + DevOps Global Summit April 25-29, 2022, at the Marriott in Bellevue, WA. - -That's right!! The Marriott will be the official hotel, and Summit will take place in the hotel conference center. - -Here are a few dates to keep in mind - -CFP Opens **November 15, 2021** - -CFP Closes **January 15, 2022** - -Selection and Notification **January 15-20, 2022** - -Final schedule released and Ticket Sales Start - **February 1, 2022** - -Watch our official Twitter page @PSHSummit for more the most up-to-date information. - -### What about Covid - -We are carefully watching the Covid situation, and we will do everything we can to make sure our volunteers, speakers, and attendees are safe. We are also communicating with Visit Bellevue and the Marriott to keep up to date with local and state precautions. - -The good news is that Ticket Sales do not start until February 1, 2022. diff --git a/content/articles/2021-10-08-icymi-powershell-week-of-08-october-2021.md b/content/articles/2021-10-08-icymi-powershell-week-of-08-october-2021.md deleted file mode 100644 index 0e052da88..000000000 --- a/content/articles/2021-10-08-icymi-powershell-week-of-08-october-2021.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 08-October-2021" -authors: - - Robin Dadswell -date: "2021-10-08T18:16:01+00:00" -categories: - - In Case You Missed It - - PowerShell for Admins - - PowerShell for Developers -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/10/icymi-powershell-week-of-08-october-2021/ ---- - -Topics include VMWare, Windows 11, Web Reports and more... - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211008-functiondraft.md#how-to-gather-your-vcenter-inventory-data-with-this-vmware-powershell-script)[*How to gather your vCenter inventory data with this VMware PowerShell script*](https://www.techrepublic.com/article/how-to-gather-your-vcenter-inventory-data-with-this-vmware-powershell-script/#ftag=RSS56d97e7/) - -by Scott Matteson on 7th October - -Inventory reports are a common request when administering a VMware vCenter environment. Learn how this VMware PowerShell script can make such requests quick and easy - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211008-functiondraft.md#building-a-web-report-in-powershell-use-the--force-luke)[*Building a Web Report in PowerShell, use the -Force Luke*](https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj) - -by Chris Noring on 8th October - -The idea of this article is to show how to build a web report. I will show the usage of several commands that you can connect that does all the heavy lifting for you - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211008-functiondraft.md#search-your-contacts-using-powershell)[*Search your Contacts using PowerShell*](https://www.slipstick.com/developer/search-contacts-powershell/) - -by Diane Poremsky on 8th October - -A user wanted to use PowerShell to search his contacts for a value in the custom field. While you don’t need to use PowerShell to search contacts, and can do a more complicated search within Outlook, you will need to use PowerShell or VBA if you want to search for a value in a custom field. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211008-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/q0cy65/as_sysadmin_i_use_many_powershell_scripts_on_the/) - -u/akshin1995 shares a tool he made in .Net 5 for running PowerShell and Batch scripts. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211008-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Jaap_Brasser/status/1445560964636557313) - -I missed my old context menu in #Windows11 today, so I did the sensible thing and created a #PowerShell Module to manage my various registry tweaks straight from the Windows Terminal! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211008-functiondraft.md#youtube-intune-tutorial-20--how-to-deploy-powershell-script-in-intune)[*Youtube: Intune Tutorial 20 -How to Deploy PowerShell Script in Intune*](https://www.youtube.com/watch?v=MO3ZTvrukyw) - -Learn How to deploy PowerShell script via Intune diff --git a/content/articles/2021-10-12-what-makes-a-great-submission-for-summit.md b/content/articles/2021-10-12-what-makes-a-great-submission-for-summit.md deleted file mode 100644 index caa72a856..000000000 --- a/content/articles/2021-10-12-what-makes-a-great-submission-for-summit.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: What makes a great submission for summit -authors: - - James Petty -date: "2021-10-12T14:26:25+00:00" -categories: - - PowerShell Summit -tags: - - PowerShell Summit - - Call for Speakers -legacy_featured_image: /wp-content/uploads/2021/10/SummitLong.png -aliases: - - /2021/10/what-makes-a-great-submission-for-summit/ ---- - -The Call for Proposals(CFP) for the PowerShell + DevOps Global Summit 2022 opens in a few weeks (1-November). - -We’ve heard a lot of questions – _What topics are you looking for?_ _I don’t know what to propose!_ and so on. Let’s cover some ways to find topics and hopefully spark some ideas! - -## Add some spice - -First things first: We’re not going to come up with your topic! [This bit][1] has some solid advice on mixing things up: - - -`* I saw a talk with X format and decided to apply it to Y subject. -     * While working on a project, I thought, “Wow! I wish I knew X, Y, and Z before I started!” -     * A conversation with coworkers about X led me to see the potential for a talk on it. -`The key here is that there are plenty of ways to add variety to a topic – these certainly aren’t comprehensive, just a few ideas. - -### Spice up Pester - -As an example, if we asked for _Pester _sessions, there are plenty of ways to come up with a unique Pester talk. - - * Can you use Pester for security things (compliance, CI/CD, vulnerability assessments, etc.)? - * Can you use Pester for data validation of some sort (e.g. AD, SQL)? - * Have you used Pester for Infrastructure testing? - * Might you use Pester for Monitoring? (even if this might not be the optimal way to monitor things) - -At the end of the day, PowerShell can be used across a variety of fields, and general-purpose tools like Pester can be used in each of those, in unique ways. - -### Other spices - -So! We used a few specific-ish variations of Pester as an example.  Take a step back and consider PowerShell itself: - - * How do you use PowerShell in different fields (keeping in mind that each field has its own set of sub-fields)? Bonus points if the concepts/ideas/code you include are applicable in a variety of fields. - * How do you use PowerShell outside of work, or for general productivity (side note: running this CFP would be a _paaaaain_ without PowerShell!). - * What lessons can we take from other fields, ecosystems, or projects? For example, while these may seem new-ish to some of us, we borrowed and applied to test, CI/CD, and other ideas that have long been integrated into the ecosystems of other languages. - -All this said, please don’t think you need something super unique and never-before-seen! - -## Tried and true - -Every day, new folks enter the field or start learning about PowerShell, automation, DevOps, etc. Yes, people have talked about testing and other topics in the past… but guess what? Chances are we’ll still accept some solid talks on important concepts. -So! What are some of these evergreen topics? - - * Release pipelines, including the individual components you might find: - * Source control - * Build systems and frameworks - * Pester and testing - * Deployment - * PowerShell modules or advanced functions - * How to write them - * Best practices - * How to distribute and maintain them - * etc. - * Using common tools/practices with PowerShell - * VSCode and extensions - * Windows Subsystem for Linux - * Debugging - * etc. - -There’s plenty more. You can probably think about other core topics that folks will always need to learn, re-learn, or catch up on new ideas for. - -## 2022 Specifics - -What are we topics are we looking for in 2022. Well as always we are looking for everything! We want to hear your story about how you used ______ in the real world. - -### Topics we’re looking for - -Keep in mind everything we’ve said so far. Don’t overthink it. Show us something _you_ are interested in or working on. A few sample topics include: - - * Monitoring - * Testing and Pester - * Azure - * AWS - * Regex - * PowerShell language (I.e formatting, crescendo, etc...) - -### Topics that will most likely have competition - -Every year, we have some topics that have a bit of competition. This year is no different. If you have something to share on these topics _don’t let this scare you off_, just know there will be a little competition. - - * Kubernetes - * Working with web APIs - * Contributing to open source - * Azure (granted, I _much_ prefer attendee talks to vendor happy-path talks, for what it’s worth) - -That’s about it! We have just over two weeks before the CFP opens and now is a good time to start writing them!  We’ll close with a few handy links: - - * [2019 CFP ideas][2] – still applicable, although many of DevOps tools considered _esoteric _might be worth a proposal - * [2020 CFP ideas][3] - * #Conferences in the [PowerShell Slack team][4] – plenty of folks willing to chat about or review your proposals in there.  You can also ping content@powershell.org, but the Slack route is faster and has more eyes on it - - [1]: https://www.freecodecamp.org/news/how-to-get-a-technical-talk-accepted-at-a-conference-or-event-8ba291d11c62/ - [2]: https://powershell.org/2018/08/the-summit-2019-call-for-topics-some-ideas/ - [3]: https://powershell.org/2019/09/be-a-speaker-at-powershell-and-devops-global-summit-2020/ - [4]: https://bit.ly/PSSlack diff --git a/content/articles/2021-10-22-icymi-powershell-week-of-22-october-2021.md b/content/articles/2021-10-22-icymi-powershell-week-of-22-october-2021.md deleted file mode 100644 index 1e099c0d4..000000000 --- a/content/articles/2021-10-22-icymi-powershell-week-of-22-october-2021.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: "ICYMI: PowerShell Week of 22-October-2021" -authors: - - Robin Dadswell -date: "2021-10-22T19:03:25+00:00" -categories: - - In Case You Missed It -tags: - - ICYMI - - Community - - Weekly Roundup -legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg -aliases: - - /2021/10/icymi-powershell-week-of-22-october-2021/ ---- - -Topics include Microsoft Graph, PowerShell remoting and more... - - - -Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211022-functiondraft.md#sending-email-from-exchange-online-using-the-microsoft-graph-sdk-for-powershell)[*Sending Email from Exchange Online Using the Microsoft Graph SDK for PowerShell*](https://practical365.com/send-mail-exchange-online-graph-powershell/) - -by Tony Redmond on 18th October - -how to send Email from Exchange Online Using the Microsoft Graph SDK for PowerShell - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211022-functiondraft.md#removing-obsolete-powershell-remoting-configurations)[*Removing Obsolete PowerShell Remoting Configurations*](https://jdhitsolutions.com/blog/powershell/8650/removing-obsolete-powershell-remoting-configurations/) - -by Jeffrey Hicks on 20th October - -Microsoft is scheduled to release PowerShell 7.2 soon, I thought it might be good to revisit this topic. Here’s the potential issue. If you’ve been installing PowerShell 7 releases for a while, and have been enabling PowerShell remoting, you most likely have a list of remoting session configurations like this. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211022-functiondraft.md#get-up-to-speed-with-powershell-and-the-microsoft-graph-api)[*Get up to speed with PowerShell and the Microsoft Graph API*](https://searchwindowsserver.techtarget.com/tutorial/Get-up-to-speed-with-PowerShell-and-the-Microsoft-Graph-API) - -by Liam Cleary on 21st October - -Microsoft plans to retire technologies that admins depend on to handle Office 365 and other cloud services via PowerShell. Learn how to start with this newer management method. - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211022-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1451301422784335874) - -#PowerShell 7.2-RC1 is out! - -###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211022-functiondraft.md#youtube-beginners-guide-azure-powershell)[*Youtube: Beginner's Guide: Azure PowerShell*](https://www.youtube.com/watch?v=EX8GrTsiUQ4) - -PowerShell has been a preferred method of automating different actions and processes with Windows Administrators. As a cross-platform command-line and scripting environment, it employs cmdlets and modules across the Microsoft ecosystem. In this video, Mark Mikula shows you how to get started with Azure PowerShell by installing, accessing, and managing your Azure resources. diff --git a/content/articles/2021-12-17-2022-it-onramp-scholarship-information-application.md b/content/articles/2021-12-17-2022-it-onramp-scholarship-information-application.md deleted file mode 100644 index 0f432bdf4..000000000 --- a/content/articles/2021-12-17-2022-it-onramp-scholarship-information-application.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: 2022 IT OnRamp Scholarship Information & Application -authors: - - James Petty -date: "2021-12-17T17:03:32+00:00" -categories: - - Announcements -tags: - - OnRamp - - PowerShell Summit - - Scholarships -aliases: - - /2021/12/2022-it-onramp-scholarship-information-application/ ---- - -**The OnRamp Scholarship returns in 2022!** We are currently looking for applicants for the PowerShell + DevOps Summit 2022 [OnRamp](https://powershell.org/summit/onramp/) Track Scholarship. - - - **TLDR:** you can apply for the OnRamp Scholarship [here](https://powershell.org/summit/onramp/scholarship)! - - - OnRamp is an educational track geared towards entry-level IT Pros. It offers a great opportunity to jump-start your PowerShell career while being taught by the best in the industry. It's structured as a hands-on class, so your skills are put into practice right away. However, attendees will still spend time outside the classroom to attend keynotes, general sessions, and other social gatherings. You get the best of both; a chance to learn, and the opportunity to network and build connections! - - - For more information, we recommend reading the [OnRamp Brochure](https://indd.adobe.com/view/9915836a-3056-40ba-baad-37b4f74e0352). - - - Speaking of networking, we also have a "[buddy program](https://powershell.org/summit/onramp/)" in which OnRamp attendees can enroll and be paired with a veteran Summit attendee. It's a great way to make introductions and ask questions in a one-on-one format. - - - We are seeking applicants for the PowerShell + DevOps Summit OnRamp Scholarship now! [Applications](https://powershell.org/summit/onramp/scholarship/) must be submitted no later than **February 1st, 2022**. - - - Scholarship recipients receive: - - - - - - - US domestic economy airfare to the event (up to $600 inclusive of all taxes and fees) - - - - - - - - - - Five (5) nights' lodging (Sunday through Thursday evenings) - - - - - - - - - - Admission to the OnRamp track, including four breakfasts, four lunches, and two evening events. - - - - - - Who should apply: - - - - - - - Individuals who are part of ethnic or gender groups that have traditionally been underrepresented in IT (half of our scholarship slots are reserved for members of these groups) - - - - - - - - - - Individuals who have completed an entry-level IT training program (which can include a technical college) or who hold at least one entry-level certification (such as CompTIA A+) - - - - - - - - - - Individuals who currently hold an entry-level IT job, are participating in an IT internship, or who are actively applying for an entry-level IT job. - - - - - - - - - - Individuals who fully intend to make IT their full-time professional career. - - - - - - Please reach out with any questions at either of the following places: - - - - - - - Twitter @jbirley - - - - - - - - - - Email [scholarship@powershell.org](mailto:scholarship@powershell.org) diff --git a/content/articles/2021-12-28-2022-powershell-devops-global-summit-covid-survey.md b/content/articles/2021-12-28-2022-powershell-devops-global-summit-covid-survey.md deleted file mode 100644 index 597c9e153..000000000 --- a/content/articles/2021-12-28-2022-powershell-devops-global-summit-covid-survey.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: 2022 PowerShell + DevOps Global Summit Covid Survey -authors: - - James Petty -date: "2021-12-28T21:46:10+00:00" -categories: - - Events -tags: - - PowerShell Summit -legacy_featured_image: /wp-content/uploads/2021/10/Summit_2021_Long_Date@2x.png -aliases: - - /2021/12/2022-powershell-devops-global-summit-covid-survey/ ---- - -Greetings PowerShell Folks – - -As we approach a new year and a new Summit, we wanted to include you, the community, to help us understand what steps we can take to make our event a safe, including, welcoming, and enjoyable environment for all Summitteers. - -Please know that we will adhere to all state and local mandates in place at the time of the event, whatever this may encompass.  What we are asking is what \*additional\* steps you would like to see us take over and above those mandates. - -If you could please take 5 minutes and fill out this survey we would very much appreciate it. - - diff --git a/content/articles/2021/01/_index.md b/content/articles/2021/01/_index.md new file mode 100644 index 000000000..ee7e1e738 --- /dev/null +++ b/content/articles/2021/01/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from January 2021" +description: "PowerShell.org Articles published in January 2021." +--- diff --git a/content/articles/2021/01/icymi-powershell-week-of-08-january-2021/index.md b/content/articles/2021/01/icymi-powershell-week-of-08-january-2021/index.md new file mode 100644 index 000000000..f0e1d3fe3 --- /dev/null +++ b/content/articles/2021/01/icymi-powershell-week-of-08-january-2021/index.md @@ -0,0 +1,56 @@ +--- +url: /articles/2021-01-08-icymi-powershell-week-of-08-january-2021/ +title: "ICYMI: PowerShell Week of 08-January-2021" +authors: + - Robin Dadswell +date: "2021-01-08T19:37:07+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/01/icymi-powershell-week-of-08-january-2021/ +--- + +Topics include Phishing, DSC, Regex and more... +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210108-functiondraft.md#set-windows-timezone-via-location-services)[*Set Windows Timezone via Location Services*](https://tseknet.com/blog/timezone) + +by Dan Tsekahnskiy on 4th January +This post aims to help those of you trying to set the Windows time zone without relying on DHCP options or similar solutions. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210108-functiondraft.md#getting-started-with-powershell-and-regex)[*Getting Started with PowerShell and Regex*](https://adamtheautomator.com/powershell-regex/) + +by Christopher Bisset on 5th January +In this article, you’re going to learn the basics of working with regex and PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210108-functiondraft.md#how-to-set-up-azure-dsc-on-an-ubuntu-linux-vm)[*How to Set Up Azure DSC on an Ubuntu Linux VM*](https://adamtheautomator.com/how-to-set-up-azure-dsc-on-an-ubuntu-linux-vm/) + +by Justin Sylvester on 6th January +Justin Shows how to use Azure DSC against an Azure Virtual Machine. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210108-functiondraft.md#monitoring-with-powershell-monitoring-potential-phishing-campaigns)[*Monitoring with PowerShell: Monitoring potential phishing campaigns*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-potential-phishing-campaigns/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-potential-phishing-campaigns) + +by Kelvin Tegelaar on 8th January +Use Office 365 tools to search for potential phishing attacks. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210108-functiondraft.md#answering-the-cim-directory-challenge)[*Answering the CIM Directory Challenge*](https://jdhitsolutions.com/blog/powershell/7992/answering-the-cim-directory-challenge/) + +by Jeff Hicks on 8th January +Jeff explores the his solution to the recent Iron Scripter Challenge. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210108-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/koghqv/how_to_get_the_xbox_series_x/) + +Use Invoke-WebRequest to hopefully score an Xbox before they sell out. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210108-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1347551267472560131) + +Secret Management and Secret Store Release Candidates + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210108-functiondraft.md#youtube-change-filefolder-permissions-with-powershell)[*Youtube: Change File/Folder permissions with Powershell*](https://www.youtube.com/watch?v=0nk2NDYyQT8) + +This video covers how to use modify or set the security settings or permissions to a file or folder using ACL as well as ICACLS. diff --git a/content/articles/2021/01/icymi-powershell-week-of-15-january-2021/index.md b/content/articles/2021/01/icymi-powershell-week-of-15-january-2021/index.md new file mode 100644 index 000000000..b926006e4 --- /dev/null +++ b/content/articles/2021/01/icymi-powershell-week-of-15-january-2021/index.md @@ -0,0 +1,50 @@ +--- +url: /articles/2021-01-15-icymi-powershell-week-of-15-january-2021/ +title: "ICYMI: PowerShell Week of 15-January-2021" +authors: + - Robin Dadswell +date: "2021-01-15T18:18:36+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/01/icymi-powershell-week-of-15-january-2021/ +--- + +Topics include PowerShell 7.1, SharePoint Online, WPF and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210115-functiondraft.md#how-to-install-and-upgrade-to-powershell-71)[*How to install and upgrade to PowerShell 7.1.*](https://4sysops.com/archives/how-to-install-and-upgrade-to-powershell-71/) + +by Leos Marek on 11th January +PowerShell 7, currently available in version 7.1, is the most recent release of Microsoft's cross-platform scripting language. This bog post is about how to install and upgrade to PowerShell 7.1. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210115-functiondraft.md#what-the-shell-is-happening)[*What the Shell is Happening?*](https://jdhitsolutions.com/blog/powershell/8013/what-the-shell-is-happening/) + +by Jeffrey Hicks on 13th January +A Virtual sticky note by Jeff,The PowerShell community is beginning another year in the world of PowerShell 7. Most of you know what that means. However, there are newcomers to our community practically every day + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210115-functiondraft.md#sharepoint-online-powershell-commands-for-admin-tasks)[*SharePoint Online PowerShell commands for admin tasks*](https://searchwindowsserver.techtarget.com/tutorial/SharePoint-Online-PowerShell-commands-for-admin-tasks) + +by Adam Bertram on 14th January +This blogs shows how PowerShell can be used to Adminster SharePoint online. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210115-functiondraft.md#how-to-download-a-file-with-powershell-from-the-web)[*How to Download a File with PowerShell from the Web*](https://adamtheautomator.com/powershell-download-file/) + +by June Castillote on 15th January +Discover different ways to download files from the internet with PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210115-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/KevinMarquette/status/1349195755253207041%3E) + +What are your #PowerShell hidden gems? Things you discovered that gave you that "Oh, I had no idea" feeling. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210115-functiondraft.md#youtube-building-wpf-applications-in-visual-studio-code-with-powershell)[*Youtube: Building WPF Applications in Visual Studio Code with PowerShell*](https://www.youtube.com/watch?v=8snKUcvaMmc) + +This video explains how to use Visual Studio Code and PowerShell Pro Tools to build a WPF application. The PSScriptPad integration in PowerShell Pro Tools for Visual Studio Code allows you to use a drag and drop designer to layout and customize your WPF forms. diff --git a/content/articles/2021/01/icymi-powershell-week-of-22-january-2021/index.md b/content/articles/2021/01/icymi-powershell-week-of-22-january-2021/index.md new file mode 100644 index 000000000..e194da48c --- /dev/null +++ b/content/articles/2021/01/icymi-powershell-week-of-22-january-2021/index.md @@ -0,0 +1,54 @@ +--- +url: /articles/2021-01-22-icymi-powershell-week-of-22-january-2021/ +title: "ICYMI: PowerShell Week of 22-January-2021" +authors: + - Robin Dadswell +date: "2021-01-22T21:00:58+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/01/icymi-powershell-week-of-22-january-2021/ +--- + +Topics include GitHub Actions, Linux, SharePoint and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210122-functiondraft.md#step-by-step-deploy-azure-powershell-functions-with-github-actions)[*Step-by-Step: Deploy Azure PowerShell Functions with GitHub Actions*](https://4bes.nl/2021/01/17/step-by-step-deploy-azure-powershell-functions-with-github-actions/) + +by Barbara Forbes on 17th January +In this post we will go through the process to deploy Azure PowerShell Functions with GitHub Actions. I think this will translate to other languages pretty well. The workflow will first deploy the function if it does not exist. After that it will use the publish profile to deploy the PowerShell code in the repository to Azure. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210122-functiondraft.md#linux-and-powershell)[*Linux and Powershell*](https://matteoguadrini.github.io/posts/linux-and-powershell/) + +by Matteo Guadrini on 17th January +Matteo Guadrini shows how to install and start using PowerShell in Linux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210122-functiondraft.md#how-to-upgrade-the-sku-of-the-public-ip-address-in-the-azure)[*How to upgrade the SKU of the public IP address in the Azure?*](https://wachulec.me/posts/how-to-upgrade-sku-of-public-ip-address-azure/) + +by Poitr Wachulec on 21st January +Poitr Wachulec shows how PowerShell can be used to Upgrade SKU of Public IP address in Azure + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210122-functiondraft.md#how-to-write-a-cmdlet-in-powershell-step-by-step)[*How to write a Cmdlet in PowerShell Step-by-Step*](https://www.virtualizationhowto.com/2021/01/how-to-write-a-cmdlet-in-powershell-step-by-step/#disqus_thread/) + +by Brandon Lee on 22nd January +Brandon Lee wrote about the difference between a PowerShell function and cmdlet and how to write them. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210122-functiondraft.md#powershell-secretmanagement-chrome-edge-vault-extension-is-good-enough-for-an-initial-release-check-it-out)[*#Powershell #SecretManagement #Chrome #Edge vault extension is good enough for an initial release, check it out!*](https://twitter.com/JustinWGrote/status/1350367220572950531) + +by Justin Grote on 22nd January + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210122-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/l2bhm3/powershell_code_review/) + +u/TiiimK seeks help for reviewing the code which will is used to verify user identity using MFA and SSO + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210122-functiondraft.md#youtube-find-missing-metadata-in-sharepoint-online-using-powershell-pnp)[*Youtube: Find Missing Metadata in SharePoint Online using PowerShell PnP*](https://www.youtube.com/watch?v=BqNpobTFByI) + +Learn how to build the PowerShell script to find the missing values in required fields in SharePoint Online with Veronica diff --git a/content/articles/2021/01/icymi-powershell-week-of-29-january-2021/index.md b/content/articles/2021/01/icymi-powershell-week-of-29-january-2021/index.md new file mode 100644 index 000000000..ed1002c07 --- /dev/null +++ b/content/articles/2021/01/icymi-powershell-week-of-29-january-2021/index.md @@ -0,0 +1,50 @@ +--- +url: /articles/2021-01-29-icymi-powershell-week-of-29-january-2021/ +title: "ICYMI: PowerShell Week of 29-January-2021" +authors: + - Robin Dadswell +date: "2021-01-29T15:58:18+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +aliases: + - /2021/01/icymi-powershell-week-of-29-january-2021/ +--- + +Topics include PSRemoting, Active Directory, string manipulation and more.. + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210129-functiondraft.md#an-active-directory-change-report-from-powershell)[*An Active Directory Change Report from PowerShell*](https://jdhitsolutions.com/blog/powershell/8087/an-active-directory-change-report-from-powershell/) + +by Jeff Hicks on 26th January +Jeff walks us through how to track the changes in Active Directory since given date and time using PowerShell + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210129-functiondraft.md#how-to-set-up-psremoting-with-windows-and-linux)[*How to Set up PSRemoting with Windows and Linux*](https://adamtheautomator.com/psremoting-linux/) + +by Tyler Muir on 26th January +In this article, you’re going to learn how to set up a Windows client to connect to a Linux computer (CentOS) using PSRemoting over SSH and vice versa. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210129-functiondraft.md#monitoring-with-powershell-monitoring-powershell-protect)[*Monitoring with PowerShell: Monitoring Powershell Protect*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-powershell-protect/?utm_source=dlvr.it&utm_medium=twitter&utm_campaign=monitoring-with-powershell-monitoring-powershell-protect) + +by Kelvin Tegelaar on 27th January +Monitoring with PowerShell with PowerShell protect. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210129-functiondraft.md#is-powershell-considered-a-programming-language)[*Is Powershell Considered a Programming Language?*](https://itblogpros.com/is-powershell-considered-a-programming-language/) + +by Graeme John on 28th January +Is Powershell Considered a Programming Language? Yes it certainly is, no matter what anyone tells you. Many people that work in dev environments might scoff at the idea that your Powershell creations, are anything more than scripts, but they are dead wrong, and we’ll flesh out the details in our blog post as to why that is the case. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210129-functiondraft.md#powershell-concatenation-how-to-use-this-powerful-feature)[*PowerShell concatenation: How to use this powerful feature*](http://techgenix.com/powershell-concatenation/) + +by Lavanya Rathnan on 28th January +String concatenation is something that we use commonly to create the right data. This blog post show different ways to concatenate them in PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210129-functiondraft.md#youtube-writing-robust-powershell)[*Youtube: Writing Robust PowerShell*](https://www.youtube.com/watch?v=QHqN9Nt5oCY) + +Guy Leech is kicking us off for 2021 with by sharing his tips for writing PowerShell code that will reduce the occurrences of errors and unexpected behavior which helps increase reliability and user confidence. diff --git a/content/articles/2021/02/_index.md b/content/articles/2021/02/_index.md new file mode 100644 index 000000000..4573b8aa5 --- /dev/null +++ b/content/articles/2021/02/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from February 2021" +description: "PowerShell.org Articles published in February 2021." +--- diff --git a/content/articles/2021/02/icymi-powershell-week-of-12-february-2021/index.md b/content/articles/2021/02/icymi-powershell-week-of-12-february-2021/index.md new file mode 100644 index 000000000..3c5085de1 --- /dev/null +++ b/content/articles/2021/02/icymi-powershell-week-of-12-february-2021/index.md @@ -0,0 +1,55 @@ +--- +url: /articles/2021-02-12-icymi-powershell-week-of-12-february-2021/ +title: "ICYMI: PowerShell Week of 12-February-2021" +authors: + - Robin Dadswell +date: "2021-02-12T15:00:13+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/02/icymi-powershell-week-of-12-february-2021/ +--- + +Topics include Microsoft Cloud Services, Dynamic parameters, PSRemoting, jobs and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210212-functiondraft.md#powershell-cheat-sheet-connect-to-microsoft-cloud-services-az-azuread-exchange-msteams)[*PowerShell Cheat Sheet: Connect to Microsoft Cloud Services (Az, AzureAD, Exchange, MSTeams)*](https://sid-500.com/2021/02/08/powershell-cheat-sheet-connect-to-microsoft-365-cloud-services-az-azuread-exchange-msteams/) + +by Patrick Gruenauer on 8th February +Patrick is working on PowerShell cheat sheet, and here's few on how to connect to Microsoft Cloud Services (Az, AzureAD, Exchange, MSTeams) + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210212-functiondraft.md#query-db2-from-powershell)[*Query DB2 From PowerShell*](https://sqlvariant.com/2021/02/query-db2-from-powershell/) + +by Aaron Nelson on 9th February +Aaron walks us through how to connect DB2 and query using PowerShell + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210212-functiondraft.md#tips-and-tricks-to-using-powershell-dynamic-parameters)[*Tips and Tricks to Using PowerShell Dynamic Parameters*](https://jeffbrown.tech/tips-and-tricks-to-using-powershell-dynamic-parameters/) + +by Jeff Brown on 10th February +Jeff walks us through about dynamic parameters in PowerShell with real-life examples + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210212-functiondraft.md#how-to-check-the-available-vm-sizes-skus-by-azure-region)[*How to check the available VM Sizes (SKUs) by Azure Region*](https://www.thomasmaurer.ch/2021/02/how-to-check-the-available-vm-sizes-skus-by-azure-region/) + +by Thomas Maurer on 11th February +Thomas shows us how to check the available VM Sizes in Azure in couple of ways that includes PowerShell as well. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210212-functiondraft.md#how-to-set-up-psremoting-in-a-workgroup-environment)[*How to Set Up PSRemoting in a Workgroup Environment*](https://adamtheautomator.com/psremoting-workgroup/) + +by Tyler Muir on 11th February +In this tutorial, you’re going to learn all of the steps necessary to set up a PSRemoting connection using a username and password from a client and server in a workgroup. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210212-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1360038846101032960) + +#PowerShell 7.0.5 and 7.1.2 are out! 7.2 Preview 3 coming soon. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210212-functiondraft.md#youtube-working-with-powershell-background-jobs)[*Youtube: Working with PowerShell background jobs*](https://www.youtube.com/watch?v=vX7az9PDA8Y) + +This video demonstrates how to multitask in PowerShell by using background jobs. diff --git a/content/articles/2021/03/_index.md b/content/articles/2021/03/_index.md new file mode 100644 index 000000000..a17306f71 --- /dev/null +++ b/content/articles/2021/03/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from March 2021" +description: "PowerShell.org Articles published in March 2021." +--- diff --git a/content/articles/2021/03/call-for-authors-and-editors/index.md b/content/articles/2021/03/call-for-authors-and-editors/index.md new file mode 100644 index 000000000..b2909ba72 --- /dev/null +++ b/content/articles/2021/03/call-for-authors-and-editors/index.md @@ -0,0 +1,23 @@ +--- +url: /articles/2021-03-11-call-for-authors-and-editors/ +title: Call for Authors and Editors +authors: + - James Petty +date: "2021-03-11T14:50:50+00:00" +categories: + - Announcements + - DevOps +tags: + - Community + - Call for Authors +aliases: + - /2021/03/call-for-authors-and-editors/ +--- + +"I'm pleased to announce the Call for Editors and Call for Authors for the "Modern IT Automation with PowerShell" book. + +This project is a new initiative to develop a textbook resource to connect the PowerShell community with Students and IT Professionals alike. While the previous projects (PowerShell Conference Book) rely on people to submit their own material, this project will depend on set course material to archive this book's goal. Authors / Editors will be required to select which chapters you would be interested in writing/editing. Topics Include security, git, Regex, DevOps, and more! Contributors will have their names included in the book! + +Call for Authors - [https://forms.gle/mSKg567AAaUF7CLD8](https://forms.gle/mSKg567AAaUF7CLD8) + +Call for Editors - [https://forms.gle/G49dQmy8JC1vPc7a9](https://forms.gle/G49dQmy8JC1vPc7a9)" diff --git a/content/articles/2021/03/icymi-powershell-week-of-05-march-2021/index.md b/content/articles/2021/03/icymi-powershell-week-of-05-march-2021/index.md new file mode 100644 index 000000000..3caf54b60 --- /dev/null +++ b/content/articles/2021/03/icymi-powershell-week-of-05-march-2021/index.md @@ -0,0 +1,77 @@ +--- +url: /articles/2021-03-05-icymi-powershell-week-of-05-march-2021/ +title: "ICYMI: PowerShell Week of 05-March-2021" +authors: + - Robin Dadswell +date: "2021-03-05T15:00:00+00:00" +categories: + - In Case You Missed It + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/03/icymi-powershell-week-of-05-march-2021/ +--- + +Topics include REST APIs, PSRemoting, Azure AD reporting and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [][1][_Replicating VMware NSX-T Services with REST API and PowerShell_][2] {.wp-block-heading} + +by Fer Corrales on 1st March + +I have worked on several NSX-V and NSX-T implementations that required the creation of an important number of objects, in the order of the thousands. Therefore, automation has been a must, so I have gained experience with PowerNSX, the PowerCLI NSX-T Module and REST API calls. Recently, I was working on getting a new NSX-T environment configured exactly the same as an existing one. When I was working on setting up Services, I decided to look for a way to take advantage of the configuration that was already in place on one of the data centers and replicate it on the new one. That is how I ended up writing this script. + +###### [][3][_The Beauty of Progress Bar in PowerShell 7.2 Preview 3_][4] {.wp-block-heading} + +by Schillman on 2nd March + +Old progress bar below, it’s not customisable, quite big and all that green colour & text is always rewritten to the pipeline for every time the progress bar updates, that’s a lot of writing.The New progress bar is minimal, just as the configuration implies. You have the possibilities to change the For/Back-ground colour along with some font changes. + +###### [][5][_How to Set up PSRemoting with WinRM and SSL [Step by Step]_][6] {.wp-block-heading} + +by Tyler Muir on 3rd March + +If you’re already running remote commands with PowerShell Remoting_ _(PSRemoting), you know how convenient the feature is. You’re able to connect to one or more remote computers and manage them like they were local. PSRemoting depends on Windows Remote Management (WinRm) to make it happen, and if you’re not using WinRM over SSL, you might be opening yourself up to some security issues. + +###### [][7][_Graph theory with PowerShell_][8] {.wp-block-heading} + +by Dirk Bremen on 3rd March + +In this post I’m going to explore a bit of graph theory based on chapter 2 of the excellent book “Think Complexity 2e” by Allen B. Downey, with a twist of using PowerShell to do it. + +###### [][9][_Azure AD Authentication Methods Summary Reports using Microsoft Graph and PowerShell_][10] {.wp-block-heading} + +by Darren Robinson on 4th March + +Ever needed to know how to extract Azure AD Authentication Methods Summary Reports using Microsoft Graph and PowerShell; well today is your lucky day! Find out how in this interesting article about using the Microsoft Graph API with PowerShell + +###### [][11][_Tweet of the Week_][12] {.wp-block-heading} + +SecretManagement and SecretStore RC2 is out! + +###### [][13][_Youtube: 45. Secure (HTTPS) DSC Pull Server with SQL Database using a Group Managed Service Account (gMSA)_][14] {.wp-block-heading} + +You have seen on the interwebs many blog posts and videos about setting up a Secure DSC pull server with SQL authentication with a local SQL service account. What I have not seen is a tutorial for how to setup a secure DSC Pull Server with a SQL Database using a Group Managed Service Account (gMSA). + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210305-functiondraft.md#replicating-vmware-nsx-t-services-with-rest-api-and-powershell + [2]: https://fercorrales.com/replicating-vmware-nsx-t-services-with-rest-api-and-powershell/?utm_source=rss&utm_medium=rss&utm_campaign=replicating-vmware-nsx-t-services-with-rest-api-and-powershell + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210305-functiondraft.md#the-beauty-of-progress-bar-in-powershell-72-preview-3 + [4]: https://it-overload.com/2021/03/02/the-beauty-of-progress-bar-in-powershell-7-2-preview-3/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210305-functiondraft.md#how-to-set-up-psremoting-with-winrm-and-ssl-step-by-step + [6]: https://adamtheautomator.com/winrm-ssl/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210305-functiondraft.md#graph-theory-with-powershell + [8]: https://powershellone.wordpress.com/2021/03/03/graph-theory-with-powershell/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210305-functiondraft.md#azure-ad-authentication-methods-summary-reports-using-microsoft-graph-and-powershell + [10]: https://blog.darrenjrobinson.com/azure-ad-authentication-methods-summary-reports-using-microsoft-graph-and-powershell/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210305-functiondraft.md#tweet-of-the-week + [12]: https://twitter.com/steve_msft/status/1367189897153421314?s=12 + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210305-functiondraft.md#youtube-45-secure-https-dsc-pull-server-with-sql-database-using-a-group-managed-service-account-gmsa + [14]: https://www.youtube.com/watch?v=d2IXnrqY48Q diff --git a/content/articles/2021/03/icymi-powershell-week-of-12-march-2021/index.md b/content/articles/2021/03/icymi-powershell-week-of-12-march-2021/index.md new file mode 100644 index 000000000..ee7755408 --- /dev/null +++ b/content/articles/2021/03/icymi-powershell-week-of-12-march-2021/index.md @@ -0,0 +1,75 @@ +--- +url: /articles/2021-03-12-icymi-powershell-week-of-12-march-2021/ +title: "ICYMI: PowerShell Week of 12-March-2021" +authors: + - Robin Dadswell +date: "2021-03-12T15:00:00+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/03/icymi-powershell-week-of-12-march-2021/ +--- + +Topics include logging, converting PowerShell scripts to executables, PSJobs with VMWare and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [][1][_Documenting with PowerShell: Documenting admin actions_][2] {.wp-block-heading} + +by Kelvin Tegelaar on 8th March + +Have a look at Kelvin's method to monitor the Admin Audit Log within M365! + +###### [][3][_How to create Logging for your PowerShell Scripts_][4] {.wp-block-heading} + +by Patrick Gruenauer on 8th March + +Patrick will show us how to implement a custom function that captures the errors and writes errors in an error log file. + +###### [][5][_Parallel Execution with PSJobs and PowerCLI: Deploying New VMs_][6] {.wp-block-heading} + +by Fer Corrales on 9th March + +Fer Corrales walks us through how to execute commands simultaneously using PSJobs module and deploy multiple virtual machines + +###### [][7][_The De Facto Guide for Converting a PS1 to EXE (7 Ways)_][8] {.wp-block-heading} + +by Arman Castillote on 9th March + +In this tutorial, you will learn how to use PS1 to EXE generators, and you will also get to compare them so you can decide which one best suits your preference. + +###### [][9][_How to Use PowerShell to Get Free Disk Space [Tutorial]_][10] {.wp-block-heading} + +by Adam Bertram on 10th March + +If you’re using PowerShell to get free disk space on a Windows computer, you’ve come to the right place. In this tutorial, you will learn how to use PowerShell to get free disk space and monitor disk usage. + +###### [][11][_Tweet of the Week_][12] {.wp-block-heading} + +#PowerShell 7.0.6 and 7.1.3 are out! + +###### [][13][_Youtube: Build an event viewer component for Universal Dashboard_][14] {.wp-block-heading} + +Adam Driscoll shows How to build an event viewer component for Universal Dashboard. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210312-functiondraft.md#documenting-with-powershell-documenting-admin-actions + [2]: https://www.cyberdrain.com/documenting-with-powershell-documenting-admin-actions/?utm_source=rss&utm_medium=rss&utm_campaign=documenting-with-powershell-documenting-admin-actions + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210312-functiondraft.md#how-to-create-logging-for-your-powershell-scripts + [4]: https://sid-500.com/2021/03/08/powershell-how-to-create-logging-for-your-powershell-scripts/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210312-functiondraft.md#parallel-execution-with-psjobs-and-powercli-deploying-new-vms + [6]: https://fercorrales.com/parallel-execution-with-psjobs-and-powercli-deploying-new-vms/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210312-functiondraft.md#the-de-facto-guide-for-converting-a-ps1-to-exe-7-ways + [8]: https://adamtheautomator.com/ps1-to-exe/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210312-functiondraft.md#how-to-use-powershell-to-get-free-disk-space-tutorial + [10]: https://adamtheautomator.com/powershell-get-disk-space/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210312-functiondraft.md#tweet-of-the-week + [12]: https://twitter.com/Steve_MSFT/status/1370156693976272899 + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210312-functiondraft.md#youtube-build-an-event-viewer-component-for-universal-dashboard + [14]: https://www.youtube.com/watch?v=haub8JX-2Ag diff --git a/content/articles/2021/03/icymi-powershell-week-of-19-march-2021/index.md b/content/articles/2021/03/icymi-powershell-week-of-19-march-2021/index.md new file mode 100644 index 000000000..75a455439 --- /dev/null +++ b/content/articles/2021/03/icymi-powershell-week-of-19-march-2021/index.md @@ -0,0 +1,81 @@ +--- +url: /articles/2021-03-19-icymi-powershell-week-of-19-march-2021/ +title: "ICYMI: PowerShell Week of 19-March-2021" +authors: + - Robin Dadswell +date: "2021-03-19T14:00:00+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/03/icymi-powershell-week-of-19-march-2021/ +--- + +Topics include DSC, Active Directory, Compare-Object and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [][1][_Simple Simple Microsoft Crescendo Example Part II_][2] {.wp-block-heading} + +by Tommy Maynard on 15th March + +The Microsoft.PowerShell.Crescendo module is mostly brand new. It’s still early on in its development. It’s currently at version 0.4.1.. Tomyy gives you an idea of his first experience working with the module. + +###### [][3][_PowerShell Execution Policies: Understanding and Managing_][4] {.wp-block-heading} + +by Chaitanya on 16th March + +In this post, you’re going to learn about PowerShell execution policies and how to manage them with the Set-ExecutionPolicy cmdlet. By the end of this post, you’ll know not only to run scripts but how to use execution policies too! + +###### [][5][_Extending PowerShell’s Compare-Object to handle custom classes and arrays_][6] {.wp-block-heading} + +by Dirk Bremen on 16th March + +In this post, Dirk will walk you through the process of extending the built-in Compare-Object cmdlet to support “deep” comparison of custom objects, arrays, and classes. + +###### [][7][_Advanced HTML reporting using PowerShell_][8] {.wp-block-heading} + +by Przemysław Kłys on 16th March + +Have a look at Przemysław Klys's Advanced HTML reporting using PowerShell + +###### [][9][_Better Active Directory Reporting with PowerShell_][10] {.wp-block-heading} + +by Jeff Hicks on 18th March + +Jeff shares his ADReportingScripts tools, built from a collection of scripts to deal with common AD tasks and frustrations. + +###### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} + +Redditor discovers the "Copy as PowerShell" feature, also available in Chrome. + +###### [][13][_Tweet of the Week_][14] {.wp-block-heading} + +#PowerShell 7.2-preview.4 is out! + +###### [][15][_Youtube: Testing DSC Pull Server and apply localhost.mof to a client node that disables Windows Firewall_][16] {.wp-block-heading} + +As a follow on from last week, In this video we will use this same infrastructure to configure the Windows Firewall on a client node. I will use the FirewallProfile resource from the NetworkingDSC Module on the PowerShell Gallery to accomplish the task. The video has all the step-by-step instructions, and you can download the code used at my website linked below. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210319-functiondraft.md#simple-simple-microsoft-crescendo-example-part-ii + [2]: https://tommymaynard.com/simple-simple-microsoft-crescendo-example-part-ii/l + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210319-functiondraft.md#powershell-execution-policies-understanding-and-managing + [4]: https://adamtheautomator.com/set-executionpolicy-2/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210319-functiondraft.md#extending-powershells-compare-object-to-handle-custom-classes-and-arrays + [6]: https://powershellone.wordpress.com/2021/03/16/extending-powershells-compare-object-to-handle-custom-classes-and-arrays/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210319-functiondraft.md#advanced-html-reporting-using-powershell + [8]: https://evotec.xyz/advanced-html-reporting-using-powershell/#utm_source=rss&utm_medium=rss&utm_campaign=advanced-html-reporting-using-powershell + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210319-functiondraft.md#better-active-directory-reporting-with-powershell + [10]: https://jdhitsolutions.com/blog/active-directory/8228/better-active-directory-reporting-with-powershell/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210319-functiondraft.md#reddit-rpowershell---most-popular-weekly-post + [12]: https://www.reddit.com/r/PowerShell/comments/m4k7bh/just_found_out_you_can_copy_as_powershell_a_web/ + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210319-functiondraft.md#tweet-of-the-week + [14]: https://twitter.com/Steve_MSFT/status/1371969606290599936 + [15]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210319-functiondraft.md#youtube-testing-dsc-pull-server-and-apply-localhostmof-to-a-client-node-that-disables-windows-firewall + [16]: https://www.youtube.com/watch?v=gp8zraXL2f4 diff --git a/content/articles/2021/03/icymi-powershell-week-of-26-february-2021/index.md b/content/articles/2021/03/icymi-powershell-week-of-26-february-2021/index.md new file mode 100644 index 000000000..ed0514e2c --- /dev/null +++ b/content/articles/2021/03/icymi-powershell-week-of-26-february-2021/index.md @@ -0,0 +1,69 @@ +--- +url: /articles/2021-03-01-icymi-powershell-week-of-26-february-2021/ +title: "ICYMI: PowerShell Week of 26-February-2021" +authors: + - Robin Dadswell +date: "2021-03-01T19:28:47+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/03/icymi-powershell-week-of-26-february-2021/ +--- + +Topics include DNS, VMWare, Exchange and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [][1][_Getting Detailed Task Information With PowerCLI (Function)_][2] {.wp-block-heading} + +by Fer Corrales on 22nd February + +The _Get-Task_ default output is quite limited compared to the information displayed by the vCenter or ESXi Task Panel. In this post you will find out how to get more information from PowerCLI. + +###### [][3][_How to Flush DNS in Windows 10_][4] {.wp-block-heading} + +by Anthony Metcalf on 22nd February + +In this article, you’re going to learn how to clear a DNS cache as a troubleshooting method in Windows 10 using the built-in ipconfig command and with PowerShell’s Clear-DnsClientCache cmdlet. + +###### [][5][_Monitoring with PowerShell: Monitoring listening applications_][6] {.wp-block-heading} + +by Kelvin Tegelaar on 23rd February + +Monitor listening ports in Windows to ensure that the expected application is using it. + +###### [][7][_How to Move Exchange Mailboxes with PowerShell_][8] {.wp-block-heading} + +by Faris Malaeb on 23rd February + +Known as a Local Move Request, you can move user, archive, arbitration, discovery, and other types of mailboxes. In this tutorial, you will learn how to start and manage local move requests using Windows Powershell! + +###### [][9][_PowerShell for Visual Studio Code Updates – February 2021_][10] {.wp-block-heading} + +by Sydney Smith on 23rd February + +See both what is new and what is to come in this blog from Microsoft on the PowerShell extension for VS Code. + +###### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} + +Learn to make a simple GUI with the PSScriptMenuGui Module. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210226-functiondraft.md#getting-detailed-task-information-with-powercli-function + [2]: https://fercorrales.com/getting-detailed-task-information-with-powercli-function/?utm_source=rss&utm_medium=rss&utm_campaign=getting-detailed-task-information-with-powercli-function + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210226-functiondraft.md#how-to-flush-dns-in-windows-10 + [4]: https://adamtheautomator.com/flush-dns-in-windows-10/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210226-functiondraft.md#monitoring-with-powershell-monitoring-listening-applications + [6]: https://www.cyberdrain.com/monitoring-with-powershell-monitoring-listening-applications/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-listening-applications + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210226-functiondraft.md#how-to-move-exchange-mailboxes-with-powershell + [8]: https://adamtheautomator.com/new-moverequest/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210226-functiondraft.md#powershell-for-visual-studio-code-updates--february-2021 + [10]: https://devblogs.microsoft.com/powershell/powershell-for-visual-studio-code-updates-february-2021/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210226-functiondraft.md#reddit-rpowershell---most-popular-weekly-post + [12]: https://www.reddit.com/r/PowerShell/comments/lr4mxx/how_to_create_a_simple_powershell_gui_menu_to/ diff --git a/content/articles/2021/03/icymi-powershell-week-of-26-march-2021/index.md b/content/articles/2021/03/icymi-powershell-week-of-26-march-2021/index.md new file mode 100644 index 000000000..f5d8f01f9 --- /dev/null +++ b/content/articles/2021/03/icymi-powershell-week-of-26-march-2021/index.md @@ -0,0 +1,73 @@ +--- +url: /articles/2021-03-26-icymi-powershell-week-of-26-march-2021/ +title: "ICYMI: PowerShell Week of 26-March-2021" +authors: + - Robin Dadswell +date: "2021-03-26T14:00:00+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/03/icymi-powershell-week-of-26-march-2021/ +--- + +Topics include PoshGUI, Foreach-Parallel, Azure CLI and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [][1][_Solving Another PowerShell Math Challenge_][2] {.wp-block-heading} + +by Jeff Hicks on 22nd March + +Solving Another #PowerShell Math Challenge from the Iron Scripter Chairman + +###### [][3][_Installing the RSAT (Remote Server Administration Tools for Windows 10) tools using PowerShell_][4] {.wp-block-heading} + +by Luke Murray on 24th March + +Installing the RSAT (Remote Server Administration Tools for Windows 10) tools using PowerShell. This is just a quick article, written purely as an easy reference. + +###### [][5][_How to Install the Azure CLI (Windows, Linux, macOS, Azure Shell)_][6] {.wp-block-heading} + +by Nick Rimmer on 24th March + +Nick shows us how to install Azure CLI across multiple platforms. + +###### [][7][_How to chain multiple PowerShell commands on one line_][8] {.wp-block-heading} + +by Thomas Maurer on 25th March + +In this blog post, we will look at how you can chain and run multiple PowerShell commands on one line using pipelines and chaining commands. + +###### [][9][_Reddit /r/PowerShell - Most Popular Weekly Post_][10] {.wp-block-heading} + +PoshGUI has switched to a subscription model with a lifetime access tier. The comments are filled with mixed reactions and suggestions for alternatives as well. + +###### [][11][_Tweet of the Week_][12] {.wp-block-heading} + +SecretManagement and SecretStore are officially GA! + +###### [][13][_Youtube: ForEach-Parallel_][14] {.wp-block-heading} + +When PowerShellv7 came out, it came with a foreach -parallel parameter. Now I finally get to learn how to use this new parameter and take you along for the ride. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210326-functiondraft.md#solving-another-powershell-math-challenge + [2]: https://jdhitsolutions.com/blog/powershell/8236/solving-another-powershell-math-challenge/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210326-functiondraft.md#installing-the-rsat-remote-server-administration-tools-for-windows-10-tools-using-powershell + [4]: https://luke.geek.nz/installing-the-rsat-remote-server-administration-tools-for-windows-10-tools-using-powershell + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210326-functiondraft.md#how-to-install-the-azure-cli-windows-linux-macos-azure-shell + [6]: https://adamtheautomator.com/install-azure-cli/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210326-functiondraft.md#how-to-chain-multiple-powershell-commands-on-one-line + [8]: https://www.thomasmaurer.ch/2021/03/how-to-chain-multiple-powershell-commands-on-one-line/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210326-functiondraft.md#reddit-rpowershell---most-popular-weekly-post + [10]: https://www.reddit.com/r/PowerShell/comments/mbvlt6/poshgui_is_no_longer_free/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210326-functiondraft.md#tweet-of-the-week + [12]: https://twitter.com/sydneysmithreal/status/1375151909988802560 + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210326-functiondraft.md#youtube-foreach-parallel + [14]: https://www.youtube.com/watch?v=h7_271o9RuI diff --git a/content/articles/2021/03/last-call-for-summit-lightning-demos/index.md b/content/articles/2021/03/last-call-for-summit-lightning-demos/index.md new file mode 100644 index 000000000..e8436b393 --- /dev/null +++ b/content/articles/2021/03/last-call-for-summit-lightning-demos/index.md @@ -0,0 +1,44 @@ +--- +url: /articles/2021-03-15-last-call-for-summit-lightning-demos/ +title: Last Call for Summit Lightning Demos +authors: + - James Petty +date: "2021-03-15T17:36:34+00:00" +categories: + - Announcements + - Events + - PowerShell Summit +tags: + - PowerShell Summit + - Lightning Demos +aliases: + - /2021/03/last-call-for-summit-lightning-demos/ +--- + +**The CFP for Lightning demos will be closing 15 march at 11:59 Pacific Daylight Time** + + +This year, the PowerShell + DevOps Summit will be a virtual event. Submissions to present a Lightning Demo are still open? The PowerShell community is looking for you! You Can Do It! + +Lightning Demos are rapid-fire demonstrations of some sort of PowerShell use-case. They are geared towards speakers that aren’t prepared to give a full-length conference presentation but that have something they want to geek out about. Some details that were provided for the 2019 Summit can be found here. + +If you have a demonstration or two that you’d like to give that fits this description, please fill out the form here. Most demonstrations fall into the 7 to 10-minute range in length, but it’s fine if it’s a bit shorter. + +Note that these will be prerecorded demonstrations. You will not be presenting live; the organizers will be reaching out to schedule time to meet with selected individuals and record these demonstrations. They will ultimately be edited together into a final video, the exact format of which is to be determined. + +Some dates to keep in mind: + +March 15th, 2021 – final date to fill out the [submission form][1] +March 31st, 2021 – all demos must be scheduled and recorded +April 27th – April 29th, 2021 – PowerShell + DevOps Summit 2021 +Matt Bobke ([@mattbobke][2]) and Phil Bossman ([@Schlauge][3]) will be working together to organize the Lightning Demo portion of the event. Both Matt and Phil are very active PowerShell community members and leaders of PowerShell User Groups. Matt leads the SoCal PowerShell group. Phil leads the Research Triangle PowerShell User Group. + +Matt’s Testimonial + +I also want to share my thoughts about the Summit itself. The PowerShell + DevOps Summit is the only tech conference that I have ever personally attended; I attended in 2019 as an OnRamp-track scholarship recipient. I have never been surrounded by so many smart, passionate and kind people in my life. I learned so much, not just about PowerShell but about how to take charge of my career. Many speakers that we have hosted for our group, SoCal PowerShell, in the past will be speaking at the Summit. I highly encourage you to consider attending virtually and supporting the organization and the featured speakers. It is unfortunate that it will not be a physical conference this year, but I’m sure the content and the discussions will be just as great. + +Thank you, and we look forward to receiving your submissions! If you have any questions, please do not hesitate to reach out. + + [1]: https://forms.office.com/Pages/ResponsePage.aspx?id=11EApwjKOUO63m1xCi_2FuDegRwcZUJGp8jj-CjdL3xUNTlJV040TUFUUkoyQlZLUkY2SUE4NUNIVi4u + [2]: https://twitter.com/mattbobke + [3]: https://twitter.com/Schlauge diff --git a/content/articles/2021/03/summit-lightning-demos/index.md b/content/articles/2021/03/summit-lightning-demos/index.md new file mode 100644 index 000000000..c2d1fde0b --- /dev/null +++ b/content/articles/2021/03/summit-lightning-demos/index.md @@ -0,0 +1,39 @@ +--- +url: /articles/2021-03-02-summit-lightning-demos/ +title: Summit Lightning Demos +authors: + - James Petty +date: "2021-03-02T22:23:07+00:00" +categories: + - PowerShell Summit +tags: + - PowerShell Summit + - Lightning Demos +aliases: + - /2021/03/summit-lightning-demos/ +--- + +This year, the PowerShell + DevOps Summit will be a virtual event. Submissions to present a Lightning Demo are still open? The PowerShell community is looking for you! You Can Do It! + +Lightning Demos are rapid-fire demonstrations of some sort of PowerShell use-case. They are geared towards speakers that aren’t prepared to give a full-length conference presentation but that have something they want to geek out about. Some details that were provided for the 2019 Summit can be found here. + +If you have a demonstration or two that you’d like to give that fits this description, please fill out the form here. Most demonstrations fall into the 7 to 10-minute range in length, but it’s fine if it’s a bit shorter. + +Note that these will be prerecorded demonstrations. You will not be presenting live; the organizers will be reaching out to schedule time to meet with selected individuals and record these demonstrations. They will ultimately be edited together into a final video, the exact format of which is to be determined. + +Some dates to keep in mind: + +March 15th, 2021 – final date to fill out the [submission form][1] +March 31st, 2021 – all demos must be scheduled and recorded +April 27th – April 29th, 2021 – PowerShell + DevOps Summit 2021 +Matt Bobke ([@mattbobke][2]) and Phil Bossman ([@Schlauge][3]) will be working together to organize the Lightning Demo portion of the event. Both Matt and Phil are very active PowerShell community members and leaders of PowerShell User Groups. Matt leads the SoCal PowerShell group. Phil leads the Research Triangle PowerShell User Group. + +Matt’s Testimonial + +I also want to share my thoughts about the Summit itself. The PowerShell + DevOps Summit is the only tech conference that I have ever personally attended; I attended in 2019 as an OnRamp-track scholarship recipient. I have never been surrounded by so many smart, passionate and kind people in my life. I learned so much, not just about PowerShell but about how to take charge of my career. Many speakers that we have hosted for our group, SoCal PowerShell, in the past will be speaking at the Summit. I highly encourage you to consider attending virtually and supporting the organization and the featured speakers. It is unfortunate that it will not be a physical conference this year, but I’m sure the content and the discussions will be just as great. + +Thank you, and we look forward to receiving your submissions! If you have any questions, please do not hesitate to reach out. + + [1]: https://forms.office.com/Pages/ResponsePage.aspx?id=11EApwjKOUO63m1xCi_2FuDegRwcZUJGp8jj-CjdL3xUNTlJV040TUFUUkoyQlZLUkY2SUE4NUNIVi4u + [2]: https://twitter.com/mattbobke + [3]: https://twitter.com/Schlauge diff --git a/content/articles/2021/03/website-forum-updates/index.md b/content/articles/2021/03/website-forum-updates/index.md new file mode 100644 index 000000000..7e4749c3f --- /dev/null +++ b/content/articles/2021/03/website-forum-updates/index.md @@ -0,0 +1,22 @@ +--- +url: /articles/2021-03-02-website-forum-updates/ +title: Website & Forum Updates +authors: + - James Petty +date: "2021-03-02T22:20:17+00:00" +categories: + - Announcements +tags: + - Community + - Website +aliases: + - /2021/03/website-forum-updates/ +--- + +The migration is completed and we are happy to announce that the new forums are live and ready to go. If you had an existing powershell.org account you will need to reset your password. Once you have done that you can configure your logging with Twitter, Discord, GitHub, Microsoft 365, and Linkedin SSO options. + +The new link is but we will put in a redirect for powershell.org/forums as well. + +For instructions on how to do this, you can follow this post. + +If you have any feedback on the new software please let us know by posting in the Website and Forum Feedback section. diff --git a/content/articles/2021/04/_index.md b/content/articles/2021/04/_index.md new file mode 100644 index 000000000..f1c213110 --- /dev/null +++ b/content/articles/2021/04/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from April 2021" +description: "PowerShell.org Articles published in April 2021." +--- diff --git a/content/articles/2021/04/icymi-powershell-week-of-02-april-2021/index.md b/content/articles/2021/04/icymi-powershell-week-of-02-april-2021/index.md new file mode 100644 index 000000000..43a4311a4 --- /dev/null +++ b/content/articles/2021/04/icymi-powershell-week-of-02-april-2021/index.md @@ -0,0 +1,70 @@ +--- +url: /articles/2021-04-02-icymi-powershell-week-of-02-april-2021/ +title: "ICYMI: PowerShell Week of 02-April-2021" +authors: + - Robin Dadswell +date: "2021-04-02T15:06:22+00:00" +categories: + - In Case You Missed It + - PowerShell for Admins + - PowerShell for Developers + - Tips and Tricks +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/04/icymi-powershell-week-of-02-april-2021/ +--- + +Topics include help sections, Approved Verbs, Identity Management and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [][1][_PowerShell Scripts: Help yourself and others._][2] {.wp-block-heading} + +by Michaël Militoni on 28th March + +Learn how to write a help section in your scripts to help yourself and others. + +###### [][3][_Active Directory Reporting Tools Released_][4] {.wp-block-heading} + +by Jeff Hicks on 29th March + +Jeff shares the release of his AD Reporting Tools Module. + +###### [][5][_Using the new Granfeldt FIM/MIM PowerShell Management Features_][6] {.wp-block-heading} + +by Darren Robinson on 1st April + +This post looks at the latest release and using the new Granfeldt FIM/MIM PowerShell Management Features. + +###### [][7][_PowerShell Approved Verb Synonyms_][8] {.wp-block-heading} + +by Tommy Maynard on 2nd April + +Learn about Tommy's approved verb synonym function, to help you find the right verb for your situation. + +###### [][9][_Reddit /r/PowerShell - Most Popular Weekly Post_][10] {.wp-block-heading} + +u/krzydoug shares his script for getting an accurate last log on time in a multi DC domain. + +###### [][11][_Youtube: PSCommander - Command your desktop with PowerShell_][12] {.wp-block-heading} + +Adam shows you how to install and use PSCommander to manage and control aspects of your desktop. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210402-functiondraft.md#powershell-scripts-help-yourself-and-others + [2]: https://v-itpassion.be/2021/03/28/powershell-scripts-help-yourself-and-others/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210402-functiondraft.md#active-directory-reporting-tools-released + [4]: https://jdhitsolutions.com/blog/powershell/8259/active-directory-reporting-tools-released/#utm_source=feed&utm_medium=feed&utm_campaign=feed + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210402-functiondraft.md#using-the-new-granfeldt-fimmim-powershell-management-features + [6]: https://blog.darrenjrobinson.com/using-the-new-granfeldt-fim-mim-powershell-management-features/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210402-functiondraft.md#powershell-approved-verb-synonyms + [8]: https://tommymaynard.com/powershell-approved-verb-synonyms/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210402-functiondraft.md#reddit-rpowershell---most-popular-weekly-post + [10]: https://www.reddit.com/r/PowerShell/comments/mfvgwn/getlastlogon_get_accurate_last_logon_time_for_user/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210402-functiondraft.md#youtube-pscommander---command-your-desktop-with-powershell + [12]: https://www.youtube.com/watch?v=Pzjr88j8yL4 diff --git a/content/articles/2021/04/icymi-powershell-week-of-09-april-2021/index.md b/content/articles/2021/04/icymi-powershell-week-of-09-april-2021/index.md new file mode 100644 index 000000000..0946ae50f --- /dev/null +++ b/content/articles/2021/04/icymi-powershell-week-of-09-april-2021/index.md @@ -0,0 +1,85 @@ +--- +url: /articles/2021-04-09-icymi-powershell-week-of-09-april-2021/ +title: "ICYMI: PowerShell Week of 09-April-2021" +authors: + - Robin Dadswell +date: "2021-04-09T14:00:00+00:00" +categories: + - In Case You Missed It + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/04/icymi-powershell-week-of-09-april-2021/ +--- + +Topics include PowerShell profiles, Parameter defaults, ARM and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [][1][_Optimizing your $Profile_][2] {.wp-block-heading} + +by Steve Lee on 6th April + +Great blog by Steve on optimizing your PowerShell $Profile + +###### [][3][_How to Find Listening Ports with Netstat and PowerShell_][4] {.wp-block-heading} + +by Anthony Metcalf on 7th April + +In this tutorial, you will learn how to inspect listening ports and established TCP connections on your Windows computer with Netstat and the native PowerShell command Get-NetTCPConnection. + +###### [][5][_Make Defaults a Way of Life_][6] {.wp-block-heading} + +by Jeff Hicks on 8th April + +A small tip from Jeff on the ease that comes with an automatic variable $PSDefaultParameterValues. + +###### [][7][_Visualize and Document Azure Infrastructure with PowerShell_][8] {.wp-block-heading} + +by Prateek Singh on 8th April + +Prateek will walk us through on how we can visualize and document Azure infrastructure using PowerShell + +###### [][9][_Getting Started with PSArm_][10] {.wp-block-heading} + +by Ravikanth Chaganti on 5th April + +In the first part of this series, you learned about PSArm — a PowerShell embedded DSL — that you can use to declaratively define your Azure infrastructure and generate an ARM template. + +###### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} + +[u/][13][tbakerweb][14] creates a PowerShell script that checks Walgreens and CVS for COVID vaccine appointments. + +###### [][15][_Tweet of the Week_][16] {.wp-block-heading} + +Level up your #PowerShell debugging by seeing values of variables right inline in your @code editor! + +###### [][17][_Youtube: Transforming PowerShell experience with PSReadLine_][18] {.wp-block-heading} + +In this video John introduces PSReadLine as a way to transform your day-to-day PowerShell experience! + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210409-functiondraft.md#optimizing-your-profile + [2]: https://devblogs.microsoft.com/powershell/optimizing-your-profile/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210409-functiondraft.md#how-to-find-listening-ports-with-netstat-and-powershell + [4]: https://adamtheautomator.com/netstat-port-2/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210409-functiondraft.md#make-defaults-a-way-of-life + [6]: https://jdhitsolutions.com/blog/powershell/8293/make-defaults-a-way-of-life/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210409-functiondraft.md#visualize-and-document-azure-infrastructure-with-powershell + [8]: https://ridicurious.com/2021/04/08/visualize-and-document-azure-infrastructure-with-powershell/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210409-functiondraft.md#getting-started-with-psarm + [10]: https://www.powershellmagazine.com/2021/04/05/getting-started-with-psarm/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210409-functiondraft.md#reddit-rpowershell---most-popular-weekly-post + [12]: https://www.reddit.com/r/PowerShell/comments/mm6q86/covid19_vaccine_appointment_availability_checker/ + [13]: https://www.reddit.com/user/tbakerweb/%7Cu/tbakerweb%3E + [14]: https://www.reddit.com/user/tbakerweb/ + [15]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210409-functiondraft.md#tweet-of-the-week + [16]: https://twitter.com/TylerLeonhardt/status/1380382095445389315 + [17]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210409-functiondraft.md#youtube-transforming-powershell-experience-with-psreadline + [18]: https://www.youtube.com/watch?v=Q11sSltuTE0 diff --git a/content/articles/2021/04/icymi-powershell-week-of-16-april-2021/index.md b/content/articles/2021/04/icymi-powershell-week-of-16-april-2021/index.md new file mode 100644 index 000000000..ce8e8e255 --- /dev/null +++ b/content/articles/2021/04/icymi-powershell-week-of-16-april-2021/index.md @@ -0,0 +1,71 @@ +--- +url: /articles/2021-04-17-icymi-powershell-week-of-16-april-2021/ +title: "ICYMI: PowerShell Week of 16-April-2021" +authors: + - Robin Dadswell +date: "2021-04-17T09:21:24+00:00" +categories: + - In Case You Missed It + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/04/icymi-powershell-week-of-16-april-2021/ +--- + +Topics include Azure Functions, Default Parameters, AWS, Text to Speech and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [][1][_Getting Started with Azure Functions Tutorial [Example-Driven Guide]_][2] {.wp-block-heading} + +by Jeff Brown on 12th April + +Learn how to create an Azure Function that runs PowerShell code. + +###### [][3][_Text-To-Speech in PowerShell_][4] {.wp-block-heading} + +by Tommy Maynard on 12th April + +Using System.Speech to make a function that reads text. + +###### [][5][_More About PowerShell PSDefaultParameterValues_][6] {.wp-block-heading} + +by Jeff Hicks on 12th April + +Due to the positive feedback Jeff has a follow up to his PSDefaultParameterValues post from last week. + +###### [][7][_Automating with PowerShell: Deploying Unifi DHCP Options_][8] {.wp-block-heading} + +by Kelvin Tegelarr on 12th April + +Kelvin shares a quick post to help setup DHCP on Unifi. + +###### [][9][_AWS S3 server-side encryption_][10] {.wp-block-heading} + +by Alex Neihaus on 13th April + +Alex Neihaus shares his experience setting up AWS s3 standards for a client, and the script he created to help. + +###### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} + +u/4604Spartan117 is just getting started with PowerShell and shares his first script. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210416-functiondraft.md#getting-started-with-azure-functions-tutorial-example-driven-guide + [2]: https://adamtheautomator.com/azure-functions-tutorial/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210416-functiondraft.md#text-to-speech-in-powershell + [4]: https://tommymaynard.com/text-to-speech-in-powershell/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210416-functiondraft.md#more-about-powershell-psdefaultparametervalues + [6]: https://jdhitsolutions.com/blog/powershell/8307/more-about-powershell-psdefaultparametervalues/#utm_source=feed&utm_medium=feed&utm_campaign=feed + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210416-functiondraft.md#automating-with-powershell-deploying-unifi-dhcp-options + [8]: https://www.cyberdrain.com/automating-with-powershell-deploying-unifi-dhcp-options/?utm_source=rss&utm_medium=rss&utm_campaign=automating-with-powershell-deploying-unifi-dhcp-options + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210416-functiondraft.md#aws-s3-server-side-encryption + [10]: https://www.yobyot.com/aws/encrypted-aws-s3-buckets-server-side-encryption/2021/04/13/ + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210416-functiondraft.md#reddit-rpowershell---most-popular-weekly-post + [12]: https://www.reddit.com/r/PowerShell/comments/mofz3l/i_made_my_first_windows_powershell_script/ diff --git a/content/articles/2021/04/icymi-powershell-week-of-23-april-2021/index.md b/content/articles/2021/04/icymi-powershell-week-of-23-april-2021/index.md new file mode 100644 index 000000000..7ade93974 --- /dev/null +++ b/content/articles/2021/04/icymi-powershell-week-of-23-april-2021/index.md @@ -0,0 +1,75 @@ +--- +url: /articles/2021-04-23-icymi-powershell-week-of-23-april-2021/ +title: "ICYMI: PowerShell Week of 23-April-2021" +authors: + - Robin Dadswell +date: "2021-04-23T19:57:14+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/04/icymi-powershell-week-of-23-april-2021/ +--- + +Topics include Script signing, Item Insights Security via Graph, Microsoft Learn and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [][1][_Unlocking PowerShell Secrets_][2] {.wp-block-heading} + +by Jeff Hicks on 19th April + +Using Secrets Management modules from Microsoft to handle secrets + +###### [][3][_How to Sign a PowerShell Script (And Run It)_][4] {.wp-block-heading} + +by June Castillote on 22nd April + +Do you need to ensure that nobody makes modifications to your scripts and pass them as the original? If so, then you need to learn how to sign PowerShell scripts. Signing adds the publisher’s identity to the script so that users can decide whether to trust the script’s source in this article, learn how to ensure that only trusted scripts are run in your environment by learning how to sign PowerShell scripts. + +###### [][5][_Using 1Password with PowerShell_][6] {.wp-block-heading} + +by Darren J Robinson on 23rd April + +Darren shows a PowerShell Module which is a wrapper for the 1Password CLI that allows full use of 1Password with PowerShell. + +###### [][7][_Altering Item Insights Security In Microsoft Graph Using PowerShell Commands_][8] {.wp-block-heading} + +by Dipen Shah on 23rd April + +Dipen Shah writes in the bloh on altering Item Insights Security In Microsoft Graph Using PowerShell Commands + +###### [][9][_Getting started and Learn PowerShell on Microsoft Learn!_][10] {.wp-block-heading} + +by Thomas Maurer on 23rd April + +Wanting to get started with PowerShell, well find out how with this informative post on the new Microsoft Learn modules to help you with exactly that + +###### [][11][_Reddit /r/PowerShell - Most Popular Weekly Post_][12] {.wp-block-heading} + +Be nice to tech workers and watch what you put into someone else's script as input. + +###### [][13][_Youtube: PowerShell File cannot be loaded because running scripts is disabled on this system_][14] {.wp-block-heading} + +If PowerShell throws up an error message – File cannot be loaded because running scripts is disabled on this system, then you need to enable script running on your Windows 10 computer. The cause of this error comes to the fact that your user account does not have enough permissions to execute that script. This does not mean that you need to have an Administrator level permissions, it also means that you also need to be unrestricted to run these type of PowerShell scripts or cmdlets. + + [1]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210423-functiondraft.md#unlocking-powershell-secrets + [2]: https://jdhitsolutions.com/blog/powershell/8334/unlocking-powershell-secrets/ + [3]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210423-functiondraft.md#how-to-sign-a-powershell-script-and-run-it + [4]: https://adamtheautomator.com/how-to-sign-powershell-script/ + [5]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210423-functiondraft.md#using-1password-with-powershell + [6]: https://blog.darrenjrobinson.com/using-1password-with-powershell/ + [7]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210423-functiondraft.md#altering-item-insights-security-in-microsoft-graph-using-powershell-commands + [8]: https://www.c-sharpcorner.com/article/altering-item-insights-security-in-microsoft-graph/ + [9]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210423-functiondraft.md#getting-started-and-learn-powershell-on-microsoft-learn + [10]: https://techcommunity.microsoft.com/t5/itops-talk-blog/getting-started-and-learn-powershell-on-microsoft-learn/ba-p/2282347 + [11]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210423-functiondraft.md#reddit-rpowershell---most-popular-weekly-post + [12]: https://www.reddit.com/r/PowerShell/comments/mvl4kp/your_stupid_powershell_script_is_broken/ + [13]: https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210423-functiondraft.md#youtube-powershell-file-cannot-be-loaded-because-running-scripts-is-disabled-on-this-system + [14]: https://www.youtube.com/watch?v=XMyvU6chht0 diff --git a/content/articles/2021/04/icymi-powershell-week-of-30-april-2021/index.md b/content/articles/2021/04/icymi-powershell-week-of-30-april-2021/index.md new file mode 100644 index 000000000..7be48148c --- /dev/null +++ b/content/articles/2021/04/icymi-powershell-week-of-30-april-2021/index.md @@ -0,0 +1,58 @@ +--- +url: /articles/2021-04-30-icymi-powershell-week-of-30-april-2021/ +title: "ICYMI: PowerShell Week of 30-April-2021" +authors: + - Robin Dadswell +date: "2021-04-30T14:00:51+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/04/icymi-powershell-week-of-30-april-2021/ +--- + +Topics include SendAs, Intune, Hyper-V, Secrets Management and more... + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + + + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210430-functiondraft.md#automating-with-powershell-deploying-send-as-alias-for-m365)[*Automating with PowerShell: Deploying Send as Alias for M365*](https://www.cyberdrain.com/automating-with-powershell-deploying-send-as-alias-for-m365/?utm_source=rss&utm_medium=rss&utm_campaign=automating-with-powershell-deploying-send-as-alias-for-m365) + +by Kelvin Tegelaar on 29th April + +How to Deploy Send as Alias for M365 using PowerShell + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210430-functiondraft.md#use-powershell-and-ms-graph-to-locate-an-intune-device)[*Use PowerShell and MS Graph to locate an Intune device*](https://www.systanddeploy.com/2021/04/use-powershell-and-ms-graph-to-locate.html) + +by Damien Van Robaeys on 29th April + +In this post Damien shows you how to use PowerShell and MS Graph to locate an Intune device. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210430-functiondraft.md#azure-visualizer-powershell-module-v112-released)[*Azure Visualizer PowerShell module v1.1.2 released!*](https://ridicurious.com/2021/04/29/azure-visualizer-powershell-module-v1-1-2-released/) + +by Prateek Sing on 30th April + +Azure Visualizer aka 'AzViz' - PowerShell module to automatically generate Azure resource topology diagrams by just typing a PowerShell cmdlet and passing the name of one or more Azure Resource Group(s). + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210430-functiondraft.md#how-to-set-up-hyper-v-nested-virtualization-step-by-step)[*How to Set Up Hyper-V Nested Virtualization [Step-by-Step]*](https://adamtheautomator.com/nested-virtualization/) + +by June Castillote on 30th April + +Do you need to set up a lab that needs multiple hosts? Or test an application in an isolated environment? Hyper-V nested virtualization could be the right setup you need. Hyper-V is a built-in feature or role to Windows you only need to enable to start using. And it’s free! You will learn how to set up Hyper-V to enable nested virtualization using PowerShell in the post. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210430-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/n0qmc1/i_created_a_powershell_script_for_our_hr/) + +u/ZebulaJams created a script for his HR Dept and sharing with us. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210430-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/PSHSummit/status/1387896980718956548) + +PowerShell + DevOps Global summit 2022 Announcement! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210430-functiondraft.md#youtube-new-powershell-secrets-management-module---easily-use-any-secret-provider)[*Youtube: New PowerShell Secrets Management Module - Easily use any secret provider*](https://www.youtube.com/watch?v=7b0KGVI4VLY) + +In this video John explores a solution to the problem of handling secrets in scripts and having to use secret implementation specific code. The new Secrets Management module solves this. diff --git a/content/articles/2021/04/live-shows-powershell-devops-global-summit/index.md b/content/articles/2021/04/live-shows-powershell-devops-global-summit/index.md new file mode 100644 index 000000000..0fcba2760 --- /dev/null +++ b/content/articles/2021/04/live-shows-powershell-devops-global-summit/index.md @@ -0,0 +1,64 @@ +--- +url: /articles/2021-04-26-live-shows-powershell-devops-global-summit/ +title: Live Shows – PowerShell + DevOps Global Summit +authors: + - James Petty +date: "2021-04-26T19:11:09+00:00" +categories: + - Announcements +tags: + - PowerShell Summit + - Community +aliases: + - /2021/04/live-shows-powershell-devops-global-summit/ +--- + +#### We will be producing live shows twice a day during Summit. The first show will be at 6:20 AM PDTand the second show will be at 3:00 PM PDT. The links will be available in the theater tab of the event. Make sure to add them to your agenda as well! + +Did we mention there will be giveaways during each of these live shows? + +## April 27 -  6:20 AM PDT / 9:20 AM EDT + +Join the DevOps collective as we kick off the start of the PowerShell summit. We'll then discuss the Iron Scripter challenge built for PowerShell Summit.  **Our guests will be Missy Janusko, Warren Frame, James Petty, and Jeff Hicks**. + +Session Hosts: Mike Kanakos and Steven Judd + + +## April 27 -  3:00 PM PDT / 6:00 PM EDT + +Join us for a recap of the day's sessions and get a visit from **Jason Helmick and Jeffrey Snover**! Jason and Jeffrey will **talk about the state of PowerShell and automation in general**. + +Session Hosts: Mike Kanakos and Steven Judd + + +* * * + + +## April 28 -  6:20 AM PDT / 9:20 AM EDT + +Join us as we discuss the day's schedule and welcome two well know community members: **Ashley McGlone and Chrissy LeMaire** **to talk about community** and presenting at Summit. We'll wrap up with a visit from **Matt Bobke and Phil Bossman to talk about the lightning demo sessions** that are available on-demand for all summit attendees. + +Session Hosts: Mike Kanakos and Steven Judd + + +## April 28 -  3:00 PM PDT / 6:00 PM EDT + +Join us for a recap of the day's sessions and get a visit from the PowerShell team! **Joey Aiello, Steve Lee, and Sydney Smith will stop by to talk about the Microsoft sessions at this year's summit and what's going on in the world of PowerShell**. + +Session Hosts: Mike Kanakos and Steven Judd + + +* * * + +## April 29 -  6:20 AM PDT / 9:20 AM EDT + +Join us as we discuss the day's schedule and welcome **Michael Bender and Fernando Tomlinson to the live show to discuss career, certifications, and being a continual learner in IT.** We then follow that up with a visit from **Brandon Olin and Andrew Pla to discuss what is the Automation Summit** that is happening in November. + +Session Hosts: Mike Kanakos and Steven Judd + + +## April 29 -  3:00 PM PDT / 6:00 PM EDT + +It's time to say goodbye to another year of the PowerShell summit. **We'll recap the event and welcome Damien Caro and Danny Maertens from Microsoft to talk about PowerShell and Azure!** A that it will, unfortunately, be time to say goodbye. But as one great event ends, it's time to think about the next great event: Automation Summit, occurring in November! James Petty will help us say goodbye and also give some early details about Automation Summit. + +Session Hosts: Mike Kanakos and Steven Judd diff --git a/content/articles/2021/05/_index.md b/content/articles/2021/05/_index.md new file mode 100644 index 000000000..d53a6289a --- /dev/null +++ b/content/articles/2021/05/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from May 2021" +description: "PowerShell.org Articles published in May 2021." +--- diff --git a/content/articles/2021/05/automation-summit/index.md b/content/articles/2021/05/automation-summit/index.md new file mode 100644 index 000000000..44e38743e --- /dev/null +++ b/content/articles/2021/05/automation-summit/index.md @@ -0,0 +1,30 @@ +--- +url: /articles/2021-05-05-automation-summit/ +title: Meet the Automation Summit team +authors: + - James Petty +date: "2021-05-05T07:00:33+00:00" +categories: + - Announcements + - DevOps + - Events +tags: + - Automation Summit +legacy_featured_image: /wp-content/uploads/2021/05/FullLogoWithDatedefault.png +aliases: + - /2021/05/meet-the-automation-summit-team/ +--- + +We would like to introduce you to the core team for the Automation + DevOps Summit which will be held November 1-3 at the Renaissance Hotel in downtown Nashville TN. + +More information will be posted as it becomes available. + +## The Team + +- **Brad Wyatt** — Communications / Website — [Twitter](https://twitter.com/thelazyadministrator) +- **Andrew Pla** — Content — [Twitter](https://twitter.com/AndrewPlaTech) +- **Brandon Olin** — Content — [Twitter](https://twitter.com/devblackops) +- **Bonnie Runimas** — Logistics — [Twitter](https://twitter.com/socavalier) +- **James Petty** — CEO, The DevOps Collective Inc. — [Twitter](https://twitter.com/psjamesp) + +We are always looking for dedicated volunteers to help make our events run as smoothly as possible. If you are interested in joining the team, [reach out to us](https://powershell.org/contact/) and we will get in touch with you. diff --git a/content/articles/2021/05/icymi-powershell-week-of-21-may-2021/index.md b/content/articles/2021/05/icymi-powershell-week-of-21-may-2021/index.md new file mode 100644 index 000000000..70663fb51 --- /dev/null +++ b/content/articles/2021/05/icymi-powershell-week-of-21-may-2021/index.md @@ -0,0 +1,54 @@ +--- +url: /articles/2021-05-21-icymi-powershell-week-of-21-may-2021/ +title: "ICYMI: PowerShell Week of 21-May-2021" +authors: + - Robin Dadswell +date: "2021-05-21T20:33:47+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/05/icymi-powershell-week-of-21-may-2021/ +--- + +Topics include Pester, AD, Chrome and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210521-functiondraft.md#pester-5-and-group-object---best-friends)[*Pester 5 and Group-Object - Best Friends*](https://nocolumnname.blog/2021/05/17/pester-5-and-group-object-best-friends/) + +by Shane O'Neill on 17th May + +Let's talk about testing and the differences with Pester 5 + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210521-functiondraft.md#custom-csv-import-with-powershell)[*Custom CSV Import with PowerShell*](https://jdhitsolutions.com/blog/powershell/8409/custom-csv-import-with-powershell/#utm_source=feed&utm_medium=feed&utm_campaign=feed) + +by Jeff Hicks on 18th May + +Want to do more with the native Import-Csv command. Want to keep the original functionality, but want it to do more. Here’s how! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210521-functiondraft.md#how-to-manage-active-directory-sites-with-powershell)[*How to Manage Active Directory Sites with PowerShell*](https://adamtheautomator.com/active-directory-site/) + +by Anthony Metcalf on 18th May + +In this tutorial, you will learn how to manage AD sites using PowerShell, so you never have to open a Windows MMC ever again! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210521-functiondraft.md#automating-with-powershell-unifi-powershell-module-and-creating-network-maps)[*Automating with PowerShell: Unifi PowerShell module and creating network maps*](https://www.cyberdrain.com/automating-with-powershell-unifi-powershell-module-and-creating-network-maps/?utm_source=rss&utm_medium=rss&utm_campaign=automating-with-powershell-unifi-powershell-module-and-creating-network-maps) + +by Kelvin Tegelaar on 18th May + +Learn a little bit about PowerShell maps and how to use them with Unifi netowrking + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210521-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/theJasonHelmick/status/1395456852306001921) + +PlatyPS is back. Announcing PlatyPS 2.0.0-Preview1 + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210521-functiondraft.md#youtube-chrome-automation-using-powershell)[*Youtube: Chrome automation using PowerShell*](https://www.youtube.com/watch?v=ZZjp6zIgkLU) + +This video is on chrome automation with PowerShell. The video explains everything step by step and also discusses how to identify a web element. diff --git a/content/articles/2021/05/icymi-powershell-week-of-28-may-2021/index.md b/content/articles/2021/05/icymi-powershell-week-of-28-may-2021/index.md new file mode 100644 index 000000000..1ff188cb5 --- /dev/null +++ b/content/articles/2021/05/icymi-powershell-week-of-28-may-2021/index.md @@ -0,0 +1,58 @@ +--- +url: /articles/2021-05-28-icymi-powershell-week-of-28-may-2021/ +title: "ICYMI: PowerShell Week of 28-May-2021" +authors: + - Robin Dadswell +date: "2021-05-28T18:20:18+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/05/icymi-powershell-week-of-28-may-2021/ +--- + +Topics include PowerBI SQL, Exchange online and more + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210528-functiondraft.md#hiding-taskbar-search-with-powershell)[*Hiding TaskBar Search with PowerShell*](https://jdhitsolutions.com/blog/powershell/8424/hiding-taskbar-search-with-powershell/) + +by Jeff Hicks on 21st May + +Here are some PowerShell functions that will hide and unhide the Search box in a Windows 10 desktop. Yes, there are manual steps to hide this feature, but I’m automating here! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210528-functiondraft.md#monitoring-with-powershell-monitoring-oauth-application-changes)[*Monitoring with PowerShell: Monitoring oAuth application changes*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-oauth-application-changes/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-oauth-application-changes) + +by Kelvin Tegelaar on 25th May + +Sometimes you approve an application that wants too many permissions or sometimes there’s an admin that is not 100% sure on what they are doing. This blog helps you cover those, or cover situations in which you cannot disable app consent by normal users. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210528-functiondraft.md#how-to-create-an-azure-sql-database-with-powershell)[*How to Create an Azure SQL Database with PowerShell*](https://adamtheautomator.com/create-azure-sql-database/) + +by Gijs Reijn on 25th May + +If you need to make changes to a SQL database, you could open SQL Server Management Studio, click around a little bit and make it happen. But what happens when you need to create an Azure SQL database 10 or 100 times or in some automation script? You need to use PowerShell! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210528-functiondraft.md#most-useful-powershell-cmdlets-to-manage-exchange-online-mailboxes)[*Most Useful PowerShell Cmdlets to Manage Exchange Online Mailboxes*](https://o365reports.com/2021/05/25/most-useful-powershell-cmdlets-to-manage-exchange-online-mailboxes/) + +by Unknown on 25th May + +This blog lists the top 15 use-cases to monitor your Exchange Online environment in a better way. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210528-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/njdt6n/i_like_making_dumb_little_games_in_powershell_my/) + +Redditor shares his script for hangman in PowerShell + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210528-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1397971127750828038%3E) + +#PowerShell 7.2-preview.6 is out! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210528-functiondraft.md#youtube-refresh-power-bi-dataset-using-rest-api--powershell)[*Youtube: Refresh Power BI Dataset Using Rest API & PowerShell*](https://www.youtube.com/watch?v=XtVzBNwQYFk) + +Amazing cool tricks to refresh Power BI Deataset using Rest API & Power Shell diff --git a/content/articles/2021/06/_index.md b/content/articles/2021/06/_index.md new file mode 100644 index 000000000..1ddac1f0a --- /dev/null +++ b/content/articles/2021/06/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from June 2021" +description: "PowerShell.org Articles published in June 2021." +--- diff --git a/content/articles/2021/06/icymi-powershell-week-of-04-june-2021/index.md b/content/articles/2021/06/icymi-powershell-week-of-04-june-2021/index.md new file mode 100644 index 000000000..267345e83 --- /dev/null +++ b/content/articles/2021/06/icymi-powershell-week-of-04-june-2021/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2021-06-04-icymi-powershell-week-of-04-june-2021/ +title: "ICYMI: PowerShell Week of 04-June-2021" +authors: + - Robin Dadswell +date: "2021-06-04T20:21:02+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/06/icymi-powershell-week-of-04-june-2021/ +--- + +Topics include AD, Azure AD,  Debugging and more... + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210604-functiondraft.md#how-to-reset-an-active-directory-password-with-powershell)[*How to Reset an Active Directory Password with PowerShell*](https://adamtheautomator.com/set-adaccountpassword/) + +by Chaitanya on 31st May + +The GUI is not always an efficient tool, especially when resetting multiple user passwords. Luckily, you have an alternative, which is the Set-ADAccountPassword PowerShell cmdlet. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210604-functiondraft.md#subscribing-to-azure-ad-change-notifications-with-powershell)[*Subscribing to Azure AD Change Notifications with PowerShell*](https://blog.darrenjrobinson.com/subscribing-to-azure-ad-change-notifications-with-powershell/) + +by Darren Robinson on 1st June + +This post details an example solution to get started with Azure AD Change Notifications. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210604-functiondraft.md#powershell-move-item-examples-for-file-folder-management)[*PowerShell Move-Item examples for file, folder management*](https://searchwindowsserver.techtarget.com/tutorial/PowerShell-Move-Item-examples-for-file-folder-management) + +by Anthony Howell on 2nd June + +Anthony highlights several ways with examples to use Move-Item to keep your folders and files organized. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210604-functiondraft.md#automate-and-manage-azure-ad-tasks-at-scale-with-the-microsoft-graph-powershell-sdk)[*Automate and manage Azure AD tasks at scale with the Microsoft Graph PowerShell SDK*](https://techcommunity.microsoft.com/t5/azure-active-directory-identity/automate-and-manage-azure-ad-tasks-at-scale-with-the-microsoft/ba-p/1942489) + +by Alex Simons on 2nd June + +Alex announces Azure AD APIs added to Microsoft graph. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210604-functiondraft.md#how-to-set-up-an-azure-file-share-with-on-prem-ad-authentication)[*How to Set Up an Azure File Share with On-Prem AD Authentication*](https://adamtheautomator.com/how-to-set-up-an-azure-file-share-with-on-prem-ad-authentication/) + +by Ryan Kowalewski on 2nd June + +In this tutorial, you’ll learn how to set up an Azure file share backed by a storage account that can authenticate user access to the share based on on-prem AD user accounts. You’ll do all this using PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210604-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/noy1t6/this_is_a_collection_of_useful_scripts_from/) + +User put together a GitHub repository of many useful scripts they have found. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210604-functiondraft.md#youtube-debug-powershell-with-and-without-vs-code)[*Youtube: Debug PowerShell with and without VS Code*](https://youtu.be/2cpU82i6YPU) + +In this video John will walk through how to debug PowerShell code using VS Code native features and the native PowerShell debugger. diff --git a/content/articles/2021/06/icymi-powershell-week-of-11-june-2021/index.md b/content/articles/2021/06/icymi-powershell-week-of-11-june-2021/index.md new file mode 100644 index 000000000..c57d76ddf --- /dev/null +++ b/content/articles/2021/06/icymi-powershell-week-of-11-june-2021/index.md @@ -0,0 +1,50 @@ +--- +url: /articles/2021-06-11-icymi-powershell-week-of-11-june-2021/ +title: "ICYMI: PowerShell Week of 11-June-2021" +authors: + - Robin Dadswell +date: "2021-06-11T16:34:02+00:00" +categories: + - In Case You Missed It + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/06/icymi-powershell-week-of-11-june-2021/ +--- + +Topics include BluebirdPS, Scripting Challenge, Wifi and WMI + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210611-functiondraft.md#your-goto-guide-for-working-with-windows-wmi-events-and-powershell)[*Your Goto Guide for Working with Windows WMI Events and PowerShell*](https://adamtheautomator.com/your-goto-guide-for-working-with-windows-wmi-events-and-powershell/) + +by Faris Malaeb on 7th June + +Did you know you can monitor for just about every action in Windows? No, you don’t need to buy some fancy software. The infrastructure monitors events like when services start and stop when someone creates a file or folder and more is already there via Windows Management Instrumentation (WMI) events. Find out more about working with WMI and PowerShell in this blog + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210611-functiondraft.md#how-to-show-all-known-wi-fi-network-ssids-and-passphrases-with-powershell)[*How to show all known Wi-Fi network SSIDs and Passphrases with Powershell*](https://www.scriptinglibrary.com/languages/powershell/how-to-show-all-known-wi-fi-network-ssids-and-passphrases-with-powershell/) + +by Paolo Frigo on 8th June + +Format netsh output in a more friendly manner with PowerShell + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210611-functiondraft.md#psfollowfriday-tweet-with-bluebirdps)[*#PSFollowFriday Tweet with BluebirdPS*](https://powershell.anovelidea.org/powershell/psfollowfriday-tweet-with-bluebirdps/) + +by Dave Carroll on 9th June + +Learn how to use BluebirdPS to generate and publish a #PSFollowFriday Tweet. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210611-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/thedavecarroll/status/1401209874231566336) + +#BlueBirdPS release news + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210611-functiondraft.md#youtube-powershell-scripting-challenges-jeff-hicks)[*Youtube: PowerShell Scripting Challenges (Jeff Hicks)*](https://www.youtube.com/watch?v=SmW2TFS--mU) + +Think you’re good with code? Join us for a fun night of scripting challenges that range from simple to challenging! Our guest speaker for the evening is the author and creator of the “Month of Lunches” series of PowerShell learning books, Jeff Hicks! diff --git a/content/articles/2021/06/icymi-powershell-week-of-18-june-2021/index.md b/content/articles/2021/06/icymi-powershell-week-of-18-june-2021/index.md new file mode 100644 index 000000000..f4daaa748 --- /dev/null +++ b/content/articles/2021/06/icymi-powershell-week-of-18-june-2021/index.md @@ -0,0 +1,66 @@ +--- +url: /articles/2021-06-18-icymi-powershell-week-of-18-june-2021/ +title: "ICYMI: PowerShell Week of 18-June-2021" +authors: + - Robin Dadswell +date: "2021-06-18T15:15:42+00:00" +categories: + - In Case You Missed It + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/06/icymi-powershell-week-of-18-june-2021/ +--- + +Topics include Password Auditing, PowerShell 7.2, WiFi Password Recovery and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210618-functiondraft.md#how-to-show-all-known-wi-fi-network-ssids-and-passphrases-with-powershell)[*How to show all known Wi-Fi network SSIDs and Passphrases with Powershell*](https://www.scriptinglibrary.com/languages/powershell/how-to-show-all-known-wi-fi-network-ssids-and-passphrases-with-powershell/) + +by Paolo Frigo on 8th June + +Paolo simply needed the list of all the known wi-fi networks presented in a key-value pair format, so he wrote this script a few months ago and took the opportunity to write an article about it. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210618-functiondraft.md#audit-your-active-directory-user-passwords-against-haveibeenpwnedcom)[*Audit your Active Directory user passwords against haveibeenpwned.com*](https://doitpsway.com/audit-your-active-directory-user-passwords-against-haveibeenpwnedcom-safely-using-powershell) + +by Ondrej Sebela on 13th June + +In this article, Andrew will show you, how to easily and securely check, whether some of your users are using leaked passwords with PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210618-functiondraft.md#monitoring-with-powershell-predict-when-disk-is-full)[*Monitoring with PowerShell: Predict when disk is full*](https://www.cyberdrain.com/monitoring-with-powershell-predict-when-disk-is-full/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-predict-when-disk-is-full) + +by Kelvin Tegelaar on 15th June + +Learn how to start doing predictive monitoring with PowerShell in this article + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210618-functiondraft.md#how-to-work-with-rest-apis-and-powershells-invoke-restmethod)[*How to Work with REST APIs and PowerShell’s Invoke-RestMethod*](https://adamtheautomator.com/invoke-restmethod/?utm_source=powershellorg&utm_medium=icymi) + +by Ryan Kowalewskik on 18th June + +Do you often access application programming interfaces (APIs) using PowerShell? Maybe you want to but don’t know where to start? Whether you’re a PowerShell pro or just starting, this tutorial has you covered with a built-in PowerShell cmdlet that interacts with APIs called Invoke-RestMethod. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210618-functiondraft.md#preview-updating-powershell-72-with-microsoft-update)[*Preview updating PowerShell 7.2 with Microsoft Update*](https://devblogs.microsoft.com/powershell/preview-updating-powershell-7-2-with-microsoft-update/%3E) + +by Travis Plunk on 18th June + +Update PowerShell using Microsoft updates coming soon - find out more about it here + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210618-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/o1d9z5/ipconfig_all_posh_version/) + +u/richie65 shares his module for a PowerShell version of ipconfig. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210618-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/JustinWGrote/status/1405772902243332109?s=20) + +A look at Justin's @code native Pester test adapter + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210618-functiondraft.md#youtube-i-need-coffee-episode-56---get-bc-version-from-docker-container-using-powershell)[*Youtube: I Need Coffee: Episode 56 - Get BC Version from Docker Container using PowerShell*](https://www.youtube.com/watch?v=ejud9xuG6o0) + +Get BC Version from Docker Container using PowerShell diff --git a/content/articles/2021/07/_index.md b/content/articles/2021/07/_index.md new file mode 100644 index 000000000..899215c9b --- /dev/null +++ b/content/articles/2021/07/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from July 2021" +description: "PowerShell.org Articles published in July 2021." +--- diff --git a/content/articles/2021/07/icymi-powershell-week-of-02-july-2021/index.md b/content/articles/2021/07/icymi-powershell-week-of-02-july-2021/index.md new file mode 100644 index 000000000..79b6091c5 --- /dev/null +++ b/content/articles/2021/07/icymi-powershell-week-of-02-july-2021/index.md @@ -0,0 +1,56 @@ +--- +url: /articles/2021-07-02-icymi-powershell-week-of-02-july-2021/ +title: "ICYMI: PowerShell Week of 02-July-2021" +authors: + - Robin Dadswell +date: "2021-07-02T18:06:05+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/07/icymi-powershell-week-of-02-july-2021/ +--- + +Topics include Monitoring Azure, Filtering objects, Generating SQL reports and more... + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210702-functiondraft.md#from-sql-to-excel-with-powershell)[*From SQL to Excel with PowerShell*](https://sqladm.in/posts/from-sql-to-excel-with-powershell/) + +by Jeff Hill on 30th June + +Learn to pull data from SQL and generate reports for your manager using PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210702-functiondraft.md#error-0x800700c1-when-launching-cprogram-filespowershell7pwshexe)[*[error 0x800700c1 when launching `C:\Program Files\PowerShell\7\pwsh.exe’]*](https://blog.darrenjrobinson.com/error-0x800700c1-when-launching-cprogram-filespowershell7pwsh-exe/) + +by Darren Robinson on 30th June + +How to fix an issue after updating Windows Teminal. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210702-functiondraft.md#monitoring-with-powershell-monitoring-azure-app-proxies)[*Monitoring with PowerShell: Monitoring Azure App Proxies*](https://www.cyberdrain.com/monitoring-with-powershell-monitoring-azure-app-proxies/?utm_source=rss&utm_medium=rss&utm_campaign=monitoring-with-powershell-monitoring-azure-app-proxies) + +by Kelvin Tegelaar on 1st July + +Following up on a previous Azure App Proxy post, learn how to monitor your Azure App for up/down status. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210702-functiondraft.md#filtering-for-unique-objects-in-powershell)[*Filtering for Unique Objects in PowerShell*](https://jdhitsolutions.com/blog/powershell/8465/filtering-powershell-unique-objects/#utm_source=feed&utm_medium=feed&utm_campaign=feed) + +by Jeff Hicks on 1st July + +There is more to filtering unique objects than you would think. In Jeff's blog post he dives into finding unique objects in multiple ways. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210702-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/ob3fxw/just_passed_250000_views_of_lesson_1_of_the/) + +John Savill posted a thanks to the community for the support of his master class on YouTube. videos. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210702-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/cl/status/1410501417077456900) + +Chirssy got some PowerShell code auto created via Github AutoPilot! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210702-functiondraft.md#youtube-workflows-tutorial-execute-on-premise-powershell-with-okta-workflows)[*Youtube: Workflows Tutorial: Execute On-Premise PowerShell with Okta Workflows*](https://youtu.be/cbcNCzARDxI) + +Learn to execute PowerShell code with Okta Workflows. diff --git a/content/articles/2021/07/icymi-powershell-week-of-09-july-2021/index.md b/content/articles/2021/07/icymi-powershell-week-of-09-july-2021/index.md new file mode 100644 index 000000000..9d1bb8f5f --- /dev/null +++ b/content/articles/2021/07/icymi-powershell-week-of-09-july-2021/index.md @@ -0,0 +1,54 @@ +--- +url: /articles/2021-07-09-icymi-powershell-week-of-09-july-2021/ +title: "ICYMI: PowerShell Week of 09-July-2021" +authors: + - Robin Dadswell +date: "2021-07-09T20:00:25+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/07/icymi-powershell-week-of-09-july-2021/ +--- + +Topics include Exchange Migrations, APIs, PrintNightmare and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210709-functiondraft.md#migrating-mailboxes-to-exchange-online-with-powershell--part-2)[*Migrating Mailboxes to Exchange Online with PowerShell – Part 2*](https://www.scriptrunner.com/en/blog/migrating-mailboxes-to-exchange-online-with-powershell-part-2?utm_content=172171349&utm_medium=social&utm_source=twitter&hss_channel=tw-2485091353) + +by Damian Scoles on 6th July + +In the first part of this series, Migrating Mailboxes to Exchange Online with PowerShell – Part 1, we covered how to prepare for a mailbox migration, which included a series of preflight checks for mailbox moves. Now we move on to the PowerShell code for moving mailboxes from Exchange Server to Exchange Online. We will walk through the various Move Request cmdlets and how we can use these to perform our main migration tasks. On to the code! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210709-functiondraft.md#add-credentials-to-powershell-functions)[*Add Credentials To PowerShell Functions*](https://duffney.io/addcredentialstopowershellfunctions/) + +by Josh Duffney on 6th July + +In this blog post, you'll learn how to add credential parameters to PowerShell functions. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210709-functiondraft.md#build-a-powershell-api-with-pode)[*Build a Powershell API with Pode*](https://scomnewbie.github.io/posts/apiwithpode/) + +by Francois LEON on 7th July + +cross platforms Powershell module to help you to create websites, schedulers API and more… + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210709-functiondraft.md#how-to-hide-teams-enabled-groups-from-exchange-online)[*How to Hide Teams-Enabled Groups from Exchange Online*](https://office365itpros.com/2021/07/08/how-hide-teams-enabled-groups-from-exchange-online/) + +by Tony Redmond on 8th July + +Microsoft 365 Groups created for new teams were hidden from Exchange clients (like OWA) and Exchange address lists (like the GAL). This was accomplished by setting the HiddenFromExchangeClientsEnabled and HiddenFromAddressListsEnabled properties of the groups to False using PowerShell. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210709-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/odrivg/new_vscode_extension_blockman_to_highlight_nested/) + +Redditor shares his extension called Blockman, check it out as it is a great way to help organize your code blocks. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210709-functiondraft.md#youtube-printnightmare-rce---temporary-fix-using-acls---new-cve-number---new-powershell-poc)[*Youtube: PrintNightmare RCE - Temporary Fix Using ACLs - New CVE Number - New Powershell PoC*](https://www.youtube.com/watch?v=OdfYXsxULo4) + +Andi Li shares some information on the Printer Nightmare Vulnerability along with a temporary fix using PowerShell. diff --git a/content/articles/2021/07/icymi-powershell-week-of-16-july-2021/index.md b/content/articles/2021/07/icymi-powershell-week-of-16-july-2021/index.md new file mode 100644 index 000000000..84290bcf4 --- /dev/null +++ b/content/articles/2021/07/icymi-powershell-week-of-16-july-2021/index.md @@ -0,0 +1,58 @@ +--- +url: /articles/2021-07-16-icymi-powershell-week-of-16-july-2021/ +title: "ICYMI: PowerShell Week of 16-July-2021" +authors: + - Robin Dadswell +date: "2021-07-16T16:55:28+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/07/icymi-powershell-week-of-16-july-2021/ +--- + +Topics include Azure Devops, Microsoft Defender, Azure and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210716-functiondraft.md#deploy-powershell-7x-on-windows-10-machine)[*Deploy PowerShell 7.x on Windows 10 machine*](https://v-itpassion.be/2021/07/12/deploy-powershell-7-x-on-windows-10-machine/) + +by 77Snake77 on 12th July + +PowerShell 7 has been out for a while, if you want to know more about installing it, take a look at this blog post which talks you through the process. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210716-functiondraft.md#adding-a-year-worth-of-sprints-in-azure-devops-with-powershell)[*Adding a year worth of sprints in Azure DevOps with PowerShell*](https://www.robstr.dev/adding-a-year-worth-of-sprints-in-azure-devops/) + +by Roberth Strand on 14th July + +If you are working with Azure DevOps to keep track of your projects, you probably have to deal with sprints. Depending on the length of your sprints, and the fact that you can bulk add sprints, you probably either end up creating the next sprint during sprint planning or create every sprint manually. This blog shows how to do the same using PowerShell + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210716-functiondraft.md#how-to-run-on-demand-av-scanning-on-a-file-with-ms-defender-using-powershell)[*How to run on-demand AV scanning on a file with MS Defender using Powershell*](https://www.scriptinglibrary.com/languages/powershell/how-to-run-on-demand-av-scanning-on-a-file-using-ms-defender-using-powershell/) + +by Paola Frigo on 15th July + +Running Windows defender and need to run an on demand scan - this blog shows you how and also how to view the log files + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210716-functiondraft.md#searching-for-powershell-with-cim)[*Searching for PowerShell with CIM*](https://jdhitsolutions.com/blog/powershell/8492/searching-for-powershell-with-cim/) + +by Jeff Hicks on 15th July + +Find installed PowerShell versions using CIM with the script in this blog from Jeff + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210716-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/okcu5w/windows_terminal_preview_110_release/) + +Link and discussion about what's new in windows terminal 1.10. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210716-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/StefanIvemo/status/1415780737320722435) + +Bicep #PowerShell Module, 2.0.0-Preview1 released! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210716-functiondraft.md#youtube-lets-learn-some-powershell)[*Youtube: Let's Learn Some PowerShell*](https://www.youtube.com/watch?v=aHyoER486WA) + +In this stream, I'll try to take you from not knowing PowerShell to being able to use it in the cloud (Azure). diff --git a/content/articles/2021/07/so-you-want-to-start-a-user-group/index.md b/content/articles/2021/07/so-you-want-to-start-a-user-group/index.md new file mode 100644 index 000000000..f66d79a45 --- /dev/null +++ b/content/articles/2021/07/so-you-want-to-start-a-user-group/index.md @@ -0,0 +1,211 @@ +--- +url: /articles/2021-07-08-so-you-want-to-start-a-user-group/ +title: So you want to start a User Group +authors: + - Ryan Yates +date: "2021-07-08T15:57:09+00:00" +categories: + - PowerShell for Admins + - Tips and Tricks +tags: + - User Groups + - Community +aliases: + - /2021/07/so-you-want-to-start-a-user-group/ +--- + +> FYI - this was originally posted here around 2016, then a content migration happened where it was seemingly lost. I recreated this and published it to my own [blog][0] + +#### But where do you begin? + +I’ve blogged about this from the reversed perspective on my own blog about finding user groups with a small section about what you can do if your thinking about getting one off the ground which you can read at [http://blog.kilasuit.org/2016/04/17/how-to-find-local-user-groups-events-my-experience/][1] and it was only natural to eventually blog from the other side too although this has come up a bit earlier than I had planned to but alas it gets it done ![Smile](http://web.archive.org/web/20200811154303im_/https://cdn-powershell.pressidium.com/wp-content/uploads/2016/05/wlEmoticon-smile.png) + +As the Coordinator for the UK PowerShell User Groups I learned a few things the hard way with setting up a user group and here are just a few things that you will need to get sorted first which will hopefully help you on your way. + + * Venue + * Speaker/s + * A way to Publicise the User Group + * A method to get details of attendees including the number of them + * Drive and Determination + +Let's look at these in more detail and make a start with Venue. + +### The Venue + +This is in my opinion the single most important thing to get started with first as without a venue you will be unable to have a user group meeting unless you decide to go down the Virtual meeting route which is certainly the simplest way to get a user group setup and means that you can get speakers and users easier. This is certainly the cheapest option although it has the downside that you don’t really get the networking side of the meetings. + +If you want to go down the virtual meeting route then you will need a way to host the meetings which could include the following + + * Skype – the free consumer version + * Teams – Free edition –  + * Cisco WebEx + * GoToMeeting + * OBS & Streaming to Twitch/Youtube (as we do with [PowerScripting Podcast][2]) + +Personally, I would be going down the Teams route here for virtual events, as this is often the easiest way for the presenter to join and present and doesn’t need lots of additional setup, unlike OBS. + +You should also look at Gael Colas ( [T][3] | [B][4] ) who posted a 7 part series on his blog about streaming in-person events –  + +However if like myself you enjoy the networking side of things at a user group then what does the ideal venue look like to me. + +There are a few avenues that I would try and go down first of all before looking for a venue elsewhere and these would include + + * Checking with your employer if they had a venue space that could be used at all + * Checking with other people that you know locally to see if their employers have an event space available. + * Checking with local libraries, schools, colleges & universities + * Reach out to other local user groups to see if the venue they use could also be available for you to use as well. + * Reach out to any local Microsoft contacts that you may have. + * Reach out to other PowerShell User Group Organisers worldwide – there are a number of us and we can help out with any questions you may have + * Reach out to local MVPs as well. + * Reach out to other local but well-known community members + * Reach out to any companies that make tools around the products – so SAPIEN for PowerShell & Red Gate for SQL Server as examples + * Are there any companies that you know locally that may host your user group? + * Are there any big national/international companies in the area that could host your user group? + +When you’ve gone down these paths and still need to find somewhere then there are a few things that I look out for in a venue which includes + + * Location – is it easy to get to and is there parking nearby especially for those traveling from out of town. + * Do they already host other user groups? (See the linked post at the top to check this) If yes then they are friendly to User Groups – this is a big bonus and makes your time dealing with them much easier. + * Cost – I’ve been quoted over £500 for the hire of a venue for an evening before any catering costs for the evening. + +If you're still struggling for a venue that has a technical background then ask at your local Pubs & hotels what their function room hire costs are – some of them can be quite cheap and pubs especially are good as they will sometimes do reduced rates on food and drinks for the User Groups – so win-win  – Note this is what we do for the Yorkshire PowerShell User Group as do many other UK User Groups. + +### Speakers + +This can then be the next most difficult thing to get sorted when your getting the group off the ground so I’ll be honest here and tell you it straight. Be very prepared to be the only speaker. This is of course if in talking to the people in line with trying to get a venue you were unable to get any of them to commit to being a speaker as well, especially MVP’s and other local companies. + +If that is the case then I would be very suggestive of doing an “Introduction to x” type session. Ones that I would suggest include + + * Pester + * DSC + * Building GUI’s for PowerShell Scripts + * General PowerShell 101 + * Tips and Tricks with PowerShell + +These are all PowerShell specific but you can also use introductory talks about any topic at any type of user group – I personally find these go down really well with attendees of all skill sets and these tend to be relatively easy to pull together a session on in a short amount of time. + +These topics are still highly requested by attendees especially if you can do a hands-on session and/or can get any locally known community members or MVP’s to present. + +Over time you will start to get attendees that will want to present as well so be open to giving them the opportunity to do so in whichever form suits them to do so, whether it be a lightning talk of 5-15 minutes or a 45minute session or an hour session or a 2-hour session. One thing you want to make sure is that you ask for this at each event as you’ll find some people will come back to you after the event with an idea for a session. + +Also, have a look at for potential speakers as this is a community-driven initiative to help share potential speakers with organizers & if you are a speaker please look to get yourself listed on this site. + +### Publicizing the User Group + +Next, we will cover the ways to publicize the User Group. + +The places that you will want to do so are + + * PowerShell.org Calendar and Blog Posts + * PowerShellgroups.org – I’m still trying to get the UK Groups published on there so if you know who runs that site please let me know! (This is unfortunately no longer active) + * Twitter – set up a Twitter Account for the User Group + * Facebook – in the PowerShell Group and also in your own timeline + * LinkedIn – In the PowerShell Groups there and also by publishing it in your feeds and in the new LinkedIn posts too + * Your own blog + * The PowerShell Slack team – if your not already on slack then sign up at slack.poshcode.org + * Reddit + * Email using a distribution list or service like MailChimp (integrates well with Eventbrite) + * Eventbrite (because its free to use) + * Meetup although I’m not a fan of the cost structure for it but it is a good place for visibility. Please see my notes at the bottom of this section. + * Group Website – doesn’t have to be fancy and GitHub pages are a good free way to get this sorted as well. + * Buy the Domain Name for your User Group + * Create Excel Surveys / Forms / SurveyMonkey’s for Speaker Submissions, Topic Requests, Session Feedback etc and use subdomains for easy links + * Tell MVP’s as its the best form of free advertising you will ever get ![Winking smile](http://web.archive.org/web/20200811154303im_/https://cdn-powershell.pressidium.com/wp-content/uploads/2016/05/wlEmoticon-winkingsmile.png) + * Attend other User Groups and tell people there about it + * Cold call/mass marketing to local/national/international companies and let them know about it – LinkedIn is a great source for doing things like this and you can do this via existing connections or just search for people in your local area and message them about it. + +**_Notes_**_ –_ There’s a lot of discussions about which platform out of EventBrite and Meetup provides the best value and feature set. + +I was of the opinion that Eventbrite was the better of the 2 options for getting off the ground, however, meetup has a more polished feel to it with features like shared groups, group search, discussion forums, etc and also Organisations. + +Organizations in Meetup allow for Collectives like the UK PowerShell Collective that have many groups across the UK to centrally manage them and also have a single place to view all meetup groups as per of which there is a cost to this but if you are organizing many events in towns and cities that may be a better option for you. Another good example of using this functionality is the .NET Foundation –  + +Meetup overall is a more social platform and therefore I would recommend using that one if you can justify the costs behind it. + +### Attendee Details and Numbers + +So this is really a rehash of a little bit of the above however I’m going to give some pros and cons to both Meetup and Eventbrite so that you can decide which one you want to go with. + +#### Eventbrite + +Pros + + * Free if you don’t charge for the event + * Easy to use + * PowerShell Module to automate it is partially built (because I built it, please feel free to help extend it at  ) + * Social plugins to see if anyone your friends with on Facebook is going + * An easy method to share about the event + * Can have a subdomain for your group like get-psuguk.eventbrite.co.uk + * Can send out invitations to previous attendees when you make an event live + * Mail Chimp can be integrated very easily as well + * Can get Name badges etc from it very easily if required + * Can add in questions and different ticket types – useful if you want to have organizers / attendees / sponsors tickets + * Can also ask questions on the ticket types – may help you plan for the audience of the event. + * Has mobile Apps + +Cons + + * Not as widely used as Meetup for user groups now + * It's more pushed for larger events where there are tickets being sold as there are a number of marketing options built into it. + * Perhaps too clunky as it tries to do too much + +#### Meetup + +Pros + + * Much more social experience – Good to see you feature + * Can see if other friends are group members + * Can see other similar groups as well from the members that are part of the group + * Sponsor Section which is quite cool + * Share Stats, files run polls have discussions + * Has mobile apps + * Also, has a PowerShell module is built to help automate Meetups see + * Meetups can be integrated into the Community Connect Site I mentioned earlier on over at  + +Cons + + * It isn’t free to use + * Again has perhaps too much it's trying to accomplish so can feel clunky + +#### Attending.io + +This is one that is used by a group I try and attend called DigiCurry and it is just easy and simple – so perhaps start off with that at [https://attending.io/][5] + +Pros + + * Signups integrate with Facebook, Twitter, LinkedIn + * Simple + * Easy + * Quick + +Cons + + * Perhaps too simple + * Not really great for bigger meetups + * Not well known + +### Drive and Determination + +Going down the road of running a user group can be a lot more work than most realize so before you go down this road please be mindful to plan for the group to scale out depending on where you are located. The UK User Groups are growing at a rate where we are having to look at other possible venues to the ones that we have been using but as we are also a National User Group we also have to plan for new venues in new towns and cities around the UK. + +Also, be prepared to have to write a presentation in an afternoon or have a few presentations prepared to pull out of the bag in case of speakers drop out – which can happen last minute. + +If that doesn’t scare you and you want to plow ahead and do it (which you really really do) then I hope that this post has been useful to you + +I would recommend as a final piece of advice I would look to decide on a schedule for the group for a full year and stick to it – you can plan what topics/speakers you have as the time comes closer but get a schedule put together. + +Lastly, I would like to point you to another blog post on this by one of the other PowerShell User Group leads Thom Schumacher – [https://powershellposse.com/starting-a-powershell-users-group-tips-and-tricks/][6] +I hope that you’ve enjoyed reading and I will update this post as I learn more that can be helpful for you too and from what the community gives as suggestions + +Feel free to leave any comments on here or to [tweet me][7] and have a read of the other articles I’ve written on [here][8] or my own [blog][9] and good luck on the path you are taking to become one of the PowerShell UG Leads – perhaps I’ll get chance to come to speak at your user group in the future. + + [0]: https://blog.kilasuit.org/2023/08/19/so-you-want-to-start-a-user-group/ + [1]: https://blog.kilasuit.org/2016/04/17/how-to-find-local-user-groups-events-my-experience/ + [2]: https://www.youtube.com/channel/UC1xcgLFT2Q9UneeQCr_4WoQ + [3]: https://twitter.com/gaelcolas + [4]: https://gaelcolas.com/ + [5]: https://attending.io/ "https://attending.io/" + [6]: https://powershellposse.com/starting-a-powershell-users-group-tips-and-tricks/ "https://powershellposse.com/starting-a-powershell-users-group-tips-and-tricks/" + [7]: https://twitter.com/ryanyates1990 + [8]: http://blog.kilasuit.org/2016/03/09/updated-quick-win-install-powershell-package-management-on-systems-running-powershell-v3-v4/ + [9]: http://blog.kilasuit.org/ diff --git a/content/articles/2021/09/_index.md b/content/articles/2021/09/_index.md new file mode 100644 index 000000000..93048b30c --- /dev/null +++ b/content/articles/2021/09/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from September 2021" +description: "PowerShell.org Articles published in September 2021." +--- diff --git a/content/articles/2021/09/automation-summit-going-virtual-and-new-date/index.md b/content/articles/2021/09/automation-summit-going-virtual-and-new-date/index.md new file mode 100644 index 000000000..7fcdec0a1 --- /dev/null +++ b/content/articles/2021/09/automation-summit-going-virtual-and-new-date/index.md @@ -0,0 +1,47 @@ +--- +url: /articles/2021-09-20-automation-summit-going-virtual-and-new-date/ +title: Automation Summit Going Virtual and New Date +authors: + - James Petty +date: "2021-09-20T14:00:16+00:00" +categories: + - Announcements + - Events + - PowerShell Summit +tags: + - Automation Summit +legacy_featured_image: /wp-content/uploads/2021/05/AutoMation-Summit-No-Citydefault.png +aliases: + - /2021/09/automation-summit-going-virtual-and-new-date/ +--- + +## We are Going Virtual + +We want to let everyone know the Automation + DevOps Summit team has decided that it is in the best interest for everyone to move the event to a 100% virtual platform. We were planning on a hybrid event, but with the rising Covid19 cases across the US, and especially TN, we felt this was the best decision for everyone. + +## New Dates + +The content team has also decided to move the event back two weeks. The new dates are November 15-17. There are two reasons for this + + 1. Ignite was announced that it will take place November 2-4 (at the same time as our original event) + 2. We want to celebrate PowerShell's 15th birthday with all of our closest friends. + +### What does this mean for me? + +If you were offered a session at the Automation summit regardless if you accepted or declined we will be reaching out to you this week to verify if you are still willing and able to present your session. + +### I Purchased an In-Person Ticket Already + +To the the way our backend system works we cannot process a partial refund. We will issue a 100% refund for your ticket. Then you will need to purchase a virtual ticket. This should happen this week + +### I Purchased an Virtual Ticket Already + +You don't have to do anything. We will process refunds if you can no longer attend the new dates. + +## New Schedule and Lineup + +We will have an updated schedule and speaker lineup coming soon (we are hoping by the end of the week as speakers re confirm their speaking status). + +## Tickets are $300 + +[Register now](https://www.automationsummit.org) diff --git a/content/articles/2021/09/icymi-powershell-week-of-03-september-2021/index.md b/content/articles/2021/09/icymi-powershell-week-of-03-september-2021/index.md new file mode 100644 index 000000000..f13b715b1 --- /dev/null +++ b/content/articles/2021/09/icymi-powershell-week-of-03-september-2021/index.md @@ -0,0 +1,52 @@ +--- +url: /articles/2021-09-03-icymi-powershell-week-of-03-september-2021/ +title: "ICYMI: PowerShell Week of 03-September-2021" +authors: + - Robin Dadswell +date: "2021-09-03T17:03:01+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/09/icymi-powershell-week-of-03-september-2021/ +--- + +Topics include O365, SQL, Code Formatting and more... + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210903-functiondraft.md#automating-with-powershell-setting-up-application-consent)[*Automating with PowerShell: Setting up application consent*](https://www.cyberdrain.com/automating-with-powershell-setting-up-application-consent/?utm_source=rss&utm_medium=rss&utm_campaign=automating-with-powershell-setting-up-application-consent) + +by Kelvin Tegelaar on 29th August + +In this post you will learn two things about 0365 application consent: how to setup the OAuth consent workflow and how to monitor for application requests. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210903-functiondraft.md#easy-way-to-connect-to-ftps-and-sftp-using-powershell)[*Easy way to connect to FTPS and SFTP using PowerShell*](https://evotec.xyz/easy-way-to-connect-to-ftps-and-sftp-using-powershell/#utm_source=rss&utm_medium=rss&utm_campaign=easy-way-to-connect-to-ftps-and-sftp-using-powershell) + +by Przemyslaw Klys on 29th August + +In this post learn how to use the Transferfto module and make ftp easier. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210903-functiondraft.md#stop-or-start-sql-server-with-powershell)[*Stop or Start SQL Server With PowerShell*](https://sqladm.in/posts/stop-start-sql-server-with-powershell/) + +by Jeff Hill on 31st August + +Stop and Start SQL with easy by following this blog post. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210903-functiondraft.md#understanding-when--when-not-to-create-powershell-new-lines)[*Understanding When & When Not to Create PowerShell New Lines*](https://adamtheautomator.com/powershell-new-line/) + +by Bill Kindle on 31st August + +Great post showing how and when to format your code with new lines. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210903-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/pgur5p/powershell_beginner_information/) + +Great curated list of beginner PowerShell content. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20210903-functiondraft.md#youtube-azure-automation-tutorial---remote-powershell-execution-on-an-azure-virtual-machine)[*Youtube: Azure Automation Tutorial - Remote PowerShell Execution on an Azure virtual machine*](https://www.youtube.com/watch?v=sj_l19hL9W8) + +Learn to run remote code against an Azure VM with a managed identity in PowerShell diff --git a/content/articles/2021/10/_index.md b/content/articles/2021/10/_index.md new file mode 100644 index 000000000..bacc8818a --- /dev/null +++ b/content/articles/2021/10/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from October 2021" +description: "PowerShell.org Articles published in October 2021." +--- diff --git a/content/articles/2021/10/icymi-powershell-week-of-08-october-2021/index.md b/content/articles/2021/10/icymi-powershell-week-of-08-october-2021/index.md new file mode 100644 index 000000000..aeebc4038 --- /dev/null +++ b/content/articles/2021/10/icymi-powershell-week-of-08-october-2021/index.md @@ -0,0 +1,52 @@ +--- +url: /articles/2021-10-08-icymi-powershell-week-of-08-october-2021/ +title: "ICYMI: PowerShell Week of 08-October-2021" +authors: + - Robin Dadswell +date: "2021-10-08T18:16:01+00:00" +categories: + - In Case You Missed It + - PowerShell for Admins + - PowerShell for Developers +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/10/icymi-powershell-week-of-08-october-2021/ +--- + +Topics include VMWare, Windows 11, Web Reports and more... + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211008-functiondraft.md#how-to-gather-your-vcenter-inventory-data-with-this-vmware-powershell-script)[*How to gather your vCenter inventory data with this VMware PowerShell script*](https://www.techrepublic.com/article/how-to-gather-your-vcenter-inventory-data-with-this-vmware-powershell-script/#ftag=RSS56d97e7/) + +by Scott Matteson on 7th October + +Inventory reports are a common request when administering a VMware vCenter environment. Learn how this VMware PowerShell script can make such requests quick and easy + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211008-functiondraft.md#building-a-web-report-in-powershell-use-the--force-luke)[*Building a Web Report in PowerShell, use the -Force Luke*](https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj) + +by Chris Noring on 8th October + +The idea of this article is to show how to build a web report. I will show the usage of several commands that you can connect that does all the heavy lifting for you + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211008-functiondraft.md#search-your-contacts-using-powershell)[*Search your Contacts using PowerShell*](https://www.slipstick.com/developer/search-contacts-powershell/) + +by Diane Poremsky on 8th October + +A user wanted to use PowerShell to search his contacts for a value in the custom field. While you don’t need to use PowerShell to search contacts, and can do a more complicated search within Outlook, you will need to use PowerShell or VBA if you want to search for a value in a custom field. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211008-functiondraft.md#reddit-rpowershell---most-popular-weekly-post)[*Reddit /r/PowerShell - Most Popular Weekly Post*](https://www.reddit.com/r/PowerShell/comments/q0cy65/as_sysadmin_i_use_many_powershell_scripts_on_the/) + +u/akshin1995 shares a tool he made in .Net 5 for running PowerShell and Batch scripts. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211008-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Jaap_Brasser/status/1445560964636557313) + +I missed my old context menu in #Windows11 today, so I did the sensible thing and created a #PowerShell Module to manage my various registry tweaks straight from the Windows Terminal! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211008-functiondraft.md#youtube-intune-tutorial-20--how-to-deploy-powershell-script-in-intune)[*Youtube: Intune Tutorial 20 -How to Deploy PowerShell Script in Intune*](https://www.youtube.com/watch?v=MO3ZTvrukyw) + +Learn How to deploy PowerShell script via Intune diff --git a/content/articles/2021/10/icymi-powershell-week-of-22-october-2021/index.md b/content/articles/2021/10/icymi-powershell-week-of-22-october-2021/index.md new file mode 100644 index 000000000..4d459b0d6 --- /dev/null +++ b/content/articles/2021/10/icymi-powershell-week-of-22-october-2021/index.md @@ -0,0 +1,48 @@ +--- +url: /articles/2021-10-22-icymi-powershell-week-of-22-october-2021/ +title: "ICYMI: PowerShell Week of 22-October-2021" +authors: + - Robin Dadswell +date: "2021-10-22T19:03:25+00:00" +categories: + - In Case You Missed It +tags: + - ICYMI + - Community + - Weekly Roundup +legacy_featured_image: /wp-content/uploads/2018/08/shutterstock_399116026.jpg +aliases: + - /2021/10/icymi-powershell-week-of-22-october-2021/ +--- + +Topics include Microsoft Graph, PowerShell remoting and more... + + + +Special thanks to Robin Dadswell, Prasoon Karunan V, Kiran Patnayakuni and Kevin Laux. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211022-functiondraft.md#sending-email-from-exchange-online-using-the-microsoft-graph-sdk-for-powershell)[*Sending Email from Exchange Online Using the Microsoft Graph SDK for PowerShell*](https://practical365.com/send-mail-exchange-online-graph-powershell/) + +by Tony Redmond on 18th October + +how to send Email from Exchange Online Using the Microsoft Graph SDK for PowerShell + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211022-functiondraft.md#removing-obsolete-powershell-remoting-configurations)[*Removing Obsolete PowerShell Remoting Configurations*](https://jdhitsolutions.com/blog/powershell/8650/removing-obsolete-powershell-remoting-configurations/) + +by Jeffrey Hicks on 20th October + +Microsoft is scheduled to release PowerShell 7.2 soon, I thought it might be good to revisit this topic. Here’s the potential issue. If you’ve been installing PowerShell 7 releases for a while, and have been enabling PowerShell remoting, you most likely have a list of remoting session configurations like this. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211022-functiondraft.md#get-up-to-speed-with-powershell-and-the-microsoft-graph-api)[*Get up to speed with PowerShell and the Microsoft Graph API*](https://searchwindowsserver.techtarget.com/tutorial/Get-up-to-speed-with-PowerShell-and-the-Microsoft-Graph-API) + +by Liam Cleary on 21st October + +Microsoft plans to retire technologies that admins depend on to handle Office 365 and other cloud services via PowerShell. Learn how to start with this newer management method. + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211022-functiondraft.md#tweet-of-the-week)[*Tweet of the Week*](https://twitter.com/Steve_MSFT/status/1451301422784335874) + +#PowerShell 7.2-RC1 is out! + +###### [](https://github.com/devops-collective-inc/WhatYouMissedThisWeek/blob/master/20211022-functiondraft.md#youtube-beginners-guide-azure-powershell)[*Youtube: Beginner's Guide: Azure PowerShell*](https://www.youtube.com/watch?v=EX8GrTsiUQ4) + +PowerShell has been a preferred method of automating different actions and processes with Windows Administrators. As a cross-platform command-line and scripting environment, it employs cmdlets and modules across the Microsoft ecosystem. In this video, Mark Mikula shows you how to get started with Azure PowerShell by installing, accessing, and managing your Azure resources. diff --git a/content/articles/2021/10/powershell-devops-global-summit-2022-update/index.md b/content/articles/2021/10/powershell-devops-global-summit-2022-update/index.md new file mode 100644 index 000000000..493f66006 --- /dev/null +++ b/content/articles/2021/10/powershell-devops-global-summit-2022-update/index.md @@ -0,0 +1,37 @@ +--- +url: /articles/2021-10-02-powershell-devops-global-summit-2022-update/ +title: PowerShell + DevOps Global Summit 2022 Update +authors: + - James Petty +date: "2021-10-02T15:45:17+00:00" +categories: + - PowerShell Summit +tags: + - PowerShell Summit +aliases: + - /2021/10/powershell-devops-global-summit-2022-update/ +--- + +## Join us April 25-28, 2022 in Bellevue WA + +We are pleased to announce the PowerShell + DevOps Global Summit April 25-29, 2022, at the Marriott in Bellevue, WA. + +That's right!! The Marriott will be the official hotel, and Summit will take place in the hotel conference center. + +Here are a few dates to keep in mind + +CFP Opens **November 15, 2021** + +CFP Closes **January 15, 2022** + +Selection and Notification **January 15-20, 2022** + +Final schedule released and Ticket Sales Start - **February 1, 2022** + +Watch our official Twitter page @PSHSummit for more the most up-to-date information. + +### What about Covid + +We are carefully watching the Covid situation, and we will do everything we can to make sure our volunteers, speakers, and attendees are safe. We are also communicating with Visit Bellevue and the Marriott to keep up to date with local and state precautions. + +The good news is that Ticket Sales do not start until February 1, 2022. diff --git a/content/articles/2021/10/what-makes-a-great-submission-for-summit/index.md b/content/articles/2021/10/what-makes-a-great-submission-for-summit/index.md new file mode 100644 index 000000000..e6a34328b --- /dev/null +++ b/content/articles/2021/10/what-makes-a-great-submission-for-summit/index.md @@ -0,0 +1,108 @@ +--- +url: /articles/2021-10-12-what-makes-a-great-submission-for-summit/ +title: What makes a great submission for summit +authors: + - James Petty +date: "2021-10-12T14:26:25+00:00" +categories: + - PowerShell Summit +tags: + - PowerShell Summit + - Call for Speakers +legacy_featured_image: /wp-content/uploads/2021/10/SummitLong.png +aliases: + - /2021/10/what-makes-a-great-submission-for-summit/ +--- + +The Call for Proposals(CFP) for the PowerShell + DevOps Global Summit 2022 opens in a few weeks (1-November). + +We’ve heard a lot of questions – _What topics are you looking for?_ _I don’t know what to propose!_ and so on. Let’s cover some ways to find topics and hopefully spark some ideas! + +## Add some spice + +First things first: We’re not going to come up with your topic! [This bit][1] has some solid advice on mixing things up: + + +`* I saw a talk with X format and decided to apply it to Y subject. +     * While working on a project, I thought, “Wow! I wish I knew X, Y, and Z before I started!” +     * A conversation with coworkers about X led me to see the potential for a talk on it. +`The key here is that there are plenty of ways to add variety to a topic – these certainly aren’t comprehensive, just a few ideas. + +### Spice up Pester + +As an example, if we asked for _Pester _sessions, there are plenty of ways to come up with a unique Pester talk. + + * Can you use Pester for security things (compliance, CI/CD, vulnerability assessments, etc.)? + * Can you use Pester for data validation of some sort (e.g. AD, SQL)? + * Have you used Pester for Infrastructure testing? + * Might you use Pester for Monitoring? (even if this might not be the optimal way to monitor things) + +At the end of the day, PowerShell can be used across a variety of fields, and general-purpose tools like Pester can be used in each of those, in unique ways. + +### Other spices + +So! We used a few specific-ish variations of Pester as an example.  Take a step back and consider PowerShell itself: + + * How do you use PowerShell in different fields (keeping in mind that each field has its own set of sub-fields)? Bonus points if the concepts/ideas/code you include are applicable in a variety of fields. + * How do you use PowerShell outside of work, or for general productivity (side note: running this CFP would be a _paaaaain_ without PowerShell!). + * What lessons can we take from other fields, ecosystems, or projects? For example, while these may seem new-ish to some of us, we borrowed and applied to test, CI/CD, and other ideas that have long been integrated into the ecosystems of other languages. + +All this said, please don’t think you need something super unique and never-before-seen! + +## Tried and true + +Every day, new folks enter the field or start learning about PowerShell, automation, DevOps, etc. Yes, people have talked about testing and other topics in the past… but guess what? Chances are we’ll still accept some solid talks on important concepts. +So! What are some of these evergreen topics? + + * Release pipelines, including the individual components you might find: + * Source control + * Build systems and frameworks + * Pester and testing + * Deployment + * PowerShell modules or advanced functions + * How to write them + * Best practices + * How to distribute and maintain them + * etc. + * Using common tools/practices with PowerShell + * VSCode and extensions + * Windows Subsystem for Linux + * Debugging + * etc. + +There’s plenty more. You can probably think about other core topics that folks will always need to learn, re-learn, or catch up on new ideas for. + +## 2022 Specifics + +What are we topics are we looking for in 2022. Well as always we are looking for everything! We want to hear your story about how you used ______ in the real world. + +### Topics we’re looking for + +Keep in mind everything we’ve said so far. Don’t overthink it. Show us something _you_ are interested in or working on. A few sample topics include: + + * Monitoring + * Testing and Pester + * Azure + * AWS + * Regex + * PowerShell language (I.e formatting, crescendo, etc...) + +### Topics that will most likely have competition + +Every year, we have some topics that have a bit of competition. This year is no different. If you have something to share on these topics _don’t let this scare you off_, just know there will be a little competition. + + * Kubernetes + * Working with web APIs + * Contributing to open source + * Azure (granted, I _much_ prefer attendee talks to vendor happy-path talks, for what it’s worth) + +That’s about it! We have just over two weeks before the CFP opens and now is a good time to start writing them!  We’ll close with a few handy links: + + * [2019 CFP ideas][2] – still applicable, although many of DevOps tools considered _esoteric _might be worth a proposal + * [2020 CFP ideas][3] + * #Conferences in the [PowerShell Slack team][4] – plenty of folks willing to chat about or review your proposals in there.  You can also ping content@powershell.org, but the Slack route is faster and has more eyes on it + + [1]: https://www.freecodecamp.org/news/how-to-get-a-technical-talk-accepted-at-a-conference-or-event-8ba291d11c62/ + [2]: https://powershell.org/2018/08/the-summit-2019-call-for-topics-some-ideas/ + [3]: https://powershell.org/2019/09/be-a-speaker-at-powershell-and-devops-global-summit-2020/ + [4]: https://bit.ly/PSSlack diff --git a/content/articles/2021/12/2022-it-onramp-scholarship-information-application/index.md b/content/articles/2021/12/2022-it-onramp-scholarship-information-application/index.md new file mode 100644 index 000000000..3f675415a --- /dev/null +++ b/content/articles/2021/12/2022-it-onramp-scholarship-information-application/index.md @@ -0,0 +1,119 @@ +--- +url: /articles/2021-12-17-2022-it-onramp-scholarship-information-application/ +title: 2022 IT OnRamp Scholarship Information & Application +authors: + - James Petty +date: "2021-12-17T17:03:32+00:00" +categories: + - Announcements +tags: + - OnRamp + - PowerShell Summit + - Scholarships +aliases: + - /2021/12/2022-it-onramp-scholarship-information-application/ +--- + +**The OnRamp Scholarship returns in 2022!** We are currently looking for applicants for the PowerShell + DevOps Summit 2022 [OnRamp](https://powershell.org/summit/onramp/) Track Scholarship. + + + **TLDR:** you can apply for the OnRamp Scholarship [here](https://powershell.org/summit/onramp/scholarship)! + + + OnRamp is an educational track geared towards entry-level IT Pros. It offers a great opportunity to jump-start your PowerShell career while being taught by the best in the industry. It's structured as a hands-on class, so your skills are put into practice right away. However, attendees will still spend time outside the classroom to attend keynotes, general sessions, and other social gatherings. You get the best of both; a chance to learn, and the opportunity to network and build connections! + + + For more information, we recommend reading the [OnRamp Brochure](https://indd.adobe.com/view/9915836a-3056-40ba-baad-37b4f74e0352). + + + Speaking of networking, we also have a "[buddy program](https://powershell.org/summit/onramp/)" in which OnRamp attendees can enroll and be paired with a veteran Summit attendee. It's a great way to make introductions and ask questions in a one-on-one format. + + + We are seeking applicants for the PowerShell + DevOps Summit OnRamp Scholarship now! [Applications](https://powershell.org/summit/onramp/scholarship/) must be submitted no later than **February 1st, 2022**. + + + Scholarship recipients receive: + + + - + + + US domestic economy airfare to the event (up to $600 inclusive of all taxes and fees) + + + + + + - + + + Five (5) nights' lodging (Sunday through Thursday evenings) + + + + + + - + + + Admission to the OnRamp track, including four breakfasts, four lunches, and two evening events. + + + + + + Who should apply: + + + - + + + Individuals who are part of ethnic or gender groups that have traditionally been underrepresented in IT (half of our scholarship slots are reserved for members of these groups) + + + + + + - + + + Individuals who have completed an entry-level IT training program (which can include a technical college) or who hold at least one entry-level certification (such as CompTIA A+) + + + + + + - + + + Individuals who currently hold an entry-level IT job, are participating in an IT internship, or who are actively applying for an entry-level IT job. + + + + + + - + + + Individuals who fully intend to make IT their full-time professional career. + + + + + + Please reach out with any questions at either of the following places: + + + - + + + Twitter @jbirley + + + + + + - + + + Email [scholarship@powershell.org](mailto:scholarship@powershell.org) diff --git a/content/articles/2021/12/2022-powershell-devops-global-summit-covid-survey/index.md b/content/articles/2021/12/2022-powershell-devops-global-summit-covid-survey/index.md new file mode 100644 index 000000000..36d66070a --- /dev/null +++ b/content/articles/2021/12/2022-powershell-devops-global-summit-covid-survey/index.md @@ -0,0 +1,24 @@ +--- +url: /articles/2021-12-28-2022-powershell-devops-global-summit-covid-survey/ +title: 2022 PowerShell + DevOps Global Summit Covid Survey +authors: + - James Petty +date: "2021-12-28T21:46:10+00:00" +categories: + - Events +tags: + - PowerShell Summit +legacy_featured_image: /wp-content/uploads/2021/10/Summit_2021_Long_Date@2x.png +aliases: + - /2021/12/2022-powershell-devops-global-summit-covid-survey/ +--- + +Greetings PowerShell Folks – + +As we approach a new year and a new Summit, we wanted to include you, the community, to help us understand what steps we can take to make our event a safe, including, welcoming, and enjoyable environment for all Summitteers. + +Please know that we will adhere to all state and local mandates in place at the time of the event, whatever this may encompass.  What we are asking is what \*additional\* steps you would like to see us take over and above those mandates. + +If you could please take 5 minutes and fill out this survey we would very much appreciate it. + + diff --git a/content/articles/2021/12/_index.md b/content/articles/2021/12/_index.md new file mode 100644 index 000000000..d95efc693 --- /dev/null +++ b/content/articles/2021/12/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from December 2021" +description: "PowerShell.org Articles published in December 2021." +--- diff --git a/content/articles/2021/_index.md b/content/articles/2021/_index.md new file mode 100644 index 000000000..7680d99c4 --- /dev/null +++ b/content/articles/2021/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from 2021" +description: "PowerShell.org Articles published in 2021." +--- diff --git a/content/articles/2022-04-30-powershell-devops-global-summit-a-first-timers-perspective.md b/content/articles/2022-04-30-powershell-devops-global-summit-a-first-timers-perspective.md deleted file mode 100644 index a2a2f75ea..000000000 --- a/content/articles/2022-04-30-powershell-devops-global-summit-a-first-timers-perspective.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: PowerShell + DevOps Global Summit – A First Timer’s Perspective -authors: - - Chris Martin -date: "2022-04-30T05:42:47+00:00" -categories: - - PowerShell Summit -tags: - - PowerShell Summit - - Community -draft: true -aliases: - - /2022/04/powershell-devops-global-summit-a-first-timers-perspective/ ---- - -Hey everyone! - -This is Chris Martin, Azure Architect and PowerShell fanatic. I've volunteered to start posting here at least semi-regularly, so I thought I'd start with a first timer's perspective on the recent PowerShell + DevOps Global Summit in Bellevue, WA. - -To start, I have to say what a trip! It was a whirlwind of knowledge and camaraderie from the time I arrived at the hotel Sunday afternoon until I got to the airport on Friday. - - - -\# Saving a draft as a placeholder, will finish tomorrow when I have more braincells diff --git a/content/articles/2022-07-28-learn-powershell-in-5-painless-steps-decisions-if-else-switch-function-step-5.md b/content/articles/2022-07-28-learn-powershell-in-5-painless-steps-decisions-if-else-switch-function-step-5.md deleted file mode 100644 index 82150c740..000000000 --- a/content/articles/2022-07-28-learn-powershell-in-5-painless-steps-decisions-if-else-switch-function-step-5.md +++ /dev/null @@ -1,349 +0,0 @@ ---- -title: Learn Powershell in 5 Painless Steps – Decisions (If/Else, Switch, Function) – Step 5 -authors: - - Cole McDonald -date: "2022-07-28T18:45:52+00:00" -categories: - - Tutorials -tags: - - Beginner - - Functions - - Tutorial -aliases: - - /2022/07/learn-powershell-in-5-painless-steps-decisions-if-else-switch-function-step-5/ ---- - -DevOps = Developers + Operations.  What if you're in Operations and don't have a developer at your disposal?  That should never stop you from making your job easier and more efficient.  Powershell is a scripting language from Microsoft that is already on your Windows PC and Servers and more recently, [open sourced to the OSX and Linux communities](https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/).  It ships with a great minimalist development environment (Powershell ISE). - -The problem I had is that all of the tutorials out there either assume a background in scripting and programming, or act as nothing more than command references.  I'm hoping to enable you to automate your own workflows even if you've never programmed before.  You only need to learn 5 things: Storage, Input, Output, Decisions, Loops.  Everything you do manually is made up of these 5 things.  Every programming language is made up of these 5 things. - -* * * - - -###### - [Step 4: Loops(I can give you more)](https://powershell.org/?p=294981&preview=true) <-- Step 5: Decisions(The time has arrived) - - -* * * - -We've spent a month getting to this point. We're invested. Let's blow this party up! Sorry, I've had too much coffee this morning. That was a bad decision. That's our topic for this last installment of the 5 steps: DECISIONS, not coffee. - -We know how to get information from various sources, store them in fairly complex ways, and send it out to our users in different formats. According to the stated format of these blogs, there's only one piece left in this puzzle. When we stand up a virtual server, they're not provisioned the same across the board. An SQL server needs a far different configuration than an IIS server, a nano server, or a terminal services server. - -If we talk through the process, an SQL server wants more RAM and disk space, whereas an IIS server is more focused on RAM and CPU, Whereas the Terminal Services server wants more of all three: RAM, CPU, and disk. Lastly, a nano server wants as little as possible. - -I've tricked you again. If you can talk through your decision making process again, you're already programming. Here's the pseudocode (fake code in comments to fill out afterwards): - -> -`# SQL: RAM and DISK Heavy -# IIS: RAM and CPU Heavy -# TS: RAM, CPU, DISK Heavy -# Nano: Minimums -`I tricked you twice in the same paragraph. If we change the word whereas into else, we've actually got the SYNTAX (syntax is using the right words in the right order with the right punctuation) for the first structure we're going to look into: - - - **IF / ELSE** - - -Let's start with the syntax statement for the IF / ELSE in Powershell: - -> -`if (condition) {statement 1} else {statement 2} -`A real example of this can look like this: - -> -`# Setup machine provisioning values -if ($machineType -eq "SQL") { - # this is anything else, the DEFAULT for instance - $CPU = 2 - $RAM = 8 - $DISK = 150 -} else { - # this is anything else, the DEFAULT for instance - $CPU = 2 - $RAM = 4 - $DISK = 50 -} - -# Removing the space between $machineType and : will confuse Powershell -Write-Output "Building new $machineType server : NAME-$($ServerInfo_obj[0].name), RAM-$RAM, CPU-$CPU, DISK-$DISK" - -# Build the server with the given requirements -# This doesn't actually work -# Note the line continuation ( `) added for readability -# Note everything lined up in nice little columns to feed my OCD - -new-SCVirtualMachine ` - -ComputerName $serverInfo_obj[0].name ` - -CPUCount $CPU ` - -DynamicMemoryMaximumMB $RAM * 1024 ` - -VirtualHardDisk "\Path\To\New\Drive\Object\$serverInfo_obj[0].name_$DISK" ` - -OperatingSystem "Windows 3.1" -`Picture if you will reading in a CSV or JSON file defining a thousand servers into an object array, then using Powershell to deploy them! Imagine driving this based on rising numbers of users logged on to a set of load balanced terminal servers. Imagine removing machines as well based on lowering numbers of users toward the end of the workday. - -This is where we start to see the benefit of using scripting to drive performance vs. cost savings. As we moved from physical servers to virtual we, the industry, largely kept the manual workflow. As we're moving to Azure and being charged for resource use, this becomes a huge cost savings solution. - -In our initial list of server types, we had 4 types of servers "THERE WERE FOUR TYPES!" Let's look at how we can make that work with what we know now. If we have our default settings as an else, but need more types, let's move the defaults to a declaration at the top, then alter them if they are not the "nano" type: - -> -`# Change me to SQL, IIS, TS, or NANO -$machineType = "NANO" - -# Default Minimums for those pesky nano servers -$CPU = 2 -$RAM = 4 -$DISK = 50 - -# SQL: RAM and DISK Heavy -if ($machineType -eq "SQL") { - $CPU = 2 - $RAM = 8 - $DISK = 150 -} - -# IIS: RAM and CPU Heavy -if ($machineType -eq "IIS") { - $CPU = 4 - $RAM = 8 - $DISK = 50 -} - -# TS: RAM, CPU, DISK Heavy -if ($machineType -eq "TS") { - $CPU = 4 - $RAM = 8 - $DISK = 150 -} - -Write-Output "New $machineType : RAM-$RAM, CPU-$CPU, DISK-$DISK" -`**ELSEIF** - - -There's another mechanism for this type of thing that is cleaner to read as it groups the if / else decisions. We'll just flip the terms and remove the punctuation giving us elseif. Let's rewrite our decision to use this new term: - -> -`# Change me to SQL, IIS, TS, or NANO -$machineType = "SQL" - -if ($machineType -eq "SQL") { - # SQL: RAM and DISK Heavy - $CPU = 2 - $RAM = 8 - $DISK = 150 -} elseif ($machineType -eq "IIS") { - # IIS: RAM and CPU Heavy - $CPU = 4 - $RAM = 8 - $DISK = 50 -} elseif ($machineType -eq "TS") { - # TS: RAM, CPU, DISK Heavy - $CPU = 4 - $RAM = 8 - $DISK = 150 -} else { - # Default Minimums - $CPU = 2 - $RAM = 4 - $DISK = 50 -} - -Write-Output "New $machineType : RAM-$RAM, CPU-$CPU, DISK-$DISK" -`I'd like you to note at this point that you've just read a few slightly larger blocks of code and it didn't look as weird as it did when you started this tutorial (just over a month ago if you followed it in real time. If you're from the future... welcome back, we still wear shoes on our feet in our time!). Once we learn what the individual pieces look like, we can start to see the matrix unfold. - -These can get wonderfully complex as we can NEST these statements, like decision inception (deception?), perhaps to differentiate the type of ERP software an SQL server is supporting: - -> -`$machineType = "GP" - -if ($serverInfo_obj[0].name -like "*SQL*") { - if ($machineType -eq "CRM") { - # SQL: RAM and DISK Heavy - $CPU = 2 - $RAM = 8 - $DISK = 150 - } elseif ($machineType -eq "VISUAL") { - # IIS: RAM and CPU Heavy - $CPU = 4 - $RAM = 8 - $DISK = 50 - } elseif ($machineType -eq "GP") { - # TS: RAM, CPU, DISK Heavy - $CPU = 4 - $RAM = 8 - $DISK = 150 - } elseif ($machineType -eq "Dynamics 365") { - # TS: RAM, CPU, DISK Heavy - $CPU = 4 - $RAM = 16 - $DISK = 100 - } -} else { - # Default Minimums - $CPU = 2 - $RAM = 4 - $DISK = 50 -} - -Write-Output "New $machineType : RAM-$RAM, CPU-$CPU, DISK-$DISK" -`This allows for an amazing amount of gothic complexity once we start nesting more deeply. Since we're only using -eq on the internal IF statement, there's another structure that deals with these types of comparisons potentially more efficiently. We can think of it as taking an input variable and directing a specific output based on that. Like my Thom the Tanker (no relation) locomotive turntable track switch! - - - **SWITCH** - - -Let's check out the syntax statement for this one: - -> -`SWITCH (input) {condition1 {output}; condition2 {output}; default {output}} -`That's uglier than previous ones... let's span a few lines with this one: - -> -`SWITCH (input) { - condition1 {output} - condition2 {output} - default {output} -} -`If we apply that to our previous statement, it really cleans it up: - -> -`$machineType = "SQL" - -if ($serverInfo_obj[0].name -like "*SQL*") { - switch ($machineType) { - "CRM" { - $CPU = 2 - $RAM = 8 - $DISK = 150 - } - "VISUAL" { - $CPU = 4 - $RAM = 8 - $DISK = 50 - } - "GP" { - $CPU = 4 - $RAM = 8 - $DISK = 150 - } - "Dynamics 365" { - $CPU = 4 - $RAM = 16 - $DISK = 100 - } - default { - $CPU = 2 - $RAM = 4 - $DISK = 50 - } - } -} else { - # Default Minimums - $CPU = 2 - $RAM = 4 - $DISK = 50 -} - -Write-Output "New $machineType : RAM-$RAM, CPU-$CPU, DISK-$DISK" -`My challenge to you is to find something in your tech environment that you do every day and write the pseudo code for it. You'll find yourself equipped to build out a script from that series of comment lines. Make work easier for yourself starting today. - -So... we're at the end. My sidebar in notepad++ tells me I'm over 200 lines. I've covered all of the points I'd planned on covering. Should we do an encore? One last little tidbit to really help us with our code? Let's make a FUNCTION! Thank you ! - - - **FUNCTION** - - -This is basically just a chunk of code that we're going to be using over and over again. For instance, we're reading in a thousand machines and we'll need to set the CPU, RAM, and DISK for it each time. Wouldn't it be nice if we could to it this way? - -> -`$servers = read-csv c:\serverList.csv -foreach ($server in $servers) { - $serverInfo_obj = make-serverObject $server - new-scvirtualmachine $serverInfo_obj -} -`See that make-serverObject? I just made that up. That's not a real thing... yet. - -although it can be done anywhere above the place we're calling it from, I like to group my functions at the top of my script. A function looks like this: - -> -`function verb-nounFunctionName { - param ( - [type]$firstInputVariableName = "default value" - [type]$secondInputVariableName = "default value" - ) - # Stuff we're doing... - return $whateverOutputVariableWeWant -} -`Breaking this down, the verb-noun structure is what we see in any of the cmdlets we've been using so far: get-file, set-scvirtualmachine, clear-host, get-eventlog, etc... This makes the purpose of the function/cmdlet much easier to figure out. So much of our programming careers will be spent trying to figure out what the \*#$%\*&$!@#% we were thinking when we wrote that chunk of code 4 months ago at 3:30 in the morning after a week of horrible sleep deprivation. - -It functions, but we're not quite sure why. Variable names like $stupidUnicornsWontStopRunningThroughMyOffice and function names like make-itstop -orGoJump and need-morecoffee -now don't lend themselves to easy interpretation. - -The param() structure houses the input for the function/cmdlet we're building. It's just a comma separated list of variable assignments. I've added the [type] to the front of the variable to make it easier to figure out what it wants to have and make the error messages a little bit more informative when there is a TYPE MISMATCH error. This will be [string], [int], [int32], [switch]. Switch types are false by default, true when called: - -> -`function get-switchTest { - param ( - [switch]$flipTheSwitch - ) - return $flipTheSwitch -} - -# We call it anywhere now and it gets replaced with its return value/object -write-output $(get-switchTest).isPresent -write-output $(get-switchTest -flipTheSwitch).isPresent -`From this example, you can see that the return does just that. This can be a single variable or a whole custom object. - -Between the param block and the return, we can do any chunk of processing code we want, even all the object building stuff we did at the beginning way back in the first lesson (note the order of operations from the parentheses during the .add() ): - -> -`function make-serverObject { - param ( - [string]$server = "SERVER", - [string]$type = "TS", - [int]$instance = 0, - [int]$RAM = 4, - [int]$CPU = 2, - [int]$DISK = 50 - ) - $newObject = new-object PSObject -Property @{ - "name" = "$type-$server-$instance"; - "type" = $type; - "totalC" = $DISK; - "cores" = $CPU; - "totalRAM" = $RAM - } - return $newObject -} - -# Create an empty array with the class arraylist -[System.Collections.arrayList]$serverInfo_obj = @() - -# Returns all the defaults and adds it to the object array -$serverInfo_obj.add( (make-serverObject) ) - -# Returns custom values and adds it to the array -$serverInfo_obj.add( - (make-serverObject ` - -type "SQL" ` - -server "Custom" ` - -instance 5 ` - -RAM 16 ` - -CPU 8 ` - -DISK 1024 - ) -) -`I make functions out of anything I use more than 3 times. That way, I can just copy and paste them into the top of my script when I need them again... or did the brilliant developers at Microsoft think of a way to do that too? Note that I've been refering to them as function/cmdlets? Time to dig in and avail yourself of some free training from Microsoft: - - - - -Thank you all for making this such a successful training series. I've received amazing feedback and wonderful critique. Don't be afraid to reach out to the Powershell development community on Powershell.org ( ), reddit ( ), and technet ( ). - -For higher end powershell/devops work, Tao Yang is prolific in his script releases and deep knowledge of Microsoft's System Center ( ) - -Now that we've pulled back the curtain on the topic of scripting, development, devops, and powershell, keep digging into it. Share what you find with others. Always remember, someone else is asking exactly the same questions you are right now! Everything is possible through code. - -**Ignore the box, define the curve.** - - -###### - [Step 4: Loops(I can give you more)](https://powershell.org/?p=294981&preview=true) <-- Step 5: Decisions(The time has arrived) diff --git a/content/articles/2022-07-28-learn-powershell-in-5-painless-steps-input-console-file-applications-step-3.md b/content/articles/2022-07-28-learn-powershell-in-5-painless-steps-input-console-file-applications-step-3.md deleted file mode 100644 index ba44df422..000000000 --- a/content/articles/2022-07-28-learn-powershell-in-5-painless-steps-input-console-file-applications-step-3.md +++ /dev/null @@ -1,244 +0,0 @@ ---- -title: Learn Powershell in 5 Painless Steps – Input (Console, File, Applications) – Step 3 -authors: - - Cole McDonald -date: "2022-07-28T18:45:31+00:00" -categories: - - Tutorials -tags: - - Beginner - - Input - - Tutorial -aliases: - - /2022/07/learn-powershell-in-5-painless-steps-input-console-file-applications-step-3/ ---- - -DevOps = Developers + Operations.  What if you're in Operations and don't have a developer at your disposal?  That should never stop you from making your job easier and more efficient.  Powershell is a scripting language from Microsoft that is already on your Windows PC and Servers and more recently, [open sourced to the OSX and Linux communities](https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/).  It ships with a great minimalist development environment (Powershell ISE). - -The problem I had is that all of the tutorials out there either assume a background in scripting and programming, or act as nothing more than command references.  I'm hoping to enable you to automate your own workflows even if you've never programmed before.  You only need to learn 5 things: Storage, Input, Output, Decisions, Loops.  Everything you do manually is made up of these 5 things.  Every programming language is made up of these 5 things. - -* * * - - -###### - [Step 2: Output (So much we can do)](https://powershell.org/?p=294977&preview=true) <-- Step 3: Input (Just you and me)  --> [Step 4: Loops(I can give you more)](https://powershell.org/?p=294981&preview=true) - - -* * * - -We've spent the last few weeks laying down the ground work to be able to deal with the one main thing that we as developers have to shuttle around our applications' data. We're now able to store them, explore them, and send them somewhere useful. We're going to hit the third piece of this today and begin getting our data from somewhere else. Once we're done today, all that's left is to figure out what to do with the data we're collecting, storing, and distributing. - -This one digs in a little bit deeper yet. After today, you get to get your programmer's card... that's not actually a thing. Sorry if I got you excited, perhaps you can make your own card. I'd take one if you do. - - - **CONSOLE** - - -We're starting in the same place we always do, in our console. Do you still have it open or are you a console closing type of person? If you closed it, go ahead and open up the Powershell ISE again. We're going to start up top in the editor this time. Last time, we learned the "correct" way to write information out to the console: - -> -`$someVariable = "another string" -WRITE-HOST "String to display on the screen" -WRITE-HOST $someVariable -WRITE-HOST "Another string and $someVariable" -`Now, we've got to figure out how to allow the user give us information. If we can trust that Microsoft is using logical naming for their CMDLETS, it should be about reading and writing information. Since output is WRITE-HOST, the input should be READ-HOST. If we start typing it, INTELLISENSE will start to show us possible things we want to enter as pop-up suggestions as we go. It shows me that they did indeed make the command READ-HOST. - -We're going to go ahead and write a real live useful program that does a thing. It's not a particularly useful thing, but it will hit all 3 points: Input, Store, and Output. So that we're using the process of breaking down the task to smaller points, I'm going to start with PSEUDO-CODE (It's just a step by step description of the task): - -> -`# Ask the user for their name -# Display their name in a sentence -`Sounds pretty simple, but this could be anything we'd want to store, like client information for recalling during a sales call; "How's the kids? Bobby and Fran - -> -`# Ask the user for their name -$firstName = Read-Host "Enter your first name:" -$lastName = Read-Host "Enter your last name:" - -# Display their name in a sentence -Write-Host "Your full name is $firstName $lastName" -Write-Host "Your last,first is $lastName, $firstName" -`Look! We made a thing. It does something almost useful. We should be able to store this type of information in an object as well once we collect it: - -> -`$userInfo = @{"first" = $firstName; "last" = $lastName} -`This let's us store larger pieces of information so we can access it using our dot notation (we must use an AD-HOC STRING $() to make it solve before showing it to the string): - -> -`Write-Host "L,F is $($userInfo.last), $($userInfo.first)" -`We could have the user's age, significant other's first name, last name, age, assigned server name, start date, last login date, etc. Store these in an array and we can catalog an entire company. This programming thing is starting to show some promise. For the record, this is the fundamental idea behind DSC (Desired State Configuration). All the information for a server is bundled in an XML object and delivered as an XML file to a program that knows how to read that XML to build a server based on that description. - - - **FILE** - - -Speaking of reading from files, wouldn't it be great if we could do that? Imagine being handed an excel file with systems and pertinent data in it that we want to process. We know we can export a CSV, we can also import one. Let's start with the most basic form of this. We want to get the content of a file. The command for that is ... um ... GET-CONTENT. They're smart, but I made no claims to their creativity in naming. The best thing about their naming conventions for the cmdlets is that we can start to see the pattern they're using and start to guess at the kind of command we want to use and allow Intellisense to guide our exploration. Let's try reading a file. Hop down to the console and try this: - -> -`get-content ~\Desktop\servers.csv -`This should read the contents of the file we exported in the last lesson and write it directly to the console. Useless Cole! No, I retort. We can store that in a variable and manipulate it as a variable, trapped in its temporary digital prison, our plaything; MUHAHAHAHA! Too Dramatic? You started it. Let's try this. You can either enter these directly into the console or add them to the editor and run the whole thing or the selection as you see fit: - -> -`$serverInfo = Get-Content ~\Desktop\servers.csv -Write-Host $serverInfo -`Looks about the same, but we can now do this as well: - -> -`$serverInfo = $serverInfo | ConvertFrom-Csv -Write-Host $serverInfo - -# We even have access to it as an array now -Write-Host $serverInfo[1] -`Now that's different. We assigned the variable to itself after sending it through CONVERTFROM-CSV. Remember from the first lesson when I mentioned it does all the stuff on the right of the = and stuffs that into the stuff on the left? This allows us to change the content of a variable on the fly. We were technically doing that to our $serverInfo_obj using the += OPERATOR. These two examples do the same thing: - -> -`# Add the object for server02 into the array using += -$serverInfo_obj += @( - new-object PSObject -Property @{ - "name" = "server01"; - "freeC" = "27Gb"; - "totalC" = "50Gb"; - "CPU" = "76%"; - "RAMUsed" = "10Gb"; - "RAMTotal" = "16Gb" - } -) - -# Add the object for server02 into the array -$serverInfo_obj = $serverInfo_obj + @( - new-object PSObject -Property @{ - "name" = "server01"; - "freeC" = "27Gb"; - "totalC" = "50Gb"; - "CPU" = "76%"; - "RAMUsed" = "10Gb"; - "RAMTotal" = "16Gb" - } -) -`This method of adding items to an array or object is actually really slow. You won't notice it in these examples, but if you are dealing with thousands of items being added over and over again, each time you add a piece, it gets longer. So each time we want to add to the end of it, it gets to count the contents to find the end. This can really add up after a bit. There are much more efficient ways to do some of these exercises. - -Know that, then put it out of your head, understanding that if you get to the point where that matters, the information about those methods are out there, and we're learning here. This method illustrates my points best. It is also a more approachable way to make quick and functional scripts for those of you who haven't ever programmed before and are being thrust kicking and screaming into this new and automated version of the future. -\*** (Shout out to user toregroneng on reddit for pointing out that I'm not specifically using "correct" powershell style and practices) - -All that said, we're starting to tie it all together. Let's see if there's a more efficient way to do the last CSV example. - -> -`$serverInfo = Get-Content ~\Desktop\servers.csv | ConvertFrom-Csv -Write-Host $serverInfo[1] -`Sweet, we made it a single line thing. If they built in a function for converting a CSV file into an object, I bet they added one for importing directly from a CSV file. Since we had EXPORT-CSV before, let's just go wild and try replacing EXPORT with IMPORT! Crazy programmers. Perhaps we can streamline it even more: - -> -`$serverInfo = Import-csv ~\Desktop\servers.csv -Write-Host $serverInfo[1] -`Look at that. These cmdlets don't yet exist for XML, HTML, and JSON, so we'll still have to convert those formats. Here's how that works: - -> -`# First, we'll take our $serverInfo object and -# turn it into an JSON file using the cmdlets we're familiar with -Get-Content ~\Desktop\server.csv | ConvertTo-Json | out-file ~\Desktop\servers.json - -# Then read it back in as the point of our exercise here -$JSON_obj = Get-Content ~\Desktop\servers.json | ConvertFrom-Json - -# Prove to ourselves that it did something useful -Write-Host $JSON_obj.name -`That first bit is a really common type of Powershell task structure. We're reading in a file, converting it from one format to another and then saving it out to a file. The task itself doesn't matter. The workflow and way of thinking of passing one thing into the next is a very common way of working that makes this an amazingly useful tool to learn, even if you don't use it as a programming platform. - -Now, in our promise of automating absolutely everything so we never have to do anything again (we won't tell anyone that part), let's figure out how to ask VMM for some information. Even if your goal is just to never have to open extra applications on your server other than your Powershell ISE, this is the first step on that quest. - - - **APPLICATION** - - -In the last lesson, we imagined a story of darkness and woe whereby our hero (an anonymous everyman IT technician) was cornered by the opposing forces (Sales) and forced to do manual data entry under threat of eternal flogging and being forced to listen to zydeco standards as sung by a group of cats and dogs. Having actually had that job for a little while, our hero decided that s/he would never again perform those sorts of tasks for anyone, ever again. What did s/he do? Powershell. Powershell is always the answer. At least in a Powershell focused blog, it's a strong bet if you've stopped paying attention and are asked a question. - -We can assume that nearly everything an application displays in its interface is stored somewhere behind the scenes that we can get to. Many applications allow us to hook into them. Some by exposing their .NET guts like a tauntaun in winter, others through a package of cmdlets called a MODULE. Your installed modules are listed in the pulldown menu on the right side pane of the ISE interface. I tend to keep mine closed as I like to have as much blue space on the screen as possible without actually having a blue screen. Under the Module "Storage" I find the command get-volume. - -Let's ask Windows for something... Like those bits from our $serverInfo_obj from the output lesson: - -> -`$driveCInfo = Get-Volume C -`The output shows me the parts I am looking for, and other info as well. - -$driveCInfo.Size would be great. As would SizeRemaining. They fit right into our existing object. If we pull up that code again, we can put in an object for our current host machine. In my case, it's a laptop. - -> -`$serverInfo_obj = $serverInfo_obj + @( - new-object PSObject -Property @{ - "name" = "server01"; - "freeC" = $(Get-Volume C).SizeRemaining; - "totalC" = $(Get-Volume C).Size; - "CPU" = "76%"; - "RAMUsed" = "10Gb"; - "RAMTotal" = "16Gb" - } -) -`This can be sped up slightly. Again, not that big a deal with one server, but with 1000 of them, we can cut our information grabs in half by assigning the results of Get-Volume to a variable first, then calling that instead of the cmdlet twice: - -> -`# Query for our info -$volumeCInfo = Get-Volume C - -# So now $volumeCInfo.Size gets the size for us, -# but it's not in GB, let's math! -$volumeCTotal = $volumeCInfo.size / 1GB -`1GB is a built in value that converts your Bytes to GB. But we'd like to see it as a nice round number. Let's look at that. There's a bunch of math built into the system through .NET . I'll show it to you, then show you a cheat: - -> -`# Using the math functions built into the system -$volumeCRoundedTotal1 = [system.math]::Round($volumeCInfo.Size / 1GB) -$volumeCRoundedRemaining1 = [system.math]::Round($volumeCInfo.SizeRemaining / 1GB) - -# Cheating by casting it into integer -[int]$volumeCRoundedTotal2 = $volumeCInfo.Size / 1GB -[int]$volumeCRoundedRemaining2 = $volumeCInfo.SizeRemaining / 1GB - -# Add it to the Object -$serverInfo_obj += @( - new-object PSObject -Property @{ - "name" = "server01"; - "freeC" = $$volumeCRoundedRemaining2; - "totalC" = $volumeCRoundedTotal2; - "CPU" = "76%"; - "RAMUsed" = "10Gb"; - "RAMTotal" = "16Gb" - } -) -`We can get ram using the WMI system built into windows. This returns the total ram in bytes. - -> -`# Total -$(Get-WMIObject win32_PhysicalMemoryArray).MaxCapacity - -# Used -$(Get-WmiObject win32_OperatingSystem).freephysicalmemory - -# computer name -$(Get-WmiObject win32_OperatingSystem).csname - -# CPU Usage. -# This we have to force to calculate using Measure-Object -Get-WmiObject win32_processor | Measure-Object -Property LoadPercentage -Average | select-object Average -`Like with sun screen, it is time to apply. Take a little bit of time to rewrite the rest of the object for the server with these new little chunks of code. If you need pieces of information from your systems, Google will find even more of the CLASSES of information you can grab using Get-WMIObject. I searched for these using: - -> -`Get-WMIObject class powershell -`Go ahead and send that out to a CSV so that you can import it anywhere you'd like. You can either use the | ConvertTo-CSV | Out-File combination, or the | Export-CSV technique. - -Our business does quite a bit of work with PowerBI. Most of my reports that aren't for my own personal use, which end up as just text or in an excel table, get turned into dashboards for analyzing our clients' environments to make them run more efficiently and allow stronger optimization based on actual use rather than "one size fits all" standards. - -If you choose to get farther into this sort of thing, you'll start to notice that the older Visual Basic classes and the .NET classes are available to us using that ugly [class.name]::method(data) format. - -For the purposes of this tutorial, I'm only grabbing information that everyone has access to. The best thing about this technique is that we can grab information from any application that has cmdlets available to us. All of System Center grants us access. I happen to be a SCOM admin, so I use the information made available to me from Operations Manager for many of the tasks I need to complete. - -To get to System Center Virtual Machine Manager, we'll need to get the cmdlets loaded by importing the module. Can you guess the cmdlet name for that? - -> -`import-module virtualmachinemanager -`If this doesn't work on your computer you're using to learn powershell, you'll have to have either install the VMM Console, or be running the scripts from the VMM server. - -What we're going to start running into is a matter of volume. Entering information about three servers by hand is a little bit annoying, but not too bad. Let's do that for 500 machines. How about 1000. Now we're talking some pretty serious RSI. The thought of it is enough to drive someone loopy. We should do that next. LOOPS. That will save us quite a bit of typing.  That should be a blog someone writes... - - -###### - [Step 2: Output (So much we can do)](https://powershell.org/?p=294977&preview=true) <-- Step 3: Input (Just you and me)  --> [Step 4: Loops(I can give you more)](https://powershell.org/?p=294981&preview=true) diff --git a/content/articles/2022-07-28-learn-powershell-in-5-painless-steps-loops-foreach-for-while-step-4.md b/content/articles/2022-07-28-learn-powershell-in-5-painless-steps-loops-foreach-for-while-step-4.md deleted file mode 100644 index 78b290b7a..000000000 --- a/content/articles/2022-07-28-learn-powershell-in-5-painless-steps-loops-foreach-for-while-step-4.md +++ /dev/null @@ -1,290 +0,0 @@ ---- -title: Learn Powershell in 5 Painless Steps – Loops (Foreach, For, While) – Step 4 -authors: - - Cole McDonald -date: "2022-07-28T18:45:44+00:00" -categories: - - Tutorials -tags: - - Beginner - - Loops - - Tutorial -aliases: - - /2022/07/learn-powershell-in-5-painless-steps-loops-foreach-for-while-step-4/ ---- - -DevOps = Developers + Operations.  What if you're in Operations and don't have a developer at your disposal?  That should never stop you from making your job easier and more efficient.  Powershell is a scripting language from Microsoft that is already on your Windows PC and Servers and more recently, [open sourced to the OSX and Linux communities](https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/).  It ships with a great minimalist development environment (Powershell ISE). - -The problem I had is that all of the tutorials out there either assume a background in scripting and programming, or act as nothing more than command references.  I'm hoping to enable you to automate your own workflows even if you've never programmed before.  You only need to learn 5 things: Storage, Input, Output, Decisions, Loops.  Everything you do manually is made up of these 5 things.  Every programming language is made up of these 5 things. - -* * * - - -###### - [Step 3: Input (Just you and me)](https://powershell.org/?p=294979&preview=true) <-- Step 4: Loops(I can give you more) --> [Step 5: Decisions(The time has arrived)](https://powershell.org/?p=294983&preview=true) - - -* * * - -We've spent three weeks now learning to move data from point A to point B. Let's see how we scale this from a list of 3 servers to 30, 300, or 3 Million (Pinky to corner of mouth... yes I did, I assume you did as well). We'll start with our object code from before. - -There is a matter of scale that happens here, and how we add to our object array matters. Using the += we've been using isn't a big deal with 3 objects. When we start to ramp this up, we run into a problem. The problem is this: - -> -`# Declare a test array $a -$a = @("thing 1", "thing 2", "thing 3") - -# Add an element to the end -$a += @("thing 4") - -# This is what it's actually doing -$a = $a + @("thing 5") -`We start on the right side of the equals sign (technical name: assignment operator). From left to right on that side, we (the computer) figure out what is in $a so we can find the end of it for the + then put the contents of the array @("Thing 5") into the existing array and return it across the assignment operator (equals sign).  When there are only 3 elements in $a, it's not a big deal.  When we get to thousands of them, it starts to take a long time. - -It's as if our new object has to go to the front of the line in the deli and ask each customer in line if they're at the back of the line before getting into the back of that line. - -The object knows how many elements it has.  It would be nice to take the new element, hand it the next index out of a virtual red counter number spindle and tell it to stand in that deli line.  This is a much better way to do this to make it faster at scale as it no longer needs to read through the whole array to find the end. - -> -`# Create an empty array with the class arraylist -[System.Collections.arrayList]$serverInfo_obj = @() - -# I've changed the server naming conventions slightly -# Add the object for server-01 into the array -$newObject = new-object PSObject -Property @{ - "name" = "server-01" ; - "totalC" = "50Gb" ; - "totalD" = "200Gb" ; - "cores" = "2" ; - "totalRAM" = "8Gb" -} -$serverInfo_obj.add($newObject) - -# Add the object for server-02 into the array -$newObject = new-object PSObject -Property @{ - "name" = "server-02" ; - "totalC" = "50Gb" ; - "totalD" = "50Gb" ; - "cores" = "4" ; - "totalRAM" = "16Gb" -} -$serverInfo_obj.add($newObject) - -# Add the object for server-03 into the array -$newObject = new-object PSObject -Property @{ - "name" = "server-03" ; - "totalC" = "50Gb" ; - "totalD" = "50Gb" ; - "cores" = "4" ; - "totalRAM" = "16Gb" -} -$serverInfo_obj.add($newObject) -`Now, we'll just enter another object for each of our 3 million servers we're managing.. I'll wait. No? Let's see how we can make our script LOOP through a large number of things. We'll start by noticing our naming convention has a simple format that would be suited well to just bumping the number a bunch of times and setting the name of the server to "Server-$instance". This will be simple to perform using a RANGE. To see how a range works, enter this into your console: - -> 1..100 - -Cool... we made a computer count to 100. I may have played with this dumb little piece of code far too much when I first learned it. We'll note that the numbers don't have the leading zeroes to make them the same number of digits. It's easier to read a list of them if they all line up. This looks a little bit like I sneezed while typing but I'll explain it once we've run it: - -> 1..100 | %{ "{0:000}" -f $_ } - -1) We know that the range generates all the numbers between 1 and 100. -2) We know that the PIPE character passes data from the left to the right. -3) We recognize that there is some sort of string in there "" and some CURLY BRACES {} - -We'll start with the curly braces. Anything inside a set of curly braces is a set of commands that get run and solved once we get to them. A very common structure you'll see frequently in scripts we get from online is this bit |%{} - -| passes information across. Specifically, it passes objects. Those objects can be as simple as the number we're generating here, or as complicated as objects containing multiple properties and methods. - -{} contains a set of commands, we just learned this. - -% is a shorthand for a command called... - - - **FOREACH** - - -I just heard the dramatic hamster soundtrack in my head when I typed that. I need a hobby. The foreach command takes a set of 0 or more objects and runs the contents of the paired curly braces once for each of the objects being passed to it. In our case, we're passing it a bunch of numbers, one per object. Within the foreach structure, I'd like to draw your attention to the $_ but. That is a shorthand for $PSItem, which is the current object coming across the PIPELINE. We can verify this thusly: - -> -`# Shorthand -"Ferdinand" | % { Write-Output $_ } - -# Full commands, I prefer these for readability -"Imelda" | Foreach { Write-Output $PSItem } - -# Passing an array across -@("Ferdinand", "Imelda") | Foreach { Write-Output $PSItem } -`All that's left is to PARSE (figure out) the "{0:000}" -f $_ part. It's a special structure that allows us to format strings. We now know that the $_ is the object coming across the pipeline... in our case, a number; let's say 42. The -f is called a format operator, the bits inside the string are the PLACEHOLDERS. To show you how they work, we'll do a simple demonstration. - -> -`"First {0}, Second {1}" -f "thing", "one" -`You'll note that the stuff on the right is like an array with a part 0 and a part 1. Indices are difficult to talk about outside the code. I blame the binary numbering system for this problem. So "thing" is the zeroth item and "one" is the oneth item on the right side of the -f operator. They are represented by their index number in curly braces on the left, inside the string. - -Now, as we look back at our initial piece of code we're working through, we've got "{0:000}". The 0 to the left of the : is our index. we know that the $PSItem is in our zeroth item in our single item array to the right of the -f operator, so that should show up there. To the right of the : we can only assume is the part that adds the zeroes to our number, making it 042, and we'd be correct. - -This is amazingly powerful for information display allowing left and right alignment, hexadecimal conversion, currency, number percision, etc. In our case, it's just setting aside digits that will be filled in with our 42. We could also use {0:D3} to do the same thing, I just like the {0:000} because it's a little easier to look at and tell what it's doing. To write that whole thing out without the short hand: - -> -`1..100 | Foreach { "{0:000}" -f $PSItem } -`Here's a list of different formatting you can use with the -f operator: - -So, lets get back to naming our servers: - -> -`1..100 | foreach { "server-{0:000}" -f $PSItem } -`I have another way to do this same type of thing. Instead of sending it things, this one generates them based on whatever you tell it to do. This structure exists in nearly every programming language out there. It is a little bit more programmer looking than the foreach loop. - - - **FOR** - - -We'll start by generating exactly the same thing as our last piece of code: - -> -`for ($i=1; $i -lt 101; $i++) { "server-{0:000}" -f $i } -`Since it's more programmy, I'm going to break it up into multiple lines. I'm going to do this in a couple different ways to illustrate that it's really the same code, just formated differently. You can technically do this with most examples of code within curly braces {} or parentheses (): - -> -`# More of a .NET / C# way of looking at this code -# One thing per line -# Blocks open and close on their own line -# Lots of white space -for -( - $i=1 - $i -lt 101 - $i++ -) -{ - "server-{0:000}" -f $i -} - -# The traditional "correct" Powershell way -# Very C++ or Java-y -for ($i=1; $i -lt 101; $i++) -{ - "server-{0:000}" -f $i -} - -# The more Python looking way, if you're into that -# In Python, White space at the beginning of a line counts -# The curly braces wouldn't even be necessary there -for ($i=1; $i -lt 101; $i++) { - "server-{0:000}" -f $i -} - -# How I prefer it -# - Collapses better in the ISE -# - Shows me the block start and finish Easier when nesting -# - Has the brevity of the Python without the open ended closing bracket -for ($i=1; $i -lt 101; $i++) { - "server-{0:000}" -f $i -} -`Use whatever makes the code easier for you to read. Feel free to reformat the scripts you download from others as well to make them easier for you to read. I use the latter format for the reasons I stated in the comments. Let's get back to the for statement: - -> -`for ($i=1; $i -lt 101; $i++) { - "server-{0:000}" -f $i -} -`The command is FOR (initiate variable; condition; increment variable){code block} - -We recognize the $i=1 We're setting the variable $i to the value 1 as a starting point. We can use the semi-colon ; to separate commands on the same line. - -The second part is called an evaluation. The -lt stands for "less than." So the middle statement reads: $i is less than 101. Our FOR LOOP will run as long as this is true (or as powershell sees it, $TRUE as opposed to $FALSE). - -The third piece states what happens each time the loop comes back up to the top. In this case, we are incrementing our $i by 1. The ++ adds 1 to whatever integer based variable it's attached to. If we start at 0 instead of 1, we can loop through index numbers. - -It's a little bit pointless as we can just pass through, but perhaps we want to loop through every other item in an array. We could do a $i=$i+2 for the third bit. Very useful on our search for the next prime number and that huge award! (2 is the only possible even prime) - -I find the FOR loop a bit ugly for most of the processing I do. There are times it is exactly the thing needed, but I very much prefer having more control within the body of the loop. For this, I primarily use the WHILE loop instead. - - - **WHILE** - - -It is simple in concept, it loops WHILE the condition () is true (careful, this first example will loop forever - keep an eye on the stop button at the top of the editor): - -> -`While ( $TRUE ) { # Does a thing; Write-Output "Can't sleep" } -While ( $FALSE ) { # Doesn't do a thing; Write-Output "Clowns will catch me" } -`Let's talk TRUE and FALSE. There are special variables defined in almost every language for $TRUE and $FALSE. These are the two BOOLEAN conditions, the binary bread and butter of 1 and 0, so to speak. In fact, they are stored as a 1 and a 0 and can be used that way: - -> -`While ( 1 ) { # Does a thing; Write-Output "Can't Sleep" } -While ( 0 ) { # Doesn't do a thing; Write-Output "Clowns will catch me" } -`Let's talk BOOLEAN a little bit (get it... bit? Like a single 1/0 piece of storage in the computer? I slay me). - -During the for loop discussion, we looked at the -lt operator, which I mentioned was a boolean operator. This one will take some explanation. - -A boolean statement is any comparison that can be resolved to true or false. In our for loop, we had the statement $i -lt 101. As long as $i was less than 101, that statement resolved to $TRUE. As soon as it was equal (-eq) to 101, it was no longer less than it and therefore considered $FALSE. As seen in the simple statements above, $FALSE in the condition () part of the while loop "# Doesn't do a thing." If we replace the $TRUE/$FALSE with a CONDITIONAL STATEMENT, we can build that same FOR loop using a WHILE loop. - -> -`$i = 1 -While ( $i -lt 101 ) { - "server-{0:000}" -f $i - $i++ -} -`We've got a bunch of different boolean operators we can use against numbers: - -> -`-eq Equal To --lt Less Than --le Less Than or Equal To --gt Greater Than --ge Greater Than or Equal To -`A few for strings: - -> -`-like This takes wildcards: "server-1*" --notlike same as above, but excludes instead of includes -`EXTRA CREDIT! There are a few more that will evaluate multiple boolean statements as well: - --and (both true) - -> -`$true -and $false = $false -$true -and $true = $true -$false -and $true = $false -$false -and $false = $false -`-or (at least one true) - -> -`$true -or $false = $true -$true -or $true = $true -$false -or $true = $false -$false -or $false = $false -`-xor (one true, not both) -("exclusive or", not the bad guy from a low budget 80s sci-fi movie) - -> -`$true -xor $false = $true -$true -xor $true = $false -$false -xor $true = $true -$false -xor $false = $false -`-not (you're so negative, also known as !) - -> -`-not $false = $true -!$false = $true --not $true = $false -!$true = $false`# Returns $TRUE when $i is 50 to 100 -($i -gt 49) -and ($i -lt 101) - -# Makes more sense as -($i -ge 50) -and ($i -le 100) -`You'll note the () I've used. These are used in this case to indicate order of operations. The parentheticals are solved first. This turns them into a $TRUE or a $FALSE. Then those results are compared with the boolean operator. You can make these quite complex. Imagine you need to find all servers that have more than 8GB installed and smaller than 250GB disk, but not the ones named SQL-xxx - -> -`( - ( $server.memory -gt 8 ) -and - ( $server.diskC -lt 250 ) -) -and ( - $server.name -notlike "SQL-*" -) -`This will evaluate the memory and disk space part first, then evaluate the server name, then check them against each other. This is great if all we're ever doing is checking whether to stop a loop. What if we want to adjust our dynamic memory settings on a VM based on its memory and disk configurations? We'd need to be able to do this test, then have the results drive a DECISION! Have you guessed next week's topic yet? - -Next week, we learn DECISIONS. Or as I like to call it, how SKYNET begins. - - -###### - [Step 3: Input (Just you and me)](https://powershell.org/?p=294979&preview=true) <-- Step 4: Loops(I can give you more) --> [Step 5: Decisions(The time has arrived)](https://powershell.org/?p=294983&preview=true) diff --git a/content/articles/2022-07-28-learn-powershell-in-5-painless-steps-output-console-file-xml-csv-step-2.md b/content/articles/2022-07-28-learn-powershell-in-5-painless-steps-output-console-file-xml-csv-step-2.md deleted file mode 100644 index a91e8e4b4..000000000 --- a/content/articles/2022-07-28-learn-powershell-in-5-painless-steps-output-console-file-xml-csv-step-2.md +++ /dev/null @@ -1,239 +0,0 @@ ---- -title: Learn Powershell in 5 Painless Steps – Output (Console, File, XML/CSV) – Step 2 -authors: - - Cole McDonald -date: "2022-07-28T18:45:18+00:00" -categories: - - Tutorials -tags: - - Beginner - - Output - - Tutorial -aliases: - - /2022/07/learn-powershell-in-5-painless-steps-output-console-file-xml-csv-step-2/ ---- - -DevOps = Developers + Operations.  What if you're in Operations and don't have a developer at your disposal?  That should never stop you from making your job easier and more efficient.  Powershell is a scripting language from Microsoft that is already on your Windows PC and Servers and more recently, [open sourced to the OSX and Linux communities](https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/).  It ships with a great minimalist development environment (Powershell ISE). - -The problem I had is that all of the tutorials out there either assume a background in scripting and programming, or act as nothing more than command references.  I'm hoping to enable you to automate your own workflows even if you've never programmed before.  You only need to learn 5 things: Storage, Input, Output, Decisions, Loops.  Everything you do manually is made up of these 5 things.  Every programming language is made up of these 5 things. - -* * * - - -###### - [Step 1: Storage (Lots of fun)](https://powershell.org/?p=294975&preview=true) <-- Step 2: Output (So much we can do) -->[ Step 3: Input (Just you and me)](https://powershell.org/?p=294979&preview=true) - - -* * * - -This week it's all about OUTPUT. We'll be covering ways to use the stored data to get information to either the User (the most important part of the GUI) or to another part of our script for further processing. I do have a confession to make. I've already tricked you into starting this lesson last week. If you haven't closed your ISE window yet, the next bit will show you exactly how to get information about our server objects we stored in the $serverInfo_obj array. If you did close it (I forgive you, it has been a week), open it back up and run the last chunk of code we wrote. It's the Object part from our last lesson. Any variable you put information into will be available in the console until you close the application. - -Playing around with Variables is all well and good, although it would be better if we could do something useful with the values in there. I assume you're reading this because you want to do something with Powershell, not just learn Powershell for it's own sake. While writing scripts, we often find ourselves exploring objects that we didn't create in the console exactly the same way we were in the last exercise. - - - **CONSOLE** - - -If you recall from the previous lesson on Storage, the editor is the top part of our PowerShell ISE application and the console is the bottom part of the window. - -Try typing this into the console followed by the enter key to EXECUTE this command: - -> -`$serverInfo_obj[0] | Get-Member -`The VERTICAL PIPE character ( | ) takes the objects from the part to the left and hands them off to the part to the right. The process is called, simply enough, PIPING. I always envisioned it as a set of saloon doors from a western, though. In this case, we're sending our objects we created for our first server ( [0] ) across the pipe into GET-MEMBER. Get-Member is a function from Microsoft that shows you all of the elements of an object. We made a few PROPERTIES last time and you probably recognize them (name, totalRAM, etc...). It even tells you whether they're String or Int or some other data type. - -When we're grabbing information from servers or software, it usually comes to us as an object. You will see other MEMBERS listed in those objects. Most specifically METHODS, which are little programs within the object itself but are a topic for another day. We used piping last week to send our object into a Format-Table with the autosize flag activated. In doing that task, I already had you output to the Console. - -Let's imagine a scenario where we would use this. A client is coming to visit and the Powerpoint your marketing team is going to present gets that last minute slide added that needs information about a few of your servers. Name, number of cores, Installed RAM, Size of C: and D: ... sound familiar? We can ask VMM or the servers themselves for all of that information. We'll cover some of that in our next lesson on input. Right now, we've got a deadline to meet, the clients just pulled into the parking ramp. Boy, Cole (you might say), this sounds very specific ... it may or may not have happened just the other day. Here's the procedure I may or may not have followed for this: - -> -`# Create an empty array -# Add the object for server01 into the array -# Add the object for server02 into the array -# Add the object for server03 into the array -# Pipe the object through Format-Table -# Select the output from the console using the mouse -# Control-C to copy to the clipboard -# Open the PPT Deck -# Navigate to the slide in question -# Control-V to paste the text into the block they've assigned -# Control-S to save the document -# Control-Q to close the document and the application -# Lift Phone Handset -# Dial Sales department -# Let them know you've single-handedly saved their presentation -# Grow a mullet, you're a rockstar. -`That seems like I may have gotten carried away. I actually have a reason for that. It's the kind of detail we'll be using going forward to start our scripts. Now we just have to fill in the actual script parts. I recommend you go for a haircut, the mullet was a horrible idea, although it worked for MacGyver. - -Let's start by adjusting our object that we've already created. They need specific pieces of information for their presentation: - -> -`# Create an empty array -$serverInfo_obj = @() - -# Add the object for server01 into the array -$serverInfo_obj += @( - new-object PSObject -Property @{ - "name" = "server01"; - "totalC" = "50Gb"; - "totalD" = "200Gb"; - "cores" = "2"; - "totalRAM" = "8Gb" - } -) - -# Add the object for server02 into the array -$serverInfo_obj += @( - new-object PSObject -Property @{ - "name" = "server02"; - "totalC" = "50Gb"; - "totalD" = "50Gb"; - "cores" = "4"; - "totalRAM" = "16Gb" -} -) - -# Add the object for server03 into the array - $serverInfo_obj += @( - new-object PSObject -Property @{ - "name" = "server03"; - "totalC" = "50Gb"; - "totalD" = "50Gb"; - "cores" = "4"; - "totalRAM" = "16Gb" - } -) - -# Pipe the object through Format-Table -$serverInfo_obj | Format-Table -`The rest is on you... - -> -`# Select the output from the console using the mouse -# Control-C to copy to the clipboard -`Wouldn't the smart programmer folks at Microsoft, in their infinite wisdom, have thought of this? Indeed they have, so let's change that last line: - -> -`$serverInfo_obj | Format-Table | clip -`Here's what ended up on my clipboard: - -> -`totalC totalD totalRAM name cores ------- ------ -------- ---- ----- -50Gb 200Gb 8Gb server01 2 -50Gb 50Gb 16Gb server02 4 -50Gb 50Gb 16Gb server03 4 -`I'm not happy with the order it chose for the properties. I'm going to force its hand using the SELECT-OBJECT command and a comma separated list of the properties I want it to show: - -> -`$serverInfo_obj | Select-Object name, cores, totalRAM, totalC, totalD | Format-Table | clip`name cores totalRAM totalC totalD ----- ----- -------- ------ ------ -server01 2 8Gb 50Gb 200Gb -server02 4 16Gb 50Gb 50Gb -server03 4 16Gb 50Gb 50Gb -`That's better. Now off to PPT and pasting. I'm going to give you a freebie here! Are you down with OGV? It's a short name for Out-GridView and it's awesome! Imagine that instead of 3 servers, you've got 1000 and they are from different clients and the sales presentation is for a single client and you can't let them see the other client's information? - -You can pipe through Out-GridView to make a selection interface that allows dynamic filtering, shift-selecting rows of information, ctrl-clicking individual rows. I use OGV all the time! There are actually quite a few shortcuts for common commands: Format-Table is ft, Format-List is fl, Get-Member is gm). - -The Out-GridView command takes an option called passthru. These are indicated by a dash ( - ) and can either be flags (True/False) like this one is or take data directly after them to send it down the PIPELINE: - -> -`$serverInfo_obj | Select-Object name, cores, totalRAM, totalC, totalD | ogv -passthru | ft | clip -`I've sometimes found it difficult to get sales to let me adjust their slide decks. A better option would be to send them a file. That will allow them to do the copying and pasting how they like so they are in control of their presentation. - - - **FILES** - - -The nice thing about Powershell is that piping from one small single purpose command to the next allows you to just change one piece to change part of your script. In this case, we can replace the clip command and change it to write to a file: - -> -`$serverInfo_obj | Format-Table | Out-File C:\Users\cole.mcdonald\Desktop\test.txt -`This places a text file with that little table on my desktop so I can attach it to an e-mail. This file can go anywhere you have access to. If you need to write out to a folder that requires admin access, you can run Powershell ISE just like any other program: Right-Click and Run as Administrator. - -!!!Caution. This is the one time I'll be serious during this entire series... you can wipe out your whole environment if you're not careful with elevating the ISE. Use it only if you absolutely must. Use it only for the task you need it for. Triple check your code!!! - -For our next example, we're going to use a special kind of string. We know it's got quotes... but we want to keep line formating intact as well. This calls for a stringwich @""@. We can open the stringwich (splat-quote) anywhere we'd like on the line, but the closing pair (quote-splat) has to be on its own line. Imagine that we're making a little bit of HTML to format that table we just made. The cool thing about strings is that we can access any of our variables inside them. - -If we're using objects and looking to get at specific information in them, it gets a little bit fancy. We just have to hide what we're doing from the string using an AD HOC VARIABLE. It's just a fancy way to say we're solving what's in the parentheses first. For that we use this: $(). The dollar sign because it's a variable, and the parentheses means we're doing this first. - -Getting to the name of server01, for example, we use this $($serverInfo_obj[0].name). We recognize all of the pieces of this from our objects lesson last time. It's the name property of element 0 of our $serverInfo_obj array. We've stuffed it into the $() to hide the [0].name part from the string. Otherwise, it just treats it as the next few characters in the string. That's no good. Let's see what that looks like: - -> -`$HTMLOutputFromTheObjectWeMadeEarlier = @" - - - Server Configurations - - - - - name - cores - totalRAM - totalC - totalD - - - $($serverInfo_obj[0].name) - $($serverInfo_obj[0].cores) - $($serverInfo_obj[0].totalRAM) - $($serverInfo_obj[0].totalC) - $($serverInfo_obj[0].totalD) - - - $($serverInfo_obj[1].name) - $($serverInfo_obj[1].cores) - $($serverInfo_obj[1].totalRAM) - $($serverInfo_obj[1].totalC) - $($serverInfo_obj[1].totalD) - - - $($serverInfo_obj[2].name) - $($serverInfo_obj[2].cores) - $($serverInfo_obj[2].totalRAM) - $($serverInfo_obj[2].totalC) - $($serverInfo_obj[2].totalD) - - - - -"@ -`Go ahead and look at that variable in the console. Should we be snooty about it and do it the "proper" powershell way? - -> -`# This variable name is horrible, feel free to fix it by using -# a better one when you enter and run the code in the editor - -# Write-Host outputs strings to the console - -Write-Host $HTMLOutputFromTheObjectWeMadeEarlier -`Note that all of the lines are separated and all of the tabs remain! If you'd like to see the difference, try it without the @ @ (that's a Star Wars PUNctuation). I've had inconsistent results keeping spacing without them. If the HTML code confuses you, feel free to just use the elements from our object array and build your own output, perhaps you can turn it into a comma separated text file (CSV). That would actually be really slick as it'll open directly in Excel or even insert as a table into the PPT deck. If only those super smart programmers at Microsoft had thought of that! Someone's talking to me in the background, hold on... - - - **XML/CSV/HTML** - - -So, I'm back. I've been told Microsoft's programmers did think of that. I was all geared up to get you writing some fancy chunk of code called a FUNCTION to turn objects into CSV files to export to files... not at all necessary. Apparently, that will have to be a later blog as well. Apparently, or so I'm told, all we have to do is send it through another little command. Technically, in Powershell, these are called CMDLETS: pronounced command-lets. Powershell is still new enough they could afford full-blown commands. They are supposed to follow a specific format as well called verb-noun. - -In the cases we've seen so far, we've used the verbs Get, Write, Format, and New. There are also Set (the dangerous one), Export, Read (which will be covered next week), and a few more. The nice thing about the ISE is that if you start typing a cmdlet, it'll suggest other ones for you. Microsoft calls this INTELLISENSE and it's a great way to explore what's available in the language. The right hand pane of the ISE window also contains a huge list of them and that's searchable as well. Explore there to find what all is available. You can even use Get-Help to find out more info about them: - -> -`Get-Help Write-Host -showwindow -`This will make you a little window with information and examples for the command. If this didn't work, you may need to run the cmdlet Update-Help the first time out to get it to download all the help files to your computer. Let's look at our CSV option using this technique: - -> -`get-help convertto-csv -ShowWindow -`This gives you a window that allows you to really dig into more information about the cmdlets. Let's try that using our out-file example and add the ability to select the elements to pass through using our GridView: - -> -`$serverInfo_obj | ogv -passthru | ConvertTo-CSV | Out-File ~\Desktop\servers.csv -`The ~ character is brought over from the Linux world and refers to your current user directory. It makes it easier to get to your documents/desktop/downloads directories, etc. This can also take UNC paths to get to network resources. - -So this example takes our objects, pipes them into OGV for us to select the ones to pass through to the conversion and then to the outfile command. The resulting file can now be double-click opened into Excel, inserted as a table in PPT, whatever you could normally do with this type of data... even stuffed into PowerBI or R for big data analysis. That previous HTML example can be done with a ConvertTo-HTML which I saw while I was looking up the CSV command earlier. Did you notice it too? It also does XML and JSON for using across the web or to build DSC files. Yes, Virginia, we can build DSC files from scratch using Powershell allowing us to automate server buildouts modelled after a single instance. This build out could even be scripted to provision IP addresses from a database you're using to keep track of such things and make DNS changes to your environment so you don't have to. There's a whole bunch of built-in cmdlets for dealing with your Azure deployment and System Center if you have it installed. It also allows for DSC configuration of VMs through VMM with a little bit of fiddling. - -Now, if only we could have the program we're writing ask us for information to store in scripts... maybe if we can figure out the cmdlet name. Writing to the Console is Write-Host. I wonder what Reading from it would be? You can either explore that or wait until next week when we look at INPUT. We'll cover a few more options as well. At the end of next week, you'll be able to gather information, store it in variables and output it in various ways. Sounds as if we'll have you doing useful things by the end of next week. After that groundwork has been laid, we'll dig into building SkyNet. - - -###### - [Step 1: Storage (Lots of fun)](https://powershell.org/?p=294975&preview=true) <-- Step 2: Output (So much we can do) -->[ Step 3: Input (Just you and me)](https://powershell.org/?p=294979&preview=true) diff --git a/content/articles/2022-07-28-learn-powershell-in-5-painless-steps-storage-variables-arrays-hashtables-step-1.md b/content/articles/2022-07-28-learn-powershell-in-5-painless-steps-storage-variables-arrays-hashtables-step-1.md deleted file mode 100644 index 07f1c0987..000000000 --- a/content/articles/2022-07-28-learn-powershell-in-5-painless-steps-storage-variables-arrays-hashtables-step-1.md +++ /dev/null @@ -1,271 +0,0 @@ ---- -title: Learn Powershell in 5 Painless Steps – Storage (Variables, Arrays, Hashtables) – Step 1 -authors: - - Cole McDonald -date: "2022-07-28T18:45:08+00:00" -categories: - - Tutorials -tags: - - Beginner - - Variables - - Tutorial -aliases: - - /2022/07/learn-powershell-in-5-painless-steps-storage-variables-arrays-hashtables-step-1/ ---- - -DevOps = Developers + Operations.  What if you're in Operations and don't have a developer at your disposal?  That should never stop you from making your job easier and more efficient.  Powershell is a scripting language from Microsoft that is already on your Windows PC and Servers and more recently, [open sourced to the OSX and Linux communities](https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/).  It ships with a great minimalist development environment (Powershell ISE). - -The problem I had is that all of the tutorials out there either assume a background in scripting and programming, or act as nothing more than command references.  I'm hoping to enable you to automate your own workflows even if you've never programmed before.  You only need to learn 5 things: Storage, Input, Output, Decisions, Loops.  Everything you do manually is made up of these 5 things.  Every programming language is made up of these 5 things. - - - ---- - - - -###### - Step 1: Storage (Lots of fun) --> [Step 2: Output (So much we can do)](https://powershell.org/?p=294977&preview=true) - - - - ---- - - -This is a slightly longer one, but I cover a lot of ground work we'll need in the next few weeks. - -For our first week, I'm covering storing information in your script. Without storage, none of the rest of what we're going to learn makes sense. The most basic type of storage is the VARIABLE, a collection of information can be stored as separate pieces of an ARRAY, and accessing the information over and over again in a script is made easier using a HASHTABLE, the last piece of storage we'll cover is the OBJECT... which will serve you later if you choose to get deeper into scripting or programming. - - - **VARIABLES** - - -When we're scripting, we're going to be grabbing information from various places, making decisions based on that information, doing stuff with that informaiton, and delivering it to various places. We need somewhere to store that information. Let's do this! - -> -`$ourFirstVariable = "Stuff Inside the Variable" -`There... you're a programmer. There may be a little bit more to it, but this fundamental building block provides the basis for all fo the rest. I'll explain what the parts mean, then we'll get started in Powershell ISE to make it happen and to prove that something actually happened. - -In Powershell, anything that begins with a Dollar Sign ($) is a variable. After that, the developer gives it a name. This name can be just about anything with letters and numbers as long as it starts with a letter: - -> -`$x -$x1 -$myThing -$cellContents_1 -$ServerName -$Server_Name -`... you get the picture. As a matter of style, I use what is called "Camel Case" for my variables. I always start with a lowercase letter and each word after that in the variable name is capitalized. - -If you see a $ in a script, some piece of information is being stored or recalled at that point in the script. The equals sign (=) is what we refer to as an "assignment operator." Basically, whatever is on the right side of it gets solved and assigned to what ever is on the left side. In the first case, the sentence (technical name: STRING) "Stuff Inside the Variable" is being assigned into the variable $ourFirstVariable. I liken it to writing down the sentence on a piece of paper and putting it in an empty coffee cup. When you need it later, you can just reach into the cup and pull the slip of paper back out to read. In the case of variables, you can label them... of course, in the coffee cup example, my variable would be $WithEnoughCoffeeNothingIsImpossible and the contents would be "C8H10N4O2" - -Speaking of Strings, there are some different types of information we should be aware of. As I mentioned, the STRING has quotes around it and is any combination of letters, numbers, and most symbols on the keyboard. The different types of information (or DATA TYPES) can be indicated using the square brackets on your keyboard: []. And you thought you'd never use those keys... we'll get to the squiggly ones later. In our first example, we can tell the computer exactly what data type we're assigning to the variable. - -> -`$ourFirstVariable = [string]"Stuff Inside the Variable" -`It's not terribly useful in this case because Powershell can see that you've got quotes and a bunch of letters and stuff in side it. It assumes it's a string. What if you were storing a number? You can't really do math with a string, so assigning a number to our variable stays a number. There are a few different kinds, but we'll stick to integers for now. - -> -`$storingANumber = [int]2 -$storingAString = [string]2 -`These store the number 2 differently. The first stores it as a straight integer, whereas the second stores it as a string with only the character "2" in it. Being particular like this isn't neccessary all the time, but can help solve problems if you run into them. Powershell is pretty good at guessing what you're trying to do. The second example is called CASTING an integer to a string or CASTING to a string. - -Enough talk... let's get the software running and play with some variables for real! Launch Powershell ISE (My Menu bar is on the left of my screen for ... reasons): - -![Powershell ISE in the Windows Menu](https://powershell.org/wp-content/uploads/2022/07/blogImage01-300x177.png) - -If you've done any work in the command prompt before, this is basically the same thing. A bunch of the commands even work in here the same way they used to. One of the biggest differences you'll see is the top part looks a bit like a text editor... with numbers down the left hand margin. The top half is the EDITOR, the bottom half is the CONSOLE. - -![](https://powershell.org/wp-content/uploads/2022/07/blogImage02-300x218.png) - -The stuff done in the console happens right away, whereas the stuff in editor won't do anything until we "Run" it. For simplicity's sake, we're going to start in the console. - -When you first open the ISE (Integrated Scripting Environment), it will show you a PS \ > prompt in the console. The \ part will be the path where the console is currently operating. If we type DIR here and hit enter, it'll give us a directory listing of that directory. As in the old CMD.exe prompt, it'll use CD to change directories. Let's enter our variable assignment from above: - -> -`$ourFirstVariable = "Stuff Inside the Variable" -`Hit enter. Nothing happens. How can we tell what happened? Let's ask the console what it has in that variable. - -> -`$ourFirstVariable -`Hit enter. Now we've got the contents of our variable on the very next line! - -I have a confession to make. Like in the matrix - "There is no string!" A string is actually a different storage type called an ARRAY. Let's look at those. - - - **ARRAYS** - - -At some point the string / integer may not be enough for you. Underneath, the string is just a series of characters, one after the other S, t, u, f, f. There's a special way to store that type of informaiton that becomes extremely useful for us. Much like the junk drawer, we can put anything we want in there and access it right away. The way to get at individual pieces of data in an array is fairly simple. Square brackets and an integer. Since we're programmers now, we start cointing at zero. There's a real reason for it... just go with it for now. [0] is the first ELEMENT in the array. We access it using the variable name and the INDEX of the element we're trying to get to. Let's prove that my statement about strings was true. In the console: - -> -`$ourFirstVariable[0] -`Hit enter. It should return an S on the next line. Try other indexes in there. Each of our letters in turn is there. To have some real fun, let's put a RANGE in there: - -> -`$ourFirstVariable[0..24] -`Did you hit enter already? good. This should be our entire string with each element of it per line... including the spaces, which are just another character to the computer. - -What if we wanted to store a different collectio of things in an array? Perhaps a parts list or a DVD list of titles from your collection. Defining a string we used the double-quote character ". To define an array, we're going to use what I like to call a Splat sandwich - or a Splatwich @(). Each of the elements are separated by a comma. - -> -`$ourFirstArray = @("thing1", "thing2") -`Now we can access them using [0]and [1] after the variable. I'm going to let you try that on your own, it'll speed up the rest of the tutorials. You may also notice that I have 2 strings inside an array... and a string is an array... array-ception? You would be absolutely correct. A MULTIDIMENSIONAL ARRAY makes for a very powerful data structure. Imagine this problem we need to solve: - -Problem - We need a report of all of the servers on our network, their C: freespace, total C: size, CPU%Usage, RAM Used, and RAM Total. - -Solution is to ask AD for all of the servers, Ask System Center VMM for the configurations of the servers. If they're physicals, you can use wmi to get performance counters. Now we have to store all that information in an array to make our report. Let's look at that array structure. - -> -`$server1 = @("server01", "27Gb", "50Gb", "76%", "10Gb", "16Gb") -$server2 = @("server02", "20Gb", "50Gb", "53%", "12Gb", "16Gb") -$server3 = @("server03", "14Gb", "50Gb", "14%", "3Gb", "16Gb") -$serverInfo = @($server1, $server2, $server3) -`You can either enter each of these lines in the console or try typing them into the editor and hitting the Run button on the ribbon (F5). Back in the console, let's explore this structure. - -$serverInfo[0][0] will get you the name of the first item in the array (Server01). $serverInfo[2][3] will get you the CPU% for Server03. Good storage, horrible way to access it. I wish there were a way to access it something like $serverInfo[0]["CPU%"]... luckily, we can. Stick with this, we're nearly done and I'm going to start making it look more programmy. We're going to split the assignment onto multiple lines. - - - **HASHTABLES** - - -Looking at the splatwich, you'll note that it opens and closes with parentheses. Powershell will allow anything to happen inside those. - -> -`$serverInfo = $( -    $server1, -    $server2, -    $server3 -) -`This will work and allows you to look at this information in blocks. How you break the lines is a matter of style. I've learned quite a few languages, and this style works for me. It's not the only way. Use what works for you once you get to that point. - -To make this easier to get to the information inside our variable, we're going to name each of the pieces. The name of it is the KEY. The information inside is the VALUE. They are referred to as a KEY/VALUE pair. That looks like this: - -> -`$server1 = @{ -   "name"    = "server01"; -   "freeC"    = "27Gb"; -   "totalC"   = "50Gb"; -   "CPU"      = "76%"; -   "RAMUsed" = "10Gb"; -    "RAMTotal" = "16Gb" -} -`So, you'll note we've siwtched the square brackets [] to curly brackets {} (one of my coworkers refers to them jokingly as curly fries). You'll also notice the commas have changed to semi-colons. I don't know why, but that's how it works. If you put the other 2 server's information together and add them at the end to the $serverInfo, it looks like this: - -> -`# This is a comment line, anything that starts with a # is ignored by Powershell -# We can use them to talk to our future selves as we often have to come back to code -# Most of the time, we've forgotten everything we've written and what it's for... - -# Gather data for server01, store in variable -$server1 = @{ - "name" = "server01"; - "freeC" = "27Gb"; - "totalC" = "50Gb"; - "CPU" = "76%"; - "RAMUsed" = "10Gb"; - "RAMTotal" = "16Gb" -} - -# Gather data for server02, store in variable -$server2 = @{ - "name" = "server02"; - "freeC" = "20Gb"; - "totalC" = "50Gb"; - "CPU" = "53%"; - "RAMUsed" = "12Gb"; - "RAMTotal" = "16Gb" -} - -# Gather data for server03, store in variable -$server3 = @{ - "name" = "server03"; - "freeC" = "14Gb"; - "totalC" = "50Gb"; - "CPU" = "14%"; - "RAMUsed" = "3Gb"; - "RAMTotal" = "16Gb" -} - -# Collect server information into an array for later reference -$serverInfo = $( - $server1, - $server2, - $server3 -) -`My initial Script actually only consisted of this: - -> -`# Gather data for server01, store in variable -# Gather data for server02, store in variable -# Gather data for server03, store in variable -# Collect server information into an array for later reference -`I started here so I could talk through the process I'd be completing, then write the code after each of the comments to flesh out the code. Now we've got a real program looking thing. Let's look at the data we've got in $serverInfo now. - -$serverInfo[1]["totalC"] will show us our total C drive allocation for server02. This is now useful. We can also use "DOT NOTATION" to reference these named pieces. - -$serverInfo[1].totalC will reference exactly the same piece of information. The editor now also has some cool things going on it it. You'll note each of the lines that start a block have a little square next to it. You can click this to collapse the block. This makes it so if you have longer scripts, you can have most of it collapsed and view just the portions you're working on. It aids in the readability of the code. - - - **OBJECTS** - - -The last one is very similar to what we just did, but is dealt with differently internally. We're going to make an OBJECT. It's going to look very similar to what we've just done... but later when we're passing our information to and from other parts of code, Powershell is made to deal with "objects" in a more robust fashion than passing variables like we've been making. They look like this: - -> -`# Clear the array -$serverInfo_obj = @() - -# I'm adding _obj to the variable name just to remind my future self what is in this variable -# I can see here that it's an array @() of objects _obj -# You can choose not to add the _obj if you don't like the looks of it - -# Add the object for server02 into the array -# The += adds the contents of the @() below (the new "psobject" object) to the end of the existing array -$serverInfo_obj += @( - new-object PSObject -Property @{ - "name" = "server01"; - "freeC" = "27Gb"; - "totalC" = "50Gb"; - "CPU" = "76%"; - "RAMUsed" = "10Gb"; - "RAMTotal" = "16Gb" - } -) - -# Add the object for server02 into the array -$serverInfo_obj += @( - new-object PSObject -Property @{ - "name" = "server02"; - "freeC" = "20Gb"; - "totalC" = "50Gb"; - "CPU" = "53%"; - "RAMUsed" = "12Gb"; - "RAMTotal" = "16Gb" - } -) - -# Add the object for server03 into the array -$serverInfo_obj += @( - new-object PSObject -Property @{ - "name" = "server03"; - "freeC" = "14Gb"; - "totalC" = "50Gb"; - "CPU" = "14%"; - "RAMUsed" = "3Gb"; - "RAMTotal" = "16Gb" - } -) -`To refer to these now, we can still use index and dot notation $serverInfo_obj[0].name but you'll note as you type it, the property "name" shows up in the popup list! We made Powershell know about our data. This lets us do cool things with it. For instance: - -> -`$serverInfo_obj | Format-Table -autosize -`Looks really useful. whereas: - -> -`$serverInfo | Format-Table -autosize -`does not. The | character passes objects through to the next command for processing. In this case, we're formatting a table for OUTPUT. Which is, coincidentally, next week's topic. - - -###### - Step 1: Storage (Lots of fun) --> [Step 2: Output (So much we can do)](https://powershell.org/?p=294977&preview=true) diff --git a/content/articles/2022-07-28-on-to-the-future-with-powershell.md b/content/articles/2022-07-28-on-to-the-future-with-powershell.md deleted file mode 100644 index e3530eb4d..000000000 --- a/content/articles/2022-07-28-on-to-the-future-with-powershell.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: On to the Future with Powershell -authors: - - Cole McDonald -date: "2022-07-28T18:44:45+00:00" -categories: - - Tutorials -tags: - - Beginner - - DevOps - - Tutorial -aliases: - - /2022/07/on-to-the-future-with-powershell/ ---- - -When I started my 5 Painless Steps Powershell learning series. It was a smashing success. I was hoping a few dozen people would find it useful. It was viewed by over 2500 people in the first month. Yikes! - -The point of the series was specifically to bring more Ops to devops. Learning to program can be daunting and takes a dedication of time. The thing to realize, in my opinion, is that the 5 steps I presented can be applied and learned in any language. Most of the commands are just slight variations from one to the other as well. For instance, some languages use elseif, others else if. There are 2 trains of thought for the for loop, the (init, test, increment) model Powershell uses and the for/next model ($x = 1 to 100) used in basic. - -Once the language has been abstracted and is fundamentally interchangeable with any other language, it becomes a framework for shuttling and mutating data. The sources of the data are the exciting pieces to me. We have all kinds of monolithic repositories of environmental information for each of our businesses. Knowing how to program allows us to answer the needs we identify in our worlds. I call them the "wouldn't it be nice if I had..." solutions. - -**Wouldn't it be nice** **if** I could adjust the amount of hard drive space allocated to a backup server in azure based on time of day to allow for the extra space needed for compression while reducing cost over all by lowering classification of the server once the archival is completed. - -**Wouldn't it be nice** **if** I could analyze the resource usage over time to figure out when I need to add cores to a server during the day and scale it dynamically. - -**Wouldn't it be nice** **if** my environment would auto document itself. None of the off the shelf software accounts for this one odd thing we do. - -**Wouldn't it be nice if** ... fill in your need here. - - - -This is DevOps. As operations technicians, server admins, and/or customer support persons, we have a head full of processes and environmental states that inform the decisions we make day to day. Knowing how to code allows us to build those decision trees using that same data we'd look at from disparate silos of information. Having those decision trees can then be turned into actions based on the outcomes. Those actions can move us toward "click here" administration to an environment which can react to usage and need dynamically. - -If we start using historical data, we can even enter the "big data" realm and let our code perform our RCA discovery tasks for us... potentially even auto remediating found cases in the future. This is where we move into the realm of machine learning. It's not a large leap either. I just got there in 2 paragraphs. All we need to do is remember the simple phrase: EVERYTHING IS POSSIBLE THROUGH CODE. - -Any "Wouldn't it be nice" moments we have are answered by that phrase. When asked if you can make something happen, yes can always be the answer. It'll be tempered by the time and effort required but there's always a solution to whatever specific task you're being asked to explore. - -I have 5 posts that I'll be making shortly that are the "Powershell in 5 Painless Steps" series.  I'll add the links at the bottom here as I get them converted to this blogging platform.  I wrote them while I was working at Beyond Impact 2.0, LLC.  I'm now with another MSP, Netgain Technologies, Inc. and still use Powershell every single day to make my job easier and more effective. - -[Step 1: Storage][1] -[Step 2: Output][2] -[Step 3: Input][3] -[Step 4: Loops][4] -[Step 5: Decisions][5] - - [1]: https://powershell.org/?p=294975&preview=true - [2]: https://powershell.org/?p=294977&preview=true - [3]: https://powershell.org/?p=294979&preview=true - [4]: https://powershell.org/?p=294981&preview=true - [5]: https://powershell.org/?p=294983&preview=true diff --git a/content/articles/2022-11-30-powershell-devops-global-summit-2023.md b/content/articles/2022-11-30-powershell-devops-global-summit-2023.md deleted file mode 100644 index 86346ebe1..000000000 --- a/content/articles/2022-11-30-powershell-devops-global-summit-2023.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: PowerShell + DevOps Global Summit 2023 -authors: - - James Petty -date: "2022-11-30T14:38:05+00:00" -categories: - - Announcements - - Events - - PowerShell Summit -tags: - - PowerShell Summit -aliases: - - /2022/11/powershell-devops-global-summit-2023/ ---- - -## Summit Information - -**What:** 2023 PowerShell + DevOps Global Summit - -**Where:** Marriott Downtown Bellevue WA - -**When:** April 24-27, 2023 - -## Dates to Remember - -- **1 - Jan** — Early Bird sales will end -- **15 - Dec** — The content committee will notify speakers no later than 15-December on if their sessions were selected. -- **2 - Jan** — Fill Schedule will go live 2-January - -There is more information available at the event website including - -Links to buy Tickets and our FAQ page diff --git a/content/articles/2022/04/_index.md b/content/articles/2022/04/_index.md new file mode 100644 index 000000000..06f763e21 --- /dev/null +++ b/content/articles/2022/04/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from April 2022" +description: "PowerShell.org Articles published in April 2022." +--- diff --git a/content/articles/2022/04/powershell-devops-global-summit-a-first-timers-perspective/index.md b/content/articles/2022/04/powershell-devops-global-summit-a-first-timers-perspective/index.md new file mode 100644 index 000000000..d41d6aa85 --- /dev/null +++ b/content/articles/2022/04/powershell-devops-global-summit-a-first-timers-perspective/index.md @@ -0,0 +1,25 @@ +--- +url: /articles/2022-04-30-powershell-devops-global-summit-a-first-timers-perspective/ +title: PowerShell + DevOps Global Summit – A First Timer’s Perspective +authors: + - Chris Martin +date: "2022-04-30T05:42:47+00:00" +categories: + - PowerShell Summit +tags: + - PowerShell Summit + - Community +draft: true +aliases: + - /2022/04/powershell-devops-global-summit-a-first-timers-perspective/ +--- + +Hey everyone! + +This is Chris Martin, Azure Architect and PowerShell fanatic. I've volunteered to start posting here at least semi-regularly, so I thought I'd start with a first timer's perspective on the recent PowerShell + DevOps Global Summit in Bellevue, WA. + +To start, I have to say what a trip! It was a whirlwind of knowledge and camaraderie from the time I arrived at the hotel Sunday afternoon until I got to the airport on Friday. + + + +\# Saving a draft as a placeholder, will finish tomorrow when I have more braincells diff --git a/content/articles/2022/07/_index.md b/content/articles/2022/07/_index.md new file mode 100644 index 000000000..ca4551263 --- /dev/null +++ b/content/articles/2022/07/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from July 2022" +description: "PowerShell.org Articles published in July 2022." +--- diff --git a/content/articles/2022/07/learn-powershell-in-5-painless-steps-decisions-if-else-switch-function-step-5/index.md b/content/articles/2022/07/learn-powershell-in-5-painless-steps-decisions-if-else-switch-function-step-5/index.md new file mode 100644 index 000000000..22bd633d0 --- /dev/null +++ b/content/articles/2022/07/learn-powershell-in-5-painless-steps-decisions-if-else-switch-function-step-5/index.md @@ -0,0 +1,350 @@ +--- +url: /articles/2022-07-28-learn-powershell-in-5-painless-steps-decisions-if-else-switch-function-step-5/ +title: Learn Powershell in 5 Painless Steps – Decisions (If/Else, Switch, Function) – Step 5 +authors: + - Cole McDonald +date: "2022-07-28T18:45:52+00:00" +categories: + - Tutorials +tags: + - Beginner + - Functions + - Tutorial +aliases: + - /2022/07/learn-powershell-in-5-painless-steps-decisions-if-else-switch-function-step-5/ +--- + +DevOps = Developers + Operations.  What if you're in Operations and don't have a developer at your disposal?  That should never stop you from making your job easier and more efficient.  Powershell is a scripting language from Microsoft that is already on your Windows PC and Servers and more recently, [open sourced to the OSX and Linux communities](https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/).  It ships with a great minimalist development environment (Powershell ISE). + +The problem I had is that all of the tutorials out there either assume a background in scripting and programming, or act as nothing more than command references.  I'm hoping to enable you to automate your own workflows even if you've never programmed before.  You only need to learn 5 things: Storage, Input, Output, Decisions, Loops.  Everything you do manually is made up of these 5 things.  Every programming language is made up of these 5 things. + +* * * + + +###### + [Step 4: Loops(I can give you more)](https://powershell.org/?p=294981&preview=true) <-- Step 5: Decisions(The time has arrived) + + +* * * + +We've spent a month getting to this point. We're invested. Let's blow this party up! Sorry, I've had too much coffee this morning. That was a bad decision. That's our topic for this last installment of the 5 steps: DECISIONS, not coffee. + +We know how to get information from various sources, store them in fairly complex ways, and send it out to our users in different formats. According to the stated format of these blogs, there's only one piece left in this puzzle. When we stand up a virtual server, they're not provisioned the same across the board. An SQL server needs a far different configuration than an IIS server, a nano server, or a terminal services server. + +If we talk through the process, an SQL server wants more RAM and disk space, whereas an IIS server is more focused on RAM and CPU, Whereas the Terminal Services server wants more of all three: RAM, CPU, and disk. Lastly, a nano server wants as little as possible. + +I've tricked you again. If you can talk through your decision making process again, you're already programming. Here's the pseudocode (fake code in comments to fill out afterwards): + +> +`# SQL: RAM and DISK Heavy +# IIS: RAM and CPU Heavy +# TS: RAM, CPU, DISK Heavy +# Nano: Minimums +`I tricked you twice in the same paragraph. If we change the word whereas into else, we've actually got the SYNTAX (syntax is using the right words in the right order with the right punctuation) for the first structure we're going to look into: + + + **IF / ELSE** + + +Let's start with the syntax statement for the IF / ELSE in Powershell: + +> +`if (condition) {statement 1} else {statement 2} +`A real example of this can look like this: + +> +`# Setup machine provisioning values +if ($machineType -eq "SQL") { + # this is anything else, the DEFAULT for instance + $CPU = 2 + $RAM = 8 + $DISK = 150 +} else { + # this is anything else, the DEFAULT for instance + $CPU = 2 + $RAM = 4 + $DISK = 50 +} + +# Removing the space between $machineType and : will confuse Powershell +Write-Output "Building new $machineType server : NAME-$($ServerInfo_obj[0].name), RAM-$RAM, CPU-$CPU, DISK-$DISK" + +# Build the server with the given requirements +# This doesn't actually work +# Note the line continuation ( `) added for readability +# Note everything lined up in nice little columns to feed my OCD + +new-SCVirtualMachine ` + -ComputerName $serverInfo_obj[0].name ` + -CPUCount $CPU ` + -DynamicMemoryMaximumMB $RAM * 1024 ` + -VirtualHardDisk "\Path\To\New\Drive\Object\$serverInfo_obj[0].name_$DISK" ` + -OperatingSystem "Windows 3.1" +`Picture if you will reading in a CSV or JSON file defining a thousand servers into an object array, then using Powershell to deploy them! Imagine driving this based on rising numbers of users logged on to a set of load balanced terminal servers. Imagine removing machines as well based on lowering numbers of users toward the end of the workday. + +This is where we start to see the benefit of using scripting to drive performance vs. cost savings. As we moved from physical servers to virtual we, the industry, largely kept the manual workflow. As we're moving to Azure and being charged for resource use, this becomes a huge cost savings solution. + +In our initial list of server types, we had 4 types of servers "THERE WERE FOUR TYPES!" Let's look at how we can make that work with what we know now. If we have our default settings as an else, but need more types, let's move the defaults to a declaration at the top, then alter them if they are not the "nano" type: + +> +`# Change me to SQL, IIS, TS, or NANO +$machineType = "NANO" + +# Default Minimums for those pesky nano servers +$CPU = 2 +$RAM = 4 +$DISK = 50 + +# SQL: RAM and DISK Heavy +if ($machineType -eq "SQL") { + $CPU = 2 + $RAM = 8 + $DISK = 150 +} + +# IIS: RAM and CPU Heavy +if ($machineType -eq "IIS") { + $CPU = 4 + $RAM = 8 + $DISK = 50 +} + +# TS: RAM, CPU, DISK Heavy +if ($machineType -eq "TS") { + $CPU = 4 + $RAM = 8 + $DISK = 150 +} + +Write-Output "New $machineType : RAM-$RAM, CPU-$CPU, DISK-$DISK" +`**ELSEIF** + + +There's another mechanism for this type of thing that is cleaner to read as it groups the if / else decisions. We'll just flip the terms and remove the punctuation giving us elseif. Let's rewrite our decision to use this new term: + +> +`# Change me to SQL, IIS, TS, or NANO +$machineType = "SQL" + +if ($machineType -eq "SQL") { + # SQL: RAM and DISK Heavy + $CPU = 2 + $RAM = 8 + $DISK = 150 +} elseif ($machineType -eq "IIS") { + # IIS: RAM and CPU Heavy + $CPU = 4 + $RAM = 8 + $DISK = 50 +} elseif ($machineType -eq "TS") { + # TS: RAM, CPU, DISK Heavy + $CPU = 4 + $RAM = 8 + $DISK = 150 +} else { + # Default Minimums + $CPU = 2 + $RAM = 4 + $DISK = 50 +} + +Write-Output "New $machineType : RAM-$RAM, CPU-$CPU, DISK-$DISK" +`I'd like you to note at this point that you've just read a few slightly larger blocks of code and it didn't look as weird as it did when you started this tutorial (just over a month ago if you followed it in real time. If you're from the future... welcome back, we still wear shoes on our feet in our time!). Once we learn what the individual pieces look like, we can start to see the matrix unfold. + +These can get wonderfully complex as we can NEST these statements, like decision inception (deception?), perhaps to differentiate the type of ERP software an SQL server is supporting: + +> +`$machineType = "GP" + +if ($serverInfo_obj[0].name -like "*SQL*") { + if ($machineType -eq "CRM") { + # SQL: RAM and DISK Heavy + $CPU = 2 + $RAM = 8 + $DISK = 150 + } elseif ($machineType -eq "VISUAL") { + # IIS: RAM and CPU Heavy + $CPU = 4 + $RAM = 8 + $DISK = 50 + } elseif ($machineType -eq "GP") { + # TS: RAM, CPU, DISK Heavy + $CPU = 4 + $RAM = 8 + $DISK = 150 + } elseif ($machineType -eq "Dynamics 365") { + # TS: RAM, CPU, DISK Heavy + $CPU = 4 + $RAM = 16 + $DISK = 100 + } +} else { + # Default Minimums + $CPU = 2 + $RAM = 4 + $DISK = 50 +} + +Write-Output "New $machineType : RAM-$RAM, CPU-$CPU, DISK-$DISK" +`This allows for an amazing amount of gothic complexity once we start nesting more deeply. Since we're only using -eq on the internal IF statement, there's another structure that deals with these types of comparisons potentially more efficiently. We can think of it as taking an input variable and directing a specific output based on that. Like my Thom the Tanker (no relation) locomotive turntable track switch! + + + **SWITCH** + + +Let's check out the syntax statement for this one: + +> +`SWITCH (input) {condition1 {output}; condition2 {output}; default {output}} +`That's uglier than previous ones... let's span a few lines with this one: + +> +`SWITCH (input) { + condition1 {output} + condition2 {output} + default {output} +} +`If we apply that to our previous statement, it really cleans it up: + +> +`$machineType = "SQL" + +if ($serverInfo_obj[0].name -like "*SQL*") { + switch ($machineType) { + "CRM" { + $CPU = 2 + $RAM = 8 + $DISK = 150 + } + "VISUAL" { + $CPU = 4 + $RAM = 8 + $DISK = 50 + } + "GP" { + $CPU = 4 + $RAM = 8 + $DISK = 150 + } + "Dynamics 365" { + $CPU = 4 + $RAM = 16 + $DISK = 100 + } + default { + $CPU = 2 + $RAM = 4 + $DISK = 50 + } + } +} else { + # Default Minimums + $CPU = 2 + $RAM = 4 + $DISK = 50 +} + +Write-Output "New $machineType : RAM-$RAM, CPU-$CPU, DISK-$DISK" +`My challenge to you is to find something in your tech environment that you do every day and write the pseudo code for it. You'll find yourself equipped to build out a script from that series of comment lines. Make work easier for yourself starting today. + +So... we're at the end. My sidebar in notepad++ tells me I'm over 200 lines. I've covered all of the points I'd planned on covering. Should we do an encore? One last little tidbit to really help us with our code? Let's make a FUNCTION! Thank you ! + + + **FUNCTION** + + +This is basically just a chunk of code that we're going to be using over and over again. For instance, we're reading in a thousand machines and we'll need to set the CPU, RAM, and DISK for it each time. Wouldn't it be nice if we could to it this way? + +> +`$servers = read-csv c:\serverList.csv +foreach ($server in $servers) { + $serverInfo_obj = make-serverObject $server + new-scvirtualmachine $serverInfo_obj +} +`See that make-serverObject? I just made that up. That's not a real thing... yet. + +although it can be done anywhere above the place we're calling it from, I like to group my functions at the top of my script. A function looks like this: + +> +`function verb-nounFunctionName { + param ( + [type]$firstInputVariableName = "default value" + [type]$secondInputVariableName = "default value" + ) + # Stuff we're doing... + return $whateverOutputVariableWeWant +} +`Breaking this down, the verb-noun structure is what we see in any of the cmdlets we've been using so far: get-file, set-scvirtualmachine, clear-host, get-eventlog, etc... This makes the purpose of the function/cmdlet much easier to figure out. So much of our programming careers will be spent trying to figure out what the \*#$%\*&$!@#% we were thinking when we wrote that chunk of code 4 months ago at 3:30 in the morning after a week of horrible sleep deprivation. + +It functions, but we're not quite sure why. Variable names like $stupidUnicornsWontStopRunningThroughMyOffice and function names like make-itstop -orGoJump and need-morecoffee -now don't lend themselves to easy interpretation. + +The param() structure houses the input for the function/cmdlet we're building. It's just a comma separated list of variable assignments. I've added the [type] to the front of the variable to make it easier to figure out what it wants to have and make the error messages a little bit more informative when there is a TYPE MISMATCH error. This will be [string], [int], [int32], [switch]. Switch types are false by default, true when called: + +> +`function get-switchTest { + param ( + [switch]$flipTheSwitch + ) + return $flipTheSwitch +} + +# We call it anywhere now and it gets replaced with its return value/object +write-output $(get-switchTest).isPresent +write-output $(get-switchTest -flipTheSwitch).isPresent +`From this example, you can see that the return does just that. This can be a single variable or a whole custom object. + +Between the param block and the return, we can do any chunk of processing code we want, even all the object building stuff we did at the beginning way back in the first lesson (note the order of operations from the parentheses during the .add() ): + +> +`function make-serverObject { + param ( + [string]$server = "SERVER", + [string]$type = "TS", + [int]$instance = 0, + [int]$RAM = 4, + [int]$CPU = 2, + [int]$DISK = 50 + ) + $newObject = new-object PSObject -Property @{ + "name" = "$type-$server-$instance"; + "type" = $type; + "totalC" = $DISK; + "cores" = $CPU; + "totalRAM" = $RAM + } + return $newObject +} + +# Create an empty array with the class arraylist +[System.Collections.arrayList]$serverInfo_obj = @() + +# Returns all the defaults and adds it to the object array +$serverInfo_obj.add( (make-serverObject) ) + +# Returns custom values and adds it to the array +$serverInfo_obj.add( + (make-serverObject ` + -type "SQL" ` + -server "Custom" ` + -instance 5 ` + -RAM 16 ` + -CPU 8 ` + -DISK 1024 + ) +) +`I make functions out of anything I use more than 3 times. That way, I can just copy and paste them into the top of my script when I need them again... or did the brilliant developers at Microsoft think of a way to do that too? Note that I've been refering to them as function/cmdlets? Time to dig in and avail yourself of some free training from Microsoft: + + + + +Thank you all for making this such a successful training series. I've received amazing feedback and wonderful critique. Don't be afraid to reach out to the Powershell development community on Powershell.org ( ), reddit ( ), and technet ( ). + +For higher end powershell/devops work, Tao Yang is prolific in his script releases and deep knowledge of Microsoft's System Center ( ) + +Now that we've pulled back the curtain on the topic of scripting, development, devops, and powershell, keep digging into it. Share what you find with others. Always remember, someone else is asking exactly the same questions you are right now! Everything is possible through code. + +**Ignore the box, define the curve.** + + +###### + [Step 4: Loops(I can give you more)](https://powershell.org/?p=294981&preview=true) <-- Step 5: Decisions(The time has arrived) diff --git a/content/articles/2022/07/learn-powershell-in-5-painless-steps-input-console-file-applications-step-3/index.md b/content/articles/2022/07/learn-powershell-in-5-painless-steps-input-console-file-applications-step-3/index.md new file mode 100644 index 000000000..7236cff9d --- /dev/null +++ b/content/articles/2022/07/learn-powershell-in-5-painless-steps-input-console-file-applications-step-3/index.md @@ -0,0 +1,245 @@ +--- +url: /articles/2022-07-28-learn-powershell-in-5-painless-steps-input-console-file-applications-step-3/ +title: Learn Powershell in 5 Painless Steps – Input (Console, File, Applications) – Step 3 +authors: + - Cole McDonald +date: "2022-07-28T18:45:31+00:00" +categories: + - Tutorials +tags: + - Beginner + - Input + - Tutorial +aliases: + - /2022/07/learn-powershell-in-5-painless-steps-input-console-file-applications-step-3/ +--- + +DevOps = Developers + Operations.  What if you're in Operations and don't have a developer at your disposal?  That should never stop you from making your job easier and more efficient.  Powershell is a scripting language from Microsoft that is already on your Windows PC and Servers and more recently, [open sourced to the OSX and Linux communities](https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/).  It ships with a great minimalist development environment (Powershell ISE). + +The problem I had is that all of the tutorials out there either assume a background in scripting and programming, or act as nothing more than command references.  I'm hoping to enable you to automate your own workflows even if you've never programmed before.  You only need to learn 5 things: Storage, Input, Output, Decisions, Loops.  Everything you do manually is made up of these 5 things.  Every programming language is made up of these 5 things. + +* * * + + +###### + [Step 2: Output (So much we can do)](https://powershell.org/?p=294977&preview=true) <-- Step 3: Input (Just you and me)  --> [Step 4: Loops(I can give you more)](https://powershell.org/?p=294981&preview=true) + + +* * * + +We've spent the last few weeks laying down the ground work to be able to deal with the one main thing that we as developers have to shuttle around our applications' data. We're now able to store them, explore them, and send them somewhere useful. We're going to hit the third piece of this today and begin getting our data from somewhere else. Once we're done today, all that's left is to figure out what to do with the data we're collecting, storing, and distributing. + +This one digs in a little bit deeper yet. After today, you get to get your programmer's card... that's not actually a thing. Sorry if I got you excited, perhaps you can make your own card. I'd take one if you do. + + + **CONSOLE** + + +We're starting in the same place we always do, in our console. Do you still have it open or are you a console closing type of person? If you closed it, go ahead and open up the Powershell ISE again. We're going to start up top in the editor this time. Last time, we learned the "correct" way to write information out to the console: + +> +`$someVariable = "another string" +WRITE-HOST "String to display on the screen" +WRITE-HOST $someVariable +WRITE-HOST "Another string and $someVariable" +`Now, we've got to figure out how to allow the user give us information. If we can trust that Microsoft is using logical naming for their CMDLETS, it should be about reading and writing information. Since output is WRITE-HOST, the input should be READ-HOST. If we start typing it, INTELLISENSE will start to show us possible things we want to enter as pop-up suggestions as we go. It shows me that they did indeed make the command READ-HOST. + +We're going to go ahead and write a real live useful program that does a thing. It's not a particularly useful thing, but it will hit all 3 points: Input, Store, and Output. So that we're using the process of breaking down the task to smaller points, I'm going to start with PSEUDO-CODE (It's just a step by step description of the task): + +> +`# Ask the user for their name +# Display their name in a sentence +`Sounds pretty simple, but this could be anything we'd want to store, like client information for recalling during a sales call; "How's the kids? Bobby and Fran + +> +`# Ask the user for their name +$firstName = Read-Host "Enter your first name:" +$lastName = Read-Host "Enter your last name:" + +# Display their name in a sentence +Write-Host "Your full name is $firstName $lastName" +Write-Host "Your last,first is $lastName, $firstName" +`Look! We made a thing. It does something almost useful. We should be able to store this type of information in an object as well once we collect it: + +> +`$userInfo = @{"first" = $firstName; "last" = $lastName} +`This let's us store larger pieces of information so we can access it using our dot notation (we must use an AD-HOC STRING $() to make it solve before showing it to the string): + +> +`Write-Host "L,F is $($userInfo.last), $($userInfo.first)" +`We could have the user's age, significant other's first name, last name, age, assigned server name, start date, last login date, etc. Store these in an array and we can catalog an entire company. This programming thing is starting to show some promise. For the record, this is the fundamental idea behind DSC (Desired State Configuration). All the information for a server is bundled in an XML object and delivered as an XML file to a program that knows how to read that XML to build a server based on that description. + + + **FILE** + + +Speaking of reading from files, wouldn't it be great if we could do that? Imagine being handed an excel file with systems and pertinent data in it that we want to process. We know we can export a CSV, we can also import one. Let's start with the most basic form of this. We want to get the content of a file. The command for that is ... um ... GET-CONTENT. They're smart, but I made no claims to their creativity in naming. The best thing about their naming conventions for the cmdlets is that we can start to see the pattern they're using and start to guess at the kind of command we want to use and allow Intellisense to guide our exploration. Let's try reading a file. Hop down to the console and try this: + +> +`get-content ~\Desktop\servers.csv +`This should read the contents of the file we exported in the last lesson and write it directly to the console. Useless Cole! No, I retort. We can store that in a variable and manipulate it as a variable, trapped in its temporary digital prison, our plaything; MUHAHAHAHA! Too Dramatic? You started it. Let's try this. You can either enter these directly into the console or add them to the editor and run the whole thing or the selection as you see fit: + +> +`$serverInfo = Get-Content ~\Desktop\servers.csv +Write-Host $serverInfo +`Looks about the same, but we can now do this as well: + +> +`$serverInfo = $serverInfo | ConvertFrom-Csv +Write-Host $serverInfo + +# We even have access to it as an array now +Write-Host $serverInfo[1] +`Now that's different. We assigned the variable to itself after sending it through CONVERTFROM-CSV. Remember from the first lesson when I mentioned it does all the stuff on the right of the = and stuffs that into the stuff on the left? This allows us to change the content of a variable on the fly. We were technically doing that to our $serverInfo_obj using the += OPERATOR. These two examples do the same thing: + +> +`# Add the object for server02 into the array using += +$serverInfo_obj += @( + new-object PSObject -Property @{ + "name" = "server01"; + "freeC" = "27Gb"; + "totalC" = "50Gb"; + "CPU" = "76%"; + "RAMUsed" = "10Gb"; + "RAMTotal" = "16Gb" + } +) + +# Add the object for server02 into the array +$serverInfo_obj = $serverInfo_obj + @( + new-object PSObject -Property @{ + "name" = "server01"; + "freeC" = "27Gb"; + "totalC" = "50Gb"; + "CPU" = "76%"; + "RAMUsed" = "10Gb"; + "RAMTotal" = "16Gb" + } +) +`This method of adding items to an array or object is actually really slow. You won't notice it in these examples, but if you are dealing with thousands of items being added over and over again, each time you add a piece, it gets longer. So each time we want to add to the end of it, it gets to count the contents to find the end. This can really add up after a bit. There are much more efficient ways to do some of these exercises. + +Know that, then put it out of your head, understanding that if you get to the point where that matters, the information about those methods are out there, and we're learning here. This method illustrates my points best. It is also a more approachable way to make quick and functional scripts for those of you who haven't ever programmed before and are being thrust kicking and screaming into this new and automated version of the future. +\*** (Shout out to user toregroneng on reddit for pointing out that I'm not specifically using "correct" powershell style and practices) + +All that said, we're starting to tie it all together. Let's see if there's a more efficient way to do the last CSV example. + +> +`$serverInfo = Get-Content ~\Desktop\servers.csv | ConvertFrom-Csv +Write-Host $serverInfo[1] +`Sweet, we made it a single line thing. If they built in a function for converting a CSV file into an object, I bet they added one for importing directly from a CSV file. Since we had EXPORT-CSV before, let's just go wild and try replacing EXPORT with IMPORT! Crazy programmers. Perhaps we can streamline it even more: + +> +`$serverInfo = Import-csv ~\Desktop\servers.csv +Write-Host $serverInfo[1] +`Look at that. These cmdlets don't yet exist for XML, HTML, and JSON, so we'll still have to convert those formats. Here's how that works: + +> +`# First, we'll take our $serverInfo object and +# turn it into an JSON file using the cmdlets we're familiar with +Get-Content ~\Desktop\server.csv | ConvertTo-Json | out-file ~\Desktop\servers.json + +# Then read it back in as the point of our exercise here +$JSON_obj = Get-Content ~\Desktop\servers.json | ConvertFrom-Json + +# Prove to ourselves that it did something useful +Write-Host $JSON_obj.name +`That first bit is a really common type of Powershell task structure. We're reading in a file, converting it from one format to another and then saving it out to a file. The task itself doesn't matter. The workflow and way of thinking of passing one thing into the next is a very common way of working that makes this an amazingly useful tool to learn, even if you don't use it as a programming platform. + +Now, in our promise of automating absolutely everything so we never have to do anything again (we won't tell anyone that part), let's figure out how to ask VMM for some information. Even if your goal is just to never have to open extra applications on your server other than your Powershell ISE, this is the first step on that quest. + + + **APPLICATION** + + +In the last lesson, we imagined a story of darkness and woe whereby our hero (an anonymous everyman IT technician) was cornered by the opposing forces (Sales) and forced to do manual data entry under threat of eternal flogging and being forced to listen to zydeco standards as sung by a group of cats and dogs. Having actually had that job for a little while, our hero decided that s/he would never again perform those sorts of tasks for anyone, ever again. What did s/he do? Powershell. Powershell is always the answer. At least in a Powershell focused blog, it's a strong bet if you've stopped paying attention and are asked a question. + +We can assume that nearly everything an application displays in its interface is stored somewhere behind the scenes that we can get to. Many applications allow us to hook into them. Some by exposing their .NET guts like a tauntaun in winter, others through a package of cmdlets called a MODULE. Your installed modules are listed in the pulldown menu on the right side pane of the ISE interface. I tend to keep mine closed as I like to have as much blue space on the screen as possible without actually having a blue screen. Under the Module "Storage" I find the command get-volume. + +Let's ask Windows for something... Like those bits from our $serverInfo_obj from the output lesson: + +> +`$driveCInfo = Get-Volume C +`The output shows me the parts I am looking for, and other info as well. + +$driveCInfo.Size would be great. As would SizeRemaining. They fit right into our existing object. If we pull up that code again, we can put in an object for our current host machine. In my case, it's a laptop. + +> +`$serverInfo_obj = $serverInfo_obj + @( + new-object PSObject -Property @{ + "name" = "server01"; + "freeC" = $(Get-Volume C).SizeRemaining; + "totalC" = $(Get-Volume C).Size; + "CPU" = "76%"; + "RAMUsed" = "10Gb"; + "RAMTotal" = "16Gb" + } +) +`This can be sped up slightly. Again, not that big a deal with one server, but with 1000 of them, we can cut our information grabs in half by assigning the results of Get-Volume to a variable first, then calling that instead of the cmdlet twice: + +> +`# Query for our info +$volumeCInfo = Get-Volume C + +# So now $volumeCInfo.Size gets the size for us, +# but it's not in GB, let's math! +$volumeCTotal = $volumeCInfo.size / 1GB +`1GB is a built in value that converts your Bytes to GB. But we'd like to see it as a nice round number. Let's look at that. There's a bunch of math built into the system through .NET . I'll show it to you, then show you a cheat: + +> +`# Using the math functions built into the system +$volumeCRoundedTotal1 = [system.math]::Round($volumeCInfo.Size / 1GB) +$volumeCRoundedRemaining1 = [system.math]::Round($volumeCInfo.SizeRemaining / 1GB) + +# Cheating by casting it into integer +[int]$volumeCRoundedTotal2 = $volumeCInfo.Size / 1GB +[int]$volumeCRoundedRemaining2 = $volumeCInfo.SizeRemaining / 1GB + +# Add it to the Object +$serverInfo_obj += @( + new-object PSObject -Property @{ + "name" = "server01"; + "freeC" = $$volumeCRoundedRemaining2; + "totalC" = $volumeCRoundedTotal2; + "CPU" = "76%"; + "RAMUsed" = "10Gb"; + "RAMTotal" = "16Gb" + } +) +`We can get ram using the WMI system built into windows. This returns the total ram in bytes. + +> +`# Total +$(Get-WMIObject win32_PhysicalMemoryArray).MaxCapacity + +# Used +$(Get-WmiObject win32_OperatingSystem).freephysicalmemory + +# computer name +$(Get-WmiObject win32_OperatingSystem).csname + +# CPU Usage. +# This we have to force to calculate using Measure-Object +Get-WmiObject win32_processor | Measure-Object -Property LoadPercentage -Average | select-object Average +`Like with sun screen, it is time to apply. Take a little bit of time to rewrite the rest of the object for the server with these new little chunks of code. If you need pieces of information from your systems, Google will find even more of the CLASSES of information you can grab using Get-WMIObject. I searched for these using: + +> +`Get-WMIObject class powershell +`Go ahead and send that out to a CSV so that you can import it anywhere you'd like. You can either use the | ConvertTo-CSV | Out-File combination, or the | Export-CSV technique. + +Our business does quite a bit of work with PowerBI. Most of my reports that aren't for my own personal use, which end up as just text or in an excel table, get turned into dashboards for analyzing our clients' environments to make them run more efficiently and allow stronger optimization based on actual use rather than "one size fits all" standards. + +If you choose to get farther into this sort of thing, you'll start to notice that the older Visual Basic classes and the .NET classes are available to us using that ugly [class.name]::method(data) format. + +For the purposes of this tutorial, I'm only grabbing information that everyone has access to. The best thing about this technique is that we can grab information from any application that has cmdlets available to us. All of System Center grants us access. I happen to be a SCOM admin, so I use the information made available to me from Operations Manager for many of the tasks I need to complete. + +To get to System Center Virtual Machine Manager, we'll need to get the cmdlets loaded by importing the module. Can you guess the cmdlet name for that? + +> +`import-module virtualmachinemanager +`If this doesn't work on your computer you're using to learn powershell, you'll have to have either install the VMM Console, or be running the scripts from the VMM server. + +What we're going to start running into is a matter of volume. Entering information about three servers by hand is a little bit annoying, but not too bad. Let's do that for 500 machines. How about 1000. Now we're talking some pretty serious RSI. The thought of it is enough to drive someone loopy. We should do that next. LOOPS. That will save us quite a bit of typing.  That should be a blog someone writes... + + +###### + [Step 2: Output (So much we can do)](https://powershell.org/?p=294977&preview=true) <-- Step 3: Input (Just you and me)  --> [Step 4: Loops(I can give you more)](https://powershell.org/?p=294981&preview=true) diff --git a/content/articles/2022/07/learn-powershell-in-5-painless-steps-loops-foreach-for-while-step-4/index.md b/content/articles/2022/07/learn-powershell-in-5-painless-steps-loops-foreach-for-while-step-4/index.md new file mode 100644 index 000000000..58d42b247 --- /dev/null +++ b/content/articles/2022/07/learn-powershell-in-5-painless-steps-loops-foreach-for-while-step-4/index.md @@ -0,0 +1,291 @@ +--- +url: /articles/2022-07-28-learn-powershell-in-5-painless-steps-loops-foreach-for-while-step-4/ +title: Learn Powershell in 5 Painless Steps – Loops (Foreach, For, While) – Step 4 +authors: + - Cole McDonald +date: "2022-07-28T18:45:44+00:00" +categories: + - Tutorials +tags: + - Beginner + - Loops + - Tutorial +aliases: + - /2022/07/learn-powershell-in-5-painless-steps-loops-foreach-for-while-step-4/ +--- + +DevOps = Developers + Operations.  What if you're in Operations and don't have a developer at your disposal?  That should never stop you from making your job easier and more efficient.  Powershell is a scripting language from Microsoft that is already on your Windows PC and Servers and more recently, [open sourced to the OSX and Linux communities](https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/).  It ships with a great minimalist development environment (Powershell ISE). + +The problem I had is that all of the tutorials out there either assume a background in scripting and programming, or act as nothing more than command references.  I'm hoping to enable you to automate your own workflows even if you've never programmed before.  You only need to learn 5 things: Storage, Input, Output, Decisions, Loops.  Everything you do manually is made up of these 5 things.  Every programming language is made up of these 5 things. + +* * * + + +###### + [Step 3: Input (Just you and me)](https://powershell.org/?p=294979&preview=true) <-- Step 4: Loops(I can give you more) --> [Step 5: Decisions(The time has arrived)](https://powershell.org/?p=294983&preview=true) + + +* * * + +We've spent three weeks now learning to move data from point A to point B. Let's see how we scale this from a list of 3 servers to 30, 300, or 3 Million (Pinky to corner of mouth... yes I did, I assume you did as well). We'll start with our object code from before. + +There is a matter of scale that happens here, and how we add to our object array matters. Using the += we've been using isn't a big deal with 3 objects. When we start to ramp this up, we run into a problem. The problem is this: + +> +`# Declare a test array $a +$a = @("thing 1", "thing 2", "thing 3") + +# Add an element to the end +$a += @("thing 4") + +# This is what it's actually doing +$a = $a + @("thing 5") +`We start on the right side of the equals sign (technical name: assignment operator). From left to right on that side, we (the computer) figure out what is in $a so we can find the end of it for the + then put the contents of the array @("Thing 5") into the existing array and return it across the assignment operator (equals sign).  When there are only 3 elements in $a, it's not a big deal.  When we get to thousands of them, it starts to take a long time. + +It's as if our new object has to go to the front of the line in the deli and ask each customer in line if they're at the back of the line before getting into the back of that line. + +The object knows how many elements it has.  It would be nice to take the new element, hand it the next index out of a virtual red counter number spindle and tell it to stand in that deli line.  This is a much better way to do this to make it faster at scale as it no longer needs to read through the whole array to find the end. + +> +`# Create an empty array with the class arraylist +[System.Collections.arrayList]$serverInfo_obj = @() + +# I've changed the server naming conventions slightly +# Add the object for server-01 into the array +$newObject = new-object PSObject -Property @{ + "name" = "server-01" ; + "totalC" = "50Gb" ; + "totalD" = "200Gb" ; + "cores" = "2" ; + "totalRAM" = "8Gb" +} +$serverInfo_obj.add($newObject) + +# Add the object for server-02 into the array +$newObject = new-object PSObject -Property @{ + "name" = "server-02" ; + "totalC" = "50Gb" ; + "totalD" = "50Gb" ; + "cores" = "4" ; + "totalRAM" = "16Gb" +} +$serverInfo_obj.add($newObject) + +# Add the object for server-03 into the array +$newObject = new-object PSObject -Property @{ + "name" = "server-03" ; + "totalC" = "50Gb" ; + "totalD" = "50Gb" ; + "cores" = "4" ; + "totalRAM" = "16Gb" +} +$serverInfo_obj.add($newObject) +`Now, we'll just enter another object for each of our 3 million servers we're managing.. I'll wait. No? Let's see how we can make our script LOOP through a large number of things. We'll start by noticing our naming convention has a simple format that would be suited well to just bumping the number a bunch of times and setting the name of the server to "Server-$instance". This will be simple to perform using a RANGE. To see how a range works, enter this into your console: + +> 1..100 + +Cool... we made a computer count to 100. I may have played with this dumb little piece of code far too much when I first learned it. We'll note that the numbers don't have the leading zeroes to make them the same number of digits. It's easier to read a list of them if they all line up. This looks a little bit like I sneezed while typing but I'll explain it once we've run it: + +> 1..100 | %{ "{0:000}" -f $_ } + +1) We know that the range generates all the numbers between 1 and 100. +2) We know that the PIPE character passes data from the left to the right. +3) We recognize that there is some sort of string in there "" and some CURLY BRACES {} + +We'll start with the curly braces. Anything inside a set of curly braces is a set of commands that get run and solved once we get to them. A very common structure you'll see frequently in scripts we get from online is this bit |%{} + +| passes information across. Specifically, it passes objects. Those objects can be as simple as the number we're generating here, or as complicated as objects containing multiple properties and methods. + +{} contains a set of commands, we just learned this. + +% is a shorthand for a command called... + + + **FOREACH** + + +I just heard the dramatic hamster soundtrack in my head when I typed that. I need a hobby. The foreach command takes a set of 0 or more objects and runs the contents of the paired curly braces once for each of the objects being passed to it. In our case, we're passing it a bunch of numbers, one per object. Within the foreach structure, I'd like to draw your attention to the $_ but. That is a shorthand for $PSItem, which is the current object coming across the PIPELINE. We can verify this thusly: + +> +`# Shorthand +"Ferdinand" | % { Write-Output $_ } + +# Full commands, I prefer these for readability +"Imelda" | Foreach { Write-Output $PSItem } + +# Passing an array across +@("Ferdinand", "Imelda") | Foreach { Write-Output $PSItem } +`All that's left is to PARSE (figure out) the "{0:000}" -f $_ part. It's a special structure that allows us to format strings. We now know that the $_ is the object coming across the pipeline... in our case, a number; let's say 42. The -f is called a format operator, the bits inside the string are the PLACEHOLDERS. To show you how they work, we'll do a simple demonstration. + +> +`"First {0}, Second {1}" -f "thing", "one" +`You'll note that the stuff on the right is like an array with a part 0 and a part 1. Indices are difficult to talk about outside the code. I blame the binary numbering system for this problem. So "thing" is the zeroth item and "one" is the oneth item on the right side of the -f operator. They are represented by their index number in curly braces on the left, inside the string. + +Now, as we look back at our initial piece of code we're working through, we've got "{0:000}". The 0 to the left of the : is our index. we know that the $PSItem is in our zeroth item in our single item array to the right of the -f operator, so that should show up there. To the right of the : we can only assume is the part that adds the zeroes to our number, making it 042, and we'd be correct. + +This is amazingly powerful for information display allowing left and right alignment, hexadecimal conversion, currency, number percision, etc. In our case, it's just setting aside digits that will be filled in with our 42. We could also use {0:D3} to do the same thing, I just like the {0:000} because it's a little easier to look at and tell what it's doing. To write that whole thing out without the short hand: + +> +`1..100 | Foreach { "{0:000}" -f $PSItem } +`Here's a list of different formatting you can use with the -f operator: + +So, lets get back to naming our servers: + +> +`1..100 | foreach { "server-{0:000}" -f $PSItem } +`I have another way to do this same type of thing. Instead of sending it things, this one generates them based on whatever you tell it to do. This structure exists in nearly every programming language out there. It is a little bit more programmer looking than the foreach loop. + + + **FOR** + + +We'll start by generating exactly the same thing as our last piece of code: + +> +`for ($i=1; $i -lt 101; $i++) { "server-{0:000}" -f $i } +`Since it's more programmy, I'm going to break it up into multiple lines. I'm going to do this in a couple different ways to illustrate that it's really the same code, just formated differently. You can technically do this with most examples of code within curly braces {} or parentheses (): + +> +`# More of a .NET / C# way of looking at this code +# One thing per line +# Blocks open and close on their own line +# Lots of white space +for +( + $i=1 + $i -lt 101 + $i++ +) +{ + "server-{0:000}" -f $i +} + +# The traditional "correct" Powershell way +# Very C++ or Java-y +for ($i=1; $i -lt 101; $i++) +{ + "server-{0:000}" -f $i +} + +# The more Python looking way, if you're into that +# In Python, White space at the beginning of a line counts +# The curly braces wouldn't even be necessary there +for ($i=1; $i -lt 101; $i++) { + "server-{0:000}" -f $i +} + +# How I prefer it +# - Collapses better in the ISE +# - Shows me the block start and finish Easier when nesting +# - Has the brevity of the Python without the open ended closing bracket +for ($i=1; $i -lt 101; $i++) { + "server-{0:000}" -f $i +} +`Use whatever makes the code easier for you to read. Feel free to reformat the scripts you download from others as well to make them easier for you to read. I use the latter format for the reasons I stated in the comments. Let's get back to the for statement: + +> +`for ($i=1; $i -lt 101; $i++) { + "server-{0:000}" -f $i +} +`The command is FOR (initiate variable; condition; increment variable){code block} + +We recognize the $i=1 We're setting the variable $i to the value 1 as a starting point. We can use the semi-colon ; to separate commands on the same line. + +The second part is called an evaluation. The -lt stands for "less than." So the middle statement reads: $i is less than 101. Our FOR LOOP will run as long as this is true (or as powershell sees it, $TRUE as opposed to $FALSE). + +The third piece states what happens each time the loop comes back up to the top. In this case, we are incrementing our $i by 1. The ++ adds 1 to whatever integer based variable it's attached to. If we start at 0 instead of 1, we can loop through index numbers. + +It's a little bit pointless as we can just pass through, but perhaps we want to loop through every other item in an array. We could do a $i=$i+2 for the third bit. Very useful on our search for the next prime number and that huge award! (2 is the only possible even prime) + +I find the FOR loop a bit ugly for most of the processing I do. There are times it is exactly the thing needed, but I very much prefer having more control within the body of the loop. For this, I primarily use the WHILE loop instead. + + + **WHILE** + + +It is simple in concept, it loops WHILE the condition () is true (careful, this first example will loop forever - keep an eye on the stop button at the top of the editor): + +> +`While ( $TRUE ) { # Does a thing; Write-Output "Can't sleep" } +While ( $FALSE ) { # Doesn't do a thing; Write-Output "Clowns will catch me" } +`Let's talk TRUE and FALSE. There are special variables defined in almost every language for $TRUE and $FALSE. These are the two BOOLEAN conditions, the binary bread and butter of 1 and 0, so to speak. In fact, they are stored as a 1 and a 0 and can be used that way: + +> +`While ( 1 ) { # Does a thing; Write-Output "Can't Sleep" } +While ( 0 ) { # Doesn't do a thing; Write-Output "Clowns will catch me" } +`Let's talk BOOLEAN a little bit (get it... bit? Like a single 1/0 piece of storage in the computer? I slay me). + +During the for loop discussion, we looked at the -lt operator, which I mentioned was a boolean operator. This one will take some explanation. + +A boolean statement is any comparison that can be resolved to true or false. In our for loop, we had the statement $i -lt 101. As long as $i was less than 101, that statement resolved to $TRUE. As soon as it was equal (-eq) to 101, it was no longer less than it and therefore considered $FALSE. As seen in the simple statements above, $FALSE in the condition () part of the while loop "# Doesn't do a thing." If we replace the $TRUE/$FALSE with a CONDITIONAL STATEMENT, we can build that same FOR loop using a WHILE loop. + +> +`$i = 1 +While ( $i -lt 101 ) { + "server-{0:000}" -f $i + $i++ +} +`We've got a bunch of different boolean operators we can use against numbers: + +> +`-eq Equal To +-lt Less Than +-le Less Than or Equal To +-gt Greater Than +-ge Greater Than or Equal To +`A few for strings: + +> +`-like This takes wildcards: "server-1*" +-notlike same as above, but excludes instead of includes +`EXTRA CREDIT! There are a few more that will evaluate multiple boolean statements as well: + +-and (both true) + +> +`$true -and $false = $false +$true -and $true = $true +$false -and $true = $false +$false -and $false = $false +`-or (at least one true) + +> +`$true -or $false = $true +$true -or $true = $true +$false -or $true = $false +$false -or $false = $false +`-xor (one true, not both) +("exclusive or", not the bad guy from a low budget 80s sci-fi movie) + +> +`$true -xor $false = $true +$true -xor $true = $false +$false -xor $true = $true +$false -xor $false = $false +`-not (you're so negative, also known as !) + +> +`-not $false = $true +!$false = $true +-not $true = $false +!$true = $false`# Returns $TRUE when $i is 50 to 100 +($i -gt 49) -and ($i -lt 101) + +# Makes more sense as +($i -ge 50) -and ($i -le 100) +`You'll note the () I've used. These are used in this case to indicate order of operations. The parentheticals are solved first. This turns them into a $TRUE or a $FALSE. Then those results are compared with the boolean operator. You can make these quite complex. Imagine you need to find all servers that have more than 8GB installed and smaller than 250GB disk, but not the ones named SQL-xxx + +> +`( + ( $server.memory -gt 8 ) -and + ( $server.diskC -lt 250 ) +) -and ( + $server.name -notlike "SQL-*" +) +`This will evaluate the memory and disk space part first, then evaluate the server name, then check them against each other. This is great if all we're ever doing is checking whether to stop a loop. What if we want to adjust our dynamic memory settings on a VM based on its memory and disk configurations? We'd need to be able to do this test, then have the results drive a DECISION! Have you guessed next week's topic yet? + +Next week, we learn DECISIONS. Or as I like to call it, how SKYNET begins. + + +###### + [Step 3: Input (Just you and me)](https://powershell.org/?p=294979&preview=true) <-- Step 4: Loops(I can give you more) --> [Step 5: Decisions(The time has arrived)](https://powershell.org/?p=294983&preview=true) diff --git a/content/articles/2022/07/learn-powershell-in-5-painless-steps-output-console-file-xml-csv-step-2/index.md b/content/articles/2022/07/learn-powershell-in-5-painless-steps-output-console-file-xml-csv-step-2/index.md new file mode 100644 index 000000000..600f489fe --- /dev/null +++ b/content/articles/2022/07/learn-powershell-in-5-painless-steps-output-console-file-xml-csv-step-2/index.md @@ -0,0 +1,240 @@ +--- +url: /articles/2022-07-28-learn-powershell-in-5-painless-steps-output-console-file-xml-csv-step-2/ +title: Learn Powershell in 5 Painless Steps – Output (Console, File, XML/CSV) – Step 2 +authors: + - Cole McDonald +date: "2022-07-28T18:45:18+00:00" +categories: + - Tutorials +tags: + - Beginner + - Output + - Tutorial +aliases: + - /2022/07/learn-powershell-in-5-painless-steps-output-console-file-xml-csv-step-2/ +--- + +DevOps = Developers + Operations.  What if you're in Operations and don't have a developer at your disposal?  That should never stop you from making your job easier and more efficient.  Powershell is a scripting language from Microsoft that is already on your Windows PC and Servers and more recently, [open sourced to the OSX and Linux communities](https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/).  It ships with a great minimalist development environment (Powershell ISE). + +The problem I had is that all of the tutorials out there either assume a background in scripting and programming, or act as nothing more than command references.  I'm hoping to enable you to automate your own workflows even if you've never programmed before.  You only need to learn 5 things: Storage, Input, Output, Decisions, Loops.  Everything you do manually is made up of these 5 things.  Every programming language is made up of these 5 things. + +* * * + + +###### + [Step 1: Storage (Lots of fun)](https://powershell.org/?p=294975&preview=true) <-- Step 2: Output (So much we can do) -->[ Step 3: Input (Just you and me)](https://powershell.org/?p=294979&preview=true) + + +* * * + +This week it's all about OUTPUT. We'll be covering ways to use the stored data to get information to either the User (the most important part of the GUI) or to another part of our script for further processing. I do have a confession to make. I've already tricked you into starting this lesson last week. If you haven't closed your ISE window yet, the next bit will show you exactly how to get information about our server objects we stored in the $serverInfo_obj array. If you did close it (I forgive you, it has been a week), open it back up and run the last chunk of code we wrote. It's the Object part from our last lesson. Any variable you put information into will be available in the console until you close the application. + +Playing around with Variables is all well and good, although it would be better if we could do something useful with the values in there. I assume you're reading this because you want to do something with Powershell, not just learn Powershell for it's own sake. While writing scripts, we often find ourselves exploring objects that we didn't create in the console exactly the same way we were in the last exercise. + + + **CONSOLE** + + +If you recall from the previous lesson on Storage, the editor is the top part of our PowerShell ISE application and the console is the bottom part of the window. + +Try typing this into the console followed by the enter key to EXECUTE this command: + +> +`$serverInfo_obj[0] | Get-Member +`The VERTICAL PIPE character ( | ) takes the objects from the part to the left and hands them off to the part to the right. The process is called, simply enough, PIPING. I always envisioned it as a set of saloon doors from a western, though. In this case, we're sending our objects we created for our first server ( [0] ) across the pipe into GET-MEMBER. Get-Member is a function from Microsoft that shows you all of the elements of an object. We made a few PROPERTIES last time and you probably recognize them (name, totalRAM, etc...). It even tells you whether they're String or Int or some other data type. + +When we're grabbing information from servers or software, it usually comes to us as an object. You will see other MEMBERS listed in those objects. Most specifically METHODS, which are little programs within the object itself but are a topic for another day. We used piping last week to send our object into a Format-Table with the autosize flag activated. In doing that task, I already had you output to the Console. + +Let's imagine a scenario where we would use this. A client is coming to visit and the Powerpoint your marketing team is going to present gets that last minute slide added that needs information about a few of your servers. Name, number of cores, Installed RAM, Size of C: and D: ... sound familiar? We can ask VMM or the servers themselves for all of that information. We'll cover some of that in our next lesson on input. Right now, we've got a deadline to meet, the clients just pulled into the parking ramp. Boy, Cole (you might say), this sounds very specific ... it may or may not have happened just the other day. Here's the procedure I may or may not have followed for this: + +> +`# Create an empty array +# Add the object for server01 into the array +# Add the object for server02 into the array +# Add the object for server03 into the array +# Pipe the object through Format-Table +# Select the output from the console using the mouse +# Control-C to copy to the clipboard +# Open the PPT Deck +# Navigate to the slide in question +# Control-V to paste the text into the block they've assigned +# Control-S to save the document +# Control-Q to close the document and the application +# Lift Phone Handset +# Dial Sales department +# Let them know you've single-handedly saved their presentation +# Grow a mullet, you're a rockstar. +`That seems like I may have gotten carried away. I actually have a reason for that. It's the kind of detail we'll be using going forward to start our scripts. Now we just have to fill in the actual script parts. I recommend you go for a haircut, the mullet was a horrible idea, although it worked for MacGyver. + +Let's start by adjusting our object that we've already created. They need specific pieces of information for their presentation: + +> +`# Create an empty array +$serverInfo_obj = @() + +# Add the object for server01 into the array +$serverInfo_obj += @( + new-object PSObject -Property @{ + "name" = "server01"; + "totalC" = "50Gb"; + "totalD" = "200Gb"; + "cores" = "2"; + "totalRAM" = "8Gb" + } +) + +# Add the object for server02 into the array +$serverInfo_obj += @( + new-object PSObject -Property @{ + "name" = "server02"; + "totalC" = "50Gb"; + "totalD" = "50Gb"; + "cores" = "4"; + "totalRAM" = "16Gb" +} +) + +# Add the object for server03 into the array + $serverInfo_obj += @( + new-object PSObject -Property @{ + "name" = "server03"; + "totalC" = "50Gb"; + "totalD" = "50Gb"; + "cores" = "4"; + "totalRAM" = "16Gb" + } +) + +# Pipe the object through Format-Table +$serverInfo_obj | Format-Table +`The rest is on you... + +> +`# Select the output from the console using the mouse +# Control-C to copy to the clipboard +`Wouldn't the smart programmer folks at Microsoft, in their infinite wisdom, have thought of this? Indeed they have, so let's change that last line: + +> +`$serverInfo_obj | Format-Table | clip +`Here's what ended up on my clipboard: + +> +`totalC totalD totalRAM name cores +------ ------ -------- ---- ----- +50Gb 200Gb 8Gb server01 2 +50Gb 50Gb 16Gb server02 4 +50Gb 50Gb 16Gb server03 4 +`I'm not happy with the order it chose for the properties. I'm going to force its hand using the SELECT-OBJECT command and a comma separated list of the properties I want it to show: + +> +`$serverInfo_obj | Select-Object name, cores, totalRAM, totalC, totalD | Format-Table | clip`name cores totalRAM totalC totalD +---- ----- -------- ------ ------ +server01 2 8Gb 50Gb 200Gb +server02 4 16Gb 50Gb 50Gb +server03 4 16Gb 50Gb 50Gb +`That's better. Now off to PPT and pasting. I'm going to give you a freebie here! Are you down with OGV? It's a short name for Out-GridView and it's awesome! Imagine that instead of 3 servers, you've got 1000 and they are from different clients and the sales presentation is for a single client and you can't let them see the other client's information? + +You can pipe through Out-GridView to make a selection interface that allows dynamic filtering, shift-selecting rows of information, ctrl-clicking individual rows. I use OGV all the time! There are actually quite a few shortcuts for common commands: Format-Table is ft, Format-List is fl, Get-Member is gm). + +The Out-GridView command takes an option called passthru. These are indicated by a dash ( - ) and can either be flags (True/False) like this one is or take data directly after them to send it down the PIPELINE: + +> +`$serverInfo_obj | Select-Object name, cores, totalRAM, totalC, totalD | ogv -passthru | ft | clip +`I've sometimes found it difficult to get sales to let me adjust their slide decks. A better option would be to send them a file. That will allow them to do the copying and pasting how they like so they are in control of their presentation. + + + **FILES** + + +The nice thing about Powershell is that piping from one small single purpose command to the next allows you to just change one piece to change part of your script. In this case, we can replace the clip command and change it to write to a file: + +> +`$serverInfo_obj | Format-Table | Out-File C:\Users\cole.mcdonald\Desktop\test.txt +`This places a text file with that little table on my desktop so I can attach it to an e-mail. This file can go anywhere you have access to. If you need to write out to a folder that requires admin access, you can run Powershell ISE just like any other program: Right-Click and Run as Administrator. + +!!!Caution. This is the one time I'll be serious during this entire series... you can wipe out your whole environment if you're not careful with elevating the ISE. Use it only if you absolutely must. Use it only for the task you need it for. Triple check your code!!! + +For our next example, we're going to use a special kind of string. We know it's got quotes... but we want to keep line formating intact as well. This calls for a stringwich @""@. We can open the stringwich (splat-quote) anywhere we'd like on the line, but the closing pair (quote-splat) has to be on its own line. Imagine that we're making a little bit of HTML to format that table we just made. The cool thing about strings is that we can access any of our variables inside them. + +If we're using objects and looking to get at specific information in them, it gets a little bit fancy. We just have to hide what we're doing from the string using an AD HOC VARIABLE. It's just a fancy way to say we're solving what's in the parentheses first. For that we use this: $(). The dollar sign because it's a variable, and the parentheses means we're doing this first. + +Getting to the name of server01, for example, we use this $($serverInfo_obj[0].name). We recognize all of the pieces of this from our objects lesson last time. It's the name property of element 0 of our $serverInfo_obj array. We've stuffed it into the $() to hide the [0].name part from the string. Otherwise, it just treats it as the next few characters in the string. That's no good. Let's see what that looks like: + +> +`$HTMLOutputFromTheObjectWeMadeEarlier = @" + + + Server Configurations + + + + + name + cores + totalRAM + totalC + totalD + + + $($serverInfo_obj[0].name) + $($serverInfo_obj[0].cores) + $($serverInfo_obj[0].totalRAM) + $($serverInfo_obj[0].totalC) + $($serverInfo_obj[0].totalD) + + + $($serverInfo_obj[1].name) + $($serverInfo_obj[1].cores) + $($serverInfo_obj[1].totalRAM) + $($serverInfo_obj[1].totalC) + $($serverInfo_obj[1].totalD) + + + $($serverInfo_obj[2].name) + $($serverInfo_obj[2].cores) + $($serverInfo_obj[2].totalRAM) + $($serverInfo_obj[2].totalC) + $($serverInfo_obj[2].totalD) + + + + +"@ +`Go ahead and look at that variable in the console. Should we be snooty about it and do it the "proper" powershell way? + +> +`# This variable name is horrible, feel free to fix it by using +# a better one when you enter and run the code in the editor + +# Write-Host outputs strings to the console + +Write-Host $HTMLOutputFromTheObjectWeMadeEarlier +`Note that all of the lines are separated and all of the tabs remain! If you'd like to see the difference, try it without the @ @ (that's a Star Wars PUNctuation). I've had inconsistent results keeping spacing without them. If the HTML code confuses you, feel free to just use the elements from our object array and build your own output, perhaps you can turn it into a comma separated text file (CSV). That would actually be really slick as it'll open directly in Excel or even insert as a table into the PPT deck. If only those super smart programmers at Microsoft had thought of that! Someone's talking to me in the background, hold on... + + + **XML/CSV/HTML** + + +So, I'm back. I've been told Microsoft's programmers did think of that. I was all geared up to get you writing some fancy chunk of code called a FUNCTION to turn objects into CSV files to export to files... not at all necessary. Apparently, that will have to be a later blog as well. Apparently, or so I'm told, all we have to do is send it through another little command. Technically, in Powershell, these are called CMDLETS: pronounced command-lets. Powershell is still new enough they could afford full-blown commands. They are supposed to follow a specific format as well called verb-noun. + +In the cases we've seen so far, we've used the verbs Get, Write, Format, and New. There are also Set (the dangerous one), Export, Read (which will be covered next week), and a few more. The nice thing about the ISE is that if you start typing a cmdlet, it'll suggest other ones for you. Microsoft calls this INTELLISENSE and it's a great way to explore what's available in the language. The right hand pane of the ISE window also contains a huge list of them and that's searchable as well. Explore there to find what all is available. You can even use Get-Help to find out more info about them: + +> +`Get-Help Write-Host -showwindow +`This will make you a little window with information and examples for the command. If this didn't work, you may need to run the cmdlet Update-Help the first time out to get it to download all the help files to your computer. Let's look at our CSV option using this technique: + +> +`get-help convertto-csv -ShowWindow +`This gives you a window that allows you to really dig into more information about the cmdlets. Let's try that using our out-file example and add the ability to select the elements to pass through using our GridView: + +> +`$serverInfo_obj | ogv -passthru | ConvertTo-CSV | Out-File ~\Desktop\servers.csv +`The ~ character is brought over from the Linux world and refers to your current user directory. It makes it easier to get to your documents/desktop/downloads directories, etc. This can also take UNC paths to get to network resources. + +So this example takes our objects, pipes them into OGV for us to select the ones to pass through to the conversion and then to the outfile command. The resulting file can now be double-click opened into Excel, inserted as a table in PPT, whatever you could normally do with this type of data... even stuffed into PowerBI or R for big data analysis. That previous HTML example can be done with a ConvertTo-HTML which I saw while I was looking up the CSV command earlier. Did you notice it too? It also does XML and JSON for using across the web or to build DSC files. Yes, Virginia, we can build DSC files from scratch using Powershell allowing us to automate server buildouts modelled after a single instance. This build out could even be scripted to provision IP addresses from a database you're using to keep track of such things and make DNS changes to your environment so you don't have to. There's a whole bunch of built-in cmdlets for dealing with your Azure deployment and System Center if you have it installed. It also allows for DSC configuration of VMs through VMM with a little bit of fiddling. + +Now, if only we could have the program we're writing ask us for information to store in scripts... maybe if we can figure out the cmdlet name. Writing to the Console is Write-Host. I wonder what Reading from it would be? You can either explore that or wait until next week when we look at INPUT. We'll cover a few more options as well. At the end of next week, you'll be able to gather information, store it in variables and output it in various ways. Sounds as if we'll have you doing useful things by the end of next week. After that groundwork has been laid, we'll dig into building SkyNet. + + +###### + [Step 1: Storage (Lots of fun)](https://powershell.org/?p=294975&preview=true) <-- Step 2: Output (So much we can do) -->[ Step 3: Input (Just you and me)](https://powershell.org/?p=294979&preview=true) diff --git a/content/articles/2022/07/learn-powershell-in-5-painless-steps-storage-variables-arrays-hashtables-step-1/index.md b/content/articles/2022/07/learn-powershell-in-5-painless-steps-storage-variables-arrays-hashtables-step-1/index.md new file mode 100644 index 000000000..5cd17b83a --- /dev/null +++ b/content/articles/2022/07/learn-powershell-in-5-painless-steps-storage-variables-arrays-hashtables-step-1/index.md @@ -0,0 +1,272 @@ +--- +url: /articles/2022-07-28-learn-powershell-in-5-painless-steps-storage-variables-arrays-hashtables-step-1/ +title: Learn Powershell in 5 Painless Steps – Storage (Variables, Arrays, Hashtables) – Step 1 +authors: + - Cole McDonald +date: "2022-07-28T18:45:08+00:00" +categories: + - Tutorials +tags: + - Beginner + - Variables + - Tutorial +aliases: + - /2022/07/learn-powershell-in-5-painless-steps-storage-variables-arrays-hashtables-step-1/ +--- + +DevOps = Developers + Operations.  What if you're in Operations and don't have a developer at your disposal?  That should never stop you from making your job easier and more efficient.  Powershell is a scripting language from Microsoft that is already on your Windows PC and Servers and more recently, [open sourced to the OSX and Linux communities](https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/).  It ships with a great minimalist development environment (Powershell ISE). + +The problem I had is that all of the tutorials out there either assume a background in scripting and programming, or act as nothing more than command references.  I'm hoping to enable you to automate your own workflows even if you've never programmed before.  You only need to learn 5 things: Storage, Input, Output, Decisions, Loops.  Everything you do manually is made up of these 5 things.  Every programming language is made up of these 5 things. + + + +--- + + + +###### + Step 1: Storage (Lots of fun) --> [Step 2: Output (So much we can do)](https://powershell.org/?p=294977&preview=true) + + + + +--- + + +This is a slightly longer one, but I cover a lot of ground work we'll need in the next few weeks. + +For our first week, I'm covering storing information in your script. Without storage, none of the rest of what we're going to learn makes sense. The most basic type of storage is the VARIABLE, a collection of information can be stored as separate pieces of an ARRAY, and accessing the information over and over again in a script is made easier using a HASHTABLE, the last piece of storage we'll cover is the OBJECT... which will serve you later if you choose to get deeper into scripting or programming. + + + **VARIABLES** + + +When we're scripting, we're going to be grabbing information from various places, making decisions based on that information, doing stuff with that informaiton, and delivering it to various places. We need somewhere to store that information. Let's do this! + +> +`$ourFirstVariable = "Stuff Inside the Variable" +`There... you're a programmer. There may be a little bit more to it, but this fundamental building block provides the basis for all fo the rest. I'll explain what the parts mean, then we'll get started in Powershell ISE to make it happen and to prove that something actually happened. + +In Powershell, anything that begins with a Dollar Sign ($) is a variable. After that, the developer gives it a name. This name can be just about anything with letters and numbers as long as it starts with a letter: + +> +`$x +$x1 +$myThing +$cellContents_1 +$ServerName +$Server_Name +`... you get the picture. As a matter of style, I use what is called "Camel Case" for my variables. I always start with a lowercase letter and each word after that in the variable name is capitalized. + +If you see a $ in a script, some piece of information is being stored or recalled at that point in the script. The equals sign (=) is what we refer to as an "assignment operator." Basically, whatever is on the right side of it gets solved and assigned to what ever is on the left side. In the first case, the sentence (technical name: STRING) "Stuff Inside the Variable" is being assigned into the variable $ourFirstVariable. I liken it to writing down the sentence on a piece of paper and putting it in an empty coffee cup. When you need it later, you can just reach into the cup and pull the slip of paper back out to read. In the case of variables, you can label them... of course, in the coffee cup example, my variable would be $WithEnoughCoffeeNothingIsImpossible and the contents would be "C8H10N4O2" + +Speaking of Strings, there are some different types of information we should be aware of. As I mentioned, the STRING has quotes around it and is any combination of letters, numbers, and most symbols on the keyboard. The different types of information (or DATA TYPES) can be indicated using the square brackets on your keyboard: []. And you thought you'd never use those keys... we'll get to the squiggly ones later. In our first example, we can tell the computer exactly what data type we're assigning to the variable. + +> +`$ourFirstVariable = [string]"Stuff Inside the Variable" +`It's not terribly useful in this case because Powershell can see that you've got quotes and a bunch of letters and stuff in side it. It assumes it's a string. What if you were storing a number? You can't really do math with a string, so assigning a number to our variable stays a number. There are a few different kinds, but we'll stick to integers for now. + +> +`$storingANumber = [int]2 +$storingAString = [string]2 +`These store the number 2 differently. The first stores it as a straight integer, whereas the second stores it as a string with only the character "2" in it. Being particular like this isn't neccessary all the time, but can help solve problems if you run into them. Powershell is pretty good at guessing what you're trying to do. The second example is called CASTING an integer to a string or CASTING to a string. + +Enough talk... let's get the software running and play with some variables for real! Launch Powershell ISE (My Menu bar is on the left of my screen for ... reasons): + +![Powershell ISE in the Windows Menu](https://powershell.org/wp-content/uploads/2022/07/blogImage01-300x177.png) + +If you've done any work in the command prompt before, this is basically the same thing. A bunch of the commands even work in here the same way they used to. One of the biggest differences you'll see is the top part looks a bit like a text editor... with numbers down the left hand margin. The top half is the EDITOR, the bottom half is the CONSOLE. + +![](https://powershell.org/wp-content/uploads/2022/07/blogImage02-300x218.png) + +The stuff done in the console happens right away, whereas the stuff in editor won't do anything until we "Run" it. For simplicity's sake, we're going to start in the console. + +When you first open the ISE (Integrated Scripting Environment), it will show you a PS \ > prompt in the console. The \ part will be the path where the console is currently operating. If we type DIR here and hit enter, it'll give us a directory listing of that directory. As in the old CMD.exe prompt, it'll use CD to change directories. Let's enter our variable assignment from above: + +> +`$ourFirstVariable = "Stuff Inside the Variable" +`Hit enter. Nothing happens. How can we tell what happened? Let's ask the console what it has in that variable. + +> +`$ourFirstVariable +`Hit enter. Now we've got the contents of our variable on the very next line! + +I have a confession to make. Like in the matrix - "There is no string!" A string is actually a different storage type called an ARRAY. Let's look at those. + + + **ARRAYS** + + +At some point the string / integer may not be enough for you. Underneath, the string is just a series of characters, one after the other S, t, u, f, f. There's a special way to store that type of informaiton that becomes extremely useful for us. Much like the junk drawer, we can put anything we want in there and access it right away. The way to get at individual pieces of data in an array is fairly simple. Square brackets and an integer. Since we're programmers now, we start cointing at zero. There's a real reason for it... just go with it for now. [0] is the first ELEMENT in the array. We access it using the variable name and the INDEX of the element we're trying to get to. Let's prove that my statement about strings was true. In the console: + +> +`$ourFirstVariable[0] +`Hit enter. It should return an S on the next line. Try other indexes in there. Each of our letters in turn is there. To have some real fun, let's put a RANGE in there: + +> +`$ourFirstVariable[0..24] +`Did you hit enter already? good. This should be our entire string with each element of it per line... including the spaces, which are just another character to the computer. + +What if we wanted to store a different collectio of things in an array? Perhaps a parts list or a DVD list of titles from your collection. Defining a string we used the double-quote character ". To define an array, we're going to use what I like to call a Splat sandwich - or a Splatwich @(). Each of the elements are separated by a comma. + +> +`$ourFirstArray = @("thing1", "thing2") +`Now we can access them using [0]and [1] after the variable. I'm going to let you try that on your own, it'll speed up the rest of the tutorials. You may also notice that I have 2 strings inside an array... and a string is an array... array-ception? You would be absolutely correct. A MULTIDIMENSIONAL ARRAY makes for a very powerful data structure. Imagine this problem we need to solve: + +Problem - We need a report of all of the servers on our network, their C: freespace, total C: size, CPU%Usage, RAM Used, and RAM Total. + +Solution is to ask AD for all of the servers, Ask System Center VMM for the configurations of the servers. If they're physicals, you can use wmi to get performance counters. Now we have to store all that information in an array to make our report. Let's look at that array structure. + +> +`$server1 = @("server01", "27Gb", "50Gb", "76%", "10Gb", "16Gb") +$server2 = @("server02", "20Gb", "50Gb", "53%", "12Gb", "16Gb") +$server3 = @("server03", "14Gb", "50Gb", "14%", "3Gb", "16Gb") +$serverInfo = @($server1, $server2, $server3) +`You can either enter each of these lines in the console or try typing them into the editor and hitting the Run button on the ribbon (F5). Back in the console, let's explore this structure. + +$serverInfo[0][0] will get you the name of the first item in the array (Server01). $serverInfo[2][3] will get you the CPU% for Server03. Good storage, horrible way to access it. I wish there were a way to access it something like $serverInfo[0]["CPU%"]... luckily, we can. Stick with this, we're nearly done and I'm going to start making it look more programmy. We're going to split the assignment onto multiple lines. + + + **HASHTABLES** + + +Looking at the splatwich, you'll note that it opens and closes with parentheses. Powershell will allow anything to happen inside those. + +> +`$serverInfo = $( +    $server1, +    $server2, +    $server3 +) +`This will work and allows you to look at this information in blocks. How you break the lines is a matter of style. I've learned quite a few languages, and this style works for me. It's not the only way. Use what works for you once you get to that point. + +To make this easier to get to the information inside our variable, we're going to name each of the pieces. The name of it is the KEY. The information inside is the VALUE. They are referred to as a KEY/VALUE pair. That looks like this: + +> +`$server1 = @{ +   "name"    = "server01"; +   "freeC"    = "27Gb"; +   "totalC"   = "50Gb"; +   "CPU"      = "76%"; +   "RAMUsed" = "10Gb"; +    "RAMTotal" = "16Gb" +} +`So, you'll note we've siwtched the square brackets [] to curly brackets {} (one of my coworkers refers to them jokingly as curly fries). You'll also notice the commas have changed to semi-colons. I don't know why, but that's how it works. If you put the other 2 server's information together and add them at the end to the $serverInfo, it looks like this: + +> +`# This is a comment line, anything that starts with a # is ignored by Powershell +# We can use them to talk to our future selves as we often have to come back to code +# Most of the time, we've forgotten everything we've written and what it's for... + +# Gather data for server01, store in variable +$server1 = @{ + "name" = "server01"; + "freeC" = "27Gb"; + "totalC" = "50Gb"; + "CPU" = "76%"; + "RAMUsed" = "10Gb"; + "RAMTotal" = "16Gb" +} + +# Gather data for server02, store in variable +$server2 = @{ + "name" = "server02"; + "freeC" = "20Gb"; + "totalC" = "50Gb"; + "CPU" = "53%"; + "RAMUsed" = "12Gb"; + "RAMTotal" = "16Gb" +} + +# Gather data for server03, store in variable +$server3 = @{ + "name" = "server03"; + "freeC" = "14Gb"; + "totalC" = "50Gb"; + "CPU" = "14%"; + "RAMUsed" = "3Gb"; + "RAMTotal" = "16Gb" +} + +# Collect server information into an array for later reference +$serverInfo = $( + $server1, + $server2, + $server3 +) +`My initial Script actually only consisted of this: + +> +`# Gather data for server01, store in variable +# Gather data for server02, store in variable +# Gather data for server03, store in variable +# Collect server information into an array for later reference +`I started here so I could talk through the process I'd be completing, then write the code after each of the comments to flesh out the code. Now we've got a real program looking thing. Let's look at the data we've got in $serverInfo now. + +$serverInfo[1]["totalC"] will show us our total C drive allocation for server02. This is now useful. We can also use "DOT NOTATION" to reference these named pieces. + +$serverInfo[1].totalC will reference exactly the same piece of information. The editor now also has some cool things going on it it. You'll note each of the lines that start a block have a little square next to it. You can click this to collapse the block. This makes it so if you have longer scripts, you can have most of it collapsed and view just the portions you're working on. It aids in the readability of the code. + + + **OBJECTS** + + +The last one is very similar to what we just did, but is dealt with differently internally. We're going to make an OBJECT. It's going to look very similar to what we've just done... but later when we're passing our information to and from other parts of code, Powershell is made to deal with "objects" in a more robust fashion than passing variables like we've been making. They look like this: + +> +`# Clear the array +$serverInfo_obj = @() + +# I'm adding _obj to the variable name just to remind my future self what is in this variable +# I can see here that it's an array @() of objects _obj +# You can choose not to add the _obj if you don't like the looks of it + +# Add the object for server02 into the array +# The += adds the contents of the @() below (the new "psobject" object) to the end of the existing array +$serverInfo_obj += @( + new-object PSObject -Property @{ + "name" = "server01"; + "freeC" = "27Gb"; + "totalC" = "50Gb"; + "CPU" = "76%"; + "RAMUsed" = "10Gb"; + "RAMTotal" = "16Gb" + } +) + +# Add the object for server02 into the array +$serverInfo_obj += @( + new-object PSObject -Property @{ + "name" = "server02"; + "freeC" = "20Gb"; + "totalC" = "50Gb"; + "CPU" = "53%"; + "RAMUsed" = "12Gb"; + "RAMTotal" = "16Gb" + } +) + +# Add the object for server03 into the array +$serverInfo_obj += @( + new-object PSObject -Property @{ + "name" = "server03"; + "freeC" = "14Gb"; + "totalC" = "50Gb"; + "CPU" = "14%"; + "RAMUsed" = "3Gb"; + "RAMTotal" = "16Gb" + } +) +`To refer to these now, we can still use index and dot notation $serverInfo_obj[0].name but you'll note as you type it, the property "name" shows up in the popup list! We made Powershell know about our data. This lets us do cool things with it. For instance: + +> +`$serverInfo_obj | Format-Table -autosize +`Looks really useful. whereas: + +> +`$serverInfo | Format-Table -autosize +`does not. The | character passes objects through to the next command for processing. In this case, we're formatting a table for OUTPUT. Which is, coincidentally, next week's topic. + + +###### + Step 1: Storage (Lots of fun) --> [Step 2: Output (So much we can do)](https://powershell.org/?p=294977&preview=true) diff --git a/content/articles/2022/07/on-to-the-future-with-powershell/index.md b/content/articles/2022/07/on-to-the-future-with-powershell/index.md new file mode 100644 index 000000000..9fdc9ba4c --- /dev/null +++ b/content/articles/2022/07/on-to-the-future-with-powershell/index.md @@ -0,0 +1,51 @@ +--- +url: /articles/2022-07-28-on-to-the-future-with-powershell/ +title: On to the Future with Powershell +authors: + - Cole McDonald +date: "2022-07-28T18:44:45+00:00" +categories: + - Tutorials +tags: + - Beginner + - DevOps + - Tutorial +aliases: + - /2022/07/on-to-the-future-with-powershell/ +--- + +When I started my 5 Painless Steps Powershell learning series. It was a smashing success. I was hoping a few dozen people would find it useful. It was viewed by over 2500 people in the first month. Yikes! + +The point of the series was specifically to bring more Ops to devops. Learning to program can be daunting and takes a dedication of time. The thing to realize, in my opinion, is that the 5 steps I presented can be applied and learned in any language. Most of the commands are just slight variations from one to the other as well. For instance, some languages use elseif, others else if. There are 2 trains of thought for the for loop, the (init, test, increment) model Powershell uses and the for/next model ($x = 1 to 100) used in basic. + +Once the language has been abstracted and is fundamentally interchangeable with any other language, it becomes a framework for shuttling and mutating data. The sources of the data are the exciting pieces to me. We have all kinds of monolithic repositories of environmental information for each of our businesses. Knowing how to program allows us to answer the needs we identify in our worlds. I call them the "wouldn't it be nice if I had..." solutions. + +**Wouldn't it be nice** **if** I could adjust the amount of hard drive space allocated to a backup server in azure based on time of day to allow for the extra space needed for compression while reducing cost over all by lowering classification of the server once the archival is completed. + +**Wouldn't it be nice** **if** I could analyze the resource usage over time to figure out when I need to add cores to a server during the day and scale it dynamically. + +**Wouldn't it be nice** **if** my environment would auto document itself. None of the off the shelf software accounts for this one odd thing we do. + +**Wouldn't it be nice if** ... fill in your need here. + + + +This is DevOps. As operations technicians, server admins, and/or customer support persons, we have a head full of processes and environmental states that inform the decisions we make day to day. Knowing how to code allows us to build those decision trees using that same data we'd look at from disparate silos of information. Having those decision trees can then be turned into actions based on the outcomes. Those actions can move us toward "click here" administration to an environment which can react to usage and need dynamically. + +If we start using historical data, we can even enter the "big data" realm and let our code perform our RCA discovery tasks for us... potentially even auto remediating found cases in the future. This is where we move into the realm of machine learning. It's not a large leap either. I just got there in 2 paragraphs. All we need to do is remember the simple phrase: EVERYTHING IS POSSIBLE THROUGH CODE. + +Any "Wouldn't it be nice" moments we have are answered by that phrase. When asked if you can make something happen, yes can always be the answer. It'll be tempered by the time and effort required but there's always a solution to whatever specific task you're being asked to explore. + +I have 5 posts that I'll be making shortly that are the "Powershell in 5 Painless Steps" series.  I'll add the links at the bottom here as I get them converted to this blogging platform.  I wrote them while I was working at Beyond Impact 2.0, LLC.  I'm now with another MSP, Netgain Technologies, Inc. and still use Powershell every single day to make my job easier and more effective. + +[Step 1: Storage][1] +[Step 2: Output][2] +[Step 3: Input][3] +[Step 4: Loops][4] +[Step 5: Decisions][5] + + [1]: https://powershell.org/?p=294975&preview=true + [2]: https://powershell.org/?p=294977&preview=true + [3]: https://powershell.org/?p=294979&preview=true + [4]: https://powershell.org/?p=294981&preview=true + [5]: https://powershell.org/?p=294983&preview=true diff --git a/content/articles/2022/11/_index.md b/content/articles/2022/11/_index.md new file mode 100644 index 000000000..c8a1dc1d2 --- /dev/null +++ b/content/articles/2022/11/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from November 2022" +description: "PowerShell.org Articles published in November 2022." +--- diff --git a/content/articles/2022/11/powershell-devops-global-summit-2023/index.md b/content/articles/2022/11/powershell-devops-global-summit-2023/index.md new file mode 100644 index 000000000..e7735e957 --- /dev/null +++ b/content/articles/2022/11/powershell-devops-global-summit-2023/index.md @@ -0,0 +1,33 @@ +--- +url: /articles/2022-11-30-powershell-devops-global-summit-2023/ +title: PowerShell + DevOps Global Summit 2023 +authors: + - James Petty +date: "2022-11-30T14:38:05+00:00" +categories: + - Announcements + - Events + - PowerShell Summit +tags: + - PowerShell Summit +aliases: + - /2022/11/powershell-devops-global-summit-2023/ +--- + +## Summit Information + +**What:** 2023 PowerShell + DevOps Global Summit + +**Where:** Marriott Downtown Bellevue WA + +**When:** April 24-27, 2023 + +## Dates to Remember + +- **1 - Jan** — Early Bird sales will end +- **15 - Dec** — The content committee will notify speakers no later than 15-December on if their sessions were selected. +- **2 - Jan** — Fill Schedule will go live 2-January + +There is more information available at the event website including + +Links to buy Tickets and our FAQ page diff --git a/content/articles/2022/_index.md b/content/articles/2022/_index.md new file mode 100644 index 000000000..73d9a3d49 --- /dev/null +++ b/content/articles/2022/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from 2022" +description: "PowerShell.org Articles published in 2022." +--- diff --git a/content/articles/2023-02-17-powershell-summit-then-now.md b/content/articles/2023-02-17-powershell-summit-then-now.md deleted file mode 100644 index c15a21cd4..000000000 --- a/content/articles/2023-02-17-powershell-summit-then-now.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: PowerShell Summit! Then and Now -authors: - - James Petty -date: "2023-02-17T20:44:21+00:00" -categories: - - Announcements - - Events - - PowerShell Summit -tags: - - PowerShell Summit - - Community -legacy_featured_image: /wp-content/uploads/2022/11/Summit_Long_NoYeardefault-e1669819303622.png -aliases: - - /2023/02/powershell-summit-then-now/ ---- - -## [March 1, 2023 11am Pacific Standard Time](https://twitch.tv/devopsorg) - -Join Don Jones and James Petty as they discuss the history of the PowerShell Summit. How it started and why it almost didn't happen. - -How has the summit evolved over the years? - -James will then talk about the 2023 PowerShell + DevOps Global Summit (which by the way is taking place April 24-27 in case you haven't heard). And James will give a few sprinkles of information about the 2024 show! - -We will be live on twitch and will try to answer as many questions as we can in the time we have available. - -[Join us on Twitch](https://twitch.tv/devopsorg) diff --git a/content/articles/2023-05-23-powershell-devops-global-summit-2024.md b/content/articles/2023-05-23-powershell-devops-global-summit-2024.md deleted file mode 100644 index fb87e4646..000000000 --- a/content/articles/2023-05-23-powershell-devops-global-summit-2024.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: PowerShell + DevOps Global Summit 2024 -authors: - - James Petty -date: "2023-05-23T21:52:47+00:00" -categories: - - Announcements - - Events - - PowerShell Summit -tags: - - PowerShell Summit -legacy_featured_image: /wp-content/uploads/2023/05/2AE737C6-868E-44BD-8A15-97A587C7E8A7.jpg -aliases: - - /2023/05/powershell-devops-global-summit-2024/ ---- - -We have had a lot of questions regarding the dates and location for the 2024 edition of the PowerShell + DevOps Global Summit. The team has been working hard to ensure we deliver the best possible experience for our attendees. We are pleased to return to Bellevue, WA, April 8-11, 2024, to the beautiful ***Meydenbauer Center*** and our new partner hotel, the ***Courtyard by Marriott.*** - -Some of you may remember the Courtyard from previous years. The hotel has undergone extensive renovations since our last visit and is a short 5 min walk to the Meydenbauer Center. Visit the event [website](https://powershellsummit.org) and follow us on [Twitter](https://twitter.com/pshsummit) and [LinkedIn](https://www.linkedin.com/company/the-devops-collective) for the most up-to-date information. - -### When - -April 8-11, 2024 - -### Where - -Meydenbauer Center - -### Hotel - -Courtyard by Marriott Bellevue - -We will also be posting various on our social media accounts throughout the year asking questions about what you would like to see at Summit as well. - -We are always looking for volunteers to help plan and produce the event. If this is of interest to you fill out [this form][1] and let us know. - - [1]: https://forms.office.com/Pages/ResponsePage.aspx?id=11EApwjKOUO63m1xCi_2FuDegRwcZUJGp8jj-CjdL3xUQVRaRzRCWjZNQkFPNjFXWlFGM0JQSkwzVS4u diff --git a/content/articles/2023-09-15-microsoft-graph-powershell-module-getting-started-guide.md b/content/articles/2023-09-15-microsoft-graph-powershell-module-getting-started-guide.md deleted file mode 100644 index aa603db76..000000000 --- a/content/articles/2023-09-15-microsoft-graph-powershell-module-getting-started-guide.md +++ /dev/null @@ -1,202 +0,0 @@ ---- -title: "Microsoft Graph PowerShell Module: Getting Started Guide" -authors: - - James Petty -date: "2023-09-15T16:21:15+00:00" -categories: - - Graph - - PowerShell for Admins -tags: - - Microsoft Graph - - Microsoft 365 - - Modules - - Tutorial -aliases: - - /2023/09/microsoft-graph-powershell-module-getting-started-guide/ ---- - -# Microsoft Graph PowerShell Module: Getting Started Guide - -by Jeff Brown - -Microsoft is retiring the Azure AD Graph API sometime after June 30, 2023 ([announcement][1]). This retirement includes the Azure AD PowerShell module. In its place, Microsoft has released the Microsoft Graph PowerShell module. The Microsoft Graph PowerShell module is the next-generation way of managing Microsoft cloud services using PowerShell. If you have used MSOnline or Azure AD PowerShell in the past, you'll need to read on to learn about this new module. - -In this tutorial, you will learn about the Microsoft Graph module, including how to authenticate, find cmdlet permissions, and upgrade from Azure AD PowerShell. To follow along with this tutorial, you will need either Windows PowerShell 5.1 or PowerShell 7. This tutorial uses PowerShell version 7.3.4. - -## What is Microsoft Graph? - -Microsoft Graph is the entry point to all things Microsoft 365 and Azure. Microsoft Graph exposes REST APIs and client libraries so you can access data and manage resources in Microsoft 365, Enterprise Mobility + Security, and Dynamics 365. The Microsoft Graph API has a single endpoint () that enables you to access data and build apps supporting any business need. - -> **Related: [Jeff Brown Tech | Getting Started with Graph API][2]** - -Some common uses for accessing Microsoft Graph include: - - * Managing user accounts and licenses - * Viewing and accessing files in OneDrive - * Reading Outlook e-mail and calendar events - * Managing Intune devices - -If you are new to REST APIs or just the Microsoft Graph, you can use Graph Explorer to try out different commands, including viewing your profile, managing groups, or working with Microsoft Teams. You can explore the sample tenant data or sign in to your Microsoft 365 account to view personalized responses. - -Try out the Graph Explorer: - - 1. Navigate to . - 2. Select a pre-built query from the left menu, such as **GET my profile**. - 3. Next, review the generated URL endpoint (). - 4. Select the **Run query** button, then view the results under **Response preview**. You can make HTTP requests to Microsoft Graph to view and manage data like this! - -![Graph Explorer example](https://powershell.org/wp-content/uploads/2023/09/graph_explorer_example-300x126.png) - -## Microsoft Graph PowerShell Module - -Cloud administrators have used the MSOnline and Azure AD PowerShell modules for managing Azure AD for years. The retirement of the Azure AD Graph API means Microsoft is also retiring those modules. The Microsoft Graph PowerShell module replaces the Azure AD PowerShell and MSOnline modules. The module is an API wrapper for accessing Microsoft Graph. The module contains cmdlets that interact with the Graph API using native PowerShell syntax. You don't have to worry about generating URLs or crafting search syntax; that is all included in the PowerShell commands. - -Some features and benefits of the new modules are: - - * Besides managing Azure AD, you can access other APIs, such as SharePoint, Exchange, Teams, and Outlook using a single endpoint. - * Microsoft Graph PowerShell supports both Windows PowerShell 5.1 and PowerShell 7 (the Azure AD PowerShell module only supports Windows PowerShell 5.1). - * The module works on multiple platforms, including Windows, macOS, and Linux. - * Modern authentication support. - * Open source with regular updates to support the latest Graph API changes. - -### Installation - -To install the module on PowerShell 7, use the `Install-Module`command, specifying the`Name`of the module (`Microsoft.Graph`), and select a`Scope`for installation (`CurrentUser`or`AllUsers`). - - -`powershell -# Install for current user -Install-Module -Name Microsoft.Graph -Scope CurrentUser - -# Install for all users -Install-Module -Name Microsoft.Graph -Scope AllUsers -`### API Version - -By default, the module uses the Microsoft Graph REST API v1.0. You can also experiment with commands in the beta version by switching your API version. Use `Select-MgProfile`with the`Name`parameter to target the`Beta`version. If you want to switch batch to using v1.0 API commands, use`v1.0`for the`Name`parameter. - - -`powershell -# Switch to Beta -Select-MgProfile -Name Beta - -# Switch to v1.0 -Select-MgProfile -Name v1.0 -`## Microsoft Graph PowerShell Authentication Types - -The Graph PowerShell module supports two types of authentication: delegated and app-only. The following sections will explain the differences, and the remainder of this tutorial will focus on using delegated access. - -### Delegated access - -Delegated access is when an application acts on behalf of a signed-in user. For example, you sign into an application, and the application calls the Microsoft Graph on your behalf. Both you and the application must be authorized to make requests to Microsoft Graph. - -Delegated access requires delegated permissions, also known as scopes. Scopes represent the operations the application can perform on behalf of a user. You will see how scopes come into play later in this tutorial when you connect to the Microsoft Graph using PowerShell. - -### App-only access - -App-only access involves an application or service accessing Microsoft Graph without a signed-in user account. The application obtains an access token that includes information on what the application is authorized to access in the Microsoft Graph. An application calls the Microsoft Graph when assigned application permissions (or app roles) or when the application is an owner of the resources it needs to manage. - -To use app-only access: - - 1. Register an app with Azure AD. - 2. Configure applicable Microsoft Graph permissions for the app. - 3. Have an administrator grant the permissions. - 4. Code the app to request an access token. - 5. Use the access token and HTTP requests to call Microsoft Graph. - -For more information on using app-only access, check out the Microsoft Learn article [Get access without a user][3]. - -## Authenticating to Microsoft Graph - -The remainder of this tutorial focuses on connecting to Microsoft Graph using delegated access. There are three ways to connect with delegated access using the `Connect-MgGraph`command. - - * **Interactive authentication:** A browser opens to authenticate to your tenant. - -`powershell -Connect-MgGraph -`* **Device authentication:** Navigate to a URL and enter a device code to authenticate. - -`powershell -Connect-MgGraph -UseDeviceAuthentication -`* **Access token:** Authenticate using your own access token. - -`powershell -Connect-MgGraph -AccessToken $AccessToken -`After authentication, if this is your first time connecting to Microsoft Graph using PowerShell, a permission request window will appear. This prompt authorizes the Microsoft Graph Command Line Tools to act on your behalf. If you want to consent on behalf of your organization, check the box; otherwise, leave it unchecked and click **Accept**. - -![Microsoft Graph permissions request](https://powershell.org/wp-content/uploads/2023/09/graph_permissions_request.png) - -Once connected, PowerShell displays a **Welcome to Microsoft Graph!** message. - -![Microsoft Graph connection](https://powershell.org/wp-content/uploads/2023/09/welcome_message.png) - -### Understanding scopes - -Once connected, try running any command, such as **Get-MgUser**. This command should display user accounts in your tenant. However, you might be presented with an error message about insufficient privileges to complete the operation, like this: - -![Microsoft Graph insufficient privileges](https://powershell.org/wp-content/uploads/2023/09/insufficient_privileges_error.png) - -When connecting to Microsoft Graph using interactive or device code authentication, you must specify the permission scopes required during your session. Remember from earlier that scopes are the permissions the application performs on your behalf. With the Microsoft Graph PowerShell SDK, you specify what permissions you are granting it to carry out the commands. - -You can view existing scopes for a session using `Get-MgContext`and viewing the`Scopes`property. In this example, the current context includes`openid, profile, User.Read, email`. - -![Microsoft Graph context scopes](./mgcontext_scopes.png) - -### Finding command scopes - -Now that you know you need to specify scopes in your connection, how do you find the necessary scopes for each command? You use the `Find-MgGraphCommand`and specify the`Command`parameter. Optionally, you can specify which`ApiVersion`you are using (currently`v1.0`or`beta`). - -To view permissions more easily, pipe the results and expand just the `Permissions`property. Next, select just unique values for the permission`Name`property. Here are the command and results for finding permissions for`Get-MgUser`. - - -`powershell -Find-MgGraphCommand -Command "Get-MgUser" | - Select-Object -ExpandProperty Permissions | - Select-Object -Unique Name -`![Find Microsoft Graph command permissions](https://powershell.org/wp-content/uploads/2023/09/find_permissions_1.png) - -Many permissions allow you to list users; however, you don't have to specify every single one in your connect command. Choose one that makes the most sense. In this example, since you are getting information about user accounts, the `User.Read.All`scope seems most appropriate. - -### Adding scopes to the connection - -Re-run the `Connect-MgGraph`command again, this time using the`Scopes`parameter with a value of`User.Read.All`. You will repeat the authentication and permission process from earlier. - - -`powershell -Connect-MgGraph -Scopes 'User.Read.All' -`Re-running the `Get-MgUser`should now return a list of user accounts in your environment. This command works because you allowed the application to use the`User.Read.All`permission on your behalf. - -As a bonus, re-run the `Get-MgContext`command and view the additional scope (hint: you may need to expand the`Scopes`property to view all the entries). You should see the`User.Read.All`scope added to your context. - -As a challenge, say you want to update a user's display name using the `Update-MgUser`command. Use the previous steps to find and add the additional permission scopes to your connection. - -To view all available application and delegated permissions, check out the [Microsoft Graph permissions reference][4] article at Microsoft Learn. - -### Disconnecting from Microsoft Graph - -Use the `Disconnect-MgGraph`command to disconnect from Microsoft Graph. Do note that`Disconnect-MgGraph`does not remove your scopes. The scopes added are included in your connection the next time you run`Connect-MgGraph`so you don't have to specify them again. - -## Upgrade from Azure AD PowerShell - -As previously mentioned, Microsoft is retiring the Azure AD, Azure AD Preview, and MSOnline PowerShell modules. The new Microsoft Graph PowerShell module replaces these modules for managing Azure AD and provides cmdlets for interacting with other Microsoft services. - -If you have existing scripts, functions, or modules using the retiring modules, you need to review and document the commands and parameters you are using in them. Start with simpler scripts with lower business impact while developing a migration process. You will also need to determine if you need delegated or app-only access for authentication. - -Microsoft provides documentation that maps cmdlets from Azure AD and MSOnline modules to the new Microsoft Graph module. Review the article at Microsoft Learn titled [Find Azure AD and MSOnline cmdlets in Microsoft Graph PowerShell][5] for more information. - -## Summary - -The Microsoft Graph PowerShell module is a powerful tool for managing not only Azure AD but many other Microsoft cloud services. You learned about installing the new module and the different authentication methods. Connecting to Microsoft Graph using PowerShell also requires defining your scoped permissions, and you learned how to find those scopes. - -Additional reading about working with the new Microsoft Graph PowerShell module is below. Good luck and happy scripting! - -[Microsoft Learn | Authentication module cmdlets in Microsoft Graph PowerShell][6] - -[Microsoft Learn | Upgrade from Azure AD PowerShell to Microsoft Graph PowerShell][7] - - [1]: https://techcommunity.microsoft.com/t5/microsoft-entra-azure-ad-blog/azure-ad-change-management-simplified/ba-p/2967456 - [2]: https://jeffbrown.tech/getting-started-with-microsoft-teams-and-graph-api/ - [3]: https://learn.microsoft.com/graph/auth-v2-service - [4]: https://learn.microsoft.com/graph/permissions-reference - [5]: https://learn.microsoft.com/powershell/microsoftgraph/azuread-msoline-cmdlet-map - [6]: https://learn.microsoft.com/powershell/microsoftgraph/authentication-commands - [7]: https://learn.microsoft.com/powershell/microsoftgraph/migration-steps diff --git a/content/articles/2023-09-15-powershell-escape-room.md b/content/articles/2023-09-15-powershell-escape-room.md deleted file mode 100644 index 56710288a..000000000 --- a/content/articles/2023-09-15-powershell-escape-room.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: PowerShell Escape Room -authors: - - James Petty -date: "2023-09-15T16:42:26+00:00" -categories: - - DevOps - - PowerShell for Admins -tags: - - Fun - - Projects -aliases: - - /2023/09/powershell-escape-room/ ---- - -# PowerShell Escape Room by Michiel Hamers - -by Michiel Hamers - - -## Why on earth you want to create an Escape Room with PowerShell as backend? - -I've always been a fan of escape rooms, so I decided to create my own for my kids. I wanted to make it something that would be challenging and fun for them, but also educational. I decided to use PowerShell as the backend for the escape room, as I'm a PowerShell developer and I thought it would be a great way to learn more about the language. -The first step was to design the rooms. I wanted to make sure that there were a variety of puzzles and challenges that my kids would have to solve. I also wanted to make sure that the rooms were visually appealing and engaging. Once I had the rooms designed, I started building them. -I used a variety of materials to build the rooms, including wood, cardboard, and fabric. I also used a few electronic components, such as a USB extension cable with a switch and a 3-button keyboard. The USB extension cable with a switch was used to create a physical button that my kids could press to solve one of the puzzles. The 3-button keyboard was used to enter the code that my kids had to find to solve another puzzle. -I also used a few websites to create rebus puzzles that my kids had to solve. I printed out the rebus puzzles and placed them around the rooms. Once my kids had solved all of the puzzles, they were able to enter the code on a single screen to escape the room. -In this blog post, we'll delve into the process of creating an engaging PowerShell escape room for the global PowerShell community. We'll emphasize the significance of storytelling and provide a detailed breakdown of the PowerShell structure used for the escape room. - -## The Power of Storytelling: - -"Story is everything." This principle underpins the foundation of a successful escape room. Crafting an engaging and immersive story is crucial to captivate the participants and provide them with a memorable experience. For the PowerShell escape room, we'll design a narrative that centers around a critical mission, where participants must apply their PowerShell skills to overcome a series of challenges. - -## The PowerShell Escape Room Structure: - - 1. The Controller - A Hub of Configuration: At the core of the escape room lies the "controller" PowerShell script. Acting as a central hub, this script offers menu options to configure various aspects of the escape room. From the number of rooms to the puzzles in each room and available hints, the controller script dynamically generates JSON files for each screen. - 2. The Screen Scripts - Immersive Interaction: To create an interactive environment, individual PowerShell scripts are designated for each screen within the setup. Approximately nine screens are utilized, each responsible for a unique role. Upon startup, the screen script prompts the user to enter a screen number, enabling customized content based on the corresponding JSON configuration. - 3. JSON Files for Puzzle Management: The puzzles, solutions, and hints are efficiently managed using JSON files. Quest files house the puzzles or rebus challenges, while hints are stored in separate JSON files, indicating the puzzle they refer to and the number of times they can be accessed. - 4. Game State Management: To monitor the progress of the players and provide a seamless experience, a game state JSON file is employed. It keeps track of the number of completed rooms, solved puzzles, and hints used by the players. By resetting to a default template, the game state is restored whenever a reset is initiated. - 5. Physical and Virtual Elements: To cater to a global audience, we'll blend physical and virtual elements in the escape room. Participants can interact with the virtual challenges via an online platform while engaging with tangible components, such as specially designed 3-key keyboards, for input on certain screens. - -## Conclusion: - -Creating the PowerShell escape room for my kids was an incredibly rewarding experience. As a PowerShell developer, I wanted to share my passion for the language in a fun and educational way. Watching my kids immerse themselves in the challenges, applying their problem-solving skills and learning more about PowerShell, filled me with joy. -If you're considering creating your own PowerShell escape room, here are a few tips based on my experience: - - 1. Make sure that the puzzles are both challenging and enjoyable, with an educational twist to enhance the learning experience. - 2. Utilize a variety of materials to build the rooms, creating visually appealing and immersive environments. - 3. Incorporate electronic components to add an interactive dimension to the escape room, making it even more engaging. - 4. Explore websites to craft intriguing rebus puzzles that will intrigue and challenge your participants. - 5. Print out the rebus puzzles and strategically place them around the rooms to ensure an exciting and dynamic gameplay. - 6. Ensure that the code or answers your participants need to progress are cleverly hidden yet not overly difficult to find. - Lastly, I'm eager to connect with fellow enthusiasts who have also ventured into the world of PowerShell escape rooms or any other unique application of PowerShell. Let's share our experiences, ideas, and insights to create more thrilling adventures that celebrate our love for PowerShell and foster a strong community of like-minded individuals. - -Together, let's continue exploring the endless possibilities of PowerShell and inspire others to embrace its power and potential. -![file](https://powershell.org/wp-content/uploads/2023/09/image-1694796121959.png) diff --git a/content/articles/2023-10-01-the-powershell-devops-global-summit-cfp-is-open.md b/content/articles/2023-10-01-the-powershell-devops-global-summit-cfp-is-open.md deleted file mode 100644 index 3311ba86f..000000000 --- a/content/articles/2023-10-01-the-powershell-devops-global-summit-cfp-is-open.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: The PowerShell + DevOps Global Summit CFP is OPEN -authors: - - James Petty -date: "2023-10-01T13:00:56+00:00" -categories: - - PowerShell Summit -tags: - - PowerShell Summit - - Call for Speakers -aliases: - - /2023/10/the-powershell-devops-global-summit-cfp-is-open/ ---- - -# Call for Papers Now Open: Join the PowerShell + DevOps Global Summit 2024! - -Are you a PowerShell enthusiast or a DevOps aficionado with a wealth of knowledge to share? Do you have insights, tips, or innovative solutions that can empower others in the field? If so, we have fantastic news for you! The Call for Papers is now officially open for the 2024 PowerShell + DevOps Global Summit. - -## Why You Should Submit Your Proposal - -The PowerShell + DevOps Global Summit is the premier event for IT professionals, sysadmins, and DevOps practitioners who want to deepen their understanding of PowerShell and DevOps practices. Whether you're an experienced speaker or new to presenting, this is your opportunity to showcase your expertise, engage with a passionate community, and contribute to the growth of PowerShell and DevOps knowledge worldwide. - -### Here is why you should consider submitting your proposal: - -**Share Your Knowledge:** The summit is the perfect platform to share your expertise and insights with a global audience. Whether you're a PowerShell scripting guru, a DevOps architect, or have a unique perspective to offer, your knowledge is valuable. - -**Network with Experts:** Connect with fellow professionals, experts, and enthusiasts who share your passion for PowerShell and DevOps. Forge new relationships and gain valuable insights into the latest industry trends. - -**Boost Your Profile:** Speaking at the summit elevates your professional profile. It's an excellent opportunity to enhance your career and reputation as a thought leader in the field. - -**Contribute to the Community:** Help others in the PowerShell and DevOps community by providing valuable information, best practices, and practical solutions to common challenges. - -## What We are Looking For - -We're seeking diverse and engaging sessions that cater to the interests and needs of our attendees. Whether you have a compelling case study, a deep dive into a technical topic, or an interactive workshop, we want to hear from you. Here's what we're looking for: - -**45-Minute Sessions:** These sessions should be informative, engaging, and well-structured. They can cover a wide range of topics related to PowerShell and DevOps, from beginner to advanced levels. - -**90-Minute Deep Dive Sessions:** Dive deep into a specific topic, explore advanced concepts, and provide in-depth insights. Deep dive sessions should be packed with actionable takeaways for attendees. - -**Half-Day Workshops:** If you have a hands-on workshop that can empower attendees with practical skills, we encourage you to submit it. Workshops should be interactive and allow participants to gain hands-on experience. - -## How to Submit Your Proposal - -Submitting your proposal is easy! [Visit the PowerShell + DevOps Global Summit website to access the submission portal][1]. You'll be prompted to provide details about your proposed session, and any supporting materials. Be sure to include a catchy title and a concise but informative abstract that clearly outlines what attendees can expect to learn. - -## Important Dates - -Call for Papers Opens: October 1, 2023 -Call for Papers Closes: November 15, 2023 -Speaker Notifications: December 15, 2023 -PowerShell + DevOps Global Summit 2024: April 8-11, 2024 -Don't miss this opportunity to be a part of the PowerShell + DevOps Global Summit 2024. Submit your proposal, and together, we can contribute to the growth and success of the PowerShell and DevOps community. We look forward to seeing you there! - - [1]: https://sessionize.com/pshsummit24/ diff --git a/content/articles/2023-11-20-earlybirdnowopen.md b/content/articles/2023-11-20-earlybirdnowopen.md deleted file mode 100644 index 6c6565f4e..000000000 --- a/content/articles/2023-11-20-earlybirdnowopen.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Early Bird Tickets Now on Sale -authors: - - James Petty -date: "2023-11-20T21:32:12+00:00" -categories: - - PowerShell Summit -tags: - - PowerShell Summit - - Tickets -aliases: - - /2023/11/earlybirdnowopen/ ---- - -**Unlock Your PowerShell Potential: PowerShell + DevOps Global Summit Tickets Now on Sale!** - -Are you ready to elevate your PowerShell and DevOps skills to new heights? The wait is over! Tickets for the highly anticipated [PowerShell + DevOps Global Summit are now on sale][1], and you won't want to miss out on the early bird pricing of **$1799 USD** (originally $1999 USD). Seize the opportunity to enhance your expertise and join the global community at this must-attend event. - -**Early Bird Special: Act Now and Save!** - -For a limited time, take advantage of the exclusive early bird pricing to secure your spot at the PowerShell + DevOps Global Summit. Priced at just $1799 USD (down from the regular price of $1999 USD), this offer is your ticket to a world-class learning experience that will empower you with the latest insights, skills, and best practices in PowerShell and DevOps. - -Don't wait—this special pricing won't last forever. Early bird tickets are available for a limited time only, so act fast to lock in your savings. Investing in your professional development has never been more accessible! - -**What to Expect at the Summit:** - -The PowerShell + DevOps Global Summit is renowned for its rich content, engaging speakers, and unparalleled networking opportunities. Here's a glimpse of what you can expect: - - 1. **Expert-Led Sessions:** Learn from the best in the industry as renowned experts share their insights and real-world experiences. From foundational concepts to advanced techniques, the summit covers a broad spectrum of topics to cater to all skill levels. - - 2. **Networking Opportunities:** Connect with like-minded professionals, industry leaders, and experts from around the world. Forge valuable connections, share experiences, and collaborate with peers who are passionate about PowerShell and DevOps. - - 3. **Meet our Sponsors:** Explore the latest tools, technologies, and services as you talk with engineers from our dedicated sponsors. Engage with sponsors, discover innovative solutions, and stay up-to-date with the latest trends shaping the industry. - - 4. **Community Spirit:** Immerse yourself in the vibrant PowerShell and DevOps community. Share ideas, ask questions, and participate in discussions that will broaden your perspective and contribute to your professional growth. - -**Why Attend?** - -Attending the PowerShell + DevOps Global Summit is not just about acquiring technical skills; it's about investing in your career and staying at the forefront of industry trends. Here's why you should be there: - - 1. **Stay Updated:** Keep pace with the latest advancements in PowerShell and DevOps. Gain insights into emerging technologies and industry best practices that will keep you ahead of the curve. - - 2. **Professional Growth:** Acquire new skills, refine existing ones, and broaden your expertise. The knowledge gained at the summit can significantly impact your career trajectory and open doors to exciting opportunities. - - 3. **Community Engagement:** Connect with a diverse and passionate community of professionals who share your interests. The relationships formed at the summit can lead to collaborations, mentorships, and lifelong connections. - - 4. **Inspiration:** Immerse yourself in an environment where innovation and creativity thrive. The summit is designed to inspire you to think differently, solve problems more effectively, and approach your work with fresh perspectives. - -**Act Fast – Limited Tickets Available!** - -Given the overwhelming success of previous summits, we anticipate a sell-out event this year. Secure your spot now and take advantage of the early bird pricing before it's too late. Don't miss out on this unique opportunity to elevate your skills, connect with industry experts, and be a part of the global PowerShell and DevOps community. - -Visit our [official summit website][2] to reserve your spot and join us for an unforgettable learning experience. The PowerShell + DevOps Global Summit is where knowledge meets innovation, and your journey towards mastery begins. - -See you there! - - [1]: https://www.powershellsummit.org/ "PowerShell + DevOps Global Summit are now on sale" - [2]: https://powershellsummit.org diff --git a/content/articles/2023-11-29-onramp2024-program-unveiled.md b/content/articles/2023-11-29-onramp2024-program-unveiled.md deleted file mode 100644 index 7891e9a6e..000000000 --- a/content/articles/2023-11-29-onramp2024-program-unveiled.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: OnRamp2024 Program Unveiled -authors: - - James Petty -date: "2023-11-29T15:03:16+00:00" -categories: - - Announcements - - DevOps - - Events -tags: - - OnRamp - - PowerShell Summit -legacy_featured_image: /wp-content/uploads/2022/11/Summit_Long_NoYeardefault-e1669819303622.png -aliases: - - /2023/11/onramp2024-program-unveiled/ ---- - -# Navigating the Path to Proficiency: PowerShell + DevOps OnRamp2024 Program Unveiled - -## Introduction - -The PowerShell + DevOps Global Summit proudly announces the OnRamp Program for 2024 to foster inclusivity and provide opportunities for aspiring IT professionals. This initiative is designed to be a bridge for those looking to enter the PowerShell and DevOps arena, offering a guided onboarding experience that aims to empower individuals with the skills and knowledge needed to thrive in this dynamic industry. As a testament to their commitment to diversity and accessibility, the PowerShell Summit offers scholarships, ensuring financial constraints do not hinder passionate learners from participating. - -Unlocking Opportunities with OnRamp: - -The OnRamp Program is a unique offering that caters to individuals who may be new to PowerShell and DevOps or want to expand their existing skill set. This specialized track within the Summit is crafted to provide a structured learning experience, covering foundational concepts and practical skills that serve as a solid onramp into the world of PowerShell automation and DevOps practices. - -## Key Highlights of the OnRamp Program: - - 1. **Structured Curriculum:** Participants in the OnRamp Program can expect a carefully curated curriculum that covers the essentials of PowerShell scripting and DevOps methodologies. From basic scripting techniques to understanding the principles of continuous integration and deployment, the program aims to equip attendees with a well-rounded skill set. - - 2. **Hands-On Workshops:** - Learning by doing is a crucial aspect of the OnRamp Program. Hands-on workshops will be integrated into the curriculum, providing participants with practical experience and the opportunity to apply the concepts they learn in a real-world context. - - 3. **Mentorship Opportunities:** - The OnRamp Program will feature mentorship opportunities to enhance the learning journey further. Experienced PowerShell and DevOps community professionals will guide participants, offering insights, advice, and personalized support as they enter the field. - -## Scholarship Opportunities - -Understanding that financial barriers can sometimes impede eager learners from joining such programs, the PowerShell + DevOps Global Summit has opened scholarship applications. Scholarships are targeted towards deserving individuals, regardless of financial constraints, so they may have the chance to participate in the OnRamp Program and benefit from the wealth of knowledge the Summit has to offer. - -### How to Apply - -The scholarship application process is straightforward. Interested individuals can visit the [Official Summit Website][1], where they will find detailed information about the application requirements and submission process. The application period is open now, providing ample time for prospective participants to put forth their case for consideration. - -## Conclusion - -The OnRamp Program at the PowerShell + DevOps Global Summit represents a significant step towards fostering inclusivity and creating pathways for individuals eager to explore the realms of PowerShell scripting and DevOps practices. With a carefully structured curriculum, hands-on workshops, and mentorship opportunities, this program promises to be a transformative experience for participants. If you are passionate about PowerShell and DevOps but face financial constraints, take advantage of the scholarship application window and embark on a journey that could redefine your professional trajectory. The OnRamp Program is not just an educational initiative; it's an invitation to unlock new possibilities and chart a course toward success in the ever-evolving landscape of PowerShell and DevOps. - - [1]: https://powershellsummit.org diff --git a/content/articles/2023/02/_index.md b/content/articles/2023/02/_index.md new file mode 100644 index 000000000..74ae0cb3d --- /dev/null +++ b/content/articles/2023/02/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from February 2023" +description: "PowerShell.org Articles published in February 2023." +--- diff --git a/content/articles/2023/02/powershell-summit-then-now/index.md b/content/articles/2023/02/powershell-summit-then-now/index.md new file mode 100644 index 000000000..301e8f18d --- /dev/null +++ b/content/articles/2023/02/powershell-summit-then-now/index.md @@ -0,0 +1,29 @@ +--- +url: /articles/2023-02-17-powershell-summit-then-now/ +title: PowerShell Summit! Then and Now +authors: + - James Petty +date: "2023-02-17T20:44:21+00:00" +categories: + - Announcements + - Events + - PowerShell Summit +tags: + - PowerShell Summit + - Community +legacy_featured_image: /wp-content/uploads/2022/11/Summit_Long_NoYeardefault-e1669819303622.png +aliases: + - /2023/02/powershell-summit-then-now/ +--- + +## [March 1, 2023 11am Pacific Standard Time](https://twitch.tv/devopsorg) + +Join Don Jones and James Petty as they discuss the history of the PowerShell Summit. How it started and why it almost didn't happen. + +How has the summit evolved over the years? + +James will then talk about the 2023 PowerShell + DevOps Global Summit (which by the way is taking place April 24-27 in case you haven't heard). And James will give a few sprinkles of information about the 2024 show! + +We will be live on twitch and will try to answer as many questions as we can in the time we have available. + +[Join us on Twitch](https://twitch.tv/devopsorg) diff --git a/content/articles/2023/05/_index.md b/content/articles/2023/05/_index.md new file mode 100644 index 000000000..d02fbd923 --- /dev/null +++ b/content/articles/2023/05/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from May 2023" +description: "PowerShell.org Articles published in May 2023." +--- diff --git a/content/articles/2023/05/powershell-devops-global-summit-2024/index.md b/content/articles/2023/05/powershell-devops-global-summit-2024/index.md new file mode 100644 index 000000000..b73268462 --- /dev/null +++ b/content/articles/2023/05/powershell-devops-global-summit-2024/index.md @@ -0,0 +1,38 @@ +--- +url: /articles/2023-05-23-powershell-devops-global-summit-2024/ +title: PowerShell + DevOps Global Summit 2024 +authors: + - James Petty +date: "2023-05-23T21:52:47+00:00" +categories: + - Announcements + - Events + - PowerShell Summit +tags: + - PowerShell Summit +legacy_featured_image: /wp-content/uploads/2023/05/2AE737C6-868E-44BD-8A15-97A587C7E8A7.jpg +aliases: + - /2023/05/powershell-devops-global-summit-2024/ +--- + +We have had a lot of questions regarding the dates and location for the 2024 edition of the PowerShell + DevOps Global Summit. The team has been working hard to ensure we deliver the best possible experience for our attendees. We are pleased to return to Bellevue, WA, April 8-11, 2024, to the beautiful ***Meydenbauer Center*** and our new partner hotel, the ***Courtyard by Marriott.*** + +Some of you may remember the Courtyard from previous years. The hotel has undergone extensive renovations since our last visit and is a short 5 min walk to the Meydenbauer Center. Visit the event [website](https://powershellsummit.org) and follow us on [Twitter](https://twitter.com/pshsummit) and [LinkedIn](https://www.linkedin.com/company/the-devops-collective) for the most up-to-date information. + +### When + +April 8-11, 2024 + +### Where + +Meydenbauer Center + +### Hotel + +Courtyard by Marriott Bellevue + +We will also be posting various on our social media accounts throughout the year asking questions about what you would like to see at Summit as well. + +We are always looking for volunteers to help plan and produce the event. If this is of interest to you fill out [this form][1] and let us know. + + [1]: https://forms.office.com/Pages/ResponsePage.aspx?id=11EApwjKOUO63m1xCi_2FuDegRwcZUJGp8jj-CjdL3xUQVRaRzRCWjZNQkFPNjFXWlFGM0JQSkwzVS4u diff --git a/content/articles/2023/09/_index.md b/content/articles/2023/09/_index.md new file mode 100644 index 000000000..99d84c54e --- /dev/null +++ b/content/articles/2023/09/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from September 2023" +description: "PowerShell.org Articles published in September 2023." +--- diff --git a/content/articles/2023/09/microsoft-graph-powershell-module-getting-started-guide/index.md b/content/articles/2023/09/microsoft-graph-powershell-module-getting-started-guide/index.md new file mode 100644 index 000000000..764f8e0d1 --- /dev/null +++ b/content/articles/2023/09/microsoft-graph-powershell-module-getting-started-guide/index.md @@ -0,0 +1,203 @@ +--- +url: /articles/2023-09-15-microsoft-graph-powershell-module-getting-started-guide/ +title: "Microsoft Graph PowerShell Module: Getting Started Guide" +authors: + - James Petty +date: "2023-09-15T16:21:15+00:00" +categories: + - Graph + - PowerShell for Admins +tags: + - Microsoft Graph + - Microsoft 365 + - Modules + - Tutorial +aliases: + - /2023/09/microsoft-graph-powershell-module-getting-started-guide/ +--- + +# Microsoft Graph PowerShell Module: Getting Started Guide + +by Jeff Brown + +Microsoft is retiring the Azure AD Graph API sometime after June 30, 2023 ([announcement][1]). This retirement includes the Azure AD PowerShell module. In its place, Microsoft has released the Microsoft Graph PowerShell module. The Microsoft Graph PowerShell module is the next-generation way of managing Microsoft cloud services using PowerShell. If you have used MSOnline or Azure AD PowerShell in the past, you'll need to read on to learn about this new module. + +In this tutorial, you will learn about the Microsoft Graph module, including how to authenticate, find cmdlet permissions, and upgrade from Azure AD PowerShell. To follow along with this tutorial, you will need either Windows PowerShell 5.1 or PowerShell 7. This tutorial uses PowerShell version 7.3.4. + +## What is Microsoft Graph? + +Microsoft Graph is the entry point to all things Microsoft 365 and Azure. Microsoft Graph exposes REST APIs and client libraries so you can access data and manage resources in Microsoft 365, Enterprise Mobility + Security, and Dynamics 365. The Microsoft Graph API has a single endpoint () that enables you to access data and build apps supporting any business need. + +> **Related: [Jeff Brown Tech | Getting Started with Graph API][2]** + +Some common uses for accessing Microsoft Graph include: + + * Managing user accounts and licenses + * Viewing and accessing files in OneDrive + * Reading Outlook e-mail and calendar events + * Managing Intune devices + +If you are new to REST APIs or just the Microsoft Graph, you can use Graph Explorer to try out different commands, including viewing your profile, managing groups, or working with Microsoft Teams. You can explore the sample tenant data or sign in to your Microsoft 365 account to view personalized responses. + +Try out the Graph Explorer: + + 1. Navigate to . + 2. Select a pre-built query from the left menu, such as **GET my profile**. + 3. Next, review the generated URL endpoint (). + 4. Select the **Run query** button, then view the results under **Response preview**. You can make HTTP requests to Microsoft Graph to view and manage data like this! + +![Graph Explorer example](https://powershell.org/wp-content/uploads/2023/09/graph_explorer_example-300x126.png) + +## Microsoft Graph PowerShell Module + +Cloud administrators have used the MSOnline and Azure AD PowerShell modules for managing Azure AD for years. The retirement of the Azure AD Graph API means Microsoft is also retiring those modules. The Microsoft Graph PowerShell module replaces the Azure AD PowerShell and MSOnline modules. The module is an API wrapper for accessing Microsoft Graph. The module contains cmdlets that interact with the Graph API using native PowerShell syntax. You don't have to worry about generating URLs or crafting search syntax; that is all included in the PowerShell commands. + +Some features and benefits of the new modules are: + + * Besides managing Azure AD, you can access other APIs, such as SharePoint, Exchange, Teams, and Outlook using a single endpoint. + * Microsoft Graph PowerShell supports both Windows PowerShell 5.1 and PowerShell 7 (the Azure AD PowerShell module only supports Windows PowerShell 5.1). + * The module works on multiple platforms, including Windows, macOS, and Linux. + * Modern authentication support. + * Open source with regular updates to support the latest Graph API changes. + +### Installation + +To install the module on PowerShell 7, use the `Install-Module`command, specifying the`Name`of the module (`Microsoft.Graph`), and select a`Scope`for installation (`CurrentUser`or`AllUsers`). + + +`powershell +# Install for current user +Install-Module -Name Microsoft.Graph -Scope CurrentUser + +# Install for all users +Install-Module -Name Microsoft.Graph -Scope AllUsers +`### API Version + +By default, the module uses the Microsoft Graph REST API v1.0. You can also experiment with commands in the beta version by switching your API version. Use `Select-MgProfile`with the`Name`parameter to target the`Beta`version. If you want to switch batch to using v1.0 API commands, use`v1.0`for the`Name`parameter. + + +`powershell +# Switch to Beta +Select-MgProfile -Name Beta + +# Switch to v1.0 +Select-MgProfile -Name v1.0 +`## Microsoft Graph PowerShell Authentication Types + +The Graph PowerShell module supports two types of authentication: delegated and app-only. The following sections will explain the differences, and the remainder of this tutorial will focus on using delegated access. + +### Delegated access + +Delegated access is when an application acts on behalf of a signed-in user. For example, you sign into an application, and the application calls the Microsoft Graph on your behalf. Both you and the application must be authorized to make requests to Microsoft Graph. + +Delegated access requires delegated permissions, also known as scopes. Scopes represent the operations the application can perform on behalf of a user. You will see how scopes come into play later in this tutorial when you connect to the Microsoft Graph using PowerShell. + +### App-only access + +App-only access involves an application or service accessing Microsoft Graph without a signed-in user account. The application obtains an access token that includes information on what the application is authorized to access in the Microsoft Graph. An application calls the Microsoft Graph when assigned application permissions (or app roles) or when the application is an owner of the resources it needs to manage. + +To use app-only access: + + 1. Register an app with Azure AD. + 2. Configure applicable Microsoft Graph permissions for the app. + 3. Have an administrator grant the permissions. + 4. Code the app to request an access token. + 5. Use the access token and HTTP requests to call Microsoft Graph. + +For more information on using app-only access, check out the Microsoft Learn article [Get access without a user][3]. + +## Authenticating to Microsoft Graph + +The remainder of this tutorial focuses on connecting to Microsoft Graph using delegated access. There are three ways to connect with delegated access using the `Connect-MgGraph`command. + + * **Interactive authentication:** A browser opens to authenticate to your tenant. + +`powershell +Connect-MgGraph +`* **Device authentication:** Navigate to a URL and enter a device code to authenticate. + +`powershell +Connect-MgGraph -UseDeviceAuthentication +`* **Access token:** Authenticate using your own access token. + +`powershell +Connect-MgGraph -AccessToken $AccessToken +`After authentication, if this is your first time connecting to Microsoft Graph using PowerShell, a permission request window will appear. This prompt authorizes the Microsoft Graph Command Line Tools to act on your behalf. If you want to consent on behalf of your organization, check the box; otherwise, leave it unchecked and click **Accept**. + +![Microsoft Graph permissions request](https://powershell.org/wp-content/uploads/2023/09/graph_permissions_request.png) + +Once connected, PowerShell displays a **Welcome to Microsoft Graph!** message. + +![Microsoft Graph connection](https://powershell.org/wp-content/uploads/2023/09/welcome_message.png) + +### Understanding scopes + +Once connected, try running any command, such as **Get-MgUser**. This command should display user accounts in your tenant. However, you might be presented with an error message about insufficient privileges to complete the operation, like this: + +![Microsoft Graph insufficient privileges](https://powershell.org/wp-content/uploads/2023/09/insufficient_privileges_error.png) + +When connecting to Microsoft Graph using interactive or device code authentication, you must specify the permission scopes required during your session. Remember from earlier that scopes are the permissions the application performs on your behalf. With the Microsoft Graph PowerShell SDK, you specify what permissions you are granting it to carry out the commands. + +You can view existing scopes for a session using `Get-MgContext`and viewing the`Scopes`property. In this example, the current context includes`openid, profile, User.Read, email`. + +![Microsoft Graph context scopes](./mgcontext_scopes.png) + +### Finding command scopes + +Now that you know you need to specify scopes in your connection, how do you find the necessary scopes for each command? You use the `Find-MgGraphCommand`and specify the`Command`parameter. Optionally, you can specify which`ApiVersion`you are using (currently`v1.0`or`beta`). + +To view permissions more easily, pipe the results and expand just the `Permissions`property. Next, select just unique values for the permission`Name`property. Here are the command and results for finding permissions for`Get-MgUser`. + + +`powershell +Find-MgGraphCommand -Command "Get-MgUser" | + Select-Object -ExpandProperty Permissions | + Select-Object -Unique Name +`![Find Microsoft Graph command permissions](https://powershell.org/wp-content/uploads/2023/09/find_permissions_1.png) + +Many permissions allow you to list users; however, you don't have to specify every single one in your connect command. Choose one that makes the most sense. In this example, since you are getting information about user accounts, the `User.Read.All`scope seems most appropriate. + +### Adding scopes to the connection + +Re-run the `Connect-MgGraph`command again, this time using the`Scopes`parameter with a value of`User.Read.All`. You will repeat the authentication and permission process from earlier. + + +`powershell +Connect-MgGraph -Scopes 'User.Read.All' +`Re-running the `Get-MgUser`should now return a list of user accounts in your environment. This command works because you allowed the application to use the`User.Read.All`permission on your behalf. + +As a bonus, re-run the `Get-MgContext`command and view the additional scope (hint: you may need to expand the`Scopes`property to view all the entries). You should see the`User.Read.All`scope added to your context. + +As a challenge, say you want to update a user's display name using the `Update-MgUser`command. Use the previous steps to find and add the additional permission scopes to your connection. + +To view all available application and delegated permissions, check out the [Microsoft Graph permissions reference][4] article at Microsoft Learn. + +### Disconnecting from Microsoft Graph + +Use the `Disconnect-MgGraph`command to disconnect from Microsoft Graph. Do note that`Disconnect-MgGraph`does not remove your scopes. The scopes added are included in your connection the next time you run`Connect-MgGraph`so you don't have to specify them again. + +## Upgrade from Azure AD PowerShell + +As previously mentioned, Microsoft is retiring the Azure AD, Azure AD Preview, and MSOnline PowerShell modules. The new Microsoft Graph PowerShell module replaces these modules for managing Azure AD and provides cmdlets for interacting with other Microsoft services. + +If you have existing scripts, functions, or modules using the retiring modules, you need to review and document the commands and parameters you are using in them. Start with simpler scripts with lower business impact while developing a migration process. You will also need to determine if you need delegated or app-only access for authentication. + +Microsoft provides documentation that maps cmdlets from Azure AD and MSOnline modules to the new Microsoft Graph module. Review the article at Microsoft Learn titled [Find Azure AD and MSOnline cmdlets in Microsoft Graph PowerShell][5] for more information. + +## Summary + +The Microsoft Graph PowerShell module is a powerful tool for managing not only Azure AD but many other Microsoft cloud services. You learned about installing the new module and the different authentication methods. Connecting to Microsoft Graph using PowerShell also requires defining your scoped permissions, and you learned how to find those scopes. + +Additional reading about working with the new Microsoft Graph PowerShell module is below. Good luck and happy scripting! + +[Microsoft Learn | Authentication module cmdlets in Microsoft Graph PowerShell][6] + +[Microsoft Learn | Upgrade from Azure AD PowerShell to Microsoft Graph PowerShell][7] + + [1]: https://techcommunity.microsoft.com/t5/microsoft-entra-azure-ad-blog/azure-ad-change-management-simplified/ba-p/2967456 + [2]: https://jeffbrown.tech/getting-started-with-microsoft-teams-and-graph-api/ + [3]: https://learn.microsoft.com/graph/auth-v2-service + [4]: https://learn.microsoft.com/graph/permissions-reference + [5]: https://learn.microsoft.com/powershell/microsoftgraph/azuread-msoline-cmdlet-map + [6]: https://learn.microsoft.com/powershell/microsoftgraph/authentication-commands + [7]: https://learn.microsoft.com/powershell/microsoftgraph/migration-steps diff --git a/content/articles/2023/09/powershell-escape-room/index.md b/content/articles/2023/09/powershell-escape-room/index.md new file mode 100644 index 000000000..ca11f762a --- /dev/null +++ b/content/articles/2023/09/powershell-escape-room/index.md @@ -0,0 +1,56 @@ +--- +url: /articles/2023-09-15-powershell-escape-room/ +title: PowerShell Escape Room +authors: + - James Petty +date: "2023-09-15T16:42:26+00:00" +categories: + - DevOps + - PowerShell for Admins +tags: + - Fun + - Projects +aliases: + - /2023/09/powershell-escape-room/ +--- + +# PowerShell Escape Room by Michiel Hamers + +by Michiel Hamers + + +## Why on earth you want to create an Escape Room with PowerShell as backend? + +I've always been a fan of escape rooms, so I decided to create my own for my kids. I wanted to make it something that would be challenging and fun for them, but also educational. I decided to use PowerShell as the backend for the escape room, as I'm a PowerShell developer and I thought it would be a great way to learn more about the language. +The first step was to design the rooms. I wanted to make sure that there were a variety of puzzles and challenges that my kids would have to solve. I also wanted to make sure that the rooms were visually appealing and engaging. Once I had the rooms designed, I started building them. +I used a variety of materials to build the rooms, including wood, cardboard, and fabric. I also used a few electronic components, such as a USB extension cable with a switch and a 3-button keyboard. The USB extension cable with a switch was used to create a physical button that my kids could press to solve one of the puzzles. The 3-button keyboard was used to enter the code that my kids had to find to solve another puzzle. +I also used a few websites to create rebus puzzles that my kids had to solve. I printed out the rebus puzzles and placed them around the rooms. Once my kids had solved all of the puzzles, they were able to enter the code on a single screen to escape the room. +In this blog post, we'll delve into the process of creating an engaging PowerShell escape room for the global PowerShell community. We'll emphasize the significance of storytelling and provide a detailed breakdown of the PowerShell structure used for the escape room. + +## The Power of Storytelling: + +"Story is everything." This principle underpins the foundation of a successful escape room. Crafting an engaging and immersive story is crucial to captivate the participants and provide them with a memorable experience. For the PowerShell escape room, we'll design a narrative that centers around a critical mission, where participants must apply their PowerShell skills to overcome a series of challenges. + +## The PowerShell Escape Room Structure: + + 1. The Controller - A Hub of Configuration: At the core of the escape room lies the "controller" PowerShell script. Acting as a central hub, this script offers menu options to configure various aspects of the escape room. From the number of rooms to the puzzles in each room and available hints, the controller script dynamically generates JSON files for each screen. + 2. The Screen Scripts - Immersive Interaction: To create an interactive environment, individual PowerShell scripts are designated for each screen within the setup. Approximately nine screens are utilized, each responsible for a unique role. Upon startup, the screen script prompts the user to enter a screen number, enabling customized content based on the corresponding JSON configuration. + 3. JSON Files for Puzzle Management: The puzzles, solutions, and hints are efficiently managed using JSON files. Quest files house the puzzles or rebus challenges, while hints are stored in separate JSON files, indicating the puzzle they refer to and the number of times they can be accessed. + 4. Game State Management: To monitor the progress of the players and provide a seamless experience, a game state JSON file is employed. It keeps track of the number of completed rooms, solved puzzles, and hints used by the players. By resetting to a default template, the game state is restored whenever a reset is initiated. + 5. Physical and Virtual Elements: To cater to a global audience, we'll blend physical and virtual elements in the escape room. Participants can interact with the virtual challenges via an online platform while engaging with tangible components, such as specially designed 3-key keyboards, for input on certain screens. + +## Conclusion: + +Creating the PowerShell escape room for my kids was an incredibly rewarding experience. As a PowerShell developer, I wanted to share my passion for the language in a fun and educational way. Watching my kids immerse themselves in the challenges, applying their problem-solving skills and learning more about PowerShell, filled me with joy. +If you're considering creating your own PowerShell escape room, here are a few tips based on my experience: + + 1. Make sure that the puzzles are both challenging and enjoyable, with an educational twist to enhance the learning experience. + 2. Utilize a variety of materials to build the rooms, creating visually appealing and immersive environments. + 3. Incorporate electronic components to add an interactive dimension to the escape room, making it even more engaging. + 4. Explore websites to craft intriguing rebus puzzles that will intrigue and challenge your participants. + 5. Print out the rebus puzzles and strategically place them around the rooms to ensure an exciting and dynamic gameplay. + 6. Ensure that the code or answers your participants need to progress are cleverly hidden yet not overly difficult to find. + Lastly, I'm eager to connect with fellow enthusiasts who have also ventured into the world of PowerShell escape rooms or any other unique application of PowerShell. Let's share our experiences, ideas, and insights to create more thrilling adventures that celebrate our love for PowerShell and foster a strong community of like-minded individuals. + +Together, let's continue exploring the endless possibilities of PowerShell and inspire others to embrace its power and potential. +![file](https://powershell.org/wp-content/uploads/2023/09/image-1694796121959.png) diff --git a/content/articles/2023/10/_index.md b/content/articles/2023/10/_index.md new file mode 100644 index 000000000..a1d4dddd3 --- /dev/null +++ b/content/articles/2023/10/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from October 2023" +description: "PowerShell.org Articles published in October 2023." +--- diff --git a/content/articles/2023/10/the-powershell-devops-global-summit-cfp-is-open/index.md b/content/articles/2023/10/the-powershell-devops-global-summit-cfp-is-open/index.md new file mode 100644 index 000000000..a40d0ec62 --- /dev/null +++ b/content/articles/2023/10/the-powershell-devops-global-summit-cfp-is-open/index.md @@ -0,0 +1,56 @@ +--- +url: /articles/2023-10-01-the-powershell-devops-global-summit-cfp-is-open/ +title: The PowerShell + DevOps Global Summit CFP is OPEN +authors: + - James Petty +date: "2023-10-01T13:00:56+00:00" +categories: + - PowerShell Summit +tags: + - PowerShell Summit + - Call for Speakers +aliases: + - /2023/10/the-powershell-devops-global-summit-cfp-is-open/ +--- + +# Call for Papers Now Open: Join the PowerShell + DevOps Global Summit 2024! + +Are you a PowerShell enthusiast or a DevOps aficionado with a wealth of knowledge to share? Do you have insights, tips, or innovative solutions that can empower others in the field? If so, we have fantastic news for you! The Call for Papers is now officially open for the 2024 PowerShell + DevOps Global Summit. + +## Why You Should Submit Your Proposal + +The PowerShell + DevOps Global Summit is the premier event for IT professionals, sysadmins, and DevOps practitioners who want to deepen their understanding of PowerShell and DevOps practices. Whether you're an experienced speaker or new to presenting, this is your opportunity to showcase your expertise, engage with a passionate community, and contribute to the growth of PowerShell and DevOps knowledge worldwide. + +### Here is why you should consider submitting your proposal: + +**Share Your Knowledge:** The summit is the perfect platform to share your expertise and insights with a global audience. Whether you're a PowerShell scripting guru, a DevOps architect, or have a unique perspective to offer, your knowledge is valuable. + +**Network with Experts:** Connect with fellow professionals, experts, and enthusiasts who share your passion for PowerShell and DevOps. Forge new relationships and gain valuable insights into the latest industry trends. + +**Boost Your Profile:** Speaking at the summit elevates your professional profile. It's an excellent opportunity to enhance your career and reputation as a thought leader in the field. + +**Contribute to the Community:** Help others in the PowerShell and DevOps community by providing valuable information, best practices, and practical solutions to common challenges. + +## What We are Looking For + +We're seeking diverse and engaging sessions that cater to the interests and needs of our attendees. Whether you have a compelling case study, a deep dive into a technical topic, or an interactive workshop, we want to hear from you. Here's what we're looking for: + +**45-Minute Sessions:** These sessions should be informative, engaging, and well-structured. They can cover a wide range of topics related to PowerShell and DevOps, from beginner to advanced levels. + +**90-Minute Deep Dive Sessions:** Dive deep into a specific topic, explore advanced concepts, and provide in-depth insights. Deep dive sessions should be packed with actionable takeaways for attendees. + +**Half-Day Workshops:** If you have a hands-on workshop that can empower attendees with practical skills, we encourage you to submit it. Workshops should be interactive and allow participants to gain hands-on experience. + +## How to Submit Your Proposal + +Submitting your proposal is easy! [Visit the PowerShell + DevOps Global Summit website to access the submission portal][1]. You'll be prompted to provide details about your proposed session, and any supporting materials. Be sure to include a catchy title and a concise but informative abstract that clearly outlines what attendees can expect to learn. + +## Important Dates + +Call for Papers Opens: October 1, 2023 +Call for Papers Closes: November 15, 2023 +Speaker Notifications: December 15, 2023 +PowerShell + DevOps Global Summit 2024: April 8-11, 2024 +Don't miss this opportunity to be a part of the PowerShell + DevOps Global Summit 2024. Submit your proposal, and together, we can contribute to the growth and success of the PowerShell and DevOps community. We look forward to seeing you there! + + [1]: https://sessionize.com/pshsummit24/ diff --git a/content/articles/2023/11/_index.md b/content/articles/2023/11/_index.md new file mode 100644 index 000000000..9d085c96c --- /dev/null +++ b/content/articles/2023/11/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from November 2023" +description: "PowerShell.org Articles published in November 2023." +--- diff --git a/content/articles/2023/11/earlybirdnowopen/index.md b/content/articles/2023/11/earlybirdnowopen/index.md new file mode 100644 index 000000000..803096b39 --- /dev/null +++ b/content/articles/2023/11/earlybirdnowopen/index.md @@ -0,0 +1,59 @@ +--- +url: /articles/2023-11-20-earlybirdnowopen/ +title: Early Bird Tickets Now on Sale +authors: + - James Petty +date: "2023-11-20T21:32:12+00:00" +categories: + - PowerShell Summit +tags: + - PowerShell Summit + - Tickets +aliases: + - /2023/11/earlybirdnowopen/ +--- + +**Unlock Your PowerShell Potential: PowerShell + DevOps Global Summit Tickets Now on Sale!** + +Are you ready to elevate your PowerShell and DevOps skills to new heights? The wait is over! Tickets for the highly anticipated [PowerShell + DevOps Global Summit are now on sale][1], and you won't want to miss out on the early bird pricing of **$1799 USD** (originally $1999 USD). Seize the opportunity to enhance your expertise and join the global community at this must-attend event. + +**Early Bird Special: Act Now and Save!** + +For a limited time, take advantage of the exclusive early bird pricing to secure your spot at the PowerShell + DevOps Global Summit. Priced at just $1799 USD (down from the regular price of $1999 USD), this offer is your ticket to a world-class learning experience that will empower you with the latest insights, skills, and best practices in PowerShell and DevOps. + +Don't wait—this special pricing won't last forever. Early bird tickets are available for a limited time only, so act fast to lock in your savings. Investing in your professional development has never been more accessible! + +**What to Expect at the Summit:** + +The PowerShell + DevOps Global Summit is renowned for its rich content, engaging speakers, and unparalleled networking opportunities. Here's a glimpse of what you can expect: + + 1. **Expert-Led Sessions:** Learn from the best in the industry as renowned experts share their insights and real-world experiences. From foundational concepts to advanced techniques, the summit covers a broad spectrum of topics to cater to all skill levels. + + 2. **Networking Opportunities:** Connect with like-minded professionals, industry leaders, and experts from around the world. Forge valuable connections, share experiences, and collaborate with peers who are passionate about PowerShell and DevOps. + + 3. **Meet our Sponsors:** Explore the latest tools, technologies, and services as you talk with engineers from our dedicated sponsors. Engage with sponsors, discover innovative solutions, and stay up-to-date with the latest trends shaping the industry. + + 4. **Community Spirit:** Immerse yourself in the vibrant PowerShell and DevOps community. Share ideas, ask questions, and participate in discussions that will broaden your perspective and contribute to your professional growth. + +**Why Attend?** + +Attending the PowerShell + DevOps Global Summit is not just about acquiring technical skills; it's about investing in your career and staying at the forefront of industry trends. Here's why you should be there: + + 1. **Stay Updated:** Keep pace with the latest advancements in PowerShell and DevOps. Gain insights into emerging technologies and industry best practices that will keep you ahead of the curve. + + 2. **Professional Growth:** Acquire new skills, refine existing ones, and broaden your expertise. The knowledge gained at the summit can significantly impact your career trajectory and open doors to exciting opportunities. + + 3. **Community Engagement:** Connect with a diverse and passionate community of professionals who share your interests. The relationships formed at the summit can lead to collaborations, mentorships, and lifelong connections. + + 4. **Inspiration:** Immerse yourself in an environment where innovation and creativity thrive. The summit is designed to inspire you to think differently, solve problems more effectively, and approach your work with fresh perspectives. + +**Act Fast – Limited Tickets Available!** + +Given the overwhelming success of previous summits, we anticipate a sell-out event this year. Secure your spot now and take advantage of the early bird pricing before it's too late. Don't miss out on this unique opportunity to elevate your skills, connect with industry experts, and be a part of the global PowerShell and DevOps community. + +Visit our [official summit website][2] to reserve your spot and join us for an unforgettable learning experience. The PowerShell + DevOps Global Summit is where knowledge meets innovation, and your journey towards mastery begins. + +See you there! + + [1]: https://www.powershellsummit.org/ "PowerShell + DevOps Global Summit are now on sale" + [2]: https://powershellsummit.org diff --git a/content/articles/2023/11/onramp2024-program-unveiled/index.md b/content/articles/2023/11/onramp2024-program-unveiled/index.md new file mode 100644 index 000000000..f38002454 --- /dev/null +++ b/content/articles/2023/11/onramp2024-program-unveiled/index.md @@ -0,0 +1,51 @@ +--- +url: /articles/2023-11-29-onramp2024-program-unveiled/ +title: OnRamp2024 Program Unveiled +authors: + - James Petty +date: "2023-11-29T15:03:16+00:00" +categories: + - Announcements + - DevOps + - Events +tags: + - OnRamp + - PowerShell Summit +legacy_featured_image: /wp-content/uploads/2022/11/Summit_Long_NoYeardefault-e1669819303622.png +aliases: + - /2023/11/onramp2024-program-unveiled/ +--- + +# Navigating the Path to Proficiency: PowerShell + DevOps OnRamp2024 Program Unveiled + +## Introduction + +The PowerShell + DevOps Global Summit proudly announces the OnRamp Program for 2024 to foster inclusivity and provide opportunities for aspiring IT professionals. This initiative is designed to be a bridge for those looking to enter the PowerShell and DevOps arena, offering a guided onboarding experience that aims to empower individuals with the skills and knowledge needed to thrive in this dynamic industry. As a testament to their commitment to diversity and accessibility, the PowerShell Summit offers scholarships, ensuring financial constraints do not hinder passionate learners from participating. + +Unlocking Opportunities with OnRamp: + +The OnRamp Program is a unique offering that caters to individuals who may be new to PowerShell and DevOps or want to expand their existing skill set. This specialized track within the Summit is crafted to provide a structured learning experience, covering foundational concepts and practical skills that serve as a solid onramp into the world of PowerShell automation and DevOps practices. + +## Key Highlights of the OnRamp Program: + + 1. **Structured Curriculum:** Participants in the OnRamp Program can expect a carefully curated curriculum that covers the essentials of PowerShell scripting and DevOps methodologies. From basic scripting techniques to understanding the principles of continuous integration and deployment, the program aims to equip attendees with a well-rounded skill set. + + 2. **Hands-On Workshops:** + Learning by doing is a crucial aspect of the OnRamp Program. Hands-on workshops will be integrated into the curriculum, providing participants with practical experience and the opportunity to apply the concepts they learn in a real-world context. + + 3. **Mentorship Opportunities:** + The OnRamp Program will feature mentorship opportunities to enhance the learning journey further. Experienced PowerShell and DevOps community professionals will guide participants, offering insights, advice, and personalized support as they enter the field. + +## Scholarship Opportunities + +Understanding that financial barriers can sometimes impede eager learners from joining such programs, the PowerShell + DevOps Global Summit has opened scholarship applications. Scholarships are targeted towards deserving individuals, regardless of financial constraints, so they may have the chance to participate in the OnRamp Program and benefit from the wealth of knowledge the Summit has to offer. + +### How to Apply + +The scholarship application process is straightforward. Interested individuals can visit the [Official Summit Website][1], where they will find detailed information about the application requirements and submission process. The application period is open now, providing ample time for prospective participants to put forth their case for consideration. + +## Conclusion + +The OnRamp Program at the PowerShell + DevOps Global Summit represents a significant step towards fostering inclusivity and creating pathways for individuals eager to explore the realms of PowerShell scripting and DevOps practices. With a carefully structured curriculum, hands-on workshops, and mentorship opportunities, this program promises to be a transformative experience for participants. If you are passionate about PowerShell and DevOps but face financial constraints, take advantage of the scholarship application window and embark on a journey that could redefine your professional trajectory. The OnRamp Program is not just an educational initiative; it's an invitation to unlock new possibilities and chart a course toward success in the ever-evolving landscape of PowerShell and DevOps. + + [1]: https://powershellsummit.org diff --git a/content/articles/2023/_index.md b/content/articles/2023/_index.md new file mode 100644 index 000000000..e11e0033f --- /dev/null +++ b/content/articles/2023/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from 2023" +description: "PowerShell.org Articles published in 2023." +--- diff --git a/content/articles/2024-03-05-how-to-toggle-logon-restrictions-for-ad-accounts.md b/content/articles/2024-03-05-how-to-toggle-logon-restrictions-for-ad-accounts.md deleted file mode 100644 index 5098f09ca..000000000 --- a/content/articles/2024-03-05-how-to-toggle-logon-restrictions-for-ad-accounts.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: How to Toggle Logon Restrictions for AD Accounts -authors: - - James Petty -date: "2024-03-05T17:00:33+00:00" -categories: - - PowerShell for Admins -tags: - - Active Directory - - Scripting - - Security -aliases: - - /2024/03/how-to-toggle-logon-restrictions-for-ad-accounts/ ---- - -_Written by Tino JR_ - -This script will allow an administrator to enable or disable logon restrictions for an Active Directory (AD) user account. I received a unique requirement, in which several account must remain enabled, but restricted from logging into AD, so I wrote this script. - -As you may know, you can specify logon hours to restrict AD users’ ability to logon during certain hours of the day . This is fine if the exact same time of logon restrictions will not change over time, however there might be a need to block logon access on an as-needed basis. The script can target an individual account, or target all members of a security group. - -Here is an example of restricted logon hour in ADUC. -![file](https://powershell.org/wp-content/uploads/2024/03/image-1709639928467.png) - -**Prerequisites** -Before you run the script, you need to have the following: - - * An AD account that has permissions to modify other AD accounts. - * You will need the ActiveDirectory PowerShell module (found in RSAT). - * The PowerShell script can be found from this link: - -**Running the Script** -The script allows you to target a user or group, and both parameters will take the following input of the AD object. - - * A distinguished name - * A GUID (objectGUID) - * A security identifier (objectSid) - * A SAM account name (sAMAccountName) - -The other thing to be aware of is the script will run in `WhatIf` mode by default. You must use the `Commit` parameter to commit changes. This is something new I include in all my scripts, as it can be helpful to see output to confirm these are the changes you in fact want to implement. -Here are some examples of how to run the script. As you can see you can target either a user or group. - -`C:\Scripts\ToggleLogonHours.ps1 -User User1 -AddLogonHourRestrictions C:\Scripts\ToggleLogonHours.ps1 -User User2 -RemoveLogonHourRestrictions -CommitChanges` -C:\Scripts\ToggleLogonHours.ps1 -Group Group1 -AddLogonHourRestrictions` - -I hope you find this script useful. diff --git a/content/articles/2024-03-08-summit2024-spotlight-steven-judd.md b/content/articles/2024-03-08-summit2024-spotlight-steven-judd.md deleted file mode 100644 index 34d528f7d..000000000 --- a/content/articles/2024-03-08-summit2024-spotlight-steven-judd.md +++ /dev/null @@ -1,171 +0,0 @@ ---- -title: "Summit 2024 Speaker Spotlight: Steven Judd" -authors: - - Mike Kanakos -date: "2024-03-08T18:11:49+00:00" -categories: - - PowerShell Summit -tags: - - PowerShell Summit - - Speaker Spotlight -legacy_featured_image: /wp-content/uploads/2024/03/Medenbauer-Resize.png -aliases: - - /2024/03/summit2024-spotlight-steven-judd/ ---- - -Hey there, PowerShell enthusiasts! Today marks the start of a series of interviews featuring select Summit 2024 presenters. I plan to sit and chat briefly with a mix of familiar and unfamiliar community presenters. Through these interviews, my aim is to provide you with an opportunity to get to know our presenters and generate some anticipation for their upcoming talks at the PowerShell Summit in Bellevue, Washington next month. - -Joining me as my first guest is my good friend and active community member, **Steven Judd**! - -Steven has been dedicating his time to helping others in the community for quite a while now. He's been a regular guest speaker and attendee at my user group, and together we hosted the virtual PowerShell Summit in 2021. Steven is famous for his dad jokes, custom PowerShell t-shirts, and programmable billboard hats. Despite his love for fun and enjoyment, Steven has been using and contributing to PowerShell for a long time. A vocal advocate for our community, he is known for his deep expertise in PowerShell and willingness to share his knowledge. - -We wound up talking about PowerShell for 90 minutes on a call that was supposed to be only 20 minutes. Here's a not-so-brief rundown of that interview. - -**Mike:** -_Hi Steven! Good to see you again. Thanks for spending some time with me. Let's kick things off by sharing how you got into IT._ - -**Steven:** -My entry into the IT field was completely unexpected. My IT career began in 1993 when I landed my first job, setting off a 30-year adventure. It all began when I completed my degrees in music performance and business administration, with dreams of working in the music business. However, reality hit hard, and I found myself working as a file clerk at a Trust Company in Oklahoma City. - -Despite the humble beginnings, my passion for technology only increased as I helped colleagues navigate the world of computers, eventually leading me to my first IT job in tech support. The lesson I took from this experience was the value of seizing unexpected opportunities and embracing change, even if it means deviating from the initial plan. - -**Mike:** -_Did you go to college and complete a standard IT education program?_ - -**Steven:** -I've mostly been self-taught in my journey into the world of programming. The only formal computer class I ever took was a visual basic course at a university, which shows how long ago it was. Since then, I've taken some training courses at work, but most of my skills have been honed through practical experience and personal exploration. - -**Mike:** -_Can you tell me about some of roles you had in the past and what you specialize in?_ - -**Steven:** -Throughout my career, I've worn many hats and worked in various industries. I started in banking, then moved on to a .com until financial challenges arose and they went under. Then, I entered the oil and gas sector, switched to social media, and currently I'm working in software as a service for the transportation industry. Currently, my role is as a DevOps infrastructure engineer, focusing on ensuring seamless operations within this field. - -**Mike:** -_DevOps Engineer, nice! That's a pretty lofty title. What does a DevOps Infrastructure Engineer actually do at your org?_ - -**Steven:** -It's interesting because I've returned to a small company. We're a software as a service company, so most of my colleagues have technical roles, which is fun because the transportation industry isn't known for its tech-savvy people. - -The company serves a customer base that may not be tech-savvy, so everyone excels at translating technical language into everyday terms. I focus on keeping the infrastructure running. I am responsible for server management, VLAN configs, firewall security, audits, and working with the security team. Additionally, I delve into infrastructure as code and get to work across multiple cloud environments and handle disaster recovery measures. So it's a kitchen sink type role that keeps me engaged in various aspects of our operations. - -**Mike:** -_You mentioned that you do jack of all trades type work for this company since its smaller, but I know your previous roles were for large companies and you had very specific roles. Could you share a bit about your previous roles?_ - -**Steven:** -Oh man, I've done a lot of things. - -My previous gigs in larger companies were more specialized. Back in the oil and gas industry, I started as a web services coordinator, which was basically, "Hey, we've got web servers, and we need you to run them and keep everything afloat. From there, I was an early adopter of virtualization with VMware. I always ended up in these new areas because the businesses had a need and I was willing to give it go. - -For example, the lead into virtualization sort of went like this: We're thinking about giving VMware a shot. Are you interested? I was like, "ooh yes, I am very much interested." We figured it out and was a gigantic success for the enterprise. - -I have also worked as a SharePoint admin and switched over to architecture and design. So I've definitely had my hands in lots of different things! Workflow software like K2 also made its way into my repertoire over the years. It's been a wild ride of different roles and responsibilities! - -**Mike:** -_I've known you for a while, and I know you're all about the command line. Have you always been into the command line stuff? How did you get started with PowerShell?_ - -**Steven:** -My journey into PowerShell wasn't love at first sight. When I worked at the oil and gas company, we had a really tight partnership with Microsoft and they said, "We have this new thing called Monad". At the time, Monad was just coming out of beta. This was back in 2008 when I did some official Microsoft training classes that were available to us at the time. I trained on PowerShell with the official Microsoft documentation they released. - -Here's the funny thing though; I thought it was stupid. I was like, I don't know why I would use this. I have VB Script now. Looking back on that it's pretty comical, but at the time I didn't get it and, it's OK because the truth is there's times in your career you may see something and just not get it. -I was like, OK, why would I use PowerShell to invoke WMI when I've got VB script to invoke WMI. However, a pivotal moment came during a SharePoint conference in 2010 where PowerShell took center stage for advanced administration tasks. Most of the advanced administration, in fact a ton of it, was in PowerShell. - -You could do things in the UI, but about 25% of the work was in the UI and everything else was in PowerShell and I looked at that and went, oh the writings on the wall. I figured I had better learn this, and I dove into learning PowerShell with the help of colleagues who were equally enthusiastic. Together, we crafted a custom training program for our organization and PowerShell became part of our daily operations. - -**Mike:** -_It's so interesting to see where you are today with your knowledge and to see that you sort of just stumbled into many of the things you have now mastered. Seeing your background now, I think I already know the answer to my next question, but here goes..._ - -_What keeps you motivated to keep doing talks and demos and sharing with people?_ - -**Steven:** -Let me tell you something... You want to know the best way to learn something? - -**Mike:** -_Teach it?_ - -**Steven:** -Well, I would say you're going to speak about it or teach it. Demos force me to learn the material. So, that's a big driver for me. - -**Mike:** -_Did you have a moment with PowerShell where you were like, "oh, I need to know this"?_ - -**Steven:** -Early on, it was probably when I started automating our code deploys. I mean, I'd had wins before but when I started using PowerShell I didn't really understand what object-oriented meant or the benefits. - -So, the first thing I did with PowerShell was use the Get-Content cmdlet on a file. I had this text file with all my servers and I could connect to them using PowerShell, and I was like, oh, that's cool! Then I figured out how to pipe my server list to the Test-Connection cmdlet. - -So now I've imported my list of servers, passed that data into Test-Connection, and it tells me whether all these servers are online or not. Then I made some scripts that would output status messages with Write-Host. It was really janky, but it's what I knew initially and at the time was a massive time saver. - -**Mike:** -_So even if it's janky, you do it and you feel like, oh man, I couldn't do that previously?_ - -**Steven:** -Yeah! And then I learned I can use Where-Object, and then I learned I can group things. Oh look! I can also sort the data. And then the light bulb goes off. I was like, “ahhhh,” and I have this epiphany about objects and PowerShell. Well, once the epiphany hit, then I realized I can start doing some powerful stuff with PowerShell. So, what I did was set out to automate our code deploys. That was really the moment for me when I understood what's possible. - -**Mike:** -_You mentioned getting involved in setting up curriculums and sharing knowledge early on. You've done a bunch of talks for my group and others. We were also the hosts for the Summit in 2021. What's the motivation behind doing these demos? What's the reason that makes you want to do that?_ - -**Steven:** -The thing for me is that this product helped me in my career, and what I want is for other people to realize the gains that are out there for the taking. Once you learn a bit, you quickly discover the ability to do many powerful things. For me it was like, "Oh, I learned PowerShell, so this is all I know." But actually, learning PowerShell made me realize that I also learned the basics of object-orientated programming. - -That motivated me to put some effort into learning good logic flows. Then I learned to write code really fast. It’s just been a very rewarding path for me, and I would like others to have a chance at the same. I want to show them that if someone like me, with no formal IT education and with music and business degrees can do this, then so can you. - -**Mike:** -_Ok, I get that. I have had some similar experiences and motivation around giving back to others. I find that this line of thought is a powerful motivator. I never thought I'd be a community leader, but I'm happy it turned out that way. Sharing with others has been super rewarding for me too._ - -_Let's talk Summit experience. When did you first present at Summit and what was that like?_ - -**Steven:** -Last year was my first time presenting at Summit. The build-up is scary 'cause you want to do a good job, and you never know when a well-known person in the community might stroll in and wonder, "What's this speaker gonna say?" - -My talks got a lot of positive feedback and people were really excited about them. But you know, when you're getting ready, you want everything to be perfect and nothing ever is. During one of my talks, the room's projector didn't work as a second monitor, so I couldn't see my speaker notes. After fiddling around for a bit, I realized I was wasting my time as a presenter, and I just decided to go for it without my notes. - -**Mike:** -_Wow, that's a tough way to kick off Summit presentations. That's great to hear that it all worked out. For those who haven't been to Summit, share any hidden insights about the Summit that first-time participants might not know. What might they encounter? What's the general attitude at the Summit?_ - -**Steven:** -The 2019 Summit was a game-changer for me. The people I met were genuinely interested in my perspective and what I could gain from the event. The people at the event were so friendly that I felt comfortable and connected with them right away, and that's something you hardly ever come across. - -**Mike:** -_Before we finish, can you tell me what you'll be discussing this at Summit this year?_ - -**Steven:** -I have three talks scheduled for this year. Two are for the main Summit conference and one is for the On-Ramp program. My first talk is about using PowerShell to be a Linux admin, because in my current role, unlike my 30 prior years of IT work, there are zero Windows servers at this organization. It is all Linux based, and so I've been becoming a Linux admin, among other duties. - -**Mike:** -_Wow, that sounds challenging!_ - -**Steven:** -It's challenging alright. Especially when you don't have years and years of experience with it. But what I have is knowledge of PowerShell, and they did not have a problem with me putting PowerShell on a couple of servers. I'm using that to my advantage as a Linux admin, so that's what I'm gonna be talking about. - -Also, I'm teaming up with Jason Helmick for another talk. We'll be discussing how to quickly and securely manage your resources using Azure Cloud Shell. It's gonna be a talk about Azure Cloud Shell. But guess what? It's based on Linux too! So I'll be doing two Linux talks at this Summit. - -**Mike:** -_Any specific topics or people you're excited to see at Summit this year?_ - -**Steven:** -I think what I'm looking forward to the most is seeing how many dad jokes I can pepper people with. You know, whether it's in conversation or my presentations or whatever, 'cause that's just what I love to do. - -I haven't bothered looking at the schedule yet to see which talks I'll go to because I know there'll be some stupid one-hour block where four of my friends are speaking at the same time and I'll have to make a terrible decision. I know it's gonna happen, so I haven't bothered looking since I don't want to feel overwhelmed while I'm working on my presentations. - -**Mike:** -_I can relate so much to what you just said. I keep forgetting about this thing every year. Ugh, it's so hard to decide what to go to. You forget that every hour of demos is FOUR great choices. It's torture. You want to see everything, but you have to pick just one session. You know, I'll be like, "I'm going to session A," but then I run into someone in the hall right before a session starts and they're like, "No way! You HAVE to see this next session!" and then I make some last-minute change. That's Summit in a nutshell, if you ask me. There are so many tough choices._ - -_Got any special plans for your sticker game on this trip?_ - -**Steven:** -I have a brand new, never before seen sticker design. And I have some swag I have been stockpiling because I love that kind of stuff. - -**Mike:** -_I need one of those stickers! Will "Travel Piggy" and the Billboard Hat be making it to Summit as well?_ - -**Steven:** -If I'm there and they're not, something has gone completely off the rails. Travel Piggy is super pumped for the Summit. He always has a bag ready to go traveling. He's all set and itching to go and start posting his adventures on Twitter to @travelpiggie. Plus, I know where the batteries and controller are for my hat. - -**Mike:** -_That's amazing! Thanks a bunch for spending time with me and sharing your thoughts with the readers!_ - -**Steven:** -Thanks for having me. This was so much fun, and I know Summit will be too. I can't wait to go! - -If you're planning on going to Summit, be sure to say hi to Steven Judd and think about attending one of his three sessions. He's the perfect example of why the Summit experience is so unique and fun! Stay tuned for more chats with Summit speakers! diff --git a/content/articles/2024-09-30-powershell-devops-global-summit-2025-call-for-papers-now-open.md b/content/articles/2024-09-30-powershell-devops-global-summit-2025-call-for-papers-now-open.md deleted file mode 100644 index c73e3586f..000000000 --- a/content/articles/2024-09-30-powershell-devops-global-summit-2025-call-for-papers-now-open.md +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: "PowerShell + DevOps Global Summit 2025: Call for Papers Now Open!" -authors: - - James Petty -date: "2024-09-30T17:36:14+00:00" -categories: - - Announcements - - DevOps - - Events -tags: - - PowerShell Summit - - Call for Speakers -legacy_featured_image: /wp-content/uploads/2024/09/Untitled-1-e1727199856490.png -aliases: - - /2024/09/powershell-devops-global-summit-2025-call-for-papers-now-open/ ---- - -# PowerShell + DevOps Global Summit 2025: Call for Papers Now Open! - -Calling all innovators, problem-solvers, and thought leaders in the PowerShell and DevOps realm! The stage is set for the most anticipated event of 2025, and we want you to be a part of it. The PowerShell + DevOps Global Summit 2025 is now accepting session proposals, and this is your moment to shine. From **April 7-10, 2025**, in Bellevue, WA, the brightest minds in automation and DevOps will converge to share knowledge, challenge the status quo, and push the boundaries of what's possible. Whether you're a seasoned expert or a rising star with fresh perspectives, we invite you to submit your ideas and help shape the future of our industry. - -## What We're Looking For - -The Summit is seeking innovative and engaging presentations on a wide range of topics, including: - - * PowerShell: Novel approaches and advanced techniques - * Automation Integrations: PowerShell with tools like Ansible, Terraform, IoT - * DevOps Practices: CI/CD, Infrastructure-as-Code, DevSecOps - * Cross-Platform Automation - * Cloud Computing: PowerShell in Azure, AWS, and beyond - * Real-World Solutions and Case Studies - * Advanced (400-level) Deep Dives - * Security-Related Topics - * Soft Skills & Career Growth - * Next-Level Sessions: Innovative approaches solving unique problems - -## Session Types and Speaker Benefits - -This year, we are offering four types of sessions, each designed to provide unique value to our attendees. Here is a detailed breakdown of each session type: - -### 1. Fast Focus (25 minutes) - - * **Description**: These are short, impactful talks designed to deliver one key idea or concept. They're perfect for concise, focused topics that do not require a full-length session. - * **Speaker Requirement**: Speakers must commit to delivering at least two Fast Focus sessions to qualify for speaker benefits. - * **Honorarium**: $250 per speaker - -### 2. 45-Minute Breakout Sessions - - * **Description**: These are our traditional sessions, providing ample time to thoroughly cover a topic. Ideal for in-depth explanations, demonstrations, or discussions on specific PowerShell or DevOps concepts. - * **Honorarium**: $500 per speaker - -### 3. 90-Minute Deep Dives - - * **Description**: These workshop-style sessions allow for deeper exploration of a subject. Theyare perfect for complex topics that require more time for explanation, hands-on examples, or extensive Q&A. - * **Honorarium**: $1,000 per speaker - -### 4. 4-Hour Hands-On Labs - - * **Description**: These extended, practical sessions provide attendees with an immersive learning experience. Speakers should prepare materials for participants to follow along, allowing for active engagement with the subject matter. - * **Speaker Requirement**: Pre-prepared materials for participants are essential. - * **Honorarium**: $2,000 per speaker - -**Important Notes for All Session Types**: - - * All sessions must be delivered in person at the conference site. - - * Sessions must be presented in English at a minimum. - - * If co-presenting, benefits will only be extended to the primary speaker listed on the submission unless otherwise agreed upon in advance. - -## Selection Process: Ensuring Fairness and Quality - -This year, we are implementing a robust two-round selection process designed to ensure fairness, diversity, and the highest quality of content for our attendees. Here's how it works: - -### Round 1: Blind Review - -In the first round, all submissions will undergo a blind review. This means: - - * All identifying information (names, companies, etc.) will be removed from the proposals. - * Reviewers will evaluate each submission solely on its content, relevance, and potential value to attendees. - * Proposals will be rated on a Yes/No/Maybe scale. - -**Why Blind Review?** -We have implemented this blind review process to address and minimize selection bias. By removing identifying information, we ensure that: - - 1. Each proposal is judged on its merits alone, not on the reputation or background of the speaker. - 2. New voices and fresh perspectives have an equal opportunity to be heard. - 3. We reduce unconscious biases related to gender, ethnicity, or organizational affiliation. - -This approach helps us discover hidden gems and ensures a diverse range of speakers and topics. - -### Round 2: Comparison - -After the blind review: - - * Proposals will be compared based on their scores from the first round. - * Additional factors such as topic balance, audience interest, and overall program coherence will be considered. - * Final selections will be made to create a well-rounded, high-quality program. - -**Why Two Rounds?** -The two-round process allows us to: - - 1. First focus solely on content quality and relevance (Round 1). - 2. Then consider the broader context of the entire conference program (Round 2). - -This approach helps us build a conference schedule that not only features the best individual sessions but also creates a cohesive and comprehensive experience for all attendees. - -We believe this selection process will result in a diverse, engaging, and high-quality program that represents the best of the PowerShell and DevOps community. It aligns with our commitment to fairness, inclusion, and excellence in content curation. - -## Important Details - - * All sessions must be delivered in person and in English - * The CFP closes on **November 15, 2024** - * Review all travel and speaker benefit information before submitting - -This is your chance to contribute to the PowerShell and DevOps community, share your knowledge, and connect with like-minded professionals. Whether you're a seasoned speaker or considering your first presentation, we encourage you to submit your ideas. - -Don not miss this opportunity to be part of the PowerShell + DevOps Global Summit 2025. Submit your proposal now and help shape the future of automation and DevOps! - -[Submit your sessions today][1] - -For full details and to submit your proposal, visit the official CFP page. We can not wait to see what innovative ideas you will bring to the Summit! - - [1]: https://sessionize.com/pshsummit25 "Submit your sessions today" diff --git a/content/articles/2024-12-02-onramp-scholarship-application-now-open.md b/content/articles/2024-12-02-onramp-scholarship-application-now-open.md deleted file mode 100644 index a2aa45135..000000000 --- a/content/articles/2024-12-02-onramp-scholarship-application-now-open.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: OnRamp Scholarship Application Now Open -authors: - - James Petty -date: "2024-12-02T15:20:46+00:00" -categories: - - Announcements -tags: - - OnRamp - - PowerShell Summit - - Scholarships -aliases: - - /2024/12/onramp-scholarship-application-now-open/ ---- - -# Scholarship Applications Now Open for the OnRamp Program at the PowerShell + DevOps Global Summit! - -Are you an entry-level IT professional looking for an immersive introduction to PowerShell, DevOps, and the broader tech community? The **OnRamp program** at the PowerShell + DevOps Global Summit is designed just for you, and scholarship applications are now open! - -This is your chance to take part in a transformative experience, where you’ll gain technical skills, learn from industry experts, and connect with a thriving community. - -* * * - -## **What is the OnRamp Program?** - -The OnRamp program is a dedicated track within the PowerShell + DevOps Global Summit. It’s tailored for individuals at the beginning of their IT careers, providing: - - * Hands-on learning in PowerShell and DevOps technologies. - * Development of essential soft skills for IT professionals. - * Guidance and mentorship from experienced instructors and community members. - -This program seamlessly integrates classroom learning with keynotes, general sessions, and social events at the Summit. - -* * * - -## **Who Should Apply?** - -The OnRamp program welcomes those who: - - * Are new to IT, with foundational certifications like CompTIA A+ or Cisco IT Essentials. - * Have basic knowledge of server administration (though no prior PowerShell experience is required). - * Are committed to building a career in IT. - * Represent diverse backgrounds, especially those from underrepresented groups in tech. - -* * * - -## **Scholarship Benefits** - -Thanks to The DevOps Collective, Inc., scholarship recipients will receive: - - * **Free admission** to the OnRamp track, covering all sessions, meals, and social events. - * **Five nights of lodging** near the Summit venue. - * **Round-trip US domestic airfare (coach)**. - * **Optional buddy pairing**, connecting you with an experienced attendee for mentorship and networking. - -* * * - -## **Requirements for Participation** - -To make the most of the OnRamp experience, you’ll need: - - * A laptop capable of running PowerShell 7+ and Visual Studio Code (VS Code). - * The PowerShell extension for VS Code installed before the event. - * Administrator rights on your laptop. - -All required software is free, and installation instructions are available on [PowerShellSummit.org][1]. - -* * * - -## **How to Apply for a Scholarship** - -If you’re ready to jumpstart your IT career, here’s what to do next: - - 1. **Review the OnRamp Brochure** for full details about the program. - 2. Complete the scholarship application form. - 3. Submit your application before the deadline. - -Scholarships are limited, so don’t wait! - -* * * - -## **Why Apply for OnRamp?** - -The OnRamp program is more than just a training session. It’s an invitation to join a vibrant, supportive community of professionals dedicated to helping you succeed in your IT journey. Whether you’re learning new skills or building a professional network, OnRamp equips you for a bright future in tech. - -* * * - -**Don’t miss this opportunity!** Visit [PowerShellSummit.org][2] to apply today and follow us on social media for updates. The deadline is approaching fast—secure your spot now! - -**Let’s build the future of IT together.** - - [1]: https://www.powershellsummit.org - [2]: https://www.powershellsummit.org/onramp diff --git a/content/articles/2024/03/_index.md b/content/articles/2024/03/_index.md new file mode 100644 index 000000000..3171d0a67 --- /dev/null +++ b/content/articles/2024/03/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from March 2024" +description: "PowerShell.org Articles published in March 2024." +--- diff --git a/content/articles/2024/03/how-to-toggle-logon-restrictions-for-ad-accounts/index.md b/content/articles/2024/03/how-to-toggle-logon-restrictions-for-ad-accounts/index.md new file mode 100644 index 000000000..1acf485c2 --- /dev/null +++ b/content/articles/2024/03/how-to-toggle-logon-restrictions-for-ad-accounts/index.md @@ -0,0 +1,47 @@ +--- +url: /articles/2024-03-05-how-to-toggle-logon-restrictions-for-ad-accounts/ +title: How to Toggle Logon Restrictions for AD Accounts +authors: + - James Petty +date: "2024-03-05T17:00:33+00:00" +categories: + - PowerShell for Admins +tags: + - Active Directory + - Scripting + - Security +aliases: + - /2024/03/how-to-toggle-logon-restrictions-for-ad-accounts/ +--- + +_Written by Tino JR_ + +This script will allow an administrator to enable or disable logon restrictions for an Active Directory (AD) user account. I received a unique requirement, in which several account must remain enabled, but restricted from logging into AD, so I wrote this script. + +As you may know, you can specify logon hours to restrict AD users’ ability to logon during certain hours of the day . This is fine if the exact same time of logon restrictions will not change over time, however there might be a need to block logon access on an as-needed basis. The script can target an individual account, or target all members of a security group. + +Here is an example of restricted logon hour in ADUC. +![file](https://powershell.org/wp-content/uploads/2024/03/image-1709639928467.png) + +**Prerequisites** +Before you run the script, you need to have the following: + + * An AD account that has permissions to modify other AD accounts. + * You will need the ActiveDirectory PowerShell module (found in RSAT). + * The PowerShell script can be found from this link: + +**Running the Script** +The script allows you to target a user or group, and both parameters will take the following input of the AD object. + + * A distinguished name + * A GUID (objectGUID) + * A security identifier (objectSid) + * A SAM account name (sAMAccountName) + +The other thing to be aware of is the script will run in `WhatIf` mode by default. You must use the `Commit` parameter to commit changes. This is something new I include in all my scripts, as it can be helpful to see output to confirm these are the changes you in fact want to implement. +Here are some examples of how to run the script. As you can see you can target either a user or group. + +`C:\Scripts\ToggleLogonHours.ps1 -User User1 -AddLogonHourRestrictions C:\Scripts\ToggleLogonHours.ps1 -User User2 -RemoveLogonHourRestrictions -CommitChanges` +C:\Scripts\ToggleLogonHours.ps1 -Group Group1 -AddLogonHourRestrictions` + +I hope you find this script useful. diff --git a/content/articles/2024/03/summit2024-spotlight-steven-judd/index.md b/content/articles/2024/03/summit2024-spotlight-steven-judd/index.md new file mode 100644 index 000000000..172ba096d --- /dev/null +++ b/content/articles/2024/03/summit2024-spotlight-steven-judd/index.md @@ -0,0 +1,172 @@ +--- +url: /articles/2024-03-08-summit2024-spotlight-steven-judd/ +title: "Summit 2024 Speaker Spotlight: Steven Judd" +authors: + - Mike Kanakos +date: "2024-03-08T18:11:49+00:00" +categories: + - PowerShell Summit +tags: + - PowerShell Summit + - Speaker Spotlight +legacy_featured_image: /wp-content/uploads/2024/03/Medenbauer-Resize.png +aliases: + - /2024/03/summit2024-spotlight-steven-judd/ +--- + +Hey there, PowerShell enthusiasts! Today marks the start of a series of interviews featuring select Summit 2024 presenters. I plan to sit and chat briefly with a mix of familiar and unfamiliar community presenters. Through these interviews, my aim is to provide you with an opportunity to get to know our presenters and generate some anticipation for their upcoming talks at the PowerShell Summit in Bellevue, Washington next month. + +Joining me as my first guest is my good friend and active community member, **Steven Judd**! + +Steven has been dedicating his time to helping others in the community for quite a while now. He's been a regular guest speaker and attendee at my user group, and together we hosted the virtual PowerShell Summit in 2021. Steven is famous for his dad jokes, custom PowerShell t-shirts, and programmable billboard hats. Despite his love for fun and enjoyment, Steven has been using and contributing to PowerShell for a long time. A vocal advocate for our community, he is known for his deep expertise in PowerShell and willingness to share his knowledge. + +We wound up talking about PowerShell for 90 minutes on a call that was supposed to be only 20 minutes. Here's a not-so-brief rundown of that interview. + +**Mike:** +_Hi Steven! Good to see you again. Thanks for spending some time with me. Let's kick things off by sharing how you got into IT._ + +**Steven:** +My entry into the IT field was completely unexpected. My IT career began in 1993 when I landed my first job, setting off a 30-year adventure. It all began when I completed my degrees in music performance and business administration, with dreams of working in the music business. However, reality hit hard, and I found myself working as a file clerk at a Trust Company in Oklahoma City. + +Despite the humble beginnings, my passion for technology only increased as I helped colleagues navigate the world of computers, eventually leading me to my first IT job in tech support. The lesson I took from this experience was the value of seizing unexpected opportunities and embracing change, even if it means deviating from the initial plan. + +**Mike:** +_Did you go to college and complete a standard IT education program?_ + +**Steven:** +I've mostly been self-taught in my journey into the world of programming. The only formal computer class I ever took was a visual basic course at a university, which shows how long ago it was. Since then, I've taken some training courses at work, but most of my skills have been honed through practical experience and personal exploration. + +**Mike:** +_Can you tell me about some of roles you had in the past and what you specialize in?_ + +**Steven:** +Throughout my career, I've worn many hats and worked in various industries. I started in banking, then moved on to a .com until financial challenges arose and they went under. Then, I entered the oil and gas sector, switched to social media, and currently I'm working in software as a service for the transportation industry. Currently, my role is as a DevOps infrastructure engineer, focusing on ensuring seamless operations within this field. + +**Mike:** +_DevOps Engineer, nice! That's a pretty lofty title. What does a DevOps Infrastructure Engineer actually do at your org?_ + +**Steven:** +It's interesting because I've returned to a small company. We're a software as a service company, so most of my colleagues have technical roles, which is fun because the transportation industry isn't known for its tech-savvy people. + +The company serves a customer base that may not be tech-savvy, so everyone excels at translating technical language into everyday terms. I focus on keeping the infrastructure running. I am responsible for server management, VLAN configs, firewall security, audits, and working with the security team. Additionally, I delve into infrastructure as code and get to work across multiple cloud environments and handle disaster recovery measures. So it's a kitchen sink type role that keeps me engaged in various aspects of our operations. + +**Mike:** +_You mentioned that you do jack of all trades type work for this company since its smaller, but I know your previous roles were for large companies and you had very specific roles. Could you share a bit about your previous roles?_ + +**Steven:** +Oh man, I've done a lot of things. + +My previous gigs in larger companies were more specialized. Back in the oil and gas industry, I started as a web services coordinator, which was basically, "Hey, we've got web servers, and we need you to run them and keep everything afloat. From there, I was an early adopter of virtualization with VMware. I always ended up in these new areas because the businesses had a need and I was willing to give it go. + +For example, the lead into virtualization sort of went like this: We're thinking about giving VMware a shot. Are you interested? I was like, "ooh yes, I am very much interested." We figured it out and was a gigantic success for the enterprise. + +I have also worked as a SharePoint admin and switched over to architecture and design. So I've definitely had my hands in lots of different things! Workflow software like K2 also made its way into my repertoire over the years. It's been a wild ride of different roles and responsibilities! + +**Mike:** +_I've known you for a while, and I know you're all about the command line. Have you always been into the command line stuff? How did you get started with PowerShell?_ + +**Steven:** +My journey into PowerShell wasn't love at first sight. When I worked at the oil and gas company, we had a really tight partnership with Microsoft and they said, "We have this new thing called Monad". At the time, Monad was just coming out of beta. This was back in 2008 when I did some official Microsoft training classes that were available to us at the time. I trained on PowerShell with the official Microsoft documentation they released. + +Here's the funny thing though; I thought it was stupid. I was like, I don't know why I would use this. I have VB Script now. Looking back on that it's pretty comical, but at the time I didn't get it and, it's OK because the truth is there's times in your career you may see something and just not get it. +I was like, OK, why would I use PowerShell to invoke WMI when I've got VB script to invoke WMI. However, a pivotal moment came during a SharePoint conference in 2010 where PowerShell took center stage for advanced administration tasks. Most of the advanced administration, in fact a ton of it, was in PowerShell. + +You could do things in the UI, but about 25% of the work was in the UI and everything else was in PowerShell and I looked at that and went, oh the writings on the wall. I figured I had better learn this, and I dove into learning PowerShell with the help of colleagues who were equally enthusiastic. Together, we crafted a custom training program for our organization and PowerShell became part of our daily operations. + +**Mike:** +_It's so interesting to see where you are today with your knowledge and to see that you sort of just stumbled into many of the things you have now mastered. Seeing your background now, I think I already know the answer to my next question, but here goes..._ + +_What keeps you motivated to keep doing talks and demos and sharing with people?_ + +**Steven:** +Let me tell you something... You want to know the best way to learn something? + +**Mike:** +_Teach it?_ + +**Steven:** +Well, I would say you're going to speak about it or teach it. Demos force me to learn the material. So, that's a big driver for me. + +**Mike:** +_Did you have a moment with PowerShell where you were like, "oh, I need to know this"?_ + +**Steven:** +Early on, it was probably when I started automating our code deploys. I mean, I'd had wins before but when I started using PowerShell I didn't really understand what object-oriented meant or the benefits. + +So, the first thing I did with PowerShell was use the Get-Content cmdlet on a file. I had this text file with all my servers and I could connect to them using PowerShell, and I was like, oh, that's cool! Then I figured out how to pipe my server list to the Test-Connection cmdlet. + +So now I've imported my list of servers, passed that data into Test-Connection, and it tells me whether all these servers are online or not. Then I made some scripts that would output status messages with Write-Host. It was really janky, but it's what I knew initially and at the time was a massive time saver. + +**Mike:** +_So even if it's janky, you do it and you feel like, oh man, I couldn't do that previously?_ + +**Steven:** +Yeah! And then I learned I can use Where-Object, and then I learned I can group things. Oh look! I can also sort the data. And then the light bulb goes off. I was like, “ahhhh,” and I have this epiphany about objects and PowerShell. Well, once the epiphany hit, then I realized I can start doing some powerful stuff with PowerShell. So, what I did was set out to automate our code deploys. That was really the moment for me when I understood what's possible. + +**Mike:** +_You mentioned getting involved in setting up curriculums and sharing knowledge early on. You've done a bunch of talks for my group and others. We were also the hosts for the Summit in 2021. What's the motivation behind doing these demos? What's the reason that makes you want to do that?_ + +**Steven:** +The thing for me is that this product helped me in my career, and what I want is for other people to realize the gains that are out there for the taking. Once you learn a bit, you quickly discover the ability to do many powerful things. For me it was like, "Oh, I learned PowerShell, so this is all I know." But actually, learning PowerShell made me realize that I also learned the basics of object-orientated programming. + +That motivated me to put some effort into learning good logic flows. Then I learned to write code really fast. It’s just been a very rewarding path for me, and I would like others to have a chance at the same. I want to show them that if someone like me, with no formal IT education and with music and business degrees can do this, then so can you. + +**Mike:** +_Ok, I get that. I have had some similar experiences and motivation around giving back to others. I find that this line of thought is a powerful motivator. I never thought I'd be a community leader, but I'm happy it turned out that way. Sharing with others has been super rewarding for me too._ + +_Let's talk Summit experience. When did you first present at Summit and what was that like?_ + +**Steven:** +Last year was my first time presenting at Summit. The build-up is scary 'cause you want to do a good job, and you never know when a well-known person in the community might stroll in and wonder, "What's this speaker gonna say?" + +My talks got a lot of positive feedback and people were really excited about them. But you know, when you're getting ready, you want everything to be perfect and nothing ever is. During one of my talks, the room's projector didn't work as a second monitor, so I couldn't see my speaker notes. After fiddling around for a bit, I realized I was wasting my time as a presenter, and I just decided to go for it without my notes. + +**Mike:** +_Wow, that's a tough way to kick off Summit presentations. That's great to hear that it all worked out. For those who haven't been to Summit, share any hidden insights about the Summit that first-time participants might not know. What might they encounter? What's the general attitude at the Summit?_ + +**Steven:** +The 2019 Summit was a game-changer for me. The people I met were genuinely interested in my perspective and what I could gain from the event. The people at the event were so friendly that I felt comfortable and connected with them right away, and that's something you hardly ever come across. + +**Mike:** +_Before we finish, can you tell me what you'll be discussing this at Summit this year?_ + +**Steven:** +I have three talks scheduled for this year. Two are for the main Summit conference and one is for the On-Ramp program. My first talk is about using PowerShell to be a Linux admin, because in my current role, unlike my 30 prior years of IT work, there are zero Windows servers at this organization. It is all Linux based, and so I've been becoming a Linux admin, among other duties. + +**Mike:** +_Wow, that sounds challenging!_ + +**Steven:** +It's challenging alright. Especially when you don't have years and years of experience with it. But what I have is knowledge of PowerShell, and they did not have a problem with me putting PowerShell on a couple of servers. I'm using that to my advantage as a Linux admin, so that's what I'm gonna be talking about. + +Also, I'm teaming up with Jason Helmick for another talk. We'll be discussing how to quickly and securely manage your resources using Azure Cloud Shell. It's gonna be a talk about Azure Cloud Shell. But guess what? It's based on Linux too! So I'll be doing two Linux talks at this Summit. + +**Mike:** +_Any specific topics or people you're excited to see at Summit this year?_ + +**Steven:** +I think what I'm looking forward to the most is seeing how many dad jokes I can pepper people with. You know, whether it's in conversation or my presentations or whatever, 'cause that's just what I love to do. + +I haven't bothered looking at the schedule yet to see which talks I'll go to because I know there'll be some stupid one-hour block where four of my friends are speaking at the same time and I'll have to make a terrible decision. I know it's gonna happen, so I haven't bothered looking since I don't want to feel overwhelmed while I'm working on my presentations. + +**Mike:** +_I can relate so much to what you just said. I keep forgetting about this thing every year. Ugh, it's so hard to decide what to go to. You forget that every hour of demos is FOUR great choices. It's torture. You want to see everything, but you have to pick just one session. You know, I'll be like, "I'm going to session A," but then I run into someone in the hall right before a session starts and they're like, "No way! You HAVE to see this next session!" and then I make some last-minute change. That's Summit in a nutshell, if you ask me. There are so many tough choices._ + +_Got any special plans for your sticker game on this trip?_ + +**Steven:** +I have a brand new, never before seen sticker design. And I have some swag I have been stockpiling because I love that kind of stuff. + +**Mike:** +_I need one of those stickers! Will "Travel Piggy" and the Billboard Hat be making it to Summit as well?_ + +**Steven:** +If I'm there and they're not, something has gone completely off the rails. Travel Piggy is super pumped for the Summit. He always has a bag ready to go traveling. He's all set and itching to go and start posting his adventures on Twitter to @travelpiggie. Plus, I know where the batteries and controller are for my hat. + +**Mike:** +_That's amazing! Thanks a bunch for spending time with me and sharing your thoughts with the readers!_ + +**Steven:** +Thanks for having me. This was so much fun, and I know Summit will be too. I can't wait to go! + +If you're planning on going to Summit, be sure to say hi to Steven Judd and think about attending one of his three sessions. He's the perfect example of why the Summit experience is so unique and fun! Stay tuned for more chats with Summit speakers! diff --git a/content/articles/2024/09/_index.md b/content/articles/2024/09/_index.md new file mode 100644 index 000000000..8367ac24f --- /dev/null +++ b/content/articles/2024/09/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from September 2024" +description: "PowerShell.org Articles published in September 2024." +--- diff --git a/content/articles/2024/09/powershell-devops-global-summit-2025-call-for-papers-now-open/index.md b/content/articles/2024/09/powershell-devops-global-summit-2025-call-for-papers-now-open/index.md new file mode 100644 index 000000000..ed5f98e66 --- /dev/null +++ b/content/articles/2024/09/powershell-devops-global-summit-2025-call-for-papers-now-open/index.md @@ -0,0 +1,125 @@ +--- +url: /articles/2024-09-30-powershell-devops-global-summit-2025-call-for-papers-now-open/ +title: "PowerShell + DevOps Global Summit 2025: Call for Papers Now Open!" +authors: + - James Petty +date: "2024-09-30T17:36:14+00:00" +categories: + - Announcements + - DevOps + - Events +tags: + - PowerShell Summit + - Call for Speakers +legacy_featured_image: /wp-content/uploads/2024/09/Untitled-1-e1727199856490.png +aliases: + - /2024/09/powershell-devops-global-summit-2025-call-for-papers-now-open/ +--- + +# PowerShell + DevOps Global Summit 2025: Call for Papers Now Open! + +Calling all innovators, problem-solvers, and thought leaders in the PowerShell and DevOps realm! The stage is set for the most anticipated event of 2025, and we want you to be a part of it. The PowerShell + DevOps Global Summit 2025 is now accepting session proposals, and this is your moment to shine. From **April 7-10, 2025**, in Bellevue, WA, the brightest minds in automation and DevOps will converge to share knowledge, challenge the status quo, and push the boundaries of what's possible. Whether you're a seasoned expert or a rising star with fresh perspectives, we invite you to submit your ideas and help shape the future of our industry. + +## What We're Looking For + +The Summit is seeking innovative and engaging presentations on a wide range of topics, including: + + * PowerShell: Novel approaches and advanced techniques + * Automation Integrations: PowerShell with tools like Ansible, Terraform, IoT + * DevOps Practices: CI/CD, Infrastructure-as-Code, DevSecOps + * Cross-Platform Automation + * Cloud Computing: PowerShell in Azure, AWS, and beyond + * Real-World Solutions and Case Studies + * Advanced (400-level) Deep Dives + * Security-Related Topics + * Soft Skills & Career Growth + * Next-Level Sessions: Innovative approaches solving unique problems + +## Session Types and Speaker Benefits + +This year, we are offering four types of sessions, each designed to provide unique value to our attendees. Here is a detailed breakdown of each session type: + +### 1. Fast Focus (25 minutes) + + * **Description**: These are short, impactful talks designed to deliver one key idea or concept. They're perfect for concise, focused topics that do not require a full-length session. + * **Speaker Requirement**: Speakers must commit to delivering at least two Fast Focus sessions to qualify for speaker benefits. + * **Honorarium**: $250 per speaker + +### 2. 45-Minute Breakout Sessions + + * **Description**: These are our traditional sessions, providing ample time to thoroughly cover a topic. Ideal for in-depth explanations, demonstrations, or discussions on specific PowerShell or DevOps concepts. + * **Honorarium**: $500 per speaker + +### 3. 90-Minute Deep Dives + + * **Description**: These workshop-style sessions allow for deeper exploration of a subject. Theyare perfect for complex topics that require more time for explanation, hands-on examples, or extensive Q&A. + * **Honorarium**: $1,000 per speaker + +### 4. 4-Hour Hands-On Labs + + * **Description**: These extended, practical sessions provide attendees with an immersive learning experience. Speakers should prepare materials for participants to follow along, allowing for active engagement with the subject matter. + * **Speaker Requirement**: Pre-prepared materials for participants are essential. + * **Honorarium**: $2,000 per speaker + +**Important Notes for All Session Types**: + + * All sessions must be delivered in person at the conference site. + + * Sessions must be presented in English at a minimum. + + * If co-presenting, benefits will only be extended to the primary speaker listed on the submission unless otherwise agreed upon in advance. + +## Selection Process: Ensuring Fairness and Quality + +This year, we are implementing a robust two-round selection process designed to ensure fairness, diversity, and the highest quality of content for our attendees. Here's how it works: + +### Round 1: Blind Review + +In the first round, all submissions will undergo a blind review. This means: + + * All identifying information (names, companies, etc.) will be removed from the proposals. + * Reviewers will evaluate each submission solely on its content, relevance, and potential value to attendees. + * Proposals will be rated on a Yes/No/Maybe scale. + +**Why Blind Review?** +We have implemented this blind review process to address and minimize selection bias. By removing identifying information, we ensure that: + + 1. Each proposal is judged on its merits alone, not on the reputation or background of the speaker. + 2. New voices and fresh perspectives have an equal opportunity to be heard. + 3. We reduce unconscious biases related to gender, ethnicity, or organizational affiliation. + +This approach helps us discover hidden gems and ensures a diverse range of speakers and topics. + +### Round 2: Comparison + +After the blind review: + + * Proposals will be compared based on their scores from the first round. + * Additional factors such as topic balance, audience interest, and overall program coherence will be considered. + * Final selections will be made to create a well-rounded, high-quality program. + +**Why Two Rounds?** +The two-round process allows us to: + + 1. First focus solely on content quality and relevance (Round 1). + 2. Then consider the broader context of the entire conference program (Round 2). + +This approach helps us build a conference schedule that not only features the best individual sessions but also creates a cohesive and comprehensive experience for all attendees. + +We believe this selection process will result in a diverse, engaging, and high-quality program that represents the best of the PowerShell and DevOps community. It aligns with our commitment to fairness, inclusion, and excellence in content curation. + +## Important Details + + * All sessions must be delivered in person and in English + * The CFP closes on **November 15, 2024** + * Review all travel and speaker benefit information before submitting + +This is your chance to contribute to the PowerShell and DevOps community, share your knowledge, and connect with like-minded professionals. Whether you're a seasoned speaker or considering your first presentation, we encourage you to submit your ideas. + +Don not miss this opportunity to be part of the PowerShell + DevOps Global Summit 2025. Submit your proposal now and help shape the future of automation and DevOps! + +[Submit your sessions today][1] + +For full details and to submit your proposal, visit the official CFP page. We can not wait to see what innovative ideas you will bring to the Summit! + + [1]: https://sessionize.com/pshsummit25 "Submit your sessions today" diff --git a/content/articles/2024/12/_index.md b/content/articles/2024/12/_index.md new file mode 100644 index 000000000..9d7d77e9f --- /dev/null +++ b/content/articles/2024/12/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from December 2024" +description: "PowerShell.org Articles published in December 2024." +--- diff --git a/content/articles/2024/12/onramp-scholarship-application-now-open/index.md b/content/articles/2024/12/onramp-scholarship-application-now-open/index.md new file mode 100644 index 000000000..5bd83ac25 --- /dev/null +++ b/content/articles/2024/12/onramp-scholarship-application-now-open/index.md @@ -0,0 +1,94 @@ +--- +url: /articles/2024-12-02-onramp-scholarship-application-now-open/ +title: OnRamp Scholarship Application Now Open +authors: + - James Petty +date: "2024-12-02T15:20:46+00:00" +categories: + - Announcements +tags: + - OnRamp + - PowerShell Summit + - Scholarships +aliases: + - /2024/12/onramp-scholarship-application-now-open/ +--- + +# Scholarship Applications Now Open for the OnRamp Program at the PowerShell + DevOps Global Summit! + +Are you an entry-level IT professional looking for an immersive introduction to PowerShell, DevOps, and the broader tech community? The **OnRamp program** at the PowerShell + DevOps Global Summit is designed just for you, and scholarship applications are now open! + +This is your chance to take part in a transformative experience, where you’ll gain technical skills, learn from industry experts, and connect with a thriving community. + +* * * + +## **What is the OnRamp Program?** + +The OnRamp program is a dedicated track within the PowerShell + DevOps Global Summit. It’s tailored for individuals at the beginning of their IT careers, providing: + + * Hands-on learning in PowerShell and DevOps technologies. + * Development of essential soft skills for IT professionals. + * Guidance and mentorship from experienced instructors and community members. + +This program seamlessly integrates classroom learning with keynotes, general sessions, and social events at the Summit. + +* * * + +## **Who Should Apply?** + +The OnRamp program welcomes those who: + + * Are new to IT, with foundational certifications like CompTIA A+ or Cisco IT Essentials. + * Have basic knowledge of server administration (though no prior PowerShell experience is required). + * Are committed to building a career in IT. + * Represent diverse backgrounds, especially those from underrepresented groups in tech. + +* * * + +## **Scholarship Benefits** + +Thanks to The DevOps Collective, Inc., scholarship recipients will receive: + + * **Free admission** to the OnRamp track, covering all sessions, meals, and social events. + * **Five nights of lodging** near the Summit venue. + * **Round-trip US domestic airfare (coach)**. + * **Optional buddy pairing**, connecting you with an experienced attendee for mentorship and networking. + +* * * + +## **Requirements for Participation** + +To make the most of the OnRamp experience, you’ll need: + + * A laptop capable of running PowerShell 7+ and Visual Studio Code (VS Code). + * The PowerShell extension for VS Code installed before the event. + * Administrator rights on your laptop. + +All required software is free, and installation instructions are available on [PowerShellSummit.org][1]. + +* * * + +## **How to Apply for a Scholarship** + +If you’re ready to jumpstart your IT career, here’s what to do next: + + 1. **Review the OnRamp Brochure** for full details about the program. + 2. Complete the scholarship application form. + 3. Submit your application before the deadline. + +Scholarships are limited, so don’t wait! + +* * * + +## **Why Apply for OnRamp?** + +The OnRamp program is more than just a training session. It’s an invitation to join a vibrant, supportive community of professionals dedicated to helping you succeed in your IT journey. Whether you’re learning new skills or building a professional network, OnRamp equips you for a bright future in tech. + +* * * + +**Don’t miss this opportunity!** Visit [PowerShellSummit.org][2] to apply today and follow us on social media for updates. The deadline is approaching fast—secure your spot now! + +**Let’s build the future of IT together.** + + [1]: https://www.powershellsummit.org + [2]: https://www.powershellsummit.org/onramp diff --git a/content/articles/2024/_index.md b/content/articles/2024/_index.md new file mode 100644 index 000000000..3c261a501 --- /dev/null +++ b/content/articles/2024/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from 2024" +description: "PowerShell.org Articles published in 2024." +--- diff --git a/content/articles/2026-06-23-how-to-write-for-powershell-org.md b/content/articles/2026-06-23-how-to-write-for-powershell-org.md deleted file mode 100644 index 585d70940..000000000 --- a/content/articles/2026-06-23-how-to-write-for-powershell-org.md +++ /dev/null @@ -1,213 +0,0 @@ ---- -title: How to Write for PowerShell.org -authors: - - Gilbert Sanchez -date: 2026-06-23T00:00:00+00:00 -description: Two ways to submit an article to PowerShell.org, best practices that get you published faster, and why claiming an author page is worth five minutes of your time. -og_title: How to Write for PowerShell.org -og_description: Two ways to submit an article, best practices that get you published faster, and why claiming an author page is worth your time. -categories: - - Tutorials -tags: - - Contributing - - Community - - Writing -fmContentType: article ---- - -There's a thought that stops a lot of good articles: *who am I to write for -PowerShell.org?* - -It's our brains safety net from the (highly unlikely) possibility of getting -denied. Or worse! Accepted! And now we're forever on the hook to be an expert. -But it's not true. - -You don't need to be an **MVP**. You don't need a **blog**, a **following**, or -a **clever opinion** about the pipeline. You need one thing you figured out that -the documentation didn't explain well. The `-Filter` quirk that cost you and -afternoon. The script that finally tamed a chore you'd been doing by hand for a -year. If it helped you, it'll help someone else who's about to lose the same -afternoon. - -> [!IMPORTANT] -> And here's the part that should lower your blood pressure: **nothing you submit -> goes live unreviewed**. - -A maintainer reads every submission, helps shape it, and -edits for clarity and formatting before it publishes. You are not flipping a -switch that broadcasts your rough draft to the world. You're starting a -conversation with people who want you to succeed. - -So let's get you published. There are two ways in, so pick the one that matches -how comfortable you are with Git because both land in the same place. - -## Path A: The GitHub issue (no Git required) - -If "fork the repo" already made you tense up, this path is for you. You'll never -touch a command line. - -Open the [guest blog post -form](https://github.com/PowerShellOrg/PowerShellOrgWebsite/issues/new?template=guest-blog-post.yml) -and fill it out. The form does the structuring for you. It asks for exactly what -we need and nothing else: - -- **Article title** and **your name** as you'd like it displayed. -- **Submission type**, and this is the part people miss: you can choose *"Pitch - -- I'd like feedback before writing."* You don't have to show up with a - finished draft. Float the idea first, and a maintainer will tell you if it's a - fit and help you shape the angle before you spend the writing time. -- **Description**, one or two sentences. This becomes your SEO blurb and social - card, so it earns its keep. -- **Category** and **tags** (more on choosing these well below). -- **Article content**, where you paste your full Markdown if you have a draft. - Leave it blank if you're pitching. - -Submit it, and the rest happens in the issue thread. That's the whole path. No -branches, no merge conflicts, no Git vocabulary. - -## Path B: The pull request (for the Git-comfortable) - -If you already live in Git, you can submit the article directly and watch it -flow through the same review. - -1. Fork the repo and create a branch for your article. -2. Add a Markdown file in `content/articles/` using the date-slug naming - convention: - - ``` - content/articles/YYYY-MM-DD-your-article-slug.md - ``` - -3. Start it with this front matter: - - ```markdown - --- - title: "Your Article Title" - description: "A 1-2 sentence summary used for SEO, social cards, and the article list." - author: Your Name - authors: - - Your Name - date: "YYYY-MM-DDT00:00:00+00:00" - categories: - - Category Name - tags: - - tag1 - - tag2 - --- - - Your article in Markdown goes here. - ``` - -4. Open a pull request with a short description, and we'll review it there. - -> [!TIP] Let VS Code do the boring part! -> Install the [Front Matter CMS](https://frontmatter.codes/) extension, open the -> repo, and run **"Create content"** in the `content/articles` folder. It -> scaffolds the `YYYY-MM-DD-slug.md` filename and every front-matter field for -> you, and it gives you a form for the title, description, category, and tags -> instead of a wall of YAML you can typo. It turns the single most error-prone -> step into a fill-in-the-blanks. If you only adopt one tool from this article, -> make it this one. - -## Best practices that get you published faster - -None of these are gates. They're the small things that mean a maintainer spends -their time on your ideas instead of your formatting. - -- **Open by telling readers what they'll walk away with.** A two-sentence intro - that promises a payoff beats a warm-up paragraph every time. -- **Write in Markdown, and fence your code with a language hint.** Use ` - ```powershell ` so your samples get syntax highlighting instead of a gray - slab. -- **Run your code before you paste it.** A snippet that works on the first try - is the difference between a reader trusting you and a reader closing the tab. -- **Keep the title concrete.** "Speed up your console with PSReadLine predictive - IntelliSense" tells me what I'm getting. "PowerShell tips" tells me nothing. - -That's the bar. It's lower than the one in your head. - -## Categories and tags are how people find you - -It's tempting to treat these as paperwork and pick whatever's first in the list. -Don't. They're the difference between an article that's read once and one that -keeps getting found. - -Pick the single **category** that fits best. The current set: - -> Announcements - Books - DevOps - Events - Graph - In Case You Missed It - -> News - PowerShell Summit - PowerShell for Admins - PowerShell for Developers - -> Scripting Games - Tips and Tricks - Tools - Training - Tutorials - -Category is the big bucket. It's how someone browsing "PowerShell for Admins" -stumbles onto your piece months from now. **Tags** are the specific hooks: the -cmdlets, modules, and concepts your article actually touches (`psreadline`, -`regex`, `azure`, `pester`). Three to five honest, specific tags beat a dozen -vague ones. Tag what's really in the article, not every PowerShell word you can -think of, and your post surfaces next to its actual neighbors. - -## Claim your author page - -Once you're credited on an article, you can give yourself a real author page at -`/authors//`: an avatar, a tagline, a short bio, and links back to -your own site and socials. Every article you write points back to it. It's a -small, durable corner of the PowerShell community that's *yours*, and it builds -with each post. - -It's opt-in. Skip it and your byline still works exactly as before. But it takes -about five minutes, so why leave it on the table? You can see an example of mine -at the bottom. - -Your profile is a single file at `content/authors//_index.md`. The one -rule that trips people up: the `` has to match your byline exactly -(lowercased, spaces to hyphens), or the page attaches to nothing. - -So let the helper script handle it: - -{{< terminal lang="powershell" >}} -./tools/new-author.ps1 "Jane Doe" -{{< /terminal >}} - -That scaffolds `content/authors/jane-doe/_index.md` with every field commented. -Fill in what you want, delete the rest: - -```yaml ---- -title: "Jane Doe" # required -- keep this as your byline name -preferred_name: "Jane" # optional -- changes only how your name displays -tagline: "Cloud automation, mostly." -gravatar_hash: "..." # MD5 of your lowercased email -- keeps your email private -github: "https://github.com/janedoe" -website: "https://janedoe.dev" -# twitter / mastodon / linkedin / bluesky also supported ---- - -Your bio in Markdown goes here. -``` - -One thoughtful detail worth calling out: you can set an avatar **without** -putting your email address in a public repo. Store the MD5 hash of your -lowercased email as `gravatar_hash`, and Gravatar serves your picture while your -email stays private: - -{{< terminal lang="powershell" >}} -$email = "jane@example.com" -[System.BitConverter]::ToString( - [System.Security.Cryptography.MD5]::Create().ComputeHash( - [System.Text.Encoding]::UTF8.GetBytes($email.Trim().ToLowerInvariant()) - ) -).Replace("-", "").ToLowerInvariant() -{{< /terminal >}} - -And if your name ever changes, `./tools/new-author.ps1 "Old Name" -To "New Name"` -rewrites your byline across every article and adds a redirect so your old -profile URL keeps working. Open a PR with the result. - -## Your turn - -The whole point of PowerShell.org is that it's built by the people who use -PowerShell, and that includes you. You don't have to be sure it's good enough. -That's literally what the review is for. Pitch the idea, paste the draft, or -send the PR, and you won't be doing it alone. There's a community on the other -side of that submit button that wants to help you get it across the line. - -[Start here.](https://github.com/PowerShellOrg/PowerShellOrgWebsite/issues/new?template=guest-blog-post.yml) diff --git a/content/articles/2026-07-24-explore-micrograd-with-verso-and-powershell.md b/content/articles/2026-07-24-explore-micrograd-with-verso-and-powershell.md deleted file mode 100644 index 8c0757472..000000000 --- a/content/articles/2026-07-24-explore-micrograd-with-verso-and-powershell.md +++ /dev/null @@ -1,364 +0,0 @@ ---- -title: "Explore Micrograd with Verso and PowerShell" -description: "Use a PowerShell notebook in Verso to build a tiny reverse-mode automatic differentiation engine, visualize its computation graph, and train a small neural network." -author: Andrey Vernigora -authors: - - Andrey Vernigora -date: 2026-07-24T00:00:00+00:00 -categories: - - PowerShell for Developers -tags: - - powershell - - verso - - notebooks - - automatic-differentiation - - psgraphview ---- - -[Verso](https://github.com/DataficationSDK/Verso) is an open-source interactive -notebook platform and embeddable .NET execution engine. Its language kernels include -PowerShell, C#, F#, Python, SQL, JavaScript, TypeScript, and HTTP, and it provides -VS Code and browser front ends. - -That timing is useful for PowerShell users. The -[.NET Interactive repository](https://github.com/dotnet/interactive) was archived in -April 2026, leaving a gap for maintained multi-language .NET notebooks. Verso is an -actively developed option with persistent kernel state, rich output, cross-language -variable sharing, and headless notebook execution. - -This post walks through an -[experimental PowerShell micrograd notebook](https://github.com/DataficationSDK/Verso/blob/3f8629154a28824ad5fbd0eaca49c3ef57168704/samples/Notebooks/powershell/micrograd/micrograd-ps.verso) -built for Verso. The sample was proposed separately and is not currently part of -Verso's `main` branch, so treat it as an exploration rather than a shipped Verso -sample. - -The notebook ports the core ideas from Andrej Karpathy's -[micrograd](https://github.com/karpathy/micrograd) to PowerShell. The original -project is intentionally tiny: scalar-valued reverse-mode automatic differentiation, -then a small neural-network library on top. Karpathy's video, -[The spelled-out intro to neural networks and backpropagation: building micrograd](https://youtu.be/VMj-3S1tku0), -is effective because it does not hide the graph. The PowerShell version keeps that -spirit, using [PSQuickGraph](https://github.com/eosfor/PSGraph) and -[PSGraphView](https://github.com/eosfor/PSGraphView/tree/feature/direct-graphviz-integration) -to render the computation graph directly from objects created in the notebook. - -The diagrams in this article were generated by PowerShell from the same helper -scripts used by the notebook and exported as Graphviz SVG through PSGraphView. - -## Notebook Setup - -Install the Verso CLI and the two graph modules: - -```powershell -dotnet tool install --global Verso.Cli - -Install-Module -Name PSQuickGraph -RequiredVersion 2.5.0 -Scope CurrentUser -Install-Module -Name PSGraphView -RequiredVersion 0.1.0 -Scope CurrentUser -``` - -To open the exact experimental notebook used in this article, check out its commit -and pass the notebook path to Verso: - -```powershell -git clone https://github.com/DataficationSDK/Verso.git -Set-Location ./Verso -git checkout 3f8629154a28824ad5fbd0eaca49c3ef57168704 - -verso serve ./samples/Notebooks/powershell/micrograd/micrograd-ps.verso -``` - -The notebook starts with the normal module path: - -```powershell -Import-Module PSQuickGraph -Import-Module PSGraphView -``` - -The implementation is split into four scripts: - -- `value.ps1` defines the scalar `Value` class and operator overloads. -- `graphHelper.ps1` converts `Value` objects into graph vertices and renders them. -- `neuronHelper.ps1` defines `Neuron`, `Layer`, and `MLP`. -- `helpers.ps1` contains `Zip` and `Sum-Value`, small utilities used when building the loss. - -The notebook loads them directly: - -```powershell -. ./value.ps1 -. ./graphHelper.ps1 -. ./neuronHelper.ps1 -. ./helpers.ps1 -``` - -The key class is `Value`. Each instance stores `data`, `grad`, a `label`, the operation that produced it, the child values that fed into that operation, and a `backward` closure. That is the entire trick: normal arithmetic produces both a result and a tiny piece of local derivative logic. - -For addition, the derivative is one for both inputs: - -```powershell -static [Value] op_Addition([Value]$left, [Value]$right) { - $out = [Value]::new($left.data + $right.data, @($left, $right), "+", "+_res") - - $out.backward = { - $left.grad += 1 * $out.grad - $right.grad += 1 * $out.grad - }.GetNewClosure() - - return $out -} -``` - -For multiplication, each input receives the other input's data multiplied by the output gradient: - -```powershell -static [Value] op_Multiply([Value]$left, [Value]$right) { - $out = [Value]::new($left.data * $right.data, @($left, $right), "*", "*_res") - - $out.backward = { - $left.grad += $right.data * $out.grad - $right.grad += $left.data * $out.grad - }.GetNewClosure() - - return $out -} -``` - -`Tanh()` follows the same pattern, but the derivative is `1 - tanh(x)^2`: - -```powershell -[Value] Tanh(){ - $v = $this - $t = [Math]::Tanh($this.data) - $out = [Value]::new($t, @($this), "tanh") - - $out.backward = { - $v.grad += (1 - [Math]::Pow($t, 2)) * $out.grad - }.GetNewClosure() - - return $out -} -``` - -## Scalar Computation Graph - -The first notebook example is the same kind of scalar expression Karpathy uses to make backpropagation visible: - -```powershell -$a = [Value]::new( 2.0, 'a') -$b = [Value]::new(-3.0, 'b') -$c = [Value]::new(10.0, 'c') -$e = $a * $b; $e.label = 'e' -$d = $e + $c; $d.label = 'd' -$f = [Value]::new(-2.0, 'f') -$L = $d * $f; $L.label = 'L' -``` - -At this point `$L.data` is `-8`, and all gradients are still zero. The graph is created from the output value: - -```powershell -$scalarGraph = New-ExpressionGraph -val $L -Show-ExpressionGraph -Graph $scalarGraph -``` - -![Scalar expression before backpropagation; data values are populated and every gradient is zero](/images/articles/verso-micrograd-scalar-before.svg) - -`New-ExpressionGraph` walks from the output node back through `children`. It creates record-shaped nodes for values and ellipse-shaped nodes for operations. Because `Value` objects are actual object references, helper hashtables prevent duplicate vertices when a value is reached more than once. - -## Backpropagation Order - -Backpropagation is not run over the display graph. The notebook builds a second graph directly on the original `Value` objects: - -```powershell -$bpGraph = New-BackpropagationGraph -val $L -$L.grad = 1.0 - -Get-GraphTopologicalSort -Graph $bpGraph -Reverse | - ForEach-Object { $_.OriginalObject } | - ForEach-Object { & $_.backward } -``` - -The output gradient starts at `1.0`, because `dL/dL = 1`. Then `Get-GraphTopologicalSort -Reverse` visits the output first and walks backward toward the leaves. Each node executes the closure captured when the value was created. After the pass, the visualization graph is rebuilt so the display nodes get a fresh snapshot of `grad`. - -![The scalar expression after backpropagation; gradients show how each input changes L](/images/articles/verso-micrograd-scalar-after.svg) - -This is the important implementation detail: the graph is not just a drawing. It is the execution dependency structure for reverse-mode autodiff. - -## One Neuron - -The next cell builds a tiny neuron by hand: two inputs, two weights, a bias, and a `tanh` activation. - -```powershell -$x1 = [Value]::new(2.0, 'x1') -$x2 = [Value]::new(0.0, 'x2') - -$w1 = [Value]::new(-3.0, 'w1') -$w2 = [Value]::new(1.0, 'w2') -$b = [Value]::new(6.8813735870195432, 'b') - -$x1w1 = $x1 * $w1; $x1w1.label = 'x1*w1' -$x2w2 = $x2 * $w2; $x2w2.label = 'x2*w2' -$x1w1x2w2 = $x1w1 + $x2w2; $x1w1x2w2.label = 'x1*w1 + x2*w2' -$n = $x1w1x2w2 + $b; $n.label = 'n' -$o = $n.Tanh(); $o.label = 'o' -``` - -![A single tanh neuron before the backward pass](/images/articles/verso-micrograd-neuron-before.svg) - -Running the same topological backward pass from `$o` fills the gradients for the input, weights, bias, and intermediate values: - -```powershell -$bpNeuronGraph = New-BackpropagationGraph -val $o -$o.grad = 1.0 - -Get-GraphTopologicalSort -Graph $bpNeuronGraph -Reverse | - ForEach-Object { $_.OriginalObject } | - ForEach-Object { & $_.backward } -``` - -![The neuron after the tanh derivative has propagated through additions and multiplications](/images/articles/verso-micrograd-neuron-after.svg) - -This is where the notebook starts to feel useful as a teaching tool. You can inspect every scalar contribution to the neuron instead of treating the neuron as a black box. - -## Layer and MLP - -After the manual neuron, `neuronHelper.ps1` turns the same logic into classes. A `Neuron` owns an array of weights and a bias: - -```powershell -class Neuron { - [Value[]]$w - [Value]$b - - Neuron([int]$nin) { - $this.w = for ($i = 0; $i -lt $nin; $i++) { - [Value]::new(([Random]::Shared.NextDouble() * 2 - 1), "w$i") - } - - $this.b = [Value]::new(([Random]::Shared.NextDouble() * 2 - 1), "b") - } - - [Value] Invoke([Value[]]$x) { - $sum = $this.b - for ($i = 0; $i -lt $this.w.Count; $i++) { - $sum = $sum + ($this.w[$i] * $x[$i]) - } - - return $sum.Tanh() - } -} -``` - -A `Layer` applies several neurons to the same input vector. An `MLP` chains layers so each layer receives the output vector from the previous layer: - -```powershell -$x = @( - [Value]::new(2.0, 'x1') - [Value]::new(3.0, 'x2') - [Value]::new(-1.0, 'x3') -) - -$layer = [Layer]::new(3, 4) -$layer.Invoke($x) - -$net = [MLP]::new(3, @(4, 4, 1)) -$res = $net.Invoke($x) -$res -``` - -The notebook can render the full MLP expression graph too: - -```powershell -$netGraph = New-ExpressionGraph -val $res[0] -Show-ExpressionGraph -Graph $netGraph -rankdir 'TD' -``` - -That graph is intentionally not embedded here: it is already wide enough to be less readable in a blog post. The smaller scalar and neuron graphs make the mechanics clearer. - -## Training Data and Loss - -The training set is the small toy dataset from the micrograd walkthrough: - -```powershell -$xs = @( - @([Value]::new(2.0, 'x11'), [Value]::new( 3.0, 'x12'), [Value]::new(-1.0, 'x13')), - @([Value]::new(3.0, 'x21'), [Value]::new(-1.0, 'x22'), [Value]::new( 0.5, 'x23')), - @([Value]::new(0.5, 'x31'), [Value]::new( 1.0, 'x32'), [Value]::new( 1.0, 'x33')), - @([Value]::new(1.0, 'x41'), [Value]::new( 1.0, 'x42'), [Value]::new(-1.0, 'x43')) -) - -$ys = @( - [Value]::new( 1.0, 'y1'), - [Value]::new(-1.0, 'y2'), - [Value]::new(-1.0, 'y3'), - [Value]::new( 1.0, 'y4') -) -``` - -The loss is sum of squared errors: - -```powershell -$net = [MLP]::new(3, @(4, 4, 1)) - -$ypred = $xs | ForEach-Object { $net.Invoke($_)[0] } -$loss = Zip -Left $ys -Right $ypred | Sum-Value { - $diff = $_.Right - $_.Left - $diff * $diff -} -``` - -`Zip` pairs expected and predicted values. `Sum-Value` starts from a `Value` named `loss` and keeps adding selected terms. Because every subtraction, multiplication, and addition returns another `Value`, the loss is also a scalar root of a full computation graph. - -## One Training Step - -One optimization step follows the same shape as PyTorch, but without hiding anything: - -```powershell -foreach ($p in $net.parameters()) { - $p.grad = 0.0 -} -foreach ($row in $xs) { - foreach ($v in $row) { $v.grad = 0.0 } -} -foreach ($y in $ys) { - $y.grad = 0.0 -} - -$ypred = $xs | ForEach-Object { $net.Invoke($_)[0] } -$loss = Zip -Left $ys -Right $ypred | Sum-Value { - $diff = $_.Right - $_.Left - $diff * $diff -} - -$loss.grad = 1.0 -$bpLossGraph = New-BackpropagationGraph -val $loss - -Get-GraphTopologicalSort -Graph $bpLossGraph -Reverse | - ForEach-Object { $_.OriginalObject } | - ForEach-Object { & $_.backward } - -foreach ($p in $net.parameters()) { - $p.data += -0.1 * $p.grad -} -``` - -There are five phases: clear gradients, forward pass, loss construction, backward pass, parameter update. The learning rate is hard-coded as `0.1` because this is a notebook demo, not a training framework. - -## Training Loop - -The notebook repeats that step 200 times. A shorter 80-epoch run shows the same -behavior: the sum of squared errors falls rapidly and then continues to converge. - -![Training loss over 80 epochs](/images/articles/verso-micrograd-loss-history.svg) - -The final notebook cell renders the full loss graph after training: - -```powershell -$lossGraph = New-ExpressionGraph -val $loss -Show-ExpressionGraph -Graph $lossGraph -rankdir 'TD' -``` - -It is a useful stress test for `PSGraphView`, but it is too large for this page because it contains the complete scalar computation that produced the loss. That is also the point of micrograd: a neural network can be understood as a large scalar expression, and backpropagation is just the disciplined reverse walk over that expression. - -## Why This Matters - -The important part is not that PowerShell is the best language for building neural networks. It is not. The point is that Verso makes PowerShell notebooks feel real again after the end of .NET Interactive, and the PowerShell kernel can now do the things notebook users expect: long-running host output, cancellation, persistent state, rich display, and ordinary module-based workflows. - -For infrastructure engineers, that matters. The same mechanics used here for micrograd graphs apply to dependency graphs, Azure topology, policy validation, incident analysis, and any other workflow where PowerShell produces structured objects and the notebook should make those objects visible. diff --git a/content/articles/2026-07-24-validate-azure-resource-relationships-with-psrule-and-powershell-graphs.md b/content/articles/2026-07-24-validate-azure-resource-relationships-with-psrule-and-powershell-graphs.md deleted file mode 100644 index 581b82595..000000000 --- a/content/articles/2026-07-24-validate-azure-resource-relationships-with-psrule-and-powershell-graphs.md +++ /dev/null @@ -1,228 +0,0 @@ ---- -title: "Validate Azure Resource Relationships with PSRule and PowerShell Graphs" -description: "Learn how to combine PSRule for Azure with PSQuickGraph to validate relationships that span multiple Bicep resources, such as VNet integration and private endpoint connectivity." -author: Andrey Vernigora -authors: - - Andrey Vernigora -date: 2026-07-24T00:00:00+00:00 -categories: - - DevOps -tags: - - psrule - - azure - - bicep - - graph - - infrastructure-as-code ---- - -PSRule for Azure makes it straightforward to validate the properties of individual -resources before deployment. But some architecture requirements describe a -relationship, not a property: every Function App must connect to the expected virtual -network, or every application must have exactly one private endpoint. - -This article shows how to collect those relationships in a PowerShell graph while -PSRule processes a Bicep deployment, then validate the completed graph at the end of -the pipeline. - -## Why per-resource rules are not enough - -Consider an architecture with a Function App, a virtual network, an integration -subnet, and a private endpoint subnet. We can easily write rules that check: - -- whether the Function App has public access disabled; -- whether the virtual network uses the correct address space; -- whether the expected subnets exist. - -Those checks still do not prove that the Function App is connected to the correct -subnet or that its private endpoint belongs to the expected virtual network. The -required information is spread across several expanded ARM resources. - -A graph is a natural representation of this problem: - -- resources and subnets become vertices; -- references between them become edges; -- an architecture requirement becomes a path or edge-count assertion. - -## Prepare PSRule and the graph module - -The example uses -[PSRule.Rules.Azure](https://github.com/Azure/PSRule.Rules.Azure) to expand and -analyze Bicep and -[PSQuickGraph](https://github.com/eosfor/PSGraph) to build the dependency graph. - -```powershell -Install-Module -Name PSRule.Rules.Azure -Scope CurrentUser -Install-Module -Name PSQuickGraph -Scope CurrentUser - -Import-Module PSQuickGraph -``` - -In `ps-rule.yaml`, enable Bicep expansion and include the convention that will collect -relationships: - -```yaml -include: - module: - - PSRule.Rules.Azure - - PSQuickGraph - -convention: - include: - - FullConnectivityTest - -configuration: - AZURE_BICEP_FILE_EXPANSION: true -``` - -## Collect relationships with a convention - -A PSRule -[convention](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Conventions/) -can run custom PowerShell at different stages of the pipeline. Its `Process` block -runs once for each input object, while its `End` block runs after all objects have -been processed. - -That lifecycle gives us a convenient two-phase approach: - -1. Add every relevant resource and relationship to a graph. -2. Validate the graph only after the complete deployment has been seen. - -The following is a simplified version of the convention. The example uses -child-to-parent edges so a valid dependency chain ends at the virtual network. - -```powershell -$global:vnetId = $null -$global:webSites = @() -$global:connectionGraph = New-Graph -$global:privateEndpointGraph = New-Graph - -Export-PSRuleConvention 'FullConnectivityTest' -Process { - if ($TargetObject.Type -eq 'Microsoft.Network/virtualNetworks') { - $global:vnetId = $TargetObject.Id - - foreach ($subnetResource in $TargetObject.Resources) { - Add-Edge ` - -From $subnetResource.Id ` - -To $TargetObject.Id ` - -Graph $global:connectionGraph - - Add-Edge ` - -From $subnetResource.Id ` - -To $TargetObject.Id ` - -Graph $global:privateEndpointGraph - } - } - - if ($TargetObject.Type -eq 'Microsoft.Web/sites') { - $vnetIntegration = $TargetObject.Resources | - Where-Object Type -eq 'Microsoft.Web/sites/networkConfig' - - $global:webSites += $TargetObject.Id - - Add-Edge ` - -From $TargetObject.Id ` - -To $vnetIntegration.Properties.SubnetResourceId ` - -Graph $global:connectionGraph - } - - if ($TargetObject.Type -eq 'Microsoft.Network/privateEndpoints') { - Add-Edge ` - -From $TargetObject.Id ` - -To $TargetObject.Properties.Subnet.Id ` - -Graph $global:privateEndpointGraph - - foreach ($connection in $TargetObject.Properties.PrivateLinkServiceConnections) { - Add-Edge ` - -From $connection.Properties.PrivateLinkServiceId ` - -To $TargetObject.Id ` - -Graph $global:privateEndpointGraph - } - } -} -End { - # The completed graphs are validated here. -} -``` - -The sample uses global variables because the state must remain available across -PSRule callback invocations. In a larger rule set, wrap this state in a single object -and reset it before each run. - -## Validate complete dependency paths - -Once PSRule reaches the `End` block, every relevant Bicep resource has been expanded -and processed. We can now ask questions about the deployment as a whole. - -For example, the following check confirms that every Function App has a VNet -integration path: - -```powershell -foreach ($webApp in $global:webSites) { - $path = Get-GraphPath ` - -From $webApp ` - -To $global:vnetId ` - -Graph $global:connectionGraph - - if ($null -eq $path) { - throw "No VNet integration path was found for Function App: $webApp" - } -} -``` - -We can apply the same idea to private endpoint connectivity: - -```powershell -foreach ($webApp in $global:webSites) { - $path = Get-GraphPath ` - -From $webApp ` - -To $global:vnetId ` - -Graph $global:privateEndpointGraph - - if ($null -eq $path) { - throw "No private endpoint path was found for Function App: $webApp" - } -} -``` - -Throwing from the `End` block causes the validation run to fail. This works well in -CI, although it does not produce the same detailed assertion output as a normal -PSRule `Rule` block. - -Run the rules against the Bicep entry point with: - -```powershell -Invoke-PSRule -Format File -InputPath ./deployments/non-prod/main.bicep -``` - -## Export the graph for troubleshooting - -The same model used for validation can produce a diagram. This is particularly -helpful when a CI check reports a missing path and you need to see which relationship -was absent. PSQuickGraph can export the graph in Graphviz DOT format; the -[Graphviz](https://graphviz.org/download/) `dot` executable can then render it as SVG. - -```powershell -Export-Graph ` - -Graph $global:privateEndpointGraph ` - -Format Graphviz ` - -Path ./output/private-endpoints.dot - -& dot ` - -Tsvg ./output/private-endpoints.dot ` - -o ./output/private-endpoints.svg -``` - -![An Azure Function App connected through a private endpoint and subnet to a virtual network](/images/articles/psrule-azure-resource-relationships.svg) - -This separates the solution into three clear steps: - -1. PSRule expands Bicep into resource objects. -2. A convention converts cross-resource references into graph edges. -3. Graph queries validate the architecture after all resources are available. - -The result complements normal per-resource rules instead of replacing them. Use -regular PSRule assertions for local properties and graph assertions for requirements -that span the deployment. - -A complete Bicep project, PSRule configuration, architecture document, and runnable -Codespaces environment are available in the -[psrule-demo repository](https://github.com/eosfor/psrule-demo). diff --git a/content/articles/2026-08-22-analyze-dependencies-with-psquickgraph-and-psgraphview.md b/content/articles/2026-08-22-analyze-dependencies-with-psquickgraph-and-psgraphview.md deleted file mode 100644 index d03683399..000000000 --- a/content/articles/2026-08-22-analyze-dependencies-with-psquickgraph-and-psgraphview.md +++ /dev/null @@ -1,370 +0,0 @@ ---- -title: "Analyze Dependencies with PSQuickGraph and PSGraphView" -description: "Build a dependency graph from PowerShell objects, trace paths and blast radius, calculate a safe deployment order, and render the same model as diagrams and a design structure matrix." -author: Andrey Vernigora -authors: - - Andrey Vernigora -date: 2026-08-22T00:00:00+00:00 -categories: - - Graph -tags: - - powershell - - psquickgraph - - psgraphview - - dependency-graphs - - graphviz ---- - -PowerShell is excellent at collecting objects. The harder question often comes -one step later: how are those objects related? - -A table can tell us that an Orders API uses a database, a message broker, and a -vault. It is much less useful when we need to answer questions such as: - -- What will be affected if Azure Service Bus is unavailable? -- Why does the customer-facing application depend on Key Vault? -- In what order should the platform be deployed or migrated? -- Where are the cycles and tightly coupled groups when the model grows? - -Those are graph questions. [PSGraph](https://github.com/eosfor/PSGraph) provides -the graph model and algorithms through the `PSQuickGraph` PowerShell module. The -sibling [PSGraphView](https://github.com/eosfor/PSGraphView) module renders those -models as Graphviz, Vega, MSAGL, and design structure matrix views. - -This article builds one small platform model and uses it for several jobs. The -point is not the fictional architecture. The point is that the same native -PowerShell objects can support automation, analysis, and documentation without -maintaining three separate models. - -## Two modules with different jobs - -The naming is worth explaining before installing anything: - -| Name | Responsibility | -| --- | --- | -| `PSGraph` | The project and GitHub repository. | -| `PSQuickGraph` | The installable module for graph objects, algorithms, GraphML, Graphviz/DOT export, and DSM analysis. | -| `PSGraphView` | The installable visualization module for Graphviz, Vega, MSAGL, and DSM output. | - -`PSQuickGraph` is not the Microsoft Graph API, and it is not the older Graphviz -DSL module named `PSGraph`. Its focus is an object graph that can be queried and -passed through PowerShell pipelines. - -The examples below use the current prerelease pair because the renderer split is -new. Pinning the versions makes the article reproducible: - -```powershell -Install-PSResource ` - -Name PSQuickGraph ` - -Version 2.6.0-beta1 ` - -Prerelease ` - -Scope CurrentUser - -Install-PSResource ` - -Name PSGraphView ` - -Version 0.2.0-beta1 ` - -Prerelease ` - -Scope CurrentUser - -Import-Module PSQuickGraph -RequiredVersion 2.6.0 -Import-Module PSGraphView -RequiredVersion 0.2.0 -``` - -If you only need graph construction and algorithms, `PSGraphView` is optional. - -## Model a platform with ordinary objects - -The sample inventory contains applications, services, workers, shared platform -services, databases, and observability. There is no required vertex class in the -calling code; each item is a normal `PSCustomObject`: - -```powershell -$services = @( - [pscustomobject]@{ Name = 'Customer Portal'; Kind = 'Application'; Team = 'Experience' } - [pscustomobject]@{ Name = 'Admin Portal'; Kind = 'Application'; Team = 'Operations' } - [pscustomobject]@{ Name = 'Orders API'; Kind = 'Service'; Team = 'Orders' } - [pscustomobject]@{ Name = 'Inventory API'; Kind = 'Service'; Team = 'Inventory' } - [pscustomobject]@{ Name = 'Billing Worker'; Kind = 'Worker'; Team = 'Billing' } - [pscustomobject]@{ Name = 'Notification Worker'; Kind = 'Worker'; Team = 'Experience' } - [pscustomobject]@{ Name = 'Azure Service Bus'; Kind = 'Platform'; Team = 'Platform' } - [pscustomobject]@{ Name = 'Orders DB'; Kind = 'Data'; Team = 'Orders' } - [pscustomobject]@{ Name = 'Inventory DB'; Kind = 'Data'; Team = 'Inventory' } - [pscustomobject]@{ Name = 'Billing DB'; Kind = 'Data'; Team = 'Billing' } - [pscustomobject]@{ Name = 'Key Vault'; Kind = 'Platform'; Team = 'Platform' } - [pscustomobject]@{ Name = 'Application Insights'; Kind = 'Observability'; Team = 'Platform' } -) -``` - -Dependencies are data too. In this model an edge points from a consumer to its -dependency: `Orders API -> Orders DB` means that the API depends on the database. - -```powershell -$dependencies = @( - [pscustomobject]@{ From = 'Customer Portal'; To = 'Orders API'; Reason = 'HTTPS' } - [pscustomobject]@{ From = 'Customer Portal'; To = 'Inventory API'; Reason = 'HTTPS' } - [pscustomobject]@{ From = 'Admin Portal'; To = 'Orders API'; Reason = 'HTTPS' } - [pscustomobject]@{ From = 'Admin Portal'; To = 'Inventory API'; Reason = 'HTTPS' } - [pscustomobject]@{ From = 'Orders API'; To = 'Orders DB'; Reason = 'SQL' } - [pscustomobject]@{ From = 'Orders API'; To = 'Inventory API'; Reason = 'HTTPS' } - [pscustomobject]@{ From = 'Orders API'; To = 'Azure Service Bus'; Reason = 'AMQP' } - [pscustomobject]@{ From = 'Orders API'; To = 'Key Vault'; Reason = 'Secrets' } - [pscustomobject]@{ From = 'Inventory API'; To = 'Inventory DB'; Reason = 'SQL' } - [pscustomobject]@{ From = 'Inventory API'; To = 'Key Vault'; Reason = 'Secrets' } - [pscustomobject]@{ From = 'Billing Worker'; To = 'Azure Service Bus'; Reason = 'AMQP' } - [pscustomobject]@{ From = 'Billing Worker'; To = 'Billing DB'; Reason = 'SQL' } - [pscustomobject]@{ From = 'Billing Worker'; To = 'Key Vault'; Reason = 'Secrets' } - [pscustomobject]@{ From = 'Notification Worker'; To = 'Azure Service Bus'; Reason = 'AMQP' } - [pscustomobject]@{ From = 'Notification Worker'; To = 'Key Vault'; Reason = 'Secrets' } - [pscustomobject]@{ From = 'Customer Portal'; To = 'Application Insights'; Reason = 'Telemetry' } - [pscustomobject]@{ From = 'Admin Portal'; To = 'Application Insights'; Reason = 'Telemetry' } - [pscustomobject]@{ From = 'Orders API'; To = 'Application Insights'; Reason = 'Telemetry' } - [pscustomobject]@{ From = 'Inventory API'; To = 'Application Insights'; Reason = 'Telemetry' } - [pscustomobject]@{ From = 'Billing Worker'; To = 'Application Insights'; Reason = 'Telemetry' } - [pscustomobject]@{ From = 'Notification Worker'; To = 'Application Insights'; Reason = 'Telemetry' } -) -``` - -Build the graph in two passes. Explicitly adding vertices preserves isolated -services; adding only edges would omit objects that currently have no -relationships. - -```powershell -$serviceByName = @{} -$graph = New-Graph - -foreach ($service in $services) { - $serviceByName[$service.Name] = $service - $vertex = Add-Vertex -Graph $graph -Vertex $service -PassThru - $vertex.Metadata | - Add-Member -NotePropertyName Team -NotePropertyValue $service.Team -} - -foreach ($dependency in $dependencies) { - Add-Edge ` - -Graph $graph ` - -From $serviceByName[$dependency.From] ` - -To $serviceByName[$dependency.To] ` - -Tag $dependency.Reason | - Out-Null -} -``` - -The sample graph contains 12 vertices and 21 directed edges. The wrapper vertex -retains the original object in `OriginalObject`, so analysis results can return -to normal PowerShell processing at any time. - -## First view: the dependency map - -`PSQuickGraph` exports the model as DOT; `PSGraphView` asks Graphviz to lay it out -and return SVG. Keeping these steps separate is useful: algorithms can run on a -server that never renders an image, while a documentation build can apply its -own visual style. - -```powershell -$dot = Export-Graph ` - -Graph $graph ` - -Format Graphviz ` - -GraphScript { @{ rankdir = 'LR'; bgcolor = 'white' } } ` - -VertexScript { - @{ - shape = 'Record' - style = 'filled' - label = "{{ {0} | {1} }}" -f $_.Name, $_.Kind - } - } - -Export-GraphvizView ` - -InputObject $dot ` - -Renderer Dot ` - -As Svg ` - -OutputPath ./platform-dependencies.svg -``` - -![A consumer-to-dependency graph of the sample platform. Each record shows the component name and kind.](/images/articles/psgraphview-platform-dependencies.svg) - -A drawing is already useful for a design review, but the graph becomes more -valuable when it answers operational questions. - -## Immediate dependencies and dependents - -Because the edge direction is explicit, outgoing and incoming edges answer two -different questions: - -```powershell -$orders = $graph.Vertices | Where-Object Label -EQ 'Orders API' - -# What does Orders API require? -Get-OutEdge -Graph $graph -Vertex $orders | - ForEach-Object { $_.Target.OriginalObject } - -# What calls Orders API directly? -Get-InEdge -Graph $graph -Vertex $orders | - ForEach-Object { $_.Source.OriginalObject } -``` - -The result is still the inventory object, not display text. It can be grouped by -team, joined with ownership data, exported to CSV, or used to open incidents. - -## Explain a dependency with a path - -Knowing that two components are connected is not always enough. `Get-GraphPath` -returns the edge sequence that explains the relationship: - -```powershell -$from = $graph.Vertices | Where-Object Label -EQ 'Customer Portal' -$to = $graph.Vertices | Where-Object Label -EQ 'Key Vault' - -$path = Get-GraphPath -Graph $graph -From $from -To $to - -@($path.Source.Label) + $path[-1].Target.Label -``` - -For this model the result is: - -```text -Customer Portal -> Orders API -> Key Vault -``` - -This is useful in change reviews and incident response because it provides an -explanation, not just a Boolean answer. - -## Calculate blast radius - -Suppose Azure Service Bus is unavailable. Every vertex that can reach it through -consumer-to-dependency edges is transitively affected: - -```powershell -$serviceBus = $graph.Vertices | - Where-Object Label -EQ 'Azure Service Bus' - -$affected = $graph.Vertices | - Where-Object Label -NE $serviceBus.Label | - Where-Object { - Test-GraphPath -Graph $graph -From $_ -To $serviceBus - } | - Sort-Object Label - -$affected.OriginalObject -``` - -![Azure Service Bus and every direct or transitive consumer are marked with a bold border and a warning marker.](/images/articles/psgraphview-service-bus-impact.svg) - -The result includes both direct consumers and applications affected indirectly: - -```text -Admin Portal -Billing Worker -Customer Portal -Notification Worker -Orders API -``` - -`Get-InEdge` finds immediate consumers. `Test-GraphPath` also finds portals that -depend on Service Bus indirectly through Orders API. - -## Derive a deployment order - -The same graph can become an execution plan. With consumer-to-dependency edges, -reversing the topological order puts dependencies before their consumers: - -```powershell -$deploymentOrder = Get-GraphTopologicalSort ` - -Graph $graph ` - -Reverse - -$deploymentOrder | - Select-Object -ExpandProperty OriginalObject | - Select-Object Name, Kind, Team -``` - -The result starts with shared dependencies and ends with applications: - -```text -Azure Service Bus -Orders DB -Key Vault -Inventory DB -Billing DB -Application Insights -Inventory API -Billing Worker -Orders API -Notification Worker -Customer Portal -Admin Portal -``` - -Topological sorting is appropriate only for a directed acyclic graph. If two -services depend on each other, the sort fails rather than inventing a safe -order. That failure is useful evidence: the cycle needs an explicit migration -strategy or an architectural change. - -## When a node-link diagram becomes too dense - -Arrows work well for a dozen components. They become a hairball for a hundred. A -design structure matrix (DSM) represents the same edges as cells: the row is the -consumer and the column is its dependency. - -`PSQuickGraph` creates and sequences the matrix; `PSGraphView` renders it: - -```powershell -$dsm = New-DSM -Graph $graph -$sequencedDsm = Start-DSMSequencing ` - -Dsm $dsm ` - -LoopDetectionMethod Condensation - -Export-DSMView ` - -SequencedDsm $sequencedDsm ` - -Renderer DsmVegaMatrix ` - -As Json ` - -Path ./dependency-matrix.json -``` - -![A sequenced design structure matrix of the same platform. Filled cells map consumers to dependencies without crossing edges.](/images/articles/psgraphview-dependency-matrix.svg) - -The Vega renderer produces an interactive matrix whose row and column labels can -be highlighted on hover. The static image above uses the same Vega specification -for the article page. For larger models, `Start-DSMClustering` can group strongly -related components before rendering. That makes the matrix useful for finding -candidate service boundaries, not merely documenting the current state. - -## Other scenarios for the same pattern - -Only the data collection step changes between domains. The graph workflow -remains: collect objects, create stable vertices, add directed relationships, -ask questions, then choose a view. - -- **Security events:** connect processes, users, hosts, files, and network - destinations to reconstruct a suspicious chain. -- **Network policy:** turn accepted and rejected firewall flows into host and - port relationships. -- **Infrastructure as code:** model semantic Bicep dependencies and validate - cross-resource relationships, as shown in - [Validate Azure Resource Relationships with PSRule and PowerShell Graphs](/articles/2026-07-24-validate-azure-resource-relationships-with-psrule-and-powershell-graphs/). -- **Web diagnostics:** connect pages to scripts, APIs, and third-party origins - discovered through Chrome DevTools Protocol. -- **Execution graphs:** use topological order to evaluate a computation graph, - as shown in - [Explore Micrograd with Verso and PowerShell](/articles/2026-07-24-explore-micrograd-with-verso-and-powershell/). - -These examples look different on screen, but the useful questions are the same: -what depends on this, how did we get there, what order is valid, and where is the -system too tightly coupled? - -## Takeaways - -`PSQuickGraph` is most useful when a diagram is not the final product. The graph -can drive impact reports, validation, deployment ordering, and incident -analysis. `PSGraphView` then turns that same tested model into the representation -that fits the audience: a familiar node-link diagram, an interactive view, or a -dense DSM. - -The practical pattern is small: - -1. Keep vertices as domain objects with stable names or IDs. -2. Decide and document the edge direction. -3. Use algorithms before reaching for visualization. -4. Render from the same model instead of maintaining diagrams by hand. - -Once relationships become first-class data, PowerShell can do much more than -draw boxes and arrows. diff --git a/content/articles/2026-09-03-powershell-can-put-pictures-in-your-terminal-with-sixel.md b/content/articles/2026-09-03-powershell-can-put-pictures-in-your-terminal-with-sixel.md deleted file mode 100644 index d5100f531..000000000 --- a/content/articles/2026-09-03-powershell-can-put-pictures-in-your-terminal-with-sixel.md +++ /dev/null @@ -1,219 +0,0 @@ ---- -title: "PowerShell Can Put Pictures in Your Terminal with SIXEL" -description: "Render PNG, JPEG, and SVG images inside iTerm2 with a PowerShell cmdlet and SIXEL, with a tested macOS demo and an invitation to try Windows Terminal." -author: Andrey Vernigora -authors: - - Andrey Vernigora -date: "2026-09-03T00:00:00+00:00" -categories: - - Tools -tags: - - powershell - - sixel - - iterm2 - - windows-terminal - - terminal-graphics ---- - -PowerShell normally sends text and objects to a terminal. This experiment sends an image. - -```powershell -Out-Sixel -Path ./sixel-demo.svg -Width 480 -``` - -Instead of opening Preview or a browser, the command decodes the SVG, converts it into a palette, and writes a stream of terminal escape sequences. iTerm2 interprets those sequences and paints the image directly between the command and the next prompt. - -This is mostly for fun. It is also a useful reminder that a terminal is a protocol endpoint, not merely a grid of characters. - -> [!NOTE] -> **Tested environment:** macOS 26.6.2, iTerm2 3.6.11, PowerShell 7.6.1, Apple Silicon. -> -> The direct iTerm2 session is the tested path in this article. No tmux or screen sits between PowerShell and the terminal. - -![Out-Sixel rendering an SVG directly inside a PowerShell session in iTerm2](/images/articles/powershell-sixel/out-sixel-iterm.gif) - -The recording above is a real iTerm2 session. The command reads the SVG, writes SIXEL escape sequences to the terminal, and returns to the PowerShell prompt after iTerm2 renders the image. - -![The PowerShell plus SIXEL SVG used by the terminal demo](/images/articles/powershell-sixel/sixel-demo.svg) - -The image above is the source file used in the recording. [Download the demo SVG](/images/articles/powershell-sixel/sixel-demo.svg) and save it as `sixel-demo.svg` to run the opening command. - -## What is SIXEL? - -[SIXEL](https://vt100.net/docs/vt3xx-gp/chapter14.html) is a bitmap graphics format originally used by DEC terminals and printers. The name comes from its basic unit: a character represents a vertical group of six pixels. - -A SIXEL image is still text from the process's point of view. It begins with a device-control escape sequence, contains a palette and encoded pixel bands, and ends with a string terminator. A compatible terminal recognizes that stream as graphics rather than printable characters. - -That old design has one property that remains attractive: the image travels over the same channel as terminal output. There is no separate window, web server, or GUI API. - -## The PowerShell experiment - -The command is part of an experimental C# port of [libsixel](https://github.com/saitoha/libsixel). My [C# port repository](https://github.com/eosfor/libsixel) contains a small PowerShell module whose public surface is the compiled `Out-Sixel` cmdlet. - -Install the exact [LibSixel.PowerShell 0.2.0-beta2](https://github.com/eosfor/libsixel/releases/tag/v0.2.0-beta2) prerelease used by this article from PowerShell Gallery: - -```powershell -Install-Module ` - -Name LibSixel.PowerShell ` - -RequiredVersion '0.2.0-beta2' ` - -AllowPrerelease ` - -Scope CurrentUser - -Import-Module LibSixel.PowerShell -``` - -Then confirm that PowerShell can see the compiled cmdlet: - -```powershell -Get-Command Out-Sixel -``` - -The cmdlet accepts PNG, JPEG, and SVG files: - -```powershell -Out-Sixel -Path ./photo.png -Out-Sixel -Path ./photo.jpg -Out-Sixel -Path ./diagram.svg -``` - -Large images should be resized before encoding. `-Width` and `-Height` accept pixel dimensions; specifying only one preserves the aspect ratio: - -```powershell -Out-Sixel -Path ./photo.jpg -Width 480 -Out-Sixel -Path ./diagram.svg -Height 260 -``` - -SIXEL uses a limited palette. The default is 256 colors, but a smaller palette can reduce the output considerably: - -```powershell -Out-Sixel -Path ./photo.jpg -Width 480 -Colors 64 -``` - -The result will not compete with a normal image viewer. That is part of the charm: the encoder applies color quantization and dithering, giving photographs a slightly retro character while diagrams usually remain crisp. - -## Render an SVG without creating a file - -`Out-Sixel` also recognizes SVG content arriving through the pipeline. This makes a self-contained demo possible: - -```powershell -$svg = @' - - - - - - - - - - PowerShell + SIXEL - - - no browser required - - -'@ - -$svg | Out-Sixel -Width 480 -``` - -This is an entertaining way to display a generated diagram or status card. It is not a replacement for structured PowerShell output: once data becomes pixels, the pipeline can no longer filter or sort it. - -## What happens inside the command? - -The path from a file to the terminal is deliberately small: - -```text -PNG / JPEG / SVG - | - v -SkiaSharp decode or SVG rasterization - | - v -RGBA pixel buffer - | - v -palette selection and dithering - | - v -SIXEL escape sequence - | - v -iTerm2 renders the pixels -``` - -SkiaSharp decodes PNG and JPEG inputs. `Svg.Skia` rasterizes SVG into the same RGBA representation. The ported libsixel code then selects a palette, applies dithering, and writes the SIXEL device-control string through `Host.UI`. - -The command can return that string instead of writing it to the terminal: - -```powershell -$sixel = Out-Sixel -Path ./diagram.svg -Width 480 -AsString - -[int][char]$sixel[0] -[int][char]$sixel[1] -``` - -The first two values are `27` and `80`: `ESC` followed by `P`, the beginning of a device-control string. - -## Exactly where does it work? - -Terminal support matters more than the shell prompt. The same `pwsh` command can display an image in one terminal and produce garbage in another. - -| Environment | Status for this experiment | -| --- | --- | -| **iTerm2 3.3 or newer on macOS** | Supported. This article was tested with iTerm2 3.6.11. | -| **PowerShell 7.4 or newer** | Required by the current `net8.0` module build. This article was tested with PowerShell 7.6.1. | -| **Windows Terminal 1.22 or newer** | SIXEL is supported by the terminal, and the module includes Windows Skia native assets. I have not tested this combination yet—please try it and report what you find. | -| **Windows PowerShell 5.1** | Not supported. It cannot load this `net8.0` module. | -| **macOS Terminal.app and the VS Code integrated terminal** | Not tested and not claimed as supported here. | -| **tmux and screen** | Outside the supported path. A multiplexer may filter the escape sequence or require its own SIXEL configuration. | - -[iTerm2 has supported SIXEL since its 3.3 release](https://iterm2.com/downloads/stable/iTerm2-3_3_0.changelog), and recent releases continue to fix SIXEL decoding. [Windows Terminal introduced support in version 1.22](https://devblogs.microsoft.com/commandline/windows-terminal-preview-1-22-release/). These version boundaries are about the terminal emulator; the module independently requires a modern PowerShell runtime. - -## Windows Terminal readers: please try this - -I deliberately kept the Windows claim separate from the macOS result. The renderer exists in Windows Terminal, and the module packages the Windows Skia native library, but a real end-to-end run is more valuable than an inference from two codebases. - -If you have Windows Terminal 1.22 or newer and PowerShell 7.4 or newer, try: - -```powershell -$PSVersionTable.PSVersion - -Get-AppxPackage Microsoft.WindowsTerminal | - Select-Object Name, Version - -Install-Module -Name LibSixel.PowerShell -RequiredVersion '0.2.0-beta2' -AllowPrerelease -Scope CurrentUser -Import-Module LibSixel.PowerShell - -# Use the inline $svg sample from the earlier section. -$svg | Out-Sixel -Width 480 -``` - -If it works, capture the terminal version, PowerShell version, architecture, and a screenshot. If it does not, the failure mode is just as useful: dependency loading, raw escape text, a blank area, or incorrect cursor placement point to different layers. - -## Limitations worth keeping - -This is an experiment, not a new universal image API for PowerShell. - -- SIXEL palettes contain at most 256 colors. -- Large images produce large terminal streams and can be slow over remote connections. -- Image placement and cursor behavior vary between terminal implementations. -- Multiplexers add another protocol layer and need separate testing. -- SVG text depends on fonts available to Skia on the machine doing the rasterization. -- The module is an experimental prerelease rather than a stable terminal graphics API. - -Those constraints keep the example honest, but they do not make it less fun. A generated architecture diagram, chart, QR code, or build badge appearing directly in a PowerShell session is still a delightful result from a protocol designed decades ago. - -## Takeaway - -The surprising part is not that PowerShell can read an image. The surprising part is that the ordinary terminal output channel can carry the image all the way to the screen. - -On macOS with iTerm2, that path works today: - -```text -PowerShell -> SIXEL -> iTerm2 -> pixels -``` - -Windows Terminal should provide the same path on Windows. If you test it, send the result. One successful screenshot—or one interesting failure—would make a useful follow-up to this little experiment. diff --git a/content/articles/2026/06/_index.md b/content/articles/2026/06/_index.md new file mode 100644 index 000000000..8d64ec6a9 --- /dev/null +++ b/content/articles/2026/06/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from June 2026" +description: "PowerShell.org Articles published in June 2026." +--- diff --git a/content/articles/2026/06/how-to-write-for-powershell-org/index.md b/content/articles/2026/06/how-to-write-for-powershell-org/index.md new file mode 100644 index 000000000..7be0e0a4c --- /dev/null +++ b/content/articles/2026/06/how-to-write-for-powershell-org/index.md @@ -0,0 +1,214 @@ +--- +url: /articles/2026-06-23-how-to-write-for-powershell-org/ +title: How to Write for PowerShell.org +authors: + - Gilbert Sanchez +date: 2026-06-23T00:00:00+00:00 +description: Two ways to submit an article to PowerShell.org, best practices that get you published faster, and why claiming an author page is worth five minutes of your time. +og_title: How to Write for PowerShell.org +og_description: Two ways to submit an article, best practices that get you published faster, and why claiming an author page is worth your time. +categories: + - Tutorials +tags: + - Contributing + - Community + - Writing +fmContentType: article +--- + +There's a thought that stops a lot of good articles: *who am I to write for +PowerShell.org?* + +It's our brains safety net from the (highly unlikely) possibility of getting +denied. Or worse! Accepted! And now we're forever on the hook to be an expert. +But it's not true. + +You don't need to be an **MVP**. You don't need a **blog**, a **following**, or +a **clever opinion** about the pipeline. You need one thing you figured out that +the documentation didn't explain well. The `-Filter` quirk that cost you and +afternoon. The script that finally tamed a chore you'd been doing by hand for a +year. If it helped you, it'll help someone else who's about to lose the same +afternoon. + +> [!IMPORTANT] +> And here's the part that should lower your blood pressure: **nothing you submit +> goes live unreviewed**. + +A maintainer reads every submission, helps shape it, and +edits for clarity and formatting before it publishes. You are not flipping a +switch that broadcasts your rough draft to the world. You're starting a +conversation with people who want you to succeed. + +So let's get you published. There are two ways in, so pick the one that matches +how comfortable you are with Git because both land in the same place. + +## Path A: The GitHub issue (no Git required) + +If "fork the repo" already made you tense up, this path is for you. You'll never +touch a command line. + +Open the [guest blog post +form](https://github.com/PowerShellOrg/PowerShellOrgWebsite/issues/new?template=guest-blog-post.yml) +and fill it out. The form does the structuring for you. It asks for exactly what +we need and nothing else: + +- **Article title** and **your name** as you'd like it displayed. +- **Submission type**, and this is the part people miss: you can choose *"Pitch + -- I'd like feedback before writing."* You don't have to show up with a + finished draft. Float the idea first, and a maintainer will tell you if it's a + fit and help you shape the angle before you spend the writing time. +- **Description**, one or two sentences. This becomes your SEO blurb and social + card, so it earns its keep. +- **Category** and **tags** (more on choosing these well below). +- **Article content**, where you paste your full Markdown if you have a draft. + Leave it blank if you're pitching. + +Submit it, and the rest happens in the issue thread. That's the whole path. No +branches, no merge conflicts, no Git vocabulary. + +## Path B: The pull request (for the Git-comfortable) + +If you already live in Git, you can submit the article directly and watch it +flow through the same review. + +1. Fork the repo and create a branch for your article. +2. Add a Markdown file in `content/articles/` using the date-slug naming + convention: + + ``` + content/articles/YYYY-MM-DD-your-article-slug.md + ``` + +3. Start it with this front matter: + + ```markdown + --- + title: "Your Article Title" + description: "A 1-2 sentence summary used for SEO, social cards, and the article list." + author: Your Name + authors: + - Your Name + date: "YYYY-MM-DDT00:00:00+00:00" + categories: + - Category Name + tags: + - tag1 + - tag2 + --- + + Your article in Markdown goes here. + ``` + +4. Open a pull request with a short description, and we'll review it there. + +> [!TIP] Let VS Code do the boring part! +> Install the [Front Matter CMS](https://frontmatter.codes/) extension, open the +> repo, and run **"Create content"** in the `content/articles` folder. It +> scaffolds the `YYYY-MM-DD-slug.md` filename and every front-matter field for +> you, and it gives you a form for the title, description, category, and tags +> instead of a wall of YAML you can typo. It turns the single most error-prone +> step into a fill-in-the-blanks. If you only adopt one tool from this article, +> make it this one. + +## Best practices that get you published faster + +None of these are gates. They're the small things that mean a maintainer spends +their time on your ideas instead of your formatting. + +- **Open by telling readers what they'll walk away with.** A two-sentence intro + that promises a payoff beats a warm-up paragraph every time. +- **Write in Markdown, and fence your code with a language hint.** Use ` + ```powershell ` so your samples get syntax highlighting instead of a gray + slab. +- **Run your code before you paste it.** A snippet that works on the first try + is the difference between a reader trusting you and a reader closing the tab. +- **Keep the title concrete.** "Speed up your console with PSReadLine predictive + IntelliSense" tells me what I'm getting. "PowerShell tips" tells me nothing. + +That's the bar. It's lower than the one in your head. + +## Categories and tags are how people find you + +It's tempting to treat these as paperwork and pick whatever's first in the list. +Don't. They're the difference between an article that's read once and one that +keeps getting found. + +Pick the single **category** that fits best. The current set: + +> Announcements - Books - DevOps - Events - Graph - In Case You Missed It - +> News - PowerShell Summit - PowerShell for Admins - PowerShell for Developers - +> Scripting Games - Tips and Tricks - Tools - Training - Tutorials + +Category is the big bucket. It's how someone browsing "PowerShell for Admins" +stumbles onto your piece months from now. **Tags** are the specific hooks: the +cmdlets, modules, and concepts your article actually touches (`psreadline`, +`regex`, `azure`, `pester`). Three to five honest, specific tags beat a dozen +vague ones. Tag what's really in the article, not every PowerShell word you can +think of, and your post surfaces next to its actual neighbors. + +## Claim your author page + +Once you're credited on an article, you can give yourself a real author page at +`/authors//`: an avatar, a tagline, a short bio, and links back to +your own site and socials. Every article you write points back to it. It's a +small, durable corner of the PowerShell community that's *yours*, and it builds +with each post. + +It's opt-in. Skip it and your byline still works exactly as before. But it takes +about five minutes, so why leave it on the table? You can see an example of mine +at the bottom. + +Your profile is a single file at `content/authors//_index.md`. The one +rule that trips people up: the `` has to match your byline exactly +(lowercased, spaces to hyphens), or the page attaches to nothing. + +So let the helper script handle it: + +{{< terminal lang="powershell" >}} +./tools/new-author.ps1 "Jane Doe" +{{< /terminal >}} + +That scaffolds `content/authors/jane-doe/_index.md` with every field commented. +Fill in what you want, delete the rest: + +```yaml +--- +title: "Jane Doe" # required -- keep this as your byline name +preferred_name: "Jane" # optional -- changes only how your name displays +tagline: "Cloud automation, mostly." +gravatar_hash: "..." # MD5 of your lowercased email -- keeps your email private +github: "https://github.com/janedoe" +website: "https://janedoe.dev" +# twitter / mastodon / linkedin / bluesky also supported +--- + +Your bio in Markdown goes here. +``` + +One thoughtful detail worth calling out: you can set an avatar **without** +putting your email address in a public repo. Store the MD5 hash of your +lowercased email as `gravatar_hash`, and Gravatar serves your picture while your +email stays private: + +{{< terminal lang="powershell" >}} +$email = "jane@example.com" +[System.BitConverter]::ToString( + [System.Security.Cryptography.MD5]::Create().ComputeHash( + [System.Text.Encoding]::UTF8.GetBytes($email.Trim().ToLowerInvariant()) + ) +).Replace("-", "").ToLowerInvariant() +{{< /terminal >}} + +And if your name ever changes, `./tools/new-author.ps1 "Old Name" -To "New Name"` +rewrites your byline across every article and adds a redirect so your old +profile URL keeps working. Open a PR with the result. + +## Your turn + +The whole point of PowerShell.org is that it's built by the people who use +PowerShell, and that includes you. You don't have to be sure it's good enough. +That's literally what the review is for. Pitch the idea, paste the draft, or +send the PR, and you won't be doing it alone. There's a community on the other +side of that submit button that wants to help you get it across the line. + +[Start here.](https://github.com/PowerShellOrg/PowerShellOrgWebsite/issues/new?template=guest-blog-post.yml) diff --git a/content/articles/2026/07/_index.md b/content/articles/2026/07/_index.md new file mode 100644 index 000000000..36b2f43e9 --- /dev/null +++ b/content/articles/2026/07/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from July 2026" +description: "PowerShell.org Articles published in July 2026." +--- diff --git a/content/articles/2026/07/explore-micrograd-with-verso-and-powershell/index.md b/content/articles/2026/07/explore-micrograd-with-verso-and-powershell/index.md new file mode 100644 index 000000000..6e3197da9 --- /dev/null +++ b/content/articles/2026/07/explore-micrograd-with-verso-and-powershell/index.md @@ -0,0 +1,365 @@ +--- +url: /articles/2026-07-24-explore-micrograd-with-verso-and-powershell/ +title: "Explore Micrograd with Verso and PowerShell" +description: "Use a PowerShell notebook in Verso to build a tiny reverse-mode automatic differentiation engine, visualize its computation graph, and train a small neural network." +author: Andrey Vernigora +authors: + - Andrey Vernigora +date: 2026-07-24T00:00:00+00:00 +categories: + - PowerShell for Developers +tags: + - powershell + - verso + - notebooks + - automatic-differentiation + - psgraphview +--- + +[Verso](https://github.com/DataficationSDK/Verso) is an open-source interactive +notebook platform and embeddable .NET execution engine. Its language kernels include +PowerShell, C#, F#, Python, SQL, JavaScript, TypeScript, and HTTP, and it provides +VS Code and browser front ends. + +That timing is useful for PowerShell users. The +[.NET Interactive repository](https://github.com/dotnet/interactive) was archived in +April 2026, leaving a gap for maintained multi-language .NET notebooks. Verso is an +actively developed option with persistent kernel state, rich output, cross-language +variable sharing, and headless notebook execution. + +This post walks through an +[experimental PowerShell micrograd notebook](https://github.com/DataficationSDK/Verso/blob/3f8629154a28824ad5fbd0eaca49c3ef57168704/samples/Notebooks/powershell/micrograd/micrograd-ps.verso) +built for Verso. The sample was proposed separately and is not currently part of +Verso's `main` branch, so treat it as an exploration rather than a shipped Verso +sample. + +The notebook ports the core ideas from Andrej Karpathy's +[micrograd](https://github.com/karpathy/micrograd) to PowerShell. The original +project is intentionally tiny: scalar-valued reverse-mode automatic differentiation, +then a small neural-network library on top. Karpathy's video, +[The spelled-out intro to neural networks and backpropagation: building micrograd](https://youtu.be/VMj-3S1tku0), +is effective because it does not hide the graph. The PowerShell version keeps that +spirit, using [PSQuickGraph](https://github.com/eosfor/PSGraph) and +[PSGraphView](https://github.com/eosfor/PSGraphView/tree/feature/direct-graphviz-integration) +to render the computation graph directly from objects created in the notebook. + +The diagrams in this article were generated by PowerShell from the same helper +scripts used by the notebook and exported as Graphviz SVG through PSGraphView. + +## Notebook Setup + +Install the Verso CLI and the two graph modules: + +```powershell +dotnet tool install --global Verso.Cli + +Install-Module -Name PSQuickGraph -RequiredVersion 2.5.0 -Scope CurrentUser +Install-Module -Name PSGraphView -RequiredVersion 0.1.0 -Scope CurrentUser +``` + +To open the exact experimental notebook used in this article, check out its commit +and pass the notebook path to Verso: + +```powershell +git clone https://github.com/DataficationSDK/Verso.git +Set-Location ./Verso +git checkout 3f8629154a28824ad5fbd0eaca49c3ef57168704 + +verso serve ./samples/Notebooks/powershell/micrograd/micrograd-ps.verso +``` + +The notebook starts with the normal module path: + +```powershell +Import-Module PSQuickGraph +Import-Module PSGraphView +``` + +The implementation is split into four scripts: + +- `value.ps1` defines the scalar `Value` class and operator overloads. +- `graphHelper.ps1` converts `Value` objects into graph vertices and renders them. +- `neuronHelper.ps1` defines `Neuron`, `Layer`, and `MLP`. +- `helpers.ps1` contains `Zip` and `Sum-Value`, small utilities used when building the loss. + +The notebook loads them directly: + +```powershell +. ./value.ps1 +. ./graphHelper.ps1 +. ./neuronHelper.ps1 +. ./helpers.ps1 +``` + +The key class is `Value`. Each instance stores `data`, `grad`, a `label`, the operation that produced it, the child values that fed into that operation, and a `backward` closure. That is the entire trick: normal arithmetic produces both a result and a tiny piece of local derivative logic. + +For addition, the derivative is one for both inputs: + +```powershell +static [Value] op_Addition([Value]$left, [Value]$right) { + $out = [Value]::new($left.data + $right.data, @($left, $right), "+", "+_res") + + $out.backward = { + $left.grad += 1 * $out.grad + $right.grad += 1 * $out.grad + }.GetNewClosure() + + return $out +} +``` + +For multiplication, each input receives the other input's data multiplied by the output gradient: + +```powershell +static [Value] op_Multiply([Value]$left, [Value]$right) { + $out = [Value]::new($left.data * $right.data, @($left, $right), "*", "*_res") + + $out.backward = { + $left.grad += $right.data * $out.grad + $right.grad += $left.data * $out.grad + }.GetNewClosure() + + return $out +} +``` + +`Tanh()` follows the same pattern, but the derivative is `1 - tanh(x)^2`: + +```powershell +[Value] Tanh(){ + $v = $this + $t = [Math]::Tanh($this.data) + $out = [Value]::new($t, @($this), "tanh") + + $out.backward = { + $v.grad += (1 - [Math]::Pow($t, 2)) * $out.grad + }.GetNewClosure() + + return $out +} +``` + +## Scalar Computation Graph + +The first notebook example is the same kind of scalar expression Karpathy uses to make backpropagation visible: + +```powershell +$a = [Value]::new( 2.0, 'a') +$b = [Value]::new(-3.0, 'b') +$c = [Value]::new(10.0, 'c') +$e = $a * $b; $e.label = 'e' +$d = $e + $c; $d.label = 'd' +$f = [Value]::new(-2.0, 'f') +$L = $d * $f; $L.label = 'L' +``` + +At this point `$L.data` is `-8`, and all gradients are still zero. The graph is created from the output value: + +```powershell +$scalarGraph = New-ExpressionGraph -val $L +Show-ExpressionGraph -Graph $scalarGraph +``` + +![Scalar expression before backpropagation; data values are populated and every gradient is zero](/images/articles/verso-micrograd-scalar-before.svg) + +`New-ExpressionGraph` walks from the output node back through `children`. It creates record-shaped nodes for values and ellipse-shaped nodes for operations. Because `Value` objects are actual object references, helper hashtables prevent duplicate vertices when a value is reached more than once. + +## Backpropagation Order + +Backpropagation is not run over the display graph. The notebook builds a second graph directly on the original `Value` objects: + +```powershell +$bpGraph = New-BackpropagationGraph -val $L +$L.grad = 1.0 + +Get-GraphTopologicalSort -Graph $bpGraph -Reverse | + ForEach-Object { $_.OriginalObject } | + ForEach-Object { & $_.backward } +``` + +The output gradient starts at `1.0`, because `dL/dL = 1`. Then `Get-GraphTopologicalSort -Reverse` visits the output first and walks backward toward the leaves. Each node executes the closure captured when the value was created. After the pass, the visualization graph is rebuilt so the display nodes get a fresh snapshot of `grad`. + +![The scalar expression after backpropagation; gradients show how each input changes L](/images/articles/verso-micrograd-scalar-after.svg) + +This is the important implementation detail: the graph is not just a drawing. It is the execution dependency structure for reverse-mode autodiff. + +## One Neuron + +The next cell builds a tiny neuron by hand: two inputs, two weights, a bias, and a `tanh` activation. + +```powershell +$x1 = [Value]::new(2.0, 'x1') +$x2 = [Value]::new(0.0, 'x2') + +$w1 = [Value]::new(-3.0, 'w1') +$w2 = [Value]::new(1.0, 'w2') +$b = [Value]::new(6.8813735870195432, 'b') + +$x1w1 = $x1 * $w1; $x1w1.label = 'x1*w1' +$x2w2 = $x2 * $w2; $x2w2.label = 'x2*w2' +$x1w1x2w2 = $x1w1 + $x2w2; $x1w1x2w2.label = 'x1*w1 + x2*w2' +$n = $x1w1x2w2 + $b; $n.label = 'n' +$o = $n.Tanh(); $o.label = 'o' +``` + +![A single tanh neuron before the backward pass](/images/articles/verso-micrograd-neuron-before.svg) + +Running the same topological backward pass from `$o` fills the gradients for the input, weights, bias, and intermediate values: + +```powershell +$bpNeuronGraph = New-BackpropagationGraph -val $o +$o.grad = 1.0 + +Get-GraphTopologicalSort -Graph $bpNeuronGraph -Reverse | + ForEach-Object { $_.OriginalObject } | + ForEach-Object { & $_.backward } +``` + +![The neuron after the tanh derivative has propagated through additions and multiplications](/images/articles/verso-micrograd-neuron-after.svg) + +This is where the notebook starts to feel useful as a teaching tool. You can inspect every scalar contribution to the neuron instead of treating the neuron as a black box. + +## Layer and MLP + +After the manual neuron, `neuronHelper.ps1` turns the same logic into classes. A `Neuron` owns an array of weights and a bias: + +```powershell +class Neuron { + [Value[]]$w + [Value]$b + + Neuron([int]$nin) { + $this.w = for ($i = 0; $i -lt $nin; $i++) { + [Value]::new(([Random]::Shared.NextDouble() * 2 - 1), "w$i") + } + + $this.b = [Value]::new(([Random]::Shared.NextDouble() * 2 - 1), "b") + } + + [Value] Invoke([Value[]]$x) { + $sum = $this.b + for ($i = 0; $i -lt $this.w.Count; $i++) { + $sum = $sum + ($this.w[$i] * $x[$i]) + } + + return $sum.Tanh() + } +} +``` + +A `Layer` applies several neurons to the same input vector. An `MLP` chains layers so each layer receives the output vector from the previous layer: + +```powershell +$x = @( + [Value]::new(2.0, 'x1') + [Value]::new(3.0, 'x2') + [Value]::new(-1.0, 'x3') +) + +$layer = [Layer]::new(3, 4) +$layer.Invoke($x) + +$net = [MLP]::new(3, @(4, 4, 1)) +$res = $net.Invoke($x) +$res +``` + +The notebook can render the full MLP expression graph too: + +```powershell +$netGraph = New-ExpressionGraph -val $res[0] +Show-ExpressionGraph -Graph $netGraph -rankdir 'TD' +``` + +That graph is intentionally not embedded here: it is already wide enough to be less readable in a blog post. The smaller scalar and neuron graphs make the mechanics clearer. + +## Training Data and Loss + +The training set is the small toy dataset from the micrograd walkthrough: + +```powershell +$xs = @( + @([Value]::new(2.0, 'x11'), [Value]::new( 3.0, 'x12'), [Value]::new(-1.0, 'x13')), + @([Value]::new(3.0, 'x21'), [Value]::new(-1.0, 'x22'), [Value]::new( 0.5, 'x23')), + @([Value]::new(0.5, 'x31'), [Value]::new( 1.0, 'x32'), [Value]::new( 1.0, 'x33')), + @([Value]::new(1.0, 'x41'), [Value]::new( 1.0, 'x42'), [Value]::new(-1.0, 'x43')) +) + +$ys = @( + [Value]::new( 1.0, 'y1'), + [Value]::new(-1.0, 'y2'), + [Value]::new(-1.0, 'y3'), + [Value]::new( 1.0, 'y4') +) +``` + +The loss is sum of squared errors: + +```powershell +$net = [MLP]::new(3, @(4, 4, 1)) + +$ypred = $xs | ForEach-Object { $net.Invoke($_)[0] } +$loss = Zip -Left $ys -Right $ypred | Sum-Value { + $diff = $_.Right - $_.Left + $diff * $diff +} +``` + +`Zip` pairs expected and predicted values. `Sum-Value` starts from a `Value` named `loss` and keeps adding selected terms. Because every subtraction, multiplication, and addition returns another `Value`, the loss is also a scalar root of a full computation graph. + +## One Training Step + +One optimization step follows the same shape as PyTorch, but without hiding anything: + +```powershell +foreach ($p in $net.parameters()) { + $p.grad = 0.0 +} +foreach ($row in $xs) { + foreach ($v in $row) { $v.grad = 0.0 } +} +foreach ($y in $ys) { + $y.grad = 0.0 +} + +$ypred = $xs | ForEach-Object { $net.Invoke($_)[0] } +$loss = Zip -Left $ys -Right $ypred | Sum-Value { + $diff = $_.Right - $_.Left + $diff * $diff +} + +$loss.grad = 1.0 +$bpLossGraph = New-BackpropagationGraph -val $loss + +Get-GraphTopologicalSort -Graph $bpLossGraph -Reverse | + ForEach-Object { $_.OriginalObject } | + ForEach-Object { & $_.backward } + +foreach ($p in $net.parameters()) { + $p.data += -0.1 * $p.grad +} +``` + +There are five phases: clear gradients, forward pass, loss construction, backward pass, parameter update. The learning rate is hard-coded as `0.1` because this is a notebook demo, not a training framework. + +## Training Loop + +The notebook repeats that step 200 times. A shorter 80-epoch run shows the same +behavior: the sum of squared errors falls rapidly and then continues to converge. + +![Training loss over 80 epochs](/images/articles/verso-micrograd-loss-history.svg) + +The final notebook cell renders the full loss graph after training: + +```powershell +$lossGraph = New-ExpressionGraph -val $loss +Show-ExpressionGraph -Graph $lossGraph -rankdir 'TD' +``` + +It is a useful stress test for `PSGraphView`, but it is too large for this page because it contains the complete scalar computation that produced the loss. That is also the point of micrograd: a neural network can be understood as a large scalar expression, and backpropagation is just the disciplined reverse walk over that expression. + +## Why This Matters + +The important part is not that PowerShell is the best language for building neural networks. It is not. The point is that Verso makes PowerShell notebooks feel real again after the end of .NET Interactive, and the PowerShell kernel can now do the things notebook users expect: long-running host output, cancellation, persistent state, rich display, and ordinary module-based workflows. + +For infrastructure engineers, that matters. The same mechanics used here for micrograd graphs apply to dependency graphs, Azure topology, policy validation, incident analysis, and any other workflow where PowerShell produces structured objects and the notebook should make those objects visible. diff --git a/content/articles/2026/07/validate-azure-resource-relationships-with-psrule-and-powershell-graphs/index.md b/content/articles/2026/07/validate-azure-resource-relationships-with-psrule-and-powershell-graphs/index.md new file mode 100644 index 000000000..87f324c76 --- /dev/null +++ b/content/articles/2026/07/validate-azure-resource-relationships-with-psrule-and-powershell-graphs/index.md @@ -0,0 +1,229 @@ +--- +url: /articles/2026-07-24-validate-azure-resource-relationships-with-psrule-and-powershell-graphs/ +title: "Validate Azure Resource Relationships with PSRule and PowerShell Graphs" +description: "Learn how to combine PSRule for Azure with PSQuickGraph to validate relationships that span multiple Bicep resources, such as VNet integration and private endpoint connectivity." +author: Andrey Vernigora +authors: + - Andrey Vernigora +date: 2026-07-24T00:00:00+00:00 +categories: + - DevOps +tags: + - psrule + - azure + - bicep + - graph + - infrastructure-as-code +--- + +PSRule for Azure makes it straightforward to validate the properties of individual +resources before deployment. But some architecture requirements describe a +relationship, not a property: every Function App must connect to the expected virtual +network, or every application must have exactly one private endpoint. + +This article shows how to collect those relationships in a PowerShell graph while +PSRule processes a Bicep deployment, then validate the completed graph at the end of +the pipeline. + +## Why per-resource rules are not enough + +Consider an architecture with a Function App, a virtual network, an integration +subnet, and a private endpoint subnet. We can easily write rules that check: + +- whether the Function App has public access disabled; +- whether the virtual network uses the correct address space; +- whether the expected subnets exist. + +Those checks still do not prove that the Function App is connected to the correct +subnet or that its private endpoint belongs to the expected virtual network. The +required information is spread across several expanded ARM resources. + +A graph is a natural representation of this problem: + +- resources and subnets become vertices; +- references between them become edges; +- an architecture requirement becomes a path or edge-count assertion. + +## Prepare PSRule and the graph module + +The example uses +[PSRule.Rules.Azure](https://github.com/Azure/PSRule.Rules.Azure) to expand and +analyze Bicep and +[PSQuickGraph](https://github.com/eosfor/PSGraph) to build the dependency graph. + +```powershell +Install-Module -Name PSRule.Rules.Azure -Scope CurrentUser +Install-Module -Name PSQuickGraph -Scope CurrentUser + +Import-Module PSQuickGraph +``` + +In `ps-rule.yaml`, enable Bicep expansion and include the convention that will collect +relationships: + +```yaml +include: + module: + - PSRule.Rules.Azure + - PSQuickGraph + +convention: + include: + - FullConnectivityTest + +configuration: + AZURE_BICEP_FILE_EXPANSION: true +``` + +## Collect relationships with a convention + +A PSRule +[convention](https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Conventions/) +can run custom PowerShell at different stages of the pipeline. Its `Process` block +runs once for each input object, while its `End` block runs after all objects have +been processed. + +That lifecycle gives us a convenient two-phase approach: + +1. Add every relevant resource and relationship to a graph. +2. Validate the graph only after the complete deployment has been seen. + +The following is a simplified version of the convention. The example uses +child-to-parent edges so a valid dependency chain ends at the virtual network. + +```powershell +$global:vnetId = $null +$global:webSites = @() +$global:connectionGraph = New-Graph +$global:privateEndpointGraph = New-Graph + +Export-PSRuleConvention 'FullConnectivityTest' -Process { + if ($TargetObject.Type -eq 'Microsoft.Network/virtualNetworks') { + $global:vnetId = $TargetObject.Id + + foreach ($subnetResource in $TargetObject.Resources) { + Add-Edge ` + -From $subnetResource.Id ` + -To $TargetObject.Id ` + -Graph $global:connectionGraph + + Add-Edge ` + -From $subnetResource.Id ` + -To $TargetObject.Id ` + -Graph $global:privateEndpointGraph + } + } + + if ($TargetObject.Type -eq 'Microsoft.Web/sites') { + $vnetIntegration = $TargetObject.Resources | + Where-Object Type -eq 'Microsoft.Web/sites/networkConfig' + + $global:webSites += $TargetObject.Id + + Add-Edge ` + -From $TargetObject.Id ` + -To $vnetIntegration.Properties.SubnetResourceId ` + -Graph $global:connectionGraph + } + + if ($TargetObject.Type -eq 'Microsoft.Network/privateEndpoints') { + Add-Edge ` + -From $TargetObject.Id ` + -To $TargetObject.Properties.Subnet.Id ` + -Graph $global:privateEndpointGraph + + foreach ($connection in $TargetObject.Properties.PrivateLinkServiceConnections) { + Add-Edge ` + -From $connection.Properties.PrivateLinkServiceId ` + -To $TargetObject.Id ` + -Graph $global:privateEndpointGraph + } + } +} -End { + # The completed graphs are validated here. +} +``` + +The sample uses global variables because the state must remain available across +PSRule callback invocations. In a larger rule set, wrap this state in a single object +and reset it before each run. + +## Validate complete dependency paths + +Once PSRule reaches the `End` block, every relevant Bicep resource has been expanded +and processed. We can now ask questions about the deployment as a whole. + +For example, the following check confirms that every Function App has a VNet +integration path: + +```powershell +foreach ($webApp in $global:webSites) { + $path = Get-GraphPath ` + -From $webApp ` + -To $global:vnetId ` + -Graph $global:connectionGraph + + if ($null -eq $path) { + throw "No VNet integration path was found for Function App: $webApp" + } +} +``` + +We can apply the same idea to private endpoint connectivity: + +```powershell +foreach ($webApp in $global:webSites) { + $path = Get-GraphPath ` + -From $webApp ` + -To $global:vnetId ` + -Graph $global:privateEndpointGraph + + if ($null -eq $path) { + throw "No private endpoint path was found for Function App: $webApp" + } +} +``` + +Throwing from the `End` block causes the validation run to fail. This works well in +CI, although it does not produce the same detailed assertion output as a normal +PSRule `Rule` block. + +Run the rules against the Bicep entry point with: + +```powershell +Invoke-PSRule -Format File -InputPath ./deployments/non-prod/main.bicep +``` + +## Export the graph for troubleshooting + +The same model used for validation can produce a diagram. This is particularly +helpful when a CI check reports a missing path and you need to see which relationship +was absent. PSQuickGraph can export the graph in Graphviz DOT format; the +[Graphviz](https://graphviz.org/download/) `dot` executable can then render it as SVG. + +```powershell +Export-Graph ` + -Graph $global:privateEndpointGraph ` + -Format Graphviz ` + -Path ./output/private-endpoints.dot + +& dot ` + -Tsvg ./output/private-endpoints.dot ` + -o ./output/private-endpoints.svg +``` + +![An Azure Function App connected through a private endpoint and subnet to a virtual network](/images/articles/psrule-azure-resource-relationships.svg) + +This separates the solution into three clear steps: + +1. PSRule expands Bicep into resource objects. +2. A convention converts cross-resource references into graph edges. +3. Graph queries validate the architecture after all resources are available. + +The result complements normal per-resource rules instead of replacing them. Use +regular PSRule assertions for local properties and graph assertions for requirements +that span the deployment. + +A complete Bicep project, PSRule configuration, architecture document, and runnable +Codespaces environment are available in the +[psrule-demo repository](https://github.com/eosfor/psrule-demo). diff --git a/content/articles/2026/08/_index.md b/content/articles/2026/08/_index.md new file mode 100644 index 000000000..177f12da0 --- /dev/null +++ b/content/articles/2026/08/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from August 2026" +description: "PowerShell.org Articles published in August 2026." +--- diff --git a/content/articles/2026/08/analyze-dependencies-with-psquickgraph-and-psgraphview/index.md b/content/articles/2026/08/analyze-dependencies-with-psquickgraph-and-psgraphview/index.md new file mode 100644 index 000000000..1ceb66513 --- /dev/null +++ b/content/articles/2026/08/analyze-dependencies-with-psquickgraph-and-psgraphview/index.md @@ -0,0 +1,371 @@ +--- +url: /articles/2026-08-22-analyze-dependencies-with-psquickgraph-and-psgraphview/ +title: "Analyze Dependencies with PSQuickGraph and PSGraphView" +description: "Build a dependency graph from PowerShell objects, trace paths and blast radius, calculate a safe deployment order, and render the same model as diagrams and a design structure matrix." +author: Andrey Vernigora +authors: + - Andrey Vernigora +date: 2026-08-22T00:00:00+00:00 +categories: + - Graph +tags: + - powershell + - psquickgraph + - psgraphview + - dependency-graphs + - graphviz +--- + +PowerShell is excellent at collecting objects. The harder question often comes +one step later: how are those objects related? + +A table can tell us that an Orders API uses a database, a message broker, and a +vault. It is much less useful when we need to answer questions such as: + +- What will be affected if Azure Service Bus is unavailable? +- Why does the customer-facing application depend on Key Vault? +- In what order should the platform be deployed or migrated? +- Where are the cycles and tightly coupled groups when the model grows? + +Those are graph questions. [PSGraph](https://github.com/eosfor/PSGraph) provides +the graph model and algorithms through the `PSQuickGraph` PowerShell module. The +sibling [PSGraphView](https://github.com/eosfor/PSGraphView) module renders those +models as Graphviz, Vega, MSAGL, and design structure matrix views. + +This article builds one small platform model and uses it for several jobs. The +point is not the fictional architecture. The point is that the same native +PowerShell objects can support automation, analysis, and documentation without +maintaining three separate models. + +## Two modules with different jobs + +The naming is worth explaining before installing anything: + +| Name | Responsibility | +| --- | --- | +| `PSGraph` | The project and GitHub repository. | +| `PSQuickGraph` | The installable module for graph objects, algorithms, GraphML, Graphviz/DOT export, and DSM analysis. | +| `PSGraphView` | The installable visualization module for Graphviz, Vega, MSAGL, and DSM output. | + +`PSQuickGraph` is not the Microsoft Graph API, and it is not the older Graphviz +DSL module named `PSGraph`. Its focus is an object graph that can be queried and +passed through PowerShell pipelines. + +The examples below use the current prerelease pair because the renderer split is +new. Pinning the versions makes the article reproducible: + +```powershell +Install-PSResource ` + -Name PSQuickGraph ` + -Version 2.6.0-beta1 ` + -Prerelease ` + -Scope CurrentUser + +Install-PSResource ` + -Name PSGraphView ` + -Version 0.2.0-beta1 ` + -Prerelease ` + -Scope CurrentUser + +Import-Module PSQuickGraph -RequiredVersion 2.6.0 +Import-Module PSGraphView -RequiredVersion 0.2.0 +``` + +If you only need graph construction and algorithms, `PSGraphView` is optional. + +## Model a platform with ordinary objects + +The sample inventory contains applications, services, workers, shared platform +services, databases, and observability. There is no required vertex class in the +calling code; each item is a normal `PSCustomObject`: + +```powershell +$services = @( + [pscustomobject]@{ Name = 'Customer Portal'; Kind = 'Application'; Team = 'Experience' } + [pscustomobject]@{ Name = 'Admin Portal'; Kind = 'Application'; Team = 'Operations' } + [pscustomobject]@{ Name = 'Orders API'; Kind = 'Service'; Team = 'Orders' } + [pscustomobject]@{ Name = 'Inventory API'; Kind = 'Service'; Team = 'Inventory' } + [pscustomobject]@{ Name = 'Billing Worker'; Kind = 'Worker'; Team = 'Billing' } + [pscustomobject]@{ Name = 'Notification Worker'; Kind = 'Worker'; Team = 'Experience' } + [pscustomobject]@{ Name = 'Azure Service Bus'; Kind = 'Platform'; Team = 'Platform' } + [pscustomobject]@{ Name = 'Orders DB'; Kind = 'Data'; Team = 'Orders' } + [pscustomobject]@{ Name = 'Inventory DB'; Kind = 'Data'; Team = 'Inventory' } + [pscustomobject]@{ Name = 'Billing DB'; Kind = 'Data'; Team = 'Billing' } + [pscustomobject]@{ Name = 'Key Vault'; Kind = 'Platform'; Team = 'Platform' } + [pscustomobject]@{ Name = 'Application Insights'; Kind = 'Observability'; Team = 'Platform' } +) +``` + +Dependencies are data too. In this model an edge points from a consumer to its +dependency: `Orders API -> Orders DB` means that the API depends on the database. + +```powershell +$dependencies = @( + [pscustomobject]@{ From = 'Customer Portal'; To = 'Orders API'; Reason = 'HTTPS' } + [pscustomobject]@{ From = 'Customer Portal'; To = 'Inventory API'; Reason = 'HTTPS' } + [pscustomobject]@{ From = 'Admin Portal'; To = 'Orders API'; Reason = 'HTTPS' } + [pscustomobject]@{ From = 'Admin Portal'; To = 'Inventory API'; Reason = 'HTTPS' } + [pscustomobject]@{ From = 'Orders API'; To = 'Orders DB'; Reason = 'SQL' } + [pscustomobject]@{ From = 'Orders API'; To = 'Inventory API'; Reason = 'HTTPS' } + [pscustomobject]@{ From = 'Orders API'; To = 'Azure Service Bus'; Reason = 'AMQP' } + [pscustomobject]@{ From = 'Orders API'; To = 'Key Vault'; Reason = 'Secrets' } + [pscustomobject]@{ From = 'Inventory API'; To = 'Inventory DB'; Reason = 'SQL' } + [pscustomobject]@{ From = 'Inventory API'; To = 'Key Vault'; Reason = 'Secrets' } + [pscustomobject]@{ From = 'Billing Worker'; To = 'Azure Service Bus'; Reason = 'AMQP' } + [pscustomobject]@{ From = 'Billing Worker'; To = 'Billing DB'; Reason = 'SQL' } + [pscustomobject]@{ From = 'Billing Worker'; To = 'Key Vault'; Reason = 'Secrets' } + [pscustomobject]@{ From = 'Notification Worker'; To = 'Azure Service Bus'; Reason = 'AMQP' } + [pscustomobject]@{ From = 'Notification Worker'; To = 'Key Vault'; Reason = 'Secrets' } + [pscustomobject]@{ From = 'Customer Portal'; To = 'Application Insights'; Reason = 'Telemetry' } + [pscustomobject]@{ From = 'Admin Portal'; To = 'Application Insights'; Reason = 'Telemetry' } + [pscustomobject]@{ From = 'Orders API'; To = 'Application Insights'; Reason = 'Telemetry' } + [pscustomobject]@{ From = 'Inventory API'; To = 'Application Insights'; Reason = 'Telemetry' } + [pscustomobject]@{ From = 'Billing Worker'; To = 'Application Insights'; Reason = 'Telemetry' } + [pscustomobject]@{ From = 'Notification Worker'; To = 'Application Insights'; Reason = 'Telemetry' } +) +``` + +Build the graph in two passes. Explicitly adding vertices preserves isolated +services; adding only edges would omit objects that currently have no +relationships. + +```powershell +$serviceByName = @{} +$graph = New-Graph + +foreach ($service in $services) { + $serviceByName[$service.Name] = $service + $vertex = Add-Vertex -Graph $graph -Vertex $service -PassThru + $vertex.Metadata | + Add-Member -NotePropertyName Team -NotePropertyValue $service.Team +} + +foreach ($dependency in $dependencies) { + Add-Edge ` + -Graph $graph ` + -From $serviceByName[$dependency.From] ` + -To $serviceByName[$dependency.To] ` + -Tag $dependency.Reason | + Out-Null +} +``` + +The sample graph contains 12 vertices and 21 directed edges. The wrapper vertex +retains the original object in `OriginalObject`, so analysis results can return +to normal PowerShell processing at any time. + +## First view: the dependency map + +`PSQuickGraph` exports the model as DOT; `PSGraphView` asks Graphviz to lay it out +and return SVG. Keeping these steps separate is useful: algorithms can run on a +server that never renders an image, while a documentation build can apply its +own visual style. + +```powershell +$dot = Export-Graph ` + -Graph $graph ` + -Format Graphviz ` + -GraphScript { @{ rankdir = 'LR'; bgcolor = 'white' } } ` + -VertexScript { + @{ + shape = 'Record' + style = 'filled' + label = "{{ {0} | {1} }}" -f $_.Name, $_.Kind + } + } + +Export-GraphvizView ` + -InputObject $dot ` + -Renderer Dot ` + -As Svg ` + -OutputPath ./platform-dependencies.svg +``` + +![A consumer-to-dependency graph of the sample platform. Each record shows the component name and kind.](/images/articles/psgraphview-platform-dependencies.svg) + +A drawing is already useful for a design review, but the graph becomes more +valuable when it answers operational questions. + +## Immediate dependencies and dependents + +Because the edge direction is explicit, outgoing and incoming edges answer two +different questions: + +```powershell +$orders = $graph.Vertices | Where-Object Label -EQ 'Orders API' + +# What does Orders API require? +Get-OutEdge -Graph $graph -Vertex $orders | + ForEach-Object { $_.Target.OriginalObject } + +# What calls Orders API directly? +Get-InEdge -Graph $graph -Vertex $orders | + ForEach-Object { $_.Source.OriginalObject } +``` + +The result is still the inventory object, not display text. It can be grouped by +team, joined with ownership data, exported to CSV, or used to open incidents. + +## Explain a dependency with a path + +Knowing that two components are connected is not always enough. `Get-GraphPath` +returns the edge sequence that explains the relationship: + +```powershell +$from = $graph.Vertices | Where-Object Label -EQ 'Customer Portal' +$to = $graph.Vertices | Where-Object Label -EQ 'Key Vault' + +$path = Get-GraphPath -Graph $graph -From $from -To $to + +@($path.Source.Label) + $path[-1].Target.Label +``` + +For this model the result is: + +```text +Customer Portal -> Orders API -> Key Vault +``` + +This is useful in change reviews and incident response because it provides an +explanation, not just a Boolean answer. + +## Calculate blast radius + +Suppose Azure Service Bus is unavailable. Every vertex that can reach it through +consumer-to-dependency edges is transitively affected: + +```powershell +$serviceBus = $graph.Vertices | + Where-Object Label -EQ 'Azure Service Bus' + +$affected = $graph.Vertices | + Where-Object Label -NE $serviceBus.Label | + Where-Object { + Test-GraphPath -Graph $graph -From $_ -To $serviceBus + } | + Sort-Object Label + +$affected.OriginalObject +``` + +![Azure Service Bus and every direct or transitive consumer are marked with a bold border and a warning marker.](/images/articles/psgraphview-service-bus-impact.svg) + +The result includes both direct consumers and applications affected indirectly: + +```text +Admin Portal +Billing Worker +Customer Portal +Notification Worker +Orders API +``` + +`Get-InEdge` finds immediate consumers. `Test-GraphPath` also finds portals that +depend on Service Bus indirectly through Orders API. + +## Derive a deployment order + +The same graph can become an execution plan. With consumer-to-dependency edges, +reversing the topological order puts dependencies before their consumers: + +```powershell +$deploymentOrder = Get-GraphTopologicalSort ` + -Graph $graph ` + -Reverse + +$deploymentOrder | + Select-Object -ExpandProperty OriginalObject | + Select-Object Name, Kind, Team +``` + +The result starts with shared dependencies and ends with applications: + +```text +Azure Service Bus +Orders DB +Key Vault +Inventory DB +Billing DB +Application Insights +Inventory API +Billing Worker +Orders API +Notification Worker +Customer Portal +Admin Portal +``` + +Topological sorting is appropriate only for a directed acyclic graph. If two +services depend on each other, the sort fails rather than inventing a safe +order. That failure is useful evidence: the cycle needs an explicit migration +strategy or an architectural change. + +## When a node-link diagram becomes too dense + +Arrows work well for a dozen components. They become a hairball for a hundred. A +design structure matrix (DSM) represents the same edges as cells: the row is the +consumer and the column is its dependency. + +`PSQuickGraph` creates and sequences the matrix; `PSGraphView` renders it: + +```powershell +$dsm = New-DSM -Graph $graph +$sequencedDsm = Start-DSMSequencing ` + -Dsm $dsm ` + -LoopDetectionMethod Condensation + +Export-DSMView ` + -SequencedDsm $sequencedDsm ` + -Renderer DsmVegaMatrix ` + -As Json ` + -Path ./dependency-matrix.json +``` + +![A sequenced design structure matrix of the same platform. Filled cells map consumers to dependencies without crossing edges.](/images/articles/psgraphview-dependency-matrix.svg) + +The Vega renderer produces an interactive matrix whose row and column labels can +be highlighted on hover. The static image above uses the same Vega specification +for the article page. For larger models, `Start-DSMClustering` can group strongly +related components before rendering. That makes the matrix useful for finding +candidate service boundaries, not merely documenting the current state. + +## Other scenarios for the same pattern + +Only the data collection step changes between domains. The graph workflow +remains: collect objects, create stable vertices, add directed relationships, +ask questions, then choose a view. + +- **Security events:** connect processes, users, hosts, files, and network + destinations to reconstruct a suspicious chain. +- **Network policy:** turn accepted and rejected firewall flows into host and + port relationships. +- **Infrastructure as code:** model semantic Bicep dependencies and validate + cross-resource relationships, as shown in + [Validate Azure Resource Relationships with PSRule and PowerShell Graphs](/articles/2026-07-24-validate-azure-resource-relationships-with-psrule-and-powershell-graphs/). +- **Web diagnostics:** connect pages to scripts, APIs, and third-party origins + discovered through Chrome DevTools Protocol. +- **Execution graphs:** use topological order to evaluate a computation graph, + as shown in + [Explore Micrograd with Verso and PowerShell](/articles/2026-07-24-explore-micrograd-with-verso-and-powershell/). + +These examples look different on screen, but the useful questions are the same: +what depends on this, how did we get there, what order is valid, and where is the +system too tightly coupled? + +## Takeaways + +`PSQuickGraph` is most useful when a diagram is not the final product. The graph +can drive impact reports, validation, deployment ordering, and incident +analysis. `PSGraphView` then turns that same tested model into the representation +that fits the audience: a familiar node-link diagram, an interactive view, or a +dense DSM. + +The practical pattern is small: + +1. Keep vertices as domain objects with stable names or IDs. +2. Decide and document the edge direction. +3. Use algorithms before reaching for visualization. +4. Render from the same model instead of maintaining diagrams by hand. + +Once relationships become first-class data, PowerShell can do much more than +draw boxes and arrows. diff --git a/content/articles/2026/09/_index.md b/content/articles/2026/09/_index.md new file mode 100644 index 000000000..6df429166 --- /dev/null +++ b/content/articles/2026/09/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from September 2026" +description: "PowerShell.org Articles published in September 2026." +--- diff --git a/content/articles/2026/09/powershell-can-put-pictures-in-your-terminal-with-sixel/index.md b/content/articles/2026/09/powershell-can-put-pictures-in-your-terminal-with-sixel/index.md new file mode 100644 index 000000000..60d1d4e33 --- /dev/null +++ b/content/articles/2026/09/powershell-can-put-pictures-in-your-terminal-with-sixel/index.md @@ -0,0 +1,220 @@ +--- +url: /articles/2026-09-03-powershell-can-put-pictures-in-your-terminal-with-sixel/ +title: "PowerShell Can Put Pictures in Your Terminal with SIXEL" +description: "Render PNG, JPEG, and SVG images inside iTerm2 with a PowerShell cmdlet and SIXEL, with a tested macOS demo and an invitation to try Windows Terminal." +author: Andrey Vernigora +authors: + - Andrey Vernigora +date: "2026-09-03T00:00:00+00:00" +categories: + - Tools +tags: + - powershell + - sixel + - iterm2 + - windows-terminal + - terminal-graphics +--- + +PowerShell normally sends text and objects to a terminal. This experiment sends an image. + +```powershell +Out-Sixel -Path ./sixel-demo.svg -Width 480 +``` + +Instead of opening Preview or a browser, the command decodes the SVG, converts it into a palette, and writes a stream of terminal escape sequences. iTerm2 interprets those sequences and paints the image directly between the command and the next prompt. + +This is mostly for fun. It is also a useful reminder that a terminal is a protocol endpoint, not merely a grid of characters. + +> [!NOTE] +> **Tested environment:** macOS 26.6.2, iTerm2 3.6.11, PowerShell 7.6.1, Apple Silicon. +> +> The direct iTerm2 session is the tested path in this article. No tmux or screen sits between PowerShell and the terminal. + +![Out-Sixel rendering an SVG directly inside a PowerShell session in iTerm2](/images/articles/powershell-sixel/out-sixel-iterm.gif) + +The recording above is a real iTerm2 session. The command reads the SVG, writes SIXEL escape sequences to the terminal, and returns to the PowerShell prompt after iTerm2 renders the image. + +![The PowerShell plus SIXEL SVG used by the terminal demo](/images/articles/powershell-sixel/sixel-demo.svg) + +The image above is the source file used in the recording. [Download the demo SVG](/images/articles/powershell-sixel/sixel-demo.svg) and save it as `sixel-demo.svg` to run the opening command. + +## What is SIXEL? + +[SIXEL](https://vt100.net/docs/vt3xx-gp/chapter14.html) is a bitmap graphics format originally used by DEC terminals and printers. The name comes from its basic unit: a character represents a vertical group of six pixels. + +A SIXEL image is still text from the process's point of view. It begins with a device-control escape sequence, contains a palette and encoded pixel bands, and ends with a string terminator. A compatible terminal recognizes that stream as graphics rather than printable characters. + +That old design has one property that remains attractive: the image travels over the same channel as terminal output. There is no separate window, web server, or GUI API. + +## The PowerShell experiment + +The command is part of an experimental C# port of [libsixel](https://github.com/saitoha/libsixel). My [C# port repository](https://github.com/eosfor/libsixel) contains a small PowerShell module whose public surface is the compiled `Out-Sixel` cmdlet. + +Install the exact [LibSixel.PowerShell 0.2.0-beta2](https://github.com/eosfor/libsixel/releases/tag/v0.2.0-beta2) prerelease used by this article from PowerShell Gallery: + +```powershell +Install-Module ` + -Name LibSixel.PowerShell ` + -RequiredVersion '0.2.0-beta2' ` + -AllowPrerelease ` + -Scope CurrentUser + +Import-Module LibSixel.PowerShell +``` + +Then confirm that PowerShell can see the compiled cmdlet: + +```powershell +Get-Command Out-Sixel +``` + +The cmdlet accepts PNG, JPEG, and SVG files: + +```powershell +Out-Sixel -Path ./photo.png +Out-Sixel -Path ./photo.jpg +Out-Sixel -Path ./diagram.svg +``` + +Large images should be resized before encoding. `-Width` and `-Height` accept pixel dimensions; specifying only one preserves the aspect ratio: + +```powershell +Out-Sixel -Path ./photo.jpg -Width 480 +Out-Sixel -Path ./diagram.svg -Height 260 +``` + +SIXEL uses a limited palette. The default is 256 colors, but a smaller palette can reduce the output considerably: + +```powershell +Out-Sixel -Path ./photo.jpg -Width 480 -Colors 64 +``` + +The result will not compete with a normal image viewer. That is part of the charm: the encoder applies color quantization and dithering, giving photographs a slightly retro character while diagrams usually remain crisp. + +## Render an SVG without creating a file + +`Out-Sixel` also recognizes SVG content arriving through the pipeline. This makes a self-contained demo possible: + +```powershell +$svg = @' + + + + + + + + + + PowerShell + SIXEL + + + no browser required + + +'@ + +$svg | Out-Sixel -Width 480 +``` + +This is an entertaining way to display a generated diagram or status card. It is not a replacement for structured PowerShell output: once data becomes pixels, the pipeline can no longer filter or sort it. + +## What happens inside the command? + +The path from a file to the terminal is deliberately small: + +```text +PNG / JPEG / SVG + | + v +SkiaSharp decode or SVG rasterization + | + v +RGBA pixel buffer + | + v +palette selection and dithering + | + v +SIXEL escape sequence + | + v +iTerm2 renders the pixels +``` + +SkiaSharp decodes PNG and JPEG inputs. `Svg.Skia` rasterizes SVG into the same RGBA representation. The ported libsixel code then selects a palette, applies dithering, and writes the SIXEL device-control string through `Host.UI`. + +The command can return that string instead of writing it to the terminal: + +```powershell +$sixel = Out-Sixel -Path ./diagram.svg -Width 480 -AsString + +[int][char]$sixel[0] +[int][char]$sixel[1] +``` + +The first two values are `27` and `80`: `ESC` followed by `P`, the beginning of a device-control string. + +## Exactly where does it work? + +Terminal support matters more than the shell prompt. The same `pwsh` command can display an image in one terminal and produce garbage in another. + +| Environment | Status for this experiment | +| --- | --- | +| **iTerm2 3.3 or newer on macOS** | Supported. This article was tested with iTerm2 3.6.11. | +| **PowerShell 7.4 or newer** | Required by the current `net8.0` module build. This article was tested with PowerShell 7.6.1. | +| **Windows Terminal 1.22 or newer** | SIXEL is supported by the terminal, and the module includes Windows Skia native assets. I have not tested this combination yet—please try it and report what you find. | +| **Windows PowerShell 5.1** | Not supported. It cannot load this `net8.0` module. | +| **macOS Terminal.app and the VS Code integrated terminal** | Not tested and not claimed as supported here. | +| **tmux and screen** | Outside the supported path. A multiplexer may filter the escape sequence or require its own SIXEL configuration. | + +[iTerm2 has supported SIXEL since its 3.3 release](https://iterm2.com/downloads/stable/iTerm2-3_3_0.changelog), and recent releases continue to fix SIXEL decoding. [Windows Terminal introduced support in version 1.22](https://devblogs.microsoft.com/commandline/windows-terminal-preview-1-22-release/). These version boundaries are about the terminal emulator; the module independently requires a modern PowerShell runtime. + +## Windows Terminal readers: please try this + +I deliberately kept the Windows claim separate from the macOS result. The renderer exists in Windows Terminal, and the module packages the Windows Skia native library, but a real end-to-end run is more valuable than an inference from two codebases. + +If you have Windows Terminal 1.22 or newer and PowerShell 7.4 or newer, try: + +```powershell +$PSVersionTable.PSVersion + +Get-AppxPackage Microsoft.WindowsTerminal | + Select-Object Name, Version + +Install-Module -Name LibSixel.PowerShell -RequiredVersion '0.2.0-beta2' -AllowPrerelease -Scope CurrentUser +Import-Module LibSixel.PowerShell + +# Use the inline $svg sample from the earlier section. +$svg | Out-Sixel -Width 480 +``` + +If it works, capture the terminal version, PowerShell version, architecture, and a screenshot. If it does not, the failure mode is just as useful: dependency loading, raw escape text, a blank area, or incorrect cursor placement point to different layers. + +## Limitations worth keeping + +This is an experiment, not a new universal image API for PowerShell. + +- SIXEL palettes contain at most 256 colors. +- Large images produce large terminal streams and can be slow over remote connections. +- Image placement and cursor behavior vary between terminal implementations. +- Multiplexers add another protocol layer and need separate testing. +- SVG text depends on fonts available to Skia on the machine doing the rasterization. +- The module is an experimental prerelease rather than a stable terminal graphics API. + +Those constraints keep the example honest, but they do not make it less fun. A generated architecture diagram, chart, QR code, or build badge appearing directly in a PowerShell session is still a delightful result from a protocol designed decades ago. + +## Takeaway + +The surprising part is not that PowerShell can read an image. The surprising part is that the ordinary terminal output channel can carry the image all the way to the screen. + +On macOS with iTerm2, that path works today: + +```text +PowerShell -> SIXEL -> iTerm2 -> pixels +``` + +Windows Terminal should provide the same path on Windows. If you test it, send the result. One successful screenshot—or one interesting failure—would make a useful follow-up to this little experiment. diff --git a/content/articles/2026/_index.md b/content/articles/2026/_index.md new file mode 100644 index 000000000..f10942658 --- /dev/null +++ b/content/articles/2026/_index.md @@ -0,0 +1,4 @@ +--- +title: "Articles from 2026" +description: "PowerShell.org Articles published in 2026." +--- diff --git a/docs/research/hugo-branch-bundle-migration.md b/docs/research/hugo-branch-bundle-migration.md new file mode 100644 index 000000000..e6ded5875 --- /dev/null +++ b/docs/research/hugo-branch-bundle-migration.md @@ -0,0 +1,72 @@ +# Hugo branch-bundle migration for articles + +## Decision context + +This report separates **official Hugo facts** (each linked to Hugo documentation) from **repository-specific recommendations**. The goal is to turn each flat article into a nested **branch bundle** without changing its established public URL. + +## Official Hugo facts + +### Bundle types and content ownership + +- A **leaf bundle** is a directory rooted by `index.md`. It represents a regular `page`, cannot have descendants, and may contain resources beside the index file or in its nested directories. [Hugo: Page bundles—leaf bundles](https://gohugo.io/content-management/page-bundles/#leaf-bundles) +- A **branch bundle** is a directory rooted by `_index.md`. It represents a list-kind page (`home`, `section`, `taxonomy`, or `term`) and may have descendant leaf and branch bundles. Top-level content directories are branch bundles even without `_index.md`. [Hugo: Page bundles—branch bundles](https://gohugo.io/content-management/page-bundles/#branch-bundles) +- In a branch bundle, descendant content files are rendered as content pages, while resources of descendant bundles do not belong to the branch. In a leaf bundle, additional content files are page resources and are not rendered as individual pages. [Hugo: Page bundles—comparison](https://gohugo.io/content-management/page-bundles/#comparison) +- Page resources are available only to their owning page bundle. A page retrieves them with `.Resources` and the page-relative `.Get`, `.GetMatch`, `.Match`, and `.ByType` methods. [Hugo: Page resources](https://gohugo.io/content-management/page-resources/) [Hugo: `PAGE.Resources`](https://gohugo.io/methods/page/resources/) + +### `_index.md`, sections, lists, and templates + +- `_index.md` provides front matter and content for home, section, taxonomy, and term pages; `index.md` instead creates a regular page. [Hugo: Content organization—index pages](https://gohugo.io/content-management/organization/#index-pages-_indexmd) [Hugo: Page bundles—comparison](https://gohugo.io/content-management/page-bundles/#comparison) +- A section is a top-level content directory or any directory containing `_index.md`. Sections have list pages and logical ancestors/descendants; directories that are not sections do not. [Hugo: Sections—overview](https://gohugo.io/content-management/sections/#overview) [Hugo: Sections—explanation](https://gohugo.io/content-management/sections/#explanation) +- A section's `.Pages` contains its immediate pages by default. `.RegularPagesRecursive` includes descendant regular pages. [Hugo: Sections—explanation](https://gohugo.io/content-management/sections/#explanation) +- Hugo selects a nested section's template using the top-level section name, not the subsection name. A subsection can select a different template by setting `type` and/or `layout` in front matter. [Hugo: Sections—template selection](https://gohugo.io/content-management/sections/#template-selection) + +### URLs, permalinks, and redirects + +- By default, a page's URL follows its path beneath `content`; with pretty URLs, `content/posts/post-1.md` renders at `/posts/post-1/`. [Hugo: URL management—overview](https://gohugo.io/content-management/urls/#overview) +- `_index.md` is the index for its containing directory: Hugo documents `content/posts/_index.md` as the `/posts/` section-list page. Therefore, replacing `content/articles/.md` with `content/articles//_index.md` retains the same directory path and thus the same default `/articles//` URL. [Hugo: Content organization—index pages](https://gohugo.io/content-management/organization/#index-pages-_indexmd) [Hugo: URL management—overview](https://gohugo.io/content-management/urls/#overview) +- Front matter `url` overrides an entire URL path on regular and section pages, while `slug` overrides only the final segment; `url` takes precedence when both are set. Project `permalinks` can also use date, section, hierarchy, and content-basename tokens. [Hugo: URL management—front matter](https://gohugo.io/content-management/urls/#front-matter) [Hugo: URL management—tokens and permalinks](https://gohugo.io/content-management/urls/#tokens) +- Front matter `aliases` defines previous paths for a page. By default, Hugo writes a client-side HTML redirect for each alias; `.Aliases` can instead support generated server-side redirect rules. [Hugo: URL management—aliases](https://gohugo.io/content-management/urls/#aliases) + +## Repository-specific recommendation + +### Recommended target structure + +Use year and month branch bundles to organize the archive, with each Article represented by a leaf bundle: + +```text +content/ +└── articles/ # existing /articles/ branch bundle + ├── _index.md + └── 2026/ + ├── _index.md # year branch bundle + └── 09/ + ├── _index.md # month branch bundle + └── powershell-can-put-pictures-in-your-terminal-with-sixel/ + ├── index.md # Article leaf bundle + └── cover.png # optional, Article-owned resource +``` + +The Article leaf bundle stays a regular page and therefore continues to use the existing Article single-page presentation. Because the added year and month directories would otherwise become URL segments, each migrated Article must set `url` to its established dated route, such as `/articles/2026-09-03-powershell-can-put-pictures-in-your-terminal-with-sixel/`. `slug` controls only the final URL segment and cannot preserve a route after inserting parent directories. Preserve all existing front matter and aliases. [Hugo: URL management—front matter](https://gohugo.io/content-management/urls/#front-matter) [Hugo: URL management—aliases](https://gohugo.io/content-management/urls/#aliases) + +### Listing and archive behavior + +Year and month branch bundles intentionally create public archive pages. A section's default `.Pages` collection contains immediate pages, while `.RegularPagesRecursive` includes regular pages beneath descendant branches. The root Articles list must paginate `.RegularPagesRecursive` to remain an all-Articles archive; the branch archives may use their own page collections. [Hugo: Sections—explanation](https://gohugo.io/content-management/sections/#explanation) + +Nested branch bundles use the top-level `articles` section for template lookup. The Article leaf bundles retain single-page template selection; no Article-specific section template is required. [Hugo: Sections—template selection](https://gohugo.io/content-management/sections/#template-selection) [Hugo: Page bundles—comparison](https://gohugo.io/content-management/page-bundles/#comparison) + +### Resources and existing media + +Keep existing `static/images/articles` files and their root-relative references unchanged during the hierarchy migration. Moving Markdown files alone preserves those links. New Article resources may live beside an Article `index.md`; move existing assets only in a separately scoped migration and update their links or templates to use page-resource lookups. [Hugo: Page resources](https://gohugo.io/content-management/page-resources/) [Hugo: `PAGE.Resources`](https://gohugo.io/methods/page/resources/) + +## Staged migration plan + +1. **Inventory.** Record every flat Article path, canonical route, aliases, and references to static Article media. +2. **Prepare listings.** Update the root Article archive to use `.RegularPagesRecursive`; retain the regular-page Article template and configure the RSS output to include descendants. +3. **Pilot one Article.** Move it to `articles/YYYY/MM/slug/index.md`, preserve front matter and aliases, add its full `url`, and leave static assets in place. Confirm its canonical route, archive membership, RSS membership, taxonomy visibility, and media. +4. **Migrate in batches.** Apply the exact rename and URL contract to every dated Article. Remove each old flat source after its leaf bundle is authoritative. +5. **Verify generated output.** Compare every published Article page and alias redirect with the migration inventory; missing routes, lost root-list membership, feed omissions, or missing static assets are release blockers. +6. **Consider asset ownership separately.** After URL stability is proven, optionally move Article assets into their leaf bundles and update resource references without changing their published paths unintentionally. + +## Actionable recommendation + +Adopt `content/articles/YYYY/MM//index.md`, with `_index.md` year and month branches. Give every migrated Article an explicit full `url` equal to its existing dated route, retain aliases and static `/images/articles/...` assets, and paginate the root archive with `.RegularPagesRecursive`. This creates useful chronological archive branches while preserving Article rendering and all established public routes. [Hugo: Page bundles](https://gohugo.io/content-management/page-bundles/) [Hugo: URL management](https://gohugo.io/content-management/urls/) diff --git a/package.json b/package.json index 5399c30db..08e9331dc 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "build": "hugo --gc --minify", "build:css": "node scripts/build-tailwind.mjs", "build:icons": "node scripts/build-icons.mjs", + "validate:articles": "node scripts/validate-article-bundles.mjs", "preview": "hugo server --environment production" }, "devDependencies": { diff --git a/scripts/article-route-inventory.json b/scripts/article-route-inventory.json new file mode 100644 index 000000000..51dfb2e64 --- /dev/null +++ b/scripts/article-route-inventory.json @@ -0,0 +1,15279 @@ +[ + { + "route": "/articles/2010-09-21-make-ps1exewrapper/", + "aliases": [ + "/2010/09/make-ps1exewrapper/" + ], + "draft": false, + "authors": [ + "Keith Hill" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-03-09-mvp-summit-2011/", + "aliases": [ + "/2011/03/mvp-summit-2011/" + ], + "draft": false, + "authors": [ + "Keith Hill" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-03-16-powerscripting-podcast-with-jeffrey-snover-and-kenneth-hansen/", + "aliases": [ + "/2011/03/powerscripting-podcast-with-jeffrey-snover-and-kenneth-hansen/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-03-21-powergui-spring-2011-desktop-wallpaper/", + "aliases": [ + "/2011/03/powergui-spring-2011-desktop-wallpaper/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-03-22-adam-driscoll-talks-about-powershell-and-powergui-on-net-rocks/", + "aliases": [ + "/2011/03/adam-driscoll-talks-about-powershell-and-powergui-on-net-rocks/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-03-28-happy-4th-birthday-powergui/", + "aliases": [ + "/2011/03/happy-4th-birthday-powergui/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-04-04-the-2011-scripting-games-have-begun/", + "aliases": [ + "/2011/04/the-2011-scripting-games-have-begun/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-04-22-earth-day-2011-powergui-style/", + "aliases": [ + "/2011/04/earth-day-2011-powergui-style/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-04-28-learn-more-about-powershell-at-teched-2011/", + "aliases": [ + "/2011/04/learn-more-about-powershell-at-teched-2011/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-05-13-exciting-powergui-news-at-teched-2011-next-week/", + "aliases": [ + "/2011/05/exciting-powergui-news-at-teched-2011-next-week/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-05-17-try-the-powergui-pro-3-0-beta-today/", + "aliases": [ + "/2011/05/try-the-powergui-pro-3-0-beta-today/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-05-18-configuring-rbac-for-mobileshell-in-powergui-pro-3-0/", + "aliases": [ + "/2011/05/configuring-rbac-for-mobileshell-in-powergui-pro-3-0/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-06-17-powergui-pro-3-0-beta-2-is-now-available/", + "aliases": [ + "/2011/06/powergui-pro-3-0-beta-2-is-now-available/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-06-28-vworkspace-powerpack-a-great-example-of-the-power-and-flexibility-you-get-from-powershell-and-powergui/", + "aliases": [ + "/2011/06/vworkspace-powerpack-a-great-example-of-the-power-and-flexibility-you-get-from-powershell-and-powergui/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-07-15-powergui-pro-and-powergui-3-0-are-now-available/", + "aliases": [ + "/2011/07/powergui-pro-and-powergui-3-0-are-now-available/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-07-18-powergui-pro-3-0-mobile-systems-management-using-mobileshell/", + "aliases": [ + "/2011/07/powergui-pro-3-0-mobile-systems-management-using-mobileshell/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-07-20-powergui-3-0-hotfix-double-clicking-on-a-ps1-psm1-or-psd1-file-to-open-the-script-editor-shows-the-start-page-as-the-active-page-in-the-script-editor/", + "aliases": [ + "/2011/07/powergui-3-0-hotfix-double-clicking-on-a-ps1-psm1-or-psd1-file-to-open-the-script-editor-shows-the-start-page-as-the-active-page-in-the-script-editor/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-07-28-one-for-the-road-stepping-away-from-powergui/", + "aliases": [ + "/2011/07/one-for-the-road-stepping-away-from-powergui/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-09-06-seasons-of-change-new-product-manager-for-powerwf-and-powerse-at-devfarm-software/", + "aliases": [ + "/2011/09/seasons-of-change-new-product-manager-for-powerwf-and-powerse-at-devfarm-software/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-09-18-pscx-2-1-beta-1-available-for-download/", + "aliases": [ + "/2011/09/pscx-2-1-beta-1-available-for-download/" + ], + "draft": false, + "authors": [ + "Keith Hill" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-10-14-powerse-2-5-3-is-now-available/", + "aliases": [ + "/2011/10/powerse-2-5-3-is-now-available/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-10-19-windows-powershell-version-3-simplified-syntax/", + "aliases": [ + "/2011/10/windows-powershell-version-3-simplified-syntax/" + ], + "draft": false, + "authors": [ + "Keith Hill" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2011-12-05-microsoft-windows-powershell-v3-ctp2-available-for-download/", + "aliases": [ + "/2011/12/microsoft-windows-powershell-v3-ctp2-available-for-download/" + ], + "draft": false, + "authors": [ + "Keith Hill" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-01-02-powershell-v3-ctp2-provides-better-argument-passing-to-exes/", + "aliases": [ + "/2012/01/powershell-v3-ctp2-provides-better-argument-passing-to-exes/" + ], + "draft": false, + "authors": [ + "Keith Hill" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-01-04-powershell-mvp-for-2012/", + "aliases": [ + "/2012/01/powershell-mvp-for-2012/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-01-05-essential-powershell-to-alias-or-not-to-alias-that-is-the-question/", + "aliases": [ + "/2012/01/essential-powershell-to-alias-or-not-to-alias-that-is-the-question/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-01-24-powerwf-and-powerse-2-7-are-now-available/", + "aliases": [ + "/2012/01/powerwf-and-powerse-2-7-are-now-available/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-01-25-powerse-2-7-kb-powershell-profile-does-not-load-on-startup/", + "aliases": [ + "/2012/01/powerse-2-7-kb-powershell-profile-does-not-load-on-startup/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-03-04-powershell-v3-beta-better-ntfs-alternate-data-stream-handling/", + "aliases": [ + "/2012/03/powershell-v3-beta-better-ntfs-alternate-data-stream-handling/" + ], + "draft": false, + "authors": [ + "Keith Hill" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-03-06-windows-8reimagined/", + "aliases": [ + "/2012/03/windows-8reimagined/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-03-29-this-april-is-learn-more-about-powershell-month-with-the-2012-scripting-games-the-2012-microsoft-management-summit-and-the-2012-north-american-powershell-deep-dive/", + "aliases": [ + "/2012/03/this-april-is-learn-more-about-powershell-month-with-the-2012-scripting-games-the-2012-microsoft-management-summit-and-the-2012-north-american-powershell-deep-dive/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-04-29-powershell-v3-obsoleteattribute/", + "aliases": [ + "/2012/04/powershell-v3-obsoleteattribute/" + ], + "draft": false, + "authors": [ + "Keith Hill" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-06-02-looking-for-a-good-tech-conference-try-this/", + "aliases": [ + "/2012/06/looking-for-a-good-tech-conference-try-this/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-06-03-final-outlines-for-the-v3-lunches-books/", + "aliases": [ + "/2012/06/final-outlines-for-the-v3-lunches-books/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-06-04-updated-tweaks-to-powershel-v3-updatable-help/", + "aliases": [ + "/2012/06/updated-tweaks-to-powershel-v3-updatable-help/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-06-07-using-powershell-to-scrape-the-web/", + "aliases": [ + "/2012/06/using-powershell-to-scrape-the-web/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-06-14-how-to-use-write-host-without-endangering-puppies-or-a-manifesto-for-modularizing-powershell-scripts/", + "aliases": [ + "/2012/06/how-to-use-write-host-without-endangering-puppies-or-a-manifesto-for-modularizing-powershell-scripts/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-06-14-sample-code-from-my-teched-building-reusable-powershell-tools-session/", + "aliases": [ + "/2012/06/sample-code-from-my-teched-building-reusable-powershell-tools-session/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-06-19-teched-powershell-sessions/", + "aliases": [ + "/2012/06/teched-powershell-sessions/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-06-19-updated-snover-school-fancy-wildcards/", + "aliases": [ + "/2012/06/updated-snover-school-fancy-wildcards/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-06-26-upcoming-powershell-books-and-how-to-get-them/", + "aliases": [ + "/2012/06/upcoming-powershell-books-and-how-to-get-them/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-07-08-july-25-update-powershell-in-depth-limited-edition-pre-orders-as-they-stand/", + "aliases": [ + "/2012/07/july-25-update-powershell-in-depth-limited-edition-pre-orders-as-they-stand/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-07-09-release-dates-for-powershell-3-announced/", + "aliases": [ + "/2012/07/release-dates-for-powershell-3-announced/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-07-17-note-powershell-book-limited-edition-preorders-only-available-as-preorders/", + "aliases": [ + "/2012/07/note-powershell-book-limited-edition-preorders-only-available-as-preorders/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-07-18-kirk-munro-product-manager-architect-and-powershell-mvp-for-hire/", + "aliases": [ + "/2012/07/kirk-munro-product-manager-architect-and-powershell-mvp-for-hire/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-07-19-measure-powershell-performance/", + "aliases": [ + "/2012/07/measure-powershell-performance/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-07-24-comparing-lunches-v2-to-v3/", + "aliases": [ + "/2012/07/comparing-lunches-v2-to-v3/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-07-24-join-jeff-and-i-for-a-live-powershell-video-chat-cast/", + "aliases": [ + "/2012/07/join-jeff-and-i-for-a-live-powershell-video-chat-cast/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-07-26-pscx-3-0-beta-released/", + "aliases": [ + "/2012/07/pscx-3-0-beta-released/" + ], + "draft": false, + "authors": [ + "Keith Hill" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-07-29-the-new-community/", + "aliases": [ + "/2012/07/the-new-community/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2012-07-29-want-to-contribute/", + "aliases": [ + "/2012/07/want-to-contribute/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2012-08-06-ebook-secrets-of-powershell-remoting/", + "aliases": [ + "/2012/08/ebook-secrets-of-powershell-remoting/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Books", + "PowerShell for Admins", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2012-08-30-powershell-workflow-when-should-you-use-it/", + "aliases": [ + "/2012/08/powershell-workflow-when-should-you-use-it/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2012-09-09-powershell-summit-im-feeling-lucky-tickets-on-sale-400-each/", + "aliases": [ + "/2012/09/powershell-summit-im-feeling-lucky-tickets-on-sale-400-each/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "Events", + "News", + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2012-09-10-own-a-piece-of-the-community-buy-shares-in-powershell-org-inc/", + "aliases": [ + "/2012/09/own-a-piece-of-the-community-buy-shares-in-powershell-org-inc/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2012-09-11-powershell-summit-best-conference-deal-ever/", + "aliases": [ + "/2012/09/powershell-summit-best-conference-deal-ever/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "Events", + "News" + ], + "tags": [] + }, + { + "route": "/articles/2012-09-13-powershell-summit-north-america-2013-call-for-content/", + "aliases": [ + "/2012/09/powershell-summit-north-america-2013-call-for-content/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-09-15-pscx-2-1-and-3-0-release-candidates-posted/", + "aliases": [ + "/2012/09/pscx-2-1-and-3-0-release-candidates-posted/" + ], + "draft": false, + "authors": [ + "Keith Hill" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-10-10-10042012-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2012/10/10042012-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-10-15-session-voting-for-the-powershell-summit-north-america-2013/", + "aliases": [ + "/2012/10/session-voting-for-the-powershell-summit-north-america-2013/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2012-10-15-voting-for-the-2013-powershell-summit-sessions-is-now-open-2/", + "aliases": [ + "/2012/10/voting-for-the-2013-powershell-summit-sessions-is-now-open-2/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-10-23-secrets-of-powershell-remoting-updated-help-check-the-beta/", + "aliases": [ + "/2012/10/secrets-of-powershell-remoting-updated-help-check-the-beta/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2012-10-24-free-ebook-creating-html-reports-in-powershell/", + "aliases": [ + "/2012/10/free-ebook-creating-html-reports-in-powershell/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2012-10-26-if-you-havent-watched-the-powerscripting-podcast/", + "aliases": [ + "/2012/10/if-you-havent-watched-the-powerscripting-podcast/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2012-10-26-powershell-v3s-new-simplified-syntax/", + "aliases": [ + "/2012/10/powershell-v3s-new-simplified-syntax/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2012-10-28-ideras-powershell-plus-editor-now-free-for-all/", + "aliases": [ + "/2012/10/ideras-powershell-plus-editor-now-free-for-all/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2012-11-02-final-ticket-inventory-for-powershell-summit-na-2013-released/", + "aliases": [ + "/2012/11/final-ticket-inventory-for-powershell-summit-na-2013-released/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2012-11-02-powershell-summit-community-sessions-list/", + "aliases": [ + "/2012/11/powershell-summit-community-sessions-list/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-11-06-hands-on-workshop-at-the-2013-powershell-summit/", + "aliases": [ + "/2012/11/hands-on-workshop-at-the-2013-powershell-summit/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-11-06-special-powershell-team-workshop-to-be-held-at-powershell-summit-n-a-2013/", + "aliases": [ + "/2012/11/special-powershell-team-workshop-to-be-held-at-powershell-summit-n-a-2013/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2012-11-08-phillyposh-11012012-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2012/11/phillyposh-11012012-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-11-09-verify-your-powershell-skills/", + "aliases": [ + "/2012/11/verify-your-powershell-skills/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "News", + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2012-11-16-charts-in-powershell-generated-reports/", + "aliases": [ + "/2012/11/charts-in-powershell-generated-reports/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2012-11-18-help-beta-test-a-new-free-ebook-on-powershell-reporting/", + "aliases": [ + "/2012/11/help-beta-test-a-new-free-ebook-on-powershell-reporting/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2012-11-24-what-to-do-if-you-dont-score-a-powershell-summit-ticket/", + "aliases": [ + "/2012/11/what-to-do-if-you-dont-score-a-powershell-summit-ticket/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2012-12-10-phillyposh-12062012-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2012/12/phillyposh-12062012-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-12-18-powershell-deep-dives/", + "aliases": [ + "/2012/12/powershell-deep-dives/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-12-18-writing-10961-the-ultimate-lab/", + "aliases": [ + "/2012/12/writing-10961-the-ultimate-lab/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2012-12-19-renaming-a-user/", + "aliases": [ + "/2012/12/renaming-a-user/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-12-20-uk-powershell-group-sessions-for-2013/", + "aliases": [ + "/2012/12/uk-powershell-group-sessions-for-2013/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-12-20-wmf-compatibility/", + "aliases": [ + "/2012/12/wmf-compatibility/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2012-12-21-powershell-org-our-first-year-in-review/", + "aliases": [ + "/2012/12/powershell-org-our-first-year-in-review/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2012-12-21-writing-10961-remoting/", + "aliases": [ + "/2012/12/writing-10961-remoting/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2012-12-24-writing-10961-first-module-in-for-review/", + "aliases": [ + "/2012/12/writing-10961-first-module-in-for-review/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-01-03-displaying-data-from-multiple-servers-as-html/", + "aliases": [ + "/2013/01/displaying-data-from-multiple-servers-as-html/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-03-ensuring-that-parameter-values-are-passed-to-your-function/", + "aliases": [ + "/2013/01/ensuring-that-parameter-values-are-passed-to-your-function/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-03-powershell-workflow-articles/", + "aliases": [ + "/2013/01/powershell-workflow-articles/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-04-finding-the-domain-controller-that-authenticated-you/", + "aliases": [ + "/2013/01/finding-the-domain-controller-that-authenticated-you/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-04-writing-10961-trademarks/", + "aliases": [ + "/2013/01/writing-10961-trademarks/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-01-05-number-of-processors-in-a-box/", + "aliases": [ + "/2013/01/number-of-processors-in-a-box/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-05-select-string-confusion/", + "aliases": [ + "/2013/01/select-string-confusion/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-07-phillyposh-01032013-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2013/01/phillyposh-01032013-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-07-select-string-scenarios-fixed-columns/", + "aliases": [ + "/2013/01/select-string-scenarios-fixed-columns/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-08-3-updated-free-powershell-ebooks-in-january-2013/", + "aliases": [ + "/2013/01/3-updated-free-powershell-ebooks-in-january-2013/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-01-08-select-string-information-on-matching-files/", + "aliases": [ + "/2013/01/select-string-information-on-matching-files/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-09-select-string-finding-the-first-and-last-matches/", + "aliases": [ + "/2013/01/select-string-finding-the-first-and-last-matches/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-09-workflow-article-3/", + "aliases": [ + "/2013/01/workflow-article-3/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-10-writing-10961a-the-damn-variables/", + "aliases": [ + "/2013/01/writing-10961a-the-damn-variables/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-01-11-select-string-keeping-in-context/", + "aliases": [ + "/2013/01/select-string-keeping-in-context/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-11-windows-powershell-v3-language-specification-posted/", + "aliases": [ + "/2013/01/windows-powershell-v3-language-specification-posted/" + ], + "draft": false, + "authors": [ + "Keith Hill" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-12-planning-the-powershell-summit-north-america-2014/", + "aliases": [ + "/2013/01/planning-the-powershell-summit-north-america-2014/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-01-15-updating-help-on-powershell-v3/", + "aliases": [ + "/2013/01/updating-help-on-powershell-v3/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-16-account-sids-revisited/", + "aliases": [ + "/2013/01/account-sids-revisited/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-16-account-sids/", + "aliases": [ + "/2013/01/account-sids/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-16-passing-function-names/", + "aliases": [ + "/2013/01/passing-function-names/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-16-powershell-wins-award/", + "aliases": [ + "/2013/01/powershell-wins-award/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-16-uk-powershell-group-29-january-2013/", + "aliases": [ + "/2013/01/uk-powershell-group-29-january-2013/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-16-workflow-article-4/", + "aliases": [ + "/2013/01/workflow-article-4/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-17-account-sids-hopefully-my-last-word/", + "aliases": [ + "/2013/01/account-sids-hopefully-my-last-word/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-17-starting-virtual-machines-for-wsus/", + "aliases": [ + "/2013/01/starting-virtual-machines-for-wsus/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-19-piping-between-functions/", + "aliases": [ + "/2013/01/piping-between-functions/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-28-powershell-and-active-directory-reminder/", + "aliases": [ + "/2013/01/powershell-and-active-directory-reminder/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-28-the-2013-winter-scripting-camp/", + "aliases": [ + "/2013/01/the-2013-winter-scripting-camp/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-01-30-powershell-and-active-directory-recording/", + "aliases": [ + "/2013/01/powershell-and-active-directory-recording/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-01-30-powershell-workflows-now-we-are-six/", + "aliases": [ + "/2013/01/powershell-workflows-now-we-are-six/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-02-01-winter-scripting-camp-opened-to-the-public/", + "aliases": [ + "/2013/02/winter-scripting-camp-opened-to-the-public/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-02-02-verified-effective-powershell-certification-program-now-ready-for-beta/", + "aliases": [ + "/2013/02/verified-effective-powershell-certification-program-now-ready-for-beta/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-02-05-scripting-games-warm-up/", + "aliases": [ + "/2013/02/scripting-games-warm-up/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-02-05-want-to-be-verified-effective-for-powershell-heres-what-to-expect/", + "aliases": [ + "/2013/02/want-to-be-verified-effective-for-powershell-heres-what-to-expect/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-02-11-winter-scripting-camp-the-post-mortem/", + "aliases": [ + "/2013/02/winter-scripting-camp-the-post-mortem/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-02-13-powershell-workflow-the-complete-series/", + "aliases": [ + "/2013/02/powershell-workflow-the-complete-series/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-02-16-phillyposh-02072013-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2013/02/phillyposh-02072013-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-02-18-cim-cmdlets-and-remote-access/", + "aliases": [ + "/2013/02/cim-cmdlets-and-remote-access/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-02-18-filtering/", + "aliases": [ + "/2013/02/filtering/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-02-18-uk-powershell-group-advanced-functions/", + "aliases": [ + "/2013/02/uk-powershell-group-advanced-functions/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-02-18-verified-effective-about-ready-to-go-live/", + "aliases": [ + "/2013/02/verified-effective-about-ready-to-go-live/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-02-21-creating-a-windows-2012-domain-controller/", + "aliases": [ + "/2013/02/creating-a-windows-2012-domain-controller/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-02-24-verified-effective-for-powershell-3-0-toolmaking-now-live/", + "aliases": [ + "/2013/02/verified-effective-for-powershell-3-0-toolmaking-now-live/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-02-25-advanced-functions-webcast/", + "aliases": [ + "/2013/02/advanced-functions-webcast/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-02-25-new-book/", + "aliases": [ + "/2013/02/new-book/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-02-25-powershell-in-depth-nearly-there/", + "aliases": [ + "/2013/02/powershell-in-depth-nearly-there/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-02-27-book-offer-ad-management-in-a-month-of-lunches/", + "aliases": [ + "/2013/02/book-offer-ad-management-in-a-month-of-lunches/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-02-27-filter-or-ldap-filter/", + "aliases": [ + "/2013/02/filter-or-ldap-filter/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-02-27-last-nights-live-meeting/", + "aliases": [ + "/2013/02/last-nights-live-meeting/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-02-27-powershell-org-forums-etiquette/", + "aliases": [ + "/2013/02/powershell-org-forums-etiquette/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2013-03-01-windows-8-kindle-app/", + "aliases": [ + "/2013/03/windows-8-kindle-app/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-03-04-network-adapters/", + "aliases": [ + "/2013/03/network-adapters/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-03-08-announcing-winter-scripting-camp-winners/", + "aliases": [ + "/2013/03/announcing-winter-scripting-camp-winners/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-03-08-powershell-summit-2014-planning-continues/", + "aliases": [ + "/2013/03/powershell-summit-2014-planning-continues/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2013-03-08-wmi-explorer/", + "aliases": [ + "/2013/03/wmi-explorer/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2013-03-10-phillyposh-03072013-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2013/03/phillyposh-03072013-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-03-11-network-adapters-disableenable/", + "aliases": [ + "/2013/03/network-adapters-disableenable/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-03-21-powershell-3-sdk-samples/", + "aliases": [ + "/2013/03/powershell-3-sdk-samples/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-03-21-uk-powershell-group-session-postponement/", + "aliases": [ + "/2013/03/uk-powershell-group-session-postponement/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-03-24-wmi-vs-cim/", + "aliases": [ + "/2013/03/wmi-vs-cim/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-03-26-cim-cmdlets/", + "aliases": [ + "/2013/03/cim-cmdlets/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-01-mvp-renewal-2013/", + "aliases": [ + "/2013/04/mvp-renewal-2013/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-01-shutting-down-a-remote-computer/", + "aliases": [ + "/2013/04/shutting-down-a-remote-computer/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-02-2013-scripting-games-competitor-guide-for-the-public-too/", + "aliases": [ + "/2013/04/2013-scripting-games-competitor-guide-for-the-public-too/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-03-2013-scripting-games-schedule/", + "aliases": [ + "/2013/04/2013-scripting-games-schedule/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-03-powershell-excerpt-week-2/", + "aliases": [ + "/2013/04/powershell-excerpt-week-2/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-03-putting-the-date-in-a-file-name/", + "aliases": [ + "/2013/04/putting-the-date-in-a-file-name/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-04-manning-deal-of-the-day-april-6-2013-2/", + "aliases": [ + "/2013/04/manning-deal-of-the-day-april-6-2013-2/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-05-coming-tips-for-the-scripting-games/", + "aliases": [ + "/2013/04/coming-tips-for-the-scripting-games/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-05-powershell-script-that-relaunches-as-admin/", + "aliases": [ + "/2013/04/powershell-script-that-relaunches-as-admin/" + ], + "draft": false, + "authors": [ + "Keith Hill" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-06-2013-scripting-games-judges/", + "aliases": [ + "/2013/04/2013-scripting-games-judges/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-06-2013-scripting-games-mighty-panel-of-celebrity-judges/", + "aliases": [ + "/2013/04/2013-scripting-games-mighty-panel-of-celebrity-judges/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-06-ad-management-in-a-month-of-lunches/", + "aliases": [ + "/2013/04/ad-management-in-a-month-of-lunches/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-07-phillyposh-04042013-meeting-summary/", + "aliases": [ + "/2013/04/phillyposh-04042013-meeting-summary/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-08-running-workflows/", + "aliases": [ + "/2013/04/running-workflows/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-11-time-is-running-out-to-own-a-piece-of-powershell-org/", + "aliases": [ + "/2013/04/time-is-running-out-to-own-a-piece-of-powershell-org/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-11-windows-server-backup-4/", + "aliases": [ + "/2013/04/windows-server-backup-4/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-12-creating-a-new-disk-3/", + "aliases": [ + "/2013/04/creating-a-new-disk-3/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-13-busy-busy-busy-2/", + "aliases": [ + "/2013/04/busy-busy-busy-2/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-13-powershell-deep-dives-another-meap-release-2/", + "aliases": [ + "/2013/04/powershell-deep-dives-another-meap-release-2/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-13-scripting-games-instructions-now-available/", + "aliases": [ + "/2013/04/scripting-games-instructions-now-available/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-15-changes-coming-to-powershell-org/", + "aliases": [ + "/2013/04/changes-coming-to-powershell-org/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-17-pre-summit-hang/", + "aliases": [ + "/2013/04/pre-summit-hang/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-17-scripting-games-2013-prize-list/", + "aliases": [ + "/2013/04/scripting-games-2013-prize-list/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-18-beginner-practice-event/", + "aliases": [ + "/2013/04/beginner-practice-event/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-18-last-minute-summit-info-and-changes/", + "aliases": [ + "/2013/04/last-minute-summit-info-and-changes/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-18-scripting-games-competitor-guide-instructions-update/", + "aliases": [ + "/2013/04/scripting-games-competitor-guide-instructions-update/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-18-what-are-your-powershell-newbie-gotchas/", + "aliases": [ + "/2013/04/what-are-your-powershell-newbie-gotchas/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-19-comments-from-the-powershell-org-survey/", + "aliases": [ + "/2013/04/comments-from-the-powershell-org-survey/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-20-advanced-practice-event/", + "aliases": [ + "/2013/04/advanced-practice-event/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-20-show-your-scripting-games-pride/", + "aliases": [ + "/2013/04/show-your-scripting-games-pride/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-22-meet-the-scripting-games-judges-jeffery-hicks/", + "aliases": [ + "/2013/04/meet-the-scripting-games-judges-jeffery-hicks/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-22-powershell-summit-2013-conference-schedule/", + "aliases": [ + "/2013/04/powershell-summit-2013-conference-schedule/" + ], + "draft": false, + "authors": [ + "Poshoholic" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-22-summit-downloads/", + "aliases": [ + "/2013/04/summit-downloads/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-24-now-accepting-nominations-for-powershell-org-inc-board-of-directors/", + "aliases": [ + "/2013/04/now-accepting-nominations-for-powershell-org-inc-board-of-directors/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-24-pscustomobject-save-puppies-and-avoid-dead-ends/", + "aliases": [ + "/2013/04/pscustomobject-save-puppies-and-avoid-dead-ends/" + ], + "draft": false, + "authors": [ + "June Blender" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-25-meet-the-scripting-games-judges-scripting-guy-ed-wilson/", + "aliases": [ + "/2013/04/meet-the-scripting-games-judges-scripting-guy-ed-wilson/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-25-recording-the-powershell-summit/", + "aliases": [ + "/2013/04/recording-the-powershell-summit/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-26-forums-migration-schedule/", + "aliases": [ + "/2013/04/forums-migration-schedule/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-27-powershell-summit-thank-you/", + "aliases": [ + "/2013/04/powershell-summit-thank-you/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-28-cim-cmdlets-vs-wmi-cmdlets-speed-of-execution/", + "aliases": [ + "/2013/04/cim-cmdlets-vs-wmi-cmdlets-speed-of-execution/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-28-comparing-sql-server-table-schemas-with-powershell/", + "aliases": [ + "/2013/04/comparing-sql-server-table-schemas-with-powershell/" + ], + "draft": false, + "authors": [ + "Enrique Puig" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-28-scripting-games-2013-have-started/", + "aliases": [ + "/2013/04/scripting-games-2013-have-started/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-28-time-for-d-crud/", + "aliases": [ + "/2013/04/time-for-d-crud/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-29-ad-management-in-a-month-of-lunches-chapter-9-in-meap/", + "aliases": [ + "/2013/04/ad-management-in-a-month-of-lunches-chapter-9-in-meap/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-29-cim-vs-wmi-cmdlets-remote-execution-speed/", + "aliases": [ + "/2013/04/cim-vs-wmi-cmdlets-remote-execution-speed/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-29-event-1-my-way/", + "aliases": [ + "/2013/04/event-1-my-way/" + ], + "draft": false, + "authors": [ + "Bartek Bielawski" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-29-name-that-property/", + "aliases": [ + "/2013/04/name-that-property/" + ], + "draft": false, + "authors": [ + "June Blender" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-29-state-of-the-games/", + "aliases": [ + "/2013/04/state-of-the-games/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-30-how-to-name-your-help-files/", + "aliases": [ + "/2013/04/how-to-name-your-help-files/" + ], + "draft": false, + "authors": [ + "June Blender" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-30-meet-the-scripting-games-judges-june-blender/", + "aliases": [ + "/2013/04/meet-the-scripting-games-judges-june-blender/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-30-new-technical-product-manager-at-provance-technologies/", + "aliases": [ + "/2013/04/new-technical-product-manager-at-provance-technologies/" + ], + "draft": false, + "authors": [ + "Kirk Munro" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-04-30-scripting-games-voting-continues/", + "aliases": [ + "/2013/04/scripting-games-voting-continues/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-04-30-thoughts-on-event-1-and-frankly-a-rant/", + "aliases": [ + "/2013/04/thoughts-on-event-1-and-frankly-a-rant/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-01-and-the-norweigian-judge-says/", + "aliases": [ + "/2013/05/and-the-norweigian-judge-says/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-01-do-you-really-support-should-process/", + "aliases": [ + "/2013/05/do-you-really-support-should-process/" + ], + "draft": false, + "authors": [ + "Bartek Bielawski" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-01-few-notes-written-after-event-1/", + "aliases": [ + "/2013/05/few-notes-written-after-event-1/" + ], + "draft": false, + "authors": [ + "Bartek Bielawski" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-01-scripting-games-2013-thoughts-after-event-1/", + "aliases": [ + "/2013/05/scripting-games-2013-thoughts-after-event-1/" + ], + "draft": false, + "authors": [ + "Boe Prox" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-01-tobias-judge-notes/", + "aliases": [ + "/2013/05/tobias-judge-notes/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-01-why-doesnt-my-validatescript-work-correctly/", + "aliases": [ + "/2013/05/why-doesnt-my-validatescript-work-correctly/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-02-event-1-moving-old-files/", + "aliases": [ + "/2013/05/event-1-moving-old-files/" + ], + "draft": false, + "authors": [ + "June Blender" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-02-event-2-opens-event-1-winding-down/", + "aliases": [ + "/2013/05/event-2-opens-event-1-winding-down/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-02-judge-notes-for-event-1/", + "aliases": [ + "/2013/05/judge-notes-for-event-1/" + ], + "draft": false, + "authors": [ + "Art Beane" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-02-scripting-games-2013-event-1-favorite-and-not-so-favorite-submissions/", + "aliases": [ + "/2013/05/scripting-games-2013-event-1-favorite-and-not-so-favorite-submissions/" + ], + "draft": false, + "authors": [ + "Boe Prox" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-03-beginner-event-tips/", + "aliases": [ + "/2013/05/beginner-event-tips/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-03-ok-im-impressed-scripting-games-week-1/", + "aliases": [ + "/2013/05/ok-im-impressed-scripting-games-week-1/" + ], + "draft": false, + "authors": [ + "Glenn Sizemore" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-03-placing-comment-based-help/", + "aliases": [ + "/2013/05/placing-comment-based-help/" + ], + "draft": false, + "authors": [ + "June Blender" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-03-scripting-games-what-should-we-do-with-comments/", + "aliases": [ + "/2013/05/scripting-games-what-should-we-do-with-comments/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-06-a-helpful-message-about-helpmessage/", + "aliases": [ + "/2013/05/a-helpful-message-about-helpmessage/" + ], + "draft": false, + "authors": [ + "June Blender" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-06-event-2-is-final/", + "aliases": [ + "/2013/05/event-2-is-final/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-06-event-2-my-way/", + "aliases": [ + "/2013/05/event-2-my-way/" + ], + "draft": false, + "authors": [ + "Bartek Bielawski" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-07-are-you-geting-unfair-comments-in-the-games/", + "aliases": [ + "/2013/05/are-you-geting-unfair-comments-in-the-games/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-07-dons-event-2-notes/", + "aliases": [ + "/2013/05/dons-event-2-notes/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-07-phillyposh-05022013-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2013/05/phillyposh-05022013-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-07-powershell-summit-videos/", + "aliases": [ + "/2013/05/powershell-summit-videos/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-07-scripting-games-event-1-winners/", + "aliases": [ + "/2013/05/scripting-games-event-1-winners/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-07-tips-on-implementing-pipeline-support/", + "aliases": [ + "/2013/05/tips-on-implementing-pipeline-support/" + ], + "draft": false, + "authors": [ + "Boe Prox" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-08-event-2-smart-aleck/", + "aliases": [ + "/2013/05/event-2-smart-aleck/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-08-more-judges-notes-on-event-2/", + "aliases": [ + "/2013/05/more-judges-notes-on-event-2/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-08-notes-on-beginner-event-2/", + "aliases": [ + "/2013/05/notes-on-beginner-event-2/" + ], + "draft": false, + "authors": [ + "Art Beane" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-08-scripting-games-2013-event-2-favorite-and-not-so-favorite/", + "aliases": [ + "/2013/05/scripting-games-2013-event-2-favorite-and-not-so-favorite/" + ], + "draft": false, + "authors": [ + "Boe Prox" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-09-as-event-3-gets-underway-here-are-some-event-2-stats/", + "aliases": [ + "/2013/05/as-event-3-gets-underway-here-are-some-event-2-stats/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-09-event-2-my-notes/", + "aliases": [ + "/2013/05/event-2-my-notes/" + ], + "draft": false, + "authors": [ + "Bartek Bielawski" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-09-meet-the-scripting-games-judges-jan-egil-ring/", + "aliases": [ + "/2013/05/meet-the-scripting-games-judges-jan-egil-ring/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-10-changes-in-scripting-games-displays/", + "aliases": [ + "/2013/05/changes-in-scripting-games-displays/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-10-scripting-games-beta-entry-viewer/", + "aliases": [ + "/2013/05/scripting-games-beta-entry-viewer/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-10-scripting-games-week-2-formatting-edition/", + "aliases": [ + "/2013/05/scripting-games-week-2-formatting-edition/" + ], + "draft": false, + "authors": [ + "Glenn Sizemore" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-10-some-notes-on-event-2-advanced/", + "aliases": [ + "/2013/05/some-notes-on-event-2-advanced/" + ], + "draft": false, + "authors": [ + "Art Beane" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-11-people-who-are-blogging-about-the-2013-scripting-games/", + "aliases": [ + "/2013/05/people-who-are-blogging-about-the-2013-scripting-games/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-12-scripting-games-2013-event-2-notes/", + "aliases": [ + "/2013/05/scripting-games-2013-event-2-notes/" + ], + "draft": false, + "authors": [ + "Boe Prox" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-13-event-3-my-way/", + "aliases": [ + "/2013/05/event-3-my-way/" + ], + "draft": false, + "authors": [ + "Bartek Bielawski" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-14-announcing-the-powershell-summit-north-america-2014/", + "aliases": [ + "/2013/05/announcing-the-powershell-summit-north-america-2014/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-14-scripting-games-event-1-winners-1/", + "aliases": [ + "/2013/05/scripting-games-event-1-winners-1/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-15-meet-the-scripting-games-judges-bartek-bielawski/", + "aliases": [ + "/2013/05/meet-the-scripting-games-judges-bartek-bielawski/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-15-scripting-games-2013-event-3-notes/", + "aliases": [ + "/2013/05/scripting-games-2013-event-3-notes/" + ], + "draft": false, + "authors": [ + "Boe Prox" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-16-jan-egils-event-3-learning-points/", + "aliases": [ + "/2013/05/jan-egils-event-3-learning-points/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-16-judge-notes-for-event-3/", + "aliases": [ + "/2013/05/judge-notes-for-event-3/" + ], + "draft": false, + "authors": [ + "Art Beane" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-16-more-updates-to-the-scripting-games/", + "aliases": [ + "/2013/05/more-updates-to-the-scripting-games/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-16-scheduled-powershell-org-maintenance-may-17-18/", + "aliases": [ + "/2013/05/scheduled-powershell-org-maintenance-may-17-18/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-16-tobias-notes-for-event-3/", + "aliases": [ + "/2013/05/tobias-notes-for-event-3/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-17-event-3-my-notes/", + "aliases": [ + "/2013/05/event-3-my-notes/" + ], + "draft": false, + "authors": [ + "Bartek Bielawski" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-18-meet-the-scripting-games-judges-olver-lipkau/", + "aliases": [ + "/2013/05/meet-the-scripting-games-judges-olver-lipkau/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-18-some-event-3-notes/", + "aliases": [ + "/2013/05/some-event-3-notes/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-18-your-weekend-games-report/", + "aliases": [ + "/2013/05/your-weekend-games-report/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-21-scripting-games-event-3-winners/", + "aliases": [ + "/2013/05/scripting-games-event-3-winners/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-21-validatescript-for-beginners/", + "aliases": [ + "/2013/05/validatescript-for-beginners/" + ], + "draft": false, + "authors": [ + "June Blender" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-22-jan-egils-event-4-notes/", + "aliases": [ + "/2013/05/jan-egils-event-4-notes/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-23-event-4-notes/", + "aliases": [ + "/2013/05/event-4-notes/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-23-judge-notes-for-event-4/", + "aliases": [ + "/2013/05/judge-notes-for-event-4/" + ], + "draft": false, + "authors": [ + "Art Beane" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-23-scripting-games-2013-event-4-notes/", + "aliases": [ + "/2013/05/scripting-games-2013-event-4-notes/" + ], + "draft": false, + "authors": [ + "Boe Prox" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-23-want-a-premier-powershell-class-in-your-area-next-year-help-me-make-it-happen/", + "aliases": [ + "/2013/05/want-a-premier-powershell-class-in-your-area-next-year-help-me-make-it-happen/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-24-scripting-games-week-4/", + "aliases": [ + "/2013/05/scripting-games-week-4/" + ], + "draft": false, + "authors": [ + "Glenn Sizemore" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-24-the-new-powershell-class-is-coming-to-a-cpls-near-you/", + "aliases": [ + "/2013/05/the-new-powershell-class-is-coming-to-a-cpls-near-you/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "News", + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-25-event-4-my-notes/", + "aliases": [ + "/2013/05/event-4-my-notes/" + ], + "draft": false, + "authors": [ + "Bartek Bielawski" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-28-scripting-games-event-4-winners/", + "aliases": [ + "/2013/05/scripting-games-event-4-winners/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-29-notes-for-event-5/", + "aliases": [ + "/2013/05/notes-for-event-5/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-29-super-secret-snover-session-at-teched/", + "aliases": [ + "/2013/05/super-secret-snover-session-at-teched/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "News" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-30-notes-on-event-5/", + "aliases": [ + "/2013/05/notes-on-event-5/" + ], + "draft": false, + "authors": [ + "Art Beane" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-05-31-free-powershell-workshop-video-from-techmentor-and-me/", + "aliases": [ + "/2013/05/free-powershell-workshop-video-from-techmentor-and-me/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-31-meet-the-scripting-games-judges/", + "aliases": [ + "/2013/05/meet-the-scripting-games-judges/" + ], + "draft": false, + "authors": [ + "Glenn Sizemore" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-31-scripting-games-week-5/", + "aliases": [ + "/2013/05/scripting-games-week-5/" + ], + "draft": false, + "authors": [ + "Glenn Sizemore" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-05-31-tobias-event-5-notes/", + "aliases": [ + "/2013/05/tobias-event-5-notes/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-06-01-as-the-scripting-games-wrap-up/", + "aliases": [ + "/2013/06/as-the-scripting-games-wrap-up/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-06-03-scripting-games-2013-event-5-notes/", + "aliases": [ + "/2013/06/scripting-games-2013-event-5-notes/" + ], + "draft": false, + "authors": [ + "Boe Prox" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-06-04-microsoft-announces-powershell-v4-dsc/", + "aliases": [ + "/2013/06/microsoft-announces-powershell-v4-dsc/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-06-04-scripting-games-event-5-winners/", + "aliases": [ + "/2013/06/scripting-games-event-5-winners/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-06-05-more-powershell-v4-and-dsc-details/", + "aliases": [ + "/2013/06/more-powershell-v4-and-dsc-details/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-06-07-notes-for-event-6/", + "aliases": [ + "/2013/06/notes-for-event-6/" + ], + "draft": false, + "authors": [ + "Art Beane" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-06-08-event-6-judges-notes-from-jan-egil-ring/", + "aliases": [ + "/2013/06/event-6-judges-notes-from-jan-egil-ring/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-06-08-last-events-my-notes-and-scripts/", + "aliases": [ + "/2013/06/last-events-my-notes-and-scripts/" + ], + "draft": false, + "authors": [ + "Bartek Bielawski" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-06-09-scripting-games-2013-event-6-notes/", + "aliases": [ + "/2013/06/scripting-games-2013-event-6-notes/" + ], + "draft": false, + "authors": [ + "Boe Prox" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-06-10-call-for-debates/", + "aliases": [ + "/2013/06/call-for-debates/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-06-11-overall-winners-of-the-scripting-games/", + "aliases": [ + "/2013/06/overall-winners-of-the-scripting-games/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-06-11-powershell-great-debate-error-trapping/", + "aliases": [ + "/2013/06/powershell-great-debate-error-trapping/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-06-11-scripting-games-event-5-winners-1/", + "aliases": [ + "/2013/06/scripting-games-event-5-winners-1/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-06-12-charlotte-user-group-july-meeting/", + "aliases": [ + "/2013/06/charlotte-user-group-july-meeting/" + ], + "draft": false, + "authors": [ + "ScriptingWife" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-06-17-powershell-great-debate-capturing-errors/", + "aliases": [ + "/2013/06/powershell-great-debate-capturing-errors/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-06-21-pipeline-or-script-that-is-the-question/", + "aliases": [ + "/2013/06/pipeline-or-script-that-is-the-question/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-06-25-powershell-great-debate-to-accelerate-or-not/", + "aliases": [ + "/2013/06/powershell-great-debate-to-accelerate-or-not/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-06-28-caution-dont-run-update-help-right-now/", + "aliases": [ + "/2013/06/caution-dont-run-update-help-right-now/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-07-01-come-to-powershell-summer-school/", + "aliases": [ + "/2013/07/come-to-powershell-summer-school/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell for Admins", + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2013-07-01-seeking-editor-for-powershell-org-techletter/", + "aliases": [ + "/2013/07/seeking-editor-for-powershell-org-techletter/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-07-02-its-safe-to-run-update-help-and-you-should/", + "aliases": [ + "/2013/07/its-safe-to-run-update-help-and-you-should/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-07-02-powershell-great-debate-formatting-constructs/", + "aliases": [ + "/2013/07/powershell-great-debate-formatting-constructs/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-07-03-how-cloud-first-design-affects-you/", + "aliases": [ + "/2013/07/how-cloud-first-design-affects-you/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-07-09-new-blog-posting-on-desired-state-configuration/", + "aliases": [ + "/2013/07/new-blog-posting-on-desired-state-configuration/" + ], + "draft": false, + "authors": [ + "Darren Mar-Elia" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-07-09-would-you-contribute-enterprise-software-reviews-offtopic/", + "aliases": [ + "/2013/07/would-you-contribute-enterprise-software-reviews-offtopic/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "News" + ], + "tags": [] + }, + { + "route": "/articles/2013-07-10-powershell-great-debate-backticks/", + "aliases": [ + "/2013/07/powershell-great-debate-backticks/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-07-11-powershell-summit-europe/", + "aliases": [ + "/2013/07/powershell-summit-europe/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2013-07-11-working-with-the-wsus-api-and-the-susdb-database-using-powershell/", + "aliases": [ + "/2013/07/working-with-the-wsus-api-and-the-susdb-database-using-powershell/" + ], + "draft": false, + "authors": [ + "Boe Prox" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-07-15-phillyposh-07112013-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2013/07/phillyposh-07112013-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-07-16-powershell-great-debate-piping-in-a-script/", + "aliases": [ + "/2013/07/powershell-great-debate-piping-in-a-script/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-07-16-powershell-summit-city-selection-criteria/", + "aliases": [ + "/2013/07/powershell-summit-city-selection-criteria/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2013-07-23-powershell-great-debate-credentials/", + "aliases": [ + "/2013/07/powershell-great-debate-credentials/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-07-23-techsessions-free-powershell-webinars/", + "aliases": [ + "/2013/07/techsessions-free-powershell-webinars/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-07-29-calling-all-powershell-teacherstrainers/", + "aliases": [ + "/2013/07/calling-all-powershell-teacherstrainers/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2013-07-30-powershell-great-debate-the-purity-laws/", + "aliases": [ + "/2013/07/powershell-great-debate-the-purity-laws/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-08-01-powershell-great-debate-powershell-versions/", + "aliases": [ + "/2013/08/powershell-great-debate-powershell-versions/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-08-06-is-this-list-everything-in-powershell/", + "aliases": [ + "/2013/08/is-this-list-everything-in-powershell/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2013-08-06-powershell-great-debate-script-or-function/", + "aliases": [ + "/2013/08/powershell-great-debate-script-or-function/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-08-08-a-quick-powershell-pshsummit-update-europe-na/", + "aliases": [ + "/2013/08/a-quick-powershell-pshsummit-update-europe-na/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2013-08-12-coming-soon-55039-powershell-scripting-and-toolmaking-course/", + "aliases": [ + "/2013/08/coming-soon-55039-powershell-scripting-and-toolmaking-course/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2013-08-12-my-powershell-workflow-series-on-technet-magazine/", + "aliases": [ + "/2013/08/my-powershell-workflow-series-on-technet-magazine/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-08-12-need-desired-state-configuration-modules/", + "aliases": [ + "/2013/08/need-desired-state-configuration-modules/" + ], + "draft": false, + "authors": [ + "Steven Murawski" + ], + "categories": [ + "Announcements", + "News" + ], + "tags": [] + }, + { + "route": "/articles/2013-08-12-phillyposh-08012013-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2013/08/phillyposh-08012013-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-08-13-powershell-great-debate-can-you-have-too-much-help/", + "aliases": [ + "/2013/08/powershell-great-debate-can-you-have-too-much-help/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-08-15-new-powershell-org-visual-design-draft-pt-2/", + "aliases": [ + "/2013/08/new-powershell-org-visual-design-draft-pt-2/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-08-15-state-of-the-org-website-games-summit-and-more/", + "aliases": [ + "/2013/08/state-of-the-org-website-games-summit-and-more/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2013-08-16-site-maintenance-this-weekend-aug-17-18-2013/", + "aliases": [ + "/2013/08/site-maintenance-this-weekend-aug-17-18-2013/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-08-16-two-powershell-books-50-off-today-only/", + "aliases": [ + "/2013/08/two-powershell-books-50-off-today-only/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Books" + ], + "tags": [] + }, + { + "route": "/articles/2013-08-19-powershell-orgs-azure-journey-part-1/", + "aliases": [ + "/2013/08/powershell-orgs-azure-journey-part-1/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-08-19-powershell-orgs-azure-journey-part-2/", + "aliases": [ + "/2013/08/powershell-orgs-azure-journey-part-2/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-08-20-powershell-great-debate-whats-write-verbose-for/", + "aliases": [ + "/2013/08/powershell-great-debate-whats-write-verbose-for/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-08-20-so-your-company-doesnt-want-to-enable-powershell-remoting/", + "aliases": [ + "/2013/08/so-your-company-doesnt-want-to-enable-powershell-remoting/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-08-21-powershell-orgs-azure-journey-part-3-load-testing/", + "aliases": [ + "/2013/08/powershell-orgs-azure-journey-part-3-load-testing/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-08-23-powershell-orgs-azure-journey-part-4-incoming-advice-and-fun-facts/", + "aliases": [ + "/2013/08/powershell-orgs-azure-journey-part-4-incoming-advice-and-fun-facts/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-08-27-powershell-great-debate-fixing-output/", + "aliases": [ + "/2013/08/powershell-great-debate-fixing-output/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-08-29-regular-expressions-are-a-replaces-best-friend/", + "aliases": [ + "/2013/08/regular-expressions-are-a-replaces-best-friend/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2013-09-05-writing-courseware-10961-powershell-class/", + "aliases": [ + "/2013/09/writing-courseware-10961-powershell-class/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2013-09-08-phillyposh-09052013-meeting-summary/", + "aliases": [ + "/2013/09/phillyposh-09052013-meeting-summary/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-09-10-great-debate-the-conclusion/", + "aliases": [ + "/2013/09/great-debate-the-conclusion/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Books" + ], + "tags": [] + }, + { + "route": "/articles/2013-09-11-my-new-powershell-video-series-covering-v2v3v4-launches/", + "aliases": [ + "/2013/09/my-new-powershell-video-series-covering-v2v3v4-launches/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2013-09-12-winter-scripting-games-more-feedback-needed/", + "aliases": [ + "/2013/09/winter-scripting-games-more-feedback-needed/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-09-20-nominate-your-powershell-hero/", + "aliases": [ + "/2013/09/nominate-your-powershell-hero/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-09-23-seeking-curators-for-powershell-ebooks/", + "aliases": [ + "/2013/09/seeking-curators-for-powershell-ebooks/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "Books" + ], + "tags": [] + }, + { + "route": "/articles/2013-09-24-the-new-look-of-the-scripting-games/", + "aliases": [ + "/2013/09/the-new-look-of-the-scripting-games/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-09-29-winter-scripting-games-tentatively-scheduled/", + "aliases": [ + "/2013/09/winter-scripting-games-tentatively-scheduled/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-01-congrats/", + "aliases": [ + "/2013/10/congrats/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-01-more-congrats/", + "aliases": [ + "/2013/10/more-congrats/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-02-building-a-desired-state-configuration-infrastructure/", + "aliases": [ + "/2013/10/building-a-desired-state-configuration-infrastructure/" + ], + "draft": false, + "authors": [ + "Steven Murawski" + ], + "categories": [ + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-02-seeking-coaches-and-judges-for-the-winter-scripting-games/", + "aliases": [ + "/2013/10/seeking-coaches-and-judges-for-the-winter-scripting-games/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-03-building-a-desired-state-configuration-pull-server/", + "aliases": [ + "/2013/10/building-a-desired-state-configuration-pull-server/" + ], + "draft": false, + "authors": [ + "Steven Murawski" + ], + "categories": [ + "PowerShell for Admins", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-08-building-a-desired-state-configuration-configuration/", + "aliases": [ + "/2013/10/building-a-desired-state-configuration-configuration/" + ], + "draft": false, + "authors": [ + "Steven Murawski" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-10-leak-powershell-summit-na-2014-speakers/", + "aliases": [ + "/2013/10/leak-powershell-summit-na-2014-speakers/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-12-help-me-design-the-advanced-powershell-class/", + "aliases": [ + "/2013/10/help-me-design-the-advanced-powershell-class/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-13-phillyposh-10032013-meeting-summary/", + "aliases": [ + "/2013/10/phillyposh-10032013-meeting-summary/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-10-14-building-a-desired-state-configuration-configuration-part-2/", + "aliases": [ + "/2013/10/building-a-desired-state-configuration-configuration-part-2/" + ], + "draft": false, + "authors": [ + "Steven Murawski" + ], + "categories": [ + "PowerShell for Admins", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-15-questions-about-an-advanced-powershell-class-design/", + "aliases": [ + "/2013/10/questions-about-an-advanced-powershell-class-design/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-15-why-the-heck-do-you-want-to-be-taught-net-in-a-powershell-class/", + "aliases": [ + "/2013/10/why-the-heck-do-you-want-to-be-taught-net-in-a-powershell-class/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-17-did-you-attend-the-2013-powershell-summit/", + "aliases": [ + "/2013/10/did-you-attend-the-2013-powershell-summit/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-18-desired-state-configuration-general-availability-changes/", + "aliases": [ + "/2013/10/desired-state-configuration-general-availability-changes/" + ], + "draft": false, + "authors": [ + "Steven Murawski" + ], + "categories": [ + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-18-more-summit-speaker-names-leaked/", + "aliases": [ + "/2013/10/more-summit-speaker-names-leaked/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-19-the-shell-vs-the-host/", + "aliases": [ + "/2013/10/the-shell-vs-the-host/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-21-why-get-content-aint-yer-friend/", + "aliases": [ + "/2013/10/why-get-content-aint-yer-friend/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2013-10-28-powershell-scripting-and-toolmaking-classroom-training-course-now-available-to-microsoft-training-centers/", + "aliases": [ + "/2013/10/powershell-scripting-and-toolmaking-classroom-training-course-now-available-to-microsoft-training-centers/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2013-11-06-configuring-a-desired-state-configuration-client/", + "aliases": [ + "/2013/11/configuring-a-desired-state-configuration-client/" + ], + "draft": false, + "authors": [ + "Steven Murawski" + ], + "categories": [ + "PowerShell for Admins", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2013-11-06-monitoring-sql-server-backups/", + "aliases": [ + "/2013/11/monitoring-sql-server-backups/" + ], + "draft": false, + "authors": [ + "Enrique Puig" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-11-11-login-now-required-for-comments/", + "aliases": [ + "/2013/11/login-now-required-for-comments/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-11-12-phillyposh-11072013-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2013/11/phillyposh-11072013-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-11-14-community-book-of-powershell-practices/", + "aliases": [ + "/2013/11/community-book-of-powershell-practices/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Books" + ], + "tags": [] + }, + { + "route": "/articles/2013-11-14-last-chance-for-feedback-on-powershell-course-10961ab/", + "aliases": [ + "/2013/11/last-chance-for-feedback-on-powershell-course-10961ab/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2013-12-02-scheduled-site-downtime/", + "aliases": [ + "/2013/12/scheduled-site-downtime/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2013-12-09-phillyposh-12052013-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2013/12/phillyposh-12052013-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-12-10-charlotte-powershell-user-group-holiday-themed-scripting-games/", + "aliases": [ + "/2013/12/charlotte-powershell-user-group-holiday-themed-scripting-games/" + ], + "draft": false, + "authors": [ + "Terri Donahue" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-12-10-how-quick-and-dirty-becomes-permanent-and-annoying/", + "aliases": [ + "/2013/12/how-quick-and-dirty-becomes-permanent-and-annoying/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2013-12-19-coaches-and-judges-selected-for-winter-scripting-games/", + "aliases": [ + "/2013/12/coaches-and-judges-selected-for-winter-scripting-games/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-12-20-my-outline-for-accelerated-powershell-training/", + "aliases": [ + "/2013/12/my-outline-for-accelerated-powershell-training/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2013-12-23-introducing-the-coaches-of-the-2014-winter-scripting-games/", + "aliases": [ + "/2013/12/introducing-the-coaches-of-the-2014-winter-scripting-games/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-12-27-january-charlotte-powershell-user-group-meeting/", + "aliases": [ + "/2013/12/january-charlotte-powershell-user-group-meeting/" + ], + "draft": false, + "authors": [ + "Terri Donahue" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2013-12-28-introducing-the-judges-for-winter-2014-scripting-games/", + "aliases": [ + "/2013/12/introducing-the-judges-for-winter-2014-scripting-games/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2013-12-30-state-of-the-org-ending-2013/", + "aliases": [ + "/2013/12/state-of-the-org-ending-2013/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-01-using-install-windowsfeature-with-offline-source/", + "aliases": [ + "/2014/01/using-install-windowsfeature-with-offline-source/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-02-winter-scripting-games-team-formation-in-full-swing/", + "aliases": [ + "/2014/01/winter-scripting-games-team-formation-in-full-swing/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-03-powershell-tip-1-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/", + "aliases": [ + "/2014/01/powershell-tip-1-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-03-scripting-games-winter-2014-notice/", + "aliases": [ + "/2014/01/scripting-games-winter-2014-notice/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-03-scripting-games-winter-2014-practice-event-rules/", + "aliases": [ + "/2014/01/scripting-games-winter-2014-practice-event-rules/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-05-script-for-setting-up-and-demoing-a-dsc-pull-server/", + "aliases": [ + "/2014/01/script-for-setting-up-and-demoing-a-dsc-pull-server/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-05-scripting-games-winter-2014-teams-in-danger/", + "aliases": [ + "/2014/01/scripting-games-winter-2014-teams-in-danger/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-06-scripting-games-winter-2014-team-discussion-tips/", + "aliases": [ + "/2014/01/scripting-games-winter-2014-team-discussion-tips/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-07-powershell-summit-north-america-2014-some-more-reasons-to-register/", + "aliases": [ + "/2014/01/powershell-summit-north-america-2014-some-more-reasons-to-register/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-09-powershell-tip-2-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/", + "aliases": [ + "/2014/01/powershell-tip-2-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-10-scripting-games-winter-2014-we-has-prizes/", + "aliases": [ + "/2014/01/scripting-games-winter-2014-we-has-prizes/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-13-tampa-bay-powershell-user-group-jan-meeting/", + "aliases": [ + "/2014/01/tampa-bay-powershell-user-group-jan-meeting/" + ], + "draft": false, + "authors": [ + "ScriptWarrior" + ], + "categories": [ + "Events" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-14-winter-scripting-games-2014/", + "aliases": [ + "/2014/01/winter-scripting-games-2014/" + ], + "draft": false, + "authors": [ + "Jonathan Medd" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-16-powershell-tip-3-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/", + "aliases": [ + "/2014/01/powershell-tip-3-from-the-winner-of-the-advanced-category-in-the-2013-scripting-games/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-16-winter-scripting-games-2014-tip-1-avoid-the-aliases/", + "aliases": [ + "/2014/01/winter-scripting-games-2014-tip-1-avoid-the-aliases/" + ], + "draft": false, + "authors": [ + "Boe Prox" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-18-scripting-games-2014-event-submission-tip/", + "aliases": [ + "/2014/01/scripting-games-2014-event-submission-tip/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-20-winter-scripting-games-2014-tip-2-use-requires-to-let-powershell-do-the-work-for-you/", + "aliases": [ + "/2014/01/winter-scripting-games-2014-tip-2-use-requires-to-let-powershell-do-the-work-for-you/" + ], + "draft": false, + "authors": [ + "Boe Prox" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-21-adding-and-removing-items-from-a-powershell-array/", + "aliases": [ + "/2014/01/adding-and-removing-items-from-a-powershell-array/" + ], + "draft": false, + "authors": [ + "Jonathan Medd" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-21-phillyposh-01092014-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2014/01/phillyposh-01092014-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-01-21-testing-for-admin-privileges-in-powershell/", + "aliases": [ + "/2014/01/testing-for-admin-privileges-in-powershell/" + ], + "draft": false, + "authors": [ + "Jonathan Medd" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-23-powershell-saturday-007-style/", + "aliases": [ + "/2014/01/powershell-saturday-007-style/" + ], + "draft": false, + "authors": [ + "Terri Donahue" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-01-23-powershell-tip-from-the-head-coach-of-the-2014-winter-scripting-games-design-for-performance-and-efficiency/", + "aliases": [ + "/2014/01/powershell-tip-from-the-head-coach-of-the-2014-winter-scripting-games-design-for-performance-and-efficiency/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-27-episode-255-powerscripting-podcast-steve-roberts-from-amazon-on-aws-and-powershell/", + "aliases": [ + "/2014/01/episode-255-powerscripting-podcast-steve-roberts-from-amazon-on-aws-and-powershell/" + ], + "draft": false, + "authors": [ + "Jonathan Walz" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-29-the-scripting-games-winter-2014-update-on-event-1-scores/", + "aliases": [ + "/2014/01/the-scripting-games-winter-2014-update-on-event-1-scores/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-01-31-reporting-on-installed-windows-programs-via-the-registry/", + "aliases": [ + "/2014/01/reporting-on-installed-windows-programs-via-the-registry/" + ], + "draft": false, + "authors": [ + "Jonathan Medd" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-02-03-my-2014-public-powerclass-is-now-open-for-registration/", + "aliases": [ + "/2014/02/my-2014-public-powerclass-is-now-open-for-registration/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2014-02-03-scripting-games-event-1-close/", + "aliases": [ + "/2014/02/scripting-games-event-1-close/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-02-04-using-powershell-parameter-validation-to-make-your-day-easier/", + "aliases": [ + "/2014/02/using-powershell-parameter-validation-to-make-your-day-easier/" + ], + "draft": false, + "authors": [ + "Boe Prox" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-02-09-phillyposh-02062014-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2014/02/phillyposh-02062014-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-02-09-problems-with-windows-live-logins/", + "aliases": [ + "/2014/02/problems-with-windows-live-logins/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2014-02-10-testing-for-the-presence-of-a-registry-key-and-value/", + "aliases": [ + "/2014/02/testing-for-the-presence-of-a-registry-key-and-value/" + ], + "draft": false, + "authors": [ + "Jonathan Medd" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-02-13-powershell-saturday-007-in-review/", + "aliases": [ + "/2014/02/powershell-saturday-007-in-review/" + ], + "draft": false, + "authors": [ + "Terri Donahue" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-02-17-closing-the-games/", + "aliases": [ + "/2014/02/closing-the-games/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-02-17-what-should-the-scripting-games-look-like-next-time/", + "aliases": [ + "/2014/02/what-should-the-scripting-games-look-like-next-time/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-02-19-free-ebook-from-microsofts-scripting-guy-windows-powershell-networking-guide/", + "aliases": [ + "/2014/02/free-ebook-from-microsofts-scripting-guy-windows-powershell-networking-guide/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Books", + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-02-19-julies-comments-the-scripting-games-winter-2014/", + "aliases": [ + "/2014/02/julies-comments-the-scripting-games-winter-2014/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2014-02-25-up-next-nick-howell-from-netapp-talking-about-software-defined-datacenter/", + "aliases": [ + "/2014/02/up-next-nick-howell-from-netapp-talking-about-software-defined-datacenter/" + ], + "draft": false, + "authors": [ + "ScriptingWife" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-03-03-charlotte-powershell-user-group-meeting-cancelled-this-week-3614/", + "aliases": [ + "/2014/03/charlotte-powershell-user-group-meeting-cancelled-this-week-3614/" + ], + "draft": false, + "authors": [ + "ScriptingWife" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-03-04-the-dsc-opportunity-for-isvs/", + "aliases": [ + "/2014/03/the-dsc-opportunity-for-isvs/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-03-05-jobs-powershell-scripter-wanted/", + "aliases": [ + "/2014/03/jobs-powershell-scripter-wanted/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2014-03-05-the-dsc-conversation-continues/", + "aliases": [ + "/2014/03/the-dsc-conversation-continues/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-03-13-building-desired-state-configuration-custom-resources/", + "aliases": [ + "/2014/03/building-desired-state-configuration-custom-resources/" + ], + "draft": false, + "authors": [ + "Steven Murawski" + ], + "categories": [ + "PowerShell for Admins", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2014-03-13-phillyposh-03062014-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2014/03/phillyposh-03062014-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-03-17-my-dsc-demo-class-setup-routine/", + "aliases": [ + "/2014/03/my-dsc-demo-class-setup-routine/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-03-19-going-deeper-on-dsc-resources/", + "aliases": [ + "/2014/03/going-deeper-on-dsc-resources/" + ], + "draft": false, + "authors": [ + "Steven Murawski" + ], + "categories": [ + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2014-03-20-we-want-your-dsc-resource-wish-list/", + "aliases": [ + "/2014/03/we-want-your-dsc-resource-wish-list/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-03-26-code-from-this-weeks-oslo-class/", + "aliases": [ + "/2014/03/code-from-this-weeks-oslo-class/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-03-29-april-3-2014-virtual-powershell-user-group-meeting/", + "aliases": [ + "/2014/03/april-3-2014-virtual-powershell-user-group-meeting/" + ], + "draft": false, + "authors": [ + "ScriptingWife" + ], + "categories": [ + "Events" + ], + "tags": [] + }, + { + "route": "/articles/2014-04-02-charlotte-432014-meeting-using-powershell-in-websites/", + "aliases": [ + "/2014/04/charlotte-432014-meeting-using-powershell-in-websites/" + ], + "draft": false, + "authors": [ + "Terri Donahue" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-04-06-phillyposh-03042014-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2014/04/phillyposh-03042014-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-04-07-massive-update-to-all-seven-free-ebooks-at-powershell-org/", + "aliases": [ + "/2014/04/massive-update-to-all-seven-free-ebooks-at-powershell-org/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Books" + ], + "tags": [] + }, + { + "route": "/articles/2014-04-13-summit-session-change/", + "aliases": [ + "/2014/04/summit-session-change/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-04-14-powershell-summit-na-2014-shirts-available/", + "aliases": [ + "/2014/04/powershell-summit-na-2014-shirts-available/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-04-15-powershell-summit-n-a-2014-budget/", + "aliases": [ + "/2014/04/powershell-summit-n-a-2014-budget/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-04-15-review-sapien-versionrecall/", + "aliases": [ + "/2014/04/review-sapien-versionrecall/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2014-04-21-sapiens-new-wmi-explorer-released/", + "aliases": [ + "/2014/04/sapiens-new-wmi-explorer-released/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2014-04-23-charlotte-512014-meeting-update/", + "aliases": [ + "/2014/04/charlotte-512014-meeting-update/" + ], + "draft": false, + "authors": [ + "Terri Donahue" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-04-28-help-us-record-the-powershell-summit-sessions/", + "aliases": [ + "/2014/04/help-us-record-the-powershell-summit-sessions/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-04-29-fundraising-powershell-people-kick-butt-take-names/", + "aliases": [ + "/2014/04/fundraising-powershell-people-kick-butt-take-names/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-04-30-powershell-summit-europe-2014-call-for-topics/", + "aliases": [ + "/2014/04/powershell-summit-europe-2014-call-for-topics/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-05-10-phillyposh-05012014-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2014/05/phillyposh-05012014-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-05-11-my-teched-2014-patterns-and-practices-example-scripts/", + "aliases": [ + "/2014/05/my-teched-2014-patterns-and-practices-example-scripts/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-05-14-why-puppet-vs-dsc-isnt-even-a-thing/", + "aliases": [ + "/2014/05/why-puppet-vs-dsc-isnt-even-a-thing/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-05-15-teched-n-a-2014-session-recordings/", + "aliases": [ + "/2014/05/teched-n-a-2014-session-recordings/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins", + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2014-05-16-powershell-summit-n-a-2014-session-videos/", + "aliases": [ + "/2014/05/powershell-summit-n-a-2014-session-videos/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-05-17-beta-powershell-lab-guide-for-classes/", + "aliases": [ + "/2014/05/beta-powershell-lab-guide-for-classes/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2014-05-19-attend-a-beta-advanced-powershell-class-live-or-remote/", + "aliases": [ + "/2014/05/attend-a-beta-advanced-powershell-class-live-or-remote/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2014-05-21-installing-powershell-v5-be-a-little-careful-ok/", + "aliases": [ + "/2014/05/installing-powershell-v5-be-a-little-careful-ok/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2014-05-21-life-and-times-of-a-dsc-resource/", + "aliases": [ + "/2014/05/life-and-times-of-a-dsc-resource/" + ], + "draft": false, + "authors": [ + "Steven Murawski" + ], + "categories": [ + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2014-05-22-building-scalable-configurations-with-dsc/", + "aliases": [ + "/2014/05/building-scalable-configurations-with-dsc/" + ], + "draft": false, + "authors": [ + "Steven Murawski" + ], + "categories": [ + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2014-05-23-patterns-for-implementing-a-dsc-pull-server-environment/", + "aliases": [ + "/2014/05/patterns-for-implementing-a-dsc-pull-server-environment/" + ], + "draft": false, + "authors": [ + "Steven Murawski" + ], + "categories": [ + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2014-05-24-verified-effective-exams-will-begin-soon-looking-for-early-registrants/", + "aliases": [ + "/2014/05/verified-effective-exams-will-begin-soon-looking-for-early-registrants/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2014-05-30-yasg-yet-another-scripting-game/", + "aliases": [ + "/2014/05/yasg-yet-another-scripting-game/" + ], + "draft": false, + "authors": [ + "Terri Donahue" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-05-31-analyzing-the-black-magic-powershell-exploit-and-appropriate-actions/", + "aliases": [ + "/2014/05/analyzing-the-black-magic-powershell-exploit-and-appropriate-actions/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-06-01-powershell-org-annual-operating-budget/", + "aliases": [ + "/2014/06/powershell-org-annual-operating-budget/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2014-06-04-quick-tip-wmi-vs-cim-syntax/", + "aliases": [ + "/2014/06/quick-tip-wmi-vs-cim-syntax/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-06-05-omaha-powershell-user-group-is-open/", + "aliases": [ + "/2014/06/omaha-powershell-user-group-is-open/" + ], + "draft": false, + "authors": [ + "Jacob Benson" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-06-09-phillyposh-06052014-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2014/06/phillyposh-06052014-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-06-09-wish-list-better-code-formatting-in-the-forums-can-you-help/", + "aliases": [ + "/2014/06/wish-list-better-code-formatting-in-the-forums-can-you-help/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-06-13-free-online-access-to-techletter-back-issues/", + "aliases": [ + "/2014/06/free-online-access-to-techletter-back-issues/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2014-06-16-charlotte-powershell-user-group-no-meeting-in-july-enjoy-your-holiday/", + "aliases": [ + "/2014/06/charlotte-powershell-user-group-no-meeting-in-july-enjoy-your-holiday/" + ], + "draft": false, + "authors": [ + "ScriptingWife" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-06-19-european-powershell-summit/", + "aliases": [ + "/2014/06/european-powershell-summit/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-06-19-omaha-powershell-user-group-is-filling-up-fast/", + "aliases": [ + "/2014/06/omaha-powershell-user-group-is-filling-up-fast/" + ], + "draft": false, + "authors": [ + "Jacob Benson" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-07-05-phillyposh-07032014-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2014/07/phillyposh-07032014-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-07-15-registration-for-european-summit-2014-is-open/", + "aliases": [ + "/2014/07/registration-for-european-summit-2014-is-open/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-07-30-omaha-powershell-user-group-meeting-notesvideo/", + "aliases": [ + "/2014/07/omaha-powershell-user-group-meeting-notesvideo/" + ], + "draft": false, + "authors": [ + "Jacob Benson" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-08-18-omaha-powershell-user-group-meeting-826/", + "aliases": [ + "/2014/08/omaha-powershell-user-group-meeting-826/" + ], + "draft": false, + "authors": [ + "Jacob Benson" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-08-19-registration-for-august-omaha-powershell-user-group-meeting-is-live/", + "aliases": [ + "/2014/08/registration-for-august-omaha-powershell-user-group-meeting-is-live/" + ], + "draft": false, + "authors": [ + "Jacob Benson" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-08-20-philadelphia-meeting-september-4th-2014/", + "aliases": [ + "/2014/08/philadelphia-meeting-september-4th-2014/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-08-26-denverpsug-keith-hill-presenting/", + "aliases": [ + "/2014/08/denverpsug-keith-hill-presenting/" + ], + "draft": false, + "authors": [ + "JasonMorgan" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-08-28-european-summit-deadline-approaching/", + "aliases": [ + "/2014/08/european-summit-deadline-approaching/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-09-02-powershell-summit-europe-2014-prepare-for-the-dsc-hackathon/", + "aliases": [ + "/2014/09/powershell-summit-europe-2014-prepare-for-the-dsc-hackathon/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-09-06-last-call-for-the-european-powershell-summit-2014/", + "aliases": [ + "/2014/09/last-call-for-the-european-powershell-summit-2014/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-09-07-phillyposh-09042014-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2014/09/phillyposh-09042014-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-09-08-powershell-v5-class-support/", + "aliases": [ + "/2014/09/powershell-v5-class-support/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [] + }, + { + "route": "/articles/2014-09-09-omaha-powershell-user-group-august-meeting-materials/", + "aliases": [ + "/2014/09/omaha-powershell-user-group-august-meeting-materials/" + ], + "draft": false, + "authors": [ + "Jacob Benson" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-09-09-powershell-v5-whats-new-in-dsc/", + "aliases": [ + "/2014/09/powershell-v5-whats-new-in-dsc/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-09-09-september-omaha-powershell-user-group-registration-is-live/", + "aliases": [ + "/2014/09/september-omaha-powershell-user-group-registration-is-live/" + ], + "draft": false, + "authors": [ + "Jacob Benson" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-09-10-powershell-v5-misc-goodness-including-auditing/", + "aliases": [ + "/2014/09/powershell-v5-misc-goodness-including-auditing/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-09-14-philadelphia-meeting-october-2nd-2014/", + "aliases": [ + "/2014/09/philadelphia-meeting-october-2nd-2014/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-09-23-instructions-for-powershell-summit-north-america-2015-registration/", + "aliases": [ + "/2014/09/instructions-for-powershell-summit-north-america-2015-registration/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-09-23-powershell-summit-europe-2014-final-agenda/", + "aliases": [ + "/2014/09/powershell-summit-europe-2014-final-agenda/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-09-28-join-the-dsc-hackathon-at-powershell-summit-2014-europe/", + "aliases": [ + "/2014/09/join-the-dsc-hackathon-at-powershell-summit-2014-europe/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-09-30-when-will-there-be-a-powershell-summit-in-____/", + "aliases": [ + "/2014/09/when-will-there-be-a-powershell-summit-in-____/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-10-04-powershell-summit-europe-2014-thank-you/", + "aliases": [ + "/2014/10/powershell-summit-europe-2014-thank-you/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-10-06-the-current-and-future-state-of-the-windows-management-framework/", + "aliases": [ + "/2014/10/the-current-and-future-state-of-the-windows-management-framework/" + ], + "draft": false, + "authors": [ + "Bjorn Houben" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2014-10-07-powershell-summit-europe-2014-slides-and-code/", + "aliases": [ + "/2014/10/powershell-summit-europe-2014-slides-and-code/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-10-08-powershell-summit-europe-2014-videos-from-day-1/", + "aliases": [ + "/2014/10/powershell-summit-europe-2014-videos-from-day-1/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-10-13-phillyposh-10022014-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2014/10/phillyposh-10022014-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-10-14-powershell-summit-europe-2014-all-videos-available/", + "aliases": [ + "/2014/10/powershell-summit-europe-2014-all-videos-available/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-10-16-how-to-have-the-powershell-summit-come-to-you/", + "aliases": [ + "/2014/10/how-to-have-the-powershell-summit-come-to-you/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-10-25-our-nanowrimo-challenge-write-a-powershell-article/", + "aliases": [ + "/2014/10/our-nanowrimo-challenge-write-a-powershell-article/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "News", + "Training", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2014-11-03-charlotte-powershell-user-group-meeting-on-116/", + "aliases": [ + "/2014/11/charlotte-powershell-user-group-meeting-on-116/" + ], + "draft": false, + "authors": [ + "Terri Donahue" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2014-11-24-call-for-presentations-for-powershell-summit-europe-2015/", + "aliases": [ + "/2014/11/call-for-presentations-for-powershell-summit-europe-2015/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-12-04-a-crowdsourced-powershell-proficiency-exam/", + "aliases": [ + "/2014/12/a-crowdsourced-powershell-proficiency-exam/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2014-12-08-job-posting-help-us-run-powershell-org/", + "aliases": [ + "/2014/12/job-posting-help-us-run-powershell-org/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2014-12-15-powershell-summit-n-a-2015-status-update-info/", + "aliases": [ + "/2014/12/powershell-summit-n-a-2015-status-update-info/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2014-12-29-nj-powershell-users-group-meeting-presenter-doug-finke-microsoft-mvp/", + "aliases": [ + "/2014/12/nj-powershell-users-group-meeting-presenter-doug-finke-microsoft-mvp/" + ], + "draft": false, + "authors": [ + "NJPowerShell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-01-06-ebook-cover-contest/", + "aliases": [ + "/2015/01/ebook-cover-contest/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Books" + ], + "tags": [] + }, + { + "route": "/articles/2015-01-06-lets-make-a-powershell-job-interview-quiz-cmon-and-help/", + "aliases": [ + "/2015/01/lets-make-a-powershell-job-interview-quiz-cmon-and-help/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2015-01-06-powershell-summit-europe-2015-topic-submissions/", + "aliases": [ + "/2015/01/powershell-summit-europe-2015-topic-submissions/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2015-01-13-phillyposh-01082015-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2015/01/phillyposh-01082015-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-01-17-our-ebook-transition-and-your-chance-to-contribute/", + "aliases": [ + "/2015/01/our-ebook-transition-and-your-chance-to-contribute/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "Books" + ], + "tags": [] + }, + { + "route": "/articles/2015-01-18-powershell-summit-na-2015-agenda-changes/", + "aliases": [ + "/2015/01/powershell-summit-na-2015-agenda-changes/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2015-01-25-powershell-org-free-ebook-transition/", + "aliases": [ + "/2015/01/powershell-org-free-ebook-transition/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "Books" + ], + "tags": [] + }, + { + "route": "/articles/2015-01-26-charlotte-powershell-user-group-252014/", + "aliases": [ + "/2015/01/charlotte-powershell-user-group-252014/" + ], + "draft": false, + "authors": [ + "Terri Donahue" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-02-09-design-the-next-scripting-games/", + "aliases": [ + "/2015/02/design-the-next-scripting-games/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2015-02-19-nj-powershell-ug-meeting-march-5th-presenter-adam-bertram/", + "aliases": [ + "/2015/02/nj-powershell-ug-meeting-march-5th-presenter-adam-bertram/" + ], + "draft": false, + "authors": [ + "NJPowerShell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-02-20-powershell-summit-europe-registration/", + "aliases": [ + "/2015/02/powershell-summit-europe-registration/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2015-02-27-charlotte-powershell-user-group-meeting352015/", + "aliases": [ + "/2015/02/charlotte-powershell-user-group-meeting352015/" + ], + "draft": false, + "authors": [ + "Terri Donahue" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-03-06-the-fastest-powershell-2-count-all-users-in-active-directory-domain/", + "aliases": [ + "/2015/03/the-fastest-powershell-2-count-all-users-in-active-directory-domain/" + ], + "draft": false, + "authors": [ + "Steve" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-03-10-phillyposh-03052015-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2015/03/phillyposh-03052015-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-03-11-march-omaha-powershell-user-group-meeting/", + "aliases": [ + "/2015/03/march-omaha-powershell-user-group-meeting/" + ], + "draft": false, + "authors": [ + "Jacob Benson" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-03-25-home-labs-for-the-it-pro/", + "aliases": [ + "/2015/03/home-labs-for-the-it-pro/" + ], + "draft": false, + "authors": [ + "Greg Altman" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-03-26-special-charlotte-powershell-group-meeting-on-422-featuring-lee-holmes/", + "aliases": [ + "/2015/03/special-charlotte-powershell-group-meeting-on-422-featuring-lee-holmes/" + ], + "draft": false, + "authors": [ + "Terri Donahue" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-04-02-omaha-psug-march-meeting-slides-video-now-available/", + "aliases": [ + "/2015/04/omaha-psug-march-meeting-slides-video-now-available/" + ], + "draft": false, + "authors": [ + "Jacob Benson" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-04-06-nj-powershell-users-group-meet-presenter-jeffrey-hicks-microsoft-mvp/", + "aliases": [ + "/2015/04/nj-powershell-users-group-meet-presenter-jeffrey-hicks-microsoft-mvp/" + ], + "draft": false, + "authors": [ + "NJPowerShell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-04-07-a-quick-powershell-summit-europe-update-spread-the-word/", + "aliases": [ + "/2015/04/a-quick-powershell-summit-europe-update-spread-the-word/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2015-04-10-powershell-summit-europe-venue-change/", + "aliases": [ + "/2015/04/powershell-summit-europe-venue-change/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2015-04-16-microsoft-publishes-dsc-resource-kit-in-github/", + "aliases": [ + "/2015/04/microsoft-publishes-dsc-resource-kit-in-github/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-04-20-powershell-summit-north-america-launches/", + "aliases": [ + "/2015/04/powershell-summit-north-america-launches/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2015-04-21-painlessly-get-data-from-powershell-to-excel/", + "aliases": [ + "/2015/04/painlessly-get-data-from-powershell-to-excel/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-04-23-observations-from-our-powershell-summit-verified-effective-exam/", + "aliases": [ + "/2015/04/observations-from-our-powershell-summit-verified-effective-exam/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2015-04-24-charlotte-powershell-user-group-meeting-for-may/", + "aliases": [ + "/2015/04/charlotte-powershell-user-group-meeting-for-may/" + ], + "draft": false, + "authors": [ + "Terri Donahue" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-04-24-management-information-the-omicimwmimidmtf-dictionary/", + "aliases": [ + "/2015/04/management-information-the-omicimwmimidmtf-dictionary/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-04-27-powershelltos-next-meeting-may-6th-2015/", + "aliases": [ + "/2015/04/powershelltos-next-meeting-may-6th-2015/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-04-28-why-is-remoting-enabled-by-default-on-windows-server/", + "aliases": [ + "/2015/04/why-is-remoting-enabled-by-default-on-windows-server/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-04-30-powershell-org-is-now-on-imgur/", + "aliases": [ + "/2015/04/powershell-org-is-now-on-imgur/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-05-04-dealing-with-the-click-next-admin/", + "aliases": [ + "/2015/05/dealing-with-the-click-next-admin/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-05-05-setting-up-the-powershell-org-dsc-tools-from-github/", + "aliases": [ + "/2015/05/setting-up-the-powershell-org-dsc-tools-from-github/" + ], + "draft": false, + "authors": [ + "David Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-05-07-nyc-user-group-restart/", + "aliases": [ + "/2015/05/nyc-user-group-restart/" + ], + "draft": false, + "authors": [ + "Sunny Chakraborty" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-05-10-survey-source-control-for-the-it-professional/", + "aliases": [ + "/2015/05/survey-source-control-for-the-it-professional/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [] + }, + { + "route": "/articles/2015-05-11-mississippi-powershell-user-group-virtual-meeting-may-12th-2015/", + "aliases": [ + "/2015/05/mississippi-powershell-user-group-virtual-meeting-may-12th-2015/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-05-16-whats-it-like-at-powershell-summit/", + "aliases": [ + "/2015/05/whats-it-like-at-powershell-summit/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2015-05-18-philadelphia-powershell-user-group-meeting-june-4th-2015/", + "aliases": [ + "/2015/05/philadelphia-powershell-user-group-meeting-june-4th-2015/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-05-18-source-control-survey-results/", + "aliases": [ + "/2015/05/source-control-survey-results/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-05-19-creating-a-small-footprint-base-image-part-1/", + "aliases": [ + "/2015/05/creating-a-small-footprint-base-image-part-1/" + ], + "draft": false, + "authors": [ + "David Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-05-20-creating-a-small-footprint-base-image-part-2/", + "aliases": [ + "/2015/05/creating-a-small-footprint-base-image-part-2/" + ], + "draft": false, + "authors": [ + "David Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-05-26-new-ps-module-for-working-with-f5s-ltm-rest-api/", + "aliases": [ + "/2015/05/new-ps-module-for-working-with-f5s-ltm-rest-api/" + ], + "draft": false, + "authors": [ + "Joel Newton" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [] + }, + { + "route": "/articles/2015-06-02-major-changes-to-dsc-pull-server-configuration-ids/", + "aliases": [ + "/2015/06/major-changes-to-dsc-pull-server-configuration-ids/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-06-02-verified-effective-self-assessment/", + "aliases": [ + "/2015/06/verified-effective-self-assessment/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2015-06-04-automating-with-jenkins-and-powershell-on-windows/", + "aliases": [ + "/2015/06/automating-with-jenkins-and-powershell-on-windows/" + ], + "draft": false, + "authors": [ + "Matthew Hodgkins" + ], + "categories": [ + "Tips and Tricks", + "Tools", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2015-06-04-creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation/", + "aliases": [ + "/2015/06/creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation/" + ], + "draft": false, + "authors": [ + "David Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-06-04-nyc-powershell-usergroup-meets-on-june-8th/", + "aliases": [ + "/2015/06/nyc-powershell-usergroup-meets-on-june-8th/" + ], + "draft": false, + "authors": [ + "Sunny Chakraborty" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-06-07-dont-start-learning-powershell/", + "aliases": [ + "/2015/06/dont-start-learning-powershell/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-06-08-mississippi-powershell-user-group-virtual-meeting-june-9th-2015/", + "aliases": [ + "/2015/06/mississippi-powershell-user-group-virtual-meeting-june-9th-2015/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-06-08-powershell-org-where-weve-been-our-new-look-where-were-going/", + "aliases": [ + "/2015/06/powershell-org-where-weve-been-our-new-look-where-were-going/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2015-06-08-trust-but-verify/", + "aliases": [ + "/2015/06/trust-but-verify/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-06-09-why-remoting-vs-ssh-isnt-even-a-thing/", + "aliases": [ + "/2015/06/why-remoting-vs-ssh-isnt-even-a-thing/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-06-16-philadelphia-powershell-user-group-meeting-july-7th-2015/", + "aliases": [ + "/2015/06/philadelphia-powershell-user-group-meeting-july-7th-2015/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-06-19-walkthrough-an-example-of-how-i-write-powershell-functions/", + "aliases": [ + "/2015/06/walkthrough-an-example-of-how-i-write-powershell-functions/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-06-22-decorating-powershell-objects/", + "aliases": [ + "/2015/06/decorating-powershell-objects/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-06-29-the-scripting-games-heres-whats-happening/", + "aliases": [ + "/2015/06/the-scripting-games-heres-whats-happening/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2015-06-30-i-need-your-powershell-stories/", + "aliases": [ + "/2015/06/i-need-your-powershell-stories/" + ], + "draft": false, + "authors": [ + "Adam Bertram" + ], + "categories": [ + "News" + ], + "tags": [] + }, + { + "route": "/articles/2015-06-30-powershell-org-inc-2015-shareholder-meeting-roundup/", + "aliases": [ + "/2015/06/powershell-org-inc-2015-shareholder-meeting-roundup/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2015-07-01-want-to-blog-at-powershell-org/", + "aliases": [ + "/2015/07/want-to-blog-at-powershell-org/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "News" + ], + "tags": [] + }, + { + "route": "/articles/2015-07-04-2015-july-scripting-games-puzzle/", + "aliases": [ + "/2015/07/2015-july-scripting-games-puzzle/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2015-07-07-mississippi-powershell-user-group-virtual-meeting-july-14th-2015/", + "aliases": [ + "/2015/07/mississippi-powershell-user-group-virtual-meeting-july-14th-2015/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-07-07-rabbitmq-and-powershell/", + "aliases": [ + "/2015/07/rabbitmq-and-powershell/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-07-10-nyc-powershell-usergroup-meets-on-july13/", + "aliases": [ + "/2015/07/nyc-powershell-usergroup-meets-on-july13/" + ], + "draft": false, + "authors": [ + "Sunny Chakraborty" + ], + "categories": [ + "Events" + ], + "tags": [] + }, + { + "route": "/articles/2015-07-12-philadelphia-powershell-user-group-meeting-august-6th-2015/", + "aliases": [ + "/2015/07/philadelphia-powershell-user-group-meeting-august-6th-2015/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-07-13-phillyposh-07072015-meeting-summary-and-presentation-materials/", + "aliases": [ + "/2015/07/phillyposh-07072015-meeting-summary-and-presentation-materials/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-07-14-curious-about-the-poshcruise-ask-questions-here/", + "aliases": [ + "/2015/07/curious-about-the-poshcruise-ask-questions-here/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2015-07-15-building-a-test-lab-the-basics-part-1-rootca/", + "aliases": [ + "/2015/07/building-a-test-lab-the-basics-part-1-rootca/" + ], + "draft": false, + "authors": [ + "David Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-07-24-curious-about-powershell-cruise-heres-how-to-learn-more/", + "aliases": [ + "/2015/07/curious-about-powershell-cruise-heres-how-to-learn-more/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2015-07-28-powershell-is-for-the-desktop-tech-as-well/", + "aliases": [ + "/2015/07/powershell-is-for-the-desktop-tech-as-well/" + ], + "draft": false, + "authors": [ + "Brian Bourque" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-07-28-powershell-summit-na-2016-call-for-topics-coming-soon/", + "aliases": [ + "/2015/07/powershell-summit-na-2016-call-for-topics-coming-soon/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2015-07-29-2015-july-scripting-games-wrap-up/", + "aliases": [ + "/2015/07/2015-july-scripting-games-wrap-up/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2015-07-29-even-vaguely-considering-powershell-cruise-read-this-right-now/", + "aliases": [ + "/2015/07/even-vaguely-considering-powershell-cruise-read-this-right-now/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2015-07-31-introduction-to-powershell/", + "aliases": [ + "/2015/07/introduction-to-powershell/" + ], + "draft": false, + "authors": [ + "Stephen Moore" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-08-01-august-2015-scripting-games-puzzle/", + "aliases": [ + "/2015/08/august-2015-scripting-games-puzzle/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2015-08-03-powershell-summit-north-america-2016-call-for-topics/", + "aliases": [ + "/2015/08/powershell-summit-north-america-2016-call-for-topics/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2015-08-05-mspsug-virtual-meeting-conquering-azure-and-office-365-with-powershell-august-11th-2015/", + "aliases": [ + "/2015/08/mspsug-virtual-meeting-conquering-azure-and-office-365-with-powershell-august-11th-2015/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-08-07-what-are-variables-anyway/", + "aliases": [ + "/2015/08/what-are-variables-anyway/" + ], + "draft": false, + "authors": [ + "Stephen Moore" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-08-08-continuous-integration-continuous-delivery-and-psdeploy/", + "aliases": [ + "/2015/08/continuous-integration-continuous-delivery-and-psdeploy/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [] + }, + { + "route": "/articles/2015-08-10-the-start-sharing-challenge/", + "aliases": [ + "/2015/08/the-start-sharing-challenge/" + ], + "draft": false, + "authors": [ + "Adam Bertram" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2015-08-12-template-based-parsing-and-progress-bars/", + "aliases": [ + "/2015/08/template-based-parsing-and-progress-bars/" + ], + "draft": false, + "authors": [ + "Jonas Sommer Nielsen" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-08-16-abstraction-and-configuration-data/", + "aliases": [ + "/2015/08/abstraction-and-configuration-data/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-08-17-philadelphia-powershell-user-group-meeting-september-3rd-2015-with-max-trinidad/", + "aliases": [ + "/2015/08/philadelphia-powershell-user-group-meeting-september-3rd-2015-with-max-trinidad/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-08-17-test-it-new-iisadministration-module/", + "aliases": [ + "/2015/08/test-it-new-iisadministration-module/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-08-20-multithreading-using-jobs/", + "aliases": [ + "/2015/08/multithreading-using-jobs/" + ], + "draft": false, + "authors": [ + "Jonas Sommer Nielsen" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-08-26-techsession-webinar-the-top-10-considerations-when-writing-powershell-advanced-functions/", + "aliases": [ + "/2015/08/techsession-webinar-the-top-10-considerations-when-writing-powershell-advanced-functions/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [ + "Announcements", + "Events", + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2015-08-28-list-users-logged-on-to-your-machines/", + "aliases": [ + "/2015/08/list-users-logged-on-to-your-machines/" + ], + "draft": false, + "authors": [ + "Jonas Sommer Nielsen" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-01-basic-exchange-monitoring/", + "aliases": [ + "/2015/09/basic-exchange-monitoring/" + ], + "draft": false, + "authors": [ + "Matt Laird" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks", + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-03-use-import-localizeddata-to-internationalize-your-scripts/", + "aliases": [ + "/2015/09/use-import-localizeddata-to-internationalize-your-scripts/" + ], + "draft": false, + "authors": [ + "Adam Platt" + ], + "categories": [ + "PowerShell for Developers", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-04-mspsug-virtual-meeting-the-art-of-powershell-runspaces-september-8th-2015/", + "aliases": [ + "/2015/09/mspsug-virtual-meeting-the-art-of-powershell-runspaces-september-8th-2015/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-09-05-september-2015-scripting-games-puzzle/", + "aliases": [ + "/2015/09/september-2015-scripting-games-puzzle/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-06-writing-and-publishing-powershell-modules/", + "aliases": [ + "/2015/09/writing-and-publishing-powershell-modules/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-08-find-location-of-locked-out-accounts/", + "aliases": [ + "/2015/09/find-location-of-locked-out-accounts/" + ], + "draft": false, + "authors": [ + "Matt Laird" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks", + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-08-where-are-my-fsmo-roles/", + "aliases": [ + "/2015/09/where-are-my-fsmo-roles/" + ], + "draft": false, + "authors": [ + "Thomas Rayner" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-11-devops-a-practical-example/", + "aliases": [ + "/2015/09/devops-a-practical-example/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-11-working-with-powershellgallery/", + "aliases": [ + "/2015/09/working-with-powershellgallery/" + ], + "draft": false, + "authors": [ + "Jonas Sommer Nielsen" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-12-find-stale-accounts-in-active-directory/", + "aliases": [ + "/2015/09/find-stale-accounts-in-active-directory/" + ], + "draft": false, + "authors": [ + "Matt Laird" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-13-call-for-topics-extended-powershell-and-devops-global-summit-2016/", + "aliases": [ + "/2015/09/call-for-topics-extended-powershell-and-devops-global-summit-2016/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-13-future-of-powershell-summit-in-europe-and-north-america/", + "aliases": [ + "/2015/09/future-of-powershell-summit-in-europe-and-north-america/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-15-store-secured-password-in-powershell-script/", + "aliases": [ + "/2015/09/store-secured-password-in-powershell-script/" + ], + "draft": false, + "authors": [ + "Matt Laird" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks", + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-16-speaking-at-powershell-summit-2016-topic-ideas-for-aspiring-speakers/", + "aliases": [ + "/2015/09/speaking-at-powershell-summit-2016-topic-ideas-for-aspiring-speakers/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-17-take-home-from-powershell-summit-europe/", + "aliases": [ + "/2015/09/take-home-from-powershell-summit-europe/" + ], + "draft": false, + "authors": [ + "Jonas Sommer Nielsen" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-21-powershell-scheduled-jobs-and-tableau-analytics/", + "aliases": [ + "/2015/09/powershell-scheduled-jobs-and-tableau-analytics/" + ], + "draft": false, + "authors": [ + "Mike Roberts" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-23-automate-enabling-and-disabling-lync-skype-for-business-users/", + "aliases": [ + "/2015/09/automate-enabling-and-disabling-lync-skype-for-business-users/" + ], + "draft": false, + "authors": [ + "Steve Parankewich" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-25-how-to-handle-oauth-from-powershell/", + "aliases": [ + "/2015/09/how-to-handle-oauth-from-powershell/" + ], + "draft": false, + "authors": [ + "Stephen Owen" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2015-09-28-convert-iso-and-wim-to-vhd-with-a-module/", + "aliases": [ + "/2015/09/convert-iso-and-wim-to-vhd-with-a-module/" + ], + "draft": false, + "authors": [ + "David Jones" + ], + "categories": [ + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2015-10-02-delete-specific-e-mail-or-e-mails-from-all-exchange-mailboxes/", + "aliases": [ + "/2015/10/delete-specific-e-mail-or-e-mails-from-all-exchange-mailboxes/" + ], + "draft": false, + "authors": [ + "Steve Parankewich" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2015-10-03-october-2015-scripting-games-puzzle/", + "aliases": [ + "/2015/10/october-2015-scripting-games-puzzle/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2015-10-05-finding-evil-ldap-queries/", + "aliases": [ + "/2015/10/finding-evil-ldap-queries/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-10-06-mspsug-virtual-meeting-using-regular-expressions-with-powershell-october-13th-2015/", + "aliases": [ + "/2015/10/mspsug-virtual-meeting-using-regular-expressions-with-powershell-october-13th-2015/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-10-08-testing-powershell-direct-with-windows-server-2016-tp3-hyper-v/", + "aliases": [ + "/2015/10/testing-powershell-direct-with-windows-server-2016-tp3-hyper-v/" + ], + "draft": false, + "authors": [ + "Timothy Warner" + ], + "categories": [ + "PowerShell for Admins", + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2015-10-09-export-subnets-from-active-directory-sites-and-services/", + "aliases": [ + "/2015/10/export-subnets-from-active-directory-sites-and-services/" + ], + "draft": false, + "authors": [ + "Steve Parankewich" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2015-10-12-automate-sip-address-and-upn-name-changes-in-lync-skype-for-business/", + "aliases": [ + "/2015/10/automate-sip-address-and-upn-name-changes-in-lync-skype-for-business/" + ], + "draft": false, + "authors": [ + "Steve Parankewich" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2015-10-12-using-package-management-in-windows-powershell-v3/", + "aliases": [ + "/2015/10/using-package-management-in-windows-powershell-v3/" + ], + "draft": false, + "authors": [ + "Timothy Warner" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2015-10-14-desired-state-configuration-beware-of-circular-configurations/", + "aliases": [ + "/2015/10/desired-state-configuration-beware-of-circular-configurations/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-10-18-command-and-query-separation-in-pester-tests/", + "aliases": [ + "/2015/10/command-and-query-separation-in-pester-tests/" + ], + "draft": false, + "authors": [ + "nohwnd" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [] + }, + { + "route": "/articles/2015-10-19-the-jape-challenge/", + "aliases": [ + "/2015/10/the-jape-challenge/" + ], + "draft": false, + "authors": [ + "Carlo Mancini" + ], + "categories": [ + "PowerShell for Developers" + ], + "tags": [] + }, + { + "route": "/articles/2015-10-23-find-any-e-mail-address-or-proxy-address-in-active-directory/", + "aliases": [ + "/2015/10/find-any-e-mail-address-or-proxy-address-in-active-directory/" + ], + "draft": false, + "authors": [ + "Steve Parankewich" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2015-10-28-win-a-free-4-day-pass-to-powershell-and-devops-summit-2016/", + "aliases": [ + "/2015/10/win-a-free-4-day-pass-to-powershell-and-devops-summit-2016/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2015-10-30-join-computer-to-domain-with-specified-computer-name-and-ou/", + "aliases": [ + "/2015/10/join-computer-to-domain-with-specified-computer-name-and-ou/" + ], + "draft": false, + "authors": [ + "Steve Parankewich" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2015-11-01-summit-2016-call-for-topics-is-closed/", + "aliases": [ + "/2015/11/summit-2016-call-for-topics-is-closed/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2015-11-07-november-2015-scripting-games-puzzle/", + "aliases": [ + "/2015/11/november-2015-scripting-games-puzzle/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2015-11-13-powershell-devops-global-summit-2016-info/", + "aliases": [ + "/2015/11/powershell-devops-global-summit-2016-info/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2015-11-14-powershell-devops-global-summit-2016-the-agenda/", + "aliases": [ + "/2015/11/powershell-devops-global-summit-2016-the-agenda/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2015-11-17-philadelphia-powershell-user-group-meeting-december-3rd-2015-with-adam-bertram/", + "aliases": [ + "/2015/11/philadelphia-powershell-user-group-meeting-december-3rd-2015-with-adam-bertram/" + ], + "draft": false, + "authors": [ + "John Mello" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-11-19-atlanta-powershell-users-group-meeting-december-8th-with-june-blender/", + "aliases": [ + "/2015/11/atlanta-powershell-users-group-meeting-december-8th-with-june-blender/" + ], + "draft": false, + "authors": [ + "Stephen Owen" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2015-11-24-keeping-windows-powershell-help-up-to-date/", + "aliases": [ + "/2015/11/keeping-windows-powershell-help-up-to-date/" + ], + "draft": false, + "authors": [ + "Steve Parankewich" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2015-11-30-the-popular-week-of-powershell-blogging-is-back-psblogweek/", + "aliases": [ + "/2015/11/the-popular-week-of-powershell-blogging-is-back-psblogweek/" + ], + "draft": false, + "authors": [ + "Adam Bertram" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2015-12-03-a-real-world-devops-implementation-and-food-for-thought/", + "aliases": [ + "/2015/12/a-real-world-devops-implementation-and-food-for-thought/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "DevOps", + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-12-03-powershell-editor-services-hack-week-dec-6-13/", + "aliases": [ + "/2015/12/powershell-editor-services-hack-week-dec-6-13/" + ], + "draft": false, + "authors": [ + "David Wilson" + ], + "categories": [ + "Announcements", + "PowerShell for Developers", + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2015-12-05-december-2015-scripting-games-puzzle/", + "aliases": [ + "/2015/12/december-2015-scripting-games-puzzle/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2015-12-15-recap-of-the-dec-2015-powershell-editor-services-hack-week/", + "aliases": [ + "/2015/12/recap-of-the-dec-2015-powershell-editor-services-hack-week/" + ], + "draft": false, + "authors": [ + "David Wilson" + ], + "categories": [ + "Events", + "PowerShell for Developers", + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2015-12-21-powershell-news-roundup-theres-been-a-lot-of-it/", + "aliases": [ + "/2015/12/powershell-news-roundup-theres-been-a-lot-of-it/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2015-12-28-microsofts-brave-new-world-needs-version-numbers/", + "aliases": [ + "/2015/12/microsofts-brave-new-world-needs-version-numbers/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "News", + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-12-28-my-favorite-dsc-feature-suggestions-on-uservoice-upvote/", + "aliases": [ + "/2015/12/my-favorite-dsc-feature-suggestions-on-uservoice-upvote/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2015-12-29-powershell-orgs-nonprofit-status/", + "aliases": [ + "/2015/12/powershell-orgs-nonprofit-status/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2016-01-02-january-2016-scripting-games-puzzle/", + "aliases": [ + "/2016/01/january-2016-scripting-games-puzzle/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2016-01-07-get-last-reboot-or-computer-up-time-with-powershell/", + "aliases": [ + "/2016/01/get-last-reboot-or-computer-up-time-with-powershell/" + ], + "draft": false, + "authors": [ + "Steve Parankewich" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2016-01-08-mspsug-virtual-meeting-avoiding-version-chaos-in-a-multi-version-powershell-world-jan-12th/", + "aliases": [ + "/2016/01/mspsug-virtual-meeting-avoiding-version-chaos-in-a-multi-version-powershell-world-jan-12th/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2016-01-11-atlpug-01-19-2016/", + "aliases": [ + "/2016/01/atlpug-01-19-2016/" + ], + "draft": false, + "authors": [ + "Stephen Owen" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2016-01-11-new-boston-powershell-user-group/", + "aliases": [ + "/2016/01/new-boston-powershell-user-group/" + ], + "draft": false, + "authors": [ + "Steve Parankewich" + ], + "categories": [ + "Announcements", + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-01-14-improve-delivery-of-powershell-tools-or-version-controlled-files/", + "aliases": [ + "/2016/01/improve-delivery-of-powershell-tools-or-version-controlled-files/" + ], + "draft": false, + "authors": [ + "Steve Parankewich" + ], + "categories": [ + "DevOps", + "PowerShell for Admins", + "Tips and Tricks", + "Tools", + "Training", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2016-01-18-using-local-functions-remotely-in-an-existing-scriptblock/", + "aliases": [ + "/2016/01/using-local-functions-remotely-in-an-existing-scriptblock/" + ], + "draft": false, + "authors": [ + "timpringle" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2016-01-22-create-windows-shortcuts-or-favorites-with-powershell/", + "aliases": [ + "/2016/01/create-windows-shortcuts-or-favorites-with-powershell/" + ], + "draft": false, + "authors": [ + "Steve Parankewich" + ], + "categories": [ + "DevOps", + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2016-01-28-powershell-devops-global-summit-2016-registration-status/", + "aliases": [ + "/2016/01/powershell-devops-global-summit-2016-registration-status/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2016-01-28-using-powershell-to-enable-chatops-on-windows/", + "aliases": [ + "/2016/01/using-powershell-to-enable-chatops-on-windows/" + ], + "draft": false, + "authors": [ + "Matthew Hodgkins" + ], + "categories": [ + "DevOps", + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks", + "Tools", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2016-01-29-using-powershell-to-make-azure-automation-graphical-runbooks-part-1/", + "aliases": [ + "/2016/01/using-powershell-to-make-azure-automation-graphical-runbooks-part-1/" + ], + "draft": false, + "authors": [ + "timpringle" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2016-02-02-connect-to-all-office-365-services-with-powershell/", + "aliases": [ + "/2016/02/connect-to-all-office-365-services-with-powershell/" + ], + "draft": false, + "authors": [ + "Steve Parankewich" + ], + "categories": [ + "DevOps", + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks", + "Tools", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2016-02-02-powershellsummit-org-registration-status-for-2-feb-2016-also-recordings/", + "aliases": [ + "/2016/02/powershellsummit-org-registration-status-for-2-feb-2016-also-recordings/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2016-02-03-microsoft-powershell-team-panel-twin-cities-february-meeting/", + "aliases": [ + "/2016/02/microsoft-powershell-team-panel-twin-cities-february-meeting/" + ], + "draft": false, + "authors": [ + "Tim Curwick" + ], + "categories": [ + "Events" + ], + "tags": [] + }, + { + "route": "/articles/2016-02-03-using-powershell-to-make-azure-automation-graphical-runbooks-part-2/", + "aliases": [ + "/2016/02/using-powershell-to-make-azure-automation-graphical-runbooks-part-2/" + ], + "draft": false, + "authors": [ + "timpringle" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2016-02-05-mspsug-feb-9th-virtual-meeting-intro-into-the-powershell-ise-git-pspester-onedrive/", + "aliases": [ + "/2016/02/mspsug-feb-9th-virtual-meeting-intro-into-the-powershell-ise-git-pspester-onedrive/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2016-02-06-2016-february-scripting-games-puzzle/", + "aliases": [ + "/2016/02/2016-february-scripting-games-puzzle/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2016-02-16-planning-for-powershelldevops-global-summit-2017-need-your-opinion/", + "aliases": [ + "/2016/02/planning-for-powershelldevops-global-summit-2017-need-your-opinion/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2016-02-18-convert-vba-macros-to-powershell-for-microsoft-office-automation/", + "aliases": [ + "/2016/02/convert-vba-macros-to-powershell-for-microsoft-office-automation/" + ], + "draft": false, + "authors": [ + "Steve Parankewich" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks", + "Tools", + "Training", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2016-02-18-last-chance-for-powershellsummit-org-registration/", + "aliases": [ + "/2016/02/last-chance-for-powershellsummit-org-registration/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2016-02-19-im-not-a-developer/", + "aliases": [ + "/2016/02/im-not-a-developer/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-02-25-a-study-in-powershell-scripting-a-beginners-guide-part-i/", + "aliases": [ + "/2016/02/a-study-in-powershell-scripting-a-beginners-guide-part-i/" + ], + "draft": false, + "authors": [ + "WeiYen Tan" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-02-26-a-study-in-powershell-scripting-part-2/", + "aliases": [ + "/2016/02/a-study-in-powershell-scripting-part-2/" + ], + "draft": false, + "authors": [ + "WeiYen Tan" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-03-01-powershellsummit-org-registration-status-extension/", + "aliases": [ + "/2016/03/powershellsummit-org-registration-status-extension/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2016-03-02-official-powershell-devops-global-summit-2016-agenda-now-available/", + "aliases": [ + "/2016/03/official-powershell-devops-global-summit-2016-agenda-now-available/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2016-03-03-microsoft-automation-platforms-twin-cities-march-meeting/", + "aliases": [ + "/2016/03/microsoft-automation-platforms-twin-cities-march-meeting/" + ], + "draft": false, + "authors": [ + "Tim Curwick" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2016-03-05-2016-march-scripting-games-puzzle/", + "aliases": [ + "/2016/03/2016-march-scripting-games-puzzle/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2016-03-07-calling-all-scripting-games-puzzles/", + "aliases": [ + "/2016/03/calling-all-scripting-games-puzzles/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2016-04-02-2016-march-scripting-games-wrap-up/", + "aliases": [ + "/2016/04/2016-march-scripting-games-wrap-up/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2016-04-13-powershell-devops-global-summit-videos-online/", + "aliases": [ + "/2016/04/powershell-devops-global-summit-videos-online/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2016-04-15-the-unicode-powershell-module/", + "aliases": [ + "/2016/04/the-unicode-powershell-module/" + ], + "draft": false, + "authors": [ + "Carlo Mancini" + ], + "categories": [ + "PowerShell for Developers", + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2016-04-18-a-study-in-powershell-scripting-a-beginners-guide-part-3/", + "aliases": [ + "/2016/04/a-study-in-powershell-scripting-a-beginners-guide-part-3/" + ], + "draft": false, + "authors": [ + "WeiYen Tan" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-04-20-help-get-the-word-out-on-the-getgoing-program-scholarship/", + "aliases": [ + "/2016/04/help-get-the-word-out-on-the-getgoing-program-scholarship/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [ + "DevOps", + "News" + ], + "tags": [] + }, + { + "route": "/articles/2016-04-20-keeping-it-simple-line-breaks-in-powershell/", + "aliases": [ + "/2016/04/keeping-it-simple-line-breaks-in-powershell/" + ], + "draft": false, + "authors": [ + "Jacob Moran" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-04-22-verified-effective-exam-results/", + "aliases": [ + "/2016/04/verified-effective-exam-results/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2016-04-26-scripting-games-may-2016-ad-puzzle/", + "aliases": [ + "/2016/04/scripting-games-may-2016-ad-puzzle/" + ], + "draft": false, + "authors": [ + "i255d" + ], + "categories": [ + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2016-04-29-documenting-your-powershell-api-solved/", + "aliases": [ + "/2016/04/documenting-your-powershell-api-solved/" + ], + "draft": false, + "authors": [ + "msorens" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks", + "Tools", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2016-05-04-get-your-stickers/", + "aliases": [ + "/2016/05/get-your-stickers/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2016-05-08-mspsug-may-10th-virtual-meeting-acceptance-testing-powershell-dsc-with-test-kitchen/", + "aliases": [ + "/2016/05/mspsug-may-10th-virtual-meeting-acceptance-testing-powershell-dsc-with-test-kitchen/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2016-05-09-your-feedback-wanted-new-ebook-hosting-for-powershell-org/", + "aliases": [ + "/2016/05/your-feedback-wanted-new-ebook-hosting-for-powershell-org/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Books" + ], + "tags": [] + }, + { + "route": "/articles/2016-05-16-dutch-powershell-user-group-opens-its-doors-on-slack/", + "aliases": [ + "/2016/05/dutch-powershell-user-group-opens-its-doors-on-slack/" + ], + "draft": false, + "authors": [ + "Jaap Brasser" + ], + "categories": [], + "tags": [] + }, + { + "route": "/articles/2016-05-19-boston-psug-kick-off-meeting-tomorrow/", + "aliases": [ + "/2016/05/boston-psug-kick-off-meeting-tomorrow/" + ], + "draft": false, + "authors": [ + "Steve Parankewich" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2016-05-19-making-awesome-dashboards-from-windows-performance-counters/", + "aliases": [ + "/2016/05/making-awesome-dashboards-from-windows-performance-counters/" + ], + "draft": false, + "authors": [ + "Matthew Hodgkins" + ], + "categories": [ + "DevOps", + "Tools", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2016-05-21-getting-complex-more-line-breaks-in-powershell/", + "aliases": [ + "/2016/05/getting-complex-more-line-breaks-in-powershell/" + ], + "draft": false, + "authors": [ + "Tim Curwick" + ], + "categories": [ + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2016-05-22-practical-powershell-unit-testing/", + "aliases": [ + "/2016/05/practical-powershell-unit-testing/" + ], + "draft": false, + "authors": [ + "msorens" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks", + "Tools", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2016-05-24-slack-and-powershell/", + "aliases": [ + "/2016/05/slack-and-powershell/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "DevOps", + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-06-06-my-devops-dsc-camp-detailed-agenda/", + "aliases": [ + "/2016/06/my-devops-dsc-camp-detailed-agenda/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-06-06-request-for-topics/", + "aliases": [ + "/2016/06/request-for-topics/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2016-06-09-5-tips-for-writing-dsc-resources-in-powershell-5/", + "aliases": [ + "/2016/06/5-tips-for-writing-dsc-resources-in-powershell-5/" + ], + "draft": false, + "authors": [ + "Matthew Hodgkins" + ], + "categories": [ + "DevOps", + "PowerShell for Developers", + "Tips and Tricks", + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2016-06-10-mspsug-june-14th-virtual-meeting-pester-the-tester-powershell-bugs-beware/", + "aliases": [ + "/2016/06/mspsug-june-14th-virtual-meeting-pester-the-tester-powershell-bugs-beware/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [ + "Events" + ], + "tags": [] + }, + { + "route": "/articles/2016-06-11-complete-guide-to-powershell-punctuation/", + "aliases": [ + "/2016/06/complete-guide-to-powershell-punctuation/" + ], + "draft": false, + "authors": [ + "msorens" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks", + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2016-06-13-help-me-test-ssl-on-powershell-org/", + "aliases": [ + "/2016/06/help-me-test-ssl-on-powershell-org/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2016-06-20-high-level-designing-your-powershell-command-set/", + "aliases": [ + "/2016/06/high-level-designing-your-powershell-command-set/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Developers" + ], + "tags": [] + }, + { + "route": "/articles/2016-06-24-heres-what-youve-missed-at-powershell-org-and-whats-coming/", + "aliases": [ + "/2016/06/heres-what-youve-missed-at-powershell-org-and-whats-coming/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2016-06-27-to-ping-or-not-to-ping-the-powershell-way/", + "aliases": [ + "/2016/06/to-ping-or-not-to-ping-the-powershell-way/" + ], + "draft": false, + "authors": [ + "Graham Beer" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-07-01-finding-powershell-sessions-at-conferences-and-events/", + "aliases": [ + "/2016/07/finding-powershell-sessions-at-conferences-and-events/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-07-11-mspsug-july-12th-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module/", + "aliases": [ + "/2016/07/mspsug-july-12th-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module/" + ], + "draft": false, + "authors": [ + "Mike F Robbins" + ], + "categories": [ + "Events" + ], + "tags": [] + }, + { + "route": "/articles/2016-07-23-every-pithy-witticism-begins-with-quotation-marks/", + "aliases": [ + "/2016/07/every-pithy-witticism-begins-with-quotation-marks/" + ], + "draft": false, + "authors": [ + "msorens" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2016-07-27-deploying-modules-to-the-powershell-gallery/", + "aliases": [ + "/2016/07/deploying-modules-to-the-powershell-gallery/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-08-01-powershell-and-devops-global-summit-2017-call-for-topics/", + "aliases": [ + "/2016/08/powershell-and-devops-global-summit-2017-call-for-topics/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2016-08-08-what-are-your-known-problems-solved-in-dsc/", + "aliases": [ + "/2016/08/what-are-your-known-problems-solved-in-dsc/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-08-11-a-date-with-powershell/", + "aliases": [ + "/2016/08/a-date-with-powershell/" + ], + "draft": false, + "authors": [ + "Graham Beer" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks", + "Tools", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2016-08-18-faq-powershell-on-linuxmac/", + "aliases": [ + "/2016/08/faq-powershell-on-linuxmac/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-08-18-powershell-is-open-sourced/", + "aliases": [ + "/2016/08/powershell-is-open-sourced/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [] + }, + { + "route": "/articles/2016-08-19-why-powershell-on-linux-is-such-an-accomplishment/", + "aliases": [ + "/2016/08/why-powershell-on-linux-is-such-an-accomplishment/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-08-21-create-custom-monitors-with-powershell/", + "aliases": [ + "/2016/08/create-custom-monitors-with-powershell/" + ], + "draft": false, + "authors": [ + "msorens" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks", + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2016-08-22-why-objects-remoting-and-consistency-are-such-a-big-deal-in-powershell/", + "aliases": [ + "/2016/08/why-objects-remoting-and-consistency-are-such-a-big-deal-in-powershell/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-08-23-microsoft-did-what/", + "aliases": [ + "/2016/08/microsoft-did-what/" + ], + "draft": false, + "authors": [ + "Missy Januszko" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-08-24-heres-another-reason-to-contribute/", + "aliases": [ + "/2016/08/heres-another-reason-to-contribute/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-08-26-ultimate-powershell-prompt-customization-and-git-setup-guide/", + "aliases": [ + "/2016/08/ultimate-powershell-prompt-customization-and-git-setup-guide/" + ], + "draft": false, + "authors": [ + "Matthew Hodgkins" + ], + "categories": [ + "Tips and Tricks", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2016-09-02-unit-testing-is-pestering-the-hell-out-of-me/", + "aliases": [ + "/2016/09/unit-testing-is-pestering-the-hell-out-of-me/" + ], + "draft": false, + "authors": [ + "Missy Januszko" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-09-06-nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas/", + "aliases": [ + "/2016/09/nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-09-19-powershell-devops-global-summit-2017-preview/", + "aliases": [ + "/2016/09/powershell-devops-global-summit-2017-preview/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-09-22-changing-of-the-guard-at-powershell-org/", + "aliases": [ + "/2016/09/changing-of-the-guard-at-powershell-org/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2016-09-22-powershell-happenings-at-ignite-2016/", + "aliases": [ + "/2016/09/powershell-happenings-at-ignite-2016/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2016-09-27-recap-of-dupsug-powershell-saturday-2016/", + "aliases": [ + "/2016/09/recap-of-dupsug-powershell-saturday-2016/" + ], + "draft": false, + "authors": [ + "Jaap Brasser" + ], + "categories": [ + "Events" + ], + "tags": [] + }, + { + "route": "/articles/2016-10-03-call-for-topics-summit-closed-but-european-conference-open/", + "aliases": [ + "/2016/10/call-for-topics-summit-closed-but-european-conference-open/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2016-10-04-a-practical-guide-for-using-regex-in-powershell/", + "aliases": [ + "/2016/10/a-practical-guide-for-using-regex-in-powershell/" + ], + "draft": false, + "authors": [ + "Duffney" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2016-10-11-dsc-configurationdata-blocks-in-a-world-of-cattle/", + "aliases": [ + "/2016/10/dsc-configurationdata-blocks-in-a-world-of-cattle/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-10-12-no-easy-button-for-configuration-management/", + "aliases": [ + "/2016/10/no-easy-button-for-configuration-management/" + ], + "draft": false, + "authors": [ + "Missy Januszko" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-10-13-apologies-for-the-delay/", + "aliases": [ + "/2016/10/apologies-for-the-delay/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2016-10-14-be-an-azure-consultant-for-powershell-org/", + "aliases": [ + "/2016/10/be-an-azure-consultant-for-powershell-org/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2016-10-18-pitfalls-of-the-pipeline/", + "aliases": [ + "/2016/10/pitfalls-of-the-pipeline/" + ], + "draft": false, + "authors": [ + "msorens" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks", + "Tools", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2016-10-18-powershell-devops-global-summit-2017-session-acceptance/", + "aliases": [ + "/2016/10/powershell-devops-global-summit-2017-session-acceptance/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2016-10-20-re-subscribe-to-new-forums-topic-notifications/", + "aliases": [ + "/2016/10/re-subscribe-to-new-forums-topic-notifications/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2016-10-25-powershell-devops-global-summit-2017-agenda/", + "aliases": [ + "/2016/10/powershell-devops-global-summit-2017-agenda/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2016-11-01-registration-is-now-open/", + "aliases": [ + "/2016/11/registration-is-now-open/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2016-11-01-the-flavors-of-windows-containers/", + "aliases": [ + "/2016/11/the-flavors-of-windows-containers/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-12-05-powershell-gotchas/", + "aliases": [ + "/2016/12/powershell-gotchas/" + ], + "draft": false, + "authors": [ + "msorens" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2016-12-15-the-key-to-understanding-powershell-on-windows-or-linux/", + "aliases": [ + "/2016/12/the-key-to-understanding-powershell-on-windows-or-linux/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2016-12-19-update-tug-the-open-source-dsc-pull-server/", + "aliases": [ + "/2016/12/update-tug-the-open-source-dsc-pull-server/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [] + }, + { + "route": "/articles/2017-01-06-pester-parameters-and-hashtable-fun/", + "aliases": [ + "/2017/01/pester-parameters-and-hashtable-fun/" + ], + "draft": false, + "authors": [ + "WeiYen Tan" + ], + "categories": [ + "PowerShell for Admins", + "Training", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2017-01-13-devops-a-career-changer/", + "aliases": [ + "/2017/01/devops-a-career-changer/" + ], + "draft": false, + "authors": [ + "Missy Januszko" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2017-01-24-community-lightning-demos/", + "aliases": [ + "/2017/01/community-lightning-demos/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-01-28-summit-2017-seats-going-fast/", + "aliases": [ + "/2017/01/summit-2017-seats-going-fast/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-02-01-summit-2017-badge-question/", + "aliases": [ + "/2017/02/summit-2017-badge-question/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-02-08-summit-2017-agenda-program-guide-online/", + "aliases": [ + "/2017/02/summit-2017-agenda-program-guide-online/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-02-09-powershell-summit-2017-sold-out/", + "aliases": [ + "/2017/02/powershell-summit-2017-sold-out/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-02-09-you-an-still-get-into-powershell-devops-global-summit-2017/", + "aliases": [ + "/2017/02/you-an-still-get-into-powershell-devops-global-summit-2017/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-02-16-join-us-in-thanking-ed-teresa-wilson-at-summit-2017/", + "aliases": [ + "/2017/02/join-us-in-thanking-ed-teresa-wilson-at-summit-2017/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-02-23-three-seats-left/", + "aliases": [ + "/2017/02/three-seats-left/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-03-22-community-lightning-demos-call-for-proposals/", + "aliases": [ + "/2017/03/community-lightning-demos-call-for-proposals/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-03-27-powershell-summit-2017-last-minute-updates/", + "aliases": [ + "/2017/03/powershell-summit-2017-last-minute-updates/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-04-01-submit-questions-for-ask-me-anything-with-jeffrey-snover/", + "aliases": [ + "/2017/04/submit-questions-for-ask-me-anything-with-jeffrey-snover/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-04-05-final-agenda/", + "aliases": [ + "/2017/04/final-agenda/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-04-06-do-anything-in-one-line-of-powershell/", + "aliases": [ + "/2017/04/do-anything-in-one-line-of-powershell/" + ], + "draft": false, + "authors": [ + "msorens" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks", + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2017-04-13-post-summit-note/", + "aliases": [ + "/2017/04/post-summit-note/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-04-14-powershell-saturday-booster-program/", + "aliases": [ + "/2017/04/powershell-saturday-booster-program/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-04-17-serve-on-the-board-of-powershell-org/", + "aliases": [ + "/2017/04/serve-on-the-board-of-powershell-org/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2017-04-21-colecting-certificates-form-an-enterprise-ca-for-use-with-dsc/", + "aliases": [ + "/2017/04/colecting-certificates-form-an-enterprise-ca-for-use-with-dsc/" + ], + "draft": false, + "authors": [ + "David Jones" + ], + "categories": [ + "DevOps", + "PowerShell for Admins", + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2017-04-21-powershell-and-devops-global-summit-recap/", + "aliases": [ + "/2017/04/powershell-and-devops-global-summit-recap/" + ], + "draft": false, + "authors": [ + "Missy Januszko" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2017-05-04-announcing-the-powershell-saturday-booster-program/", + "aliases": [ + "/2017/05/announcing-the-powershell-saturday-booster-program/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2017-05-09-powershell-team-day-at-it-transformation-event/", + "aliases": [ + "/2017/05/powershell-team-day-at-it-transformation-event/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "DevOps", + "Events" + ], + "tags": [] + }, + { + "route": "/articles/2017-06-22-taking-powershell-to-the-next-level/", + "aliases": [ + "/2017/06/taking-powershell-to-the-next-level/" + ], + "draft": false, + "authors": [ + "Nick Rimmer" + ], + "categories": [ + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2017-07-03-topics-for-powershell-summit-2018/", + "aliases": [ + "/2017/07/topics-for-powershell-summit-2018/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-07-25-using-powershell-azure-automation-and-oms-part-i/", + "aliases": [ + "/2017/07/using-powershell-azure-automation-and-oms-part-i/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2017-08-01-76318-2/", + "aliases": [ + "/2017/08/76318-2/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-08-01-powershell-devops-global-summit-scholarship-program/", + "aliases": [ + "/2017/08/powershell-devops-global-summit-scholarship-program/" + ], + "draft": false, + "authors": [ + "Thomas Malkewitz" + ], + "categories": [ + "Announcements", + "Events", + "News", + "PowerShell Summit", + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2017-08-01-using-powershell-azure-automation-and-oms-part-ii/", + "aliases": [ + "/2017/08/using-powershell-azure-automation-and-oms-part-ii/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2017-08-08-summit-agenda-process/", + "aliases": [ + "/2017/08/summit-agenda-process/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-08-08-using-powershell-azure-automation-and-oms-part-iii/", + "aliases": [ + "/2017/08/using-powershell-azure-automation-and-oms-part-iii/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2017-08-23-psblogweek-is-back/", + "aliases": [ + "/2017/08/psblogweek-is-back/" + ], + "draft": false, + "authors": [ + "Adam Bertram" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2017-08-25-powershell-2-0-deprecation/", + "aliases": [ + "/2017/08/powershell-2-0-deprecation/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "News" + ], + "tags": [] + }, + { + "route": "/articles/2017-09-02-powershell-and-devops-summit-2018-session-acceptance/", + "aliases": [ + "/2017/09/powershell-and-devops-summit-2018-session-acceptance/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-09-13-the-future-of-powershells-desired-state-configuration/", + "aliases": [ + "/2017/09/the-future-of-powershells-desired-state-configuration/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2017-09-25-using-azure-desired-state-configuration-part-i/", + "aliases": [ + "/2017/09/using-azure-desired-state-configuration-part-i/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2017-09-26-using-azure-desired-state-configuration-part-ii/", + "aliases": [ + "/2017/09/using-azure-desired-state-configuration-part-ii/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2017-09-30-call-for-topics-closing-1-october/", + "aliases": [ + "/2017/09/call-for-topics-closing-1-october/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-10-03-using-azure-desired-state-configuration-part-iii/", + "aliases": [ + "/2017/10/using-azure-desired-state-configuration-part-iii/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2017-10-10-using-azure-desired-state-configuration-part-iv/", + "aliases": [ + "/2017/10/using-azure-desired-state-configuration-part-iv/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2017-10-24-powershell-devops-summit-2018-schedule/", + "aliases": [ + "/2017/10/powershell-devops-summit-2018-schedule/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-10-26-putting-it-all-out-there/", + "aliases": [ + "/2017/10/putting-it-all-out-there/" + ], + "draft": false, + "authors": [ + "Liam Kemp" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2017-11-01-registration-is-open/", + "aliases": [ + "/2017/11/registration-is-open/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2017-11-10-powershell-devops-global-summit-2018-scholarship-recipient/", + "aliases": [ + "/2017/11/powershell-devops-global-summit-2018-scholarship-recipient/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2017-11-19-dealing-with-redundancy-in-a-it-world/", + "aliases": [ + "/2017/11/dealing-with-redundancy-in-a-it-world/" + ], + "draft": false, + "authors": [ + "Alex Aymonier" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-01-04-iron-scripter-prequel/", + "aliases": [ + "/2018/01/iron-scripter-prequel/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-01-09-pscore-6-jeffrey-snover-and-the-powershell-team-hosting-ama-on-11th-jan-9am-pt/", + "aliases": [ + "/2018/01/pscore-6-jeffrey-snover-and-the-powershell-team-hosting-ama-on-11th-jan-9am-pt/" + ], + "draft": false, + "authors": [ + "Mark Wragg" + ], + "categories": [ + "Announcements", + "Events", + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-01-14-iron-scripter-2018-prequel-puzzle-1/", + "aliases": [ + "/2018/01/iron-scripter-2018-prequel-puzzle-1/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-01-15-can-we-talk-about-powershell-core-6-0/", + "aliases": [ + "/2018/01/can-we-talk-about-powershell-core-6-0/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "News", + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-01-21-iron-scripter-2018-prequel-puzzle-2/", + "aliases": [ + "/2018/01/iron-scripter-2018-prequel-puzzle-2/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-01-21-iron-scripter-prequel-puzzle-1-a-solution/", + "aliases": [ + "/2018/01/iron-scripter-prequel-puzzle-1-a-solution/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-01-23-powershell-summit-registration-status/", + "aliases": [ + "/2018/01/powershell-summit-registration-status/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-01-26-summit-2018-registration-update/", + "aliases": [ + "/2018/01/summit-2018-registration-update/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-01-28-iron-scripter-2018-prequel-puzzle-3/", + "aliases": [ + "/2018/01/iron-scripter-2018-prequel-puzzle-3/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-01-28-iron-scripter-prequel-puzzle-2-a-commentary/", + "aliases": [ + "/2018/01/iron-scripter-prequel-puzzle-2-a-commentary/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-01-28-powershell-story-continued-becoming-a-craftsman/", + "aliases": [ + "/2018/01/powershell-story-continued-becoming-a-craftsman/" + ], + "draft": false, + "authors": [ + "Duffney" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-01-29-distilling-microsofts-dsc-update-jan-2018/", + "aliases": [ + "/2018/01/distilling-microsofts-dsc-update-jan-2018/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-02-01-help-us-recognize-amazing-powershell-contributors/", + "aliases": [ + "/2018/02/help-us-recognize-amazing-powershell-contributors/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-02-03-summit-2018-registration-status/", + "aliases": [ + "/2018/02/summit-2018-registration-status/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-02-04-2018-community-lightning-demos/", + "aliases": [ + "/2018/02/2018-community-lightning-demos/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-02-04-iron-scripter-2018-prequel-puzzle-3-a-commentary/", + "aliases": [ + "/2018/02/iron-scripter-2018-prequel-puzzle-3-a-commentary/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-02-04-iron-scripter-2018-prequel-puzzle-4/", + "aliases": [ + "/2018/02/iron-scripter-2018-prequel-puzzle-4/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-02-05-powershell-summit-pre-arrival-information-dump/", + "aliases": [ + "/2018/02/powershell-summit-pre-arrival-information-dump/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-02-06-powershell-devops-global-summit-2018-registration-status/", + "aliases": [ + "/2018/02/powershell-devops-global-summit-2018-registration-status/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-02-08-updated-summit-pre-arrival-infodump/", + "aliases": [ + "/2018/02/updated-summit-pre-arrival-infodump/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-02-11-iron-scripter-2018-prequel-puzzle-4-a-commentary/", + "aliases": [ + "/2018/02/iron-scripter-2018-prequel-puzzle-4-a-commentary/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-02-11-iron-scripter-2018-prequel-puzzle-5/", + "aliases": [ + "/2018/02/iron-scripter-2018-prequel-puzzle-5/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-02-18-iron-scripter-2018-prequel-puzzle-5-a-commentary/", + "aliases": [ + "/2018/02/iron-scripter-2018-prequel-puzzle-5-a-commentary/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-02-18-iron-scripter-prequels-puzzle-6/", + "aliases": [ + "/2018/02/iron-scripter-prequels-puzzle-6/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-02-25-iron-scripter-prequel-puzzle-6-commentary/", + "aliases": [ + "/2018/02/iron-scripter-prequel-puzzle-6-commentary/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-02-25-iron-scripter-prequels-puzzle-7/", + "aliases": [ + "/2018/02/iron-scripter-prequels-puzzle-7/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-03-04-iron-scripter-prequel-puzzle-7-a-commentary/", + "aliases": [ + "/2018/03/iron-scripter-prequel-puzzle-7-a-commentary/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-03-04-iron-scripter-prequel-puzzle-8/", + "aliases": [ + "/2018/03/iron-scripter-prequel-puzzle-8/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-03-10-2018-community-lightning-demos-sign-up-now/", + "aliases": [ + "/2018/03/2018-community-lightning-demos-sign-up-now/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-03-11-iron-scripter-prequel-puzzle-8-a-commentary/", + "aliases": [ + "/2018/03/iron-scripter-prequel-puzzle-8-a-commentary/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-03-11-iron-scripter-prequel-puzzle-9/", + "aliases": [ + "/2018/03/iron-scripter-prequel-puzzle-9/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-03-18-iron-scripter-preludes-and-main-event-rules-and-info/", + "aliases": [ + "/2018/03/iron-scripter-preludes-and-main-event-rules-and-info/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-03-18-iron-scripter-prequel-puzzle-10/", + "aliases": [ + "/2018/03/iron-scripter-prequel-puzzle-10/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-03-28-iron-scripter-prequels-puzzle-9-a-commentary/", + "aliases": [ + "/2018/03/iron-scripter-prequels-puzzle-9-a-commentary/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-04-01-iron-scripter-prequels-puzzle-10-a-commentary/", + "aliases": [ + "/2018/04/iron-scripter-prequels-puzzle-10-a-commentary/" + ], + "draft": false, + "authors": [ + "Richard Siddaway" + ], + "categories": [ + "Announcements", + "PowerShell Summit", + "Scripting Games" + ], + "tags": [] + }, + { + "route": "/articles/2018-04-11-a-changing-of-the-guard/", + "aliases": [ + "/2018/04/a-changing-of-the-guard/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-04-16-a-summit-2018-post-mortem/", + "aliases": [ + "/2018/04/a-summit-2018-post-mortem/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-05-19-100887-2/", + "aliases": [ + "/2018/05/100887-2/" + ], + "draft": false, + "authors": [ + "Eli Hess" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2018-05-28-executing-linq-queries-in-powershell-part-2/", + "aliases": [ + "/2018/05/executing-linq-queries-in-powershell-part-2/" + ], + "draft": false, + "authors": [ + "Eli Hess" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks", + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2018-06-03-we-need-your-help/", + "aliases": [ + "/2018/06/we-need-your-help/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit", + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2018-06-21-how-powershell-devops-global-summit-began/", + "aliases": [ + "/2018/06/how-powershell-devops-global-summit-began/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-06-22-looking-for-a-powershell-org-contributor/", + "aliases": [ + "/2018/06/looking-for-a-powershell-org-contributor/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "News" + ], + "tags": [] + }, + { + "route": "/articles/2018-06-27-onramp-scholarship-open-to-non-us-applicants/", + "aliases": [ + "/2018/06/onramp-scholarship-open-to-non-us-applicants/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-07-04-the-re-launch-of-the-powershell-org-free-ebooks-now-in-spanish-too/", + "aliases": [ + "/2018/07/the-re-launch-of-the-powershell-org-free-ebooks-now-in-spanish-too/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Books" + ], + "tags": [] + }, + { + "route": "/articles/2018-07-11-help-us-improve-our-ebooks-your-chance-to-contribute/", + "aliases": [ + "/2018/07/help-us-improve-our-ebooks-your-chance-to-contribute/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-07-13-what-you-missed-this-week-in-powershell/", + "aliases": [ + "/2018/07/what-you-missed-this-week-in-powershell/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-07-20-what-you-missed-this-week-in-powershell-2/", + "aliases": [ + "/2018/07/what-you-missed-this-week-in-powershell-2/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-07-27-what-you-missed-this-week-in-powershell-3/", + "aliases": [ + "/2018/07/what-you-missed-this-week-in-powershell-3/" + ], + "draft": false, + "authors": [ + "Greg Tate" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-07-31-powerhour-community-lightning-demos/", + "aliases": [ + "/2018/07/powerhour-community-lightning-demos/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [] + }, + { + "route": "/articles/2018-08-01-powershell-devops-summit-2019-call-for-speakers/", + "aliases": [ + "/2018/08/powershell-devops-summit-2019-call-for-speakers/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-08-03-what-you-missed-this-week-in-powershell-4/", + "aliases": [ + "/2018/08/what-you-missed-this-week-in-powershell-4/" + ], + "draft": false, + "authors": [ + "Greg Tate" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-08-07-welcome-to-the-new-powershell-org/", + "aliases": [ + "/2018/08/welcome-to-the-new-powershell-org/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2018-08-08-thank-you-richard-and-fare-well/", + "aliases": [ + "/2018/08/thank-you-richard-and-fare-well/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-08-10-what-you-missed-this-week-in-powershell-5/", + "aliases": [ + "/2018/08/what-you-missed-this-week-in-powershell-5/" + ], + "draft": false, + "authors": [ + "Greg Tate" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-08-14-the-summit-2019-call-for-topics-some-ideas/", + "aliases": [ + "/2018/08/the-summit-2019-call-for-topics-some-ideas/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-08-15-help-us-run-powershell-org/", + "aliases": [ + "/2018/08/help-us-run-powershell-org/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2018-08-17-icymi-powershell-week-of-17-august-2018/", + "aliases": [ + "/2018/08/icymi-powershell-week-of-17-august-2018/" + ], + "draft": false, + "authors": [ + "Greg Tate" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-08-21-use-pnp-powershell-to-add-contenttype-for-your-sharepoint-site/", + "aliases": [ + "/2018/08/use-pnp-powershell-to-add-contenttype-for-your-sharepoint-site/" + ], + "draft": false, + "authors": [ + "Eli Hess" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-08-24-icymi-powershell-week-of-24-august-18/", + "aliases": [ + "/2018/08/icymi-powershell-week-of-24-august-18/" + ], + "draft": false, + "authors": [ + "Greg Tate" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-08-25-powershell-devops-global-summit-initial-onramp-scholarship-recipients/", + "aliases": [ + "/2018/08/powershell-devops-global-summit-initial-onramp-scholarship-recipients/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-08-31-icymi-week-of-31-august-18/", + "aliases": [ + "/2018/08/icymi-week-of-31-august-18/" + ], + "draft": false, + "authors": [ + "Greg Tate" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-09-01-getting-feedback-on-powershell-devops-global-summit-proposals/", + "aliases": [ + "/2018/09/getting-feedback-on-powershell-devops-global-summit-proposals/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-09-07-icymi-powershell-week-of-7-september-18/", + "aliases": [ + "/2018/09/icymi-powershell-week-of-7-september-18/" + ], + "draft": false, + "authors": [ + "Greg Tate" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-09-14-icymi-powershell-week-of-14-september-18/", + "aliases": [ + "/2018/09/icymi-powershell-week-of-14-september-18/" + ], + "draft": false, + "authors": [ + "Greg Tate" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-09-21-icymi-powershell-week-of-21-september-18/", + "aliases": [ + "/2018/09/icymi-powershell-week-of-21-september-18/" + ], + "draft": false, + "authors": [ + "Greg Tate" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-09-28-icymi-powershell-week-of-28-september-18/", + "aliases": [ + "/2018/09/icymi-powershell-week-of-28-september-18/" + ], + "draft": false, + "authors": [ + "Greg Tate" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-10-04-free-beta-ebook-powershell-org-history-of-a-community/", + "aliases": [ + "/2018/10/free-beta-ebook-powershell-org-history-of-a-community/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Books" + ], + "tags": [] + }, + { + "route": "/articles/2018-10-05-icymi-powershell-week-of-5-october-2018/", + "aliases": [ + "/2018/10/icymi-powershell-week-of-5-october-2018/" + ], + "draft": false, + "authors": [ + "Greg Tate" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-10-12-icymi-powershell-week-of-12-october-2018/", + "aliases": [ + "/2018/10/icymi-powershell-week-of-12-october-2018/" + ], + "draft": false, + "authors": [ + "Greg Tate" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-10-12-powershell-devops-summit-2019-update-agenda-online/", + "aliases": [ + "/2018/10/powershell-devops-summit-2019-update-agenda-online/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-10-19-icymi-powershell-week-of-19-october-2018/", + "aliases": [ + "/2018/10/icymi-powershell-week-of-19-october-2018/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-10-19-powershell-org-site-maintenance-today/", + "aliases": [ + "/2018/10/powershell-org-site-maintenance-today/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2018-10-22-powershell-and-devops-global-summit-2019-post-cfp-thoughts/", + "aliases": [ + "/2018/10/powershell-and-devops-global-summit-2019-post-cfp-thoughts/" + ], + "draft": false, + "authors": [ + "Missy Januszko" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2018-10-24-powershell-org-site-status-update/", + "aliases": [ + "/2018/10/powershell-org-site-status-update/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2018-10-26-icymi-powershell-week-of-26-october-2018/", + "aliases": [ + "/2018/10/icymi-powershell-week-of-26-october-2018/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-10-29-the-new-powershell-org-logo-and-ebooks-and-swag/", + "aliases": [ + "/2018/10/the-new-powershell-org-logo-and-ebooks-and-swag/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Announcements" + ], + "tags": [] + }, + { + "route": "/articles/2018-11-02-icymi-powershell-week-of-2-november-2018/", + "aliases": [ + "/2018/11/icymi-powershell-week-of-2-november-2018/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-11-09-icymi-powershell-week-of-9-november-2018/", + "aliases": [ + "/2018/11/icymi-powershell-week-of-9-november-2018/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-11-16-icymi-powershell-week-of-16-november-2018/", + "aliases": [ + "/2018/11/icymi-powershell-week-of-16-november-2018/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-11-23-icymi-powershell-week-of-22-november-2018/", + "aliases": [ + "/2018/11/icymi-powershell-week-of-22-november-2018/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-11-30-icymi-powershell-week-of-30-november-2018/", + "aliases": [ + "/2018/11/icymi-powershell-week-of-30-november-2018/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-12-01-ticket-sales-update-for-powershell-devops-global-summit-2019/", + "aliases": [ + "/2018/12/ticket-sales-update-for-powershell-devops-global-summit-2019/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-12-07-icymi-powershell-week-of-07-december-2018/", + "aliases": [ + "/2018/12/icymi-powershell-week-of-07-december-2018/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-12-12-welcome-new-and-returning-pshsummit-summiteers/", + "aliases": [ + "/2018/12/welcome-new-and-returning-pshsummit-summiteers/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2018-12-14-icymi-powershell-week-of-14-december-2018/", + "aliases": [ + "/2018/12/icymi-powershell-week-of-14-december-2018/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2018-12-21-icymi-powershell-week-of-21-december-2018/", + "aliases": [ + "/2018/12/icymi-powershell-week-of-21-december-2018/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-01-04-icymi-powershell-weeks-of-x-mas-4-january-2019/", + "aliases": [ + "/2019/01/icymi-powershell-weeks-of-x-mas-4-january-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-01-11-icymi-powershell-week-of-11-january-2019/", + "aliases": [ + "/2019/01/icymi-powershell-week-of-11-january-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-01-17-powershell-devops-global-summit-cancellation-and-waitlist-procedure/", + "aliases": [ + "/2019/01/powershell-devops-global-summit-cancellation-and-waitlist-procedure/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2019-01-18-icymi-week-of-18-january-2018/", + "aliases": [ + "/2019/01/icymi-week-of-18-january-2018/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-01-25-icymi-powershell-week-of-25-january-2019/", + "aliases": [ + "/2019/01/icymi-powershell-week-of-25-january-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-02-01-icymi-powershell-week-of-1-february-2019/", + "aliases": [ + "/2019/02/icymi-powershell-week-of-1-february-2019/" + ], + "draft": false, + "authors": [ + "Brett" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-02-07-summit-expansion-seeking-feedback/", + "aliases": [ + "/2019/02/summit-expansion-seeking-feedback/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2019-02-08-icymi-powershell-week-of-8-february-2019/", + "aliases": [ + "/2019/02/icymi-powershell-week-of-8-february-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-02-13-iron-scripter-2019-begins/", + "aliases": [ + "/2019/02/iron-scripter-2019-begins/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2019-02-14-tips-for-writing-cross-platform-powershell-code/", + "aliases": [ + "/2019/02/tips-for-writing-cross-platform-powershell-code/" + ], + "draft": false, + "authors": [ + "Aaron Jensen" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2019-02-15-icymi-powershell-week-of-15-february-2019/", + "aliases": [ + "/2019/02/icymi-powershell-week-of-15-february-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-02-22-icymi-powershell-week-of-22-february-2019/", + "aliases": [ + "/2019/02/icymi-powershell-week-of-22-february-2019/" + ], + "draft": false, + "authors": [ + "Brett" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-03-01-icymi-powershell-week-of-1-march-2019/", + "aliases": [ + "/2019/03/icymi-powershell-week-of-1-march-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-03-08-icymi-powershell-week-of-8-march-2019/", + "aliases": [ + "/2019/03/icymi-powershell-week-of-8-march-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-03-11-whos-your-2019-powershell-community-hero/", + "aliases": [ + "/2019/03/whos-your-2019-powershell-community-hero/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2019-03-15-icymi-powershell-week-of-15-march-2019/", + "aliases": [ + "/2019/03/icymi-powershell-week-of-15-march-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-03-22-icymi-powershell-week-of-22-march-2019/", + "aliases": [ + "/2019/03/icymi-powershell-week-of-22-march-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-03-22-running-universal-dashboard-with-ubuntu-and-nginx-with-https/", + "aliases": [ + "/2019/03/running-universal-dashboard-with-ubuntu-and-nginx-with-https/" + ], + "draft": false, + "authors": [ + "Nathaniel Webb (ArtisanByteCrafter)" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2019-03-26-2019-community-lightning-demos/", + "aliases": [ + "/2019/03/2019-community-lightning-demos/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "Events", + "PowerShell for Admins", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2019-03-28-secure-your-powershell-session-with-jea-and-constrained-endpoints/", + "aliases": [ + "/2019/03/secure-your-powershell-session-with-jea-and-constrained-endpoints/" + ], + "draft": false, + "authors": [ + "Nathaniel Webb (ArtisanByteCrafter)" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks", + "Tools", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2019-03-29-icymi-powershell-week-of-29-march-2019/", + "aliases": [ + "/2019/03/icymi-powershell-week-of-29-march-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-04-05-icymi-powershell-week-of-5-april-2019/", + "aliases": [ + "/2019/04/icymi-powershell-week-of-5-april-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-04-09-hear-hear-for-here-strings/", + "aliases": [ + "/2019/04/hear-hear-for-here-strings/" + ], + "draft": false, + "authors": [ + "pwshliquori" + ], + "categories": [ + "Tips and Tricks", + "Tools" + ], + "tags": [] + }, + { + "route": "/articles/2019-04-12-icymi-powershell-week-of-12-april-2019/", + "aliases": [ + "/2019/04/icymi-powershell-week-of-12-april-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-04-18-learn-to-use-verbose-output-streams-in-your-pester-tests/", + "aliases": [ + "/2019/04/learn-to-use-verbose-output-streams-in-your-pester-tests/" + ], + "draft": false, + "authors": [ + "Nathaniel Webb (ArtisanByteCrafter)" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2019-04-19-get-command-one-of-the-best-cmdlets-besides-get-help/", + "aliases": [ + "/2019/04/get-command-one-of-the-best-cmdlets-besides-get-help/" + ], + "draft": false, + "authors": [ + "pwshliquori" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2019-04-19-icymi-powershell-week-of-19-april-2019/", + "aliases": [ + "/2019/04/icymi-powershell-week-of-19-april-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-04-20-azure-devops-enable-allow-scripts-to-access-the-oauth-token-using-powershell/", + "aliases": [ + "/2019/04/azure-devops-enable-allow-scripts-to-access-the-oauth-token-using-powershell/" + ], + "draft": false, + "authors": [ + "pwshliquori" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2019-04-26-icymi-powershell-week-of-26-april-2019/", + "aliases": [ + "/2019/04/icymi-powershell-week-of-26-april-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-04-26-phenomenal-number-of-acls-itty-bitty-living-space/", + "aliases": [ + "/2019/04/phenomenal-number-of-acls-itty-bitty-living-space/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2019-04-29-find-module-find-script-dont-recreate-the-wheel/", + "aliases": [ + "/2019/04/find-module-find-script-dont-recreate-the-wheel/" + ], + "draft": false, + "authors": [ + "pwshliquori" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2019-05-03-icymi-powershell-week-of-3-may-2019/", + "aliases": [ + "/2019/05/icymi-powershell-week-of-3-may-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-05-06-summit-2020-a-new-addition/", + "aliases": [ + "/2019/05/summit-2020-a-new-addition/" + ], + "draft": false, + "authors": [ + "Will Anderson" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2019-05-10-icymi-powershell-week-of-10-may-2019/", + "aliases": [ + "/2019/05/icymi-powershell-week-of-10-may-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-05-17-icymi-powershell-week-of-17-may-2019/", + "aliases": [ + "/2019/05/icymi-powershell-week-of-17-may-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-05-24-icymi-powershell-week-of-24-may-2019/", + "aliases": [ + "/2019/05/icymi-powershell-week-of-24-may-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-05-30-__trashed/", + "aliases": [ + "/2019/05/__trashed/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2019-05-31-icymi-powershell-week-of-31-may-2019/", + "aliases": [ + "/2019/05/icymi-powershell-week-of-31-may-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-06-07-icymi-powershell-week-of-7-june-2019/", + "aliases": [ + "/2019/06/icymi-powershell-week-of-7-june-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-06-14-icymi-powershell-week-of-14-june-2019/", + "aliases": [ + "/2019/06/icymi-powershell-week-of-14-june-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-06-14-universal-dashboard-templates-scaffolding-a-new-ud-project-with-powershell/", + "aliases": [ + "/2019/06/universal-dashboard-templates-scaffolding-a-new-ud-project-with-powershell/" + ], + "draft": false, + "authors": [ + "Nathaniel Webb (ArtisanByteCrafter)" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2019-06-21-icymi-powershell-week-of-21-june-2019/", + "aliases": [ + "/2019/06/icymi-powershell-week-of-21-june-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-06-28-icymi-powershell-week-of-28-june-2019/", + "aliases": [ + "/2019/06/icymi-powershell-week-of-28-june-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-07-01-a-farewell-and-a-bunch-of-hellos/", + "aliases": [ + "/2019/07/a-farewell-and-a-bunch-of-hellos/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2019-07-05-icymi-powershell-week-of-5-july-2019/", + "aliases": [ + "/2019/07/icymi-powershell-week-of-5-july-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-07-08-quick-protip-negotiate-tls-connections-in-powershell-with-a-minimum-tls-version-requirement/", + "aliases": [ + "/2019/07/quick-protip-negotiate-tls-connections-in-powershell-with-a-minimum-tls-version-requirement/" + ], + "draft": false, + "authors": [ + "Nathaniel Webb (ArtisanByteCrafter)" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2019-07-12-icymi-powershell-week-of-12-july-2019/", + "aliases": [ + "/2019/07/icymi-powershell-week-of-12-july-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-07-19-icymi-powershell-week-of-17-july-2019/", + "aliases": [ + "/2019/07/icymi-powershell-week-of-17-july-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-07-26-icymi-powershell-week-of-26-july-2019/", + "aliases": [ + "/2019/07/icymi-powershell-week-of-26-july-2019/" + ], + "draft": false, + "authors": [ + "Mark Roloff" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-08-02-icymi-powershell-week-of-2-august-2019/", + "aliases": [ + "/2019/08/icymi-powershell-week-of-2-august-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-08-09-icymi-powershell-week-of-9-august-2019/", + "aliases": [ + "/2019/08/icymi-powershell-week-of-9-august-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-08-16-icymi-powershell-week-of-16-august-2019/", + "aliases": [ + "/2019/08/icymi-powershell-week-of-16-august-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-08-20-a-peculiar-parse/", + "aliases": [ + "/2019/08/a-peculiar-parse/" + ], + "draft": false, + "authors": [ + "Colyn Via" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks", + "Training" + ], + "tags": [] + }, + { + "route": "/articles/2019-08-23-icymi-powershell-week-of-23-august-2019/", + "aliases": [ + "/2019/08/icymi-powershell-week-of-23-august-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-08-30-a-better-way-to-search-events/", + "aliases": [ + "/2019/08/a-better-way-to-search-events/" + ], + "draft": false, + "authors": [ + "tobor79" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2019-08-30-icymi-powershell-week-of-30-august-2019/", + "aliases": [ + "/2019/08/icymi-powershell-week-of-30-august-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-09-03-be-a-speaker-at-powershell-and-devops-global-summit-2020/", + "aliases": [ + "/2019/09/be-a-speaker-at-powershell-and-devops-global-summit-2020/" + ], + "draft": false, + "authors": [ + "Missy Januszko" + ], + "categories": [ + "Announcements", + "Events", + "News", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2019-09-06-icymi-powershell-week-of-6-september-2019/", + "aliases": [ + "/2019/09/icymi-powershell-week-of-6-september-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-09-12-the-ternary-cometh/", + "aliases": [ + "/2019/09/the-ternary-cometh/" + ], + "draft": false, + "authors": [ + "Colyn Via" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks", + "Tutorials" + ], + "tags": [] + }, + { + "route": "/articles/2019-09-13-icymi-powershell-week-of-13-september-2019/", + "aliases": [ + "/2019/09/icymi-powershell-week-of-13-september-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-09-20-icymi-powershell-week-of-20-september-2019/", + "aliases": [ + "/2019/09/icymi-powershell-week-of-20-september-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-09-21-last-call-for-summit-2020-cfp/", + "aliases": [ + "/2019/09/last-call-for-summit-2020-cfp/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "Announcements", + "DevOps", + "PowerShell for Admins", + "PowerShell for Developers", + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2019-09-27-icymi-powershell-week-of-27-september-2019/", + "aliases": [ + "/2019/09/icymi-powershell-week-of-27-september-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-10-04-icymi-powershell-week-of-4-october-2019/", + "aliases": [ + "/2019/10/icymi-powershell-week-of-4-october-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-10-11-icymi-powershell-week-of-11-october-2019/", + "aliases": [ + "/2019/10/icymi-powershell-week-of-11-october-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-10-15-2020-conference-recording-changes/", + "aliases": [ + "/2019/10/2020-conference-recording-changes/" + ], + "draft": false, + "authors": [ + "pscookiemonster" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2019-10-18-/", + "aliases": [], + "draft": true, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2019-10-18-icymi-powershell-week-of-18-october-2019/", + "aliases": [ + "/2019/10/icymi-powershell-week-of-18-october-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-10-25-icymi-powershell-week-of-25-october-2019/", + "aliases": [ + "/2019/10/icymi-powershell-week-of-25-october-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-11-01-icymi-powershell-week-of-1-november-2019/", + "aliases": [ + "/2019/11/icymi-powershell-week-of-1-november-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-11-08-icymi-powershell-week-of-8-november-2019/", + "aliases": [ + "/2019/11/icymi-powershell-week-of-8-november-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-11-15-icymi-powershell-week-of-15-november-2019/", + "aliases": [ + "/2019/11/icymi-powershell-week-of-15-november-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-11-22-icymi-powershell-week-of-22-november-2019/", + "aliases": [ + "/2019/11/icymi-powershell-week-of-22-november-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-11-29-icymi-powershell-week-of-29-november-2019/", + "aliases": [ + "/2019/11/icymi-powershell-week-of-29-november-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-12-06-icymi-powershell-week-of-06-december-2019/", + "aliases": [ + "/2019/12/icymi-powershell-week-of-06-december-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-12-10-the-dsc-book-now-open-source/", + "aliases": [ + "/2019/12/the-dsc-book-now-open-source/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2019-12-13-icymi-powershell-week-of-13-december-2019/", + "aliases": [ + "/2019/12/icymi-powershell-week-of-13-december-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-12-20-icymi-powershell-week-of-20-december-2019/", + "aliases": [ + "/2019/12/icymi-powershell-week-of-20-december-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2019-12-27-icymi-powershell-week-of-28-december-2019/", + "aliases": [ + "/2019/12/icymi-powershell-week-of-28-december-2019/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-01-03-196307-2/", + "aliases": [ + "/2020/01/196307-2/" + ], + "draft": false, + "authors": [ + "Eric Brookman (scriptingcaveman)" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2020-01-03-icymi-powershell-week-of-03-january-2020/", + "aliases": [ + "/2020/01/icymi-powershell-week-of-03-january-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-01-10-icymi-powershell-week-of-10-january-2020/", + "aliases": [ + "/2020/01/icymi-powershell-week-of-10-january-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-01-17-icymi-powershell-week-of-16-january-2020/", + "aliases": [ + "/2020/01/icymi-powershell-week-of-16-january-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-01-22-book-shell-of-an-idea-the-untold-history-of-powershell/", + "aliases": [ + "/2020/01/book-shell-of-an-idea-the-untold-history-of-powershell/" + ], + "draft": false, + "authors": [ + "Don Jones" + ], + "categories": [ + "Books" + ], + "tags": [] + }, + { + "route": "/articles/2020-01-24-icymi-powershell-week-of-24-january-2020/", + "aliases": [ + "/2020/01/icymi-powershell-week-of-24-january-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-01-27-/", + "aliases": [], + "draft": true, + "authors": [ + "adazlian12" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [] + }, + { + "route": "/articles/2020-01-31-icymi-powershell-week-of-31-january-2020/", + "aliases": [ + "/2020/01/icymi-powershell-week-of-31-january-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-02-07-icymi-powershell-week-of-07-february-2020/", + "aliases": [ + "/2020/02/icymi-powershell-week-of-07-february-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-02-14-icymi-powershell-week-of-14-february-2020/", + "aliases": [ + "/2020/02/icymi-powershell-week-of-14-february-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-02-21-icymi-powershell-week-of-21-february-2020/", + "aliases": [ + "/2020/02/icymi-powershell-week-of-21-february-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-02-28-icymi-powershell-week-of-28-february-2020/", + "aliases": [ + "/2020/02/icymi-powershell-week-of-28-february-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-03-05-10-tips-for-powershell-summit-presenters/", + "aliases": [ + "/2020/03/10-tips-for-powershell-summit-presenters/" + ], + "draft": false, + "authors": [ + "Mike Kanakos" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [] + }, + { + "route": "/articles/2020-03-06-icymi-powershell-week-of-06-march-2020/", + "aliases": [ + "/2020/03/icymi-powershell-week-of-06-march-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-03-11-not-so-intutive-powershell-behavior/", + "aliases": [ + "/2020/03/not-so-intutive-powershell-behavior/" + ], + "draft": false, + "authors": [ + "tobor79" + ], + "categories": [ + "Tips and Tricks" + ], + "tags": [] + }, + { + "route": "/articles/2020-03-13-icymi-powershell-week-of-13-march-2020/", + "aliases": [ + "/2020/03/icymi-powershell-week-of-13-march-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-03-20-icymi-powershell-week-of-20-march-2020/", + "aliases": [ + "/2020/03/icymi-powershell-week-of-20-march-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-03-21-powershell-conference-book-volume-3-call-for-authors/", + "aliases": [ + "/2020/03/powershell-conference-book-volume-3-call-for-authors/" + ], + "draft": false, + "authors": [ + "Mark Kraus (markekraus)" + ], + "categories": [ + "Announcements", + "Books" + ], + "tags": [] + }, + { + "route": "/articles/2020-03-27-icymi-powershell-week-of-27-march-2020/", + "aliases": [ + "/2020/03/icymi-powershell-week-of-27-march-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-04-03-icymi-powershell-week-of-03-april-2020/", + "aliases": [ + "/2020/04/icymi-powershell-week-of-03-april-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-04-10-icymi-powershell-week-of-10-april-2020/", + "aliases": [ + "/2020/04/icymi-powershell-week-of-10-april-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-04-17-icymi-powershell-week-of-17-april-2020/", + "aliases": [ + "/2020/04/icymi-powershell-week-of-17-april-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-04-24-icymi-powershell-week-of-24-april-2020/", + "aliases": [ + "/2020/04/icymi-powershell-week-of-24-april-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-05-01-icymi-powershell-week-of-01-may-2020/", + "aliases": [ + "/2020/05/icymi-powershell-week-of-01-may-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-05-01-icymi-powershell-week-of-03-april-2020-2/", + "aliases": [ + "/2020/05/icymi-powershell-week-of-03-april-2020-2/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-05-08-icymi-powershell-week-of-08-may-2020/", + "aliases": [ + "/2020/05/icymi-powershell-week-of-08-may-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-05-15-icymi-powershell-week-of-15-may-2020/", + "aliases": [ + "/2020/05/icymi-powershell-week-of-15-may-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-05-22-icymi-powershell-week-of-22-may-2020/", + "aliases": [ + "/2020/05/icymi-powershell-week-of-22-may-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-05-29-icymi-powershell-week-of-29-may-2020/", + "aliases": [ + "/2020/05/icymi-powershell-week-of-29-may-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-06-07-iron-scripter-learn-powershell-through-code-challenges/", + "aliases": [ + "/2020/06/iron-scripter-learn-powershell-through-code-challenges/" + ], + "draft": false, + "authors": [ + "Mike Kanakos" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks", + "Training" + ], + "tags": [ + "Iron Scripter", + "Code Challenges", + "Learning" + ] + }, + { + "route": "/articles/2020-06-12-icymi-powershell-week-of-12-june-2020/", + "aliases": [ + "/2020/06/icymi-powershell-week-of-12-june-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-06-16-a-new-home-for-plaster/", + "aliases": [ + "/2020/06/a-new-home-for-plaster/" + ], + "draft": false, + "authors": [ + "Jeffery Hicks" + ], + "categories": [ + "Announcements", + "PowerShell for Admins", + "PowerShell for Developers", + "Tools" + ], + "tags": [ + "Plaster", + "Modules", + "Community" + ] + }, + { + "route": "/articles/2020-06-17-simple-powershell-gui/", + "aliases": [ + "/2020/06/simple-powershell-gui/" + ], + "draft": false, + "authors": [ + "n2501r" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks", + "Tools", + "Tutorials" + ], + "tags": [ + "GUI", + "Automation" + ] + }, + { + "route": "/articles/2020-06-19-icymi-powershell-week-of-19-june-2020/", + "aliases": [ + "/2020/06/icymi-powershell-week-of-19-june-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-06-26-icymi-powershell-week-of-26-june-2020/", + "aliases": [ + "/2020/06/icymi-powershell-week-of-26-june-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-06-30-manage-citrix-tags-with-powershell/", + "aliases": [ + "/2020/06/manage-citrix-tags-with-powershell/" + ], + "draft": false, + "authors": [ + "n2501r" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [ + "Citrix", + "Automation" + ] + }, + { + "route": "/articles/2020-07-03-icymi-powershell-week-of-03-july-2020/", + "aliases": [ + "/2020/07/icymi-powershell-week-of-03-july-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-07-10-icymi-powershell-week-of-10-july-2020/", + "aliases": [ + "/2020/07/icymi-powershell-week-of-10-july-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-07-17-icymi-powershell-week-of-17-july-2020/", + "aliases": [ + "/2020/07/icymi-powershell-week-of-17-july-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-07-24-icymi-powershell-week-of-24-july-2020/", + "aliases": [ + "/2020/07/icymi-powershell-week-of-24-july-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-07-27-creating-a-powershell-module-to-improve-your-code/", + "aliases": [ + "/2020/07/creating-a-powershell-module-to-improve-your-code/" + ], + "draft": false, + "authors": [ + "n2501r" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks", + "Tutorials" + ], + "tags": [ + "Modules", + "SQL", + "Best Practices" + ] + }, + { + "route": "/articles/2020-07-31-icymi-powershell-week-of-31-july-2020/", + "aliases": [ + "/2020/07/icymi-powershell-week-of-31-july-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-08-07-icymi-powershell-week-of-07-august-2020/", + "aliases": [ + "/2020/08/icymi-powershell-week-of-07-august-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-08-14-icymi-powershell-week-of-14-august-2020/", + "aliases": [ + "/2020/08/icymi-powershell-week-of-14-august-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-08-17-/", + "aliases": [], + "draft": true, + "authors": [ + "pwshliquori" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "Azure DevOps", + "CI/CD", + "REST API" + ] + }, + { + "route": "/articles/2020-08-21-icymi-powershell-week-of-21-august-2020/", + "aliases": [ + "/2020/08/icymi-powershell-week-of-21-august-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-08-27-psconfbook-vol3/", + "aliases": [ + "/2020/08/psconfbook-vol3/" + ], + "draft": false, + "authors": [ + "Mike Kanakos" + ], + "categories": [ + "Announcements", + "Books", + "News" + ], + "tags": [ + "Books", + "Community" + ] + }, + { + "route": "/articles/2020-08-28-icymi-powershell-week-of-28-august-2020/", + "aliases": [ + "/2020/08/icymi-powershell-week-of-28-august-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-08-31-netneighbor-watch-the-powershell-alternative-to-arpwatch/", + "aliases": [ + "/2020/08/netneighbor-watch-the-powershell-alternative-to-arpwatch/" + ], + "draft": false, + "authors": [ + "n2501r" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks", + "Tools", + "Tutorials" + ], + "tags": [ + "Networking", + "Raspberry Pi", + "Security" + ] + }, + { + "route": "/articles/2020-09-04-icymi-powershell-week-of-04-september-2020/", + "aliases": [ + "/2020/09/icymi-powershell-week-of-04-september-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-09-11-icymi-powershell-week-of-11-september-2020/", + "aliases": [ + "/2020/09/icymi-powershell-week-of-11-september-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-09-18-icymi-powershell-week-of-18-september-2020/", + "aliases": [ + "/2020/09/icymi-powershell-week-of-18-september-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-10-02-icymi-powershell-week-of-02-october-2020/", + "aliases": [ + "/2020/10/icymi-powershell-week-of-02-october-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-10-09-icymi-powershell-week-of-09-october-2020/", + "aliases": [ + "/2020/10/icymi-powershell-week-of-09-october-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-10-16-icymi-powershell-week-of-16-october-2020/", + "aliases": [ + "/2020/10/icymi-powershell-week-of-16-october-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-10-23-icymi-powershell-week-of-23-october-2020/", + "aliases": [ + "/2020/10/icymi-powershell-week-of-23-october-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-10-30-icymi-powershell-week-of-30-october-2020/", + "aliases": [ + "/2020/10/icymi-powershell-week-of-30-october-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-11-03-the-return-of-the-powershell-devops-global-summit/", + "aliases": [ + "/2020/11/the-return-of-the-powershell-devops-global-summit/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "Announcements", + "DevOps", + "PowerShell for Admins", + "PowerShell Summit" + ], + "tags": [ + "PowerShell Summit" + ] + }, + { + "route": "/articles/2020-11-05-writing-your-own-powershell-functions-cmdlets/", + "aliases": [ + "/2020/11/writing-your-own-powershell-functions-cmdlets/" + ], + "draft": false, + "authors": [ + "tobor79" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "Functions", + "Modules", + "Comment-Based Help", + "Best Practices" + ] + }, + { + "route": "/articles/2020-11-06-icymi-powershell-week-of-06-november-2020/", + "aliases": [ + "/2020/11/icymi-powershell-week-of-06-november-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-11-13-icymi-powershell-week-of-13-november-2020/", + "aliases": [ + "/2020/11/icymi-powershell-week-of-13-november-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-11-20-icymi-powershell-week-of-20-november-2020/", + "aliases": [ + "/2020/11/icymi-powershell-week-of-20-november-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-11-29-update-2021-powershell-devops-global-summit/", + "aliases": [ + "/2020/11/update-2021-powershell-devops-global-summit/" + ], + "draft": false, + "authors": [ + "Mike Kanakos" + ], + "categories": [ + "Announcements", + "PowerShell Summit" + ], + "tags": [ + "PowerShell Summit" + ] + }, + { + "route": "/articles/2020-12-04-icymi-powershell-week-of-27-november-2020-04-december-2020/", + "aliases": [ + "/2020/12/icymi-powershell-week-of-27-november-2020-04-december-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-12-11-icymi-powershell-week-of-11-december-2020/", + "aliases": [ + "/2020/12/icymi-powershell-week-of-11-december-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-12-16-media-sync-organize-your-photos-and-videos-with-powershell/", + "aliases": [ + "/2020/12/media-sync-organize-your-photos-and-videos-with-powershell/" + ], + "draft": false, + "authors": [ + "n2501r" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks", + "Tools", + "Tutorials" + ], + "tags": [ + "File Management", + "GUI", + "Automation" + ] + }, + { + "route": "/articles/2020-12-18-icymi-powershell-week-of-18-december-2020/", + "aliases": [ + "/2020/12/icymi-powershell-week-of-18-december-2020/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2020-12-20-pshsummit2021-call-for-speakers/", + "aliases": [ + "/2020/12/pshsummit2021-call-for-speakers/" + ], + "draft": false, + "authors": [ + "Mike Kanakos" + ], + "categories": [ + "Announcements", + "Events", + "News", + "PowerShell Summit" + ], + "tags": [ + "PowerShell Summit", + "Call for Speakers" + ] + }, + { + "route": "/articles/2021-01-08-icymi-powershell-week-of-08-january-2021/", + "aliases": [ + "/2021/01/icymi-powershell-week-of-08-january-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-01-15-icymi-powershell-week-of-15-january-2021/", + "aliases": [ + "/2021/01/icymi-powershell-week-of-15-january-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-01-22-icymi-powershell-week-of-22-january-2021/", + "aliases": [ + "/2021/01/icymi-powershell-week-of-22-january-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-01-29-icymi-powershell-week-of-29-january-2021/", + "aliases": [ + "/2021/01/icymi-powershell-week-of-29-january-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-02-12-icymi-powershell-week-of-12-february-2021/", + "aliases": [ + "/2021/02/icymi-powershell-week-of-12-february-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-03-01-icymi-powershell-week-of-26-february-2021/", + "aliases": [ + "/2021/03/icymi-powershell-week-of-26-february-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-03-02-summit-lightning-demos/", + "aliases": [ + "/2021/03/summit-lightning-demos/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [ + "PowerShell Summit", + "Lightning Demos" + ] + }, + { + "route": "/articles/2021-03-02-website-forum-updates/", + "aliases": [ + "/2021/03/website-forum-updates/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "Announcements" + ], + "tags": [ + "Community", + "Website" + ] + }, + { + "route": "/articles/2021-03-05-icymi-powershell-week-of-05-march-2021/", + "aliases": [ + "/2021/03/icymi-powershell-week-of-05-march-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It", + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-03-11-call-for-authors-and-editors/", + "aliases": [ + "/2021/03/call-for-authors-and-editors/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "Announcements", + "DevOps" + ], + "tags": [ + "Community", + "Call for Authors" + ] + }, + { + "route": "/articles/2021-03-12-icymi-powershell-week-of-12-march-2021/", + "aliases": [ + "/2021/03/icymi-powershell-week-of-12-march-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-03-15-last-call-for-summit-lightning-demos/", + "aliases": [ + "/2021/03/last-call-for-summit-lightning-demos/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "Announcements", + "Events", + "PowerShell Summit" + ], + "tags": [ + "PowerShell Summit", + "Lightning Demos" + ] + }, + { + "route": "/articles/2021-03-19-icymi-powershell-week-of-19-march-2021/", + "aliases": [ + "/2021/03/icymi-powershell-week-of-19-march-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-03-26-icymi-powershell-week-of-26-march-2021/", + "aliases": [ + "/2021/03/icymi-powershell-week-of-26-march-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-04-02-icymi-powershell-week-of-02-april-2021/", + "aliases": [ + "/2021/04/icymi-powershell-week-of-02-april-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It", + "PowerShell for Admins", + "PowerShell for Developers", + "Tips and Tricks" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-04-09-icymi-powershell-week-of-09-april-2021/", + "aliases": [ + "/2021/04/icymi-powershell-week-of-09-april-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It", + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-04-17-icymi-powershell-week-of-16-april-2021/", + "aliases": [ + "/2021/04/icymi-powershell-week-of-16-april-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It", + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-04-23-icymi-powershell-week-of-23-april-2021/", + "aliases": [ + "/2021/04/icymi-powershell-week-of-23-april-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-04-26-live-shows-powershell-devops-global-summit/", + "aliases": [ + "/2021/04/live-shows-powershell-devops-global-summit/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "Announcements" + ], + "tags": [ + "PowerShell Summit", + "Community" + ] + }, + { + "route": "/articles/2021-04-30-icymi-powershell-week-of-30-april-2021/", + "aliases": [ + "/2021/04/icymi-powershell-week-of-30-april-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-05-05-automation-summit/", + "aliases": [ + "/2021/05/meet-the-automation-summit-team/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "Announcements", + "DevOps", + "Events" + ], + "tags": [ + "Automation Summit" + ] + }, + { + "route": "/articles/2021-05-21-icymi-powershell-week-of-21-may-2021/", + "aliases": [ + "/2021/05/icymi-powershell-week-of-21-may-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-05-28-icymi-powershell-week-of-28-may-2021/", + "aliases": [ + "/2021/05/icymi-powershell-week-of-28-may-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-06-04-icymi-powershell-week-of-04-june-2021/", + "aliases": [ + "/2021/06/icymi-powershell-week-of-04-june-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-06-11-icymi-powershell-week-of-11-june-2021/", + "aliases": [ + "/2021/06/icymi-powershell-week-of-11-june-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It", + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-06-18-icymi-powershell-week-of-18-june-2021/", + "aliases": [ + "/2021/06/icymi-powershell-week-of-18-june-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It", + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-07-02-icymi-powershell-week-of-02-july-2021/", + "aliases": [ + "/2021/07/icymi-powershell-week-of-02-july-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-07-08-so-you-want-to-start-a-user-group/", + "aliases": [ + "/2021/07/so-you-want-to-start-a-user-group/" + ], + "draft": false, + "authors": [ + "Ryan Yates" + ], + "categories": [ + "PowerShell for Admins", + "Tips and Tricks" + ], + "tags": [ + "User Groups", + "Community" + ] + }, + { + "route": "/articles/2021-07-09-icymi-powershell-week-of-09-july-2021/", + "aliases": [ + "/2021/07/icymi-powershell-week-of-09-july-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-07-16-icymi-powershell-week-of-16-july-2021/", + "aliases": [ + "/2021/07/icymi-powershell-week-of-16-july-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-09-03-icymi-powershell-week-of-03-september-2021/", + "aliases": [ + "/2021/09/icymi-powershell-week-of-03-september-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-09-20-automation-summit-going-virtual-and-new-date/", + "aliases": [ + "/2021/09/automation-summit-going-virtual-and-new-date/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "Announcements", + "Events", + "PowerShell Summit" + ], + "tags": [ + "Automation Summit" + ] + }, + { + "route": "/articles/2021-10-02-powershell-devops-global-summit-2022-update/", + "aliases": [ + "/2021/10/powershell-devops-global-summit-2022-update/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [ + "PowerShell Summit" + ] + }, + { + "route": "/articles/2021-10-08-icymi-powershell-week-of-08-october-2021/", + "aliases": [ + "/2021/10/icymi-powershell-week-of-08-october-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It", + "PowerShell for Admins", + "PowerShell for Developers" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-10-12-what-makes-a-great-submission-for-summit/", + "aliases": [ + "/2021/10/what-makes-a-great-submission-for-summit/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [ + "PowerShell Summit", + "Call for Speakers" + ] + }, + { + "route": "/articles/2021-10-22-icymi-powershell-week-of-22-october-2021/", + "aliases": [ + "/2021/10/icymi-powershell-week-of-22-october-2021/" + ], + "draft": false, + "authors": [ + "Robin Dadswell" + ], + "categories": [ + "In Case You Missed It" + ], + "tags": [ + "ICYMI", + "Community", + "Weekly Roundup" + ] + }, + { + "route": "/articles/2021-12-17-2022-it-onramp-scholarship-information-application/", + "aliases": [ + "/2021/12/2022-it-onramp-scholarship-information-application/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "Announcements" + ], + "tags": [ + "OnRamp", + "PowerShell Summit", + "Scholarships" + ] + }, + { + "route": "/articles/2021-12-28-2022-powershell-devops-global-summit-covid-survey/", + "aliases": [ + "/2021/12/2022-powershell-devops-global-summit-covid-survey/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "Events" + ], + "tags": [ + "PowerShell Summit" + ] + }, + { + "route": "/articles/2022-04-30-powershell-devops-global-summit-a-first-timers-perspective/", + "aliases": [ + "/2022/04/powershell-devops-global-summit-a-first-timers-perspective/" + ], + "draft": true, + "authors": [ + "Chris Martin" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [ + "PowerShell Summit", + "Community" + ] + }, + { + "route": "/articles/2022-07-28-learn-powershell-in-5-painless-steps-decisions-if-else-switch-function-step-5/", + "aliases": [ + "/2022/07/learn-powershell-in-5-painless-steps-decisions-if-else-switch-function-step-5/" + ], + "draft": false, + "authors": [ + "Cole McDonald" + ], + "categories": [ + "Tutorials" + ], + "tags": [ + "Beginner", + "Functions", + "Tutorial" + ] + }, + { + "route": "/articles/2022-07-28-learn-powershell-in-5-painless-steps-input-console-file-applications-step-3/", + "aliases": [ + "/2022/07/learn-powershell-in-5-painless-steps-input-console-file-applications-step-3/" + ], + "draft": false, + "authors": [ + "Cole McDonald" + ], + "categories": [ + "Tutorials" + ], + "tags": [ + "Beginner", + "Input", + "Tutorial" + ] + }, + { + "route": "/articles/2022-07-28-learn-powershell-in-5-painless-steps-loops-foreach-for-while-step-4/", + "aliases": [ + "/2022/07/learn-powershell-in-5-painless-steps-loops-foreach-for-while-step-4/" + ], + "draft": false, + "authors": [ + "Cole McDonald" + ], + "categories": [ + "Tutorials" + ], + "tags": [ + "Beginner", + "Loops", + "Tutorial" + ] + }, + { + "route": "/articles/2022-07-28-learn-powershell-in-5-painless-steps-output-console-file-xml-csv-step-2/", + "aliases": [ + "/2022/07/learn-powershell-in-5-painless-steps-output-console-file-xml-csv-step-2/" + ], + "draft": false, + "authors": [ + "Cole McDonald" + ], + "categories": [ + "Tutorials" + ], + "tags": [ + "Beginner", + "Output", + "Tutorial" + ] + }, + { + "route": "/articles/2022-07-28-learn-powershell-in-5-painless-steps-storage-variables-arrays-hashtables-step-1/", + "aliases": [ + "/2022/07/learn-powershell-in-5-painless-steps-storage-variables-arrays-hashtables-step-1/" + ], + "draft": false, + "authors": [ + "Cole McDonald" + ], + "categories": [ + "Tutorials" + ], + "tags": [ + "Beginner", + "Variables", + "Tutorial" + ] + }, + { + "route": "/articles/2022-07-28-on-to-the-future-with-powershell/", + "aliases": [ + "/2022/07/on-to-the-future-with-powershell/" + ], + "draft": false, + "authors": [ + "Cole McDonald" + ], + "categories": [ + "Tutorials" + ], + "tags": [ + "Beginner", + "DevOps", + "Tutorial" + ] + }, + { + "route": "/articles/2022-11-30-powershell-devops-global-summit-2023/", + "aliases": [ + "/2022/11/powershell-devops-global-summit-2023/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "Announcements", + "Events", + "PowerShell Summit" + ], + "tags": [ + "PowerShell Summit" + ] + }, + { + "route": "/articles/2023-02-17-powershell-summit-then-now/", + "aliases": [ + "/2023/02/powershell-summit-then-now/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "Announcements", + "Events", + "PowerShell Summit" + ], + "tags": [ + "PowerShell Summit", + "Community" + ] + }, + { + "route": "/articles/2023-05-23-powershell-devops-global-summit-2024/", + "aliases": [ + "/2023/05/powershell-devops-global-summit-2024/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "Announcements", + "Events", + "PowerShell Summit" + ], + "tags": [ + "PowerShell Summit" + ] + }, + { + "route": "/articles/2023-09-15-microsoft-graph-powershell-module-getting-started-guide/", + "aliases": [ + "/2023/09/microsoft-graph-powershell-module-getting-started-guide/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "Graph", + "PowerShell for Admins" + ], + "tags": [ + "Microsoft Graph", + "Microsoft 365", + "Modules", + "Tutorial" + ] + }, + { + "route": "/articles/2023-09-15-powershell-escape-room/", + "aliases": [ + "/2023/09/powershell-escape-room/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "DevOps", + "PowerShell for Admins" + ], + "tags": [ + "Fun", + "Projects" + ] + }, + { + "route": "/articles/2023-10-01-the-powershell-devops-global-summit-cfp-is-open/", + "aliases": [ + "/2023/10/the-powershell-devops-global-summit-cfp-is-open/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [ + "PowerShell Summit", + "Call for Speakers" + ] + }, + { + "route": "/articles/2023-11-20-earlybirdnowopen/", + "aliases": [ + "/2023/11/earlybirdnowopen/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [ + "PowerShell Summit", + "Tickets" + ] + }, + { + "route": "/articles/2023-11-29-onramp2024-program-unveiled/", + "aliases": [ + "/2023/11/onramp2024-program-unveiled/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "Announcements", + "DevOps", + "Events" + ], + "tags": [ + "OnRamp", + "PowerShell Summit" + ] + }, + { + "route": "/articles/2024-03-05-how-to-toggle-logon-restrictions-for-ad-accounts/", + "aliases": [ + "/2024/03/how-to-toggle-logon-restrictions-for-ad-accounts/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "PowerShell for Admins" + ], + "tags": [ + "Active Directory", + "Scripting", + "Security" + ] + }, + { + "route": "/articles/2024-03-08-summit2024-spotlight-steven-judd/", + "aliases": [ + "/2024/03/summit2024-spotlight-steven-judd/" + ], + "draft": false, + "authors": [ + "Mike Kanakos" + ], + "categories": [ + "PowerShell Summit" + ], + "tags": [ + "PowerShell Summit", + "Speaker Spotlight" + ] + }, + { + "route": "/articles/2024-09-30-powershell-devops-global-summit-2025-call-for-papers-now-open/", + "aliases": [ + "/2024/09/powershell-devops-global-summit-2025-call-for-papers-now-open/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "Announcements", + "DevOps", + "Events" + ], + "tags": [ + "PowerShell Summit", + "Call for Speakers" + ] + }, + { + "route": "/articles/2024-12-02-onramp-scholarship-application-now-open/", + "aliases": [ + "/2024/12/onramp-scholarship-application-now-open/" + ], + "draft": false, + "authors": [ + "James Petty" + ], + "categories": [ + "Announcements" + ], + "tags": [ + "OnRamp", + "PowerShell Summit", + "Scholarships" + ] + }, + { + "route": "/articles/2026-06-23-how-to-write-for-powershell-org/", + "aliases": [], + "draft": false, + "authors": [ + "Gilbert Sanchez" + ], + "categories": [ + "Tutorials" + ], + "tags": [ + "Contributing", + "Community", + "Writing" + ] + }, + { + "route": "/articles/2026-07-24-explore-micrograd-with-verso-and-powershell/", + "aliases": [], + "draft": false, + "authors": [ + "Andrey Vernigora" + ], + "categories": [ + "PowerShell for Developers" + ], + "tags": [ + "powershell", + "verso", + "notebooks", + "automatic-differentiation", + "psgraphview" + ] + }, + { + "route": "/articles/2026-07-24-validate-azure-resource-relationships-with-psrule-and-powershell-graphs/", + "aliases": [], + "draft": false, + "authors": [ + "Andrey Vernigora" + ], + "categories": [ + "DevOps" + ], + "tags": [ + "psrule", + "azure", + "bicep", + "graph", + "infrastructure-as-code" + ] + }, + { + "route": "/articles/2026-08-22-analyze-dependencies-with-psquickgraph-and-psgraphview/", + "aliases": [], + "draft": false, + "authors": [ + "Andrey Vernigora" + ], + "categories": [ + "Graph" + ], + "tags": [ + "powershell", + "psquickgraph", + "psgraphview", + "dependency-graphs", + "graphviz" + ] + }, + { + "route": "/articles/2026-09-03-powershell-can-put-pictures-in-your-terminal-with-sixel/", + "aliases": [], + "draft": false, + "authors": [ + "Andrey Vernigora" + ], + "categories": [ + "Tools" + ], + "tags": [ + "powershell", + "sixel", + "iterm2", + "windows-terminal", + "terminal-graphics" + ] + } +] diff --git a/scripts/validate-article-bundles.mjs b/scripts/validate-article-bundles.mjs new file mode 100755 index 000000000..8d8f20112 --- /dev/null +++ b/scripts/validate-article-bundles.mjs @@ -0,0 +1,111 @@ +#!/usr/bin/env node + +import { existsSync, readdirSync, readFileSync } from 'node:fs'; +import { join, relative, sep } from 'node:path'; + +const contentRoot = 'content/articles'; +const outputRoot = 'public'; +const inventory = JSON.parse(readFileSync('scripts/article-route-inventory.json', 'utf8')); +const failures = []; + +function fail(message) { failures.push(message); } + +function walk(directory) { + return readdirSync(directory, { withFileTypes: true }).flatMap((entry) => { + const path = join(directory, entry.name); + return entry.isDirectory() ? walk(path) : [path]; + }); +} + +function frontMatter(markdown) { + return markdown.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n/)?.[1] ?? ''; +} + +function stringValue(metadata, field) { + return metadata.match(new RegExp(`^${field}:\\s*["']?([^\\n"']+)["']?\\s*$`, 'm'))?.[1].trim(); +} + +function listValues(metadata, field) { + const values = metadata.match(new RegExp(`^${field}:\\s*\\r?\\n((?:\\s{2}- .+\\r?\\n?)*)`, 'm'))?.[1] ?? ''; + return [...values.matchAll(/^\s{2}-\s+(.+)$/gm)].map((value) => value[1].trim()); +} + +function outputFile(route) { return join(outputRoot, route.replace(/^\//, ''), 'index.html'); } +function checkOutput(route, description) { + if (!existsSync(outputFile(route))) fail(`${description} does not render at ${route}`); +} +function includesRoute(html, route) { + return html.includes(`href=${route}`) || html.includes(`href="${route}"`) || html.includes(route); +} +function archiveHtml(route) { + const directory = join(outputRoot, route.replace(/^\//, '')); + const files = [join(directory, 'index.html'), ...(existsSync(join(directory, 'page')) ? walk(join(directory, 'page')).filter((path) => path.endsWith('index.html')) : [])]; + return files.filter(existsSync).map((path) => readFileSync(path, 'utf8')).join('\n'); +} +function urlize(value) { return value.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); } + +const sourceArticles = new Map(); +for (const path of walk(contentRoot).filter((path) => path.endsWith(`${sep}index.md`) && path !== join(contentRoot, '_index.md'))) { + const parts = relative(contentRoot, path).split(sep); + if (parts.length !== 4 || !/^\d{4}$/.test(parts[0]) || !/^\d{2}$/.test(parts[1])) continue; + const markdown = readFileSync(path, 'utf8'); + const metadata = frontMatter(markdown); + const route = stringValue(metadata, 'url'); + if (!route) fail(`Article must declare its preserved dated URL: ${path}`); + else sourceArticles.set(route, { aliases: listValues(metadata, 'aliases'), authors: listValues(metadata, 'authors'), categories: listValues(metadata, 'categories'), tags: listValues(metadata, 'tags'), year: parts[0], month: parts[1], path }); + for (const asset of markdown.matchAll(/\]\((\/images\/articles\/[^)#?]+)/g)) { + if (!existsSync(join(outputRoot, asset[1].replace(/^\//, '')))) fail(`Referenced static asset is missing: ${asset[1]} (${path})`); + } +} + +const inventoryByRoute = new Map(inventory.map((article) => [article.route, article])); +for (const route of sourceArticles.keys()) if (!inventoryByRoute.has(route)) fail(`Unexpected Article route: ${route}`); +for (const article of inventory) { + const source = sourceArticles.get(article.route); + if (!source) { fail(`Missing migrated Article for preserved route: ${article.route}`); continue; } + if (article.aliases.some((alias) => !source.aliases.includes(alias))) fail(`Article aliases changed: ${article.route}`); + for (const field of ['authors', 'categories', 'tags']) if (JSON.stringify(source[field]) !== JSON.stringify(article[field])) fail(`Article ${field} changed: ${article.route}`); + if (article.draft) continue; + checkOutput(article.route, `Article ${source.path}`); + for (const alias of article.aliases) { + checkOutput(alias, `Alias for ${source.path}`); + if (existsSync(outputFile(alias)) && !readFileSync(outputFile(alias), 'utf8').includes(article.route)) fail(`Alias does not redirect to its Article: ${alias}`); + } +} + +const articleOutput = join(outputRoot, 'articles'); +const listingHtml = archiveHtml('/articles/'); +for (const article of inventory.filter((article) => !article.draft)) { + if (!includesRoute(listingHtml, article.route)) fail(`Article is missing from the paginated Articles archive: ${article.route}`); + for (const [taxonomy, terms] of Object.entries({ authors: article.authors, categories: article.categories, tags: article.tags })) { + for (const term of terms) if (!includesRoute(archiveHtml(`/${taxonomy}/${urlize(term)}/`), article.route)) fail(`Article is missing from ${taxonomy} term ${term}: ${article.route}`); + } +} + +for (const year of readdirSync(contentRoot, { withFileTypes: true }).filter((entry) => entry.isDirectory())) { + const yearRoute = `/articles/${year.name}/`; + if (!existsSync(join(contentRoot, year.name, '_index.md'))) fail(`Year branch is missing _index.md: ${year.name}`); + else checkOutput(yearRoute, `Year archive ${year.name}`); + const yearHtml = archiveHtml(yearRoute); + for (const [route, source] of sourceArticles) if (source.year === year.name && !inventoryByRoute.get(route).draft && !includesRoute(yearHtml, route)) fail(`Article is missing from its year archive: ${route}`); + for (const month of readdirSync(join(contentRoot, year.name), { withFileTypes: true }).filter((entry) => entry.isDirectory())) { + const monthRoute = `${yearRoute}${month.name}/`; + if (!existsSync(join(contentRoot, year.name, month.name, '_index.md'))) fail(`Month branch is missing _index.md: ${year.name}/${month.name}`); + else checkOutput(monthRoute, `Month archive ${year.name}/${month.name}`); + const monthHtml = archiveHtml(monthRoute); + for (const [route, source] of sourceArticles) if (source.year === year.name && source.month === month.name && !inventoryByRoute.get(route).draft && !includesRoute(monthHtml, route)) fail(`Article is missing from its month archive: ${route}`); + } +} + +const feedPath = join(articleOutput, 'index.xml'); +if (!existsSync(feedPath)) fail('Articles RSS feed is missing'); +else { + const feed = readFileSync(feedPath, 'utf8'); + for (const article of inventory.filter((article) => !article.draft)) if (!feed.includes(article.route)) fail(`Article is missing from the Articles RSS feed: ${article.route}`); +} + +if (failures.length) { + console.error(`Article bundle contract failed (${failures.length}):`); + for (const message of failures) console.error(`- ${message}`); + process.exitCode = 1; +} else console.log('Article bundle contract passed'); diff --git a/themes/powershell-community/layouts/_default/list.html b/themes/powershell-community/layouts/_default/list.html index 8102cf96a..486a40516 100644 --- a/themes/powershell-community/layouts/_default/list.html +++ b/themes/powershell-community/layouts/_default/list.html @@ -31,7 +31,7 @@